Repository navigation
Conversation
One OPENAI_MODEL served every Dot, so a fast voice Dot and a research Dot had to share one model and one thinking level. Each Dot now carries optional model and reasoningEffort columns; empty inherits OPENAI_MODEL and the model default. dot-agent builds its adapter from dot.model and sends reasoning_effort through modelOptions, which the OpenAI-compatible adapter already spreads into the request body. Ollama's /v1 endpoint reads reasoning_effort, with "none" switching thinking off where the model allows it. updateDot keeps both values when a patch omits them and clears them on an empty string, so API callers that send the old shape change nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Whether a Dot answered from memory depended on the model choosing to call recall, and in a long voice thread it stopped choosing to: the same question was answered "nothing stored" six times while the memory server held the answer. With autoRecall on, the server calls the Dot's connected recall tool with the latest user message before the model runs. The result rides on the latest user message, not the system prompt: in the system prompt it lost to recent history, and a thread whose last answers said "nothing stored" kept saying so with the memory in hand. Stored history is not changed. It uses only a recall tool the server marks read-only and the owner has not put behind approval, waits at most 4 seconds, and any failure leaves the turn running without memory. Off by default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Two problems from running OpenDots daily with a voice Dot and a chat Dot against Ollama Cloud:
OPENAI_MODELserved both, so a voice Dot that needs a fast non-thinking answer and a research Dot that benefits from reasoning had to share one model and one thinking level.recall. The same question was answered "nothing stored" six times while the server held the answer. A fresh thread answered correctly, so the tool and data were fine.What
Per-Dot model (commit 1)
modelandreasoningEfforton a Dot. Empty inheritsOPENAI_MODELand the model default.dot-agentbuilds its adapter fromdot.modeland sendsreasoning_effortthroughmodelOptions, which the OpenAI-compatible adapter already spreads into the request body.updateDotkeeps both values when a patch omits them and clears them on an empty string, so callers sending the old shape change nothing.Recall before every turn (commit 2, off by default)
autoRecalltoggle. When on, the server calls the Dot's connectedrecalltool with the latest user message before the model runs.Verification
main.tests/auto-recall.test.ts(tool selection, approval and read-only gating, failure paths, message attachment) and aWorkspaceStoretest for both new columns across omitted and clearing patches.reasoning_effort:Not covered: no UI test for the new dialog inputs, and narrow-screen layout was not checked in a browser.
🤖 Generated with Claude Code