apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: model-catalog namespace: agentgateway-system spec: parentRefs: - name: agentgateway-proxy rules: - matches: - method: GET path: type: Exact value: /v1/models backendRefs: - name: model-catalog port: 8080 --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: models namespace: agentgateway-system spec: parentRefs: - name: agentgateway-proxy rules: - matches: - method: POST path: type: Exact value: /v1/chat/completions headers: - name: x-model type: RegularExpression value: ^vertex_ai_flex/.+ filters: - type: RequestHeaderModifier requestHeaderModifier: set: - name: X-Vertex-AI-LLM-Request-Type value: shared - name: X-Vertex-AI-LLM-Shared-Request-Type value: flex backendRefs: - group: agentgateway.dev kind: AgentgatewayBackend name: vertex-ai - matches: - method: POST path: type: PathPrefix value: /v1 headers: - name: x-model type: RegularExpression value: ^vertex_ai/.+ backendRefs: - group: agentgateway.dev kind: AgentgatewayBackend name: vertex-ai - matches: - method: POST path: type: PathPrefix value: /v1 headers: - name: x-model type: RegularExpression value: ^novita/.+ backendRefs: - group: agentgateway.dev kind: AgentgatewayBackend name: novita --- apiVersion: agentgateway.dev/v1alpha1 kind: AgentgatewayPolicy metadata: name: extract-model namespace: agentgateway-system spec: targetRefs: - group: gateway.networking.k8s.io kind: Gateway name: agentgateway-proxy traffic: phase: PreRouting transformation: conditional: - condition: request.method == "POST" policy: request: set: - name: x-model value: json(request.body).model --- apiVersion: agentgateway.dev/v1alpha1 kind: AgentgatewayPolicy metadata: name: strip-provider-prefix namespace: agentgateway-system spec: targetRefs: - group: gateway.networking.k8s.io kind: HTTPRoute name: models backend: ai: transformations: - field: model expression: llmRequest.model.stripPrefix("vertex_ai_flex/").stripPrefix("vertex_ai/").stripPrefix("novita/")