""" Aplicação principal do AgentPDF. Este é o ponto de entrada da aplicação que inicializa a interface Gradio e configura o ambiente. """ import os import sys import warnings from pathlib import Path # Adiciona o diretório raiz ao path root_dir = Path(__file__).parent sys.path.insert(0, str(root_dir)) # Suprime warnings desnecessários warnings.filterwarnings("ignore", category=UserWarning) warnings.filterwarnings("ignore", category=FutureWarning) from interface.modern_interface import create_modern_gradio_app from utils.config import Config from utils.logger import main_logger, setup_logger def setup_environment(): """Configura o ambiente da aplicação.""" # Configura logging setup_logger("AgentPDF", "INFO") # Verifica configurações if not Config.validate_config(): main_logger.warning("⚠️ Configuração incompleta detectada!") main_logger.warning(" Certifique-se de configurar OPENAI_API_KEY no arquivo .env") main_logger.warning(" A aplicação pode não funcionar corretamente sem a chave da API.") # Cria diretórios necessários os.makedirs(Config.UPLOAD_DIR, exist_ok=True) os.makedirs(Config.TEMP_DIR, exist_ok=True) main_logger.info("🚀 Ambiente configurado com sucesso!") def main(): """Função principal da aplicação.""" try: # Banner de inicialização print(""" ╔══════════════════════════════════════════════════════════════╗ ║ 🤖 AgentPDF ║ ║ ║ ║ Chat Inteligente com Documentos PDF ║ ║ ║ ║ Powered by LangChain + LangGraph + GPT-4o-mini ║ ╚══════════════════════════════════════════════════════════════╝ """) # Configura ambiente setup_environment() # Informações de inicialização main_logger.info("🔧 Inicializando AgentPDF...") main_logger.info(f"📁 Diretório de upload: {Config.UPLOAD_DIR}") main_logger.info(f"🌐 Porta: {Config.GRADIO_PORT}") main_logger.info(f"🔑 OpenAI API configurada: {'✅' if Config.OPENAI_API_KEY else '❌'}") # Cria e executa a aplicação Gradio main_logger.info("🎨 Criando interface Gradio moderna...") app = create_modern_gradio_app() main_logger.info("🚀 Iniciando servidor...") main_logger.info(f"🌍 Acesse: http://localhost:{Config.GRADIO_PORT}") # Executa a aplicação app.launch( server_name="0.0.0.0", server_port=Config.GRADIO_PORT, share=Config.GRADIO_SHARE, show_error=True, quiet=False ) except KeyboardInterrupt: main_logger.info("👋 Aplicação interrompida pelo usuário") sys.exit(0) except Exception as e: main_logger.error(f"❌ Erro fatal na aplicação: {e}") main_logger.exception("Detalhes do erro:") sys.exit(1) if __name__ == "__main__": main()