""" Configuration settings for the sim-search API. This module defines the settings for the API, loaded from environment variables. """ import os import secrets from typing import List, Optional, Dict, Any, Union from pydantic import AnyHttpUrl, BaseSettings, validator class Settings(BaseSettings): """Settings for the sim-search API.""" # API settings API_V1_STR: str = "/api/v1" PROJECT_NAME: str = "Sim-Search API" PROJECT_DESCRIPTION: str = "API for the Sim-Search intelligent research system" VERSION: str = "0.1.0" # Security settings SECRET_KEY: str = os.getenv("SECRET_KEY", secrets.token_urlsafe(32)) ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 7 days # CORS settings CORS_ORIGINS: List[str] = ["*"] @validator("CORS_ORIGINS", pre=True) def assemble_cors_origins(cls, v: Union[str, List[str]]) -> Union[List[str], str]: """Parse CORS origins from string or list.""" if isinstance(v, str) and not v.startswith("["): return [i.strip() for i in v.split(",")] elif isinstance(v, (list, str)): return v raise ValueError(v) # Database settings SQLALCHEMY_DATABASE_URI: str = os.getenv( "DATABASE_URL", f"sqlite:///./sim-search.db" ) # Sim-search settings SIM_SEARCH_PATH: str = os.getenv("SIM_SEARCH_PATH", "/Volumes/SAM2/CODE/sim-search") # Default models for different detail levels DEFAULT_MODELS: Dict[str, str] = { "brief": "llama-3.1-8b-instant", "standard": "llama-3.1-8b-instant", "detailed": "llama-3.3-70b-versatile", "comprehensive": "llama-3.3-70b-versatile" } class Config: """Pydantic config.""" case_sensitive = True env_file = ".env" # Create settings instance settings = Settings()