Repository navigation
Replies: 1 comment
|
Read this at The tree already encodes that requirement.
So the fix is not local to I want to be explicit about the boundary, because it is why this is analysis and not a patch. The seam is not reachable from outside the adapter. The throw happens inside Interim, if you need multi-step loops before that lands: the pi-ai adapter speaks the same wire protocol as a named route — anthropic:
baseURL: https://your-gateway/anthropic
api: anthropic-messages(shape from Two limits on this reading, so you can discount it correctly. It is source at |
Uh oh!
There was an error while loading. Please reload this page.
Summary
@deepseek-ai/dsh-llm-deepseek0.2.1-rc.3 fails a session on the second LLM step when the Anthropic-compatible endpoint returns aredacted_thinkingcontent block. Tool calls in step 1 succeed; step 2 fails before further tool execution, so multi-step agent loops cannot continue.Environment
0.2.1-rc.3@deepseek-ai/dsh-llm-deepseek:0.2.1-rc.3.../anthropic/v1) via Bifrostdeepseek-v4-pro,deepseek-flashreasoningEffort:noneandhigh(both reproduce)Steps to reproduce
Actual behavior
Step 1 tool calls succeed. Step 2 fails with:
Session events show
assistant/attemptfinishing with an error andturn/endwith the same error.Expected behavior
Anthropic Messages defines
redacted_thinkingas a content block that clients should pass through / round-trip without interpreting. The adapter should at minimum not fail the turn; ideally preserve and replay it according to the protocol.Root cause
In
packages/llm/llm-deepseek,startBlock()handlestext,thinking, andtool_use; thedefaultbranch throws:The installed build throws at
lib/index.js:1878.Impact
Any Anthropic-compatible provider/model that emits
redacted_thinkingcannot complete a multi-step tool loop. This blocks agent workflows that need more than one step of tool calls.Notes
deepseek-v4-provsdeepseek-flash) does not help; the block type is the trigger.reasoningEffort: nonedid not prevent it in my test.CONTRIBUTING.mdrequests.Possible fix
Handle
redacted_thinkinginstartBlock()(and request replay) as an opaque/empty reasoning block instead of throwing, or skip it while preserving block indices.All reactions