diff --git a/packages/kilo-gateway/src/server/fim.ts b/packages/kilo-gateway/src/server/fim.ts index 5e61f954330..58a89eb05a5 100644 --- a/packages/kilo-gateway/src/server/fim.ts +++ b/packages/kilo-gateway/src/server/fim.ts @@ -6,6 +6,11 @@ type Auth = any type FimProvider = "kilo" | "mistral" | "inception" +const DIRECT_FIM_ENV: Record, string[]> = { + mistral: ["MISTRAL_API_KEY"], + inception: ["INCEPTION_API_KEY"], +} + interface FimTarget { provider: FimProvider model: string @@ -41,7 +46,9 @@ async function getProxyAuth(Auth: Auth) { async function getProviderKey(Auth: Auth, provider: FimProvider) { const auth = await Auth.get(provider) - return auth?.type === "api" ? auth.key : undefined + if (auth?.type === "api") return auth.key + if (provider === "kilo") return undefined + return DIRECT_FIM_ENV[provider].map((key) => process.env[key]).find(Boolean) } async function fetchFim( 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 116179b54e8..ced90a89b58 100644 --- a/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts +++ b/packages/opencode/src/kilocode/server/httpapi/handlers/kilo-gateway.ts @@ -46,6 +46,11 @@ const INCEPTION_FIM_URL = "https://api.inceptionlabs.ai/v1/fim/completions" type FimProvider = "kilo" | "mistral" | "inception" +const DIRECT_FIM_ENV: Record, string[]> = { + mistral: ["MISTRAL_API_KEY"], + inception: ["INCEPTION_API_KEY"], +} + function resolveFimTarget(provider?: string, model?: string) { const info = getAutocompleteModel(provider, model) if (info.directProvider === "mistral") { @@ -100,7 +105,8 @@ export const kiloGatewayHandlers = HttpApiBuilder.group(InstanceHttpApi, "kilo", const token = yield* Effect.gen(function* () { if (target.provider === "kilo") return info?.token const item = yield* auth.get(target.provider).pipe(Effect.mapError(() => new HttpApiError.Unauthorized({}))) - return item?.type === "api" ? item.key : undefined + if (item?.type === "api") return item.key + return DIRECT_FIM_ENV[target.provider].map((key) => process.env[key]).find(Boolean) }) if (target.provider === "kilo" && !info?.auth) return yield* Effect.fail(new HttpApiError.Unauthorized({}))