From 499bb40e258be7cb35f33a9cd70922b9233e5b5b Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:01:13 +0000 Subject: [PATCH 1/6] feat(vercel): use -non-reasoning suffix for Grok 4.x when reasoning is disabled --- apps/web/src/lib/ai-gateway/providers/vercel/index.ts | 5 +++-- .../lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts index c3ae28669d..e6326b208a 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts @@ -13,6 +13,7 @@ import type { VercelProviderConfig, } from '@/lib/ai-gateway/providers/openrouter/types'; import { mapModelIdToVercel } from '@/lib/ai-gateway/providers/vercel/mapModelIdToVercel'; +import { isReasoningExplicitlyDisabled } from '@/lib/ai-gateway/providers/openrouter/request-helpers'; import { unstable_cache } from 'next/cache'; import { readDb } from '@/lib/drizzle'; import { modelsByProvider } from '@kilocode/db/schema'; @@ -93,7 +94,7 @@ export async function shouldRouteToVercel( } const vercelModels = await getVercelModels(); - const vercelModelId = mapModelIdToVercel(requestedModel); + const vercelModelId = mapModelIdToVercel(requestedModel, isReasoningExplicitlyDisabled(request)); if (!vercelModels.includes(vercelModelId)) { console.debug(`[shouldRouteToVercel] model not found in Vercel model list`); return false; @@ -155,7 +156,7 @@ export function applyVercelSettings( requestToMutate: GatewayRequest, userByok: BYOKResult[] | null ) { - requestToMutate.body.model = mapModelIdToVercel(requestedModel); + requestToMutate.body.model = mapModelIdToVercel(requestedModel, isReasoningExplicitlyDisabled(requestToMutate)); if (userByok) { if (userByok.length === 0) { diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts b/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts index 480d38c729..9d2a70db6e 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts @@ -26,9 +26,12 @@ const vercelModelIdMapping: Record = { 'qwen/qwen3-32b': 'alibaba/qwen-3-32b', }; -export function mapModelIdToVercel(modelId: string) { +export function mapModelIdToVercel(modelId: string, reasoningDisabled = false) { const hardcodedVercelId = vercelModelIdMapping[modelId]; if (hardcodedVercelId) { + if (reasoningDisabled && hardcodedVercelId.endsWith('-reasoning')) { + return hardcodedVercelId.replace(/-reasoning$/, '-non-reasoning'); + } return hardcodedVercelId; } From 77d56e3d148036363486bb8527b3b862fcbe708c Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:03:50 +0000 Subject: [PATCH 2/6] style: fix import order for oxfmt --- apps/web/src/lib/ai-gateway/providers/vercel/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts index e6326b208a..359ba36720 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts @@ -12,8 +12,8 @@ import type { VercelInferenceProviderConfig, VercelProviderConfig, } from '@/lib/ai-gateway/providers/openrouter/types'; -import { mapModelIdToVercel } from '@/lib/ai-gateway/providers/vercel/mapModelIdToVercel'; import { isReasoningExplicitlyDisabled } from '@/lib/ai-gateway/providers/openrouter/request-helpers'; +import { mapModelIdToVercel } from '@/lib/ai-gateway/providers/vercel/mapModelIdToVercel'; import { unstable_cache } from 'next/cache'; import { readDb } from '@/lib/drizzle'; import { modelsByProvider } from '@kilocode/db/schema'; From ae05aeff4f30e2a7e9532db6fe58f8ea9a1419de Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:10:01 +0000 Subject: [PATCH 3/6] style: wrap long line to satisfy oxfmt --- apps/web/src/lib/ai-gateway/providers/vercel/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts index 359ba36720..147352c12b 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts @@ -156,7 +156,10 @@ export function applyVercelSettings( requestToMutate: GatewayRequest, userByok: BYOKResult[] | null ) { - requestToMutate.body.model = mapModelIdToVercel(requestedModel, isReasoningExplicitlyDisabled(requestToMutate)); + requestToMutate.body.model = mapModelIdToVercel( + requestedModel, + isReasoningExplicitlyDisabled(requestToMutate), + ); if (userByok) { if (userByok.length === 0) { From 9945f6c4054216c56a07ca69c0fae5bbd5e7989d Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:16:30 +0000 Subject: [PATCH 4/6] style: remove trailing comma from function call args (not valid in es5) --- apps/web/src/lib/ai-gateway/providers/vercel/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts index 147352c12b..7b9f6127a6 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/index.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/index.ts @@ -158,7 +158,7 @@ export function applyVercelSettings( ) { requestToMutate.body.model = mapModelIdToVercel( requestedModel, - isReasoningExplicitlyDisabled(requestToMutate), + isReasoningExplicitlyDisabled(requestToMutate) ); if (userByok) { From d3c65ba934aa58617e6167d6b9807bdb182d8d61 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 07:58:05 +0000 Subject: [PATCH 5/6] refactor: rename reasoningDisabled to reasoningExplicitlyDisabled, make required --- .../src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts b/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts index 9d2a70db6e..93fe68a2b2 100644 --- a/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts +++ b/apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts @@ -26,10 +26,10 @@ const vercelModelIdMapping: Record = { 'qwen/qwen3-32b': 'alibaba/qwen-3-32b', }; -export function mapModelIdToVercel(modelId: string, reasoningDisabled = false) { +export function mapModelIdToVercel(modelId: string, reasoningExplicitlyDisabled: boolean) { const hardcodedVercelId = vercelModelIdMapping[modelId]; if (hardcodedVercelId) { - if (reasoningDisabled && hardcodedVercelId.endsWith('-reasoning')) { + if (reasoningExplicitlyDisabled && hardcodedVercelId.endsWith('-reasoning')) { return hardcodedVercelId.replace(/-reasoning$/, '-non-reasoning'); } return hardcodedVercelId; From 02f8489b608af81d75efd9a4c4f49d4adad8943b Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 08:00:36 +0000 Subject: [PATCH 6/6] fix: pass required reasoningExplicitlyDisabled=false to remaining call sites --- apps/web/src/app/api/openrouter/embeddings/route.ts | 2 +- apps/web/src/lib/ai-gateway/byok/index.ts | 2 +- apps/web/src/routers/byok-router.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/api/openrouter/embeddings/route.ts b/apps/web/src/app/api/openrouter/embeddings/route.ts index e78ef734da..e57eb6ba9e 100644 --- a/apps/web/src/app/api/openrouter/embeddings/route.ts +++ b/apps/web/src/app/api/openrouter/embeddings/route.ts @@ -229,7 +229,7 @@ export async function POST(request: NextRequest): Promise 0 && provider.id === 'vercel') { - requestBodyParsed.model = mapModelIdToVercel(requestBodyParsed.model); + requestBodyParsed.model = mapModelIdToVercel(requestBodyParsed.model, false); } const upstreamBody = buildUpstreamBody(requestBodyParsed); diff --git a/apps/web/src/lib/ai-gateway/byok/index.ts b/apps/web/src/lib/ai-gateway/byok/index.ts index 319a7db49e..7cb17de8a9 100644 --- a/apps/web/src/lib/ai-gateway/byok/index.ts +++ b/apps/web/src/lib/ai-gateway/byok/index.ts @@ -28,7 +28,7 @@ const getModelUserByokProviders_cached = unstable_cache( return []; } const providers = - vercelModelMetadata[mapModelIdToVercel(modelId)]?.endpoints + vercelModelMetadata[mapModelIdToVercel(modelId, false)]?.endpoints .map(ep => VercelUserByokInferenceProviderIdSchema.safeParse(ep.tag).data) .filter(providerId => providerId !== undefined) ?? []; if (providers.length === 0) { diff --git a/apps/web/src/routers/byok-router.ts b/apps/web/src/routers/byok-router.ts index 6cbc16a547..33a4acbac2 100644 --- a/apps/web/src/routers/byok-router.ts +++ b/apps/web/src/routers/byok-router.ts @@ -80,7 +80,7 @@ const fetchSupportedModels = unstable_cache( result['codestral'] = ['Codestral (mistralai/codestral-2508)']; for (const openRouterModel of Object.values(openRouterModelMetadata.data)) { - const vercelModel = vercelModelMetadata.data[mapModelIdToVercel(openRouterModel.id)]; + const vercelModel = vercelModelMetadata.data[mapModelIdToVercel(openRouterModel.id, false)]; if (!vercelModel) continue; if (vercelModel.id.includes('codestral')) continue; if (vercelModel.type !== 'language') continue;