""" Configurações e utilitários para o AgentPDF. Este módulo contém configurações globais, carregamento de variáveis de ambiente e funções utilitárias para o projeto. """ import os from dotenv import load_dotenv from typing import Optional # Carrega variáveis de ambiente load_dotenv() class Config: """Classe de configuração centralizada.""" # API Keys OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "") LANGCHAIN_API_KEY: str = os.getenv("LANGCHAIN_API_KEY", "") # Configurações do LangChain LANGCHAIN_TRACING_V2: bool = os.getenv("LANGCHAIN_TRACING_V2", "false").lower() == "true" LANGCHAIN_PROJECT: str = os.getenv("LANGCHAIN_PROJECT", "agentpdf") # Configurações do modelo DEFAULT_MODEL: str = "gpt-4o-mini" DEFAULT_TEMPERATURE: float = 0.1 MAX_TOKENS: int = 2000 # Configurações de processamento de texto CHUNK_SIZE: int = 1000 CHUNK_OVERLAP: int = 200 # Configurações de recuperação TOP_K_DOCUMENTS: int = 5 SIMILARITY_THRESHOLD: float = 0.7 # Configurações da interface GRADIO_PORT: int = 7860 GRADIO_SHARE: bool = False # Diretórios UPLOAD_DIR: str = "uploaded_data" TEMP_DIR: str = "temp" @classmethod def validate_config(cls) -> bool: """ Valida se as configurações essenciais estão presentes. Returns: bool: True se a configuração é válida, False caso contrário. """ if not cls.OPENAI_API_KEY: print("⚠️ AVISO: OPENAI_API_KEY não configurada!") return False return True @classmethod def get_model_config(cls) -> dict: """ Retorna configurações do modelo LLM. Returns: dict: Configurações do modelo. """ return { "model": cls.DEFAULT_MODEL, "temperature": cls.DEFAULT_TEMPERATURE, "max_tokens": cls.MAX_TOKENS, } @classmethod def get_text_splitter_config(cls) -> dict: """ Retorna configurações do divisor de texto. Returns: dict: Configurações do text splitter. """ return { "chunk_size": cls.CHUNK_SIZE, "chunk_overlap": cls.CHUNK_OVERLAP, } @classmethod def get_retrieval_config(cls) -> dict: """ Retorna configurações de recuperação. Returns: dict: Configurações de recuperação. """ return { "k": cls.TOP_K_DOCUMENTS, "score_threshold": cls.SIMILARITY_THRESHOLD, } def ensure_directories(): """Garante que os diretórios necessários existam.""" directories = [Config.UPLOAD_DIR, Config.TEMP_DIR] for directory in directories: os.makedirs(directory, exist_ok=True) def get_openai_api_key() -> Optional[str]: """ Retorna a chave da API OpenAI. Returns: Optional[str]: Chave da API ou None se não configurada. """ return Config.OPENAI_API_KEY if Config.OPENAI_API_KEY else None # Inicialização ensure_directories()