Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
Summary
When the model returns a turn containing only a thinking content block (empty text, no toolCall) and stopReason: "stop", OpenClaw records the turn as finalStatus: "success" and emits zero visible content to the channel. The user sees the generic fallback:
⚠️ Something went wrong while processing your request. Please try again, or use /new to start a fresh session.
The trajectory file shows the run as successful, which makes this hard to diagnose from logs alone.
Environment
- OpenClaw version: 2026.5.3-1 (gitSha
8c56752)
- Node: v22.22.2
- OS: Linux 6.1.166-197.305.amzn2023.x86_64 (x64) — Amazon Linux 2023
- Provider/Model:
amazon-bedrock / openai.gpt-oss-120b-1:0
- Model API:
bedrock-converse-stream
- Channel: Telegram (direct)
- Reasoning/Thinking config:
thinkLevel: "off", reasoningLevel: "off", fastMode: false
Reproduction
- Configure agent with
amazon-bedrock/openai.gpt-oss-120b-1:0 as default model, reasoning off.
- Send via Telegram direct message: I will be returning a car to Boston Logan International Airport find out what bus information I need to take to get to terminal B and how I do that
- Observe: user receives the generic "Something went wrong" fallback.
- Retry the same prompt — fails identically (reproduced 2x within ~90s on this host).
Expected behavior
Either:
- The model produces visible text or a proper
toolCall, or
- OpenClaw detects the empty-output condition and surfaces a specific error / triggers a retry / falls back, instead of marking the turn
success and emitting the generic fallback.
Actual behavior (data from *.trajectory.jsonl)
Two affected sessions, identical pattern:
| Session ID |
Started |
Ended |
Duration |
finalStatus |
bb443ce4-243e-4127-8d1b-9eeb05b8f9ce |
2026-05-14T19:52:17.942Z |
2026-05-14T19:52:23.004Z |
~5s |
success |
4b43ead6-72a2-463d-a0f0-034a746cd895 |
2026-05-14T19:53:56.352Z |
2026-05-14T19:53:57.763Z |
~1.4s |
success |
Final assistant message content array (both sessions):
[
{"type":"text","text":""},
{"type":"thinking","thinking":"<model reasoning about calling web_search>","thinkingSignature":""}
]
Relevant fields from model.completed / trace.artifacts:
stopReason: "stop" (not error, not toolUse)
assistantTexts: []
toolMetas: []
didSendViaMessagingTool: false
aborted: false, timedOut: false, idleTimedOut: false, promptErrorSource: null
usage: 141 output tokens (session 1), 83 output tokens (session 2) — all consumed by the thinking block
finalStatus: "success" ← surfaced as success despite zero deliverable content
Notably, the corresponding session .jsonl files were never written — only the .trajectory.jsonl files exist for these two runs. A later success on the same prompt (session 3a5760f4-..., 2026-05-15T14:21:12Z) did write a .jsonl.
Two distinct issues here
Model side: Despite reasoningLevel: "off" in OpenClaw config, the model emitted only thinking content. Either OpenClaw isn't translating "off" into the correct Bedrock Converse API parameter, or openai.gpt-oss-120b-1:0 on Bedrock doesn't honor that flag. (Cannot determine which without the outbound request payload.)
OpenClaw side (this issue's primary ask): Regardless of model behavior, the runtime should detect "turn has empty visible text AND no tool call" and:
Retry, or
Surface a specific actionable error (e.g., "model returned no visible content"), or
Fall back to a configured secondary model
…rather than marking the run success and letting the channel emit the generic fallback.
Suggested fix surface area
Wherever finalStatus is computed for a model turn (likely in the runtime that produces model.completed / trace.artifacts), add a check: if assistantTexts is empty AND toolMetas is empty AND stopReason === "stop", treat the turn as a failed/empty completion and route to retry/fallback/error instead of success.
Consider also: ensure .jsonl session file is flushed even when the turn produces no visible content, so debugging is easier.
### Steps to reproduce
Send above telegram message. The subsequent error is received every time.
### Expected behavior
The web_search tool should be called and the results remitted via the agent.
### Actual behavior
Please reference summary
### OpenClaw version
Unknown (have since upgraded)
### Operating system
AWS Linux 2023
### Install method
npm
### Model
amazon‑bedrock / openai.gpt‑oss‑120b‑1:0
### Provider / routing chain
Telegram -> OpenClaw
### Additional provider/model setup details
_No response_
### Logs, screenshots, and evidence
```shell
Impact and severity
No response
Additional information
No response
Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
Summary
When the model returns a turn containing only a
thinkingcontent block (emptytext, notoolCall) andstopReason: "stop", OpenClaw records the turn asfinalStatus: "success"and emits zero visible content to the channel. The user sees the generic fallback:The trajectory file shows the run as successful, which makes this hard to diagnose from logs alone.
Environment
8c56752)amazon-bedrock/openai.gpt-oss-120b-1:0bedrock-converse-streamthinkLevel: "off",reasoningLevel: "off",fastMode: falseReproduction
amazon-bedrock/openai.gpt-oss-120b-1:0as default model, reasoning off.Expected behavior
Either:
toolCall, orsuccessand emitting the generic fallback.Actual behavior (data from
*.trajectory.jsonl)Two affected sessions, identical pattern:
bb443ce4-243e-4127-8d1b-9eeb05b8f9cesuccess4b43ead6-72a2-463d-a0f0-034a746cd895successFinal assistant message content array (both sessions):
[ {"type":"text","text":""}, {"type":"thinking","thinking":"<model reasoning about calling web_search>","thinkingSignature":""} ] Relevant fields from model.completed / trace.artifacts: stopReason: "stop" (not error, not toolUse) assistantTexts: [] toolMetas: [] didSendViaMessagingTool: false aborted: false, timedOut: false, idleTimedOut: false, promptErrorSource: null usage: 141 output tokens (session 1), 83 output tokens (session 2) — all consumed by the thinking block finalStatus: "success" ← surfaced as success despite zero deliverable content Notably, the corresponding session .jsonl files were never written — only the .trajectory.jsonl files exist for these two runs. A later success on the same prompt (session 3a5760f4-..., 2026-05-15T14:21:12Z) did write a .jsonl. Two distinct issues here Model side: Despite reasoningLevel: "off" in OpenClaw config, the model emitted only thinking content. Either OpenClaw isn't translating "off" into the correct Bedrock Converse API parameter, or openai.gpt-oss-120b-1:0 on Bedrock doesn't honor that flag. (Cannot determine which without the outbound request payload.) OpenClaw side (this issue's primary ask): Regardless of model behavior, the runtime should detect "turn has empty visible text AND no tool call" and: Retry, or Surface a specific actionable error (e.g., "model returned no visible content"), or Fall back to a configured secondary model …rather than marking the run success and letting the channel emit the generic fallback. Suggested fix surface area Wherever finalStatus is computed for a model turn (likely in the runtime that produces model.completed / trace.artifacts), add a check: if assistantTexts is empty AND toolMetas is empty AND stopReason === "stop", treat the turn as a failed/empty completion and route to retry/fallback/error instead of success. Consider also: ensure .jsonl session file is flushed even when the turn produces no visible content, so debugging is easier. ### Steps to reproduce Send above telegram message. The subsequent error is received every time. ### Expected behavior The web_search tool should be called and the results remitted via the agent. ### Actual behavior Please reference summary ### OpenClaw version Unknown (have since upgraded) ### Operating system AWS Linux 2023 ### Install method npm ### Model amazon‑bedrock / openai.gpt‑oss‑120b‑1:0 ### Provider / routing chain Telegram -> OpenClaw ### Additional provider/model setup details _No response_ ### Logs, screenshots, and evidence ```shellImpact and severity
No response
Additional information
No response