AgentPDF / utils /config.py
rwayz's picture
Deploy
6b29104
"""
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()