Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- 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 |
-
|
| 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
|
| 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
|
| 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 |
-
|
| 113 |
-
|
| 114 |
-
أنت مساعد طبي محترف متخصص في الإسعافات الأولية. أجب دائمًا بنصائح إسعاف أولية واضحة ودقيقة وآمنة، باللغة العربية فقط، واتبِع أسلوب جميع الأمثلة التالية:
|
| 115 |
|
| 116 |
سؤال 1: أصابتني ضربة على عظمة حاجبي الأيسر وحدوث انتفاخ بسيط. وضعت كمادات باردة. ماذا ينبغي أن أفعل أيضًا؟
|
| 117 |
جواب 1: استمر بوضع كمادات باردة لفترات قصيرة (10–15 دقيقة كل ساعة) لتخفيف الورم. ارفع رأسك عند الاستلقاء لتقليل التورم، وتجنّب الضغط على المنطقة. راقب أي تغيّر في الرؤية، فقدان للوعي، أو تقيؤ — إذا ظهرت أي من هذه الأعراض فراجع الطوارئ فورًا.
|
| 118 |
|
| 119 |
-
سؤال 2:
|
| 120 |
-
جواب 2:
|
| 121 |
-
|
| 122 |
-
سؤال 3: كيف أتعامل مع شخص يتعرض لنوبة صرع؟
|
| 123 |
-
جواب 3: أبعد حوله الأشياء الحادة وحافظ على الهدوء. ضع شيئًا ناعمًا تحت رأسه، لا تُقيد حركاته، ولا تضع شيئًا في فمه. بعد انتهاء النوبة، ضع الشخص على جنبه للحفاظ على مجرى الهواء وراقبه حتى يستعيد وعيه. إذا استمرت النوبة أكثر من 5 دقائق أو تكررت، اطلب الإسعاف فورًا.
|
| 124 |
|
| 125 |
-
|
| 126 |
-
|
| 127 |
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
"""
|
| 131 |
|
| 132 |
data = {
|
| 133 |
"model": "mistralai/mistral-7b-instruct",
|
| 134 |
"messages": [
|
| 135 |
-
{"role": "system", "content":
|
| 136 |
-
{"role": "user", "content":
|
| 137 |
],
|
| 138 |
-
"temperature": 0.
|
| 139 |
-
"max_tokens":
|
| 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":
|