Tortyfishguy commited on
Commit
8957fa0
·
verified ·
1 Parent(s): 55d4d9c

Update model.py

Browse files
Files changed (1) hide show
  1. model.py +15 -10
model.py CHANGED
@@ -1,5 +1,6 @@
1
  import os
2
  import torch
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
  MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
@@ -16,17 +17,18 @@ model = AutoModelForCausalLM.from_pretrained(
16
 
17
  def classify_esi(symptoms):
18
  """
19
- ใช้โมเดล AI ประเมินระดับ ESI จากข้อความอาการของผู้ป่วย
20
  """
21
  prompt = (
22
- "คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่ต้องประเมิน ESI 1-5 ตามอาการของผู้ป่วย:\n"
23
  "- ESI 1: ต้องได้รับการช่วยชีวิตทันที (หมดสติ, หัวใจหยุดเต้น, หายใจไม่ออก)\n"
24
  "- ESI 2: มีภาวะเสี่ยงสูง (แน่นหน้าอก, อาเจียนเป็นเลือด, ซึมมากผิดปกติ)\n"
25
  "- ESI 3: ต้องใช้ทรัพยากรทางการแพทย์หลายอย่าง (ตรวจเลือด, X-ray, ให้น้ำเกลือ)\n"
26
  "- ESI 4: ต้องใช้ทรัพยากรทางการแพทย์เพียงอย่างเดียว (เย็บแผล, ทำแผล, ฉีดยา)\n"
27
- "- ESI 5: ไม่ต้องใช้ทรัพยากรทางการแพทย์ (แผลถลอก, น้ำมูกไหล, ไอเล็กน้อย)\n"
28
- f"\nอาการของผู้ป่วย: {symptoms}\n"
29
- "กรุณาตอบกลับเป็นตัวเลข 1, 2, 3, 4 หรือ 5 เท่านั้น (ห้ามตอบเป็นข้อความ)"
 
30
  )
31
 
32
  inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
@@ -34,15 +36,18 @@ def classify_esi(symptoms):
34
  with torch.no_grad():
35
  outputs = model.generate(
36
  **inputs,
37
- max_new_tokens=10, # ✅ เพิ่ม token ให้โมเดลมีพื้นที่ตอบกลับ
38
  do_sample=False # ✅ ปิดการสุ่ม ลดโอกาสตอบผิด
39
  )
40
 
41
  response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
42
 
43
- # ✅ ตรวจจับตัวเลขที่เป็นไปได้
44
- for esi in ["1", "2", "3", "4", "5"]:
45
- if esi in response:
46
- return int(esi) # ✅ ส่งค่าที่ถูกต้องกลับไป
 
 
 
47
 
48
  return "ไม่สามารถประเมินได้"
 
1
  import os
2
  import torch
3
+ import json
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
 
6
  MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
 
17
 
18
  def classify_esi(symptoms):
19
  """
20
+ ใช้โมเดล AI ประเมินระดับ ESI จากข้อความอาการของผู้ป่วย โดยให้ตอบเป็น JSON
21
  """
22
  prompt = (
23
+ "คุณเป็นแพทย์ฉุกเฉินที่ต้องประเมินระดับ ESI 1-5 ตามอาการของผู้ป่วย:\n"
24
  "- ESI 1: ต้องได้รับการช่วยชีวิตทันที (หมดสติ, หัวใจหยุดเต้น, หายใจไม่ออก)\n"
25
  "- ESI 2: มีภาวะเสี่ยงสูง (แน่นหน้าอก, อาเจียนเป็นเลือด, ซึมมากผิดปกติ)\n"
26
  "- ESI 3: ต้องใช้ทรัพยากรทางการแพทย์หลายอย่าง (ตรวจเลือด, X-ray, ให้น้ำเกลือ)\n"
27
  "- ESI 4: ต้องใช้ทรัพยากรทางการแพทย์เพียงอย่างเดียว (เย็บแผล, ทำแผล, ฉีดยา)\n"
28
+ "- ESI 5: ไม่ต้องใช้ทรัพยากรทางการแพทย์ (แผลถลอก, น้ำมูกไหล, ไอเล็กน้อย)\n\n"
29
+ f"อาการของผู้ป่วย: {symptoms}\n\n"
30
+ "ตอบกลับเป็น JSON เท่านั้น เช่น:\n"
31
+ "{ \"esi\": 3 }"
32
  )
33
 
34
  inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
 
36
  with torch.no_grad():
37
  outputs = model.generate(
38
  **inputs,
39
+ max_new_tokens=20, # ✅ ให้พื้นที่โมเดลตอบ JSON
40
  do_sample=False # ✅ ปิดการสุ่ม ลดโอกาสตอบผิด
41
  )
42
 
43
  response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
44
 
45
+ # ✅ พยายามดึง JSON ออกมา
46
+ try:
47
+ esi_data = json.loads(response)
48
+ if "esi" in esi_data and isinstance(esi_data["esi"], int):
49
+ return esi_data["esi"]
50
+ except json.JSONDecodeError:
51
+ pass
52
 
53
  return "ไม่สามารถประเมินได้"