aldohenrique commited on
Commit
7544a8f
·
verified ·
1 Parent(s): 469b831

Update interface.py

Browse files
Files changed (1) hide show
  1. interface.py +73 -108
interface.py CHANGED
@@ -1,136 +1,101 @@
1
  import gradio as gr
2
- from ai_logic import (
3
- responder_como_aldo,
4
- build_and_save_vector_store,
5
- MODELS,
6
- DEFAULT_MODEL
7
- )
8
- import time # Importe 'time' para simular a espera, se necessário para testes
9
-
10
- # --- CSS (sem alterações) ---
11
  css_customizado = """
12
  .gradio-container { max-width: 1400px !important; margin: 0 auto; width: 99%; }
13
- #chatbot { min-height: 500px; }
14
- .titulo-principal {
15
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
16
- color: white !important; padding: 20px !important;
17
- border-radius: 10px !important; margin-bottom: 20px !important;
18
- text-align: center !important;
19
- }
20
  """
21
 
22
- # --- Função Lógica do Chat (VERSÃO ATUALIZADA) ---
23
- def chat_responder(pergunta, historico_chat, modelo_selecionado):
24
- """
25
- Gerencia a interação no chat com um indicador de "digitando...".
26
- """
27
- # Define a mensagem de "digitando..." que será exibida.
28
- # Usamos um pouco de HTML para estilizar a mensagem.
29
- mensagem_digitando = """
30
- <div style='color: #888; font-style: italic;'>
31
- Dr. Aldo Henrique está digitando... ✍️
32
- </div>
33
- """
34
-
35
- # 1. Adiciona a pergunta do usuário e a mensagem "digitando..." ao histórico.
36
- historico_chat.append((pergunta, mensagem_digitando))
37
-
38
- # 2. Atualiza a interface: exibe a pergunta e o indicador "digitando...",
39
- # enquanto limpa e desativa a caixa de entrada.
40
- yield historico_chat, gr.update(value="", interactive=False)
41
-
42
- # 3. Chama a lógica da IA para obter a resposta (esta é a parte demorada).
43
- # Para simular a demora, você pode usar: time.sleep(3)
44
- resposta_ia = responder_como_aldo(pergunta, modelo_selecionado)
45
-
46
- # 4. Substitui a mensagem "digitando..." pela resposta final da IA.
47
- historico_chat[-1] = (pergunta, resposta_ia)
48
-
49
- # 5. Atualiza a interface com a resposta final e reativa a caixa de entrada.
50
- yield historico_chat, gr.update(interactive=True)
51
-
52
-
53
- def criar_interface_chat():
54
- """Cria e retorna a nova interface Gradio no estilo chat (função completa para referência)"""
55
 
56
- with gr.Blocks(title="Dr. Aldo Henrique - API Externa", theme=gr.themes.Soft(), css=css_customizado) as interface:
 
57
  gr.HTML("""
58
- <div class="titulo-principal">
59
- <h1>🤖 Dr. Aldo Henrique - Foco em TI com diferentes modelos de IA </h1>
60
  <p style="font-size: 14px; opacity: 0.9;">Conhecimento enriquecido com o conteúdo do <a href="https://aldohenrique.com.br/" style="color: white; text-decoration: underline;">Blog do Prof. Dr. Aldo Henrique</a></p>
61
  </div>
62
  """)
63
 
64
- chatbot = gr.Chatbot(
65
- label="Conversa",
66
- elem_id="chatbot",
67
- bubble_full_width=False,
68
- )
69
 
70
- with gr.Row(equal_height=True):
71
- entrada_msg = gr.Textbox(
72
- scale=5,
73
- show_label=False,
74
- placeholder="Digite sua pergunta aqui e pressione Enter...",
75
- container=False,
76
  )
77
  modelo_select = gr.Dropdown(
78
  choices=list(MODELS.keys()),
79
  value=DEFAULT_MODEL,
80
- label="Modelo de IA",
81
- scale=2,
 
82
  )
83
- botao_enviar = gr.Button("Enviar", variant="primary", scale=1, min_width=100)
84
 
85
- with gr.Accordion("📚 Exemplos, Controles e Informações", open=False):
86
- gr.Markdown("Clique em um exemplo para preencher a caixa de texto.")
87
- gr.Examples(
88
- examples=[
89
- "Como implementar uma lista ligada em C com todas as operações básicas?",
90
- "Qual a sua opinião sobre o uso de ponteiros em C++ moderno, baseada no seu blog?",
91
- "Resuma o que você escreveu sobre machine learning no seu blog.",
92
- ],
93
- inputs=entrada_msg
94
- )
95
- with gr.Accordion("⚙️ Controle do Conhecimento (RAG)", open=False):
96
- status_rag = gr.Textbox(label="Status do Retreino", interactive=False)
97
- botao_retreinar = gr.Button("🔄 Atualizar Conhecimento do Blog", variant="stop")
98
- download_faiss_file = gr.File(label="Download do Índice FAISS", interactive=False)
99
- download_urls_file = gr.File(label="Download das URLs Processadas", interactive=False)
100
- with gr.Accordion("ℹ️ Informações", open=False):
101
- gr.Markdown("""
102
- ### Sobre o Dr. Aldo Henrique:
103
- - **Especialidade**: Linguagens C, Java, Desenvolvimento Web, Inteligência Artificial.
104
- - **Conhecimento Adicional**: Conteúdo do blog aldohenrique.com.br
105
- ### Dicas para melhores respostas:
106
- - Faça perguntas específicas sobre o conteúdo do blog para ver o RAG em ação!
107
- - Peça resumos ou opiniões sobre temas que o professor aborda.
108
- """)
109
-
110
- # As conexões de eventos continuam as mesmas, pois a assinatura da função não mudou.
111
- entrada_msg.submit(
112
- fn=chat_responder,
113
- inputs=[entrada_msg, chatbot, modelo_select],
114
- outputs=[chatbot, entrada_msg],
115
- )
116
- botao_enviar.click(
117
- fn=chat_responder,
118
- inputs=[entrada_msg, chatbot, modelo_select],
119
- outputs=[chatbot, entrada_msg],
120
- api_name="enviar_mensagem"
121
- )
122
  botao_retreinar.click(
123
  fn=build_and_save_vector_store,
124
  outputs=[status_rag, download_faiss_file, download_urls_file],
125
  show_progress=True
126
  )
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  return interface
129
 
130
  def configurar_interface():
131
  """Configura e retorna a interface pronta para lançamento"""
132
- return criar_interface_chat()
133
-
134
- # if __name__ == "__main__":
135
- # minha_interface = configurar_interface()
136
- # minha_interface.launch()
 
1
  import gradio as gr
2
+ from ai_logic import responder_como_aldo, build_and_save_vector_store, testar_todos_modelos, MODELS, DEFAULT_MODEL
3
+
4
+ # CSS personalizado
 
 
 
 
 
 
5
  css_customizado = """
6
  .gradio-container { max-width: 1400px !important; margin: 0 auto; width: 99%; }
7
+ .gr-textbox textarea { font-size: 14px !important; line-height: 1.5 !important; }
8
+ .modelo-dropdown { margin-bottom: 15px !important; }
 
 
 
 
 
9
  """
10
 
11
+ def criar_interface():
12
+ """Cria e retorna a interface Gradio em formato de chat"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
+ with gr.Blocks(title="Dr. Aldo Henrique - Chat IA", theme=gr.themes.Soft(), css=css_customizado) as interface:
15
+ # Cabeçalho
16
  gr.HTML("""
17
+ <div class="titulo-principal" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px; border-radius: 10px; margin-bottom: 20px; text-align: center;">
18
+ <h1>🤖 Dr. Aldo Henrique - Foco em TI com diferentes modelos de IA</h1>
19
  <p style="font-size: 14px; opacity: 0.9;">Conhecimento enriquecido com o conteúdo do <a href="https://aldohenrique.com.br/" style="color: white; text-decoration: underline;">Blog do Prof. Dr. Aldo Henrique</a></p>
20
  </div>
21
  """)
22
 
23
+ chat = gr.Chatbot(label="💬 Conversa com Dr. Aldo Henrique", show_label=True)
 
 
 
 
24
 
25
+ with gr.Row():
26
+ entrada = gr.Textbox(
27
+ placeholder="Digite sua pergunta aqui e pressione Enter...",
28
+ show_label=False,
29
+ lines=3
 
30
  )
31
  modelo_select = gr.Dropdown(
32
  choices=list(MODELS.keys()),
33
  value=DEFAULT_MODEL,
34
+ label="🧠 Selecione o Modelo de IA",
35
+ info="Escolha o modelo para responder",
36
+ elem_classes="modelo-dropdown"
37
  )
 
38
 
39
+ estado_chat = gr.State([]) # Para armazenar a conversa
40
+
41
+ def responder_mensagem(mensagem_usuario, modelo_escolhido, historico):
42
+ historico = historico or []
43
+ historico.append((mensagem_usuario, "🕒 Dr. Aldo Henrique está digitando..."))
44
+ yield gr.update(value=historico), historico
45
+
46
+ resposta = responder_como_aldo(mensagem_usuario, modelo_escolhido)
47
+ historico[-1] = (mensagem_usuario, resposta)
48
+ yield gr.update(value=historico), historico
49
+
50
+ entrada.submit(
51
+ responder_mensagem,
52
+ inputs=[entrada, modelo_select, estado_chat],
53
+ outputs=[chat, estado_chat],
54
+ show_progress=True
55
+ ).then(lambda: "", None, entrada) # Limpa o campo de entrada após enviar
56
+
57
+ # --- SEÇÃO PARA CONTROLE DO RAG ---
58
+ with gr.Accordion("⚙️ Controle do Conhecimento (RAG)", open=False):
59
+ status_rag = gr.Textbox(label="Status do Retreino", interactive=False)
60
+ botao_retreinar = gr.Button("🔄 Atualizar Conhecimento do Blog", variant="stop")
61
+ download_faiss_file = gr.File(label="Download do Índice FAISS", interactive=False, file_count="single", file_types=[".pkl"])
62
+ download_urls_file = gr.File(label="Download das URLs Processadas", interactive=False, file_count="single", file_types=[".pkl"])
63
+
 
 
 
 
 
 
 
 
 
 
 
 
64
  botao_retreinar.click(
65
  fn=build_and_save_vector_store,
66
  outputs=[status_rag, download_faiss_file, download_urls_file],
67
  show_progress=True
68
  )
69
 
70
+ # Exemplos
71
+ with gr.Accordion("📚 Exemplos de Perguntas", open=False):
72
+ gr.Examples(
73
+ examples=[
74
+ ["Como implementar uma lista ligada em C com todas as operações básicas?", DEFAULT_MODEL],
75
+ ["Qual a sua opinião sobre o uso de ponteiros em C++ moderno, baseada no seu blog?", "Mistral 7B"],
76
+ ["Resuma o que você escreveu sobre machine learning no seu blog.", "Zephyr 7B"],
77
+ ],
78
+ inputs=[entrada, modelo_select]
79
+ )
80
+
81
+ # Status da API
82
+ with gr.Accordion("🔧 Status da API", open=False):
83
+ status_api = gr.Textbox(label="Status dos Modelos", interactive=False, lines=8)
84
+
85
+ # Informações
86
+ with gr.Accordion("ℹ️ Informações", open=False):
87
+ gr.Markdown("""
88
+ ### Sobre o Dr. Aldo Henrique:
89
+ - **Especialidade**: Linguagens C, Java, Desenvolvimento Web, Inteligência Artificial
90
+ - **Conhecimento Adicional**: Conteúdo do blog aldohenrique.com.br
91
+
92
+ ### Dicas para melhores respostas:
93
+ - Faça perguntas específicas sobre o conteúdo do blog para ver o RAG em ação!
94
+ - Peça resumos ou opiniões sobre temas que o professor aborda.
95
+ """)
96
+
97
  return interface
98
 
99
  def configurar_interface():
100
  """Configura e retorna a interface pronta para lançamento"""
101
+ return criar_interface()