joermd commited on
Commit
eaa998e
·
verified ·
1 Parent(s): 6ea2e70

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -65
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
- from accelerate import init_empty_weights
6
 
7
  # التحقق من توفر GPU
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
@@ -12,26 +12,21 @@ def load_model():
12
  """
13
  تحميل النموذج والمُرمِّز مع التخزين المؤقت
14
  """
15
- tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
16
 
17
- # تحميل النموذج مع إعدادات الذاكرة المنخفضة
 
 
 
18
  model = AutoModelForCausalLM.from_pretrained(
19
- "mistralai/Mistral-7B-Instruct-v0.2",
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
- inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
 
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.markdown(message["content"])
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
- try:
112
- # توليد الرد
113
- with st.spinner('جاري التفكير...'):
114
- response = generate_response(
115
- prompt,
116
- temperature=temp_values,
117
- max_length=max_token_value
118
- )
119
- st.write(response)
120
-
121
- except Exception as e:
122
- response = "😵‍💫 يبدو أن هناك خطأ ما!\n حاول مرة أخرى لاحقاً.\n\n إليك صورة عشوائية لكلب 🐶:"
123
  st.write(response)
124
- random_dog_pick = 'https://random.dog/' + random_dog[np.random.randint(len(random_dog))]
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})