From f9ba328336fc108eeb1ff3b632f7b3c32b3d07b2 Mon Sep 17 00:00:00 2001 From: Kevin Thomas Date: Tue, 30 Jun 2026 19:06:12 +0000 Subject: [PATCH 1/2] use qwen3-30b instruct for session recaps Nemotron Nano 3 is a reasoning model that emits chain-of-thought as content; it often burned the token budget without closing the recap tag, surfacing a dangling "...". Switch to the qwen3-30b-a3b instruct (non-thinking) variant, which closes the tags reliably. --- packages/ai/scripts/generate-models.ts | 1 + packages/ai/src/models.generated.ts | 18 ++++++++++++++++++ .../modes/daemon/daemon-session-summarizer.ts | 6 ++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index 4f6a3037a1..ad472bf44c 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -146,6 +146,7 @@ const PRIME_INFERENCE_MODEL_METADATA: Record, + "qwen/qwen3-30b-a3b-instruct-2507": { + id: "qwen/qwen3-30b-a3b-instruct-2507", + name: "QWEN3 30B A3B Instruct 2507", + api: "openai-completions", + provider: "prime-inference", + baseUrl: "https://api.pinference.ai/api/v1", + compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","supportsStrictMode":false}, + reasoning: false, + input: ["text"], + cost: { + input: 0.2, + output: 0.8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "qwen/qwen3-coder-next": { id: "qwen/qwen3-coder-next", name: "QWEN3 Coder Next", diff --git a/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts b/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts index 6c106011d6..7a66c64d60 100644 --- a/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts +++ b/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts @@ -9,9 +9,11 @@ const SWEEP_INTERVAL_MS = 25_000; // Collapse a tool-use loop's rapid turn_end bursts into one summarization. const SETTLE_DEBOUNCE_MS = 2_000; -// Small self-hosted open-weight model, off the proxied frontier models. +// Small self-hosted open-weight model, off the proxied frontier models. Must be +// the instruct (non-thinking) variant: a reasoning model burns the token budget +// on chain-of-thought and never closes the recap tag. const SUMMARY_MODEL_PROVIDER = "prime-inference"; -const SUMMARY_MODEL_ID = "nvidia/nemotron-3-nano-30b-a3b"; +const SUMMARY_MODEL_ID = "qwen/qwen3-30b-a3b-instruct-2507"; const SUMMARY_CONTEXT_MESSAGES = 8; const SUMMARY_MAX_CHARS_PER_MESSAGE = 600; From fa986ab23ddf941384e996f88d0c89fdc561ceb3 Mon Sep 17 00:00:00 2001 From: Kevin Thomas Date: Tue, 30 Jun 2026 19:08:29 +0000 Subject: [PATCH 2/2] drop explanatory comment on recap model --- .../coding-agent/src/modes/daemon/daemon-session-summarizer.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts b/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts index 7a66c64d60..160061f687 100644 --- a/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts +++ b/packages/coding-agent/src/modes/daemon/daemon-session-summarizer.ts @@ -9,9 +9,6 @@ const SWEEP_INTERVAL_MS = 25_000; // Collapse a tool-use loop's rapid turn_end bursts into one summarization. const SETTLE_DEBOUNCE_MS = 2_000; -// Small self-hosted open-weight model, off the proxied frontier models. Must be -// the instruct (non-thinking) variant: a reasoning model burns the token budget -// on chain-of-thought and never closes the recap tag. const SUMMARY_MODEL_PROVIDER = "prime-inference"; const SUMMARY_MODEL_ID = "qwen/qwen3-30b-a3b-instruct-2507";