Spaces:
Runtime error
Runtime error
Upload app.py
Browse files
app.py
CHANGED
@@ -2,37 +2,29 @@ import os
|
|
2 |
import zipfile
|
3 |
from huggingface_hub import login
|
4 |
import torch
|
5 |
-
from transformers import AutoTokenizer
|
6 |
-
from peft import
|
7 |
|
8 |
-
# 🔹 گرفتن توکن
|
9 |
hf_token = os.environ.get("HF_TOKEN")
|
10 |
if not hf_token:
|
11 |
raise ValueError("❌ HF_TOKEN not found in environment secrets.")
|
12 |
|
13 |
-
# 🔹 لاگین
|
14 |
login(hf_token)
|
15 |
|
16 |
-
# 🔹
|
17 |
LORA_ZIP_PATH = "dorna-diabetes-finetuned-20250514T183411Z-1-001.zip"
|
18 |
-
|
|
|
19 |
|
20 |
-
# ✅ اکسترکت
|
21 |
-
if not os.path.exists(
|
22 |
-
with zipfile.ZipFile(LORA_ZIP_PATH,
|
23 |
-
zip_ref.extractall(
|
24 |
print("✅ فایل LoRA اکسترکت شد.")
|
25 |
|
26 |
-
# ✅
|
27 |
-
# معمولاً zip یک زیرپوشه میسازه داخل خودش
|
28 |
-
for root, dirs, files in os.walk(EXTRACT_DIR):
|
29 |
-
if "adapter_config.json" in files:
|
30 |
-
LORA_PATH = root
|
31 |
-
break
|
32 |
-
else:
|
33 |
-
raise FileNotFoundError("❌ adapter_config.json در هیچ زیرپوشهای یافت نشد.")
|
34 |
-
|
35 |
-
# ✅ تغییر نام فایل .safetensors به adapter_model.safetensors اگر لازم بود
|
36 |
for filename in os.listdir(LORA_PATH):
|
37 |
if filename.endswith(".safetensors") and filename != "adapter_model.safetensors":
|
38 |
os.rename(
|
@@ -42,26 +34,28 @@ for filename in os.listdir(LORA_PATH):
|
|
42 |
print("✅ اسم فایل تغییر کرد.")
|
43 |
break
|
44 |
|
45 |
-
#
|
46 |
-
print("🔹 در حال بارگذاری مدل
|
47 |
-
|
48 |
-
|
49 |
-
LORA_PATH,
|
50 |
-
torch_dtype=torch.float16,
|
51 |
-
low_cpu_mem_usage=True,
|
52 |
device_map="auto",
|
53 |
-
|
54 |
-
|
|
|
|
|
55 |
)
|
56 |
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
|
|
|
|
62 |
|
63 |
print("✅ مدل و توکنایزر با موفقیت بارگذاری شدند.")
|
64 |
|
|
|
65 |
while True:
|
66 |
prompt = input("📝 یک دستور وارد کن (exit برای خروج): ")
|
67 |
if prompt.lower() == "exit":
|
@@ -69,4 +63,4 @@ while True:
|
|
69 |
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
70 |
outputs = model.generate(**inputs, max_new_tokens=200)
|
71 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
72 |
-
print("🧠 پاسخ:", response)
|
|
|
2 |
import zipfile
|
3 |
from huggingface_hub import login
|
4 |
import torch
|
5 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM
|
6 |
+
from peft import PeftModel, PeftConfig
|
7 |
|
8 |
+
# 🔹 گرفتن توکن
|
9 |
hf_token = os.environ.get("HF_TOKEN")
|
10 |
if not hf_token:
|
11 |
raise ValueError("❌ HF_TOKEN not found in environment secrets.")
|
12 |
|
13 |
+
# 🔹 لاگین
|
14 |
login(hf_token)
|
15 |
|
16 |
+
# 🔹 مسیرها
|
17 |
LORA_ZIP_PATH = "dorna-diabetes-finetuned-20250514T183411Z-1-001.zip"
|
18 |
+
LORA_PATH = "dorna-diabetes-finetuned"
|
19 |
+
BASE_MODEL = "PartAI/Dorna-Llama3-8B-Instruct"
|
20 |
|
21 |
+
# ✅ اکسترکت
|
22 |
+
if not os.path.exists(LORA_PATH):
|
23 |
+
with zipfile.ZipFile(LORA_ZIP_PATH, "r") as zip_ref:
|
24 |
+
zip_ref.extractall(LORA_PATH)
|
25 |
print("✅ فایل LoRA اکسترکت شد.")
|
26 |
|
27 |
+
# ✅ تغییر نام safetensors به adapter_model.safetensors
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
for filename in os.listdir(LORA_PATH):
|
29 |
if filename.endswith(".safetensors") and filename != "adapter_model.safetensors":
|
30 |
os.rename(
|
|
|
34 |
print("✅ اسم فایل تغییر کرد.")
|
35 |
break
|
36 |
|
37 |
+
# ✅ بارگذاری مدل پایه
|
38 |
+
print("🔹 در حال بارگذاری مدل پایه...")
|
39 |
+
base_model = AutoModelForCausalLM.from_pretrained(
|
40 |
+
BASE_MODEL,
|
|
|
|
|
|
|
41 |
device_map="auto",
|
42 |
+
torch_dtype=torch.float16,
|
43 |
+
load_in_4bit=True,
|
44 |
+
trust_remote_code=True,
|
45 |
+
token=hf_token
|
46 |
)
|
47 |
|
48 |
+
# ✅ بارگذاری LoRA روی مدل پایه
|
49 |
+
print("🔹 در حال بارگذاری LoRA...")
|
50 |
+
model = PeftModel.from_pretrained(base_model, LORA_PATH)
|
51 |
+
model.eval()
|
52 |
+
|
53 |
+
# ✅ توکنایزر
|
54 |
+
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token)
|
55 |
|
56 |
print("✅ مدل و توکنایزر با موفقیت بارگذاری شدند.")
|
57 |
|
58 |
+
# 🧪 تست ساده
|
59 |
while True:
|
60 |
prompt = input("📝 یک دستور وارد کن (exit برای خروج): ")
|
61 |
if prompt.lower() == "exit":
|
|
|
63 |
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
64 |
outputs = model.generate(**inputs, max_new_tokens=200)
|
65 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
66 |
+
print("🧠 پاسخ:", response)
|