anaspro commited on
Commit
277c43c
·
verified ·
1 Parent(s): 23ff0a2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -109
app.py CHANGED
@@ -1,119 +1,66 @@
 
 
 
 
 
 
1
  import os
2
  import torch
 
3
  import gradio as gr
4
- from threading import Thread
5
- from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
6
- from huggingface_hub import login
7
- import spaces
8
-
9
- # ======================================================
10
- # تسجيل الدخول في حال الموديل خاص
11
- # ======================================================
12
- if os.getenv("HF_TOKEN"):
13
- login(token=os.getenv("HF_TOKEN"))
14
- print("🔐 Logged in to Hugging Face Hub")
15
-
16
- # ======================================================
17
- # إعدادات الموديل
18
- # ======================================================
19
- MODEL_ID = "anaspro/gemma3-iraqi"
20
 
21
- SYSTEM_PROMPT = (
22
- "أنت مساعد ذكي تفهم اللهجة العراقية والعربية الفصحى. "
23
- "جاوب على الأسئلة بإيجاز ووضوح، بنفس لغة المستخدم. "
24
- "لا تستخدم مقدمات مثل (مرحباً أو بالتأكيد)، فقط الجواب المباشر."
25
- )
26
-
27
- print(f"🔄 Loading model: {MODEL_ID}")
28
 
29
- # ======================================================
30
- # تحميل الموديل
31
- # ======================================================
32
- tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
33
 
 
34
  model = AutoModelForCausalLM.from_pretrained(
35
- MODEL_ID,
36
- torch_dtype=torch.bfloat16,
37
- device_map="auto", # سيستخدم GPU عند تنفيذ الدالة أدناه
38
  )
39
- model.eval()
40
-
41
- print("✅ Model ready!\n")
42
-
43
-
44
- # ======================================================
45
- # دالة المحادثة (تُنفذ داخل ZeroGPU)
46
- # ======================================================
47
- @spaces.GPU(duration=60)
48
- def chat(message, history):
49
- # إعداد سياق المحادثة
50
- messages = []
51
- for msg in history:
52
- messages.append({"role": msg["role"], "content": msg["content"]})
53
-
54
- # system prompt محسّن
55
- system_prompt = (
56
- "أنت مساعد ذكي تحچي باللهجة العراقية الطبيعية. "
57
- "جاوب بحرّية وخلّك مرتاح بالكلام، مثل إنسان حقيقي. "
58
- "تذكّر شنو انحچا قبله وكمّل الحديث بدون ما تكون رسمي. "
59
- "لا تقول 'مرحباً' أو 'بالتأكيد'، بس جاوب مباشرة."
60
- )
61
-
62
- messages.append({"role": "system", "content": system_prompt})
63
- messages.append({"role": "user", "content": message})
64
-
65
- input_ids = tokenizer.apply_chat_template(
66
- messages,
67
- return_tensors="pt",
68
- add_generation_prompt=True
69
  ).to(model.device)
70
-
71
- streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
72
-
73
- generation_kwargs = dict(
74
- input_ids=input_ids,
75
- streamer=streamer,
76
- max_new_tokens=1024, # يكتب براحة
77
- temperature=0.95, # كلام طبيعي
78
- top_p=0.95, # توازن بالاحتمالات
79
- do_sample=True,
80
- repetition_penalty=1.07, # يقلل التكرار الطفيف
81
  )
82
-
83
- thread = Thread(target=model.generate, kwargs=generation_kwargs)
84
- thread.start()
85
-
86
- partial_text = ""
87
- for new_text in streamer:
88
- partial_text += new_text
89
- yield partial_text.strip()
90
-
91
- thread.join()
92
-
93
-
94
- # ======================================================
95
- # واجهة Gradio
96
- # ======================================================
97
- demo = gr.ChatInterface(
98
- fn=chat,
99
- type="messages",
100
- title="🇮🇶 Gemma 3 Iraqi Chat – ZeroGPU Edition",
101
- description="""
102
- **نموذج Gemma 3 Iraqi 🇮🇶**
103
- مبني ومهيأ للحوار باللهجة العراقية والعربية الفصحى.
104
-
105
- 🧠 أمثلة جاهزة:
106
- - "شلونك اليوم؟"
107
- - "اشرحلي شنو يعني تصعيد إداري"
108
- - "وضحلي الفرق بين الدليل والعبرة"
109
- """,
110
- examples=[
111
- ["شلونك اليوم؟"],
112
- ["اشرحلي شنو يعني تصعيد إداري"],
113
- ["وضحلي الفرق بين الدليل والعبرة"],
114
- ],
115
- theme=gr.themes.Soft(),
116
- )
117
-
118
- if __name__ == "__main__":
119
- demo.launch()
 
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Gemma-3 Iraqi Arabic Chat App
5
+ """
6
+
7
  import os
8
  import torch
9
+ from transformers import AutoModelForCausalLM, AutoTokenizer
10
  import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ MODEL_NAME = "anaspro/gemma3-iraqi"
 
 
 
 
 
 
13
 
14
+ print("🔐 Loading model:", MODEL_NAME)
 
 
 
15
 
16
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
17
  model = AutoModelForCausalLM.from_pretrained(
18
+ MODEL_NAME,
19
+ torch_dtype=torch.bfloat16 if torch.cuda.is_available() else torch.float32,
20
+ device_map="auto",
21
  )
22
+ print("✅ Model loaded and ready!")
23
+
24
+ def chat_fn(user_message, history):
25
+ # سجل رسالة المستخدم
26
+ history = history or []
27
+ history.append((user_message, None))
28
+
29
+ # إعداد الإدخال
30
+ inputs = tokenizer.apply_chat_template(
31
+ [{"role": "user", "content": user_message}],
32
+ tokenize=True,
33
+ add_generation_prompt=True,
34
+ return_tensors="pt"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  ).to(model.device)
36
+
37
+ # توليد الرد
38
+ outputs = model.generate(
39
+ **inputs,
40
+ max_new_tokens=1024,
41
+ temperature=0.8,
42
+ top_p=0.95,
43
+ top_k=100,
44
+ repetition_penalty=1.05,
45
+ eos_token_id=tokenizer.eos_token_id,
 
46
  )
47
+ resp = tokenizer.decode(outputs[0], skip_special_tokens=True)
48
+
49
+ # اقتطاع الجزء بعد “assistant” إذا موجود
50
+ if "assistant" in resp:
51
+ resp = resp.split("assistant")[-1].strip()
52
+
53
+ # سجل الرد
54
+ history[-1] = (user_message, resp)
55
+ return history, history
56
+
57
+ with gr.Blocks() as demo:
58
+ gr.Markdown("## 🗣️ Iraqi Arabic Chat with Gemma-3\nاكتب باللهجة العراقية أي سؤال وتفاعل.")
59
+ chatbot = gr.Chatbot(label="Chatbot")
60
+ msg = gr.Textbox(placeholder="اكتب نصك هنا...", lines=1)
61
+ clear = gr.Button("🧹 مسح المحادثة")
62
+
63
+ msg.submit(chat_fn, [msg, chatbot], [chatbot, chatbot])
64
+ clear.click(lambda: None, None, chatbot, queue=False)
65
+
66
+ demo.launch(server_name="0.0.0.0", server_port=7860, share=True)