Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -2,7 +2,7 @@ import numpy as np
|
|
2 |
import streamlit as st
|
3 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
4 |
import torch
|
5 |
-
|
6 |
|
7 |
# التحقق من توفر GPU
|
8 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
@@ -12,26 +12,21 @@ def load_model():
|
|
12 |
"""
|
13 |
تحميل النموذج والمُرمِّز مع التخزين المؤقت
|
14 |
"""
|
15 |
-
|
16 |
|
17 |
-
#
|
|
|
|
|
|
|
18 |
model = AutoModelForCausalLM.from_pretrained(
|
19 |
-
|
20 |
torch_dtype=torch.float16,
|
21 |
low_cpu_mem_usage=True,
|
22 |
device_map="auto"
|
23 |
)
|
|
|
24 |
return model, tokenizer
|
25 |
|
26 |
-
# الصور العشوائية للكلاب عند حدوث خطأ
|
27 |
-
random_dog = [
|
28 |
-
"0f476473-2d8b-415e-b944-483768418a95.jpg",
|
29 |
-
"1bd75c81-f1d7-4e55-9310-a27595fa8762.jpg",
|
30 |
-
"526590d2-8817-4ff0-8c62-fdcba5306d02.jpg",
|
31 |
-
"1326984c-39b0-492c-a773-f120d747a7e2.jpg",
|
32 |
-
"42a98d03-5ed7-4b3b-af89-7c4376cb14c3.jpg"
|
33 |
-
]
|
34 |
-
|
35 |
def reset_conversation():
|
36 |
'''
|
37 |
إعادة تعيين المحادثة
|
@@ -40,90 +35,76 @@ def reset_conversation():
|
|
40 |
st.session_state.messages = []
|
41 |
return None
|
42 |
|
43 |
-
def generate_response(prompt, temperature, max_length):
|
44 |
"""
|
45 |
توليد استجابة من النموذج
|
46 |
"""
|
47 |
try:
|
48 |
-
|
|
|
49 |
|
|
|
50 |
with torch.no_grad():
|
51 |
outputs = model.generate(
|
52 |
-
inputs,
|
53 |
max_length=max_length,
|
54 |
temperature=temperature,
|
55 |
do_sample=True,
|
56 |
pad_token_id=tokenizer.eos_token_id
|
57 |
)
|
58 |
|
|
|
59 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
60 |
return response
|
|
|
61 |
except Exception as e:
|
62 |
-
return str(e)
|
|
|
|
|
|
|
63 |
|
64 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
try:
|
66 |
-
with st.spinner(
|
67 |
model, tokenizer = load_model()
|
|
|
68 |
except Exception as e:
|
69 |
st.error(f"حدث خطأ أثناء تحميل النموذج: {str(e)}")
|
70 |
-
st.error("تأكد من تثبيت جميع المكتبات المطلوبة:")
|
71 |
-
st.code("""
|
72 |
-
pip install -U accelerate>=0.26.0
|
73 |
-
pip install transformers
|
74 |
-
pip install torch
|
75 |
-
pip install streamlit
|
76 |
-
""")
|
77 |
st.stop()
|
78 |
|
79 |
-
# إعداد واجهة Streamlit
|
80 |
-
st.subheader('Mistral Chat')
|
81 |
-
|
82 |
-
# إضافة أزرار التحكم في الشريط الجانبي
|
83 |
-
temp_values = st.sidebar.slider('اختر قيمة درجة الحرارة', 0.0, 1.0, 0.5)
|
84 |
-
max_token_value = st.sidebar.slider('اختر الحد الأقصى للرموز', 100, 2000, 500)
|
85 |
-
st.sidebar.button('إعادة تعيين المحادثة', on_click=reset_conversation)
|
86 |
-
|
87 |
-
# معلومات حول النموذج
|
88 |
-
st.sidebar.markdown("""
|
89 |
-
### معلومات النظام
|
90 |
-
- النموذج: Mistral-7B-Instruct-v0.2
|
91 |
-
- الجهاز: GPU متوفر ✅ """ if torch.cuda.is_available() else "CPU ⚠️")
|
92 |
-
|
93 |
# تهيئة سجل المحادثة
|
94 |
if "messages" not in st.session_state:
|
95 |
st.session_state.messages = []
|
96 |
|
97 |
-
# عرض
|
98 |
for message in st.session_state.messages:
|
99 |
with st.chat_message(message["role"]):
|
100 |
-
st.
|
101 |
|
102 |
# معالجة إدخال المستخدم
|
103 |
-
if prompt := st.chat_input(
|
104 |
-
# عرض رسالة المستخدم
|
105 |
-
with st.chat_message("user"):
|
106 |
-
st.markdown(prompt)
|
107 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
108 |
|
109 |
-
|
|
|
|
|
110 |
with st.chat_message("assistant"):
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
st.write(response)
|
120 |
-
|
121 |
-
except Exception as e:
|
122 |
-
response = "😵💫 يبدو أن هناك خطأ ما!\n حاول مرة أخرى لاحقاً.\n\n إليك صورة عشوائية لكلب 🐶:"
|
123 |
st.write(response)
|
124 |
-
|
125 |
-
st.image(random_dog_pick)
|
126 |
-
st.write("رسالة الخطأ:")
|
127 |
-
st.write(e)
|
128 |
-
|
129 |
-
st.session_state.messages.append({"role": "assistant", "content": response})
|
|
|
2 |
import streamlit as st
|
3 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
4 |
import torch
|
5 |
+
import os
|
6 |
|
7 |
# التحقق من توفر GPU
|
8 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
12 |
"""
|
13 |
تحميل النموذج والمُرمِّز مع التخزين المؤقت
|
14 |
"""
|
15 |
+
model_name = "mistralai/Mistral-7B-Instruct-v0.2"
|
16 |
|
17 |
+
# تهيئة الـtokenizer أولاً
|
18 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
19 |
+
|
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 |
)
|
27 |
+
|
28 |
return model, tokenizer
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
def reset_conversation():
|
31 |
'''
|
32 |
إعادة تعيين المحادثة
|
|
|
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(prompt, return_tensors="pt").to(device)
|
45 |
|
46 |
+
# توليد النص
|
47 |
with torch.no_grad():
|
48 |
outputs = model.generate(
|
49 |
+
**inputs,
|
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("Mistral Chat 🤖")
|
65 |
|
66 |
+
# إضافة أزرار التحكم في الشريط الجانبي
|
67 |
+
with st.sidebar:
|
68 |
+
st.header("إعدادات")
|
69 |
+
temperature = st.slider("درجة الحرارة", min_value=0.1, max_value=1.0, value=0.7, step=0.1)
|
70 |
+
max_tokens = st.slider("الحد الأقصى للكلمات", min_value=50, max_value=1000, value=500, step=50)
|
71 |
+
|
72 |
+
if st.button("مسح المحادثة"):
|
73 |
+
reset_conversation()
|
74 |
+
|
75 |
+
# تحميل النموذج
|
76 |
try:
|
77 |
+
with st.spinner("جاري تحميل النموذج... قد يستغرق هذا بضع دقائق..."):
|
78 |
model, tokenizer = load_model()
|
79 |
+
st.sidebar.success("تم تحميل النموذج بنجاح! 🎉")
|
80 |
except Exception as e:
|
81 |
st.error(f"حدث خطأ أثناء تحميل النموذج: {str(e)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
st.stop()
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
# تهيئة سجل المحادثة
|
85 |
if "messages" not in st.session_state:
|
86 |
st.session_state.messages = []
|
87 |
|
88 |
+
# عرض المحادثة السابقة
|
89 |
for message in st.session_state.messages:
|
90 |
with st.chat_message(message["role"]):
|
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"):
|
98 |
+
st.write(prompt)
|
99 |
+
|
100 |
with st.chat_message("assistant"):
|
101 |
+
with st.spinner("جاري التفكير..."):
|
102 |
+
response = generate_response(
|
103 |
+
model=model,
|
104 |
+
tokenizer=tokenizer,
|
105 |
+
prompt=prompt,
|
106 |
+
temperature=temperature,
|
107 |
+
max_length=max_tokens
|
108 |
+
)
|
|
|
|
|
|
|
|
|
109 |
st.write(response)
|
110 |
+
st.session_state.messages.append({"role": "assistant", "content": response})
|
|
|
|
|
|
|
|
|
|