Tortyfishguy commited on
Commit
154de24
·
verified ·
1 Parent(s): 5a3aa75

Update model.py

Browse files
Files changed (1) hide show
  1. model.py +12 -22
model.py CHANGED
@@ -2,52 +2,42 @@ 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") # ใช้ /tmp เป็นค่า default
8
 
9
- # ✅ โหลด Tokenizer และ Model แบบ half precision (FP16)
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
11
  model = AutoModelForCausalLM.from_pretrained(
12
  MODEL_NAME,
13
  torch_dtype=torch.float16,
14
  device_map="auto",
15
- cache_dir=MODEL_DIR # ใช้ cache directory ที่ Hugging Face อนุญาตให้เขียนไฟล์
16
  )
17
 
18
  def classify_esi(symptoms):
19
  """
20
- ใช้ DeepSeek AI วิเคราะห์ระดับ ESI (Emergency Severity Index) จากข้อความอาการของผู้ป่วย
21
  """
22
  prompt = (
23
- "คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่มีหน้าที่ประเมินระดับความรุนแรงของผู้ป่วยตาม Emergency Severity Index (ESI) ซึ่งแบ่งเป็น 5 ระดับ:\n"
24
- "- ESI 1: ต้องได้รับการช่วยชีวิตทันที เช่น หัวใจหยุดเต้น หยุดหายใจ ความดันต่ำวิกฤติ\n"
25
- "- ESI 2: มีภาวะเสี่ยงสูง เช่น สับสน หมดสติ อาการกำเริบที่อาจรุนแรง\n"
26
- "- ESI 3: ต้องใช้ทรัพยากรทางการแพทย์หลายอย่าง เช่น ตรวจเลือดและเอกซเรย์\n"
27
- "- ESI 4: ต้องใช้ทรัพยากรทางการแพทย์เพียงอย่างเดียว เช่น ทำแผล เย็บแผล\n"
28
- "- ESI 5: ไม่ต้องใช้ทรัพยากรทางการแพทย์ เช่น เป็นหวัดเล็กน้อย แผลถลอก\n\n"
29
- "อาการของผู้ป่วย: "
30
- f"{symptoms}\n\n"
31
- "กรุณาประเมินระดับ ESI ที่เหมาะสมและตอบกลับเป็นตัวเลข 1-5 เท่านั้น หากข้อมูลไม่เพียงพอให้ตอบว่า 'ไม่สามารถประเมินได้'"
32
  )
33
 
34
- device = "cuda" if torch.cuda.is_available() else "cpu"
35
- inputs = tokenizer(prompt, return_tensors="pt").to(device)
36
 
37
  with torch.no_grad():
38
  outputs = model.generate(
39
  **inputs,
40
- max_new_tokens=5, # ✅ จำกัดจำนวน token ที่ generate ออกมาเพื่อให้ตอบเฉพาะตัวเลข
41
- num_return_sequences=1,
42
- do_sample=False # ปิดการสุ่มให้ตอบตรงตามที่ต้องการ
43
  )
44
 
45
  response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
46
 
47
- # ✅ ตรวจสอบการตอบกลับของโมเดล
48
  for esi in ["1", "2", "3", "4", "5"]:
49
  if esi in response:
50
  return int(esi)
51
 
52
- return "ไม่สามารถประเมินได้" # กรณีที่โมเดลไม่สามารถให้คำตอบที่เป็นตัวเลขได้
53
-
 
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,
13
  torch_dtype=torch.float16,
14
  device_map="auto",
15
+ cache_dir=MODEL_DIR
16
  )
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")
 
29
 
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 "ไม่สามารถประเมินได้"