From 0bb45672016c846434365dab0817cd62913cc535 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 10 Feb 2026 06:03:36 +0000 Subject: [PATCH 1/2] feat: add OpenRouter quantization filter to exclude low-bit providers Add a checkbox in OpenRouter settings to exclude low-bit quantization providers (FP4/FP6/Int4) that cause CJK encoding issues. When enabled, the provider.quantizations field is set to only allow FP8/FP16/BF16/Int8. Closes #11325 --- packages/types/src/provider-settings.ts | 1 + .../providers/__tests__/openrouter.spec.ts | 132 ++++++++++++++++++ src/api/providers/openrouter.ts | 81 ++++++----- .../settings/providers/OpenRouter.tsx | 12 ++ webview-ui/src/i18n/locales/en/settings.json | 4 + 5 files changed, 192 insertions(+), 38 deletions(-) diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index bf3364d38d7..2ac8edb1055 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -208,6 +208,7 @@ const openRouterSchema = baseProviderSettingsSchema.extend({ openRouterModelId: z.string().optional(), openRouterBaseUrl: z.string().optional(), openRouterSpecificProvider: z.string().optional(), + openRouterExcludeLowQuantization: z.boolean().optional(), }) const bedrockSchema = apiModelIdProviderModelSchema.extend({ diff --git a/src/api/providers/__tests__/openrouter.spec.ts b/src/api/providers/__tests__/openrouter.spec.ts index ba039459202..4db1da9d2d4 100644 --- a/src/api/providers/__tests__/openrouter.spec.ts +++ b/src/api/providers/__tests__/openrouter.spec.ts @@ -1166,4 +1166,136 @@ describe("OpenRouterHandler", () => { ) }) }) + + describe("quantization filter", () => { + it("includes quantizations in providerOptions when openRouterExcludeLowQuantization is enabled", async () => { + const handler = new OpenRouterHandler({ + openRouterApiKey: "test-key", + openRouterModelId: "openai/gpt-4o", + openRouterExcludeLowQuantization: true, + }) + + const mockFullStream = (async function* () { + yield { type: "text-delta", text: "test", id: "1" } + })() + + mockStreamText.mockReturnValue({ + fullStream: mockFullStream, + usage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + totalUsage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + }) + + const generator = handler.createMessage("test", [{ role: "user", content: "test" }]) + + for await (const _ of generator) { + // consume + } + + expect(mockStreamText).toHaveBeenCalledWith( + expect.objectContaining({ + providerOptions: { + openrouter: { + provider: { + quantizations: ["fp16", "bf16", "fp8", "int8"], + }, + }, + }, + }), + ) + }) + + it("does not include quantizations in providerOptions when openRouterExcludeLowQuantization is disabled", async () => { + const handler = new OpenRouterHandler({ + openRouterApiKey: "test-key", + openRouterModelId: "openai/gpt-4o", + openRouterExcludeLowQuantization: false, + }) + + const mockFullStream = (async function* () { + yield { type: "text-delta", text: "test", id: "1" } + })() + + mockStreamText.mockReturnValue({ + fullStream: mockFullStream, + usage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + totalUsage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + }) + + const generator = handler.createMessage("test", [{ role: "user", content: "test" }]) + + for await (const _ of generator) { + // consume + } + + expect(mockStreamText).toHaveBeenCalledWith( + expect.objectContaining({ + providerOptions: undefined, + }), + ) + }) + + it("combines quantizations with specific provider routing", async () => { + const handler = new OpenRouterHandler({ + openRouterApiKey: "test-key", + openRouterModelId: "openai/gpt-4o", + openRouterExcludeLowQuantization: true, + openRouterSpecificProvider: "DeepInfra", + }) + + const mockFullStream = (async function* () { + yield { type: "text-delta", text: "test", id: "1" } + })() + + mockStreamText.mockReturnValue({ + fullStream: mockFullStream, + usage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + totalUsage: Promise.resolve({ inputTokens: 10, outputTokens: 20, totalTokens: 30 }), + }) + + const generator = handler.createMessage("test", [{ role: "user", content: "test" }]) + + for await (const _ of generator) { + // consume + } + + expect(mockStreamText).toHaveBeenCalledWith( + expect.objectContaining({ + providerOptions: { + openrouter: { + provider: { + order: ["DeepInfra"], + only: ["DeepInfra"], + allow_fallbacks: false, + quantizations: ["fp16", "bf16", "fp8", "int8"], + }, + }, + }, + }), + ) + }) + + it("includes quantizations in completePrompt when openRouterExcludeLowQuantization is enabled", async () => { + const handler = new OpenRouterHandler({ + openRouterApiKey: "test-key", + openRouterModelId: "openai/gpt-4o", + openRouterExcludeLowQuantization: true, + }) + + mockGenerateText.mockResolvedValue({ text: "test" }) + + await handler.completePrompt("test prompt") + + expect(mockGenerateText).toHaveBeenCalledWith( + expect.objectContaining({ + providerOptions: { + openrouter: { + provider: { + quantizations: ["fp16", "bf16", "fp8", "int8"], + }, + }, + }, + }), + ) + }) + }) }) diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index d48fc4bb430..98bec153105 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -155,25 +155,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH const tools = convertToolsForAiSdk(metadata?.tools) - const providerOptions: - | { - openrouter?: { - provider?: { order: string[]; only: string[]; allow_fallbacks: boolean } - } - } - | undefined = - this.options.openRouterSpecificProvider && - this.options.openRouterSpecificProvider !== OPENROUTER_DEFAULT_PROVIDER_NAME - ? { - openrouter: { - provider: { - order: [this.options.openRouterSpecificProvider], - only: [this.options.openRouterSpecificProvider], - allow_fallbacks: false, - }, - }, - } - : undefined + const providerOptions = this.buildProviderOptions() let accumulatedReasoningText = "" @@ -281,6 +263,47 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH return { id, info, topP: isDeepSeekR1 ? 0.95 : undefined, ...params } } + private buildProviderOptions(): + | { + openrouter?: { + provider?: { + order?: string[] + only?: string[] + allow_fallbacks?: boolean + quantizations?: string[] + } + } + } + | undefined { + const hasSpecificProvider = + this.options.openRouterSpecificProvider && + this.options.openRouterSpecificProvider !== OPENROUTER_DEFAULT_PROVIDER_NAME + const excludeLowQuantization = this.options.openRouterExcludeLowQuantization + + if (!hasSpecificProvider && !excludeLowQuantization) { + return undefined + } + + const provider: { + order?: string[] + only?: string[] + allow_fallbacks?: boolean + quantizations?: string[] + } = {} + + if (hasSpecificProvider) { + provider.order = [this.options.openRouterSpecificProvider!] + provider.only = [this.options.openRouterSpecificProvider!] + provider.allow_fallbacks = false + } + + if (excludeLowQuantization) { + provider.quantizations = ["fp16", "bf16", "fp8", "int8"] + } + + return { openrouter: { provider } } + } + async completePrompt(prompt: string): Promise { let { id: modelId, maxTokens, temperature, topP, reasoning } = await this.fetchModel() @@ -298,25 +321,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH const openrouter = this.createOpenRouterProvider({ reasoning, headers }) - const providerOptions: - | { - openrouter?: { - provider?: { order: string[]; only: string[]; allow_fallbacks: boolean } - } - } - | undefined = - this.options.openRouterSpecificProvider && - this.options.openRouterSpecificProvider !== OPENROUTER_DEFAULT_PROVIDER_NAME - ? { - openrouter: { - provider: { - order: [this.options.openRouterSpecificProvider], - only: [this.options.openRouterSpecificProvider], - allow_fallbacks: false, - }, - }, - } - : undefined + const providerOptions = this.buildProviderOptions() try { const result = await generateText({ diff --git a/webview-ui/src/components/settings/providers/OpenRouter.tsx b/webview-ui/src/components/settings/providers/OpenRouter.tsx index 2dba8c8459f..8ada9cc6bb4 100644 --- a/webview-ui/src/components/settings/providers/OpenRouter.tsx +++ b/webview-ui/src/components/settings/providers/OpenRouter.tsx @@ -103,6 +103,18 @@ export const OpenRouter = ({ )} )} +
+ { + setApiConfigurationField("openRouterExcludeLowQuantization", checked) + }}> + {t("settings:providers.openRouter.excludeLowQuantization.label")} + +
+ {t("settings:providers.openRouter.excludeLowQuantization.description")} +
+
Date: Wed, 11 Feb 2026 08:17:35 +0000 Subject: [PATCH 2/2] fix: add missing excludeLowQuantization translation keys to all locale files --- webview-ui/src/i18n/locales/ca/settings.json | 4 ++++ webview-ui/src/i18n/locales/de/settings.json | 4 ++++ webview-ui/src/i18n/locales/es/settings.json | 4 ++++ webview-ui/src/i18n/locales/fr/settings.json | 4 ++++ webview-ui/src/i18n/locales/hi/settings.json | 4 ++++ webview-ui/src/i18n/locales/id/settings.json | 4 ++++ webview-ui/src/i18n/locales/it/settings.json | 4 ++++ webview-ui/src/i18n/locales/ja/settings.json | 4 ++++ webview-ui/src/i18n/locales/ko/settings.json | 4 ++++ webview-ui/src/i18n/locales/nl/settings.json | 4 ++++ webview-ui/src/i18n/locales/pl/settings.json | 4 ++++ webview-ui/src/i18n/locales/pt-BR/settings.json | 4 ++++ webview-ui/src/i18n/locales/ru/settings.json | 4 ++++ webview-ui/src/i18n/locales/tr/settings.json | 4 ++++ webview-ui/src/i18n/locales/vi/settings.json | 4 ++++ webview-ui/src/i18n/locales/zh-CN/settings.json | 4 ++++ webview-ui/src/i18n/locales/zh-TW/settings.json | 4 ++++ 17 files changed, 68 insertions(+) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index a04fd202cc4..237e97b764b 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -513,6 +513,10 @@ "title": "Encaminament de Proveïdors d'OpenRouter", "description": "OpenRouter dirigeix les sol·licituds als millors proveïdors disponibles per al vostre model. Per defecte, les sol·licituds s'equilibren entre els principals proveïdors per maximitzar el temps de funcionament. No obstant això, podeu triar un proveïdor específic per utilitzar amb aquest model.", "learnMore": "Més informació sobre l'encaminament de proveïdors" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 8f565ba2048..4785606c630 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter Anbieter-Routing", "description": "OpenRouter leitet Anfragen an die besten verfügbaren Anbieter für dein Modell weiter. Standardmäßig werden Anfragen über die Top-Anbieter lastverteilt, um maximale Verfügbarkeit zu gewährleisten. Du kannst jedoch einen bestimmten Anbieter für dieses Modell auswählen.", "learnMore": "Mehr über Anbieter-Routing erfahren" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 55977aae8dc..a48f9a7654a 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -513,6 +513,10 @@ "title": "Enrutamiento de Proveedores de OpenRouter", "description": "OpenRouter dirige las solicitudes a los mejores proveedores disponibles para su modelo. Por defecto, las solicitudes se equilibran entre los principales proveedores para maximizar el tiempo de actividad. Sin embargo, puede elegir un proveedor específico para este modelo.", "learnMore": "Más información sobre el enrutamiento de proveedores" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 1423704dd8b..3790069021e 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -513,6 +513,10 @@ "title": "Routage des fournisseurs OpenRouter", "description": "OpenRouter dirige les requêtes vers les meilleurs fournisseurs disponibles pour votre modèle. Par défaut, les requêtes sont équilibrées entre les principaux fournisseurs pour maximiser la disponibilité. Cependant, vous pouvez choisir un fournisseur spécifique à utiliser pour ce modèle.", "learnMore": "En savoir plus sur le routage des fournisseurs" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 2932913f37c..e6dc924f7dc 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter प्रदाता रूटिंग", "description": "OpenRouter आपके मॉडल के लिए सर्वोत्तम उपलब्ध प्रदाताओं को अनुरोध भेजता है। डिफ़ॉल्ट रूप से, अपटाइम को अधिकतम करने के लिए अनुरोधों को शीर्ष प्रदाताओं के बीच संतुलित किया जाता है। हालांकि, आप इस मॉडल के लिए उपयोग करने के लिए एक विशिष्ट प्रदाता चुन सकते हैं।", "learnMore": "प्रदाता रूटिंग के बारे में अधिक जानें" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 08e8c7ccec9..46b2e74f4aa 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter Provider Routing", "description": "OpenRouter mengarahkan permintaan ke provider terbaik yang tersedia untuk model kamu. Secara default, permintaan diseimbangkan beban di seluruh provider teratas untuk memaksimalkan uptime. Namun, kamu dapat memilih provider spesifik untuk digunakan untuk model ini.", "learnMore": "Pelajari lebih lanjut tentang provider routing" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 7ee641c3b3a..942314842d5 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -513,6 +513,10 @@ "title": "Routing dei fornitori OpenRouter", "description": "OpenRouter indirizza le richieste ai migliori fornitori disponibili per il tuo modello. Per impostazione predefinita, le richieste sono bilanciate tra i principali fornitori per massimizzare il tempo di attività. Tuttavia, puoi scegliere un fornitore specifico da utilizzare per questo modello.", "learnMore": "Scopri di più sul routing dei fornitori" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 787d3db2189..6111a0ea822 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouterプロバイダールーティング", "description": "OpenRouterはあなたのモデルに最適な利用可能なプロバイダーにリクエストを転送します。デフォルトでは、稼働時間を最大化するために、リクエストはトッププロバイダー間でロードバランスされます。ただし、このモデルに使用する特定のプロバイダーを選択することもできます。", "learnMore": "プロバイダールーティングについて詳しく知る" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 6c4a91f9c4a..4e0335ae1b9 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter 제공자 라우팅", "description": "OpenRouter는 귀하의 모델에 가장 적합한 사용 가능한 제공자에게 요청을 전달합니다. 기본적으로 요청은 가동 시간을 최대화하기 위해 상위 제공자 간에 부하 분산됩니다. 그러나 이 모델에 사용할 특정 제공자를 선택할 수 있습니다.", "learnMore": "제공자 라우팅에 대해 자세히 알아보기" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 3cf63857167..70c61f1bcb6 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter-providerroutering", "description": "OpenRouter stuurt verzoeken naar de best beschikbare providers voor je model. Standaard worden verzoeken gebalanceerd over de beste providers voor maximale uptime. Je kunt echter een specifieke provider kiezen voor dit model.", "learnMore": "Meer informatie over providerroutering" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 7dc5dfa7661..ceb558d6d76 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -513,6 +513,10 @@ "title": "Routing dostawców OpenRouter", "description": "OpenRouter kieruje żądania do najlepszych dostępnych dostawców dla Twojego modelu. Domyślnie żądania są równoważone między najlepszymi dostawcami, aby zmaksymalizować czas działania. Możesz jednak wybrać konkretnego dostawcę do użycia z tym modelem.", "learnMore": "Dowiedz się więcej o routingu dostawców" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index af1e68e8240..0814c2350cf 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -513,6 +513,10 @@ "title": "Roteamento de Provedores OpenRouter", "description": "OpenRouter direciona solicitações para os melhores provedores disponíveis para seu modelo. Por padrão, as solicitações são balanceadas entre os principais provedores para maximizar o tempo de atividade. No entanto, você pode escolher um provedor específico para usar com este modelo.", "learnMore": "Saiba mais sobre roteamento de provedores" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 94e9a78ff51..455cf2a532e 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -513,6 +513,10 @@ "title": "Маршрутизация провайдера OpenRouter", "description": "OpenRouter направляет запросы к лучшим доступным провайдерам для вашей модели. По умолчанию запросы балансируются между топовыми провайдерами для максимальной доступности. Однако вы можете выбрать конкретного провайдера для этой модели.", "learnMore": "Подробнее о маршрутизации провайдеров" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index df219f179d0..2f908726494 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter Sağlayıcı Yönlendirmesi", "description": "OpenRouter, modeliniz için mevcut en iyi sağlayıcılara istekleri yönlendirir. Varsayılan olarak, istekler çalışma süresini en üst düzeye çıkarmak için en iyi sağlayıcılar arasında dengelenir. Ancak, bu model için kullanılacak belirli bir sağlayıcı seçebilirsiniz.", "learnMore": "Sağlayıcı yönlendirmesi hakkında daha fazla bilgi edinin" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 56641811731..cc2783f1c7f 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -513,6 +513,10 @@ "title": "Định tuyến nhà cung cấp OpenRouter", "description": "OpenRouter chuyển hướng yêu cầu đến các nhà cung cấp tốt nhất hiện có cho mô hình của bạn. Theo mặc định, các yêu cầu được cân bằng giữa các nhà cung cấp hàng đầu để tối đa hóa thời gian hoạt động. Tuy nhiên, bạn có thể chọn một nhà cung cấp cụ thể để sử dụng cho mô hình này.", "learnMore": "Tìm hiểu thêm về định tuyến nhà cung cấp" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 4c2eef0efbb..35ef80e7dbc 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -513,6 +513,10 @@ "title": "OpenRouter 提供商路由", "description": "OpenRouter 将请求路由到适合您模型的最佳可用提供商。默认情况下,请求会在顶级提供商之间进行负载均衡以最大化正常运行时间。但是,您可以为此模型选择特定的提供商。", "learnMore": "了解更多" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index cf27a25498c..ccfdb0e62ff 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -523,6 +523,10 @@ "title": "OpenRouter 供應商路由", "description": "OpenRouter 會將請求路由到適合您模型的最佳可用供應商。預設情況下,請求會在頂尖供應商之間進行負載平衡以最大化正常運作時間。您也可以為此模型選擇特定的供應商。", "learnMore": "了解更多關於供應商路由的資訊" + }, + "excludeLowQuantization": { + "label": "Exclude low-bit quantization (FP4/FP6/Int4)", + "description": "Only allow higher precision providers (FP8/FP16/BF16/Int8). Helps prevent broken CJK (Korean/Chinese/Japanese) encoding from aggressively quantized models." } }, "customModel": {