import os import zipfile from huggingface_hub import login import torch from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel, PeftConfig # 🔹 گرفتن توکن hf_token = os.environ.get("HF_TOKEN") if not hf_token: raise ValueError("❌ HF_TOKEN not found in environment secrets.") # 🔹 لاگین login(hf_token) # 🔹 مسیرها LORA_ZIP_PATH = "dorna-diabetes-finetuned-20250514T183411Z-1-001.zip" LORA_PATH = "dorna-diabetes-finetuned" BASE_MODEL = "PartAI/Dorna-Llama3-8B-Instruct" # ✅ اکسترکت if not os.path.exists(LORA_PATH): with zipfile.ZipFile(LORA_ZIP_PATH, "r") as zip_ref: zip_ref.extractall(LORA_PATH) print("✅ فایل LoRA اکسترکت شد.") # ✅ تغییر نام 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("🔹 در حال بارگذاری مدل پایه...") base_model = AutoModelForCausalLM.from_pretrained( BASE_MODEL, device_map="auto", trust_remote_code=True, token=hf_token ) # ✅ بارگذاری LoRA روی مدل پایه print("🔹 در حال بارگذاری LoRA...") model = PeftModel.from_pretrained(base_model, LORA_PATH) model.eval() # ✅ توکنایزر tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) 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)