Replies: 1 comment 3 replies
|
Confirming this defect in a live deployment ( In // "Reasoning and the answer share max_tokens here, so an uncapped reasoning
// phase can consume the whole response and leave no answer and no tool call."
function resolveClampedThinkingBudget(model, options, params) {
if (!options?.reasoningEffort || !model.reasoning) return undefined
...
}and for the Qwen thinking dialect: params.enable_thinking = !!options?.reasoningEffortSo on OpenAI-compatible routes the summarize call falls into one of two silent failure modes:
Native DeepSeek has no budget split at all — the adapter sends one shared The current workaround is blunt: raise the policy Beyond the minimal same-route inheritance proposed above, two small extensions would be worth folding in while this is being touched:
Happy to provide the production |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
In
dsh-v0.1.0-rc.7(99f6f02),BasicCompactionEnginereconstructs the conversation prefix for its summary call but drops the effectivereasoningEffortfrom the latest durable request. The compaction request therefore falls back to the adapter default even when it uses the same provider/model as the request whose warm prefix it replays.This makes the auxiliary request envelope differ from the conversation route and, for adapters that serialize reasoning effort, can put the otherwise matching prefix on a different server-side path. The DeepSeek adapter serializes this as
thinking/reasoning_effort.Source
summarizeWithLlmreads the latest header only to chooseproviderandmodel, then constructsGenerateOptionswithoutreasoningEffort. The normal request header persists effective call configuration, and DSH documents model-owned reasoning effort as request-envelope state: LLM streaming documentation.Minimal proposed change
Forward the latest effective effort only when the selected summarization target exactly matches the latest durable provider/model route:
The exact route check is important: an explicit summarization provider/model that differs from the conversation route must resolve its own adapter defaults rather than receive an opaque effort ID from the old route. The compaction-specific
maxTokenscap remains unchanged.Reproduction and validation
request/headerwith{ provider, model, reasoningEffort: "high" }.ctx.llm.stream()options omit the effort."high"; assert that an explicit different summarization target has no inherited effort.pnpm exec vitest run packages/compaction/compaction-basic/tests: 122/122 passed.pnpm run typecheck: passed.verify-translation-pairing.No live provider cache probe was run, because cache hits remain provider-controlled and require billable credentials. This report establishes the local request-envelope defect; it does not claim that any provider must cache a request. DeepSeek documents context caching as requiring matching request prefix semantics: https://api-docs.deepseek.com/guides/kv_cache/.
Contribution channel
The repository CONTRIBUTING.md says external pull requests are not currently accepted, so I am posting the minimal, tested change here instead of opening a PR.
All reactions