|
import os |
|
from functools import lru_cache |
|
from typing import Optional |
|
|
|
from pydantic_settings import BaseSettings |
|
|
|
|
|
os.environ["WEAVE_CAPTURE_CODE"] = "false" |
|
if os.getenv("HUGGINGFACE_DEMO"): |
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") |
|
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY") |
|
REDIS_PASSWORD = "" |
|
REDIS_USE_SSL = False |
|
else: |
|
from app.aws.secrets import get_secret |
|
|
|
ENV = os.getenv("ENV", "LOCAL") |
|
secrets = get_secret() |
|
if ENV != "PROD": |
|
os.environ["WANDB_API_KEY"] = secrets["WANDB_API_KEY"] |
|
OPENAI_API_KEY = secrets["OPENAI_API_KEY"] |
|
ANTHROPIC_API_KEY = secrets["ANTHROPIC_API_KEY"] |
|
REDIS_PASSWORD = secrets["REDIS_PASSWORD"] if ENV == "PROD" else "" |
|
REDIS_USE_SSL = True if ENV == "PROD" or ENV == "UAT" else False |
|
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", |
|
"ft:gpt-4o-2024-08-06:dreem:selfridges-dresses-test:BVYmIA6e", |
|
] |
|
|
|
|
|
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_PASSWORD: Optional[str] = REDIS_PASSWORD |
|
REDIS_USE_SSL: Optional[bool] = REDIS_USE_SSL |
|
|
|
|
|
LOG_LEVEL: str = "INFO" |
|
LOG_FORMAT: str = "json" |
|
|
|
|
|
OPENAI_API_KEY: str = OPENAI_API_KEY |
|
ANTHROPIC_API_KEY: str = ANTHROPIC_API_KEY |
|
|
|
|
|
MAX_DOWNLOAD_RETRY: int = 10 |
|
|
|
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 |
|
|