File size: 1,921 Bytes
b2e632a
 
 
 
46c2cbe
b2e632a
154de24
b2e632a
46c2cbe
b2e632a
 
 
e9937ff
b2e632a
154de24
b2e632a
 
 
 
46c2cbe
b2e632a
 
46c2cbe
 
 
b2e632a
 
154de24
b2e632a
 
1d5f989
 
46c2cbe
 
1d5f989
b2e632a
 
 
46c2cbe
 
 
b2e632a
154de24
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
import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# ใช้ Hugging Face Cache Directory
MODEL_NAME = "deepseek-ai/deepseek-llm-7b-chat"
MODEL_DIR = os.getenv("HF_HOME", "/tmp")

# ✅ โหลด Tokenizer และ Model ครั้งเดียวเท่านั้น
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=torch.float16,
    device_map="auto",
    cache_dir=MODEL_DIR
)

def classify_esi(symptoms):
    """
    ใช้โมเดล AI ประเมินระดับ ESI จากข้อความอาการของผู้ป่วย
    """
    prompt = (
        "คุณเป็นแพทย์เวชศาสตร์ฉุกเฉินที่ต้องประเมิน ESI 1-5 ตามอาการที่ได้รับ..."
        f"\nอาการของผู้ป่วย: {symptoms}\n"
        "กรุณาประเมิน ESI เป็นตัวเลข 1-5 เท่านั้น ถ้าข้อมูลไม่พอให้ตอบว่า 'ไม่สามารถประเมินได้'"
    )

    inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")

    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=5,  # ✅ จำกัดคำตอบให้สั้น
            do_sample=False  # ✅ ปิดการสุ่มเพื่อลดเวลาประมวลผล
        )

    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 "ไม่สามารถประเมินได้"