Skip to content

fix(executors): wire glm and cliproxyapi into the 400 reasoning-effort recovery - #14915

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
HouMinXi:fix/14629-remaining-executors
Sep 28, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
HouMinXi:fix/14629-remaining-executors

Conversation

@HouMinXi

Copy link
Copy Markdown
Contributor

Summary

BaseExecutor.execute() carries a reactive 400 clamp-and-retry for a rejected reasoning_effort. Executors that override execute() without calling super.execute() never reach it. #14774 wired commandCode and extracted the shared helper. This PR wires the two remaining executors that actually forward an OpenAI-shaped body carrying reasoning_effort.

  • glm.ts calls the helper inside executeTransport, and only on the openai transport. The anthropic transport does not send the field, and the existing transport fallback (isRetryableGlmFallbackStatus) is untouched.
  • cliproxyapi.ts calls the helper after its own fetch. The retry reuses the same serializer that drops _toolNameMap and _namespaceToolIdentityMap, so those in-memory maps stay off the wire.

Three executors listed in #14774's Remaining section are left unwired, on purpose:

  • ninerouter.ts returns 503 before any fetch when its local supervisor is not running, which is the test environment. The wiring cannot be exercised there.
  • gitlab.ts and nlpcloud.ts never reference reasoning_effort. Their upstream bodies are not OpenAI-shaped, so the helper would be dead code.

Related to #14629. #14629 stays open.

Test plan

  • tests/unit/issue-14629-remaining-executors-400-recovery.test.ts (2): glm and cliproxyapi each clamp reasoning_effort: "none" to "low" and retry once on a 400 that names the accepted enum
  • Defect injection: removing the glm recovery block turned the glm test red while cliproxyapi stayed green; restoring it turned both green
  • Existing issue-14629-commandcode-400-recovery-unreachable still passes
  • file-size gate clean against upstream/release/v3.8.51

…overy

Both override execute() without calling super.execute(), so the reactive
clamp-and-retry that diegosouzapw#14774 extracted never ran for them. An upstream 400
naming the accepted reasoning_effort enum now clamps and retries once.

glm only on the openai transport; the anthropic transport does not send the
field. cliproxyapi reuses its wire serializer so the in-memory tool maps stay
off the wire.

ninerouter, gitlab, and nlpcloud are left unwired. ninerouter returns before
any fetch when its local supervisor is down, and the other two never send
reasoning_effort.

Related to diegosouzapw#14629.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
@diegosouzapw
diegosouzapw merged commit 9bb5c57 into diegosouzapw:release/v3.8.51 Sep 28, 2026
10 of 16 checks passed
@HouMinXi
HouMinXi deleted the fix/14629-remaining-executors branch September 29, 2026 02:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants