sassil commited on
Commit
46a744c
·
verified ·
1 Parent(s): 4842030

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -46
app.py CHANGED
@@ -1,15 +1,15 @@
1
  import gradio as gr
2
  import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
- import spaces
5
 
6
- # إعدادات النموذج
7
- MODEL_NAME = "Qwen/Qwen2.5-14B-Instruct"
8
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
9
 
10
  print(f"🚀 تحميل النموذج: {MODEL_NAME}")
11
  print(f"💻 الجهاز المستخدم: ZeroGPU (مجاني)")
12
- print(f"🎉 الإصدار: Qwen2.5-Instruct (محسّن للمحادثة)")
13
 
14
  # تحميل Tokenizer والنموذج
15
  tokenizer = AutoTokenizer.from_pretrained(
@@ -26,7 +26,7 @@ model = AutoModelForCausalLM.from_pretrained(
26
 
27
  print("✅ تم تحميل النموذج بنجاح على ZeroGPU!")
28
 
29
- @spaces.GPU
30
  def generate_response(
31
  message,
32
  history,
@@ -38,7 +38,10 @@ def generate_response(
38
  repetition_penalty=1.1,
39
  do_sample=True
40
  ):
41
- """دالة توليد الردود مع جميع الخيارات المتقدمة"""
 
 
 
42
 
43
  # بناء المحادثة
44
  messages = [{"role": "system", "content": system_message}]
@@ -82,7 +85,7 @@ def generate_response(
82
 
83
  return response
84
 
85
- # واجهة Gradio
86
  with gr.Blocks(
87
  theme=gr.themes.Soft(),
88
  css="""
@@ -102,9 +105,8 @@ with gr.Blocks(
102
 
103
  gr.Markdown(
104
  """
105
- # 🤖 Qwen2.5-14B-Instruct - محرك ذكاء اصطناعي متقدم
106
- ### نموذج محادثة قوي - مجاني 100% على ZeroGPU ⚡
107
- #### 🎯 محسّن للمحادثات | متخصص في البرمجة والعلوم | دعم عربي ممتاز
108
  """,
109
  elem_classes="rtl"
110
  )
@@ -112,19 +114,20 @@ with gr.Blocks(
112
  gr.HTML(
113
  """
114
  <div class="gpu-badge">
115
- Qwen2.5-Instruct - يعمل على ZeroGPU المجاني (Nvidia H200)
116
  </div>
117
  """
118
  )
119
 
120
  with gr.Row():
121
  with gr.Column(scale=2):
 
122
  chatbot = gr.Chatbot(
123
  height=500,
124
  label="المحادثة",
125
  rtl=True,
126
  show_copy_button=True,
127
- type="messages"
128
  )
129
 
130
  with gr.Row():
@@ -142,6 +145,7 @@ with gr.Blocks(
142
  retry = gr.Button("إعادة المحاولة 🔄")
143
 
144
  with gr.Column(scale=1):
 
145
  gr.Markdown("### ⚙️ الإعدادات المتقدمة")
146
 
147
  system_message = gr.Textbox(
@@ -156,7 +160,8 @@ with gr.Blocks(
156
  maximum=4096,
157
  value=2048,
158
  step=128,
159
- label="الحد الأقصى للكلمات (Max Tokens)"
 
160
  )
161
 
162
  temperature = gr.Slider(
@@ -164,7 +169,8 @@ with gr.Blocks(
164
  maximum=2.0,
165
  value=0.7,
166
  step=0.1,
167
- label="الإبداع (Temperature)"
 
168
  )
169
 
170
  top_p = gr.Slider(
@@ -172,7 +178,8 @@ with gr.Blocks(
172
  maximum=1.0,
173
  value=0.9,
174
  step=0.05,
175
- label="Top-p (Nucleus Sampling)"
 
176
  )
177
 
178
  top_k = gr.Slider(
@@ -180,7 +187,8 @@ with gr.Blocks(
180
  maximum=100,
181
  value=50,
182
  step=1,
183
- label="Top-k Sampling"
 
184
  )
185
 
186
  repetition_penalty = gr.Slider(
@@ -188,61 +196,93 @@ with gr.Blocks(
188
  maximum=2.0,
189
  value=1.1,
190
  step=0.05,
191
- label="عقوبة التكرار"
 
192
  )
193
 
194
  do_sample = gr.Checkbox(
195
  value=True,
196
- label="استخدام Sampling"
 
197
  )
198
 
 
199
  with gr.Accordion("💡 أمثلة سريعة", open=False):
200
  gr.Examples(
201
  examples=[
202
  ["اشرح لي ما هو إنترنت الأشياء IoT بطريقة مبسطة"],
203
- ["اكتب كود Arduino للتحكم في محرك DC بواسطة L298N"],
204
- ["ما أفضل microcontroller لمشروع IoT منزلي؟"],
205
- ["اقترح مشروع أتمتة صناعية باستخدام PLC"],
206
- ["كيف أربط مستشعر DHT22 مع ESP32؟"],
207
  ],
208
  inputs=msg,
209
  label="جرب هذه الأمثلة"
210
  )
211
 
212
- with gr.Accordion("ℹ️ معلومات النموذج", open=False):
 
213
  gr.Markdown(
214
- """
215
  ### 🎯 تفاصيل النموذج
216
- - **النموذج**: Qwen2.5-14B-Instruct
217
- - **المعاملات**: 14.7 مليار
218
- - **السياق**: 32K token
219
- - **GPU**: Nvidia H200 (مجاني)
 
220
  - **السرعة**: 30-50 token/ثانية
221
 
 
 
 
 
 
 
 
222
  ### ⚠️ ملاحظات
223
- - مجاني 100% على ZeroGPU
224
- - قد يكون هناك انتظار في أوقات الذروة
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
  """
226
  )
227
 
228
  # منطق التفاعل
229
  def user_message(message, history):
230
- return "", history + [{"role": "user", "content": message}]
231
 
232
  def bot_response(history, system_msg, max_tok, temp, top_p_val, top_k_val, rep_pen, do_samp):
233
- if not history or "role" not in history[-1]:
234
- return history
235
-
236
- user_msg = history[-1]["content"]
237
-
238
- history_tuples = []
239
- for i in range(0, len(history)-1, 2):
240
- if i+1 < len(history):
241
- history_tuples.append((history[i]["content"], history[i+1]["content"]))
242
-
243
  bot_msg = generate_response(
244
  user_msg,
245
- history_tuples,
246
  system_msg,
247
  max_tok,
248
  temp,
@@ -251,10 +291,10 @@ with gr.Blocks(
251
  rep_pen,
252
  do_samp
253
  )
254
-
255
- history.append({"role": "assistant", "content": bot_msg})
256
  return history
257
 
 
258
  msg.submit(
259
  user_message,
260
  [msg, chatbot],
@@ -277,10 +317,10 @@ with gr.Blocks(
277
  chatbot
278
  )
279
 
280
- clear.click(lambda: [], None, chatbot, queue=False)
281
 
282
  retry.click(
283
- lambda h: h[:-1] if h and len(h) > 0 else [],
284
  chatbot,
285
  chatbot,
286
  queue=False
@@ -290,6 +330,7 @@ with gr.Blocks(
290
  chatbot
291
  )
292
 
 
293
  if __name__ == "__main__":
294
  demo.queue(max_size=20)
295
  demo.launch(
 
1
  import gradio as gr
2
  import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
+ import spaces # مكتبة ZeroGPU المجانية
5
 
6
+ # إعدادات النموذج - Qwen3 الأحدث للاستخدام المجاني
7
+ MODEL_NAME = "Qwen/Qwen3-14B" # Qwen3 الأحدث - مجاني 100%
8
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
9
 
10
  print(f"🚀 تحميل النموذج: {MODEL_NAME}")
11
  print(f"💻 الجهاز المستخدم: ZeroGPU (مجاني)")
12
+ print(f"🎉 الإصدار: Qwen3 (أحدث إصدار - مايو 2025)")
13
 
14
  # تحميل Tokenizer والنموذج
15
  tokenizer = AutoTokenizer.from_pretrained(
 
26
 
27
  print("✅ تم تحميل النموذج بنجاح على ZeroGPU!")
28
 
29
+ @spaces.GPU # هذا السطر مهم جداً للـ ZeroGPU المجاني!
30
  def generate_response(
31
  message,
32
  history,
 
38
  repetition_penalty=1.1,
39
  do_sample=True
40
  ):
41
+ """
42
+ دالة توليد الردود مع جميع الخيارات المتقدمة
43
+ تعمل على ZeroGPU المجاني من Hugging Face
44
+ """
45
 
46
  # بناء المحادثة
47
  messages = [{"role": "system", "content": system_message}]
 
85
 
86
  return response
87
 
88
+ # واجهة Gradio المتقدمة
89
  with gr.Blocks(
90
  theme=gr.themes.Soft(),
91
  css="""
 
105
 
106
  gr.Markdown(
107
  """
108
+ # 🤖 Qwen2.5-14B - محرك الذكاء الاصطناعي المتقدم
109
+ ### نموذج قوي مجاني 100% على ZeroGPU ⚡
 
110
  """,
111
  elem_classes="rtl"
112
  )
 
114
  gr.HTML(
115
  """
116
  <div class="gpu-badge">
117
+ ⚡ يعمل على ZeroGPU المجاني (Nvidia H200) - بدون أي تكلفة!
118
  </div>
119
  """
120
  )
121
 
122
  with gr.Row():
123
  with gr.Column(scale=2):
124
+ # منطقة الدردشة
125
  chatbot = gr.Chatbot(
126
  height=500,
127
  label="المحادثة",
128
  rtl=True,
129
  show_copy_button=True,
130
+ avatar_images=(None, "https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo.png")
131
  )
132
 
133
  with gr.Row():
 
145
  retry = gr.Button("إعادة المحاولة 🔄")
146
 
147
  with gr.Column(scale=1):
148
+ # الإعدادات المتقدمة
149
  gr.Markdown("### ⚙️ الإعدادات المتقدمة")
150
 
151
  system_message = gr.Textbox(
 
160
  maximum=4096,
161
  value=2048,
162
  step=128,
163
+ label="الحد الأقصى للكلمات (Max Tokens)",
164
+ info="عدد الكلمات في الإجابة"
165
  )
166
 
167
  temperature = gr.Slider(
 
169
  maximum=2.0,
170
  value=0.7,
171
  step=0.1,
172
+ label="الإبداع (Temperature)",
173
+ info="أعلى = أكثر إبداعاً، أقل = أكثر دقة"
174
  )
175
 
176
  top_p = gr.Slider(
 
178
  maximum=1.0,
179
  value=0.9,
180
  step=0.05,
181
+ label="Top-p (Nucleus Sampling)",
182
+ info="يحدد تنوع الكلمات"
183
  )
184
 
185
  top_k = gr.Slider(
 
187
  maximum=100,
188
  value=50,
189
  step=1,
190
+ label="Top-k Sampling",
191
+ info="عدد الكلمات المحتملة"
192
  )
193
 
194
  repetition_penalty = gr.Slider(
 
196
  maximum=2.0,
197
  value=1.1,
198
  step=0.05,
199
+ label="عقوبة التكرار",
200
+ info="يمنع تكرار نفس الكلمات"
201
  )
202
 
203
  do_sample = gr.Checkbox(
204
  value=True,
205
+ label="استخدام Sampling",
206
+ info="للنتائج الإبداعية والمتنوعة"
207
  )
208
 
209
+ # أمثلة سريعة
210
  with gr.Accordion("💡 أمثلة سريعة", open=False):
211
  gr.Examples(
212
  examples=[
213
  ["اشرح لي ما هو إنترنت الأشياء IoT بطريقة مبسطة"],
214
+ ["كيف أصمم دائرة Arduino للتحكم في محرك؟"],
215
+ ["ما الفرق بين PLC و Microcontroller؟"],
216
+ ["اقترح مشروع أتمتة منزلية بسيط"],
217
+ ["اكتب لي كود Python لقراءة مستشعر حرارة"],
218
  ],
219
  inputs=msg,
220
  label="جرب هذه الأمثلة"
221
  )
222
 
223
+ # معلومات النموذج
224
+ with gr.Accordion("ℹ️ معلومات النموذج والنظام", open=False):
225
  gr.Markdown(
226
+ f"""
227
  ### 🎯 تفاصيل النموذج
228
+ - **النموذج**: Qwen2.5-14B-Instruct (14 مليار معامل)
229
+ - **المنصة**: Hugging Face ZeroGPU (مجاني 100%)
230
+ - **GPU**: Nvidia H200 (ديناميكي)
231
+ - **نوع البيانات**: Float16
232
+ - **الذاكرة**: ~28GB VRAM
233
  - **السرعة**: 30-50 token/ثانية
234
 
235
+ ### 🌟 المميزات
236
+ - ✅ مجاني تماماً بدون حدود يومية
237
+ - ✅ دعم كامل للغة العربية
238
+ - ✅ يفهم السياق حتى 32K token
239
+ - ✅ متخصص في البرمجة والعلوم
240
+ - ✅ آمن ومراقب من Hugging Face
241
+
242
  ### ⚠️ ملاحظات
243
+ - قد يكون هناك انتظار قصير في أوقات الذروة
244
+ - ZeroGPU يخصص GPU ديناميكياً عند الحاجة
245
+ - الجلسة تنتهي بعد 60 ثانية من عدم النشاط
246
+ """
247
+ )
248
+
249
+ # معلومات للمطورين
250
+ with gr.Accordion("👨‍💻 للمطورين - تفاصيل تقنية", open=False):
251
+ gr.Markdown(
252
+ """
253
+ ### كيف يعمل ZeroGPU؟
254
+
255
+ ```python
256
+ import spaces
257
+
258
+ @spaces.GPU # يخصص GPU مجاناً عند استدعاء الدالة
259
+ def generate_response(...):
260
+ # الكود هنا
261
+ ```
262
+
263
+ ### المكتبات المستخدمة:
264
+ - `transformers`: لتحميل النموذج
265
+ - `torch`: للحسابات العصبية
266
+ - `spaces`: للوصول إلى ZeroGPU
267
+ - `gradio`: للواجهة التفاعلية
268
+
269
+ ### كيف تنسخ هذا المشروع؟
270
+ 1. Duplicate هذا Space
271
+ 2. غيّر MODEL_NAME إلى أي نموذج آخر (7B أو 14B)
272
+ 3. عدّل system_message حسب احتياجك
273
+ 4. انشر وشارك!
274
  """
275
  )
276
 
277
  # منطق التفاعل
278
  def user_message(message, history):
279
+ return "", history + [[message, None]]
280
 
281
  def bot_response(history, system_msg, max_tok, temp, top_p_val, top_k_val, rep_pen, do_samp):
282
+ user_msg = history[-1][0]
 
 
 
 
 
 
 
 
 
283
  bot_msg = generate_response(
284
  user_msg,
285
+ history[:-1],
286
  system_msg,
287
  max_tok,
288
  temp,
 
291
  rep_pen,
292
  do_samp
293
  )
294
+ history[-1][1] = bot_msg
 
295
  return history
296
 
297
+ # ربط الأحداث
298
  msg.submit(
299
  user_message,
300
  [msg, chatbot],
 
317
  chatbot
318
  )
319
 
320
+ clear.click(lambda: None, None, chatbot, queue=False)
321
 
322
  retry.click(
323
+ lambda h: h[:-1] if h else h,
324
  chatbot,
325
  chatbot,
326
  queue=False
 
330
  chatbot
331
  )
332
 
333
+ # تشغيل التطبيق
334
  if __name__ == "__main__":
335
  demo.queue(max_size=20)
336
  demo.launch(