Spaces:
Runtime error
Runtime error
File size: 4,549 Bytes
be139a9 3d3112d be139a9 3d3112d be139a9 3d3112d be139a9 3d3112d |
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import json
import os
class RevalidaBot:
def __init__(self):
# Inicializa o modelo
self.model_id = "meta-llama/Llama-2-7b-chat-hf"
self.tokenizer = AutoTokenizer.from_pretrained(self.model_id)
self.pipeline = pipeline(
"text-generation",
model=self.model_id,
tokenizer=self.tokenizer,
max_length=500
)
# Carrega a base de conhecimento
self.knowledge = self.load_knowledge()
# Define os comandos disponíveis
self.commands = {
"/start": self.start_command,
"/estudo": self.study_mode,
"/caso": self.clinical_case,
"/questao": self.question_mode,
"/ajuda": self.help_command
}
def load_knowledge(self):
"""Carrega base de conhecimento do Revalida"""
try:
if os.path.exists("knowledge_base.json"):
with open("knowledge_base.json", "r", encoding="utf-8") as f:
return json.load(f)
return {}
except Exception as e:
print(f"Erro ao carregar conhecimento: {e}")
return {}
def process_message(self, message, history):
"""Processa mensagens recebidas"""
try:
# Verifica se é um comando
if message.startswith("/"):
command = message.split()[0]
if command in self.commands:
return self.commands[command](message)
return "Comando não reconhecido. Use /ajuda para ver os comandos disponíveis."
# Processa pergunta normal
return self.generate_response(message, history)
except Exception as e:
return f"Desculpe, ocorreu um erro: {str(e)}"
def generate_response(self, message, history):
"""Gera resposta para perguntas sobre o Revalida"""
prompt = f"""
Pergunta sobre Revalida: {message}
Como assistente especializado em Revalida, forneça uma resposta:
1. Objetiva e direta
2. Baseada em evidências
3. Focada no exame
4. Com exemplos práticos quando relevante
"""
response = self.pipeline(prompt, max_length=500)[0]['generated_text']
return response
# Comandos
def start_command(self, _):
return """🏥 Bem-vindo ao Assistente Revalida!
Comandos disponíveis:
/estudo - Modo estudo direcionado
/caso - Gerar caso clínico
/questao - Questão exemplo
/ajuda - Ver ajuda
Digite sua dúvida a qualquer momento!"""
def study_mode(self, message):
topic = message.replace("/estudo", "").strip()
if not topic:
return "Por favor, especifique o tópico após /estudo. Exemplo: /estudo clínica médica"
prompt = f"Prepare um resumo focado para o Revalida sobre: {topic}"
return self.generate_response(prompt, None)
def clinical_case(self, _):
prompt = "Gere um caso clínico objetivo para estudo do Revalida"
return self.generate_response(prompt, None)
def question_mode(self, _):
prompt = "Crie uma questão de múltipla escolha no estilo Revalida"
return self.generate_response(prompt, None)
def help_command(self, _):
return """📚 Comandos do Assistente Revalida:
/start - Iniciar/Reiniciar
/estudo [tópico] - Estudar um tópico específico
/caso - Gerar caso clínico para estudo
/questao - Gerar questão exemplo
/ajuda - Ver esta mensagem
💡 Dicas:
- Digite sua dúvida normalmente para perguntar
- Seja específico nas perguntas
- Use os comandos para funções especiais"""
def create_interface():
"""Cria a interface Gradio"""
bot = RevalidaBot()
with gr.Blocks(title="Assistente Revalida") as interface:
gr.Markdown("# 🏥 Assistente Revalida")
gr.Markdown("### Seu companheiro de estudos para o Revalida")
chatbot = gr.Chatbot()
msg = gr.Textbox(
placeholder="Digite sua mensagem ou comando aqui...",
show_label=False
)
clear = gr.ClearButton([msg, chatbot])
msg.submit(
bot.process_message,
[msg, chatbot],
[chatbot]
)
return interface
# Inicia a interface
if __name__ == "__main__":
interface = create_interface()
interface.launch() |