gijl commited on
Commit
d9f91ad
·
verified ·
1 Parent(s): 0487d1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -14
app.py CHANGED
@@ -1,50 +1,51 @@
1
  import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, TextIteratorStreamer
3
  import torch
4
- import os # إعادة المكتبة المحذوفة
5
- from threading import Thread # ضرورية تقنياً للبث ولا تستهلك ذاكرة
6
 
7
  model_name = "gijl/gemma-4-E2B-it"
8
 
9
  tokenizer = AutoTokenizer.from_pretrained(model_name)
10
 
11
- # تحميل النموذج مرة واحدة فقط (5 جيجابايت تقريباً)
12
  model = AutoModelForCausalLM.from_pretrained(model_name,
13
  torch_dtype=torch.float16,
14
  device_map="auto")
15
 
16
- # تم التعديل هنا: نمرر model=model وليس model_name لمنع تحميل النموذج مرة ثانية
17
- pipe = pipeline("text-generation",
18
- model=model,
19
- tokenizer=tokenizer)
20
 
21
  def generate_response(message, history):
 
22
  messages = [
23
  {"role": "system", "content": "Você é ELIZA, uma terapeuta que responde com empatia."},
24
  {"role": "user", "content": message}
25
  ]
26
 
27
- # سطر إعداد البث
28
  streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
29
 
30
- # تجهيز المدخلات
31
  inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
32
 
33
- # تشغيل التوليد في الخلفية
34
  generation_kwargs = dict(input_ids=inputs, streamer=streamer, max_new_tokens=150, temperature=0.7)
 
 
35
  thread = Thread(target=model.generate, kwargs=generation_kwargs)
36
  thread.start()
37
 
38
- # سطر تفعيل البث المباشر (The Streaming Line)
39
  partial_text = ""
40
  for new_text in streamer:
41
  partial_text += new_text
42
- yield partial_text # هذا السطر هو الذي يجعل النص يظهر كلمة بكلمة
43
 
44
  demo = gr.ChatInterface(
45
  generate_response,
46
- title=" (Streaming)",
47
- description="استهلاك الذاكرة الآن مثالي والبث مفعل."
48
  )
49
 
50
  demo.launch()
 
1
  import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, TextIteratorStreamer
3
  import torch
4
+ import os
5
+ from threading import Thread # ضرورية تقنياً لعمل سطر البث ولا تستهلك ذاكرة
6
 
7
  model_name = "gijl/gemma-4-E2B-it"
8
 
9
  tokenizer = AutoTokenizer.from_pretrained(model_name)
10
 
11
+ # تحميل النموذج مرة واحدة (هنا سيبقى الاستهلاك ثابت عند 9 جيجا)
12
  model = AutoModelForCausalLM.from_pretrained(model_name,
13
  torch_dtype=torch.float16,
14
  device_map="auto")
15
 
16
+ # نمرر الكائن model لكي لا يتم تحميله مرتين في الذاكرة
17
+ pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
 
 
18
 
19
  def generate_response(message, history):
20
+ # تنسيق الرسائل بشكل بسيط لضمان استجابة النموذج
21
  messages = [
22
  {"role": "system", "content": "Você é ELIZA, uma terapeuta que responde com empatia."},
23
  {"role": "user", "content": message}
24
  ]
25
 
26
+ # 1. سطر إعداد البث
27
  streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
28
 
29
+ # تحويل النص لـ Tokens
30
  inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
31
 
32
+ # 2. إعداد المعطيات
33
  generation_kwargs = dict(input_ids=inputs, streamer=streamer, max_new_tokens=150, temperature=0.7)
34
+
35
+ # 3. تشغيل المعالج في الخلفية (لكي لا يتوقف الكود عن الرد)
36
  thread = Thread(target=model.generate, kwargs=generation_kwargs)
37
  thread.start()
38
 
39
+ # 4. السطر المطلوب لتفعيل البث المباشر
40
  partial_text = ""
41
  for new_text in streamer:
42
  partial_text += new_text
43
+ yield partial_text # هذا السطر هو الذي "يدفع" الكلمات للواجهة فوراً
44
 
45
  demo = gr.ChatInterface(
46
  generate_response,
47
+ title="ELIZA (Streaming Mode)",
48
+ description="البث مفعل والذاكرة مستقرة."
49
  )
50
 
51
  demo.launch()