diff --git a/.changeset/autocomplete-model-switch-back.md b/.changeset/autocomplete-model-switch-back.md new file mode 100644 index 0000000000..19a09ec103 --- /dev/null +++ b/.changeset/autocomplete-model-switch-back.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Fix switching autocomplete model back to Codestral not persisting. diff --git a/packages/kilo-vscode/package.json b/packages/kilo-vscode/package.json index d888ec0d1a..4135299ebd 100644 --- a/packages/kilo-vscode/package.json +++ b/packages/kilo-vscode/package.json @@ -751,7 +751,6 @@ }, "kilo-code.new.autocomplete.model": { "type": "string", - "default": "mistralai/codestral-2508", "enum": [ "mistralai/codestral-2508", "inception/mercury-edit" diff --git a/packages/kilo-vscode/src/services/autocomplete/AutocompleteServiceManager.ts b/packages/kilo-vscode/src/services/autocomplete/AutocompleteServiceManager.ts index 5d56a7aadf..1beb1485ea 100644 --- a/packages/kilo-vscode/src/services/autocomplete/AutocompleteServiceManager.ts +++ b/packages/kilo-vscode/src/services/autocomplete/AutocompleteServiceManager.ts @@ -8,7 +8,7 @@ import { AutocompleteCodeActionProvider } from "./AutocompleteCodeActionProvider import { AutocompleteInlineCompletionProvider } from "./classic-auto-complete/AutocompleteInlineCompletionProvider" import { AutocompleteTelemetry } from "./classic-auto-complete/AutocompleteTelemetry" import type { KiloConnectionService } from "../cli-backend" -import { DEFAULT_AUTOCOMPLETE_MODEL } from "../../shared/autocomplete-models" +import { getAutocompleteModel } from "../../shared/autocomplete-models" const CONFIG_SECTION = "kilo-code.new.autocomplete" @@ -27,7 +27,7 @@ function readSettings(): AutocompleteServiceSettings { enableAutoTrigger: config.get("enableAutoTrigger") ?? true, enableSmartInlineTaskKeybinding: config.get("enableSmartInlineTaskKeybinding") ?? true, enableChatAutocomplete: config.get("enableChatAutocomplete") ?? true, - model: config.get("model") ?? DEFAULT_AUTOCOMPLETE_MODEL.id, + model: getAutocompleteModel(config.get("model") ?? "").id, snoozeUntil: config.get("snoozeUntil"), } } diff --git a/packages/kilo-vscode/src/services/autocomplete/__tests__/settings.spec.ts b/packages/kilo-vscode/src/services/autocomplete/__tests__/settings.spec.ts index 51eccf7f3f..9ee596bc23 100644 --- a/packages/kilo-vscode/src/services/autocomplete/__tests__/settings.spec.ts +++ b/packages/kilo-vscode/src/services/autocomplete/__tests__/settings.spec.ts @@ -31,6 +31,19 @@ describe("autocomplete settings", () => { expect(buildAutocompleteSettingsMessage().settings.model).toBe("inception/mercury-edit") }) + it("defaults to codestral when no model is set", async () => { + const { buildAutocompleteSettingsMessage } = await import("../settings") + + expect(buildAutocompleteSettingsMessage().settings.model).toBe("mistralai/codestral-2508") + }) + + it("defaults to codestral when stored model is no longer supported", async () => { + state.set("model", "some/removed-model") + const { buildAutocompleteSettingsMessage } = await import("../settings") + + expect(buildAutocompleteSettingsMessage().settings.model).toBe("mistralai/codestral-2508") + }) + it("persists supported model updates", async () => { const post = vi.fn() const { routeAutocompleteMessage } = await import("../settings") diff --git a/packages/kilo-vscode/src/services/autocomplete/chat-autocomplete/ChatTextAreaAutocomplete.ts b/packages/kilo-vscode/src/services/autocomplete/chat-autocomplete/ChatTextAreaAutocomplete.ts index 8c1793faa3..328ba612eb 100644 --- a/packages/kilo-vscode/src/services/autocomplete/chat-autocomplete/ChatTextAreaAutocomplete.ts +++ b/packages/kilo-vscode/src/services/autocomplete/chat-autocomplete/ChatTextAreaAutocomplete.ts @@ -7,7 +7,7 @@ import { postprocessAutocompleteSuggestion } from "../classic-auto-complete/usel import { VisibleCodeTracker } from "../context/VisibleCodeTracker" import { FileIgnoreController } from "../shims/FileIgnoreController" import type { KiloConnectionService } from "../../cli-backend" -import { DEFAULT_AUTOCOMPLETE_MODEL } from "../../../shared/autocomplete-models" +import { getAutocompleteModel } from "../../../shared/autocomplete-models" import { finalizeChatSuggestion, buildChatPrefix } from "./chat-autocomplete-utils" interface ChatCompletionRequestMessage { @@ -77,7 +77,7 @@ export class ChatTextAreaAutocomplete { async getCompletion(userText: string, visibleCodeContext?: VisibleCodeContext): Promise<{ suggestion: string }> { const cfg = vscode.workspace.getConfiguration("kilo-code.new.autocomplete") - this.model.setModel(cfg.get("model") ?? DEFAULT_AUTOCOMPLETE_MODEL.id) + this.model.setModel(getAutocompleteModel(cfg.get("model") ?? "").id) const startTime = Date.now() // Build context for telemetry diff --git a/packages/kilo-vscode/src/services/autocomplete/settings.ts b/packages/kilo-vscode/src/services/autocomplete/settings.ts index 52f3883920..029d492129 100644 --- a/packages/kilo-vscode/src/services/autocomplete/settings.ts +++ b/packages/kilo-vscode/src/services/autocomplete/settings.ts @@ -1,5 +1,5 @@ import * as vscode from "vscode" -import { AUTOCOMPLETE_MODELS, DEFAULT_AUTOCOMPLETE_MODEL } from "../../shared/autocomplete-models" +import { AUTOCOMPLETE_MODELS, getAutocompleteModel } from "../../shared/autocomplete-models" const keys = new Set(["enableAutoTrigger", "enableSmartInlineTaskKeybinding", "enableChatAutocomplete", "model"]) @@ -35,7 +35,7 @@ export function buildAutocompleteSettingsMessage() { enableAutoTrigger: config.get("enableAutoTrigger", true), enableSmartInlineTaskKeybinding: config.get("enableSmartInlineTaskKeybinding", false), enableChatAutocomplete: config.get("enableChatAutocomplete", false), - model: config.get("model", DEFAULT_AUTOCOMPLETE_MODEL.id), + model: getAutocompleteModel(config.get("model") ?? "").id, }, } } diff --git a/packages/kilo-vscode/tests/unit/autocomplete-models-sync.test.ts b/packages/kilo-vscode/tests/unit/autocomplete-models-sync.test.ts index fe97bb1fc9..e7dc565783 100644 --- a/packages/kilo-vscode/tests/unit/autocomplete-models-sync.test.ts +++ b/packages/kilo-vscode/tests/unit/autocomplete-models-sync.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect } from "bun:test" import { readFileSync } from "node:fs" import { join } from "node:path" -import { AUTOCOMPLETE_MODELS, DEFAULT_AUTOCOMPLETE_MODEL } from "../../src/shared/autocomplete-models" +import { AUTOCOMPLETE_MODELS } from "../../src/shared/autocomplete-models" describe("autocomplete model enum ↔ AUTOCOMPLETE_MODELS sync", () => { const pkg = JSON.parse(readFileSync(join(__dirname, "../../package.json"), "utf8")) @@ -16,7 +16,7 @@ describe("autocomplete model enum ↔ AUTOCOMPLETE_MODELS sync", () => { expect(prop.enumDescriptions).toHaveLength(AUTOCOMPLETE_MODELS.length) }) - it("package.json default matches DEFAULT_AUTOCOMPLETE_MODEL", () => { - expect(prop.default).toBe(DEFAULT_AUTOCOMPLETE_MODEL.id) + it("package.json does not declare a default (VS Code strips user overrides that equal the schema default)", () => { + expect(prop.default).toBeUndefined() }) })