Spaces:
Running
Running
#!/usr/bin/env python3 | |
""" | |
Dr. Aldo Henrique - Chatbot com RAG | |
Arquivo principal que inicializa o sistema e lança a interface Gradio. | |
""" | |
import os | |
import gradio as gr # Importa Gradio para verificar o tipo do objeto retornado | |
from interface import configurar_interface # Importa a função que configura a interface | |
# 🔑 Token do Hugging Face vindo das variáveis de ambiente | |
# É crucial que este token esteja definido para que os modelos funcionem. | |
HF_TOKEN = os.getenv("HF_TOKEN") | |
def main(): | |
""" | |
Função principal que gerencia o fluxo de inicialização do chatbot: | |
1. Verifica a presença do token Hugging Face. | |
2. Tenta configurar a interface Gradio (que internamente testa os modelos). | |
3. Lança a interface completa ou uma página de erro, dependendo do resultado. | |
""" | |
print("🚀 Iniciando Dr. Aldo Henrique com RAG...") | |
# --- 1. Verificar se o token HF está configurado --- | |
if not HF_TOKEN: | |
print("❌ Erro: Token HF_TOKEN não encontrado nas variáveis de ambiente.") | |
print("A interface não será carregada. Por favor, defina a variável de ambiente HF_TOKEN.") | |
# Se o token não está presente, exibe uma página de erro simples | |
error_app_no_token = gr.Blocks() | |
with error_app_no_token: | |
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>") | |
error_app_no_token.launch( | |
server_name="0.0.0.0", # Permite acesso externo | |
server_port=7860, # Porta padrão para Gradio | |
share=False, # Não compartilha link público | |
show_error=True # Mostra erros na interface | |
) | |
return # Termina a execução se o token estiver faltando | |
print(f"🔑 Token HF encontrado: {HF_TOKEN[:8]}...") # Exibe parte do token para confirmação | |
# --- 2. Configurar a interface --- | |
# A função `configurar_interface()` (de interface.py) internamente: | |
# - Chama `ai_logic.inicializar_sistema()` para testar e carregar modelos. | |
# - Retorna um objeto `gr.Blocks` (interface completa) se houver modelos suficientes, | |
# OU um objeto `gr.HTML` (página de erro) caso contrário. | |
app_to_launch = configurar_interface() | |
print("🌐 Tentando lançar a interface...") | |
# --- 3. Lançar a aplicação com base no que foi retornado --- | |
# Verifica se o objeto retornado é uma interface Gradio válida | |
if isinstance(app_to_launch, (gr.Blocks, gr.Interface)): | |
# Se for um `gr.Blocks` ou `gr.Interface`, lança a aplicação completa | |
app_to_launch.launch( | |
server_name="0.0.0.0", # Permite acesso externo | |
server_port=7860, # Porta padrão para Gradio | |
share=False, # Não compartilha link público | |
max_threads=8, # Otimização para threads | |
show_error=True # Mostra erros na interface | |
) | |
elif isinstance(app_to_launch, gr.HTML): | |
# Se for um `gr.HTML`, significa que a inicialização de modelos falhou. | |
# Precisamos envolver esse HTML em um `gr.Blocks` para poder lançá-lo. | |
print("Não foi possível carregar a interface completa devido a modelos insuficientes ou outros erros de inicialização.") | |
print("Exibindo página de erro. Por favor, verifique os logs para mais detalhes.") | |
error_page_block = gr.Blocks() | |
with error_page_block: | |
# Adiciona o componente HTML de erro diretamente ao Blocks | |
error_page_block.add_component(app_to_launch) | |
# Alternativamente, para HTML simples: gr.HTML(app_to_launch.value) se `app_to_launch` fosse apenas a string. | |
# Mas como `app_to_launch` JÁ É um gr.HTML component, usamos add_component ou simplesmente o colocamos no `with` block | |
error_page_block.launch( | |
server_name="0.0.0.0", | |
server_port=7860, # Usa a porta padrão; se já estiver em uso, Gradio tentará a próxima disponível. | |
share=False, | |
show_error=True | |
) | |
else: | |
# Caso um tipo de objeto inesperado seja retornado | |
print("Erro inesperado: configurar_interface retornou um tipo de objeto desconhecido.") | |
unexpected_error_app = gr.Blocks() | |
with unexpected_error_app: | |
gr.Markdown("<h1>Erro Inesperado</h1><p>Ocorreu um erro desconhecido ao configurar a interface. Por favor, entre em contato com o suporte.</p>") | |
unexpected_error_app.launch( | |
server_name="0.0.0.0", | |
server_port=7860, | |
share=False, | |
show_error=True | |
) | |
if __name__ == "__main__": | |
main() | |