| """ |
| Configurações e constantes do projeto AgentGraph |
| """ |
| import os |
| from dotenv import load_dotenv |
| import logging |
|
|
| |
| load_dotenv() |
|
|
| |
| HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY") |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") |
| ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY") |
| GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") |
|
|
| |
| LANGSMITH_API_KEY = os.getenv("LANGSMITH_API_KEY") |
| LANGSMITH_TRACING = os.getenv("LANGSMITH_TRACING", "false").lower() == "true" |
| LANGSMITH_ENDPOINT = os.getenv("LANGSMITH_ENDPOINT", "https://api.smith.langchain.com") |
| LANGSMITH_PROJECT = os.getenv("LANGSMITH_PROJECT", "agentgraph-project") |
|
|
| |
| UPLOAD_DIR = os.getenv("UPLOAD_DIR", "uploaded_data") |
| DEFAULT_CSV_PATH = os.getenv("DEFAULT_CSV_PATH", "tabela.csv") |
| SQL_DB_PATH = os.getenv("SQL_DB_PATH", "data.db") |
| UPLOADED_CSV_PATH = os.path.join(UPLOAD_DIR, "tabela.csv") |
|
|
| |
| AVAILABLE_MODELS = { |
| "GPT-o3-mini": "o3-mini", |
| "GPT-4o-mini": "gpt-4o-mini", |
| "GPT-4o": "gpt-4o", |
| "Claude-3.5-Sonnet": "claude-3-5-sonnet-20241022", |
| "Gemini-1.5-Pro": "gemini-1.5-pro", |
| "Gemini-2.0-Flash": "gemini-2.0-flash" |
| } |
|
|
| |
| REFINEMENT_MODELS = { |
| "LLaMA 70B": "meta-llama/Llama-3.3-70B-Instruct", |
| "LlaMA 8B": "meta-llama/Llama-3.1-8B-Instruct", |
| "DeepSeek-R1": "deepseek-ai/DeepSeek-R1-0528" |
| } |
|
|
| |
| LLAMA_MODELS = {**AVAILABLE_MODELS, **REFINEMENT_MODELS} |
|
|
| MAX_TOKENS_MAP = { |
| |
| "meta-llama/Llama-3.3-70B-Instruct": 900, |
| "meta-llama/Llama-3.1-8B-Instruct": 700, |
| "deepseek-ai/DeepSeek-R1-0528": 8192, |
| |
| "o3-mini": 4096, |
| "gpt-4o-mini": 4096, |
| "gpt-4o": 4096, |
| "claude-3-5-sonnet-20241022": 1024, |
| "gemini-1.5-pro": 4096, |
| "gemini-2.0-flash": 4096 |
| } |
|
|
| |
| OPENAI_MODELS = { |
| "o3-mini", |
| "gpt-4o-mini", |
| "gpt-4o", |
| } |
|
|
| |
| ANTHROPIC_MODELS = { |
| "claude-3-5-sonnet-20241022" |
| } |
|
|
| |
| GOOGLE_MODELS = { |
| "gemini-1.5-pro", |
| "gemini-2.0-flash" |
| } |
|
|
| |
| HUGGINGFACE_MODELS = { |
| "meta-llama/Llama-3.3-70B-Instruct", |
| "meta-llama/Llama-3.1-8B-Instruct", |
| "deepseek-ai/DeepSeek-R1-0528" |
| } |
|
|
| |
| DEFAULT_MODEL = os.getenv("DEFAULT_MODEL", "GPT-4o-mini") |
| MAX_ITERATIONS = int(os.getenv("MAX_ITERATIONS", "40")) |
| TEMPERATURE = float(os.getenv("TEMPERATURE", "0")) |
|
|
| |
| GRADIO_SHARE = os.getenv("GRADIO_SHARE", "False").lower() == "true" |
| GRADIO_PORT = int(os.getenv("GRADIO_PORT", "7860")) |
|
|
| |
| LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") |
|
|
| |
| logging.basicConfig( |
| level=getattr(logging, LOG_LEVEL.upper()), |
| format='%(asctime)s - %(levelname)s - %(message)s' |
| ) |
|
|
| |
| os.makedirs(UPLOAD_DIR, exist_ok=True) |
|
|
| |
| if OPENAI_API_KEY: |
| os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY |
|
|
| |
| if GOOGLE_API_KEY: |
| os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY |
|
|
| |
| if ANTHROPIC_API_KEY: |
| os.environ["ANTHROPIC_API_KEY"] = ANTHROPIC_API_KEY |
|
|
| |
| if LANGSMITH_API_KEY: |
| os.environ["LANGSMITH_API_KEY"] = LANGSMITH_API_KEY |
| os.environ["LANGSMITH_TRACING"] = str(LANGSMITH_TRACING).lower() |
| os.environ["LANGSMITH_ENDPOINT"] = LANGSMITH_ENDPOINT |
| os.environ["LANGSMITH_PROJECT"] = LANGSMITH_PROJECT |
| logging.info(f"LangSmith configurado: projeto='{LANGSMITH_PROJECT}', tracing={LANGSMITH_TRACING}") |
| else: |
| logging.info("LangSmith não configurado (LANGSMITH_API_KEY não encontrada)") |
|
|
| def get_active_csv_path(): |
| """Retorna o CSV ativo: o carregado ou o padrão.""" |
| if os.path.exists(UPLOADED_CSV_PATH): |
| logging.info(f"[CSV] Usando arquivo CSV carregado: {UPLOADED_CSV_PATH}") |
| return UPLOADED_CSV_PATH |
| else: |
| logging.info(f"[CSV] Usando arquivo CSV padrão: {DEFAULT_CSV_PATH}") |
| return DEFAULT_CSV_PATH |
|
|
| def validate_config(): |
| """Valida se as configurações necessárias estão presentes.""" |
| errors = [] |
| warnings = [] |
|
|
| if not HUGGINGFACE_API_KEY: |
| errors.append("HUGGINGFACE_API_KEY não configurada") |
|
|
| if not OPENAI_API_KEY: |
| errors.append("OPENAI_API_KEY não configurada") |
|
|
| if not ANTHROPIC_API_KEY: |
| errors.append("ANTHROPIC_API_KEY não configurada") |
|
|
| if not os.path.exists(DEFAULT_CSV_PATH): |
| errors.append(f"Arquivo CSV padrão não encontrado: {DEFAULT_CSV_PATH}") |
|
|
| |
| if not LANGSMITH_API_KEY: |
| warnings.append("LANGSMITH_API_KEY não configurada - observabilidade desabilitada") |
|
|
| if errors: |
| raise ValueError(f"Erros de configuração: {', '.join(errors)}") |
|
|
| if warnings: |
| for warning in warnings: |
| logging.warning(warning) |
|
|
| logging.info("Configurações validadas com sucesso") |
| return True |
|
|
| def is_langsmith_enabled() -> bool: |
| """ |
| Verifica se o LangSmith está habilitado e configurado |
| |
| Returns: |
| True se LangSmith estiver habilitado, False caso contrário |
| """ |
| return bool(LANGSMITH_API_KEY and LANGSMITH_TRACING) |
|
|
| def get_langsmith_metadata() -> dict: |
| """ |
| Retorna metadados padrão para traces do LangSmith |
| |
| Returns: |
| Dicionário com metadados do projeto |
| """ |
| if not is_langsmith_enabled(): |
| return {} |
|
|
| return { |
| "project": LANGSMITH_PROJECT, |
| "application": "AgentGraph", |
| "version": "1.0.0", |
| "environment": "production" |
| } |
|
|