Added
llmRouting(defaultenabled: false) in both charts: agent inference traffic through the installation’s agentgateway, so the data plane emits GenAI metrics — tokens by type, cost in USD, request duration, time to first token — for every model call. An installation that sets nothing renders byte-identically (the golden check pins this). When on, the connectivity chart renders anllmlistener on the data-plane Gateway (llmRouting.listener, default port 8081), anAgentgatewayBackendfor the provider, anHTTPRoutepinned to that listener bysectionNameand matching the provider path prefixes (llmRouting.pathPrefixes, default/v1) so it outranks theagent-platform-mcpscatch-all route, which attaches to every listener of the same Gateway and wins an equal match, one Gateway-scopedAgentgatewayPolicycarrying the route-type map (llmRouting.routes) and the agent attribution labels (llmRouting.metricLabels), and the model-price ConfigMap (llmRouting.modelCatalog) that the Gateway’sAgentgatewayParametersreferences. The gateway holds no provider credential: agent pods keep their own key and the clientx-api-keyheader passes through, so reach to the listener grants no spend. Turning the listener on routes nothing by itself — the cutover is a second value,kagent.providers.anthropic.config.baseUrl, and rollback is its removal. The render fails whenllmRouting.enabledis true without the agentgateway data plane, when the listener port collides with an existing one, or whenllmRouting.pathPrefixesis empty or contains a bare/. See the connectivity chart README for the rollout.- A
PodMonitorfor the agentgateway data plane, gated on the agentgateway component and the shared metrics helper — not onllmRouting.enabled, so the MCP path is scraped too and the monitor exists before an LLM cutover. The data plane serves Prometheus text on pod port 15020; the controller-provisioned Service exposes listener ports only, so a ServiceMonitor would match nothing. It carries the same tenant label as the kagent ServiceMonitor, which alloy-metrics discovers monitors by. kagent.modelConfigs[].baseUrl(optional): sends a chart-owned ModelConfig’s traffic through the LLM listener. Without it an extra ModelConfig calls the provider directly and its usage is unmetered.