[codex] fix Zhipu coding plan presets (#3524)

* fix(presets): update Zhipu coding plan endpoints

* fix(model-fetch): probe /models on versioned /vN base URLs

The model-list probe assumed any base URL not ending in /v1 needs /v1/models appended. For providers whose base URL already ends in a version segment like /v4 (Zhipu/Z.AI GLM Coding Plan at .../api/coding/paas/v4), this produced .../v4/v1/models which 404s, so the "Fetch models" button always failed.

Detect a trailing /v{N} version segment and probe {base}/models first, keeping /v1/models as a fallback candidate for non-/v1 versions. Fixes Codex/OpenCode/OpenClaw/Hermes GLM presets and any other vN-style endpoint, with no behavior change for /v1 or non-versioned URLs.

---------

Co-authored-by: Jason <farion1231@gmail.com>
This commit is contained in:
makoMakoGo
2026-06-03 15:53:57 +08:00
committed by GitHub
parent 73073454cd
commit e891f5c876
6 changed files with 86 additions and 28 deletions
+4 -4
View File
@@ -286,10 +286,10 @@ requires_openai_auth = true`,
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"zhipu_glm",
"https://open.bigmodel.cn/api/paas/v4",
"https://open.bigmodel.cn/api/coding/paas/v4",
"glm-5.1",
),
endpointCandidates: ["https://open.bigmodel.cn/api/paas/v4"],
endpointCandidates: ["https://open.bigmodel.cn/api/coding/paas/v4"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
{ model: "glm-5.1", displayName: "GLM-5.1", contextWindow: 200000 },
@@ -312,10 +312,10 @@ requires_openai_auth = true`,
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"zhipu_glm_en",
"https://api.z.ai/api/paas/v4",
"https://api.z.ai/api/coding/paas/v4",
"glm-5.1",
),
endpointCandidates: ["https://api.z.ai/api/paas/v4"],
endpointCandidates: ["https://api.z.ai/api/coding/paas/v4"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
{ model: "glm-5.1", displayName: "GLM-5.1", contextWindow: 200000 },
+2 -2
View File
@@ -393,7 +393,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
apiKeyUrl: "https://www.bigmodel.cn/claude-code?ic=RRVJPB5SII",
settingsConfig: {
name: "zhipu_glm",
base_url: "https://open.bigmodel.cn/api/paas/v4",
base_url: "https://open.bigmodel.cn/api/coding/paas/v4",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "glm-5.1", name: "GLM-5.1" }],
@@ -411,7 +411,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
apiKeyUrl: "https://z.ai/subscribe?ic=8JVLJQFSKB",
settingsConfig: {
name: "zhipu_glm_en",
base_url: "https://api.z.ai/api/paas/v4",
base_url: "https://api.z.ai/api/coding/paas/v4",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "glm-5.1", name: "GLM-5.1" }],
+6 -6
View File
@@ -306,7 +306,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
websiteUrl: "https://open.bigmodel.cn",
apiKeyUrl: "https://www.bigmodel.cn/claude-code?ic=RRVJPB5SII",
settingsConfig: {
baseUrl: "https://open.bigmodel.cn/api/paas/v4",
baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4",
apiKey: "",
api: "openai-completions",
models: [
@@ -324,8 +324,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
templateValues: {
baseUrl: {
label: "Base URL",
placeholder: "https://open.bigmodel.cn/api/paas/v4",
defaultValue: "https://open.bigmodel.cn/api/paas/v4",
placeholder: "https://open.bigmodel.cn/api/coding/paas/v4",
defaultValue: "https://open.bigmodel.cn/api/coding/paas/v4",
editorValue: "",
},
apiKey: {
@@ -344,7 +344,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
websiteUrl: "https://z.ai",
apiKeyUrl: "https://z.ai/subscribe?ic=8JVLJQFSKB",
settingsConfig: {
baseUrl: "https://api.z.ai/v1",
baseUrl: "https://api.z.ai/api/coding/paas/v4",
apiKey: "",
api: "openai-completions",
models: [
@@ -362,8 +362,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
templateValues: {
baseUrl: {
label: "Base URL",
placeholder: "https://api.z.ai/v1",
defaultValue: "https://api.z.ai/v1",
placeholder: "https://api.z.ai/api/coding/paas/v4",
defaultValue: "https://api.z.ai/api/coding/paas/v4",
editorValue: "",
},
apiKey: {
+6 -6
View File
@@ -442,7 +442,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
npm: "@ai-sdk/openai-compatible",
name: "Zhipu GLM",
options: {
baseURL: "https://open.bigmodel.cn/api/paas/v4",
baseURL: "https://open.bigmodel.cn/api/coding/paas/v4",
apiKey: "",
setCacheKey: true,
},
@@ -456,8 +456,8 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
templateValues: {
baseURL: {
label: "Base URL",
placeholder: "https://open.bigmodel.cn/api/paas/v4",
defaultValue: "https://open.bigmodel.cn/api/paas/v4",
placeholder: "https://open.bigmodel.cn/api/coding/paas/v4",
defaultValue: "https://open.bigmodel.cn/api/coding/paas/v4",
editorValue: "",
},
apiKey: {
@@ -475,7 +475,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
npm: "@ai-sdk/openai-compatible",
name: "Zhipu GLM en",
options: {
baseURL: "https://api.z.ai/v1",
baseURL: "https://api.z.ai/api/coding/paas/v4",
apiKey: "",
setCacheKey: true,
},
@@ -489,8 +489,8 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
templateValues: {
baseURL: {
label: "Base URL",
placeholder: "https://api.z.ai/v1",
defaultValue: "https://api.z.ai/v1",
placeholder: "https://api.z.ai/api/coding/paas/v4",
defaultValue: "https://api.z.ai/api/coding/paas/v4",
editorValue: "",
},
apiKey: {