Move GLM-5.3 onto the live API, add Claude Opus 5, align the model lists - #180
Merged
Conversation
GLM-5.3 launched, so its documentation snapshot, registry pricing, and env-gated E2E model move off the pre-launch footing they shipped on in 0.4.2. Adds claude-opus-5 to the registry, names the official GPT-5.6 entry gpt-5.6-sol, and points the playground model dropdown at the E2E model list. Closes #178 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
openai/gpt-5.6-sol carried OpenAI's list price rather than OpenRouter's, and terra and luna carried their :batch rates. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Z.AI throttles the CI key on glm-5.3, failing runs that a retry clears. The pytest job reruns only RateLimitError/429 failures, and the TypeScript suite retries inside the shared modelTest wrapper on the same policy; every other failure, assertion failures included, still fails on the first attempt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…EADME examples All 17 OpenRouter entries on the generic openai-chat client move to openai-responses, verified against the live endpoint one model at a time. SiliconFlow keeps openai-chat, which is the only protocol it serves. README examples follow the registry: Claude Opus 5 and OpenRouter GLM-5.3. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 20, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GLM-5.3's API launched, so the model moves off the pre-launch footing it shipped on in 0.4.2. Bundles two smaller model-list fixes that were in the same files.
GLM-5.3 general availability
llmsdk_docs/glm5_3/was re-snapshotted as raw markdown from docs.z.ai, replacing the hand-written summary taken from the Chinese pre-launch pages at docs.bigmodel.cn. The snapshot grew from 2 pages to 7 —chat-completion.md,concept-param.md,migrate-to-glm-new.md,stream-tool.md, andthinking-mode.mdall changed for 5.3 upstream, so the folder is now self-contained rather than deferring toglm5_2/.stream-tool.mdcame back byte-identical to the 5.2 copy but is included so the snapshot stands alone.No client change was needed. The launched docs confirm the contract the client was already written against: forced thinking,
reasoning_effortrestricted tolow/high/max, defaultmax.concept-param.mdadds one fact the pre-launch snapshot lacked —max_tokensdefaults to 65536 with a 131072 maximum.Pricing is now published, so
glm-5.3gets $1.4 input / $0.26 cached / $4.4 output per MTok — the same rates as 5.2 and 5.1.Claude Opus 5 and
gpt-5.6-solclaude-opus-5was missing from the registry entirely; added for both the official API and OpenRouter at $5 / $0.50 / $25, from Anthropic's pricing page (the $0.50 is the cache-hit rate, matching how the other Claude entries storecached_tokens). Routes through the existingclaude-5client.The official GPT-5.6 entry was the bare
gpt-5.6alias; it now namesgpt-5.6-sol, matching the OpenRouter entry and its terra/luna siblings. Pure rename — OpenAI's published pricing confirms sol is $5 / $0.50 / $30, exactly what the entry already carried. The baregpt-5.6spelling still routes.Playground model list (closes #178)
The dropdown listed models from several generations back (
gpt-5.5,gemini-3.5-flash,claude-opus-4-7,kimi-k2.6,glm-5.1, …). It now lists exactly the 11 official-providerAVAILABLE_MODELSentries, verified programmatically: same model set, and each dropdown entry constructs the same client class the E2E entry does.text-embedding-3-largewas the one model whose id cannot route on its own, so options can now declaredata-client-type, read by a newgetSelectedClientType(). Default model movesgpt-5.5→gpt-5.6-luna, in both the rendered dropdown and the server-side fallback.Verification
Live GLM-5.3 capture under
api_captures/glm5_3/(git-ignored): a streaming tool-call round plus the replay round that re-sends the assistant turn. Round 2 was accepted withcontent+reasoning_content+tool_callsand the tool result — exactly the shape the client emits and replays — and reportedcached_tokens: 128.clear_thinking: falseis still accepted on 5.3, which was the open question from the pre-launch implementation.-k glm-5.3: 8 passed, 6 skipped-t glm-5.3: 14 passedruff,eslint,tsc: green in both languagesZ.AI throttled this key hard during testing (429 code 1302; the capture needed ~15 min of backoff before its first request landed). Four Python E2E tests failed on 429 in one run and all four passed on retry — no assertion failures at any point.
One protocol mode stays on glm-5.2
Probing the three Z.AI protocol-client modes turned up a real incompatibility:
openai-chatopenai-responsesant-messagesZ.AI's Anthropic-compatible gateway defaults to thinking-disabled when a request carries no thinking config, and glm-5.3 rejects that: "This model always engages in thinking and cannot be disabled; please use low, high, or max". Confirmed it is specific to 5.3 and to the missing config —
glm-5.2works there with no thinking level, andglm-5.3works there withthinking_levelLOW/HIGH/MAX; onlyNONEand "unset" fail.The generic
ant_messagesclient is model-agnostic by design and correctly omits the thinking config when the caller asks for nothing, so teaching it about GLM-5.3 would be the wrong fix. That E2E entry stays onglm-5.2instead, with the reason in a comment.Live E2E rate-limit retry
CI failed twice on Z.AI 429s (
code 1302) againstglm-5.3— real, not noise: no other rate-limit failure appears in the last 25 Python runs, and the one prior failure was a genuineUnboundLocalError. It is not a concurrency bug either;conftest.pyalready pins each model's tests to one xdist worker. The heavy E2E bodies simply cross a throttling window that a plain sequential probe does not (24/24 clean locally against both 5.2 and 5.3).Both suites now retry only rate-limited responses:
pytest-rerunfailuresadded to thedevextra; the workflow gained--reruns 5 --reruns-delay 30 --only-rerun RateLimitError --only-rerun 429.test_client.pyis untouched; the policy sits beside the existing-n 16 --dist loadgroup.modelTestwrapper every model test already funnels through, on the same 5 × 30s policy. No test body, assertion, prompt, or helper changed, and nothing branches on a model name. Each test's jest deadline is widened to cover the retry budget.Verified it does not mask real bugs: a throwaway pair of tests — one raising
RateLimitError, one a plainassert 1 == 2— showed the rate-limit case running 3 times and passing while the assertion case ran once and failed.Green runs since then report
296 passed, 113 skipped, 2 rerunand296 passed, 113 skipped, 6 rerun, so the retry demonstrably fires and clears rather than the throttle merely being absent.This masks sustained throttling rather than curing it. If
secrets.ZAI_API_KEYis a lower-tier key than a normal dev key, raising its quota remains the better root-cause fix.OpenRouter moves to the OpenAI Responses protocol
Third-party gateways now prefer
openai-responses. All 17 OpenRouter entries that used the genericopenai-chatclient were switched, each verified against the live endpoint one model at a time rather than assumed:anthropic/claude-fable-5,anthropic/claude-opus-5,anthropic/claude-opus-4.8,anthropic/claude-opus-4.7,anthropic/claude-sonnet-5,google/gemini-3.5-flash,minimax/minimax-m3,nvidia/nemotron-3-ultra-550b-a55b:free,openai/gpt-5.6-sol,openai/gpt-5.6-terra,openai/gpt-5.6-luna,openai/gpt-5.5,qwen/qwen3.6-35b-a3b,stepfun/step-3.7-flash,tencent/hy3,x-ai/grok-4.5,xiaomi/mimo-v2.5— 17/17 served.OpenRouter's docs don't state Responses coverage and an unauthenticated probe 401s before validating the model, so this was worth checking: the long tail (nvidia, stepfun, tencent, x-ai, xiaomi, qwen) was the risk, and it all works. The probe re-ran any failure over
openai-chatas a control so a temporarily-down model could not be misread as an unsupported protocol; that path never had to fire.Left alone deliberately:
openai-chat— it serves Chat Completions only.glm-5.3,kimi-k3,kimi-k2.6,deepseek-v4,openai-embedding) keep it. The preference is about which generic protocol to reach for, not about giving up model-specific handling.README.mdand bothskills/*/reference/models.mdpreviously told readers to useopenai-chatfor OpenRouter, which would now contradict the registry; they state the preference instead. The OpenRouterqwen3.6E2E entry moved toopenai-responsesso the suite exercises what the registry recommends, while the SiliconFlow one stays on chat.README examples follow the registry
claude-sonnet-5claude-opus-5OpenRouter GPT-5.6 repricing
The three OpenRouter GPT-5.6 entries were stale against
GET https://openrouter.ai/api/v1/modelsand are now corrected:openai/gpt-5.6-solopenai/gpt-5.6-terraopenai/gpt-5.6-lunasolhad been carrying OpenAI's list price rather than OpenRouter's; terra and luna had been carrying their:batchrates. The official entries were already correct and are unchanged — note thatgpt-5.6-sol(official, $5/$30) andopenai/gpt-5.6-sol(OpenRouter, $2.5/$15) genuinely differ.openai/gpt-5.5was checked and already matches.🤖 Generated with Claude Code