Tortyfishguy commited on
Commit
b2e632a
·
verified ·
1 Parent(s): 1697a73

Create model.py

Browse files
Files changed (1) hide show
  1. model.py +50 -0
model.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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"
38
+ inputs = tokenizer(prompt, return_tensors="pt").to(device)
39
+
40
+ with torch.no_grad():
41
+ outputs = model.generate(**inputs, max_new_tokens=10)
42
+
43
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
44
+
45
+ # ✅ ตรวจสอบการตอบกลับของโมเดล
46
+ for esi in ["1", "2", "3", "4", "5"]:
47
+ if esi in response:
48
+ return int(esi)
49
+
50
+ return "ไม่สามารถประเมินได้" # หากโมเดลตอบกลับไม่ใช่ตัวเลข 1-5