Spaces:
Sleeping
Sleeping
| 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") | |
| GEMINI_API_KEY = os.getenv("GEMINI_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": | |
| print("not WB") | |
| #os.environ["WANDB_API_KEY"] = secrets["WANDB_API_KEY"] | |
| OPENAI_API_KEY = secrets["OPENAI_API_KEY"] | |
| GEMINI_API_KEY = os.getenv("GEMINI_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): | |
| # Supported openai models | |
| OPENAI_MODELS: list = [ | |
| "gpt-4o", # first model is the default of the vendor | |
| "gpt-4o-2024-11-20", | |
| "gpt-4o-mini", | |
| "ft:gpt-4o-2024-08-06:dreem:selfridges-dresses-test:BVYmIA6e", | |
| "ft:gpt-4o-2024-08-06:dreem:500dresses-01:BWPLL6Qj" | |
| ] | |
| # Supported anthropic models | |
| ANTHROPIC_MODELS: list = [ | |
| "claude-3-5-sonnet-latest" # first model is the default of the vendor | |
| ] | |
| # Supported anthropic models | |
| GEMINI_MODELS: list = [ | |
| "gemini-2.5-flash-preview-04-17" , # first model is the default of the vendor | |
| "gemini-1.5-flash" | |
| ] | |
| # Supprted AI Services | |
| SUPPORTED_MODELS: list = OPENAI_MODELS + ANTHROPIC_MODELS + GEMINI_MODELS | |
| # API Keys | |
| OPENAI_API_KEY: str | |
| ANTHROPIC_API_KEY: str | |
| GEMINI_API_KEY: str | |
| DEFAULT_MAX_ATTEMPTS: int = 1 | |
| # AI Service Configuration | |
| DEFAULT_MODEL: str = OPENAI_MODELS[0] | |
| MAX_TOKENS: int = 2000 | |
| TEMPERATURE: float = 0.0 | |
| # CORS Configuration | |
| CORS_ALLOW_ORIGINS: bool = True | |
| # API Configuration | |
| API_V1_PREFIX: str = "/api/v1" | |
| PROJECT_NAME: str = "Dreem Attribution" | |
| DEBUG: bool = False | |
| # Rate Limiting | |
| RATE_LIMIT_CALLS: int = 100 | |
| RATE_LIMIT_PERIOD: int = 60 | |
| # Cache Configuration | |
| REDIS_PASSWORD: Optional[str] = REDIS_PASSWORD | |
| REDIS_USE_SSL: Optional[bool] = REDIS_USE_SSL | |
| # Logging | |
| LOG_LEVEL: str = "INFO" | |
| LOG_FORMAT: str = "json" | |
| # API Keys | |
| OPENAI_API_KEY: str = OPENAI_API_KEY | |
| ANTHROPIC_API_KEY: str = ANTHROPIC_API_KEY | |
| GEMINI_API_KEY: str = GEMINI_API_KEY | |
| # | |
| MAX_DOWNLOAD_RETRY: int = 10 # times | |
| 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") | |
| if not self.GEMINI_API_KEY: | |
| raise ValueError("GEMINI_API_KEY is required") | |
| # Create a cached instance of settings | |
| 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 | |