Client or integration
Codex Desktop using OpenCodex as the local Responses API proxy.
Summary
On OpenCodex 2.12.0, the official DeepSeek V4 Flash Responses route can still fail after tool calls with:
The `reasoning_text` in the thinking mode must be passed back to the API.
This reproduces even though the built-in deepseek registry entry already sets preserveResponsesReasoningContent: true and the router is expected to merge that registry capability into the effective provider config.
This appears to be a regression or an uncovered reasoning-replay path related to #875 and #1193, rather than a missing user configuration flag.
Reproduction
- Start a Codex Desktop turn using
deepseek/deepseek-v4-flash with High reasoning.
- Give it a coding task that requires several shell/tool calls.
- Let the model issue tools and return their results.
- Observe the continuation request after the tool results.
The failure occurred twice in the same thread. In both attempts, several shell reads completed successfully and the next model continuation failed with the same upstream error.
Actual result
The turn ends in systemError with an upstream 400 payload:
{
"error": {
"message": "The `reasoning_text` in the thinking mode must be passed back to the API.",
"type": "invalid_request_error",
"param": null,
"code": "invalid_request_error"
}
}
Plain turns and earlier requests can succeed; the failure appears specifically on a tool-call continuation that needs prior reasoning replay.
Expected result
For DeepSeek thinking-mode continuations, OpenCodex should pass the prior plaintext reasoning item back to the upstream Responses API so the tool loop can continue.
Version
OpenCodex 2.12.0, installed through npm.
Operating system
Windows 11.
Provider and route details
- Provider: official DeepSeek API (
https://api.deepseek.com)
- Provider ID:
deepseek
- Model:
deepseek/deepseek-v4-flash
- Reasoning effort: High
- Inbound API: Codex Responses API
- Upstream route: DeepSeek
POST /responses
Why this does not look like a local config omission
The 2.12.0 source already contains all of the following:
- the built-in DeepSeek registry entry sets
preserveResponsesReasoningContent: true;
router.ts merges that registry value when the saved provider does not explicitly override it;
openai-responses.ts preserves raw reasoning content when the effective provider flag is true.
The saved provider does not explicitly set the flag to false. Therefore adding the same value manually would only duplicate the built-in default and should not be required.
Related issues
This reproduction is on the current 2.12.0 release and uses the native DeepSeek Responses route, so it may be a new replay/state edge case or a regression after those fixes.
I can provide sanitized request/debug rows if a narrower capture is needed.
Client or integration
Codex Desktop using OpenCodex as the local Responses API proxy.
Summary
On OpenCodex 2.12.0, the official DeepSeek V4 Flash Responses route can still fail after tool calls with:
This reproduces even though the built-in
deepseekregistry entry already setspreserveResponsesReasoningContent: trueand the router is expected to merge that registry capability into the effective provider config.This appears to be a regression or an uncovered reasoning-replay path related to #875 and #1193, rather than a missing user configuration flag.
Reproduction
deepseek/deepseek-v4-flashwith High reasoning.The failure occurred twice in the same thread. In both attempts, several shell reads completed successfully and the next model continuation failed with the same upstream error.
Actual result
The turn ends in
systemErrorwith an upstream 400 payload:{ "error": { "message": "The `reasoning_text` in the thinking mode must be passed back to the API.", "type": "invalid_request_error", "param": null, "code": "invalid_request_error" } }Plain turns and earlier requests can succeed; the failure appears specifically on a tool-call continuation that needs prior reasoning replay.
Expected result
For DeepSeek thinking-mode continuations, OpenCodex should pass the prior plaintext reasoning item back to the upstream Responses API so the tool loop can continue.
Version
OpenCodex 2.12.0, installed through npm.
Operating system
Windows 11.
Provider and route details
https://api.deepseek.com)deepseekdeepseek/deepseek-v4-flashPOST /responsesWhy this does not look like a local config omission
The 2.12.0 source already contains all of the following:
preserveResponsesReasoningContent: true;router.tsmerges that registry value when the saved provider does not explicitly override it;openai-responses.tspreserves raw reasoning content when the effective provider flag is true.The saved provider does not explicitly set the flag to
false. Therefore adding the same value manually would only duplicate the built-in default and should not be required.Related issues
This reproduction is on the current 2.12.0 release and uses the native DeepSeek Responses route, so it may be a new replay/state edge case or a regression after those fixes.
I can provide sanitized request/debug rows if a narrower capture is needed.