{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "OpenClaw AI Router Configuration",
  "version": "1.4.0",
  "description": "AI 模型路由與備援設定 (ADR-006 + ADR-036 Nemotron + D1 ADR-067 五大應用 2026-04-11 + ADR-110 GCP 三層容災 2026-05-04)",
  "updated_at": "2026-05-04",

  "default_provider": "ollama",
  "fallback_order": ["ollama", "gemini", "claude"],
  "tool_calling_fallback_order": ["nvidia", "gemini", "claude"],

  "providers": {
    "ollama": {
      "name": "Ollama (GCP-A Primary)",
      "enabled": true,
      "priority": 1,
      "endpoint": "http://34.143.170.20:11434",
      "api_path": "/api/generate",
      "models": {
        "default": "qwen2.5:7b-instruct",
        "rca": "qwen3:14b",
        "summary": "gemma3:4b",
        "drift_summary": "qwen3:14b",
        "drift_intent": "qwen2.5:7b-instruct",
        "log_anomaly": "deepseek-r1:14b",
        "nemoclaw": "deepseek-r1:14b",
        "playbook_draft": "qwen3:14b",
        "code_review": "qwen2.5-coder:7b",
        "embedding": "bge-m3:latest",
        "rag_generate": "qwen3:14b",
        "image_analysis": "minicpm-v:latest",
        "trust_scoring": "hermes3:latest",
        "alert_triage": "hermes3:latest",
        "intent_classify": "qwen2.5:7b-instruct",
        "governance": "deepseek-r1:14b"
      },
      "options": {
        "temperature": 0.1,
        "top_p": 0.9,
        "num_predict": 1024,
        "format": "json"
      },
      "timeout_seconds": 120,
      "cost": {
        "per_1k_tokens": 0,
        "currency": "USD"
      },
      "health_check": {
        "endpoint": "/api/tags",
        "interval_seconds": 60
      }
    },

    "gemini": {
      "name": "Google Gemini",
      "enabled": true,
      "priority": 2,
      "endpoint": "https://generativelanguage.googleapis.com/v1beta",
      "api_path": "/models/{model}:generateContent",
      "models": {
        "default": "gemini-2.0-flash",
        "rca": "gemini-2.0-flash",
        "summary": "gemini-2.0-flash"
      },
      "options": {
        "temperature": 0.1,
        "maxOutputTokens": 2048,
        "responseMimeType": "application/json"
      },
      "timeout_seconds": 30,
      "cost": {
        "per_1k_tokens": 0.001,
        "currency": "USD"
      },
      "auth": {
        "type": "api_key",
        "env_var": "GEMINI_API_KEY",
        "query_param": "key"
      },
      "rate_limits": {
        "daily_tokens": 70000,
        "requests_per_minute": 60
      }
    },

    "claude": {
      "name": "Anthropic Claude",
      "enabled": true,
      "priority": 3,
      "endpoint": "https://api.anthropic.com/v1",
      "api_path": "/messages",
      "models": {
        "default": "claude-haiku-4-5-20251001",
        "rca": "claude-haiku-4-5-20251001",
        "summary": "claude-haiku-4-5-20251001"
      },
      "options": {
        "max_tokens": 2048
      },
      "timeout_seconds": 30,
      "cost": {
        "per_1k_tokens": 0.005,
        "currency": "USD"
      },
      "auth": {
        "type": "header",
        "env_var": "CLAUDE_API_KEY",
        "header_name": "x-api-key"
      },
      "rate_limits": {
        "daily_tokens": 35000,
        "requests_per_minute": 50
      },
      "features": {
        "tool_use": true,
        "structured_output": true
      }
    },

    "nvidia": {
      "name": "NVIDIA Nemotron (ADR-036)",
      "enabled": true,
      "priority": 4,
      "endpoint": "https://integrate.api.nvidia.com/v1",
      "api_path": "/chat/completions",
      "models": {
        "default": "nvidia/nemotron-mini-4b-instruct",
        "tool_calling": "nvidia/nemotron-mini-4b-instruct",
        "rca": "nvidia/nemotron-mini-4b-instruct"
      },
      "options": {
        "temperature": 0.0,
        "max_tokens": 1024
      },
      "timeout_seconds": 30,
      "cost": {
        "per_1k_tokens": 0,
        "currency": "USD",
        "notes": "Free tier (2026-03-29) - timeout 30s，失敗後轉 Gemini"
      },
      "auth": {
        "type": "header",
        "env_var": "NVIDIA_API_KEY",
        "header_name": "Authorization",
        "header_prefix": "Bearer "
      },
      "rate_limits": {
        "daily_tokens": 50000,
        "requests_per_minute": 5
      },
      "features": {
        "tool_use": true,
        "structured_output": true,
        "tool_calling_accuracy": 0.833
      },
      "use_for": ["tool_calling"]
    }
  },

  "adr067_ollama_applications": {
    "description": "ADR-067 五大 Ollama 本地 AI 應用 (Phase 30-34)，2026-05-04 ogt + Claude Sonnet 4.6: endpoint 升級至 GCP-A Primary",
    "endpoint": "http://34.143.170.20:11434",
    "applications": {
      "drift_summary": {
        "phase": 30,
        "model": "qwen3:14b",
        "timeout_seconds": 90,
        "purpose": "Config Drift 報告中文摘要"
      },
      "log_anomaly_summary": {
        "phase": 31,
        "model": "deepseek-r1:14b",
        "timeout_seconds": 120,
        "purpose": "K8s log 異常摘要，告警後觸發"
      },
      "pr_code_review": {
        "phase": 32,
        "model": "qwen2.5-coder:7b",
        "timeout_seconds": 120,
        "purpose": "Gitea PR 自動審查"
      },
      "rag_embed": {
        "phase": 33,
        "model": "bge-m3:latest",
        "dimensions": 1024,
        "timeout_seconds": 30,
        "purpose": "RAG 知識庫向量化，pgvector 儲存（bge-m3 多語言 1024 維）"
      },
      "rag_generate": {
        "phase": 33,
        "model": "qwen3:14b",
        "timeout_seconds": 60,
        "purpose": "RAG 查詢回答生成，top_k=5"
      },
      "image_analysis": {
        "phase": 34,
        "model": "minicpm-v:latest",
        "timeout_seconds": 60,
        "purpose": "Telegram 圖片分析（minicpm-v 多模態精度優於 llava）"
      }
    }
  },

  "use_cases": {
    "rca_analysis": {
      "description": "Root Cause Analysis for alerts",
      "preferred_provider": "ollama",
      "fallback_enabled": true,
      "required_features": ["json_output"]
    },
    "log_summary": {
      "description": "Summarize K8s logs for context gathering",
      "preferred_provider": "ollama",
      "fallback_enabled": true,
      "max_input_tokens": 4096
    },
    "telegram_compose": {
      "description": "Compose compressed Telegram messages",
      "preferred_provider": "ollama",
      "fallback_enabled": false,
      "max_output_tokens": 500
    },
    "tool_calling": {
      "description": "K8s Tool Calling operations (ADR-036)",
      "preferred_provider": "nvidia",
      "fallback_enabled": true,
      "fallback_order": ["gemini", "claude"],
      "required_features": ["tool_use"],
      "notes": "Nemotron 83.3% accuracy for K8s operations"
    }
  },

  "monitoring": {
    "enabled": true,
    "metrics": {
      "track_latency": true,
      "track_tokens": true,
      "track_cost": true,
      "track_fallbacks": true
    },
    "alerts": {
      "daily_cost_threshold_usd": 5,
      "monthly_cost_threshold_usd": 10,
      "fallback_rate_threshold_percent": 20
    }
  },

  "circuit_breaker": {
    "enabled": true,
    "failure_threshold": 5,
    "recovery_timeout_seconds": 60,
    "half_open_requests": 3
  }
}
