Nuzwa commited on
Commit
e3b8a57
·
verified ·
1 Parent(s): 746e4a8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -11
app.py CHANGED
@@ -5,7 +5,7 @@ from dataclasses import dataclass
5
 
6
  import gradio as gr
7
  import torch
8
- from transformers import AutoTokenizer, AutoModelForCausalLM
9
 
10
  # ---------------- Language detection ----------------
11
  ARABIC_RE = re.compile(r"[\u0600-\u06FF]")
@@ -141,6 +141,57 @@ def diversify_if_similar(prev: str, current: str, user_msg: str, lang: str) -> s
141
  return alt if alt else current
142
  return current
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  # ---------------- Base checklist + Go-Bag ----------------
145
  def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
146
  low = user_msg.lower()
@@ -150,11 +201,11 @@ def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
150
  checklist = ("✅ ابھی یہ کریں:\n"
151
  "- جھک جائیں/Stay low — دھواں اوپر جاتا ہے\n"
152
  "- ناک/منہ پر گیلا کپڑا رکھیں\n"
153
- "- اگر ممکن ہو تو بجلی/گیس مین بند کریں\n"
154
  "- گرم دروازہ مت کھولیں؛ دوسرا راستہ لیں\n"
155
  "- سیڑھیاں استعمال کریں — لفٹ نہیں\n"
156
  "- بچوں/بزرگوں کو ساتھ رکھیں\n"
157
- "🕊️ گھبرائیں نہیں — الله آپ کے ساتھ ہے۔"
158
  ) if lang=="ur" else (
159
  "✅ Do this now:\n"
160
  "- Stay low — smoke rises\n"
@@ -173,9 +224,9 @@ def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
173
  checklist = ("✅ ابھی یہ کریں:\n"
174
  "- Drop, Cover, Hold — جھکیں، ڈھکیں، پکڑیں\n"
175
  "- کھڑکیوں/بھاری اشیاء سے دور رہیں\n"
176
- "- جھٹکے رکنے پر سیڑھیوں سے باہر نکلیں (لفٹ استعمال نہ کریں)\n"
177
  "- کھلی جگہ میں رکیں\n"
178
- "🕊️ حوصلہ رکھیں — الله کریم خیر کا معاملہ فرمائیں گے۔"
179
  ) if lang=="ur" else (
180
  "✅ Do this now:\n"
181
  "- Drop, Cover, Hold On\n"
@@ -190,11 +241,11 @@ def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
190
  elif any(k in low for k in ["سیلاب","flood","overflow","water entering","طوفان","storm","آندھی"]):
191
  evac = True
192
  checklist = ("✅ ابھی یہ کریں:\n"
193
- "- اگر ممکن ہو تو بجلی مین سوئچ بند کریں\n"
194
- "- اونچی جگہ چھت پر چلے جائیں \n"
195
  "- پانی میں گاڑی نہ چلائیں\n"
196
  "- بچوں/بزرگوں کو پہلے نکالیں\n"
197
- "🕊️ گھبرائیں نہیں — حوصلہ کریں آپ صحیح سلامت نکل سکتے ہیں۔"
198
  ) if lang=="ur" else (
199
  "✅ Do this now:\n"
200
  "- Turn off main power if safe\n"
@@ -209,10 +260,10 @@ def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
209
  elif any(k in low for k in ["gas","گیس","leak","smell gas","بو"]):
210
  checklist = ("✅ ابھی یہ کریں:\n"
211
  "- کوئی چنگاری/سوئچ/لائٹر استعمال نہ کریں\n"
212
- "- کھڑکیاں/دروازے کھول کر ہوا کے گزرنے کا راستہ بنائیں \n"
213
  "- گیس مین والو بند کریں\n"
214
  "- محفوظ فاصلے پر چلے جائیں\n"
215
- "🕊️ پرسکون رہیں — اور الله سے سلامتی کی دعا کریں۔"
216
  ) if lang=="ur" else (
217
  "✅ Do this now:\n"
218
  "- No sparks (no switches/lighters/flash)\n"
@@ -226,7 +277,7 @@ def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
226
  ["Mask/wet cloth","IDs","Phone+power bank","Water","Medicines"])
227
  elif any(k in low for k in ["injury","زخمی","bleeding","cut","fracture","burn"]):
228
  checklist = ("✅ ابھی یہ کریں:\n"
229
- "- خون ہو تو مضبوطی سے دبائیں (صاف کپڑا)\n"
230
  "- زخم صاف پانی سے دھوئیں\n"
231
  "- گہرا زخم/زیادہ خون ہو تو فوری مدد لیں\n"
232
  "- گردن/کمر چوٹ میں مریض کو نہ ہلائیں\n"
@@ -303,6 +354,15 @@ def chat_fn(user_msg: str, chat_messages: List[Dict[str,str]], sim_state: dict):
303
  {"role":"assistant","content":msg}
304
  ], sim_state
305
 
 
 
 
 
 
 
 
 
 
306
  # Base checklist + Go-Bag
307
  base, _ = base_checklist_and_bag(user_msg, lang)
308
 
 
5
 
6
  import gradio as gr
7
  import torch
8
+ from transformers import AutoTokenizer, AutoModelForCausalLM
9
 
10
  # ---------------- Language detection ----------------
11
  ARABIC_RE = re.compile(r"[\u0600-\u06FF]")
 
141
  return alt if alt else current
142
  return current
143
 
144
+ # ---------------- Prebaked Urdu FAQs (exact templates you provided) ----------------
145
+ # ہم regex-based ہلکا میچ استعمال کر رہے ہیں تاکہ اردو عبارت کے عام انداز پکڑ سکیں
146
+ PREBAKED_UR: List[Dict[str,str]] = [
147
+ {
148
+ "q_re": r"(سیلاب).*(گھر).*(ہوں|ہو)", # سیلاب آ گیا! میں گھر میں ہوں
149
+ "answer": "🚨 فوری اقدامات:\n- فوراً اونچی جگہ (2+ فلور) کی طرف ہٹیں۔\n- گہرے گھاٹ، ندیوں کے کنارے، یا چھوٹے دریاؤں کے قریب نہ رہیں۔\n- اگر گاڑی میں ہیں، تو فوراً گاڑی چھوڑ کر ہٹیں — گاڑی بہہ سکتی ہے۔\n\n📌 اگلے اقدامات:\n- 1122 یا 1500 پر فون کریں۔\n- اپنے فون کو ہائی ہولڈ رکھیں — پانی میں بھیگنے سے بچائیں ۔\n\n💡 کلیدی نکات:\n- پانی میں ہاتھ پاؤں نہ ڈالیں — گہرائی یا تیز دھارا کا خطرہ ہے۔\n- سیلاب کے بعد گھر میں داخل نہ ہوں جب تک کہ پانی نہ روکا گیا ہو۔"
150
+ },
151
+ {
152
+ "q_re": r"(زلزلہ).*(آ).*(رہا|رہی|گیا|گئی)|(جھٹک|ہل رہا)",
153
+ "answer": "🚨 فوری اقدامات:\n- 'ڈاون ڈاؤن' (Drop, Cover, Hold On):\n - گریں (Drop)\n - ٹیبل یا مضبوط دیوار کے نیچے چھپیں (Cover)\n - سر کو ہاتھوں سے چھپائیں (Hold On)\n- کھڑے ہو کر دروازے یا کھڑکیوں کی طرف نہ بھاگیں — شیشے ٹوٹ سکتے ہیں۔\n\n📌 اگلے اقدامات:\n- زلزلہ ختم ہونے کے بعد فوراً گھر سے باہر نکلیں — گری سے گری ہوئی عمارت گر سکتی ہے۔\n- بجلی، گیس، پانی کے پائپ بند کریں (اگر گیس کی بو آ رہی ہو)۔\n\n💡 کلیدی نکات:\n- زلزلہ کے دوران کسی چیز کو ہلائیں یا چھوڑیں — ہلاکت خیز ہو سکتا ہے۔\n- گاڑی میں ہوں تو گاڑی کے اندر بیٹھیں — باہر نہ نکلیں۔"
154
+ },
155
+ {
156
+ "q_re": r"(آگ|جل).*(لگ|گئی|گیا)",
157
+ "answer": "🚨 فوری اقدامات:\n- فوراً گھر سے باہر نکلیں — دھواں سانس کے لیے خطرہ ہے۔\n- ہاتھ سے چہرہ ڈھانپیں اور زمین پر چلتے رہیں (دھواں اوپر ہوتا ہے)۔\n- کوئی بجلی، فون، یا شمع نہ چلائیں — چمک آتشباری کر سکتی ہے۔\n\n📌 اگلے اقدامات:\n- 1122 پر فون کریں — آگ کے بارے میں مطلع کریں۔\n- رشتہ داروں کو مطلع کریں کہ آپ کہاں ہیں۔\n\n💡 کلیدی نکات:\n- زندگی کو بچانا آگ کو بچانے سے زیادہ اہم ہے۔\n- آگ کے بعد گھر میں داخل نہ ہوں جب تک کہ ٹیم کا اجازت نہ ہو۔"
158
+ },
159
+ {
160
+ "q_re": r"(گیس).*(لیک|بو|رس|smell)",
161
+ "answer": "🚨 فوری اقدامات:\n- گیس کا سوئچ بند کریں (اسٹو کے بالکل نیچے)۔\n- کوئی بجلی، فون، یا شمع نہ چلائیں — چمک آتشباری کر سکتی ہے۔\n- فوراً گھر سے باہر نکلیں — گیس ہلکی سی بھی ہو سکتی ہے۔\n\n📌 اگلے اقدامات:\n- 1122 یا 1500 پر فون کریں — گیس کمپنی کو مطلع کریں۔\n- گھر میں داخل نہ ہوں جب تک کہ گیس چیک نہ ہو جائے۔\n\n💡 کلیدی نکات:\n- گیس لیک کا خطرہ ہر وقت موجود ہے — ہر ماہ چیک کروائیں۔\n- گیس ڈیٹیکٹر لگائیں — اگر ہے، تو اسے فوراً چالو کریں۔"
162
+ },
163
+ {
164
+ "q_re": r"(کلاؤڈ\s*برسٹ|cloud\s*burst)",
165
+ "answer": "🚨 فوری اقدامات:\n- فوراً اونچی جگہ (پہاڑی، چوٹی) کی طرف ہٹیں۔\n- گہرے گھاٹ، ندیوں کے کنارے، یا چھوٹے دریاؤں کے قریب نہ رہیں۔\n- اگر گاڑی میں ہیں، تو فوراً گاڑی چھوڑ کر ہٹیں — گاڑی بہہ سکتی ہے۔\n\n📌 اگلے اقدامات:\n- 1122 پر فون کریں — ہیلپ مانگیں۔\n- اپنے فون کو ہائی ہولڈ رکھیں — پانی میں نہ ڈالیں۔\n\n💡 کلیدی نکات:\n- کلاؤڈ برسٹ کے بعد سیلاب فوری ہوتا ہے — اس لیے وقت ضائع نہ کریں۔\n- اگر زمین ہل رہی ہو، تو یہ سیلاب کا اشارہ ہے — فوراً ہٹیں۔"
166
+ },
167
+ {
168
+ "q_re": r"(بجلی).*(گر|گری|گر گئی|گرگئی)|lightning|electr",
169
+ "answer": "🚨 فوری اقدامات:\n- فوراً بجلی کے سوئچ بند کریں (اگر ممکن ہو)۔\n- کوئی بجلی کا آلہ نہ چلائیں — شرارت یا چوٹ لگ سکتی ہے۔\n- ہاتھ پاؤں نہ ڈالیں بلکہ ہلکی روشنی (ٹارچ) استعمال کریں۔\n\n📌 اگلے اقدامات:\n- 1122 پر فون کریں — بجلی کمپنی کو مطلع کریں۔\n- ایمرجنسی ٹارچ یا فون کی روشنی استعمال کریں۔\n\n💡 کلیدی نکات:\n- بجلی گرنے کے بعد کسی بھی الیکٹریکل آلے کو چلانے سے گریز کریں۔\n- ہر 6 ماہ بجلی کے سوئچ اور کیبلز چیک کروائیں۔"
170
+ },
171
+ {
172
+ "q_re": r"(^|\s)SOS(\s|!|۔)|مدد\s*کرو",
173
+ "answer": "🚨 SOS فائر ہو گیا!\n- فوراً 1122 پر فون کریں — ہیلپ ڈیسک آپ کو مدد کرے گی۔\n- اگر فون کنکشن ہو، تو میں فوراً 1122 پر فون کرتا ہوں...\n- اپنے آپ کو ٹھیک رکھیں — آپ کے ساتھ ہے۔\n\n💡 کلیدی نکات:\n- SOS کا وقت ہے — فوراً 1122 پر فون کریں۔\n- ہر ہفتے ایمرجنسی بیگ چیک کریں: پانی، فوڈ، ٹارچ، فون چارجر، فارمیسی۔"
174
+ },
175
+ {
176
+ "q_re": r"(سیلاب).*(بعد|ختم|اتر)",
177
+ "answer": "🚨 ایمرجنسی کے بعد:\n- گھر میں داخل نہ ہوں جب تک کہ پانی نہ روکا گیا ہو۔\n- گیس، بجلی، پانی کے پائپ چیک کروائیں — خطرہ ہو سکتا ہے۔\n- اپنے فون کو چارج کریں — ہیلپ ڈیسک سے رابطہ کریں۔\n\n📌 اگلے اقدامات:\n- 1122 پر فون کریں — اپنی حالت بتائیں۔\n- رشتہ داروں کو مطلع کریں کہ آپ کہاں ہیں۔\n\n💡 کلیدی نکات:\n- پانی کے بعد گرد و غبار، کیمیکل، یا بیکٹیریا ہو سکتے ہیں — کپڑے بدلیں۔\n- ایمرجنسی بیگ میں پانی، فوڈ، فارمیسی، ٹارچ وغیرہ رکھیں"
178
+ },
179
+ ]
180
+
181
+ def match_prebaked_ur(user_msg: str) -> str:
182
+ """اگر یوزر میسج اردو میں ہو اور کسی پری باکڈ ٹیمپلیٹ سے میچ کرے تو وہی جواب لوٹائیں۔"""
183
+ if detect_lang(user_msg) != "ur":
184
+ return ""
185
+ text = user_msg.strip()
186
+ for item in PREBAKED_UR:
187
+ pattern = item.get("q_re")
188
+ try:
189
+ if re.search(pattern, text, flags=re.IGNORECASE):
190
+ return item.get("answer","").strip()
191
+ except re.error:
192
+ continue
193
+ return ""
194
+
195
  # ---------------- Base checklist + Go-Bag ----------------
196
  def base_checklist_and_bag(user_msg: str, lang: str) -> Tuple[str, List[str]]:
197
  low = user_msg.lower()
 
201
  checklist = ("✅ ابھی یہ کریں:\n"
202
  "- جھک جائیں/Stay low — دھواں اوپر جاتا ہے\n"
203
  "- ناک/منہ پر گیلا کپڑا رکھیں\n"
204
+ "- اگر محفوظ ہو تو بجلی/گیس مین بند کریں\n"
205
  "- گرم دروازہ مت کھولیں؛ دوسرا راستہ لیں\n"
206
  "- سیڑھیاں استعمال کریں — لفٹ نہیں\n"
207
  "- بچوں/بزرگوں کو ساتھ رکھیں\n"
208
+ "🕊️ گھبرائیں نہیں — میں آپ کے ساتھ ہوں۔"
209
  ) if lang=="ur" else (
210
  "✅ Do this now:\n"
211
  "- Stay low — smoke rises\n"
 
224
  checklist = ("✅ ابھی یہ کریں:\n"
225
  "- Drop, Cover, Hold — جھکیں، ڈھکیں، پکڑیں\n"
226
  "- کھڑکیوں/بھاری اشیاء سے دور رہیں\n"
227
+ "- جھٹکے رکنے پر سیڑھیوں سے باہر نکلیں (لفٹ نہیں)\n"
228
  "- کھلی جگہ میں رکیں\n"
229
+ "🕊️ حوصلہ رکھیں — میں آپ کے ساتھ ہوں۔"
230
  ) if lang=="ur" else (
231
  "✅ Do this now:\n"
232
  "- Drop, Cover, Hold On\n"
 
241
  elif any(k in low for k in ["سیلاب","flood","overflow","water entering","طوفان","storm","آندھی"]):
242
  evac = True
243
  checklist = ("✅ ابھی یہ کریں:\n"
244
+ "- اگر محفوظ ہو تو بجلی مین سوئچ بند کریں\n"
245
+ "- اونچی جگہ/چھت پر منتقل ہوں\n"
246
  "- پانی میں گاڑی نہ چلائیں\n"
247
  "- بچوں/بزرگوں کو پہلے نکالیں\n"
248
+ "🕊️ گھبرائیں نہیں — آپ محفوظ نکل سکتے ہیں۔"
249
  ) if lang=="ur" else (
250
  "✅ Do this now:\n"
251
  "- Turn off main power if safe\n"
 
260
  elif any(k in low for k in ["gas","گیس","leak","smell gas","بو"]):
261
  checklist = ("✅ ابھی یہ کریں:\n"
262
  "- کوئی چنگاری/سوئچ/لائٹر استعمال نہ کریں\n"
263
+ "- کھڑکیاں/دروازے کھول کر ہوا دار کریں\n"
264
  "- گیس مین والو بند کریں\n"
265
  "- محفوظ فاصلے پر چلے جائیں\n"
266
+ "🕊️ پرسکون رہیں — میں رہنمائی کر رہا/رہی ہوں۔"
267
  ) if lang=="ur" else (
268
  "✅ Do this now:\n"
269
  "- No sparks (no switches/lighters/flash)\n"
 
277
  ["Mask/wet cloth","IDs","Phone+power bank","Water","Medicines"])
278
  elif any(k in low for k in ["injury","زخمی","bleeding","cut","fracture","burn"]):
279
  checklist = ("✅ ابھی یہ کریں:\n"
280
+ "- خون ہو تو مضبوط دباؤ دیں (صاف کپڑا)\n"
281
  "- زخم صاف پانی سے دھوئیں\n"
282
  "- گہرا زخم/زیادہ خون ہو تو فوری مدد لیں\n"
283
  "- گردن/کمر چوٹ میں مریض کو نہ ہلائیں\n"
 
354
  {"role":"assistant","content":msg}
355
  ], sim_state
356
 
357
+ # ✅ NEW: Prebaked Urdu templates first
358
+ pre_ur = match_prebaked_ur(user_msg)
359
+ if pre_ur:
360
+ final = pre_ur + "\n\n" + helplines_block("ur")
361
+ return chat_messages + [
362
+ {"role":"user","content":user_msg},
363
+ {"role":"assistant","content":final}
364
+ ], sim_state
365
+
366
  # Base checklist + Go-Bag
367
  base, _ = base_checklist_and_bag(user_msg, lang)
368