Spaces:
Running
Running
File size: 3,797 Bytes
e77d8fb 1048b9c 89f2b62 1048b9c e77d8fb 1048b9c 8183430 1048b9c 8183430 1048b9c 8183430 10f4f78 8183430 1048b9c 8183430 10f4f78 8183430 10f4f78 8183430 89f2b62 8183430 32bb3d3 10f4f78 9248299 eaa2ef1 1048b9c 1ac1e09 690af6c 10f4f78 88b6d09 eaa2ef1 1048b9c 0a577eb eaa2ef1 1048b9c 8183430 |
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 |
from huggingface_hub import InferenceClient
import gradio as gr
# Inicialização do cliente de inferência
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
# Função para formatar o prompt de entrada com o histórico de diálogo
def formatar_prompt(mensagem, historico):
prompt = "<s>"
for prompt_usuario, resposta_bot in historico:
prompt += f"[INST] {prompt_usuario} [/INST]"
prompt += f" {resposta_bot}</s> "
prompt += f"[INST] {mensagem} [/INST]"
return prompt
# Função para gerar resposta do modelo
def gerar(prompt, historico, prompt_sistema, temperatura=0.9, max_tokens_novos=256, top_p=0.95, penalidade_repeticao=1.0):
temperatura = max(0.01, float(temperatura)) # Garante que a temperatura seja pelo menos 0.01
top_p = float(top_p)
kwargs_geracao = dict(
temperature=temperatura,
max_new_tokens=max_tokens_novos,
top_p=top_p,
repetition_penalty=penalidade_repeticao,
do_sample=True,
seed=42,
)
# Formata o prompt
prompt_formatada = formatar_prompt(f"{prompt_sistema}, {prompt}", historico)
# Geração de texto com stream
stream = client.text_generation(prompt_formatada, **kwargs_geracao, stream=True, details=True, return_full_text=False)
output = ""
for resposta in stream:
output += resposta.token.text
yield output
return output
# Criação dos widgets de entrada adicionais
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"),
]
# 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 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.", 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)
|