mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
fix: address PR review comments for OpenRouter multi-provider failover
- Replace hardcoded strings with i18n translation keys - Add MAX_OPENROUTER_PROVIDERS constant - Improve error messages with provider context - Make console logs development-only - Add JSDoc comments to new methods - Add translations to all locale files
This commit is contained in:
parent
f586d7e7f1
commit
23a4f4de96
22 changed files with 275 additions and 34 deletions
|
|
@ -132,12 +132,17 @@ const glamaSchema = baseProviderSettingsSchema.extend({
|
|||
glamaApiKey: z.string().optional(),
|
||||
})
|
||||
|
||||
/**
|
||||
* Maximum number of OpenRouter providers that can be configured for failover
|
||||
*/
|
||||
export const MAX_OPENROUTER_PROVIDERS = 4
|
||||
|
||||
const openRouterSchema = baseProviderSettingsSchema.extend({
|
||||
openRouterApiKey: z.string().optional(),
|
||||
openRouterModelId: z.string().optional(),
|
||||
openRouterBaseUrl: z.string().optional(),
|
||||
openRouterSpecificProvider: z.string().optional(), // Keep for backward compatibility
|
||||
openRouterProviders: z.array(z.string()).max(4).optional(), // New multi-provider support
|
||||
openRouterProviders: z.array(z.string()).max(MAX_OPENROUTER_PROVIDERS).optional(), // New multi-provider support
|
||||
openRouterFailoverEnabled: z.boolean().optional(), // Enable automatic failover
|
||||
openRouterUseMiddleOutTransform: z.boolean().optional(),
|
||||
})
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the list of providers to use, supporting both new multi-provider and legacy single provider config
|
||||
* Get the list of providers to use for requests, supporting both multi-provider and legacy configurations
|
||||
* @returns Array of provider names in priority order
|
||||
*/
|
||||
private getProvidersToUse(): string[] {
|
||||
// New multi-provider configuration takes precedence
|
||||
|
|
@ -99,6 +100,8 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
|
||||
/**
|
||||
* Check if an error should trigger failover to the next provider
|
||||
* @param error - The error object to check
|
||||
* @returns true if the error is eligible for failover, false otherwise
|
||||
*/
|
||||
private shouldFailover(error: any): boolean {
|
||||
if (!error) return false
|
||||
|
|
@ -131,6 +134,16 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
|
||||
/**
|
||||
* Create completion parameters for a specific provider attempt
|
||||
* @param modelId - The model ID to use
|
||||
* @param maxTokens - Maximum tokens to generate
|
||||
* @param temperature - Temperature for generation
|
||||
* @param topP - Top-p sampling parameter
|
||||
* @param openAiMessages - Messages in OpenAI format
|
||||
* @param transforms - OpenRouter transforms to apply
|
||||
* @param reasoning - Reasoning parameters for the model
|
||||
* @param providers - List of all available providers
|
||||
* @param providerIndex - Current provider index being attempted
|
||||
* @returns OpenRouter chat completion parameters
|
||||
*/
|
||||
private createCompletionParams(
|
||||
modelId: string,
|
||||
|
|
@ -244,9 +257,11 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
for (let providerIndex = 0; providerIndex < providers.length; providerIndex++) {
|
||||
try {
|
||||
const currentProvider = providers[providerIndex]
|
||||
console.log(
|
||||
`[OpenRouter] Attempting request with provider: ${currentProvider} (${providerIndex + 1}/${providers.length})`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.log(
|
||||
`[OpenRouter] Attempting request with provider: ${currentProvider} (${providerIndex + 1}/${providers.length})`,
|
||||
)
|
||||
}
|
||||
|
||||
// Create completion parameters for this provider attempt
|
||||
const completionParams = this.createCompletionParams(
|
||||
|
|
@ -303,29 +318,41 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
}
|
||||
|
||||
// Success - no need to try additional providers
|
||||
console.log(`[OpenRouter] Request succeeded with provider: ${currentProvider}`)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.log(`[OpenRouter] Request succeeded with provider: ${currentProvider}`)
|
||||
}
|
||||
return
|
||||
} catch (error) {
|
||||
lastError = error
|
||||
const isLastProvider = providerIndex >= providers.length - 1
|
||||
|
||||
if (this.shouldFailover(error) && !isLastProvider) {
|
||||
console.warn(
|
||||
`[OpenRouter] Provider ${providers[providerIndex]} failed with error: ${error.message}. Trying next provider...`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.warn(
|
||||
`[OpenRouter] Provider ${providers[providerIndex]} failed with error: ${error.message}. Trying next provider...`,
|
||||
)
|
||||
}
|
||||
continue // Try next provider
|
||||
} else {
|
||||
// Either not a failover-eligible error, or this was the last provider
|
||||
console.error(
|
||||
`[OpenRouter] ${isLastProvider ? "All providers failed" : "Non-failover error"} with provider ${providers[providerIndex]}: ${error.message}`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.error(
|
||||
`[OpenRouter] ${isLastProvider ? "All providers failed" : "Non-failover error"} with provider ${providers[providerIndex]}: ${error.message}`,
|
||||
)
|
||||
}
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This should never be reached, but just in case
|
||||
throw lastError || new Error("All OpenRouter providers failed")
|
||||
const providersSummary = providers.join(", ")
|
||||
throw (
|
||||
lastError ||
|
||||
new Error(
|
||||
`All OpenRouter providers failed (tried: ${providersSummary}). Last error: ${lastError?.message || "Unknown"}`,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -465,9 +492,11 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
for (let providerIndex = 0; providerIndex < providers.length; providerIndex++) {
|
||||
try {
|
||||
const currentProvider = providers[providerIndex]
|
||||
console.log(
|
||||
`[OpenRouter] Attempting completePrompt with provider: ${currentProvider} (${providerIndex + 1}/${providers.length})`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.log(
|
||||
`[OpenRouter] Attempting completePrompt with provider: ${currentProvider} (${providerIndex + 1}/${providers.length})`,
|
||||
)
|
||||
}
|
||||
|
||||
const completionParams: OpenRouterChatCompletionParams = {
|
||||
model: modelId,
|
||||
|
|
@ -493,29 +522,41 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
|
|||
}
|
||||
|
||||
const completion = response as OpenAI.Chat.ChatCompletion
|
||||
console.log(`[OpenRouter] completePrompt succeeded with provider: ${currentProvider}`)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.log(`[OpenRouter] completePrompt succeeded with provider: ${currentProvider}`)
|
||||
}
|
||||
return completion.choices[0]?.message?.content || ""
|
||||
} catch (error) {
|
||||
lastError = error
|
||||
const isLastProvider = providerIndex >= providers.length - 1
|
||||
|
||||
if (this.shouldFailover(error) && !isLastProvider) {
|
||||
console.warn(
|
||||
`[OpenRouter] Provider ${providers[providerIndex]} failed in completePrompt: ${error.message}. Trying next provider...`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.warn(
|
||||
`[OpenRouter] Provider ${providers[providerIndex]} failed in completePrompt: ${error.message}. Trying next provider...`,
|
||||
)
|
||||
}
|
||||
continue // Try next provider
|
||||
} else {
|
||||
// Either not a failover-eligible error, or this was the last provider
|
||||
console.error(
|
||||
`[OpenRouter] ${isLastProvider ? "All providers failed" : "Non-failover error"} in completePrompt with provider ${providers[providerIndex]}: ${error.message}`,
|
||||
)
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
console.error(
|
||||
`[OpenRouter] ${isLastProvider ? "All providers failed" : "Non-failover error"} in completePrompt with provider ${providers[providerIndex]}: ${error.message}`,
|
||||
)
|
||||
}
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This should never be reached, but just in case
|
||||
throw lastError || new Error("All OpenRouter providers failed in completePrompt")
|
||||
const providersSummary = providers.join(", ")
|
||||
throw (
|
||||
lastError ||
|
||||
new Error(
|
||||
`All OpenRouter providers failed in completePrompt (tried: ${providersSummary}). Last error: ${lastError?.message || "Unknown"}`,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -733,7 +733,7 @@ const ApiOptions = ({
|
|||
{apiConfiguration?.openRouterFailoverEnabled ? (
|
||||
<div key="multi-provider-mode">
|
||||
<label className="block font-medium mb-2">
|
||||
Multiple Providers (up to 4)
|
||||
{t("settings:providers.openRouter.multiProvider.title")}
|
||||
</label>
|
||||
{[0, 1, 2, 3].map((index) => {
|
||||
const currentProviders = apiConfiguration?.openRouterProviders || []
|
||||
|
|
@ -745,12 +745,20 @@ const ApiOptions = ({
|
|||
className="mb-2">
|
||||
<label className="block text-sm font-medium mb-1">
|
||||
{index === 0
|
||||
? "Primary Provider"
|
||||
? t(
|
||||
"settings:providers.openRouter.multiProvider.primaryProvider",
|
||||
)
|
||||
: index === 1
|
||||
? "Secondary Provider"
|
||||
? t(
|
||||
"settings:providers.openRouter.multiProvider.secondaryProvider",
|
||||
)
|
||||
: index === 2
|
||||
? "Tertiary Provider"
|
||||
: "Quaternary Provider"}
|
||||
? t(
|
||||
"settings:providers.openRouter.multiProvider.tertiaryProvider",
|
||||
)
|
||||
: t(
|
||||
"settings:providers.openRouter.multiProvider.quaternaryProvider",
|
||||
)}
|
||||
</label>
|
||||
<Select
|
||||
value={currentValue || OPENROUTER_DEFAULT_PROVIDER_NAME}
|
||||
|
|
@ -835,7 +843,7 @@ const ApiOptions = ({
|
|||
|
||||
<div className="text-sm text-vscode-descriptionForeground mt-1">
|
||||
{apiConfiguration?.openRouterFailoverEnabled ? (
|
||||
"Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider."
|
||||
t("settings:providers.openRouter.multiProvider.description")
|
||||
) : (
|
||||
<>
|
||||
{t("settings:providers.openRouter.providerRouting.description")}{" "}
|
||||
|
|
|
|||
|
|
@ -116,10 +116,10 @@ export const OpenRouter = ({
|
|||
<Checkbox
|
||||
checked={apiConfiguration?.openRouterFailoverEnabled ?? true}
|
||||
onChange={handleInputChange("openRouterFailoverEnabled", noTransform)}>
|
||||
Enable automatic failover
|
||||
{t("settings:providers.openRouter.multiProvider.failoverEnabled")}
|
||||
</Checkbox>
|
||||
<div className="text-sm text-vscode-descriptionForeground mt-1">
|
||||
When enabled, automatically try backup providers if the primary provider fails
|
||||
{t("settings:providers.openRouter.multiProvider.failoverDescription")}
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/ca/settings.json
generated
11
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/de/settings.json
generated
11
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
|
|
@ -389,8 +389,8 @@
|
|||
"learnMore": "Learn more about provider routing"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers",
|
||||
"description": "Select up to 4 providers for automatic failover",
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/es/settings.json
generated
11
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/fr/settings.json
generated
11
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/hi/settings.json
generated
11
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "OpenRouter प्रदाता रूटिंग",
|
||||
"description": "OpenRouter आपके मॉडल के लिए सर्वोत्तम उपलब्ध प्रदाताओं को अनुरोध भेजता है। डिफ़ॉल्ट रूप से, अपटाइम को अधिकतम करने के लिए अनुरोधों को शीर्ष प्रदाताओं के बीच संतुलित किया जाता है। हालांकि, आप इस मॉडल के लिए उपयोग करने के लिए एक विशिष्ट प्रदाता चुन सकते हैं।",
|
||||
"learnMore": "प्रदाता रूटिंग के बारे में अधिक जानें"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/id/settings.json
generated
11
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -392,6 +392,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/it/settings.json
generated
11
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/ja/settings.json
generated
11
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "OpenRouterプロバイダールーティング",
|
||||
"description": "OpenRouterはあなたのモデルに最適な利用可能なプロバイダーにリクエストを転送します。デフォルトでは、稼働時間を最大化するために、リクエストはトッププロバイダー間でロードバランスされます。ただし、このモデルに使用する特定のプロバイダーを選択することもできます。",
|
||||
"learnMore": "プロバイダールーティングについて詳しく知る"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/ko/settings.json
generated
11
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "OpenRouter 제공자 라우팅",
|
||||
"description": "OpenRouter는 귀하의 모델에 가장 적합한 사용 가능한 제공자에게 요청을 전달합니다. 기본적으로 요청은 가동 시간을 최대화하기 위해 상위 제공자 간에 부하 분산됩니다. 그러나 이 모델에 사용할 특정 제공자를 선택할 수 있습니다.",
|
||||
"learnMore": "제공자 라우팅에 대해 자세히 알아보기"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/nl/settings.json
generated
11
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/pl/settings.json
generated
11
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
11
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/ru/settings.json
generated
11
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "Маршрутизация провайдера OpenRouter",
|
||||
"description": "OpenRouter направляет запросы к лучшим доступным провайдерам для вашей модели. По умолчанию запросы балансируются между топовыми провайдерами для максимальной доступности. Однако вы можете выбрать конкретного провайдера для этой модели.",
|
||||
"learnMore": "Подробнее о маршрутизации провайдеров"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/tr/settings.json
generated
11
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/vi/settings.json
generated
11
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"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"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
11
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "OpenRouter 提供商路由",
|
||||
"description": "OpenRouter 将请求路由到适合您模型的最佳可用提供商。默认情况下,请求会在顶级提供商之间进行负载均衡以最大化正常运行时间。但是,您可以为此模型选择特定的提供商。",
|
||||
"learnMore": "了解更多"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
11
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
11
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -388,6 +388,17 @@
|
|||
"title": "OpenRouter 供應商路由",
|
||||
"description": "OpenRouter 會將請求路由到適合您模型的最佳可用供應商。預設情況下,請求會在頂尖供應商之間進行負載平衡以最大化正常運作時間。您也可以為此模型選擇特定的供應商。",
|
||||
"learnMore": "了解更多關於供應商路由的資訊"
|
||||
},
|
||||
"multiProvider": {
|
||||
"title": "Multiple Providers (up to 4)",
|
||||
"description": "Configure multiple providers in priority order. If the primary provider fails, the system will automatically try the next provider.",
|
||||
"failoverEnabled": "Enable automatic failover",
|
||||
"failoverDescription": "When enabled, automatically try backup providers if the primary provider fails",
|
||||
"primaryProvider": "Primary Provider",
|
||||
"secondaryProvider": "Secondary Provider",
|
||||
"tertiaryProvider": "Tertiary Provider",
|
||||
"quaternaryProvider": "Quaternary Provider",
|
||||
"dragToReorder": "Drag to reorder priority"
|
||||
}
|
||||
},
|
||||
"customModel": {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue