diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index a05e3f6b50..636214e9a1 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -353,7 +353,7 @@ const fakeAiSchema = baseProviderSettingsSchema.extend({ const xaiSchema = apiModelIdProviderModelSchema.extend({ xaiApiKey: z.string().optional(), - xaiModelContextWindow: z.number().optional(), + xaiModelContextWindow: z.number().int().min(1).optional(), }) const groqSchema = apiModelIdProviderModelSchema.extend({ diff --git a/src/api/providers/fetchers/xai.ts b/src/api/providers/fetchers/xai.ts index 5f12eb03a0..4ca861864d 100644 --- a/src/api/providers/fetchers/xai.ts +++ b/src/api/providers/fetchers/xai.ts @@ -77,7 +77,7 @@ export async function getXaiModels(apiKey?: string, baseUrl?: string): Promise { - const target = e.target as HTMLInputElement - const value = target.value - return value ? parseInt(value, 10) : undefined + const v = (e.target as HTMLInputElement).value.trim() + const n = Number(v) + return Number.isFinite(n) && n > 0 ? Math.floor(n) : undefined })} placeholder="e.g., 256000" className="w-full mt-4"> diff --git a/webview-ui/src/components/ui/hooks/useSelectedModel.ts b/webview-ui/src/components/ui/hooks/useSelectedModel.ts index d4cd9275c8..1ef1a1f079 100644 --- a/webview-ui/src/components/ui/hooks/useSelectedModel.ts +++ b/webview-ui/src/components/ui/hooks/useSelectedModel.ts @@ -184,10 +184,11 @@ function getSelectedModel({ const id = apiConfiguration.apiModelId ?? xaiDefaultModelId const dynamicInfo = routerModels.xai?.[id] if (dynamicInfo) { - // If router-provided model lacks contextWindow, apply manual override when provided + // If router-provided contextWindow is missing or invalid (<= 0), apply manual override when provided const overrideCw = apiConfiguration.xaiModelContextWindow const info = - dynamicInfo.contextWindow === undefined && typeof overrideCw === "number" + !(typeof dynamicInfo.contextWindow === "number" && dynamicInfo.contextWindow > 0) && + typeof overrideCw === "number" ? { ...dynamicInfo, contextWindow: overrideCw } : dynamicInfo return { id, info }