Skip to content

Commit aebb753

Browse files
committed
Separate protocol from schema | align terminology with Gateway API upstream.
Signed-off-by: usize <mofoster@redhat.com>
1 parent 8e3778f commit aebb753

1 file changed

Lines changed: 34 additions & 4 deletions

File tree

docs/plans/ai-gateway.md

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,27 @@ The core policy — without it, the Gateway has no AI routing.
145145

146146
Providers and models are separate concepts:
147147

148-
- **Providers** define shared connection configuration: endpoint, API
149-
schema, and credentials. A provider is referenced by name from model
150-
backend entries. Each provider generates one Backend, one
151-
AIServiceBackend, and (if credentials are set) one
148+
- **Providers** define shared connection configuration: endpoint,
149+
protocol, API schema, and credentials. A provider is referenced by
150+
name from model backend entries. Each provider generates one
151+
Backend, one AIServiceBackend, and (if credentials are set) one
152152
BackendSecurityPolicy.
153153

154+
Providers distinguish two layers:
155+
156+
| Field | Layer | Examples |
157+
|-------|-------|----------|
158+
| `protocol` | Transport | `HTTP`, `HTTP2`, `gRPC` |
159+
| `schema` | Application format | `OpenAI`, `AWSBedrock`, `MCP`, `A2A` |
160+
161+
The WG AI Gateway's [Proposal 10: Egress Gateways] combines both
162+
into a single `BackendProtocol` enum. We separate them
163+
intentionally — MCP and A2A are application-layer schemas
164+
(JSON-RPC over HTTP/SSE, HTTP respectively), not transport
165+
protocols. A provider's protocol determines the generated
166+
`Backend` transport configuration; its schema determines the
167+
`AIServiceBackend` API translation.
168+
154169
- **Models** define the client-facing routing unit. Each model has a
155170
`name` (the virtual name clients request), a list of `backends`
156171
(provider references with the actual model name and failover
@@ -428,6 +443,9 @@ status:
428443
- type: RoutingActive # AIGatewayRoute + BTP created and accepted
429444
status: "True"
430445
reason: Applied
446+
- type: Programmed # aggregate: all sub-conditions True
447+
status: "False"
448+
reason: ProvidersNotReady
431449
432450
providers:
433451
- name: ollama
@@ -451,6 +469,14 @@ status:
451469
| `GatewayBound` | Target Gateway exists in namespace | `GatewayNotFound` |
452470
| `ProvidersConfigured` | All Backend + AIServiceBackend + BSP resources created | `PartialFailure`, `ApplyFailed`, `CredentialSecretNotFound` |
453471
| `RoutingActive` | AIGatewayRoute + BackendTrafficPolicy created and accepted | `ApplyFailed` |
472+
| `Programmed` | All of the above are True | Mirrors the failing sub-condition's reason |
473+
474+
`Programmed` is an aggregate signal per [GEP-713][]. It goes True
475+
when `Accepted`, `GatewayBound`, `ProvidersConfigured`, and
476+
`RoutingActive` are all True, giving a single condition suitable for
477+
`kubectl wait --for=condition=Programmed`.
478+
479+
[GEP-713]: https://gateway-api.sigs.k8s.io/geps/gep-713/
454480

455481
The `status.providers[]` list mirrors `spec.providers[]` and reports
456482
per-provider readiness. When `ProvidersConfigured` is False, the
@@ -479,6 +505,9 @@ status:
479505
- type: MTLSActive # CA Secret + server cert + CTP created
480506
status: "True"
481507
reason: Applied
508+
- type: Programmed # aggregate: all sub-conditions True
509+
status: "True"
510+
reason: Programmed
482511
```
483512

484513
| Condition | True when | False reasons |
@@ -487,6 +516,7 @@ status:
487516
| `GatewayBound` | Target Gateway exists in namespace | `GatewayNotFound` |
488517
| `BundleReady` | Trust bundle ConfigMap read and parsed with ≥1 valid cert | `BundleNotFound`, `BundleEmpty`, `BundleParseError` |
489518
| `MTLSActive` | CA Secret, server cert, and ClientTrafficPolicy created | `ApplyFailed`, `CertGenerationFailed` |
519+
| `Programmed` | All of the above are True | Mirrors the failing sub-condition's reason |
490520

491521
`BundleReady` is re-evaluated on every requeue (default 5 minutes),
492522
so it reflects trust bundle rotations. The message includes the

0 commit comments

Comments
 (0)