Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -12,7 +12,7 @@ def load_model():
|
|
12 |
"""
|
13 |
تحميل النموذج والمُرمِّز مع التخزين المؤقت
|
14 |
"""
|
15 |
-
model_name = "
|
16 |
|
17 |
# تهيئة الـtokenizer أولاً
|
18 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
@@ -20,7 +20,7 @@ def load_model():
|
|
20 |
# تهيئة النموذج مع إعدادات مناسبة
|
21 |
model = AutoModelForCausalLM.from_pretrained(
|
22 |
model_name,
|
23 |
-
torch_dtype=torch.float16,
|
24 |
low_cpu_mem_usage=True,
|
25 |
device_map="auto"
|
26 |
)
|
@@ -35,13 +35,22 @@ def reset_conversation():
|
|
35 |
st.session_state.messages = []
|
36 |
return None
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
def generate_response(model, tokenizer, prompt, temperature=0.7, max_length=500):
|
39 |
"""
|
40 |
توليد استجابة من النموذج
|
41 |
"""
|
42 |
try:
|
|
|
|
|
|
|
43 |
# تحضير المدخلات
|
44 |
-
inputs = tokenizer(
|
45 |
|
46 |
# توليد النص
|
47 |
with torch.no_grad():
|
@@ -50,27 +59,40 @@ def generate_response(model, tokenizer, prompt, temperature=0.7, max_length=500)
|
|
50 |
max_length=max_length,
|
51 |
temperature=temperature,
|
52 |
do_sample=True,
|
53 |
-
pad_token_id=tokenizer.eos_token_id
|
|
|
54 |
)
|
55 |
|
56 |
# فك ترميز النص المولد
|
57 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
|
|
|
|
|
|
58 |
return response
|
59 |
|
60 |
except Exception as e:
|
61 |
return f"حدث خطأ أثناء توليد الاستجابة: {str(e)}"
|
62 |
|
63 |
# تهيئة Streamlit
|
64 |
-
st.title("
|
65 |
|
66 |
# إضافة أزرار التحكم في الشريط الجانبي
|
67 |
with st.sidebar:
|
68 |
st.header("إعدادات")
|
69 |
-
temperature = st.slider("درجة
|
70 |
-
|
|
|
|
|
71 |
|
72 |
if st.button("مسح المحادثة"):
|
73 |
reset_conversation()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
# تحميل النموذج
|
76 |
try:
|
@@ -79,6 +101,12 @@ try:
|
|
79 |
st.sidebar.success("تم تحميل النموذج بنجاح! 🎉")
|
80 |
except Exception as e:
|
81 |
st.error(f"حدث خطأ أثناء تحميل النموذج: {str(e)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
st.stop()
|
83 |
|
84 |
# تهيئة سجل المحادثة
|
@@ -91,7 +119,7 @@ for message in st.session_state.messages:
|
|
91 |
st.write(message["content"])
|
92 |
|
93 |
# معالجة إدخال المستخدم
|
94 |
-
if prompt := st.chat_input():
|
95 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
96 |
|
97 |
with st.chat_message("user"):
|
|
|
12 |
"""
|
13 |
تحميل النموذج والمُرمِّز مع التخزين المؤقت
|
14 |
"""
|
15 |
+
model_name = "joermd/speedy-llama2"
|
16 |
|
17 |
# تهيئة الـtokenizer أولاً
|
18 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
20 |
# تهيئة النموذج مع إعدادات مناسبة
|
21 |
model = AutoModelForCausalLM.from_pretrained(
|
22 |
model_name,
|
23 |
+
torch_dtype=torch.float16 if device == "cuda" else torch.float32,
|
24 |
low_cpu_mem_usage=True,
|
25 |
device_map="auto"
|
26 |
)
|
|
|
35 |
st.session_state.messages = []
|
36 |
return None
|
37 |
|
38 |
+
def format_prompt(prompt):
|
39 |
+
"""
|
40 |
+
تنسيق المدخل بالطريقة المناسبة لنموذج LLaMA
|
41 |
+
"""
|
42 |
+
return f"<s>[INST] {prompt} [/INST]"
|
43 |
+
|
44 |
def generate_response(model, tokenizer, prompt, temperature=0.7, max_length=500):
|
45 |
"""
|
46 |
توليد استجابة من النموذج
|
47 |
"""
|
48 |
try:
|
49 |
+
# تنسيق المدخل
|
50 |
+
formatted_prompt = format_prompt(prompt)
|
51 |
+
|
52 |
# تحضير المدخلات
|
53 |
+
inputs = tokenizer(formatted_prompt, return_tensors="pt").to(device)
|
54 |
|
55 |
# توليد النص
|
56 |
with torch.no_grad():
|
|
|
59 |
max_length=max_length,
|
60 |
temperature=temperature,
|
61 |
do_sample=True,
|
62 |
+
pad_token_id=tokenizer.eos_token_id,
|
63 |
+
repetition_penalty=1.2 # لتجنب التكرار
|
64 |
)
|
65 |
|
66 |
# فك ترميز النص المولد
|
67 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
68 |
+
|
69 |
+
# إزالة النص الأصلي من الاستجابة
|
70 |
+
response = response.replace(formatted_prompt, "").strip()
|
71 |
return response
|
72 |
|
73 |
except Exception as e:
|
74 |
return f"حدث خطأ أثناء توليد الاستجابة: {str(e)}"
|
75 |
|
76 |
# تهيئة Streamlit
|
77 |
+
st.title("LLaMA-2 Chat 🦙")
|
78 |
|
79 |
# إضافة أزرار التحكم في الشريط الجانبي
|
80 |
with st.sidebar:
|
81 |
st.header("إعدادات")
|
82 |
+
temperature = st.slider("درجة الإبداعية", min_value=0.1, max_value=1.0, value=0.7, step=0.1,
|
83 |
+
help="قيمة أعلى تعني إجابات أكثر إبداعية وتنوعاً")
|
84 |
+
max_tokens = st.slider("الحد الأقصى للكلمات", min_value=50, max_value=1000, value=500, step=50,
|
85 |
+
help="الحد الأقصى لطول الإجابة")
|
86 |
|
87 |
if st.button("مسح المحادثة"):
|
88 |
reset_conversation()
|
89 |
+
|
90 |
+
st.markdown("---")
|
91 |
+
st.markdown("""
|
92 |
+
### معلومات النموذج
|
93 |
+
- **النموذج:** Speedy LLaMA-2
|
94 |
+
- **الجهاز:** {}
|
95 |
+
""".format("GPU ⚡" if device == "cuda" else "CPU 💻"))
|
96 |
|
97 |
# تحميل النموذج
|
98 |
try:
|
|
|
101 |
st.sidebar.success("تم تحميل النموذج بنجاح! 🎉")
|
102 |
except Exception as e:
|
103 |
st.error(f"حدث خطأ أثناء تحميل النموذج: {str(e)}")
|
104 |
+
st.error("""
|
105 |
+
تأكد من تثبيت جميع المكتبات المطلوبة:
|
106 |
+
```bash
|
107 |
+
pip install transformers torch accelerate streamlit
|
108 |
+
```
|
109 |
+
""")
|
110 |
st.stop()
|
111 |
|
112 |
# تهيئة سجل المحادثة
|
|
|
119 |
st.write(message["content"])
|
120 |
|
121 |
# معالجة إدخال المستخدم
|
122 |
+
if prompt := st.chat_input("اكتب رسالتك هنا..."):
|
123 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
124 |
|
125 |
with st.chat_message("user"):
|