anes174 commited on
Commit
38afcf1
·
verified ·
1 Parent(s): 872e0af

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -0
app.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ 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
+
27
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
28
+
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()