anes174 commited on
Commit
02beb74
·
verified ·
1 Parent(s): 38afcf1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -50
app.py CHANGED
@@ -3,24 +3,25 @@ import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
  import os
5
 
6
- # --- 1. إعدادات النموذج ---
7
- # اسم النموذج الذي سنستخدمه
8
- MODEL_ID = "google/gemma-3-4b-it"
9
 
10
- # --- 2. تهيئة النموذج والتوكنايزر (يتم التحميل مرة واحدة فقط) ---
 
 
11
  def load_model():
12
- """تحميل نموذج Gemma 3 4B المكمم والمحسّن للتشغيل على Hugging Face Space."""
13
  try:
14
- # تحديد جهاز التشغيل: يختار GPU إذا كان متاحًا، وإلا فـ CPU
15
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
16
  print(f"✅ سيتم تشغيل النموذج على: {device}")
17
 
18
  # التكميم 4-bit ضروري جداً لتقليل استهلاك الذاكرة
19
- # هذا يسمح للنموذج بالعمل ضمن الموارد المتاحة في الطبقة المجانية
20
  model = AutoModelForCausalLM.from_pretrained(
21
  MODEL_ID,
22
- torch_dtype=torch.bfloat16,
23
- load_in_4bit=True,
24
  device_map="auto"
25
  ).to(device)
26
 
@@ -29,48 +30,11 @@ def load_model():
29
  return model, tokenizer, device
30
 
31
  except Exception as e:
32
- print(f"❌ فشل تحميل نموذج Gemma 3 4B: {e}")
33
- # رسالة للمطور إذا لم يتم التحميل
34
  return None, None, None
35
 
36
  # تحميل النموذج عند بدء تشغيل الـ Space
37
  model, tokenizer, device = load_model()
38
 
39
- # --- 3. وظيفة المحادثة الأساسية لـ AnesAI ---
40
- def anesai_chat(message, history):
41
- """المنطق الأساسي لمحرك AnesAI - يستخدم لتوليد الردود النصية."""
42
-
43
- if model is None:
44
- return "عذراً، لم يتم تحميل نموذج الذكاء الاصطناعي بنجاح. يرجى مراجعة سجل الـ Space."
45
-
46
- # بناء سياق المحادثة (للحفاظ على الذاكرة)
47
- chat_history = ""
48
- for user_msg, ai_msg in history:
49
- chat_history += f"المستخدم: {user_msg}\nAnesAI: {ai_msg}\n"
50
-
51
- final_prompt = f"{chat_history}المستخدم: {message}\nAnesAI:"
52
-
53
- input_ids = tokenizer(final_prompt, return_tensors="pt").to(device)
54
-
55
- # توليد الرد
56
- with torch.no_grad():
57
- output_tokens = model.generate(
58
- **input_ids,
59
- max_new_tokens=256,
60
- do_sample=True,
61
- temperature=0.7
62
- )
63
-
64
- output_text = tokenizer.decode(output_tokens[0], skip_special_tokens=True)
65
-
66
- # استخلاص الرد الجديد فقط
67
- response = output_text.split("AnesAI:")[-1].strip()
68
-
69
- return response
70
-
71
- # --- 4. واجهة Gradio التفاعلية ---
72
- gr.ChatInterface(
73
- anesai_chat,
74
- title="AnesAI Chatbot (Gemma 3 4B)",
75
- description="تحدث مع محرك AnesAI. (النسخة الأولية تعمل على موارد Hugging Face المجانية)."
76
- ).launch()
 
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
  import os
5
 
6
+ # --- 1. إعدادات النموذج (تغيير اسم النموذج) ---
7
+ # Phi-3 Mini هو البديل الأقوى والأكثر كفاءة للذاكرة
8
+ MODEL_ID = "microsoft/Phi-3-mini-4k-instruct"
9
 
10
+ # ... (بقية الدالة load_model() تظل كما هي) ...
11
+
12
+ # --- 2. تهيئة النموذج والتوكنايزر (نفس الكود) ---
13
  def load_model():
14
+ """تحميل نموذج Phi-3-Mini المكمم (أقل استهلاكاً للذاكرة)."""
15
  try:
16
+ # تحديد جهاز التشغيل (cpu هو الأكيد في الطبقة المجانية)
17
+ device = torch.device("cpu") # نركز على CPU لضمان النجاح
18
  print(f"✅ سيتم تشغيل النموذج على: {device}")
19
 
20
  # التكميم 4-bit ضروري جداً لتقليل استهلاك الذاكرة
 
21
  model = AutoModelForCausalLM.from_pretrained(
22
  MODEL_ID,
23
+ torch_dtype=torch.float32, # قد نحتاج إلى float32 إذا كان على CPU
24
+ load_in_4bit=True,
25
  device_map="auto"
26
  ).to(device)
27
 
 
30
  return model, tokenizer, device
31
 
32
  except Exception as e:
33
+ print(f"❌ فشل تحميل نموذج Phi-3-Mini: {e}")
 
34
  return None, None, None
35
 
36
  # تحميل النموذج عند بدء تشغيل الـ Space
37
  model, tokenizer, device = load_model()
38
 
39
+ # ... (دالة anesai_chat() تظل كما هي) ...
40
+ # ... (واجهة Gradio التفاعلية تظل كما هي) ...