Merge pull request #9575 from Kilo-Org/session/agent_2642ef3e-70fd-4b3a-b82b-fab4dca6f519

fix(vscode): persist autocomplete model switch back to Codestral
This commit is contained in:
Mark IJbema
2026-04-27 19:55:15 +02:00
committed by GitHub
7 changed files with 27 additions and 10 deletions
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Fix switching autocomplete model back to Codestral not persisting.
-1
View File
@@ -751,7 +751,6 @@
},
"kilo-code.new.autocomplete.model": {
"type": "string",
"default": "mistralai/codestral-2508",
"enum": [
"mistralai/codestral-2508",
"inception/mercury-edit"
@@ -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<boolean>("enableAutoTrigger") ?? true,
enableSmartInlineTaskKeybinding: config.get<boolean>("enableSmartInlineTaskKeybinding") ?? true,
enableChatAutocomplete: config.get<boolean>("enableChatAutocomplete") ?? true,
model: config.get<string>("model") ?? DEFAULT_AUTOCOMPLETE_MODEL.id,
model: getAutocompleteModel(config.get<string>("model") ?? "").id,
snoozeUntil: config.get<number>("snoozeUntil"),
}
}
@@ -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")
@@ -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<string>("model") ?? DEFAULT_AUTOCOMPLETE_MODEL.id)
this.model.setModel(getAutocompleteModel(cfg.get<string>("model") ?? "").id)
const startTime = Date.now()
// Build context for telemetry
@@ -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<boolean>("enableAutoTrigger", true),
enableSmartInlineTaskKeybinding: config.get<boolean>("enableSmartInlineTaskKeybinding", false),
enableChatAutocomplete: config.get<boolean>("enableChatAutocomplete", false),
model: config.get<string>("model", DEFAULT_AUTOCOMPLETE_MODEL.id),
model: getAutocompleteModel(config.get<string>("model") ?? "").id,
},
}
}
@@ -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()
})
})