DoctorAI / app.py
Xolkin's picture
Update app.py
096ed36 verified
raw
history blame
3.94 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()
# Сборка формата
# Диагноз (выводим только сам диагноз, без лишних вопросов или текста)
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()