File size: 2,408 Bytes
c3dfc09
4d87bab
2edf1f0
e143294
c3dfc09
e143294
 
 
ded136a
2edf1f0
e143294
4d87bab
 
 
ded136a
4d87bab
ded136a
e143294
23be90a
4d87bab
e143294
2edf1f0
e143294
2edf1f0
c3dfc09
6e9275a
ded136a
2f225f8
e143294
4d87bab
6e9275a
4d87bab
 
 
 
 
92bf9aa
6e9275a
ded136a
 
 
 
 
2edf1f0
e143294
85dd489
 
 
 
 
 
 
999bf4d
6e9275a
 
85dd489
 
ded136a
85dd489
 
c3dfc09
133324c
999bf4d
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
52
53
54
55
56
57
58
59
60
61
62
63
import gradio as gr
from transformers import pipeline
import torch
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

model_name = "microsoft/Phi-3-mini-4k-instruct"
try:
    logger.info(f"Попытка загрузки модели {model_name}...")
    generator = pipeline(
        "text-generation",
        model=model_name,
        device=-1,
        framework="pt",
        max_length=150,
        truncation=True,
        model_kwargs={"torch_dtype": torch.float32}
    )
    logger.info("Модель успешно загружена.")
except Exception as e:
    logger.error(f"Ошибка загрузки модели: {e}")
    exit(1)

def respond(message, max_tokens=150, temperature=0.5, top_p=0.8):
    prompt = f"You are a medical chatbot. User says: '{message}'. Provide diagnosis and treatment in English."
    try:
        logger.info(f"Генерация ответа для: {message}")
        outputs = generator(
            prompt,
            max_length=max_tokens,
            temperature=temperature,
            top_p=top_p,
            do_sample=True,
            num_return_sequences=1
        )
        response = outputs[0]["generated_text"].replace(prompt, "").strip()
        # Простой перевод (для примера)
        if "Diagnosis" in response:
            diagnosis = response.split("Diagnosis:")[1].split("Treatment:")[0].strip()
            treatment = response.split("Treatment:")[1].strip()
            response = f"Диагноз: {diagnosis}\nЛечение: {treatment}"
    except Exception as e:
        logger.error(f"Ошибка генерации ответа: {e}")
        return f"Ошибка генерации: {e}"
    return response

demo = gr.Interface(
    fn=respond,
    inputs=[
        gr.Textbox(label="Ваше сообщение", placeholder="Опишите симптомы (например, 'Болит горло')..."),
        gr.Slider(minimum=50, maximum=300, value=150, step=10, label="Макс. токенов"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.5, label="Температура"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.8, label="Top-p")
    ],
    outputs="text",
    title="Медицинский чат-бот на базе Phi-3-mini-4k-instruct",
    theme=gr.themes.Soft()
)

if __name__ == "__main__":
    demo.launch()