Spaces:
Running
Running
Update app.py
Browse files
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 |
-
|
9 |
-
from
|
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 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
print("
|
90 |
-
|
91 |
-
#
|
92 |
-
interface.
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
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__":
|