DoctorAI / app.py
Xolkin's picture
Update app.py
4378820 verified
raw
history blame
3.74 kB
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()
# Формирование ответа в структуре: диагноз, операция, уточняющие вопросы
# Здесь мы предполагаем, что модель вернет необходимые данные, и мы их форматируем.
# Пример формирования ответа с диагнозом, операцией и уточняющими вопросами
response = (
f"Предварительный диагноз: {response}\n"
"Операция: Не требуется\n" # Это можно заменить динамически, если модель будет возвращать такую информацию
"Уточняющие вопросы для постановки диагноза: Есть ли высокая температура? Когда появились симптомы?\n"
)
# Добавление финального сообщения
final_response = f"{response}\n\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()