feat: expose provider capability bounds to app server clients (#20049)

follow up of #19442. The app server now exposes provider-derived bounds
through a new v2 `modelProvider/read` method. The response reports the
configured provider map key as `modelProvider` and returns the effective
capability booleans so clients can align their UI with the same
provider-owned limits used by core.
This commit is contained in:
Celia Chen
2026-04-28 18:36:19 -07:00
committed by GitHub
parent 4c39ad33cb
commit 8c47e36504
17 changed files with 317 additions and 1 deletions

View File

@@ -642,6 +642,11 @@ client_request_definitions! {
serialization: None,
response: v2::ModelListResponse,
},
ModelProviderCapabilitiesRead => "modelProvider/capabilities/read" {
params: v2::ModelProviderCapabilitiesReadParams,
serialization: None,
response: v2::ModelProviderCapabilitiesReadResponse,
},
ExperimentalFeatureList => "experimentalFeature/list" {
params: v2::ExperimentalFeatureListParams,
serialization: global("config"),
@@ -2243,6 +2248,23 @@ mod tests {
Ok(())
}
#[test]
fn serialize_model_provider_capabilities_read() -> Result<()> {
let request = ClientRequest::ModelProviderCapabilitiesRead {
request_id: RequestId::Integer(7),
params: v2::ModelProviderCapabilitiesReadParams {},
};
assert_eq!(
json!({
"method": "modelProvider/capabilities/read",
"id": 7,
"params": {}
}),
serde_json::to_value(&request)?,
);
Ok(())
}
#[test]
fn serialize_list_collaboration_modes() -> Result<()> {
let request = ClientRequest::CollaborationModeList {

View File

@@ -2355,6 +2355,20 @@ pub struct GetAccountResponse {
pub requires_openai_auth: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Default, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ModelProviderCapabilitiesReadParams {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct ModelProviderCapabilitiesReadResponse {
pub namespace_tools: bool,
pub image_generation: bool,
pub web_search: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]