Spaces:
Runtime error
Runtime error
import os | |
import zipfile | |
from huggingface_hub import login | |
import torch | |
from transformers import AutoTokenizer | |
from peft import AutoPeftModelForCausalLM | |
# 🔹 گرفتن توکن از محیط | |
hf_token = os.environ.get("HF_TOKEN") | |
if not hf_token: | |
raise ValueError("❌ HF_TOKEN not found in environment secrets.") | |
# 🔹 لاگین به HuggingFace | |
login(hf_token) | |
# 🔹 مسیر فایل زیپ | |
LORA_ZIP_PATH = "dorna-diabetes-finetuned-20250514T183411Z-1-001.zip" | |
EXTRACT_DIR = "lora" # پوشهای که فایلها داخلش اکسترکت میشن | |
# ✅ اکسترکت فایل ZIP در صورت نیاز | |
if not os.path.exists(EXTRACT_DIR): | |
with zipfile.ZipFile(LORA_ZIP_PATH, 'r') as zip_ref: | |
zip_ref.extractall(EXTRACT_DIR) | |
print("✅ فایل LoRA اکسترکت شد.") | |
# ✅ پیدا کردن مسیر فولدر واقعی شامل adapter_config.json | |
# معمولاً zip یک زیرپوشه میسازه داخل خودش | |
for root, dirs, files in os.walk(EXTRACT_DIR): | |
if "adapter_config.json" in files: | |
LORA_PATH = root | |
break | |
else: | |
raise FileNotFoundError("❌ adapter_config.json در هیچ زیرپوشهای یافت نشد.") | |
# ✅ تغییر نام فایل .safetensors به adapter_model.safetensors اگر لازم بود | |
for filename in os.listdir(LORA_PATH): | |
if filename.endswith(".safetensors") and filename != "adapter_model.safetensors": | |
os.rename( | |
os.path.join(LORA_PATH, filename), | |
os.path.join(LORA_PATH, "adapter_model.safetensors") | |
) | |
print("✅ اسم فایل تغییر کرد.") | |
break | |
# 🔹 بارگذاری مدل و توکنایزر | |
print("🔹 در حال بارگذاری مدل پایه + LoRA...") | |
model = AutoPeftModelForCausalLM.from_pretrained( | |
LORA_PATH, | |
torch_dtype=torch.float16, | |
low_cpu_mem_usage=True, | |
device_map="auto", | |
token=hf_token, | |
trust_remote_code=True | |
) | |
tokenizer = AutoTokenizer.from_pretrained( | |
model.base_model.config._name_or_path, | |
token=hf_token, | |
trust_remote_code=True | |
) | |
print("✅ مدل و توکنایزر با موفقیت بارگذاری شدند.") | |
while True: | |
prompt = input("📝 یک دستور وارد کن (exit برای خروج): ") | |
if prompt.lower() == "exit": | |
break | |
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) | |
outputs = model.generate(**inputs, max_new_tokens=200) | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
print("🧠 پاسخ:", response) |