Paulwalker4884 commited on
Commit
4a2ba1a
·
1 Parent(s): 48fea66

Initial commit

Browse files
Files changed (1) hide show
  1. app.py +197 -2
app.py CHANGED
@@ -107,7 +107,7 @@ def get_user_history(session_id):
107
 
108
  history_text = "# 📊 تاریخچه شما\n\n"
109
  for i, (timestamp, query_type, input_text, response) in enumerate(results, 1):
110
- emoji = "💊" if query_type == "drug_interaction" else "🔬"
111
  history_text += f"## {emoji} مورد {i} - {timestamp}\n\n"
112
  history_text += f"**ورودی:** {input_text[:100]}...\n\n"
113
  history_text += f"**پاسخ:** {response[:200]}...\n\n---\n\n"
@@ -130,6 +130,27 @@ def clear_user_history(session_id):
130
  logger.error(f"Error clearing history: {e}")
131
  return "❌ خطا در پاک کردن تاریخچه"
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  def analyze_drug_interaction(drug1, drug2, session_id):
134
  """تحلیل تداخل دارویی"""
135
  if not drug1.strip() or not drug2.strip():
@@ -236,10 +257,121 @@ def analyze_lab_image(image, session_id):
236
  return f"# 🔬 تحلیل نتیجه آزمایش\n\n## متن استخراج شده:\n```\n{extracted_text}\n```\n\n## تحلیل:\n\n{result}"
237
 
238
  except Exception as e:
239
- error_msg = f" خطا در تحلیل تصویر: {str(e)}"
240
  logger.error(error_msg)
241
  return error_msg
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  # راه‌اندازی دیتابیس
244
  init_database()
245
 
@@ -340,6 +472,46 @@ def create_app():
340
  label="نتیجه تحلیل"
341
  )
342
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  # تب تاریخچه
344
  with gr.Tab("📊 تاریخچه و مدیریت"):
345
  with gr.Row():
@@ -379,6 +551,29 @@ def create_app():
379
  outputs=lab_result
380
  )
381
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  show_history_btn.click(
383
  fn=get_user_history,
384
  inputs=session_state,
 
107
 
108
  history_text = "# 📊 تاریخچه شما\n\n"
109
  for i, (timestamp, query_type, input_text, response) in enumerate(results, 1):
110
+ emoji = "💊" if query_type == "drug_interaction" else "🔬" if query_type == "lab_analysis" else "💬"
111
  history_text += f"## {emoji} مورد {i} - {timestamp}\n\n"
112
  history_text += f"**ورودی:** {input_text[:100]}...\n\n"
113
  history_text += f"**پاسخ:** {response[:200]}...\n\n---\n\n"
 
130
  logger.error(f"Error clearing history: {e}")
131
  return "❌ خطا در پاک کردن تاریخچه"
132
 
133
+ def get_chat_history(session_id):
134
+ """دریافت تاریخچه چت برای حافظه مکالمه"""
135
+ try:
136
+ conn = sqlite3.connect("nurca.db")
137
+ cursor = conn.cursor()
138
+ cursor.execute('''SELECT input_text, response
139
+ FROM chat_history WHERE session_id = ? AND query_type = 'symptom_chat'
140
+ ORDER BY timestamp ASC LIMIT 10''', (session_id,))
141
+ results = cursor.fetchall()
142
+ conn.close()
143
+
144
+ chat_messages = []
145
+ for input_text, response in results:
146
+ chat_messages.append({"role": "user", "content": input_text})
147
+ chat_messages.append({"role": "assistant", "content": response})
148
+
149
+ return chat_messages
150
+ except Exception as e:
151
+ logger.error(f"Error getting chat history: {e}")
152
+ return []
153
+
154
  def analyze_drug_interaction(drug1, drug2, session_id):
155
  """تحلیل تداخل دارویی"""
156
  if not drug1.strip() or not drug2.strip():
 
257
  return f"# 🔬 تحلیل نتیجه آزمایش\n\n## متن استخراج شده:\n```\n{extracted_text}\n```\n\n## تحلیل:\n\n{result}"
258
 
259
  except Exception as e:
260
+ error_msg = f" خطا در تحلیل تصویر: {str(e)}"
261
  logger.error(error_msg)
262
  return error_msg
263
 
264
+ def symptom_diagnosis(symptoms, session_id):
265
+ """تشخیص بیماری بر اساس علائم"""
266
+ if not symptoms.strip():
267
+ return "⚠️ لطفاً علائم خود را توضیح دهید"
268
+
269
+ try:
270
+ prompt = f"""شما یک پزشک عمومی مهربان و با تجربه هستید. بیمار این علائم را دارد:
271
+
272
+ علائم: {symptoms}
273
+
274
+ لطفاً به شکل مهربان و دلگرم کننده موارد زیر را بررسی کنید:
275
+ 1. احتمالی‌ترین تشخیص‌ها (با ذکر احتمال)
276
+ 2. علائم تکمیلی که باید سؤال شود
277
+ 3. راهنمایی‌های خانگی و خودمراقبتی
278
+ 4. داروهای بدون نسخه که ممکن است کمک کند
279
+ 5. چه زمانی حتماً باید به پزشک مراجعه کند
280
+ 6. کلمات آرامش‌بخش و امیدوارانه
281
+
282
+ ⚠️ تأکید کنید که این تشخیص اولیه است و باید با پزشک مشورت شود.
283
+
284
+ پاسخ را به زبان فارسی، مهربان و کامل بدهید. از کلمات دلگرم کننده استفاده کنید."""
285
+
286
+ completion = client.chat.completions.create(
287
+ extra_headers={
288
+ "HTTP-Referer": "https://medical-ai.com",
289
+ "X-Title": "Medical Symptom Analysis",
290
+ },
291
+ extra_body={},
292
+ model="openai/gpt-oss-20b:free",
293
+ messages=[
294
+ {
295
+ "role": "user",
296
+ "content": prompt
297
+ }
298
+ ]
299
+ )
300
+
301
+ result = completion.choices[0].message.content
302
+
303
+ # ذخیره در دیتابیس
304
+ save_to_database(session_id, f"تشخیص علائم: {symptoms}", None, result, "symptom_diagnosis")
305
+
306
+ return f"# 🩺 تشخیص بر اساس علائم\n\n## علائم شما:\n{symptoms}\n\n## نظر پزشک:\n\n{result}"
307
+
308
+ except Exception as e:
309
+ error_msg = f"❌ خطا در تشخیص: {str(e)}"
310
+ logger.error(error_msg)
311
+ return error_msg
312
+
313
+ def symptom_chat(message, chat_history, session_id):
314
+ """چت تعاملی برای تشخیص علائم"""
315
+ if not message.strip():
316
+ return chat_history, ""
317
+
318
+ try:
319
+ # دریافت تاریخچه از دیتابیس
320
+ db_history = get_chat_history(session_id)
321
+
322
+ # ساخت context از تاریخچه
323
+ context = "تاریخچه مکالمه قبلی:\n"
324
+ for msg in db_history[-6:]: # آخرین 6 پیام
325
+ if msg["role"] == "user":
326
+ context += f"بیمار: {msg['content']}\n"
327
+ else:
328
+ context += f"پزشک: {msg['content']}\n"
329
+
330
+ prompt = f"""شما یک پزشک مهربان هستید که با بیمار چت می‌کنید.
331
+
332
+ {context}
333
+
334
+ پیام جدید بیمار: {message}
335
+
336
+ لطفاً:
337
+ 1. به پیام بیمار پاسخ مهربانانه دهید
338
+ 2. سؤالات تکمیلی مناسب بپرسید
339
+ 3. اگر اطلاعات کافی دارید، تشخیص احتمالی ارائه دهید
340
+ 4. همیشه تأکید کنید که باید با پزشک مشورت شود
341
+
342
+ پاسخ کوتاه و مفید باشد."""
343
+
344
+ completion = client.chat.completions.create(
345
+ extra_headers={
346
+ "HTTP-Referer": "https://medical-ai.com",
347
+ "X-Title": "Medical Chat",
348
+ },
349
+ extra_body={},
350
+ model="openai/gpt-oss-20b:free",
351
+ messages=[
352
+ {
353
+ "role": "user",
354
+ "content": prompt
355
+ }
356
+ ]
357
+ )
358
+
359
+ response = completion.choices[0].message.content
360
+
361
+ # ذخیره در دیتابیس
362
+ save_to_database(session_id, message, None, response, "symptom_chat")
363
+
364
+ # بروزرسانی چت
365
+ chat_history.append([message, response])
366
+
367
+ return chat_history, ""
368
+
369
+ except Exception as e:
370
+ error_msg = f"❌ خطا: {str(e)}"
371
+ logger.error(error_msg)
372
+ chat_history.append([message, error_msg])
373
+ return chat_history, ""
374
+
375
  # راه‌اندازی دیتابیس
376
  init_database()
377
 
 
472
  label="نتیجه تحلیل"
473
  )
474
 
475
+ # تب تشخیص علائم
476
+ with gr.Tab("🩺 تشخیص بر اساس علائم"):
477
+ with gr.Row():
478
+ with gr.Column(scale=2):
479
+ gr.HTML('<div class="feature-box"><h3>💬 توضیح علائم شما</h3></div>')
480
+
481
+ symptoms_input = gr.Textbox(
482
+ label="علائم و نشانه‌های شما",
483
+ placeholder="مثال: سردرد شدید، تب، گلودرد، سرفه خشک، ضعف عمومی...",
484
+ lines=4
485
+ )
486
+
487
+ diagnose_btn = gr.Button("🔍 تشخیص علائم", variant="primary", size="lg")
488
+
489
+ with gr.Column(scale=3):
490
+ symptom_result = gr.Markdown(
491
+ value="نتیجه تشخیص اینجا نمایش داده می‌شود...",
492
+ label="نتیجه تشخیص"
493
+ )
494
+
495
+ # تب چت تشخیص علائم
496
+ with gr.Tab("💬 چت تشخیص علائم"):
497
+ with gr.Column():
498
+ gr.HTML('<div class="feature-box"><h3>🩺 چت با دستیار پزشکی</h3></div>')
499
+
500
+ chatbot = gr.Chatbot(
501
+ label="مکالمه با دستیار پزشکی",
502
+ height=400
503
+ )
504
+
505
+ msg_input = gr.Textbox(
506
+ label="پیام شما",
507
+ placeholder="علائم خود را توضیح دهید یا سؤالات بپرسید...",
508
+ lines=2
509
+ )
510
+
511
+ with gr.Row():
512
+ send_btn = gr.Button("📤 ارسال", variant="primary")
513
+ clear_chat_btn = gr.Button("🗑️ پاک کردن چت", variant="secondary")
514
+
515
  # تب تاریخچه
516
  with gr.Tab("📊 تاریخچه و مدیریت"):
517
  with gr.Row():
 
551
  outputs=lab_result
552
  )
553
 
554
+ diagnose_btn.click(
555
+ fn=symptom_diagnosis,
556
+ inputs=[symptoms_input, session_state],
557
+ outputs=symptom_result
558
+ )
559
+
560
+ send_btn.click(
561
+ fn=symptom_chat,
562
+ inputs=[msg_input, chatbot, session_state],
563
+ outputs=[chatbot, msg_input]
564
+ )
565
+
566
+ msg_input.submit(
567
+ fn=symptom_chat,
568
+ inputs=[msg_input, chatbot, session_state],
569
+ outputs=[chatbot, msg_input]
570
+ )
571
+
572
+ clear_chat_btn.click(
573
+ fn=lambda: ([], ""),
574
+ outputs=[chatbot, msg_input]
575
+ )
576
+
577
  show_history_btn.click(
578
  fn=get_user_history,
579
  inputs=session_state,