Skip to content

provider: seed GLM-5.3-Flash on the BigModel Responses preset - #4244

Merged
lidge-jun merged 2 commits into
devfrom
codex/260911-r2-catalog-pool
Sep 11, 2026
Merged

provider: seed GLM-5.3-Flash on the BigModel Responses preset#4244
lidge-jun merged 2 commits into
devfrom
codex/260911-r2-catalog-pool

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Summary

The zhipu-bigmodel-responses preset shipped a two-model roster (glm-5.3, glm-5-turbo) read off the models.json sample on BigModel's Codex page. That sample is a starter catalog, not the endpoint's roster, and reading it as the latter left GLM-5.3-Flash off a subscription that sells it. An operator on the Responses preset could not pick Flash; the same operator on the Chat preset could.

#4201 was deliberately left half-open in the previous round: the quota half landed, and Flash was deferred because that lane had no endpoint-specific evidence and the issue makes Flash conditional on it ("should offer glm-5.3-flash if the domestic Responses endpoint supports it"). That evidence now exists. Three upstream pages, all checked 2026-09-11:

  • coding-plan/latest-model.md pins Codex to https://open.bigmodel.cn/api/v1 — this preset's exact baseUrl — and states GLM Coding Plan supports GLM-5.3 and GLM-5.3-Flash for every tier (Max, Pro, Lite), then treats glm-5.3-flash as an already-callable id in that tool.
  • coding-plan/overview.md states that calls to GLM-5-Turbo are auto-switched to GLM-5.3-Flash. The preset already lists glm-5-turbo, so it was already reaching Flash on this endpoint under another name. That is the strongest available statement that the endpoint serves the model.
  • guide/models/vlm/glm-5.3-flash.md gives native multimodal input, a 1M context window, and text parameters "consistent with GLM-5.3".

Flash is seeded into the roster and all five sibling per-model maps.

Context window tracks the 5.3 sibling on this row (1_048_576) rather than the Chat row's 1_000_000. Both models are documented as "1M", and this preset already expresses that family's 1M the way BigModel's own Codex declaration does. Splitting them would leave one preset claiming two different sizes for one documented window.

Modalities are ["text", "image"]. Flash is the only row here that can actually see an image; its siblings are text-only upstream and get image back from the vision sidecar at catalog-build time. Declaring Flash text-only would push a native VLM's pictures through a describe-it-first detour and hand the model prose about an image it could have read — the defect ZAI_GLM_5X_SIDECAR_VISION_MODELS already exists to prevent on the Chat rows.

The oracle moves in the same commit. tests/providers/provider-registry-parity.test.ts previously locked models to two entries and asserted glm-5.3-flash was absent from the export. A test asserting the old roster is not evidence for the new one, it is the thing being changed. It now pins the three-model contract, Flash's exported window, ladder, default effort and native image modality, and still asserts the part no document supports: there is no HTTP /models contract here, so liveModels: false and apiKeyValidation: "unknown" must not drift.

Before / after for an operator on this preset:

before after
model picker glm-5.3, glm-5-turbo glm-5.3, glm-5.3-flash, glm-5-turbo
Flash access only implicitly, via the Turbo id upstream redirects explicit, under its own slug
Flash images n/a native text+image, no sidecar detour

Verification

Rebased onto dev at 18e553a52 and re-verified locally before merge:

  • bun run typecheck — exit 0.
  • bun test tests/providers/provider-registry-parity.test.ts — 47 pass, 0 fail.
  • bun test tests/responses/openai-responses-passthrough.test.ts tests/providers/zhipu-bigmodel-responses-quota.test.ts — 177 pass, 0 fail.
  • bun test tests/ci-workflows/docs-provider-billing-claims.test.ts — 6 pass, 0 fail (the oracle that reads the provider docs pages this round edits).
  • bun run build:guiNOT RUN; no GUI change in this PR.
  • Hosted CI on the exact rebased head c838ff5f5110cafbf9d2e473cc61be64faef4bef is the product evidence for this change.

Reading-only verification that was done, by two read-only xai/grok-4.6 subagents plus direct fetches of the upstream pages:

  • Roster lock search across the whole tree: tests/providers/provider-registry-parity.test.ts is the only oracle that pins this preset's model list. tests/providers/zhipu-bigmodel-responses-quota.test.ts pins the id, baseUrl and quota probe but never reads models; tests/responses/openai-responses-passthrough.test.ts exercises glm-5-turbo's empty effort ladder and does not assert roster length.
  • The global VLM rule at provider-registry-parity.test.ts:396-404 requires any registry entry listing glm-5.3-flash to keep it out of noVisionModels and, if modalities are declared, to include image. Copying glm-5.3's ["text"] onto Flash would have failed it; the declared ["text","image"] satisfies it.
  • Hint path: isModelVisionSidecarConsumer is true only for text-without-image, so Flash's declared image is not re-appended and the result is ["text","image"], not a duplicate.
  • Export ladder: preserveExactReasoning is false for this provider, so ["low","high","max"] gains the compatibility ultra tier and exports as ["low","high","max","ultra"] with default max. Turbo's empty ladder still exports [] and drops default_reasoning_level.
  • deriveKeyLoginMap copies models by spread, so the updated KEY_LOGIN_PROVIDERS expectation follows from the registry change. No generated, skill-surface or snapshot file derives from this roster.
  • An adversarial review pass over the commit returned PASS with no blocker.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

The docs hand-off from the previous round was taken back and committed here, because the pages do not merely go stale when this lands — they become false. docs-site/src/content/docs/guides/providers.md told the reader that glm-5.3-flash is not seeded "because its exact Responses metadata is not verified", which is the exact claim this PR refutes. Leaving that on dev would have shipped a guide contradicting the roster it documents.

  • docs-site/src/content/docs/reference/configuration/providers.md — the seeds sentence now names all three models.
  • docs-site/src/content/docs/guides/providers.md — the static-roster table gains its Flash row, and the modality paragraph is split rather than reworded: glm-5.3 and glm-5-turbo keep the vision-sidecar explanation, while Flash is described as declaring native text and image input. Describing one mechanism for all three rows is what made the original paragraph wrong.

No translated copy carries this section — git grep finds the preset only in the two English pages — so there is no locale drift to follow up.

Claims that rest only on the upstream pages linked above, and not on anything checkable inside this repository: that the models.json sample is a starter catalog rather than the roster, that the Coding Plan sells Flash on every tier through the Codex endpoint, that Turbo calls are auto-switched to Flash, and Flash's 1M window and native multimodal input. There is still no authenticated /models probe on this endpoint, and this PR does not add one.

Closes #4201

Summary by CodeRabbit

  • New Features
    • Added support for the glm-5.3-flash model through the BigModel Coding Plan Responses endpoint.
    • Supports text and image inputs, an extended context window, configurable reasoning effort, and reasoning summaries.
  • Documentation
    • Updated provider documentation and configuration references to include the model and explain its multimodal capabilities.
  • Tests
    • Updated provider coverage to verify the model’s capabilities and catalog availability.

@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 11, 2026 01:17
@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 913e2c0f-de24-41cc-b024-cab9b2af0250

📥 Commits

Reviewing files that changed from the base of the PR and between 4812304 and c838ff5.

📒 Files selected for processing (2)
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/reference/configuration/providers.md

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The BigModel Responses provider now includes glm-5.3-flash with multimodal input, a 1,048,576-token context window, GLM-5.3 reasoning settings, and reasoning summaries. Tests and documentation cover the updated static roster.

Changes

BigModel Responses Flash support

Layer / File(s) Summary
Register GLM-5.3 Flash capabilities
src/providers/registry.ts
The zhipu-bigmodel-responses entry adds glm-5.3-flash and defines its context window, text/image input modalities, reasoning efforts, default effort, and reasoning-summary support. A comment records the upstream validation and unchanged discovery settings.
Validate roster and catalog parity
tests/providers/provider-registry-parity.test.ts
Parity tests verify the Flash model in the roster, its capability metadata, and exactly one exported catalog entry. The tests preserve static discovery and unknown API-key validation expectations.
Document the static Flash roster
docs-site/src/content/docs/guides/providers.md, docs-site/src/content/docs/reference/configuration/providers.md
The provider guides describe Flash as natively multimodal and document its seeded static roster entry, auto-switch behavior, and continued text-only handling for the other listed models.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~15 minutes

Change: Feature · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to c838f

The catalog addition introduces no confirmed merge-blocking risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Issue #4201 requires Flash catalog support and continuity with the existing domestic Coding Plan quota path. The supplied PR evidence states that quota-reader support for zhipu-bigmodel-responses wa…
Out of Scope Changes check ✅ Passed The changed registry entry and parity test directly implement and verify Issue #4201. The documented docs-site changes listed in the supplied summary describe the new Flash catalog, multimodal behav…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding glm-5.3-flash to the BigModel Responses preset.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/260911-r2-catalog-pool

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 74 / 80

설명

이 PR은 zhipu-bigmodel-responses(국내 BigModel Coding Plan의 Responses 프리셋, https://open.bigmodel.cn/api/v1) 정적 카탈로그에 glm-5.3-flash를 넣습니다. 지금 dev HEAD(babb76449, #4240 L4 client-catalog까지)에서 이 프리셋은 glm-5.3glm-5-turbo만 심어 두고, Flash는 Chat 계열(zai / zhipu-bigmodel / zhipu-bigmodel-coding)에만 있습니다. 그래서 같은 Coding Plan 구독인데 Responses로 바꾸면 Flash를 고를 수 없고, Chat에서는 고를 수 있는 상태가 됩니다.

#4201은 원래 두 갈래였습니다. 쿼터 프로브 쪽은 이미 src/providers/quota.ts에서 zhipu-bigmodel-responses를 넣었고, Flash는 Responses 엔드포인트가 진짜로 받는지 증거가 없어서 미뤄 둔 상태였습니다. 이 PR은 그 미뤄 둔 절반을 닫습니다. 근거는 저장소 밖 BigModel 문서 세 곳입니다. Codex가 이 프리셋과 같은 baseUrl을 쓰고, Coding Plan 전 티어에 GLM-5.3과 GLM-5.3-Flash가 있으며, Turbo 호출이 Flash로 자동 전환된다는 점, Flash가 네이티브 멀티모달·1M 컨텍스트라는 점입니다. 즉 예전 오라클이 읽었던 Codex 페이지의 models.json 샘플은 전체 명단이 아니라 시작용 예시였다는 읽기로 바꿉니다.

코드 변경은 src/providers/registry.ts의 responses 행과 tests/providers/provider-registry-parity.test.ts 오라클뿐입니다. Flash를 models에 넣고, 다섯 sibling 맵(context / modalities / efforts / default effort / reasoning summaries)에 같이 심습니다. 컨텍스트는 Chat 행의 1_000_000이 아니라 이 프리셋에서 5.3이 이미 쓰는 1_048_576을 따라갑니다. 둘 다 문서상 1M이고, 한 프리셋 안에서 같은 가족에 서로 다른 숫자를 쓰지 않으려는 선택입니다. modalities는 ["text", "image"]입니다. Flash만 진짜로 이미지를 보고, 나머지 둘은 업스트림 text-only라서 catalog-build 때 vision sidecar가 image를 붙입니다. Flash를 text-only로 두면 네이티브 VLM 사진을 describe-first 우회로 돌리는 버그가 되고, Chat 쪽에 이미 ZAI_GLM_5X_SIDECAR_VISION_MODELS로 Flash를 sidecar 목록에서 빼 둔 이유와 같습니다.

테스트 오라클도 같이 옮깁니다. 예전 테스트는 공식 Codex 모델만 두 개와 export에 flash 없음을 잠가 두었는데, 그건 새 계약의 증거가 아니라 바꾸려는 옛 계약 자체입니다. 이제는 세 모델, Flash의 window·ladder(low/high/max + 호환 ultra)·default max·native image, 그리고 문서가 여전히 안 주는 부분인 liveModels: false / apiKeyValidation: "unknown"을 잠급니다. 로컬 bun 검증은 돌리지 않았고 hosted CI를 증거로 두었습니다. 지금 체크는 일부 hygiene/label만 통과했고 test/gates 등은 아직 pending입니다.

현재 dev가 최적화하는 L4/L6/L7 서비스·카탈로그·원격 허브 방향과도 잘 맞습니다. types/config 분할에 의해 무효화되는 PR이 아니고, 중복도 아닙니다. #4201을 Closes로 닫는 범위도 Flash 절반 + 이미 들어온 쿼터 절반이 맞습니다.

라인 - 문제

docs-site/src/content/docs/reference/configuration/providers.md:839 - 본문이 아직 seeds glm-5.3 and glm-5-turbo 로 남아 있어, 머지 직후 문서와 카탈로그가 어긋납니다. PR이 docs-site는 이 레인 소유가 아니라서 여기 안 넣었다고 명시했습니다.

docs-site/src/content/docs/guides/providers.md (BigModel Coding Plan over Responses) - Flash가 시드되지 않았다 / Responses 메타데이터가 검증되지 않았다는 문장이 그대로면, 머지 후 가이드가 거짓이 됩니다. 표에 Flash 행과 native text+image도 빠져 있습니다.

src/providers/registry.ts zhipu-bigmodel-responses models - glm-5-turbo를 그대로 두면 피커에 Turbo와 Flash가 같이 보입니다. 업스트림은 Turbo 호출을 Flash로 돌린다고 하므로, 운영자 입장에선 같은 모델이 두 이름으로 보일 수 있습니다. 버그는 아니지만 UX/유지 판단이 필요합니다.

tests/providers/provider-registry-parity.test.ts - 로컬 bun run test / typecheck는 돌리지 않았고 CI pending입니다. 오라클 이동 자체는 맞지만, merge 전 hosted test/gates 초록을 기다리는 게 안전합니다.

src/providers/registry.ts modelContextWindows - Flash를 Chat/coding 행의 1_000_000이 아니라 Responses의 1_048_576에 맞춘 선택은 프리셋 안 일관성에는 맞습니다. 다만 같은 glm-5.3-flash id가 프리셋마다 숫자가 달라져, 나중에 어느 1M이 진짜냐 질문이 다시 날 수 있습니다.

메인테이너의 판단이 필요한 지점

  • docs-site 두 페이지를 이 PR에 묶을지, 머지 직후 별도 docs PR로 바로 이을지.
  • 피커에 glm-5-turbo를 Flash 옆 별칭으로 남길지, 문서/노트만으로 Turbo→Flash 자동 전환을 설명할지로 충분할지.
  • Flash 컨텍스트를 Responses 1_048_576으로 통일할지, Chat 계열 1_000_000으로 맞출지(문서 모두 1M).
  • hosted CI(test/gates 등)가 아직 pending인데, 초록 전에는 merge하지 않을지.

너의 추천

CI(특히 test/gates) 초록 확인 후 merge하세요. #4201 Flash 절반을 닫는 작고 근거가 분명한 catalog 수정이고, dev의 types/config 분할과도 충돌하지 않습니다. docs-site stale 문구는 이 PR에 억지로 넣기보다, merge 직후 짧은 docs follow-up으로 providers.md 두 곳을 고치는 편이 레인 경계에도 맞습니다. Turbo 별칭은 당장 제거하지 말고, 머지 후 운영자 혼동이 보이면 그때 note/가이드로 정리하면 됩니다.

이 댓글은 grok-bot이 작성했습니다

lidge-jun and others added 2 commits September 11, 2026 16:49
The Responses preset shipped a two-model roster read off the models.json sample
on BigModel's Codex page. That sample is a starter catalog, not the endpoint's
roster, and taking it for the latter left Flash off a subscription that sells it.

Three upstream pages disagree with the old reading, all checked 2026-09-11:

- coding-plan/latest-model.md pins Codex to https://open.bigmodel.cn/api/v1 --
  this preset's exact baseUrl -- and states GLM Coding Plan supports GLM-5.3 and
  GLM-5.3-Flash for every tier, then treats glm-5.3-flash as an already-callable
  id in that tool.
- coding-plan/overview.md states GLM-5-Turbo calls are auto-switched to
  GLM-5.3-Flash. The preset already lists glm-5-turbo, so it was already reaching
  Flash on this endpoint under another name.
- guide/models/vlm/glm-5.3-flash.md gives native multimodal input, a 1M window,
  and text parameters "consistent with GLM-5.3".

Flash is seeded into the roster and all five sibling per-model maps. Its context
tracks the 5.3 sibling on this row (1_048_576) rather than the Chat row's
1_000_000: both are documented as "1M", and this preset expresses that family's
1M the way BigModel's own Codex declaration does, so one preset does not claim
two sizes for one documented window.

Flash declares ["text", "image"]. It is the only row here that can actually see
an image; the other two are text-only upstream and get image back from the vision
sidecar at catalog-build time. Declaring Flash text-only would push a native VLM's
pictures through a describe-it-first detour and hand the model prose about an
image it could have read -- the defect ZAI_GLM_5X_SIDECAR_VISION_MODELS already
exists to prevent on the Chat rows.

The oracle moves in this same commit, because a test asserting the old roster is
not evidence for the new one, it is the thing being changed. It previously locked
models to two entries and asserted glm-5.3-flash was absent from the export. It
now pins the three-model contract, Flash's exported window, ladder
(low/high/max plus the compatibility ultra tier), default effort and native image
modality, and keeps asserting the part no document supports: there is still no
HTTP /models contract here, so liveModels and apiKeyValidation must not drift.

Closes #4201
… describes

The preset now seeds glm-5.3-flash, and both pages still said it did not. The guide went further and told the reader why it was excluded, which stops being staleness and becomes a false statement the moment this lands.

The modality note is split rather than rewritten: 5.3 and Turbo still reach images through the vision sidecar, while Flash declares native text and image input, so the page should not describe one mechanism for all three rows.
@lidge-jun
lidge-jun force-pushed the codex/260911-r2-catalog-pool branch from 4812304 to c838ff5 Compare September 11, 2026 07:54
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 11, 2026
@lidge-jun

Copy link
Copy Markdown
Owner Author

Maintainer integration into dev per MAINTAINERS.md — integrating without a second maintainer approval, as the policy permits for dev with admin access. This is integration, not self-approval: no approving review has been submitted on my own work.

Rebased onto dev at 18e553a52. The original commit replayed cleanly (no conflicts); dev had no commit touching src/providers/registry.ts or tests/providers/provider-registry-parity.test.ts since the merge base.

A review pass over the replay flagged that the two docs-site pages this PR had deliberately handed off would not merely go stale on merge — guides/providers.md stated that glm-5.3-flash is not seeded "because its exact Responses metadata is not verified", which is the exact claim this PR refutes. That hand-off was taken back and committed here as c838ff5f5, so dev does not receive a guide contradicting the roster it documents.

Exact-head verification — c838ff5f5110cafbf9d2e473cc61be64faef4bef:

  • Hosted CI green on that head across Linux, Windows and macOS. gh pr checks --watch --fail-fast exited 0; test 1-4/4, gates, macos 1-2/2, keyring x3, npm-global x3, docker smoke, storage policy, api usage, hygiene, enforce-target all pass.
  • Local: bun run typecheck exit 0; bun test tests/providers/provider-registry-parity.test.ts 47 pass / 0 fail; bun test tests/responses/openai-responses-passthrough.test.ts tests/providers/zhipu-bigmodel-responses-quota.test.ts 177 pass / 0 fail; bun test tests/ci-workflows/docs-provider-billing-claims.test.ts 6 pass / 0 fail.

Merging with a merge commit, matching the convention on dev.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant