{"repo": "abhishek1139/ind-diplomat", "files": {"src/dip/Config/config.py": {"b87fd8d2a5fc7c2d2c0690dd55e2ceb5d49235d8": {"t": 1785746892.0349479, "n": 6992, "h": "1e12fad25685b595", "c": "\"\"\"\nDIP 2.0 — Centralized Configuration\n=====================================\n\nSINGLE SOURCE OF TRUTH for all settings, API keys, and configuration.\nImport from anywhere: `from Config import config`\n\nUsage:\n from dip.Config import config\n model = config.LLM_MODEL # \"gpt-4o\"\n key = config.OPENROUTER_API_KEY # \"sk-...\"\n enabled = config.DIP_OTEL_ENABLED # False\n\nAll values loaded from environment variables with sensible defaults.\nFor local development, copy .env.example to .env and fill in secrets.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Optional\n\n# Load .env file at module level\ntry:\n from dotenv import load_dotenv\n _env_path = Path(__file__).resolve().parent.parent / \".env\"\n if _env_path.exists():\n load_dotenv(_env_path)\nexcept ImportError:\n pass\n\n# Project root\nROOT_DIR = Path(__file__).resolve().parent.parent\nDATA_DIR = ROOT_DIR / \"data\"\n\n\n@dataclass\nclass Config:\n \"\"\"Central configuration loaded from environment variables.\"\"\"\n\n # ═══════════════════════════════════════════════════════════════\n # LLM Configuration\n # ═══════════════════════════════════════════════════════════════\n LLM_MODEL: str = field(default_factory=lambda: os.getenv(\"LLM_MODEL\", \"gpt-4o\"))\n LLM_PROVIDER: str = field(default_factory=lambda: os.getenv(\"LLM_PROVIDER\", \"openai\"))\n OPENROUTER_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_API_KEY\", \"\"))\n OPENROUTER_MODEL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_MODEL\", \"\"))\n OPENROUTER_URL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_URL\", \"https://openrouter.ai/api/v1/chat/completions\"))\n OPENAI_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENAI_API_KEY\", \"\"))\n DEEPSEEK_API_KEY: str = field(default_factory=lambda: os.getenv(\"DEEPSEEK_API_KEY\", \"\"))\n OLLAMA_BASE_URL: str = field(default_factory=lambda: os.getenv(\"OLLAMA_BASE_URL\", \"http://localhost:11434\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Server Configuration\n # ═══════════════════════════════════════════════════════════════\n API_PORT: int = field(default_factory=lambda: int(os.getenv(\"API_PORT\", \"8000\")))\n API_HOST: str = field(default_factory=lambda: os.getenv(\"API_HOST\", \"0.0.0.0\"))\n ENVIRONMENT: str = field(default_factory=lambda: os.getenv(\"ENVIRONMENT\", \"development\"))\n CORS_ALLOWED_ORIGINS: list = field(default_factory=lambda: os.getenv(\"CORS_ALLOWED_ORIGINS\", \"*\").split(\",\"))\n\n # ═══════════════════════════════════════════════════════════════\n # API Keys — Data Providers\n # ═══════════════════════════════════════════════════════════════\n ACLED_API_KEY: str = field(default_factory=lambda: os.getenv(\"ACLED_API_KEY\", \"\"))\n ACLED_EMAIL: str = field(default_factory=lambda: os.getenv(\"ACLED_EMAIL\", \"\"))\n GDELT_API_KEY: str = field(default_factory=lambda: os.getenv(\"GDELT_API_KEY\", \"\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Storage Paths\n # ═══════════════════════════════════════════════════════════════\n DIP_JOB_STORE: str = field(default_factory=lambda: os.getenv(\"DIP_JOB_STORE\", str(DATA_DIR / \"jobs.json\")))\n CHECKPOINT_DIR: str = field(default_factory=lambda: os.getenv(\"CHECKPOINT_DIR\", str(DATA_DIR / \"checkpoints\")))\n CHROMA_DATA_DIR: str = field(default_factory=lambda: os.getenv(\"CHROMA_DATA_DIR\", str(DATA_DIR / \"chroma\")))\n MLFLOW_TRACKING_URI: str = field(default_factory=lambda: os.getenv(\"MLFLOW_TRACKING_URI\", f\"file:{DATA_DIR / 'mlruns'}\"))\n DIP_MLFLOW_EXPERIMENT: str = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_EXPERIMENT\", \"dip2-assessments\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — OSS Integration\n # ═══════════════════════════════════════════════════════════════\n DIP_OTEL_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_OTEL_ENABLED\", \"0\") == \"1\")\n DIP_MLFLOW_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_ENABLED\", \"0\") == \"1\")\n DIP_LANGGRAPH_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_LANGGRAPH_ENABLED\", \"0\") == \"1\")\n DIP_PREFECT_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_PREFECT_ENABLED\", \"0\") == \"1\")\n DIP_STIX2_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_STIX2_ENABLED\", \"0\") == \"1\")\n DIP_NETWORKX_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_NETWORKX_ENABLED\", \"0\") != \"0\")\n\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — Runtime Behavior\n # ═══════════════════════════════════════════════════════════════\n\n LOG_LEVEL: str = field(default_factory=lambda: os.getenv(\"LOG_LEVEL\", \"INFO\"))\n LLM_TRACE_ENABLED: bool = field(default_factory=lambda: os.getenv(\"LLM_TRACE_ENABLED\", \"0\") == \"1\")\n\n # ═══════════════════════════════════════════════════════════════\n # Database (optional — for production with PostgreSQL)\n # ═══════════════════════════════════════════════════════════════\n DATABASE_URL: str = field(default_factory=lambda: os.getenv(\"DATABASE_URL\", \"\"))\n POSTGRES_USER: str = field(default_factory=lambda: os.getenv(\"POSTGRES_USER\", \"diplomat\"))\n POSTGRES_PASSWORD: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PASSWORD\", \"\"))\n POSTGRES_DB: str = field(default_factory=lambda: os.getenv(\"POSTGRES_DB\", \"diplomat_db\"))\n POSTGRES_PORT: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PORT\", \"5432\"))\n REDIS_URL: str = field(default_factory=lambda: os.getenv(\"REDIS_URL\", \"\"))\n\n @property\n def FORCE_MINISTER_HEURISTIC(self) -> bool:\n \"\"\"Read this runtime switch dynamically so test and benchmark modes work.\"\"\"\n return os.getenv(\"FORCE_MINISTER_HEURISTIC\", \"0\") == \"1\"\n\n def validate_runtime_credentials(self) -> None:\n \"\"\"Fail early when a production LLM deployment has no usable credential.\"\"\"\n if self.FORCE_MINISTER_HEURISTIC or self.LLM_PROVIDER.lower() == \"ollama\":\n return\n\n provider_keys = {\n \"openai\": self.OPENAI_API_KEY,\n \"openrouter\": self.OPENROUTER_API_KEY,\n \"deepseek\": self.DEEPSEEK_API_KEY,\n }\n key = provider_keys.get(self.LLM_PROVIDER.lower())\n if key is None:\n raise ValueError(f\"Unsupported LLM_PROVIDER: {self.LLM_PROVIDER!r}\")\n if not key:\n raise ValueError(\n f\"{self.LLM_PROVIDER.upper()} API key is required when LLM mode is enabled\"\n )\n\n def __repr__(self) -> str:\n \"\"\"Safe repr — masks API keys.\"\"\"\n d = self.__dict__.copy()\n for k in list(d):\n if \"KEY\" in k or \"PASSWORD\" in k or \"SECRET\" in k:\n d[k] = \"***\" if d[k] else \"(not set)\"\n return f\"Config({d})\"\n\n\n# Singleton instance — import this everywhere\nconfig = Config()\n"}, "644bcc02a2c4872d11fccd24bf13ca873e2d1414": {"t": 1785768572.641953, "n": 6992, "h": "1e12fad25685b595", "c": "\"\"\"\nDIP 2.0 — Centralized Configuration\n=====================================\n\nSINGLE SOURCE OF TRUTH for all settings, API keys, and configuration.\nImport from anywhere: `from Config import config`\n\nUsage:\n from dip.Config import config\n model = config.LLM_MODEL # \"gpt-4o\"\n key = config.OPENROUTER_API_KEY # \"sk-...\"\n enabled = config.DIP_OTEL_ENABLED # False\n\nAll values loaded from environment variables with sensible defaults.\nFor local development, copy .env.example to .env and fill in secrets.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Optional\n\n# Load .env file at module level\ntry:\n from dotenv import load_dotenv\n _env_path = Path(__file__).resolve().parent.parent / \".env\"\n if _env_path.exists():\n load_dotenv(_env_path)\nexcept ImportError:\n pass\n\n# Project root\nROOT_DIR = Path(__file__).resolve().parent.parent\nDATA_DIR = ROOT_DIR / \"data\"\n\n\n@dataclass\nclass Config:\n \"\"\"Central configuration loaded from environment variables.\"\"\"\n\n # ═══════════════════════════════════════════════════════════════\n # LLM Configuration\n # ═══════════════════════════════════════════════════════════════\n LLM_MODEL: str = field(default_factory=lambda: os.getenv(\"LLM_MODEL\", \"gpt-4o\"))\n LLM_PROVIDER: str = field(default_factory=lambda: os.getenv(\"LLM_PROVIDER\", \"openai\"))\n OPENROUTER_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_API_KEY\", \"\"))\n OPENROUTER_MODEL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_MODEL\", \"\"))\n OPENROUTER_URL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_URL\", \"https://openrouter.ai/api/v1/chat/completions\"))\n OPENAI_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENAI_API_KEY\", \"\"))\n DEEPSEEK_API_KEY: str = field(default_factory=lambda: os.getenv(\"DEEPSEEK_API_KEY\", \"\"))\n OLLAMA_BASE_URL: str = field(default_factory=lambda: os.getenv(\"OLLAMA_BASE_URL\", \"http://localhost:11434\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Server Configuration\n # ═══════════════════════════════════════════════════════════════\n API_PORT: int = field(default_factory=lambda: int(os.getenv(\"API_PORT\", \"8000\")))\n API_HOST: str = field(default_factory=lambda: os.getenv(\"API_HOST\", \"0.0.0.0\"))\n ENVIRONMENT: str = field(default_factory=lambda: os.getenv(\"ENVIRONMENT\", \"development\"))\n CORS_ALLOWED_ORIGINS: list = field(default_factory=lambda: os.getenv(\"CORS_ALLOWED_ORIGINS\", \"*\").split(\",\"))\n\n # ═══════════════════════════════════════════════════════════════\n # API Keys — Data Providers\n # ═══════════════════════════════════════════════════════════════\n ACLED_API_KEY: str = field(default_factory=lambda: os.getenv(\"ACLED_API_KEY\", \"\"))\n ACLED_EMAIL: str = field(default_factory=lambda: os.getenv(\"ACLED_EMAIL\", \"\"))\n GDELT_API_KEY: str = field(default_factory=lambda: os.getenv(\"GDELT_API_KEY\", \"\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Storage Paths\n # ═══════════════════════════════════════════════════════════════\n DIP_JOB_STORE: str = field(default_factory=lambda: os.getenv(\"DIP_JOB_STORE\", str(DATA_DIR / \"jobs.json\")))\n CHECKPOINT_DIR: str = field(default_factory=lambda: os.getenv(\"CHECKPOINT_DIR\", str(DATA_DIR / \"checkpoints\")))\n CHROMA_DATA_DIR: str = field(default_factory=lambda: os.getenv(\"CHROMA_DATA_DIR\", str(DATA_DIR / \"chroma\")))\n MLFLOW_TRACKING_URI: str = field(default_factory=lambda: os.getenv(\"MLFLOW_TRACKING_URI\", f\"file:{DATA_DIR / 'mlruns'}\"))\n DIP_MLFLOW_EXPERIMENT: str = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_EXPERIMENT\", \"dip2-assessments\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — OSS Integration\n # ═══════════════════════════════════════════════════════════════\n DIP_OTEL_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_OTEL_ENABLED\", \"0\") == \"1\")\n DIP_MLFLOW_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_ENABLED\", \"0\") == \"1\")\n DIP_LANGGRAPH_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_LANGGRAPH_ENABLED\", \"0\") == \"1\")\n DIP_PREFECT_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_PREFECT_ENABLED\", \"0\") == \"1\")\n DIP_STIX2_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_STIX2_ENABLED\", \"0\") == \"1\")\n DIP_NETWORKX_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_NETWORKX_ENABLED\", \"0\") != \"0\")\n\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — Runtime Behavior\n # ═══════════════════════════════════════════════════════════════\n\n LOG_LEVEL: str = field(default_factory=lambda: os.getenv(\"LOG_LEVEL\", \"INFO\"))\n LLM_TRACE_ENABLED: bool = field(default_factory=lambda: os.getenv(\"LLM_TRACE_ENABLED\", \"0\") == \"1\")\n\n # ═══════════════════════════════════════════════════════════════\n # Database (optional — for production with PostgreSQL)\n # ═══════════════════════════════════════════════════════════════\n DATABASE_URL: str = field(default_factory=lambda: os.getenv(\"DATABASE_URL\", \"\"))\n POSTGRES_USER: str = field(default_factory=lambda: os.getenv(\"POSTGRES_USER\", \"diplomat\"))\n POSTGRES_PASSWORD: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PASSWORD\", \"\"))\n POSTGRES_DB: str = field(default_factory=lambda: os.getenv(\"POSTGRES_DB\", \"diplomat_db\"))\n POSTGRES_PORT: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PORT\", \"5432\"))\n REDIS_URL: str = field(default_factory=lambda: os.getenv(\"REDIS_URL\", \"\"))\n\n @property\n def FORCE_MINISTER_HEURISTIC(self) -> bool:\n \"\"\"Read this runtime switch dynamically so test and benchmark modes work.\"\"\"\n return os.getenv(\"FORCE_MINISTER_HEURISTIC\", \"0\") == \"1\"\n\n def validate_runtime_credentials(self) -> None:\n \"\"\"Fail early when a production LLM deployment has no usable credential.\"\"\"\n if self.FORCE_MINISTER_HEURISTIC or self.LLM_PROVIDER.lower() == \"ollama\":\n return\n\n provider_keys = {\n \"openai\": self.OPENAI_API_KEY,\n \"openrouter\": self.OPENROUTER_API_KEY,\n \"deepseek\": self.DEEPSEEK_API_KEY,\n }\n key = provider_keys.get(self.LLM_PROVIDER.lower())\n if key is None:\n raise ValueError(f\"Unsupported LLM_PROVIDER: {self.LLM_PROVIDER!r}\")\n if not key:\n raise ValueError(\n f\"{self.LLM_PROVIDER.upper()} API key is required when LLM mode is enabled\"\n )\n\n def __repr__(self) -> str:\n \"\"\"Safe repr — masks API keys.\"\"\"\n d = self.__dict__.copy()\n for k in list(d):\n if \"KEY\" in k or \"PASSWORD\" in k or \"SECRET\" in k:\n d[k] = \"***\" if d[k] else \"(not set)\"\n return f\"Config({d})\"\n\n\n# Singleton instance — import this everywhere\nconfig = Config()\n"}, "6c06329e45e7db306064aa6bd0d188c9f10d9163": {"t": 1785768575.950864, "n": 7101, "h": "57b3e2c082a92a36", "c": "\"\"\"\nDIP 2.0 — Centralized Configuration\n=====================================\n\nSINGLE SOURCE OF TRUTH for all settings, API keys, and configuration.\nImport from anywhere: `from Config import config`\n\nUsage:\n from dip.Config import config\n model = config.LLM_MODEL # \"gpt-4o\"\n key = config.OPENROUTER_API_KEY # \"sk-...\"\n enabled = config.DIP_OTEL_ENABLED # False\n\nAll values loaded from environment variables with sensible defaults.\nFor local development, copy .env.example to .env and fill in secrets.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Optional\n\n# Load .env file at module level\ntry:\n from dotenv import load_dotenv\n _env_path = Path(__file__).resolve().parent.parent / \".env\"\n if _env_path.exists():\n load_dotenv(_env_path)\nexcept ImportError:\n pass\n\n# Project root\nROOT_DIR = Path(__file__).resolve().parent.parent\nDATA_DIR = ROOT_DIR / \"data\"\n\n\n@dataclass\nclass Config:\n \"\"\"Central configuration loaded from environment variables.\"\"\"\n\n # ═══════════════════════════════════════════════════════════════\n # LLM Configuration\n # ═══════════════════════════════════════════════════════════════\n LLM_MODEL: str = field(default_factory=lambda: os.getenv(\"LLM_MODEL\", \"gpt-4o\"))\n LLM_PROVIDER: str = field(default_factory=lambda: os.getenv(\"LLM_PROVIDER\", \"openai\"))\n OPENROUTER_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_API_KEY\", \"\"))\n OPENROUTER_MODEL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_MODEL\", \"\"))\n OPENROUTER_URL: str = field(default_factory=lambda: os.getenv(\"OPENROUTER_URL\", \"https://openrouter.ai/api/v1/chat/completions\"))\n OPENAI_API_KEY: str = field(default_factory=lambda: os.getenv(\"OPENAI_API_KEY\", \"\"))\n DEEPSEEK_API_KEY: str = field(default_factory=lambda: os.getenv(\"DEEPSEEK_API_KEY\", \"\"))\n OLLAMA_BASE_URL: str = field(default_factory=lambda: os.getenv(\"OLLAMA_BASE_URL\", \"http://localhost:11434\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Server Configuration\n # ═══════════════════════════════════════════════════════════════\n API_PORT: int = field(default_factory=lambda: int(os.getenv(\"API_PORT\", \"8000\")))\n API_HOST: str = field(default_factory=lambda: os.getenv(\"API_HOST\", \"0.0.0.0\"))\n ENVIRONMENT: str = field(default_factory=lambda: os.getenv(\"ENVIRONMENT\", \"development\"))\n CORS_ALLOWED_ORIGINS: list = field(default_factory=lambda: os.getenv(\"CORS_ALLOWED_ORIGINS\", \"*\").split(\",\"))\n\n # ═══════════════════════════════════════════════════════════════\n # API Keys — Data Providers\n # ═══════════════════════════════════════════════════════════════\n ACLED_API_KEY: str = field(default_factory=lambda: os.getenv(\"ACLED_API_KEY\", \"\"))\n ACLED_EMAIL: str = field(default_factory=lambda: os.getenv(\"ACLED_EMAIL\", \"\"))\n GDELT_API_KEY: str = field(default_factory=lambda: os.getenv(\"GDELT_API_KEY\", \"\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Storage Paths\n # ═══════════════════════════════════════════════════════════════\n DIP_JOB_STORE: str = field(default_factory=lambda: os.getenv(\"DIP_JOB_STORE\", str(DATA_DIR / \"jobs.json\")))\n CHECKPOINT_DIR: str = field(default_factory=lambda: os.getenv(\"CHECKPOINT_DIR\", str(DATA_DIR / \"checkpoints\")))\n CHROMA_DATA_DIR: str = field(default_factory=lambda: os.getenv(\"CHROMA_DATA_DIR\", str(DATA_DIR / \"chroma\")))\n MLFLOW_TRACKING_URI: str = field(default_factory=lambda: os.getenv(\"MLFLOW_TRACKING_URI\", f\"file:{DATA_DIR / 'mlruns'}\"))\n DIP_MLFLOW_EXPERIMENT: str = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_EXPERIMENT\", \"dip2-assessments\"))\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — OSS Integration\n # ═══════════════════════════════════════════════════════════════\n DIP_OTEL_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_OTEL_ENABLED\", \"0\") == \"1\")\n DIP_MLFLOW_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_MLFLOW_ENABLED\", \"0\") == \"1\")\n DIP_LANGGRAPH_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_LANGGRAPH_ENABLED\", \"0\") == \"1\")\n DIP_PREFECT_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_PREFECT_ENABLED\", \"0\") == \"1\")\n DIP_STIX2_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_STIX2_ENABLED\", \"0\") == \"1\")\n DIP_NETWORKX_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_NETWORKX_ENABLED\", \"0\") != \"0\")\n DIP_HAYSTACK_ENABLED: bool = field(default_factory=lambda: os.getenv(\"DIP_HAYSTACK_ENABLED\", \"0\") == \"1\")\n\n # ═══════════════════════════════════════════════════════════════\n # Feature Flags — Runtime Behavior\n # ═══════════════════════════════════════════════════════════════\n\n LOG_LEVEL: str = field(default_factory=lambda: os.getenv(\"LOG_LEVEL\", \"INFO\"))\n LLM_TRACE_ENABLED: bool = field(default_factory=lambda: os.getenv(\"LLM_TRACE_ENABLED\", \"0\") == \"1\")\n\n # ═══════════════════════════════════════════════════════════════\n # Database (optional — for production with PostgreSQL)\n # ═══════════════════════════════════════════════════════════════\n DATABASE_URL: str = field(default_factory=lambda: os.getenv(\"DATABASE_URL\", \"\"))\n POSTGRES_USER: str = field(default_factory=lambda: os.getenv(\"POSTGRES_USER\", \"diplomat\"))\n POSTGRES_PASSWORD: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PASSWORD\", \"\"))\n POSTGRES_DB: str = field(default_factory=lambda: os.getenv(\"POSTGRES_DB\", \"diplomat_db\"))\n POSTGRES_PORT: str = field(default_factory=lambda: os.getenv(\"POSTGRES_PORT\", \"5432\"))\n REDIS_URL: str = field(default_factory=lambda: os.getenv(\"REDIS_URL\", \"\"))\n\n @property\n def FORCE_MINISTER_HEURISTIC(self) -> bool:\n \"\"\"Read this runtime switch dynamically so test and benchmark modes work.\"\"\"\n return os.getenv(\"FORCE_MINISTER_HEURISTIC\", \"0\") == \"1\"\n\n def validate_runtime_credentials(self) -> None:\n \"\"\"Fail early when a production LLM deployment has no usable credential.\"\"\"\n if self.FORCE_MINISTER_HEURISTIC or self.LLM_PROVIDER.lower() == \"ollama\":\n return\n\n provider_keys = {\n \"openai\": self.OPENAI_API_KEY,\n \"openrouter\": self.OPENROUTER_API_KEY,\n \"deepseek\": self.DEEPSEEK_API_KEY,\n }\n key = provider_keys.get(self.LLM_PROVIDER.lower())\n if key is None:\n raise ValueError(f\"Unsupported LLM_PROVIDER: {self.LLM_PROVIDER!r}\")\n if not key:\n raise ValueError(\n f\"{self.LLM_PROVIDER.upper()} API key is required when LLM mode is enabled\"\n )\n\n def __repr__(self) -> str:\n \"\"\"Safe repr — masks API keys.\"\"\"\n d = self.__dict__.copy()\n for k in list(d):\n if \"KEY\" in k or \"PASSWORD\" in k or \"SECRET\" in k:\n d[k] = \"***\" if d[k] else \"(not set)\"\n return f\"Config({d})\"\n\n\n# Singleton instance — import this everywhere\nconfig = Config()\n"}}}}