Add default model provider selection to the app server (#61397)

## What changed

Add `modelProvider/default/set` with a `providerId` parameter to persist the default provider for new threads and model lists. Return `ConfigWriteResponse`, reject unconfigured providers, and respect managed requirements, read-only configuration, and CLI overrides.

Reload the model catalog on its next read when the default changes effectively. Resolve explicit `model/list` provider selections against the current catalog configuration so clients can continue listing models for a retained provider after switching defaults.

Update the protocol schemas, generated TypeScript and Python types, and app-server documentation.

## Testing

Add coverage for switching defaults and switching back, rejecting unknown providers without changing the catalog, retaining explicit provider selections, reporting CLI overrides, and rejecting writes blocked by configuration restrictions.

GitOrigin-RevId: 3615835f58045d33a21b3c57d47932d6d1e3fb12
This commit is contained in:
Abhinav
2026-11-13 23:04:26 +00:00
committed by copyberry
parent f626b8fde9
commit c5ef97aa89
22 changed files with 373 additions and 14 deletions
@@ -2977,6 +2977,19 @@ class ModelProviderCapabilitiesReadResponse(BaseModel):
web_search: Annotated[bool, Field(alias="webSearch")]
class ModelProviderDefaultSetParams(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
)
provider_id: Annotated[
str,
Field(
alias="providerId",
description="Configured provider to use by default for new threads and unscoped model lists.",
),
]
class ModelProviderMismatchModelProviderError(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
@@ -8171,6 +8184,17 @@ class ModelProviderListRequest(BaseModel):
params: ModelProviderListParams
class ModelProviderDefaultSetRequest(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
)
id: RequestId
method: Annotated[
Literal["modelProvider/default/set"], Field(title="ModelProvider/default/setRequestMethod")
]
params: ModelProviderDefaultSetParams
class ModelProviderCapabilitiesReadRequest(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
@@ -13922,6 +13946,7 @@ class ClientRequest(
| AccountGatewayOAuthCancelRequest
| ModelProviderListRequest
| ModelProviderConfigWriteRequest
| ModelProviderDefaultSetRequest
| ModelProviderCapabilitiesReadRequest
| ExperimentalFeatureListRequest
| PermissionProfileListRequest
@@ -14034,6 +14059,7 @@ class ClientRequest(
| AccountGatewayOAuthCancelRequest
| ModelProviderListRequest
| ModelProviderConfigWriteRequest
| ModelProviderDefaultSetRequest
| ModelProviderCapabilitiesReadRequest
| ExperimentalFeatureListRequest
| PermissionProfileListRequest