File size: 3,829 Bytes
c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 b87d619 c3dfc09 8deaf06 c3dfc09 4378820 e36d9ee 6bd219e 096ed36 89224bc 6bd219e 096ed36 6bd219e 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 89 90 |
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()
# Определение необходимости операции (например, при аппендиците операция требуется)
operation = "Не требуется"
if "аппендицит" in response.lower():
operation = "Требуется операция: экстренная"
# Сборка формата ответа
diagnosis = response.split("\n")[0] # Первый ответ — диагноз
response = f"Предварительный диагноз: {diagnosis}\n"
# Операция
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()
|