model-provider: route model discovery through HTTP client factory (#31361)

This commit is contained in:
Michael Bolin
2026-07-08 19:32:10 -07:00
committed by GitHub
parent 555aa79d5a
commit 5892c7b69d
36 changed files with 658 additions and 131 deletions

View File

@@ -37,9 +37,15 @@ impl<T: HttpTransport> ModelsClient<T> {
req.url = format!("{}{}client_version={client_version}", req.url, separator);
}
pub fn request_url(provider: &Provider, client_version: &str) -> String {
let mut request = provider.build_request(Method::GET, Self::path());
Self::append_client_version_query(&mut request, client_version);
request.url
}
pub async fn list_models(
&self,
client_version: &str,
request_url: String,
extra_headers: HeaderMap,
) -> Result<(Vec<ModelInfo>, Option<String>), ApiError> {
let resp = self
@@ -49,8 +55,8 @@ impl<T: HttpTransport> ModelsClient<T> {
Self::path(),
extra_headers,
/*body*/ None,
|req| {
Self::append_client_version_query(req, client_version);
move |req| {
req.url.clone_from(&request_url);
},
)
.await?;
@@ -161,14 +167,12 @@ mod tests {
etag: None,
};
let client = ModelsClient::new(
transport.clone(),
provider("https://example.com/api/codex"),
Arc::new(DummyAuth),
);
let provider = provider("https://example.com/api/codex");
let request_url = ModelsClient::<CapturingTransport>::request_url(&provider, "0.99.0");
let client = ModelsClient::new(transport.clone(), provider, Arc::new(DummyAuth));
let (models, _) = client
.list_models("0.99.0", HeaderMap::new())
.list_models(request_url, HeaderMap::new())
.await
.expect("request should succeed");
@@ -225,14 +229,12 @@ mod tests {
etag: None,
};
let client = ModelsClient::new(
transport,
provider("https://example.com/api/codex"),
Arc::new(DummyAuth),
);
let provider = provider("https://example.com/api/codex");
let request_url = ModelsClient::<CapturingTransport>::request_url(&provider, "0.99.0");
let client = ModelsClient::new(transport, provider, Arc::new(DummyAuth));
let (models, _) = client
.list_models("0.99.0", HeaderMap::new())
.list_models(request_url, HeaderMap::new())
.await
.expect("request should succeed");
@@ -252,14 +254,12 @@ mod tests {
etag: Some("\"abc\"".to_string()),
};
let client = ModelsClient::new(
transport,
provider("https://example.com/api/codex"),
Arc::new(DummyAuth),
);
let provider = provider("https://example.com/api/codex");
let request_url = ModelsClient::<CapturingTransport>::request_url(&provider, "0.1.0");
let client = ModelsClient::new(transport, provider, Arc::new(DummyAuth));
let (models, etag) = client
.list_models("0.1.0", HeaderMap::new())
.list_models(request_url, HeaderMap::new())
.await
.expect("request should succeed");

View File

@@ -118,10 +118,12 @@ async fn models_client_hits_models_endpoint() {
.await;
let transport = ReqwestTransport::new(reqwest::Client::new());
let client = ModelsClient::new(transport, provider(&base_url), Arc::new(DummyAuth));
let provider = provider(&base_url);
let request_url = ModelsClient::<ReqwestTransport>::request_url(&provider, "0.1.0");
let client = ModelsClient::new(transport, provider, Arc::new(DummyAuth));
let (models, _) = client
.list_models("0.1.0", HeaderMap::new())
.list_models(request_url, HeaderMap::new())
.await
.expect("models request should succeed");