File size: 3,470 Bytes
6b29104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""
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()