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()