Spaces:
Running
Running
File size: 3,843 Bytes
89f2b62 e77d8fb 89f2b62 10f4f78 e77d8fb 10f4f78 32bb3d3 10f4f78 e77d8fb 10f4f78 32bb3d3 89f2b62 10f4f78 32bb3d3 e77d8fb 10f4f78 9248299 eaa2ef1 690af6c 2fb1211 690af6c 10f4f78 88b6d09 eaa2ef1 0a577eb eaa2ef1 32bb3d3 |
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 |
import gradio as gr
from huggingface_hub import InferenceClient
# Função para gerar resposta do modelo
def gerar(prompt, historico, prompt_sistema, modelo, temperatura=0.9, max_tokens_novos=256, top_p=0.95, penalidade_repeticao=1.0):
# Inicialização do cliente de inferência
if modelo == "Modelo 1":
client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.2")
elif modelo == "Modelo 2":
client = InferenceClient("microsoft/Phi-3-mini-4k-instruct")
elif modelo == "Modelo 3":
client = InferenceClient("google/gemma-1.1-7b-it")
else:
return "Modelo não reconhecido."
kwargs_geracao = dict(
temperature=float(temperatura),
max_new_tokens=int(max_tokens_novos),
top_p=float(top_p),
repetition_penalty=float(penalidade_repeticao),
do_sample=True,
seed=42,
)
# Função para formatar o prompt de entrada com o histórico de diálogo
prompt_formatada = "<s>" + "".join(f"[INST] {prompt_usuario} [/INST] {resposta_bot}" for prompt_usuario, resposta_bot in historico) + f"[INST] {prompt_sistema} [/INST]"
stream = client.text_generation(prompt_formatada, **kwargs_geracao, stream=True, details=True, return_full_text=False)
for resposta in stream:
yield resposta.token.text
# Inputs adicionais para o modelo
inputs_adicionais = [
gr.Textbox(label="Prompt do Sistema", max_lines=1, interactive=True),
gr.Slider(label="Temperatura", value=0.9, minimum=0.0, maximum=1.0, step=0.05, interactive=True, info="Valores mais altos produzem saídas mais diversas"),
gr.Slider(label="Máximo de Novos Tokens", value=256, minimum=0, maximum=1048, step=64, interactive=True, info="O número máximo de novos tokens"),
gr.Slider(label="Top-p (amostragem de núcleo)", value=0.90, minimum=0.0, maximum=1, step=0.05, interactive=True, info="Valores mais altos amostram mais tokens de baixa probabilidade"),
gr.Slider(label="Penalidade de Repetição", value=1.2, minimum=1.0, maximum=2.0, step=0.05, interactive=True, info="Penalize tokens repetidos"),
gr.Dropdown(label="Modelo", choices=["Modelo 1", "Modelo 2", "Modelo 3"], default="Modelo 1", interactive=True)
]
# Exemplos de prompts
exemplos=[
["Paciente de 55 anos, história familiar de doença cardíaca. Colesterol total: 260 mg/dL, HDL: 40 mg/dL, LDL: 180 mg/dL, triglicerídeos: 200 mg/dL. Interpretar resultados e sugerir intervenções.", None, None, None, None, None],
["Ecocardiograma em paciente de 70 anos, dispneia aos esforços. Fração de ejeção: 40%, espessamento do septo interventricular, dilatação atrial esquerda. Propor tratamento para insuficiência cardíaca.", None, None, None, None, None],
["Teste de esforço em esteira, paciente de 45 anos, dor torácica atípica. 10 METs atingidos, depressão do segmento ST de 2 mm no pós-exercício. Recomendar próximos passos diagnósticos e terapêuticos.", None, None, None, None, None],
["Holter de 24 horas, paciente de 60 anos, síncope recorrente. Episódios de pausas sinusais de até 5 segundos, arritmia sinusal respiratória. Formular plano de monitoramento e tratamento para bradicardia sintomática.", None, None, None, None, None],
["Cateterismo cardíaco em paciente de 65 anos, angina instável. Angiografia revela lesões significativas em duas artérias coronárias principais, FFR: 0,68. Recomendar opções de revascularização e manejo coronariano.", None, None, None, None, None]
]
# Interface do Chat
gr.ChatInterface(
fn=gerar,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=inputs_adicionais,
title="Medchat | Automação Inteligente de Saúde",
examples=exemplos,
concurrency_limit=20,
).launch(show_api=False)
|