## Summary
Consolidate chat model management and runtime availability into a single
organization model collection contract. The organization model response
now includes provider availability, unavailable reasons, and
unsupported-provider details, so callers no longer need a separate
availability request.
Depends on #28439.
## Problem
The organization-scoped API exposes two overlapping representations of
the same chat models:
```text
GET /api/experimental/organizations/{organization}/chats/models
GET /api/experimental/organizations/{organization}/chats/models/available
```
The collection route returns organization-owned model configurations and
redacted provider descriptors. The availability route returns a second
catalog-oriented response with provider availability and synthetic
catalog entries. Callers must fetch, reconcile, and cache both responses
even though they describe the same effective set of models.
This creates duplicated server logic and separate SDK, OpenAPI, and
frontend types. It can also produce inconsistent client state when one
request succeeds while the other fails or when the two responses are
refreshed at different times.
## Fix
Return all model-management and runtime-availability information from
the organization model collection route:
```text
GET /api/experimental/organizations/{organization}/chats/models
```
`OrganizationChatModelsResponse` continues to return the caller-readable
organization model configurations and redacted provider descriptors.
Provider descriptors now also include:
- `available`
- `unavailable_reason`
The response additionally includes `unsupported_providers`, allowing
clients to explain configurations that the Agents harness cannot use.
Frontend model settings, agent creation, existing chat recovery, and
model override surfaces now consume this single collection query. This
keeps model ownership, caller visibility, provider availability, and
unsupported-provider guidance in one cache entry and one authorization
path.
The default-organization compatibility route remains available:
```text
GET /api/experimental/chats/models
```
It now returns the same consolidated `OrganizationChatModelsResponse`
contract instead of the former availability response.
## Breaking change
This removes the separate organization model availability endpoint:
```text
GET /api/experimental/organizations/{organization}/chats/models/available
```
Clients using that endpoint must migrate to:
```text
GET /api/experimental/organizations/{organization}/chats/models
```
This PR also removes the corresponding public experimental client and
schema surface:
- `ExperimentalClient.ChatModelAvailability`
- `ChatModelAvailabilityResponse`
- `ChatModelProvider`
- `ChatModelCatalogEntry`
- The generated OpenAPI schema and frontend API/query types for the
availability endpoint
Callers must use `ExperimentalClient.ChatModels` and
`OrganizationChatModelsResponse` instead. Availability is now reported
on each `ChatModelProviderDescriptor`, and unsupported providers are
returned in `OrganizationChatModelsResponse.UnsupportedProviders`.
The default-organization compatibility route retains its URL, but its
response schema changes from `ChatModelAvailabilityResponse` to
`OrganizationChatModelsResponse`. Direct HTTP clients and generated
clients that decode the previous response type must be updated even if
they do not use the removed organization-scoped `/available` route.