rinrikatoki commited on
Commit
59bc69e
·
verified ·
1 Parent(s): 6f10b33

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -14
app.py CHANGED
@@ -1,42 +1,63 @@
1
- import torch
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
3
- from peft import PeftModel
4
- import gradio as gr
5
  import os
6
  import zipfile
 
 
 
 
 
7
 
 
 
 
 
 
 
 
8
  if os.path.exists("dorna-diabetes-finetuned-20250514T183411Z-1-001.zip") and not os.path.exists("dorna-diabetes-finetuned.zip"):
9
  os.rename("dorna-diabetes-finetuned-20250514T183411Z-1-001.zip", "dorna-diabetes-finetuned.zip")
10
  print("✅ اسم فایل تغییر کرد.")
11
 
 
12
  if not os.path.exists("dorna-diabetes-finetuned"):
13
  with zipfile.ZipFile("dorna-diabetes-finetuned.zip", "r") as zip_ref:
14
  zip_ref.extractall(".")
15
- print("✅ فایل ZIP اکسترکت شد.")
16
 
 
17
  BASE_MODEL = "PartAI/Dorna-Llama3-8B-Instruct"
18
- LORA_PATH = "./dorna-diabetes-finetuned" # این پوشه رو آپلود می‌کنی توی اسپیس
19
-
20
- tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
21
 
 
 
22
  base_model = AutoModelForCausalLM.from_pretrained(
23
  BASE_MODEL,
24
- device_map="auto",
25
  torch_dtype=torch.float16,
 
 
 
26
  )
27
 
 
28
  model = PeftModel.from_pretrained(base_model, LORA_PATH)
 
 
 
29
 
30
- def generate_response(prompt):
31
- input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(model.device)
 
32
  with torch.no_grad():
33
  output = model.generate(
34
  input_ids=input_ids,
35
  max_new_tokens=200,
36
- do_sample=True,
37
  temperature=0.7,
38
  top_p=0.9,
 
39
  )
40
- return tokenizer.decode(output[0], skip_special_tokens=True)
 
 
 
41
 
42
- gr.Interface(fn=generate_response, inputs="text", outputs="text", title="Dorna-Llama3 LoRA").launch()
 
 
 
 
 
1
  import os
2
  import zipfile
3
+ import torch
4
+ import gradio as gr
5
+ from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
6
+ from peft import PeftModel
7
+ from huggingface_hub import login
8
 
9
+ # --- گام ۱: احراز هویت Hugging Face
10
+ hf_token = os.environ.get("HF_TOKEN")
11
+ if not hf_token:
12
+ raise ValueError("❌ HF_TOKEN not found in environment secrets.")
13
+ login(hf_token)
14
+
15
+ # اگر فایل اشتباه وجود داره و فایل جدید نه
16
  if os.path.exists("dorna-diabetes-finetuned-20250514T183411Z-1-001.zip") and not os.path.exists("dorna-diabetes-finetuned.zip"):
17
  os.rename("dorna-diabetes-finetuned-20250514T183411Z-1-001.zip", "dorna-diabetes-finetuned.zip")
18
  print("✅ اسم فایل تغییر کرد.")
19
 
20
+ # --- گام ۲: اکسترکت فایل فشرده (فقط بار اول)
21
  if not os.path.exists("dorna-diabetes-finetuned"):
22
  with zipfile.ZipFile("dorna-diabetes-finetuned.zip", "r") as zip_ref:
23
  zip_ref.extractall(".")
24
+ print("✅ فایل LoRA اکسترکت شد.")
25
 
26
+ # --- گام ۳: بارگذاری مدل پایه و LoRA
27
  BASE_MODEL = "PartAI/Dorna-Llama3-8B-Instruct"
28
+ LORA_PATH = "./dorna-diabetes-finetuned"
 
 
29
 
30
+ print("🔹 در حال بارگذاری مدل پایه...")
31
+ tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, use_auth_token=hf_token)
32
  base_model = AutoModelForCausalLM.from_pretrained(
33
  BASE_MODEL,
34
+ load_in_4bit=True,
35
  torch_dtype=torch.float16,
36
+ device_map="auto",
37
+ trust_remote_code=True,
38
+ use_auth_token=hf_token
39
  )
40
 
41
+ print("🔹 در حال بارگذاری LoRA...")
42
  model = PeftModel.from_pretrained(base_model, LORA_PATH)
43
+ model.eval()
44
+
45
+ streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
46
 
47
+ # --- گام ۴: رابط چت با Gradio
48
+ def chat(prompt):
49
+ input_ids = tokenizer(prompt, return_tensors="pt").input_ids.cuda()
50
  with torch.no_grad():
51
  output = model.generate(
52
  input_ids=input_ids,
53
  max_new_tokens=200,
 
54
  temperature=0.7,
55
  top_p=0.9,
56
+ do_sample=True
57
  )
58
+ response = tokenizer.decode(output[0], skip_special_tokens=True)
59
+ return response[len(prompt):].strip()
60
+
61
+ iface = gr.Interface(fn=chat, inputs="text", outputs="text", title="💬 Dorna LoRA Model")
62
 
63
+ iface.launch()