aldohenrique commited on
Commit
245ca94
·
verified ·
1 Parent(s): 1ba7c97

Update interface.py

Browse files
Files changed (1) hide show
  1. interface.py +93 -17
interface.py CHANGED
@@ -1,4 +1,3 @@
1
- # interface.py
2
  import gradio as gr
3
  import uuid
4
  from ai_logic import (
@@ -6,7 +5,7 @@ from ai_logic import (
6
  build_and_save_vector_store,
7
  MODELS,
8
  DEFAULT_MODEL,
9
- inicializar_sistema # <--- Import the initialization function
10
  )
11
 
12
  css_customizado = """
@@ -146,9 +145,8 @@ def criar_interface():
146
 
147
  with gr.Column(elem_classes="input-container"):
148
  with gr.Row():
149
- # The choices for the dropdown now depend on the globally updated MODELS from ai_logic
150
  modelo_select = gr.Dropdown(
151
- choices=list(MODELS.keys()), # <--- Uses the MODELS dict from ai_logic
152
  value=DEFAULT_MODEL,
153
  label="🧠 Selecione o Modelo de Pensamento",
154
  elem_classes="modelo-dropdown"
@@ -173,19 +171,16 @@ def criar_interface():
173
  gr.Examples(
174
  examples=[
175
  ["Como implementar uma lista ligada em C com todas as operações básicas?", DEFAULT_MODEL],
176
- ["Qual a sua opinião sobre o uso de ponteiros em C++ moderno, baseada no seu blog?", "Mistral 7B (Mais acertivo)"], # Use label, not model name
177
- ["Resuma o que você escreveu sobre machine learning no seu blog.", "Zephyr 7B (Meio Termo)"], # Use label, not model name
178
  ],
179
  inputs=[user_input, modelo_select]
180
  )
181
 
182
  with gr.Accordion("🔧 Status da API", open=False):
183
- # We can't directly show model status here without re-running tests.
184
- # For simplicity, we'll assume if the page loads, models are good.
185
  status_api = gr.Textbox(label="Status dos Modelos", interactive=False, lines=8,
186
  value="Modelos carregados com sucesso! Verifique o console para detalhes.")
187
 
188
-
189
  with gr.Accordion("ℹ️ Informações", open=False):
190
  gr.Markdown("""
191
  ### Sobre o Dr. Aldo Henrique:
@@ -197,7 +192,6 @@ def criar_interface():
197
  - Peça resumos ou opiniões sobre temas que o professor aborda.
198
  """)
199
 
200
- # ✅ Função corrigida com uso de session_id
201
  def responder(chat_history, user_msg, modelo, session_id):
202
  if not user_msg.strip():
203
  return chat_history, ""
@@ -209,7 +203,6 @@ def criar_interface():
209
  chat_history[-1][1] = resposta_final
210
  yield chat_history, ""
211
 
212
- # ✅ Botão e Enter usam o novo estado de sessão
213
  enviar_btn.click(
214
  fn=responder,
215
  inputs=[chatbot, user_input, modelo_select, session_id_state],
@@ -234,7 +227,7 @@ def criar_interface():
234
  <script>
235
  window.addEventListener("load", function() {
236
  const textarea = document.querySelector("#entrada_usuario textarea");
237
- if (textarea) {
238
  setTimeout(() => textarea.focus(), 100);
239
  }
240
  });
@@ -248,12 +241,95 @@ def configurar_interface():
248
  Configura a interface Gradio apenas se o sistema for inicializado com pelo menos 3 modelos disponíveis.
249
  Lança uma exceção se a inicialização falhar.
250
  """
251
- if inicializar_sistema(): # Verifica se há pelo menos 3 modelos disponíveis
252
- return criar_interface() # Cria e retorna a interface completa
253
  else:
254
  raise RuntimeError("Não foi possível inicializar o sistema: menos de 3 modelos de IA disponíveis. Verifique os logs para mais detalhes.")
255
-
256
- # This part runs when you execute interface.py
257
  if __name__ == "__main__":
258
  app = configurar_interface()
259
- app.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import uuid
3
  from ai_logic import (
 
5
  build_and_save_vector_store,
6
  MODELS,
7
  DEFAULT_MODEL,
8
+ inicializar_sistema
9
  )
10
 
11
  css_customizado = """
 
145
 
146
  with gr.Column(elem_classes="input-container"):
147
  with gr.Row():
 
148
  modelo_select = gr.Dropdown(
149
+ choices=list(MODELS.keys()),
150
  value=DEFAULT_MODEL,
151
  label="🧠 Selecione o Modelo de Pensamento",
152
  elem_classes="modelo-dropdown"
 
171
  gr.Examples(
172
  examples=[
173
  ["Como implementar uma lista ligada em C com todas as operações básicas?", DEFAULT_MODEL],
174
+ ["Qual a sua opinião sobre o uso de ponteiros em C++ moderno, baseada no seu blog?", "Mistral 7B (Mais acertivo)"],
175
+ ["Resuma o que você escreveu sobre machine learning no seu blog.", "Zephyr 7B (Meio Termo)"],
176
  ],
177
  inputs=[user_input, modelo_select]
178
  )
179
 
180
  with gr.Accordion("🔧 Status da API", open=False):
 
 
181
  status_api = gr.Textbox(label="Status dos Modelos", interactive=False, lines=8,
182
  value="Modelos carregados com sucesso! Verifique o console para detalhes.")
183
 
 
184
  with gr.Accordion("ℹ️ Informações", open=False):
185
  gr.Markdown("""
186
  ### Sobre o Dr. Aldo Henrique:
 
192
  - Peça resumos ou opiniões sobre temas que o professor aborda.
193
  """)
194
 
 
195
  def responder(chat_history, user_msg, modelo, session_id):
196
  if not user_msg.strip():
197
  return chat_history, ""
 
203
  chat_history[-1][1] = resposta_final
204
  yield chat_history, ""
205
 
 
206
  enviar_btn.click(
207
  fn=responder,
208
  inputs=[chatbot, user_input, modelo_select, session_id_state],
 
227
  <script>
228
  window.addEventListener("load", function() {
229
  const textarea = document.querySelector("#entrada_usuario textarea");
230
+ if textarea {
231
  setTimeout(() => textarea.focus(), 100);
232
  }
233
  });
 
241
  Configura a interface Gradio apenas se o sistema for inicializado com pelo menos 3 modelos disponíveis.
242
  Lança uma exceção se a inicialização falhar.
243
  """
244
+ if inicializar_sistema():
245
+ return criar_interface()
246
  else:
247
  raise RuntimeError("Não foi possível inicializar o sistema: menos de 3 modelos de IA disponíveis. Verifique os logs para mais detalhes.")
248
+
 
249
  if __name__ == "__main__":
250
  app = configurar_interface()
251
+ app.launch()
252
+ ```
253
+
254
+ #### `app.py`
255
+ <xaiArtifact artifact_id="c5068ba0-fdc1-4a4b-b129-a50cb274523b" artifact_version_id="af79201f-aca2-42e0-b3bf-5de749c8666d" title="app.py" contentType="text/python">
256
+ ```python
257
+ #!/usr/bin/env python3
258
+ """
259
+ Dr. Aldo Henrique - Chatbot com RAG
260
+ Arquivo principal que inicializa o sistema e lança a interface Gradio.
261
+ """
262
+
263
+ import os
264
+ import gradio as gr
265
+ from interface import configurar_interface
266
+
267
+ # 🔑 Token do Hugging Face vindo das variáveis de ambiente
268
+ HF_TOKEN = os.getenv("HF_TOKEN")
269
+
270
+ def main():
271
+ """
272
+ Função principal que gerencia o fluxo de inicialização do chatbot:
273
+ 1. Verifica a presença do token Hugging Face.
274
+ 2. Tenta configurar a interface Gradio (que internamente testa os modelos).
275
+ 3. Lança a interface completa ou uma página de erro, dependendo do resultado.
276
+ """
277
+ print("🚀 Iniciando Dr. Aldo Henrique com RAG...")
278
+
279
+ # --- 1. Verificar se o token HF está configurado ---
280
+ if not HF_TOKEN:
281
+ print("❌ Erro: Token HF_TOKEN não encontrado nas variáveis de ambiente.")
282
+ print("A interface não será carregada. Por favor, defina a variável de ambiente HF_TOKEN.")
283
+ error_app_no_token = gr.Blocks()
284
+ with error_app_no_token:
285
+ gr.Markdown("<h1>Erro: Token HF_TOKEN não encontrado.</h1><p>Por favor, defina a variável de ambiente **HF_TOKEN** para iniciar o sistema.</p>")
286
+ error_app_no_token.launch(
287
+ server_name="0.0.0.0",
288
+ server_port=7860,
289
+ share=False,
290
+ show_error=True
291
+ )
292
+ return
293
+
294
+ print(f"🔑 Token HF encontrado: {HF_TOKEN[:8]}...")
295
+
296
+ # --- 2. Configurar a interface ---
297
+ try:
298
+ app_to_launch = configurar_interface()
299
+ print("🌐 Interface configurada com sucesso. Lançando...")
300
+
301
+ # --- 3. Lançar a aplicação ---
302
+ if isinstance(app_to_launch, (gr.Blocks, gr.Interface)):
303
+ app_to_launch.launch(
304
+ server_name="0.0.0.0",
305
+ server_port=7860,
306
+ share=False,
307
+ max_threads=8,
308
+ show_error=True
309
+ )
310
+ else:
311
+ print("Erro inesperado: configurar_interface retornou um tipo de objeto desconhecido.")
312
+ unexpected_error_app = gr.Blocks()
313
+ with unexpected_error_app:
314
+ gr.Markdown("<h1>Erro Inesperado</h1><p>Ocorreu um erro desconhecido ao configurar a interface. Por favor, entre em contato com o suporte.</p>")
315
+ unexpected_error_app.launch(
316
+ server_name="0.0.0.0",
317
+ server_port=7860,
318
+ share=False,
319
+ show_error=True
320
+ )
321
+
322
+ except RuntimeError as e:
323
+ print(f"❌ Erro ao configurar a interface: {str(e)}")
324
+ error_app = gr.Blocks()
325
+ with error_app:
326
+ gr.Markdown(f"<h1>Erro de Inicialização</h1><p>{str(e)}</p><p>Por favor, verifique a conexão com o Hugging Face e o token de acesso, ou consulte os logs para mais detalhes.</p>")
327
+ error_app.launch(
328
+ server_name="0.0.0.0",
329
+ server_port=7860,
330
+ share=False,
331
+ show_error=True
332
+ )
333
+
334
+ if __name__ == "__main__":
335
+ main()