ira/sim-search-api/app/core/config.py

66 lines
1.9 KiB
Python

"""
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, field_validator
from pydantic_settings import BaseSettings
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] = ["*"]
@field_validator("CORS_ORIGINS", mode="before")
@classmethod
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"
}
model_config = {
"case_sensitive": True,
"env_file": ".env",
}
# Create settings instance
settings = Settings()