joermd commited on
Commit
a526abd
·
verified ·
1 Parent(s): 2da5b9e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -8
app.py CHANGED
@@ -12,7 +12,7 @@ def load_model():
12
  """
13
  تحميل النموذج والمُرمِّز مع التخزين المؤقت
14
  """
15
- model_name = "mistralai/Mistral-7B-Instruct-v0.2"
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(prompt, return_tensors="pt").to(device)
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("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:
@@ -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"):