Tortyfishguy commited on
Commit
e9937ff
·
verified ·
1 Parent(s): d6714db

Update model.py

Browse files
Files changed (1) hide show
  1. model.py +16 -19
model.py CHANGED
@@ -2,36 +2,33 @@ import os
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
- # ✅ ตั้งค่าโมเดล
6
  MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
7
- MODEL_DIR = "./deepseek_model"
8
 
9
- # ✅ ตรวจสอบและสร้างโฟลเดอร์เก็บโมเดลหากยังไม่มี
10
- if not os.path.exists(MODEL_DIR):
11
- os.makedirs(MODEL_DIR)
12
-
13
- # ✅ โหลด Tokenizer และ Model พร้อมใช้ Half Precision (FP16)
14
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
15
  model = AutoModelForCausalLM.from_pretrained(
16
  MODEL_NAME,
17
- torch_dtype=torch.float16, # Half Precision ลดการใช้ RAM
18
  device_map="auto",
19
- offload_folder=MODEL_DIR # Offload โมเดลบางส่วนไปที่ disk ลดการใช้ RAM
20
  )
21
 
22
  def classify_esi(symptoms):
23
  """
24
- วิเคราะห์ระดับ ESI ตามอาการของผู้ป่วย
25
  """
26
  prompt = (
27
- "คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่ต้องประเมินระดับ Emergency Severity Index (ESI) ตามอาการของผู้ป่วย:\n"
28
- "- ESI 1: ต้องช่วยชีวิตทันที เช่น หัวใจหยุดเต้น, หยุดหายใจ, ภาวะช็อก\n"
29
- "- ESI 2: มีภาวะเสี่ยงสูง เช่น สับสน หมดสติ อาการกำเริบรุนแรง\n"
30
- "- ESI 3: ต้องใช้ทรัพยากรหลายอย่าง เช่น ตรวจเลือด เอกซเรย์\n"
31
- "- ESI 4: ใช้ทรัพยากรทางการแพทย์เพียงอย่างเดียว เช่น ทำแผล เย็บแผล\n"
32
- "- ESI 5: ไม่ต้องใช้ทรัพยากรทางการแพทย์ เช่น เป็นหวัด แผลถลอก\n\n"
33
- f"อาการของผู้ป่วย: {symptoms}\n\n"
34
- "กรุณาประเมินระดับ ESI ที่เหมาะสมและตอบกลับเป็นตัวเลข 1-5 เท่านั้น หากข้อมูลไม่เพียงพอให้ตอบ 'ไม่สามารถประเมินได้'"
 
35
  )
36
 
37
  device = "cuda" if torch.cuda.is_available() else "cpu"
@@ -47,4 +44,4 @@ def classify_esi(symptoms):
47
  if esi in response:
48
  return int(esi)
49
 
50
- return "ไม่สามารถประเมินได้" # หากโมเดลตอบกลับไม่ใช่ตัวเลข 1-5
 
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
+ # ✅ ใช้ Hugging Face Cache Directory (ที่ Hugging Face อนุญาตให้เขียนไฟล์)
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
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"
 
44
  if esi in response:
45
  return int(esi)
46
 
47
+ return "ไม่สามารถประเมินได้" # กรณีที่โมเดลไม่สามารถให้คำตอบที่เป็นตัวเลขได้