| """ |
| 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() |
|
|