|
import os
|
|
from functools import lru_cache
|
|
from typing import Optional
|
|
|
|
from pydantic_settings import BaseSettings
|
|
|
|
|
|
if os.getenv("HUGGINGFACE_DEMO"):
|
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
|
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
|
|
else:
|
|
from app.aws.secrets import get_secret
|
|
|
|
secrets = get_secret()
|
|
os.environ["WANDB_API_KEY"] = secrets["WANDB_API_KEY"]
|
|
OPENAI_API_KEY = secrets["OPENAI_API_KEY"]
|
|
ANTHROPIC_API_KEY = secrets["ANTHROPIC_API_KEY"]
|
|
os.environ["WANDB_BASE_URL"] = "https://api.wandb.ai"
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
|
|
OPENAI_MODELS: list = [
|
|
"gpt-4o",
|
|
"gpt-4o-2024-11-20",
|
|
"gpt-4o-mini",
|
|
]
|
|
|
|
|
|
ANTHROPIC_MODELS: list = [
|
|
"claude-3-5-sonnet-latest"
|
|
]
|
|
|
|
|
|
SUPPORTED_MODELS: list = OPENAI_MODELS + ANTHROPIC_MODELS
|
|
|
|
|
|
OPENAI_API_KEY: str
|
|
ANTHROPIC_API_KEY: str
|
|
|
|
DEFAULT_MAX_ATTEMPTS: int = 1
|
|
|
|
|
|
DEFAULT_MODEL: str = OPENAI_MODELS[0]
|
|
MAX_TOKENS: int = 2000
|
|
TEMPERATURE: float = 0.0
|
|
|
|
|
|
CORS_ALLOW_ORIGINS: bool = True
|
|
|
|
|
|
API_V1_PREFIX: str = "/api/v1"
|
|
PROJECT_NAME: str = "Dreem Attribution"
|
|
DEBUG: bool = False
|
|
|
|
|
|
RATE_LIMIT_CALLS: int = 100
|
|
RATE_LIMIT_PERIOD: int = 60
|
|
|
|
|
|
REDIS_URL: Optional[str] = None
|
|
CACHE_TTL: int = 3600
|
|
|
|
|
|
LOG_LEVEL: str = "INFO"
|
|
LOG_FORMAT: str = "json"
|
|
|
|
|
|
OPENAI_TIMEOUT: float = 30.0
|
|
ANTHROPIC_TIMEOUT: float = 30.0
|
|
|
|
|
|
OPENAI_API_KEY: str = OPENAI_API_KEY
|
|
ANTHROPIC_API_KEY: str = ANTHROPIC_API_KEY
|
|
|
|
def validate_api_keys(self):
|
|
"""Validate that required API keys are present."""
|
|
if not self.OPENAI_API_KEY:
|
|
raise ValueError("OPENAI_API_KEY is required")
|
|
if not self.ANTHROPIC_API_KEY:
|
|
raise ValueError("ANTHROPIC_API_KEY is required")
|
|
|
|
|
|
|
|
@lru_cache
|
|
def get_settings() -> Settings:
|
|
"""
|
|
Create and cache a Settings instance.
|
|
Returns the same instance for subsequent calls.
|
|
"""
|
|
settings = Settings()
|
|
settings.validate_api_keys()
|
|
return settings
|
|
|