File size: 4,412 Bytes
c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 8deaf06 c3dfc09 e36d9ee 89224bc e36d9ee 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
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()
|