Skip to content

Commit 898b76d

Browse files
committed
glm
1 parent 4757271 commit 898b76d

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

codex-rs/model-provider-info/src/lib.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,6 @@ impl ModelProviderInfo {
440440
}
441441
}
442442

443-
444443
pub fn is_openai(&self) -> bool {
445444
self.name == OPENAI_PROVIDER_NAME
446445
}
@@ -449,7 +448,9 @@ impl ModelProviderInfo {
449448
if self.name == GEMINI_PROVIDER_NAME {
450449
slug.strip_prefix("google/").unwrap_or(slug)
451450
} else if self.name == ZHIPU_PROVIDER_NAME {
452-
slug.strip_prefix("zhipu/").unwrap_or(slug)
451+
slug.strip_prefix("zhipu/")
452+
.or_else(|| slug.strip_prefix("z-ai/"))
453+
.unwrap_or(slug)
453454
} else {
454455
slug
455456
}
@@ -459,12 +460,10 @@ impl ModelProviderInfo {
459460
self.name == AMAZON_BEDROCK_PROVIDER_NAME
460461
}
461462

462-
463463
pub fn supports_remote_compaction(&self) -> bool {
464464
self.is_openai() || is_azure_responses_provider(&self.name, self.base_url.as_deref())
465465
}
466466

467-
468467
pub fn has_command_auth(&self) -> bool {
469468
self.auth.is_some()
470469
}
@@ -515,7 +514,15 @@ fn non_empty_env_var(name: &str) -> bool {
515514

516515
pub fn infer_builtin_provider_id_for_model(model: &str) -> Option<&'static str> {
517516
let lower = model.to_lowercase();
518-
if lower.starts_with("glm-") && non_empty_env_var("ZAI_API_KEY") {
517+
if (lower.starts_with("glm-")
518+
|| lower
519+
.strip_prefix("z-ai/")
520+
.is_some_and(|slug| slug.starts_with("glm-"))
521+
|| lower
522+
.strip_prefix("zhipu/")
523+
.is_some_and(|slug| slug.starts_with("glm-")))
524+
&& non_empty_env_var("ZAI_API_KEY")
525+
{
519526
return Some(ZHIPU_PROVIDER_ID);
520527
}
521528
match model.split_once('/') {
@@ -560,7 +567,6 @@ pub fn merge_configured_model_providers(
560567
Ok(model_providers)
561568
}
562569

563-
564570
pub fn create_oss_provider(default_provider_port: u16, wire_api: WireApi) -> ModelProviderInfo {
565571
// These CODEX_OSS_ environment variables are experimental: we may
566572
// switch to reading values from config.toml instead.

codex-rs/model-provider-info/src/model_provider_info_tests.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,14 @@ fn gemini_provider_normalizes_google_prefix() {
259259
);
260260
}
261261

262+
#[test]
263+
fn zhipu_provider_normalizes_zai_prefix() {
264+
let provider = ModelProviderInfo::create_zhipu_provider();
265+
assert_eq!(provider.effective_model_name("z-ai/glm-5.1"), "glm-5.1");
266+
assert_eq!(provider.effective_model_name("zhipu/glm-5.1"), "glm-5.1");
267+
assert_eq!(provider.effective_model_name("glm-5.1"), "glm-5.1");
268+
}
269+
262270
#[test]
263271
fn infer_builtin_provider_prefers_env_backed_routes() {
264272
let gemini_remove_guard = EnvVarGuard::remove("GEMINI_API_KEY");
@@ -268,15 +276,13 @@ fn infer_builtin_provider_prefers_env_backed_routes() {
268276
None
269277
);
270278

271-
drop(gemini_remove_guard);
272279
let gemini_set_guard = EnvVarGuard::set("GEMINI_API_KEY", "gemini-key");
273280
assert_eq!(
274281
infer_builtin_provider_id_for_model("google/gemini-3.1-pro-preview"),
275282
Some(GEMINI_PROVIDER_ID)
276283
);
277284

278285
drop(gemini_set_guard);
279-
drop(openrouter_remove_guard);
280286
let _openrouter_set_guard = EnvVarGuard::set("OPENROUTER_API_KEY", "openrouter-key");
281287
assert_eq!(
282288
infer_builtin_provider_id_for_model("google/gemini-3.1-pro-preview"),
@@ -290,6 +296,16 @@ fn infer_builtin_provider_prefers_env_backed_routes() {
290296
infer_builtin_provider_id_for_model("z-ai/glm-5"),
291297
Some(OPENROUTER_PROVIDER_ID)
292298
);
299+
300+
let _zai_set_guard = EnvVarGuard::set("ZAI_API_KEY", "zai-key");
301+
assert_eq!(
302+
infer_builtin_provider_id_for_model("glm-5.1"),
303+
Some(ZHIPU_PROVIDER_ID)
304+
);
305+
assert_eq!(
306+
infer_builtin_provider_id_for_model("z-ai/glm-5.1"),
307+
Some(ZHIPU_PROVIDER_ID)
308+
);
293309
}
294310

295311
#[test]

0 commit comments

Comments
 (0)