|
|
""" |
|
|
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 |
|
|
|
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
class Config: |
|
|
"""Classe de configuração centralizada.""" |
|
|
|
|
|
|
|
|
OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "") |
|
|
LANGCHAIN_API_KEY: str = os.getenv("LANGCHAIN_API_KEY", "") |
|
|
|
|
|
|
|
|
LANGCHAIN_TRACING_V2: bool = os.getenv("LANGCHAIN_TRACING_V2", "false").lower() == "true" |
|
|
LANGCHAIN_PROJECT: str = os.getenv("LANGCHAIN_PROJECT", "agentpdf") |
|
|
|
|
|
|
|
|
DEFAULT_MODEL: str = "gpt-4o-mini" |
|
|
DEFAULT_TEMPERATURE: float = 0.1 |
|
|
MAX_TOKENS: int = 2000 |
|
|
|
|
|
|
|
|
CHUNK_SIZE: int = 1000 |
|
|
CHUNK_OVERLAP: int = 200 |
|
|
|
|
|
|
|
|
TOP_K_DOCUMENTS: int = 5 |
|
|
SIMILARITY_THRESHOLD: float = 0.7 |
|
|
|
|
|
|
|
|
GRADIO_PORT: int = 7860 |
|
|
GRADIO_SHARE: bool = False |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
ensure_directories() |
|
|
|