From e5b2bb8628b1a2850c6a4e7c987f9c464ee09d3c Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Tue, 26 May 2026 10:22:16 +0200 Subject: [PATCH] fix(gateway): preserve FIM gateway model passthrough --- packages/kilo-gateway/src/server/fim.ts | 6 +++++- packages/kilo-gateway/test/fim.test.ts | 13 +++++++++---- .../server/httpapi/handlers/kilo-gateway.ts | 6 +++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/kilo-gateway/src/server/fim.ts b/packages/kilo-gateway/src/server/fim.ts index 58a89eb05a5..d344337941d 100644 --- a/packages/kilo-gateway/src/server/fim.ts +++ b/packages/kilo-gateway/src/server/fim.ts @@ -24,6 +24,10 @@ const CODESTRAL_FIM_URL = "https://codestral.mistral.ai/v1/fim/completions" const INCEPTION_FIM_URL = "https://api.inceptionlabs.ai/v1/fim/completions" export function resolveFimTarget(provider?: string, model?: string): FimTarget { + if (!provider || provider === "kilo") { + return { provider: "kilo", model: model ?? "mistralai/codestral-2501", urls: [KILO_FIM_URL] } + } + const info = getAutocompleteModel(provider, model) if (info.directProvider === "mistral") { return { provider: "mistral", model: info.requestModel, urls: [MISTRAL_FIM_URL, CODESTRAL_FIM_URL] } @@ -31,7 +35,7 @@ export function resolveFimTarget(provider?: string, model?: string): FimTarget { if (info.directProvider === "inception") { return { provider: "inception", model: info.requestModel, urls: [INCEPTION_FIM_URL] } } - return { provider: "kilo", model: info.requestModel, urls: [KILO_FIM_URL] } + return { provider: "kilo", model: model ?? "mistralai/codestral-2501", urls: [KILO_FIM_URL] } } async function getProxyAuth(Auth: Auth) { diff --git a/packages/kilo-gateway/test/fim.test.ts b/packages/kilo-gateway/test/fim.test.ts index c87e130ad86..e9874638e1d 100644 --- a/packages/kilo-gateway/test/fim.test.ts +++ b/packages/kilo-gateway/test/fim.test.ts @@ -28,7 +28,12 @@ describe("FIM target resolution", () => { }) }) - test("maps legacy gateway IDs to explicit Kilo Gateway targets", () => { + test("preserves gateway model pass-through behavior", () => { + expect(resolveFimTarget()).toEqual({ + provider: "kilo", + model: "mistralai/codestral-2501", + urls: ["https://api.kilo.ai/api/fim/completions"], + }) expect(resolveFimTarget(undefined, "mistralai/codestral-2508")).toEqual({ provider: "kilo", model: "mistralai/codestral-2508", @@ -36,12 +41,12 @@ describe("FIM target resolution", () => { }) expect(resolveFimTarget(undefined, "inception/mercury-edit")).toEqual({ provider: "kilo", - model: "inception/mercury-edit-2", + model: "inception/mercury-edit", urls: ["https://api.kilo.ai/api/fim/completions"], }) - expect(resolveFimTarget(undefined, "inception/mercury-edit-2")).toEqual({ + expect(resolveFimTarget("kilo", "custom/fim-model")).toEqual({ provider: "kilo", - model: "inception/mercury-edit-2", + model: "custom/fim-model", urls: ["https://api.kilo.ai/api/fim/completions"], }) }) diff --git a/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts b/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts index ced90a89b58..02535ee8a02 100644 --- a/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts +++ b/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts @@ -52,6 +52,10 @@ const DIRECT_FIM_ENV: Record, string[]> = { } function resolveFimTarget(provider?: string, model?: string) { + if (!provider || provider === "kilo") { + return { provider: "kilo" as const, model: model ?? "mistralai/codestral-2501", urls: [KILO_FIM_URL] } + } + const info = getAutocompleteModel(provider, model) if (info.directProvider === "mistral") { return { provider: "mistral" as const, model: info.requestModel, urls: [MISTRAL_FIM_URL, CODESTRAL_FIM_URL] } @@ -59,7 +63,7 @@ function resolveFimTarget(provider?: string, model?: string) { if (info.directProvider === "inception") { return { provider: "inception" as const, model: info.requestModel, urls: [INCEPTION_FIM_URL] } } - return { provider: "kilo" as const, model: info.requestModel, urls: [KILO_FIM_URL] } + return { provider: "kilo" as const, model: model ?? "mistralai/codestral-2501", urls: [KILO_FIM_URL] } } export const kiloGatewayHandlers = HttpApiBuilder.group(InstanceHttpApi, "kilo", (handlers) =>