rinrikatoki commited on
Commit
ffcffe0
·
verified ·
1 Parent(s): be1a16c

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -35
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 AutoPeftModelForCausalLM
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
- # 🔹 لاگین به HuggingFace
14
  login(hf_token)
15
 
16
- # 🔹 مسیر فایل زیپ
17
  LORA_ZIP_PATH = "dorna-diabetes-finetuned-20250514T183411Z-1-001.zip"
18
- EXTRACT_DIR = "lora" # پوشه‌ای که فایل‌ها داخلش اکسترکت می‌شن
 
19
 
20
- # ✅ اکسترکت فایل ZIP در صورت نیاز
21
- if not os.path.exists(EXTRACT_DIR):
22
- with zipfile.ZipFile(LORA_ZIP_PATH, 'r') as zip_ref:
23
- zip_ref.extractall(EXTRACT_DIR)
24
  print("✅ فایل LoRA اکسترکت شد.")
25
 
26
- # ✅ پیدا کردن مسیر فولدر واقعی شامل adapter_config.json
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("🔹 در حال بارگذاری مدل پایه + LoRA...")
47
-
48
- model = AutoPeftModelForCausalLM.from_pretrained(
49
- LORA_PATH,
50
- torch_dtype=torch.float16,
51
- low_cpu_mem_usage=True,
52
  device_map="auto",
53
- token=hf_token,
54
- trust_remote_code=True
 
 
55
  )
56
 
57
- tokenizer = AutoTokenizer.from_pretrained(
58
- model.base_model.config._name_or_path,
59
- token=hf_token,
60
- trust_remote_code=True
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)