From 3dc916834f80f715938d7fea3fc17fbce0123aca Mon Sep 17 00:00:00 2001 From: Harvmaster Date: Sun, 4 Oct 2026 01:06:31 +0000 Subject: [PATCH] Daemon: a changed default model overrides the saved state (0.6.3) In managed mode the extension switches models by rewriting the daemon config's defaultModel and restarting it, but loadState() preferred the persisted model, so the daemon came back on the old one every time. State now records the default it was saved under; a different default wins. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01J39imRDT8L7xYbWzsVWd8A --- CHANGELOG.md | 6 ++++++ daemon/src/config.ts | 9 ++++++--- extensions/vscode/package.json | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b531c6..202375f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Extension versions are released as `vscode-v` on the [Releases](https://git.harvmaster.com/Harvmaster/autocomplete-model/releases) page. Models are versioned by their name in [`models/manifest.json`](models/manifest.json). +## vscode 0.6.3 + +- **Fix: model choice didn't stick in managed mode.** The daemon's saved state (last model used) overrode both the + model picked in the menu and a new default from a release, so it kept restarting on the old model (e.g. + `stage-c`). A changed default now wins; switching through the daemon API still persists as before. + ## vscode 0.6.2 - **Next-edit is ~3–5× faster:** the next-edit server uses n-gram speculative decoding (the rewritten region is mostly diff --git a/daemon/src/config.ts b/daemon/src/config.ts index 777acef..b8edfb2 100644 --- a/daemon/src/config.ts +++ b/daemon/src/config.ts @@ -76,6 +76,8 @@ export interface RuntimeState { enabled: boolean model: string mode: ContextMode + /** config.defaultModel when this state was saved: a changed default (editor model setting, new release) wins. */ + defaultModel?: string } export function loadConfig(configPath: string): DaemonConfig { @@ -97,12 +99,13 @@ export function loadConfig(configPath: string): DaemonConfig { } export function loadState(config: DaemonConfig): RuntimeState { - const fallback: RuntimeState = { enabled: true, model: config.defaultModel, mode: config.models[config.defaultModel].defaultMode } + const fallback: RuntimeState = { enabled: true, model: config.defaultModel, mode: config.models[config.defaultModel].defaultMode, defaultModel: config.defaultModel } try { const s = JSON.parse(fs.readFileSync(config.stateFile, 'utf8')) as Partial - const model = s.model && config.models[s.model] ? s.model : fallback.model + const keepModel = s.defaultModel === config.defaultModel && s.model && config.models[s.model] + const model = keepModel ? s.model! : fallback.model const mode = s.mode && config.models[model].modes.includes(s.mode) ? s.mode : config.models[model].defaultMode - return { enabled: s.enabled ?? true, model, mode } + return { enabled: s.enabled ?? true, model, mode, defaultModel: config.defaultModel } } catch { return fallback } diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 1aeaa22..688fd01 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -3,7 +3,7 @@ "displayName": "Local Autocomplete", "description": "Inline code completion from a local fine-tuned model via the acd daemon", "publisher": "harvmaster", - "version": "0.6.2", + "version": "0.6.3", "license": "MIT", "engines": { "vscode": "^1.90.0"