Tortyfishguy commited on
Commit
3427e74
·
verified ·
1 Parent(s): 27506e0

Update model.py

Browse files
Files changed (1) hide show
  1. model.py +12 -7
model.py CHANGED
@@ -2,11 +2,10 @@ 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,
@@ -20,9 +19,14 @@ def classify_esi(symptoms):
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,14 +34,15 @@ def classify_esi(symptoms):
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 "ไม่สามารถประเมินได้"
 
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
 
5
  MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
6
  MODEL_DIR = os.getenv("HF_HOME", "/tmp")
7
 
8
+ # ✅ โหลดโมเดลและ Tokenizer ครั้งเดียว
9
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
10
  model = AutoModelForCausalLM.from_pretrained(
11
  MODEL_NAME,
 
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
  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 "ไม่สามารถประเมินได้"