Tortyfishguy commited on
Commit
46c2cbe
·
verified ·
1 Parent(s): 4737e70

Update model.py

Browse files
Files changed (1) hide show
  1. model.py +11 -21
model.py CHANGED
@@ -1,12 +1,12 @@
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"
7
  MODEL_DIR = os.getenv("HF_HOME", "/tmp")
8
 
9
- # ✅ โหลดโมเดลและ Tokenizer ครั้งเดียว
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
11
  model = AutoModelForCausalLM.from_pretrained(
12
  MODEL_NAME,
@@ -17,18 +17,12 @@ model = AutoModelForCausalLM.from_pretrained(
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,18 +30,14 @@ def classify_esi(symptoms):
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 "ไม่สามารถประเมินได้"
 
1
  import os
2
  import torch
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
+ # ใช้ Hugging Face Cache Directory
6
  MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
7
  MODEL_DIR = os.getenv("HF_HOME", "/tmp")
8
 
9
+ # ✅ โหลด Tokenizer และ Model ครั้งเดียวเท่านั้น
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
11
  model = AutoModelForCausalLM.from_pretrained(
12
  MODEL_NAME,
 
17
 
18
  def classify_esi(symptoms):
19
  """
20
+ ใช้โมเดล AI ประเมินระดับ ESI จากข้อความอาการของผู้ป่วย
21
  """
22
  prompt = (
23
+ "คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่ต้องประเมิน ESI 1-5 ตามอาการที่ได้รับ..."
24
+ f"\nอาการของผู้ป่วย: {symptoms}\n"
25
+ "กรุณาประเมิน ESI เป็นตัวเลข 1-5 เท่านั้น ถ้าข้อมูลไม่พอให้ตอบว่า 'ไม่สามารถประเมินได้'"
 
 
 
 
 
 
26
  )
27
 
28
  inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
 
30
  with torch.no_grad():
31
  outputs = model.generate(
32
  **inputs,
33
+ max_new_tokens=5, # ✅ จำกัดคำตอบให้สั้น
34
+ do_sample=False # ✅ ปิดการสุ่มเพื่อลดเวลาประมวลผล
35
  )
36
 
37
  response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
38
 
39
+ for esi in ["1", "2", "3", "4", "5"]:
40
+ if esi in response:
41
+ return int(esi)
 
 
 
 
42
 
43
  return "ไม่สามารถประเมินได้"