"""Typed settings for GCP Solution Architecture Agent.""" import os from pathlib import Path from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Application Settings.""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", extra="ignore", ) # Agent Identity AGENT_NAME: str = "gcp_solution_architecture_agent" AGENT_VERSION: str = "1.0.0" LOG_LEVEL: str = "INFO" # Server Configuration HOST: str = "0.0.0.0" PORT: int = 8080 # LLM Settings OPENAI_API_KEY: str | None = None AZURE_OPENAI_API_KEY: str | None = None AZURE_OPENAI_ENDPOINT: str | None = None AZURE_OPENAI_DEPLOYMENT: str = "gpt-4o" AZURE_OPENAI_API_VERSION: str = "2024-02-15-preview" LLM_TEMPERATURE: float = 0.2 # Google Cloud Environment & Scanner Credentials GOOGLE_APPLICATION_CREDENTIALS: str | None = None GCP_PROJECT_ID: str | None = None GCP_REGION: str = "us-central1" # Database & Storage Settings (External PostgreSQL) POSTGRES_HOST: str = "localhost" POSTGRES_PORT: int = 5432 POSTGRES_DB: str = "gcp_agent_db" POSTGRES_USER: str = "postgres" POSTGRES_PASSWORD: str = "postgres" DATABASE_URL: str | None = None SQLITE_FALLBACK_DB: str = "gcp_agent_local.db" # ADK Multi-Agent Orchestrator Settings ADK_MAX_LOOP_ITERATIONS: int = 5 ADK_ENABLE_ARTIFACT_STORE: bool = True # Google Developer Knowledge MCP Server Settings DEVELOPER_KNOWLEDGE_MCP_URL: str = "https://developerknowledge.googleapis.com/mcp" DEVELOPER_KNOWLEDGE_MCP_ENABLED: bool = True # Paths BASE_DIR: Path = Path(__file__).resolve().parent.parent SKILLS_DIR: Path = Path(__file__).resolve().parent / "skills" EVAL_DATASET_PATH: Path = Path(__file__).resolve().parent.parent / "eval" / "datasets" / "benchmark_cases.json" def get_database_url(self) -> str: """Construct database connection URL (PostgreSQL or SQLite fallback).""" if self.DATABASE_URL: return self.DATABASE_URL return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" _settings: Settings | None = None def get_settings() -> Settings: """Get singleton Settings instance.""" global _settings if _settings is None: _settings = Settings() return _settings