| | 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 |
| |
|