aldohenrique commited on
Commit
f96b739
·
verified ·
1 Parent(s): ba345bc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -84
app.py CHANGED
@@ -1,101 +1,93 @@
1
  #!/usr/bin/env python3
2
  """
3
  Dr. Aldo Henrique - Chatbot com RAG
4
- Arquivo principal que inicializa o sistema
5
  """
6
 
7
  import os
8
- from huggingface_hub import hf_hub_download
9
- from ai_logic import load_vector_store
10
- from interface import configurar_interface
11
-
12
 
13
  # 🔑 Token do Hugging Face vindo das variáveis de ambiente
 
14
  HF_TOKEN = os.getenv("HF_TOKEN")
15
 
16
- # Lista de modelos para testar acesso
17
- MODELS = [
18
- {"name": "Mistral-7B-Instruct-v0.3", "repo_id": "mistralai/Mistral-7B-Instruct-v0.3"},
19
- {"name": "Mistral-7B-v0.1", "repo_id": "mistralai/Mistral-7B-v0.1"},
20
- {"name": "Mixtral-8x7B-Instruct-v0.1", "repo_id": "mistralai/Mixtral-8x7B-Instruct-v0.1"},
21
- {"name": "Phi-3-mini-4k-instruct", "repo_id": "microsoft/Phi-3-mini-4k-instruct"},
22
- {"name": "Phi-3-small-8k-instruct", "repo_id": "microsoft/Phi-3-small-8k-instruct"},
23
- {"name": "DeepSeek-R1-Distill-Qwen-7B", "repo_id": "unsloth/DeepSeek-R1-Distill-Qwen-7B"},
24
- {"name": "DeepSeek-Coder-V2-Lite", "repo_id": "DeepSeek/DeepSeek-Coder-V2-Lite"},
25
- {"name": "Gemma-2-9B", "repo_id": "google/gemma-2-9b"},
26
- {"name": "Gemma-3-4B", "repo_id": "google/gemma-3-4b"},
27
- {"name": "LLaMA-3.1-8B-Instruct", "repo_id": "meta-llama/Llama-3.1-8B-Instruct"},
28
- {"name": "Qwen2-7B-Instruct", "repo_id": "Qwen/Qwen2-7B-Instruct"},
29
- {"name": "Qwen2.5-7B-Instruct", "repo_id": "Qwen/Qwen2.5-7B-Instruct"},
30
- {"name": "Zephyr-7B-Beta", "repo_id": "HuggingFaceH4/zephyr-7b-beta"},
31
- {"name": "OpenHermes-2.5-Mistral-7B", "repo_id": "teknium/OpenHermes-2.5-Mistral-7B"},
32
- {"name": "Falcon-7B-Instruct", "repo_id": "tiiuae/falcon-7b-instruct"},
33
- {"name": "Yi-6B", "repo_id": "01-ai/Yi-6B"},
34
- {"name": "XGen-7B-Instruct", "repo_id": "Salesforce/xgen-7b-8k-instruct"},
35
- {"name": "StableLM-3B-4e1t", "repo_id": "stabilityai/stablelm-3b-4e1t"},
36
- {"name": "Mistral-NeMo", "repo_id": "mistralai/Mixtral-NeMo"},
37
- {"name": "Mathstral-7B", "repo_id": "mistralai/Mathstral-7B"}
38
- ]
39
-
40
-
41
- def testar_acesso_modelos():
42
- """Testa o acesso a cada modelo da lista."""
43
- if not HF_TOKEN:
44
- print("⚠️ Token Hugging Face não encontrado. Pulando teste de acesso aos modelos.\n")
45
- return
46
-
47
- print("\n🔍 Testando acesso aos modelos Hugging Face...\n")
48
- resultados = []
49
- for modelo in MODELS:
50
- nome = modelo["name"]
51
- repo_id = modelo["repo_id"]
52
- try:
53
- hf_hub_download(
54
- repo_id=repo_id,
55
- filename="config.json",
56
- token=HF_TOKEN
57
- )
58
- resultados.append(f"✅ {nome}: Acesso OK")
59
- except Exception as e:
60
- resultados.append(f"❌ {nome}: Sem acesso ({str(e)})")
61
-
62
- print("🗒️ Resultado dos testes de acesso:")
63
- print("------------------------------------------------")
64
- for r in resultados:
65
- print(r)
66
- print("------------------------------------------------\n")
67
-
68
-
69
  def main():
70
- """Função principal que inicializa o sistema"""
 
 
 
 
 
71
  print("🚀 Iniciando Dr. Aldo Henrique com RAG...")
72
 
73
- # Verificar se o token HF está configurado
74
  if not HF_TOKEN:
75
- print("❌ Erro: Token HF_TOKEN não encontrado nas variáveis de ambiente")
76
- return
77
-
78
- print(f"🔑 Token HF encontrado: {HF_TOKEN[:8]}...")
79
-
80
- # 🔍 Testar acesso aos modelos (opcional, apenas informativo)
81
- testar_acesso_modelos()
82
-
83
- # ⚙️ Carrega ou constrói o vector store
84
- load_vector_store()
85
-
86
- # 🌐 Configura a interface
87
- interface = configurar_interface()
88
-
89
- print("🌐 Interface pronta!")
90
-
91
- # 🚀 Lançar a aplicação
92
- interface.launch(
93
- server_name="0.0.0.0",
94
- server_port=7860,
95
- share=False,
96
- max_threads=8,
97
- show_error=True
98
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
 
100
 
101
  if __name__ == "__main__":
 
1
  #!/usr/bin/env python3
2
  """
3
  Dr. Aldo Henrique - Chatbot com RAG
4
+ Arquivo principal que inicializa o sistema e lança a interface Gradio.
5
  """
6
 
7
  import os
8
+ import gradio as gr # Importa Gradio para verificar o tipo do objeto retornado
9
+ from interface import configurar_interface # Importa a função que configura a interface
 
 
10
 
11
  # 🔑 Token do Hugging Face vindo das variáveis de ambiente
12
+ # É crucial que este token esteja definido para que os modelos funcionem.
13
  HF_TOKEN = os.getenv("HF_TOKEN")
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  def main():
16
+ """
17
+ Função principal que gerencia o fluxo de inicialização do chatbot:
18
+ 1. Verifica a presença do token Hugging Face.
19
+ 2. Tenta configurar a interface Gradio (que internamente testa os modelos).
20
+ 3. Lança a interface completa ou uma página de erro, dependendo do resultado.
21
+ """
22
  print("🚀 Iniciando Dr. Aldo Henrique com RAG...")
23
 
24
+ # --- 1. Verificar se o token HF está configurado ---
25
  if not HF_TOKEN:
26
+ print("❌ Erro: Token HF_TOKEN não encontrado nas variáveis de ambiente.")
27
+ print("A interface não será carregada. Por favor, defina a variável de ambiente HF_TOKEN.")
28
+ # Se o token não está presente, exibe uma página de erro simples
29
+ error_app_no_token = gr.Blocks()
30
+ with error_app_no_token:
31
+ 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>")
32
+ error_app_no_token.launch(
33
+ server_name="0.0.0.0", # Permite acesso externo
34
+ server_port=7860, # Porta padrão para Gradio
35
+ share=False, # Não compartilha link público
36
+ show_error=True # Mostra erros na interface
37
+ )
38
+ return # Termina a execução se o token estiver faltando
39
+
40
+ print(f"🔑 Token HF encontrado: {HF_TOKEN[:8]}...") # Exibe parte do token para confirmação
41
+
42
+ # --- 2. Configurar a interface ---
43
+ # A função `configurar_interface()` (de interface.py) internamente:
44
+ # - Chama `ai_logic.inicializar_sistema()` para testar e carregar modelos.
45
+ # - Retorna um objeto `gr.Blocks` (interface completa) se houver modelos suficientes,
46
+ # OU um objeto `gr.HTML` (página de erro) caso contrário.
47
+ app_to_launch = configurar_interface()
48
+
49
+ print("🌐 Tentando lançar a interface...")
50
+
51
+ # --- 3. Lançar a aplicação com base no que foi retornado ---
52
+ # Verifica se o objeto retornado é uma interface Gradio válida
53
+ if isinstance(app_to_launch, (gr.Blocks, gr.Interface)):
54
+ # Se for um `gr.Blocks` ou `gr.Interface`, lança a aplicação completa
55
+ app_to_launch.launch(
56
+ server_name="0.0.0.0", # Permite acesso externo
57
+ server_port=7860, # Porta padrão para Gradio
58
+ share=False, # Não compartilha link público
59
+ max_threads=8, # Otimização para threads
60
+ show_error=True # Mostra erros na interface
61
+ )
62
+ elif isinstance(app_to_launch, gr.HTML):
63
+ # Se for um `gr.HTML`, significa que a inicialização de modelos falhou.
64
+ # Precisamos envolver esse HTML em um `gr.Blocks` para poder lançá-lo.
65
+ print("Não foi possível carregar a interface completa devido a modelos insuficientes ou outros erros de inicialização.")
66
+ print("Exibindo página de erro. Por favor, verifique os logs para mais detalhes.")
67
+ error_page_block = gr.Blocks()
68
+ with error_page_block:
69
+ # Adiciona o componente HTML de erro diretamente ao Blocks
70
+ error_page_block.add_component(app_to_launch)
71
+ # Alternativamente, para HTML simples: gr.HTML(app_to_launch.value) se `app_to_launch` fosse apenas a string.
72
+ # Mas como `app_to_launch` JÁ É um gr.HTML component, usamos add_component ou simplesmente o colocamos no `with` block
73
+ error_page_block.launch(
74
+ server_name="0.0.0.0",
75
+ server_port=7860, # Usa a porta padrão; se já estiver em uso, Gradio tentará a próxima disponível.
76
+ share=False,
77
+ show_error=True
78
+ )
79
+ else:
80
+ # Caso um tipo de objeto inesperado seja retornado
81
+ print("Erro inesperado: configurar_interface retornou um tipo de objeto desconhecido.")
82
+ unexpected_error_app = gr.Blocks()
83
+ with unexpected_error_app:
84
+ gr.Markdown("<h1>Erro Inesperado</h1><p>Ocorreu um erro desconhecido ao configurar a interface. Por favor, entre em contato com o suporte.</p>")
85
+ unexpected_error_app.launch(
86
+ server_name="0.0.0.0",
87
+ server_port=7860,
88
+ share=False,
89
+ show_error=True
90
+ )
91
 
92
 
93
  if __name__ == "__main__":