Spaces:
Sleeping
Sleeping
File size: 3,176 Bytes
b2e632a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# ✅ ตั้งค่าโมเดล
MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
MODEL_DIR = "./deepseek_model"
# ✅ ตรวจสอบและสร้างโฟลเดอร์เก็บโมเดลหากยังไม่มี
if not os.path.exists(MODEL_DIR):
os.makedirs(MODEL_DIR)
# ✅ โหลด Tokenizer และ Model พร้อมใช้ Half Precision (FP16)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype=torch.float16, # Half Precision ลดการใช้ RAM
device_map="auto",
offload_folder=MODEL_DIR # Offload โมเดลบางส่วนไปที่ disk ลดการใช้ RAM
)
def classify_esi(symptoms):
"""
วิเคราะห์ระดับ ESI ตามอาการของผู้ป่วย
"""
prompt = (
"คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่ต้องประเมินระดับ Emergency Severity Index (ESI) ตามอาการของผู้ป่วย:\n"
"- ESI 1: ต้องช่วยชีวิตทันที เช่น หัวใจหยุดเต้น, หยุดหายใจ, ภาวะช็อก\n"
"- ESI 2: มีภาวะเสี่ยงสูง เช่น สับสน หมดสติ อาการกำเริบรุนแรง\n"
"- ESI 3: ต้องใช้ทรัพยากรหลายอย่าง เช่น ตรวจเลือด เอกซเรย์\n"
"- ESI 4: ใช้ทรัพยากรทางการแพทย์เพียงอย่างเดียว เช่น ทำแผล เย็บแผล\n"
"- ESI 5: ไม่ต้องใช้ทรัพยากรทางการแพทย์ เช่น เป็นหวัด แผลถลอก\n\n"
f"อาการของผู้ป่วย: {symptoms}\n\n"
"กรุณาประเมินระดับ ESI ที่เหมาะสมและตอบกลับเป็นตัวเลข 1-5 เท่านั้น หากข้อมูลไม่เพียงพอให้ตอบ 'ไม่สามารถประเมินได้'"
)
device = "cuda" if torch.cuda.is_available() else "cpu"
inputs = tokenizer(prompt, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=10)
response = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
# ✅ ตรวจสอบการตอบกลับของโมเดล
for esi in ["1", "2", "3", "4", "5"]:
if esi in response:
return int(esi)
return "ไม่สามารถประเมินได้" # หากโมเดลตอบกลับไม่ใช่ตัวเลข 1-5
|