khaoula1972 commited on
Commit
ce9a08b
·
verified ·
1 Parent(s): 04821b6

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +18 -28
src/streamlit_app.py CHANGED
@@ -6,46 +6,39 @@ import torch
6
  # =======================
7
  # RTL & UI Styling
8
  # =======================
9
-
10
  st.markdown(
11
  """
12
  <style>
13
- /* General page direction */
14
  html, body, [class*="css"] {
15
  direction: rtl !important;
16
  text-align: right !important;
17
  font-family: 'Arial', sans-serif !important;
18
  }
19
 
20
- /* Title and headers */
21
  .stApp header, h1, h2, h3, h4, h5, h6 {
22
  direction: rtl !important;
23
  text-align: right !important;
24
  font-family: 'Arial', sans-serif !important;
25
  }
26
 
27
- /* Markdown text */
28
  .stMarkdown, .stMarkdown p {
29
  direction: rtl !important;
30
  text-align: right !important;
31
  font-family: 'Arial', sans-serif !important;
32
  }
33
 
34
- /* Input fields and buttons */
35
  .stTextArea, .stTextInput, .stButton {
36
  direction: rtl !important;
37
  text-align: right !important;
38
  font-family: 'Arial', sans-serif !important;
39
  }
40
 
41
- /* Warning, Error, and Success messages */
42
- [data-testid="stAlert"] {
43
  direction: rtl !important;
44
  text-align: right !important;
45
  font-family: 'Arial', sans-serif !important;
46
  }
47
 
48
- /* Sidebar */
49
  section[data-testid="stSidebar"] {
50
  direction: rtl !important;
51
  text-align: right !important;
@@ -71,7 +64,7 @@ def classify_question(text):
71
  return LABELS[pred]
72
 
73
  # =======================
74
- # LLM double-check
75
  # =======================
76
  def llm_first_aid_check(query, api_key):
77
  url = "https://openrouter.ai/api/v1/chat/completions"
@@ -100,7 +93,7 @@ def llm_first_aid_check(query, api_key):
100
  return False
101
 
102
  # =======================
103
- # Mistral response with explicit few-shot
104
  # =======================
105
  def get_mistral_response(prompt, api_key):
106
  url = "https://openrouter.ai/api/v1/chat/completions"
@@ -109,34 +102,31 @@ def get_mistral_response(prompt, api_key):
109
  "Content-Type": "application/json"
110
  }
111
 
112
- # Explicit few-shot prompt text
113
- few_shot_text = """
114
- أنت مساعد طبي محترف متخصص في الإسعافات الأولية. أجب دائمًا بنصائح إسعاف أولية واضحة ودقيقة وآمنة، باللغة العربية فقط، واتبِع أسلوب جميع الأمثلة التالية:
115
 
116
  سؤال 1: أصابتني ضربة على عظمة حاجبي الأيسر وحدوث انتفاخ بسيط. وضعت كمادات باردة. ماذا ينبغي أن أفعل أيضًا؟
117
  جواب 1: استمر بوضع كمادات باردة لفترات قصيرة (10–15 دقيقة كل ساعة) لتخفيف الورم. ارفع رأسك عند الاستلقاء لتقليل التورم، وتجنّب الضغط على المنطقة. راقب أي تغيّر في الرؤية، فقدان للوعي، أو تقيؤ — إذا ظهرت أي من هذه الأعراض فراجع الطوارئ فورًا.
118
 
119
- سؤال 2: حدث نزيف داخل المخ ثم تلا ذلك ضعف في الساق اليسرى وخرف وهلوسة. هل هذا زهايمر أم شيء آخر؟
120
- جواب 2: هذه أعراض خطيرة تتطلب تقييمًا عصبيًا عاجلًا. حالات النزيف والجلطة بالمخ قد تسبب ضعفًا موضعي واضطرابًا إدراكيًا؛ لذلك يلزم تصوير مقطعي أو رنين مغناطيسي وتقييم من أخصائي أعصاب لتحديد السبب وخطة العلاج. تواصل مع مقدم الرعاية الطارئة أو قسم الأعصاب فورًا.
121
-
122
- سؤال 3: كيف أتعامل مع شخص يتعرض لنوبة صرع؟
123
- جواب 3: أبعد حوله الأشياء الحادة وحافظ على الهدوء. ضع شيئًا ناعمًا تحت رأسه، لا تُقيد حركاته، ولا تضع شيئًا في فمه. بعد انتهاء النوبة، ضع الشخص على جنبه للحفاظ على مجرى الهواء وراقبه حتى يستعيد وعيه. إذا استمرت النوبة أكثر من 5 دقائق أو تكررت، اطلب الإسعاف فورًا.
124
 
125
- سؤال 4: السلام عليكم، كيف أعرف ما إذا كان جرح الرأس يحتاج خياطة، علماً أنه لا يوجد نزيف الآن؟
126
- جواب 4: إن كانت الحافة واسعة أو مفتوحة بعمق أو كان الحجم أكبر من 1 سم أو كان الجرح في وجهٍ يؤثر على الشكل، فقد يحتاج للخياطة ويُفضل عرض المصاب على الطبيب. نظف الجرح بمحلول فيزيولوجي، غطّه بشاش معقم، وتجنب إعادة الخياطة بعد مرور أكثر من 12 ساعة دون استشارة طبية. إذا ظهرت علامات التهاب أو عدم التئام، راجع الطبيب.
127
 
128
- سؤال 5: {user_query}
129
- جواب 5:
130
- """.format(user_query=prompt)
131
 
132
  data = {
133
  "model": "mistralai/mistral-7b-instruct",
134
  "messages": [
135
- {"role": "system", "content": "أنت مساعد طبي محترف متخصص في الإسعافات الأولية."},
136
- {"role": "user", "content": few_shot_text}
137
  ],
138
- "temperature": 0.2, # more consistent answers
139
- "max_tokens": 768
140
  }
141
 
142
  response = requests.post(url, headers=headers, json=data)
@@ -159,7 +149,7 @@ if st.button("اسأل"):
159
  elif not user_input.strip():
160
  st.warning("من فضلك اكتب سؤالك")
161
  else:
162
- with st.spinner("جار تحليل سؤالك..."):
163
  category = classify_question(user_input)
164
 
165
  if category == "LABEL_1":
 
6
  # =======================
7
  # RTL & UI Styling
8
  # =======================
 
9
  st.markdown(
10
  """
11
  <style>
 
12
  html, body, [class*="css"] {
13
  direction: rtl !important;
14
  text-align: right !important;
15
  font-family: 'Arial', sans-serif !important;
16
  }
17
 
 
18
  .stApp header, h1, h2, h3, h4, h5, h6 {
19
  direction: rtl !important;
20
  text-align: right !important;
21
  font-family: 'Arial', sans-serif !important;
22
  }
23
 
 
24
  .stMarkdown, .stMarkdown p {
25
  direction: rtl !important;
26
  text-align: right !important;
27
  font-family: 'Arial', sans-serif !important;
28
  }
29
 
 
30
  .stTextArea, .stTextInput, .stButton {
31
  direction: rtl !important;
32
  text-align: right !important;
33
  font-family: 'Arial', sans-serif !important;
34
  }
35
 
36
+ [data-testid="stAlert"], [data-testid="stSpinnerText"] {
 
37
  direction: rtl !important;
38
  text-align: right !important;
39
  font-family: 'Arial', sans-serif !important;
40
  }
41
 
 
42
  section[data-testid="stSidebar"] {
43
  direction: rtl !important;
44
  text-align: right !important;
 
64
  return LABELS[pred]
65
 
66
  # =======================
67
+ # LLM first-aid check
68
  # =======================
69
  def llm_first_aid_check(query, api_key):
70
  url = "https://openrouter.ai/api/v1/chat/completions"
 
93
  return False
94
 
95
  # =======================
96
+ # Mistral Response
97
  # =======================
98
  def get_mistral_response(prompt, api_key):
99
  url = "https://openrouter.ai/api/v1/chat/completions"
 
102
  "Content-Type": "application/json"
103
  }
104
 
105
+ few_shot_examples = """
106
+ أنت مساعد طبي محترف متخصص في الإسعافات الأولية. أجب دائمًا بنصائح إسعاف أولية واضحة ودقيقة وآمنة، باللغة العربية فقط.
 
107
 
108
  سؤال 1: أصابتني ضربة على عظمة حاجبي الأيسر وحدوث انتفاخ بسيط. وضعت كمادات باردة. ماذا ينبغي أن أفعل أيضًا؟
109
  جواب 1: استمر بوضع كمادات باردة لفترات قصيرة (10–15 دقيقة كل ساعة) لتخفيف الورم. ارفع رأسك عند الاستلقاء لتقليل التورم، وتجنّب الضغط على المنطقة. راقب أي تغيّر في الرؤية، فقدان للوعي، أو تقيؤ — إذا ظهرت أي من هذه الأعراض فراجع الطوارئ فورًا.
110
 
111
+ سؤال 2: كيف أتعامل مع شخص يتعرض لنوبة صرع؟
112
+ جواب 2: أبعد حوله الأشياء الحادة وحافظ على الهدوء. ضع شيئًا ناعمًا تحت رأسه، لا تُقيد حركاته، ولا تضع شيئًا في فمه. بعد انتهاء النوبة، ضع الشخص على جنبه للحفاظ على مجرى الهواء وراقبه حتى يستعيد وعيه. إذا استمرت النوبة أكثر من 5 دقائق أو تكررت، اطلب الإسعاف فورًا.
113
+ """
 
 
114
 
115
+ user_instruction = f"""
116
+ سؤال: {prompt}
117
 
118
+ اكتب الجواب بشكل مختصر ومباشر دون تكرار أو إعادة صياغة.
119
+ الجواب:
120
+ """
121
 
122
  data = {
123
  "model": "mistralai/mistral-7b-instruct",
124
  "messages": [
125
+ {"role": "system", "content": few_shot_examples},
126
+ {"role": "user", "content": user_instruction}
127
  ],
128
+ "temperature": 0.3,
129
+ "max_tokens": 512
130
  }
131
 
132
  response = requests.post(url, headers=headers, json=data)
 
149
  elif not user_input.strip():
150
  st.warning("من فضلك اكتب سؤالك")
151
  else:
152
+ with st.spinner("جارٍ تحليل سؤالك..."):
153
  category = classify_question(user_input)
154
 
155
  if category == "LABEL_1":