File size: 3,942 Bytes
c3dfc09
 
 
b87d619
c3dfc09
 
 
 
 
 
 
 
 
 
b87d619
c3dfc09
 
b87d619
c3dfc09
 
 
 
 
 
b87d619
c3dfc09
 
b87d619
c3dfc09
8deaf06
 
 
 
 
 
 
 
 
 
 
 
 
 
c3dfc09
4378820
096ed36
e36d9ee
 
096ed36
 
 
 
89224bc
096ed36
 
 
 
 
 
 
e36d9ee
4378820
096ed36
89224bc
834e3d1
b87d619
c3dfc09
 
 
89224bc
31e3b2a
89224bc
 
31e3b2a
89224bc
c3dfc09
 
 
 
 
89224bc
c3dfc09
 
 
 
 
 
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import gradio as gr
from huggingface_hub import InferenceClient

# Инициализация клиента с моделью от Hugging Face
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    # Формирование списка сообщений для отправки модели
    messages = [{"role": "system", "content": system_message}]

    # Добавление истории разговора в список сообщений
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    # Добавление текущего сообщения пользователя
    messages.append({"role": "user", "content": message})

    # Получение ответа от модели
    response = ""
    try:
        for message in client.chat_completion(
            messages,
            max_tokens=max_tokens,
            stream=True,
            temperature=temperature,
            top_p=top_p,
        ):
            token = message.choices[0].delta.content
            response += token
            yield response
    except Exception as e:
        print(f"Error occurred during message generation: {e}")
        yield "Произошла ошибка при обработке запроса."

    # Формирование ответа в нужном формате на русском языке
    # Простой формат: диагноз, операция, уточняющие вопросы
    response = response.strip()

    # Сборка формата
    # Диагноз (выводим только сам диагноз, без лишних вопросов или текста)
    diagnosis = response.split("\n")[0]  # Первый ответ — диагноз
    response = f"Предварительный диагноз: {diagnosis}\n"

    # Операция: можно поменять логику в зависимости от диагноза
    operation = "Не требуется"  # Например, можно сделать его динамичным в зависимости от диагноза
    response += f"Операция: {operation}\n"

    # Уточняющие вопросы: список, можно добавить динамично
    questions = "Какие симптомы усилились за последние 24 часа? Есть ли у вас температура?"
    response += f"Уточняющие вопросы для постановки диагноза: {questions}\n"

    # Добавление финального сообщения
    final_response = f"{response}\nСоздано больницей EMS штата Alta"
    yield final_response

# Создание интерфейса Gradio
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(
            value="Привет! Я помощник врача в больнице EMS штата Alta! Опиши свои симптомы кратко, и я поставлю предварительный диагноз. Пожалуйста, будьте кратки.",
            label="Системное сообщение"
        ),
        gr.Slider(minimum=1, maximum=2048, value=200, step=1, label="Максимальное количество новых токенов"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Температура"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (ядерное семплирование)",
        ),
    ],
)

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