DoctorAI / app.py
Xolkin's picture
Update app.py
e36d9ee verified
raw
history blame
4.41 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 "Произошла ошибка при обработке запроса."
# Формирование ответа в нужном формате
# Пример ответа: "Предварительный диагноз: Грипп\nОперация: Не требуется\nУточняющие вопросы: Как давно начались симптомы?"
response = response.strip()
# Обработка предварительного диагноза
diagnosis_start = response.find("Предварительный диагноз:")
if diagnosis_start != -1:
diagnosis_end = response.find("\n", diagnosis_start)
if diagnosis_end == -1:
diagnosis_end = len(response)
diagnosis = response[diagnosis_start:diagnosis_end]
response = response[:diagnosis_start] + f"<b>{diagnosis}</b>" + response[diagnosis_end:]
# Операция
operation_start = response.find("Операция:")
if operation_start != -1:
operation_end = response.find("\n", operation_start)
if operation_end == -1:
operation_end = len(response)
operation = response[operation_start:operation_end]
response = response[:operation_start] + f"<b>{operation}</b>" + response[operation_end:]
# Уточняющие вопросы
questions_start = response.find("Уточняющие вопросы:")
if questions_start != -1:
questions_end = response.find("\n", questions_start)
if questions_end == -1:
questions_end = len(response)
questions = response[questions_start:questions_end]
response = response[:questions_start] + f"<b>{questions}</b>" + response[questions_end:]
# Формирование финального ответа с добавлением идентификационного сообщения
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()