# ml_module/core/config.py from pydantic_settings import BaseSettings from pydantic import Field from pathlib import Path import os class Settings(BaseSettings): """ Centralized application settings. Pydantic will automatically load values from environment variables or a .env file. """ # --- LLM Configuration --- GEMINI_API_KEY: str = Field(default="", env="GEMINI_API_KEY") # --- MinIO Storage Configuration --- MINIO_ENDPOINT: str = Field("localhost:9000", env="MINIO_ENDPOINT") MINIO_ACCESS_KEY: str = Field("minioadmin", env="MINIO_ACCESS_KEY") MINIO_SECRET_KEY: str = Field("minioadmin", env="MINIO_SECRET_KEY") MINIO_USE_SECURE: bool = Field(False, env="MINIO_USE_SECURE") # --- Application Configuration --- ML_PROJECTS_BUCKET: str = Field("ml-projects", env="ML_PROJECTS_BUCKET") LOCAL_STORAGE_PATH: str = Field("ml_module/local_minio_sim", env="LOCAL_STORAGE_PATH") # --- ML Agent Session DB Configuration --- ML_AGENT_DB_BACKEND: str = Field("sqlite", env="ML_AGENT_DB_BACKEND") ML_AGENT_DB_URL: str = Field("", env="ML_AGENT_DB_URL") ML_AGENT_DB_SESSION_TABLE: str = Field("ml_agent_sessions", env="ML_AGENT_DB_SESSION_TABLE") # --- Supabase Auth Configuration --- SUPABASE_PROJECT_ID: str = Field("", env="SUPABASE_PROJECT_ID") SUPABASE_JWKS_URL: str = Field("", env="SUPABASE_JWKS_URL") SUPABASE_JWT_AUDIENCE: str = Field("", env="SUPABASE_JWT_AUDIENCE") SUPABASE_JWT_ISSUER: str = Field("", env="SUPABASE_JWT_ISSUER") SUPABASE_JWT_CACHE_SECONDS: int = Field(300, env="SUPABASE_JWT_CACHE_SECONDS") # --- Artifact lifecycle & retention --- ARTIFACT_RETENTION_VERSIONS: int = Field(5, env="ML_ARTIFACT_RETENTION_VERSIONS") DRAFT_RETENTION_VERSIONS: int = Field(5, env="ML_DRAFT_RETENTION_VERSIONS") MAX_ARTIFACT_SIZE_MB: int = Field(512, env="ML_MAX_ARTIFACT_SIZE_MB") class Config: # Use the backend .env file path dynamically env_file = str(Path(__file__).resolve().parent.parent.parent / ".env") env_file_encoding = "utf-8" extra = "ignore" # Create a single, importable instance of the settings settings = Settings()