diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 4881aafc9c..71cd2c4d89 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -136,7 +136,10 @@ "Failed to save pricing": "فشل حفظ الأسعار", "Failed to reset pricing": "فشل في إعادة تعيين التسعير", "apikey": "مفتاح واجهة برمجة التطبيقات", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "الصفحة الرئيسية", @@ -640,7 +643,8 @@ "opencode": "استخدمه عندما تفضل تشغيل الوكيل الأصلي للمحطة والأتمتة النصية عبر OpenCode.", "kiro": "يُستخدم عند دمج Kiro والتحكم في توجيه النموذج مركزيًا من OmniRoute.", "antigravity": "يُستخدم عندما يجب اعتراض حركة مرور Antigravity/Kiro عبر MITM وتوجيهها إلى OmniRoute.", - "copilot": "استخدمه عندما تريد UX بأسلوب دردشة Copilot أثناء فرض مفاتيح OmniRoute وقواعد التوجيه." + "copilot": "استخدمه عندما تريد UX بأسلوب دردشة Copilot أثناء فرض مفاتيح OmniRoute وقواعد التوجيه.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "جوجل مكافحة الجاذبية IDE مع MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "candidatePoolLabel": "Candidate Pool", + "emailVisibilityStateOff": "Off", + "builderStage": { + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + } + }, + "weightLatencyInv": "Latency", + "filterAll": "All", + "weightTierPriority": "Tier", + "builderPreview": "Preview", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "filterEmptyTitle": "No combos match this strategy filter.", + "reviewAdvanced": "Advanced Settings", + "routerStrategyLabel": "Router Strategy", + "builderFlowTitle": "Combo Builder Flow", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "contextRelaySummaryModel": "Summary Model", + "builderModel": "Model", + "excludedProviders": "Excluded Providers", + "emailVisibilityStateOn": "On", + "noExcludedProviders": "No providers are currently excluded.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderTitle": "Build a Combo", + "budgetCapLabel": "Budget Cap (USD / request)", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderStageLocked": "Locked — complete previous stage first", + "reviewComboRefs": "Combo References", + "builderAddStep": "Add step", + "builderComboRef": "Combo Ref", + "candidatePoolAllProviders": "All providers", + "weightStability": "Stability", + "reviewProviders": "Providers", + "builderAccount": "Account", + "weightTaskFit": "Task Fit", + "strategyRules": "Rules (6-Factor Scoring)", + "reorderHandle": "Drag to reorder", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderSelectModel": "Select model", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderBrowseCatalog": "Browse catalog", + "weightQuota": "Quota", + "reviewIntelligentTitle": "Intelligent Routing Config", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "statusOverview": "Status Overview", + "weightHealth": "Health", + "builderProviderFirst": "Pick provider first", + "reviewAgentFlags": "Agent Flags", + "explorationRateLabel": "Exploration Rate", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "filterIntelligent": "Intelligent", + "builderLoadingProviders": "Loading providers...", + "builderProvider": "Provider", + "reviewSequence": "Model Sequence", + "builderPinnedAccount": "Pinned Account", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "budgetCapPlaceholder": "No limit", + "candidatePoolEmpty": "No active providers available yet.", + "modePackLabel": "Mode Pack", + "activeModePack": "Active Mode Pack", + "builderComboRefStep": "Add combo reference", + "failedReorder": "Failed to reorder models", + "incidentMode": "Incident Mode", + "reviewStrategy": "Strategy", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "reviewName": "Name", + "builderAddComboRef": "Add combo reference", + "normalOperation": "Normal Operation", + "builderSelectProvider": "Select provider", + "filterDeterministic": "Deterministic", + "builderStageCurrent": "Current stage", + "reviewNoSteps": "No steps configured", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "weightCostInv": "Cost", + "providerScores": "Provider Scores", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "reviewSteps": "Steps", + "builderLegacyEntry": "Legacy entry", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelay": "Context Relay", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "builderStagePending": "Pending", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "modePackUpdated": "Mode pack updated to {pack}.", + "reviewAccounts": "Accounts", + "builderStageVisited": "Stage completed" }, "costs": { "title": "التكاليف", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "إرسال طلبات JSON - RPC إلى@@ PH0 @@ باستخدام @@PH1 @@ أو `message/stream`.", "a2aQuickStartStep3": "تتبع المهام والتحكم فيها باستخدام `tasks/get` و `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "imagesGenerations": "Images Generations", + "repairEnvSuccess": "OAuth defaults restored", + "hideEmails": "Hide all emails", + "showEmails": "Show all emails", + "repairEnvWorking": "Repairing...", + "audioTranscriptions": "Audio Transcriptions", + "embeddings": "Embeddings", + "repairEnv": "Repair env", + "selectAllModels": "Select all", + "deselectAllModels": "Deselect all", + "noModelsMatch": "No models match \"{filter}\"", + "audioSpeech": "Audio Speech", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env" }, "settings": { "title": "الإعدادات", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "مترجم", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "في انتظار ترخيص OpenAI...", "waitingForAntigravityAuthorization": "في انتظار تصريح مكافحة الجاذبية...", "waitingForQoderAuthorization": "في انتظار ترخيص Qoder...", - "exchangingCodeForTokens": "استبدال الكود بالرموز..." + "exchangingCodeForTokens": "استبدال الكود بالرموز...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "cacheRateDesc": "of total requests", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "lastUpdated": "Last updated", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCache": "Semantic Cache", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "busiestHour": "Busiest Hour", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "hoursTracked": "hours tracked", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "cacheRate": "Cache Rate", + "activityVolume": "Activity", + "peakCacheRate": "Peak Cache Rate", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "trendHour": "Hour", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index be554a6def..23a4e27c4c 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Неуспешно запазване на цената", "Failed to reset pricing": "Неуспешно нулиране на цените", "apikey": "API ключ", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Начало", @@ -640,7 +643,8 @@ "opencode": "Използвайте, когато предпочитате нативни за терминални агенти и скриптова автоматизация чрез OpenCode.", "kiro": "Използвайте, когато интегрирате Kiro и контролирате маршрутизирането на модела централно от OmniRoute.", "antigravity": "Използвайте, когато трафикът на Antigravity/Kiro трябва да бъде прихванат чрез MITM и насочен към OmniRoute.", - "copilot": "Използвайте, когато искате UX в стил на чат Copilot, като същевременно налагате OmniRoute ключове и правила за маршрутизиране." + "copilot": "Използвайте, когато искате UX в стил на чат Copilot, като същевременно налагате OmniRoute ключове и правила за маршрутизиране.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE с MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "emailVisibilityStateOff": "Off", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + } + }, + "builderPinnedAccount": "Pinned Account", + "weightTierPriority": "Tier", + "builderStageCurrent": "Current stage", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderAccount": "Account", + "builderAddStep": "Add step", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderModel": "Model", + "builderProvider": "Provider", + "builderStagePending": "Pending", + "filterAll": "All", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "candidatePoolAllProviders": "All providers", + "routerStrategyLabel": "Router Strategy", + "reviewProviders": "Providers", + "reviewAccounts": "Accounts", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "candidatePoolEmpty": "No active providers available yet.", + "builderSelectProvider": "Select provider", + "reviewStrategy": "Strategy", + "strategyRules": "Rules (6-Factor Scoring)", + "normalOperation": "Normal Operation", + "builderTitle": "Build a Combo", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewNoSteps": "No steps configured", + "reviewComboRefs": "Combo References", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderPreview": "Preview", + "reviewIntelligentTitle": "Intelligent Routing Config", + "reviewSteps": "Steps", + "weightTaskFit": "Task Fit", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderAddComboRef": "Add combo reference", + "activeModePack": "Active Mode Pack", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "statusOverview": "Status Overview", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reorderHandle": "Drag to reorder", + "modePackLabel": "Mode Pack", + "excludedProviders": "Excluded Providers", + "noExcludedProviders": "No providers are currently excluded.", + "budgetCapPlaceholder": "No limit", + "builderBrowseCatalog": "Browse catalog", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "failedReorder": "Failed to reorder models", + "providerScores": "Provider Scores", + "reviewAgentFlags": "Agent Flags", + "builderLoadingProviders": "Loading providers...", + "builderLegacyEntry": "Legacy entry", + "builderProviderFirst": "Pick provider first", + "reviewName": "Name", + "filterIntelligent": "Intelligent", + "weightLatencyInv": "Latency", + "contextRelaySummaryModel": "Summary Model", + "incidentMode": "Incident Mode", + "builderComboRef": "Combo Ref", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "weightHealth": "Health", + "emailVisibilityStateOn": "On", + "weightStability": "Stability", + "filterDeterministic": "Deterministic", + "explorationRateLabel": "Exploration Rate", + "reviewAdvanced": "Advanced Settings", + "contextRelayMaxMessages": "Max Messages For Summary", + "cooldownMinutes": "Cooldown: {minutes}m", + "reviewSequence": "Model Sequence", + "builderStageVisited": "Stage completed", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelay": "Context Relay", + "builderFlowTitle": "Combo Builder Flow", + "weightCostInv": "Cost", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "candidatePoolLabel": "Candidate Pool", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderStageLocked": "Locked — complete previous stage first", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderSelectModel": "Select model", + "filterEmptyTitle": "No combos match this strategy filter.", + "weightQuota": "Quota", + "builderComboRefStep": "Add combo reference", + "intelligentPanelTitle": "Intelligent Routing Dashboard" }, "costs": { "title": "Разходи", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Изпратете JSON - RPC заявки до@@ PH0 @@, като използвате @@ PH1 @@ или @@ PH2 @@.", "a2aQuickStartStep3": "Проследяване и контрол на задачите с помощта на @@ PH0 @@ и @@ PH1 @@.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "noModelsMatch": "No models match \"{filter}\"", + "audioTranscriptions": "Audio Transcriptions", + "deselectAllModels": "Deselect all", + "audioSpeech": "Audio Speech", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "embeddings": "Embeddings", + "hideEmails": "Hide all emails", + "imagesGenerations": "Images Generations", + "repairEnvFailed": "Failed to repair .env", + "repairEnv": "Repair env", + "selectAllModels": "Select all", + "modelsActiveCount": "{active}/{total} active", + "repairEnvWorking": "Repairing...", + "showEmails": "Show all emails", + "repairEnvSuccess": "OAuth defaults restored" }, "settings": { "title": "Настройки", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Преводач", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Изчаква се разрешение за OpenAI...", "waitingForAntigravityAuthorization": "Изчаква се разрешение за антигравитация...", "waitingForQoderAuthorization": "Изчаква се разрешение за Qoder...", - "exchangingCodeForTokens": "Размяна на код за токени..." + "exchangingCodeForTokens": "Размяна на код за токени...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "trendHour": "Hour", + "busiestHour": "Busiest Hour", + "activityVolume": "Activity", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "hoursTracked": "hours tracked", + "cacheRate": "Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCache": "Semantic Cache", + "cacheRateDesc": "of total requests", + "lastUpdated": "Last updated", + "peakCacheRate": "Peak Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index b134a12cb8..359c158abc 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Nepodařilo se uložit ceny", "Failed to reset pricing": "Nepodařilo se resetovat ceny", "apikey": "API klíč", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Domov", @@ -640,7 +643,8 @@ "opencode": "Použijte, pokud dáváte přednost spouštění agentů nativně v terminálu a skriptované automatizaci přes OpenCode.", "kiro": "Použijte při integraci Kiro a centrálním řízení směrování modelů z OmniRoute.", "antigravity": "Použijte, pokud musí být provoz Antigravity/Kiro zachycen prostřednictvím MITM a směrován do OmniRoute.", - "copilot": "Použijte, pokud chcete uživatelské rozhraní ve stylu Copilot chat a zároveň vynutit klíče a pravidla směrování OmniRoute." + "copilot": "Použijte, pokud chcete uživatelské rozhraní ve stylu Copilot chat a zároveň vynutit klíče a pravidla směrování OmniRoute.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE s MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminál)", "kiro": "Amazon Kiro – AI poháněné IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Použijte, když chcete rovnoměrné rozložení — každý model se použije jednou před opakováním.", "avoid": "Nepoužívejte, když mají modely různou kvalitu nebo latenci a záleží na pořadí.", "example": "Příklad: Více účtů stejného modelu pro rovnoměrné rozložení využití." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "weightHealth": "Health", + "candidatePoolEmpty": "No active providers available yet.", + "builderStageLocked": "Locked — complete previous stage first", + "reorderHandle": "Drag to reorder", + "excludedProviders": "Excluded Providers", + "reviewProviders": "Providers", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "reviewSequence": "Model Sequence", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "candidatePoolAllProviders": "All providers", + "weightQuota": "Quota", + "reviewNoSteps": "No steps configured", + "modePackLabel": "Mode Pack", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "reviewAdvanced": "Advanced Settings", + "contextRelayHandoffThreshold": "Handoff Threshold", + "emailVisibilityStateOn": "On", + "reviewName": "Name", + "routerStrategyLabel": "Router Strategy", + "weightStability": "Stability", + "normalOperation": "Normal Operation", + "builderFlowTitle": "Combo Builder Flow", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderStage": { + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + } + }, + "builderStageCurrent": "Current stage", + "reviewComboRefs": "Combo References", + "failedReorder": "Failed to reorder models", + "builderComboRef": "Combo Ref", + "builderPinnedAccount": "Pinned Account", + "reviewAgentFlags": "Agent Flags", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderSelectModel": "Select model", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderAddStep": "Add step", + "builderAccount": "Account", + "builderAddComboRef": "Add combo reference", + "builderLoadingProviders": "Loading providers...", + "cooldownMinutes": "Cooldown: {minutes}m", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "modePackUpdated": "Mode pack updated to {pack}.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "reviewSteps": "Steps", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "weightLatencyInv": "Latency", + "filterDeterministic": "Deterministic", + "builderSelectProvider": "Select provider", + "builderStageVisited": "Stage completed", + "builderTitle": "Build a Combo", + "emailVisibilityStateOff": "Off", + "contextRelaySummaryModel": "Summary Model", + "incidentMode": "Incident Mode", + "candidatePoolLabel": "Candidate Pool", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderPreview": "Preview", + "contextRelayMaxMessages": "Max Messages For Summary", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "providerScores": "Provider Scores", + "statusOverview": "Status Overview", + "budgetCapPlaceholder": "No limit", + "reviewIntelligentTitle": "Intelligent Routing Config", + "strategyRules": "Rules (6-Factor Scoring)", + "weightTierPriority": "Tier", + "builderBrowseCatalog": "Browse catalog", + "builderStagePending": "Pending", + "weightCostInv": "Cost", + "builderModel": "Model", + "builderComboRefStep": "Add combo reference", + "builderProvider": "Provider", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "filterIntelligent": "Intelligent", + "explorationRateLabel": "Exploration Rate", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelay": "Context Relay", + "reviewAccounts": "Accounts", + "noExcludedProviders": "No providers are currently excluded.", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderProviderFirst": "Pick provider first", + "builderLegacyEntry": "Legacy entry", + "weightTaskFit": "Task Fit", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "filterAll": "All", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "activeModePack": "Active Mode Pack", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "budgetCapLabel": "Budget Cap (USD / request)", + "reviewStrategy": "Strategy" }, "costs": { "title": "Náklady", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Odešlete požadavky JSON-RPC na `POST /a2a` pomocí `message/send` nebo `message/stream`.", "a2aQuickStartStep3": "Sledujte a ovládejte úkoly pomocí příkazů `tasks/get` a `tasks/cancel`.", "completionsLegacy": "Completions (Zastaralé)", - "completionsLegacyDesc": "Zastaralé OpenAI text completion – akceptuje oba formáty, prompt string i messages array." + "completionsLegacyDesc": "Zastaralé OpenAI text completion – akceptuje oba formáty, prompt string i messages array.", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Koncová Proxy", @@ -1749,7 +1876,22 @@ "close": "Zavřít", "statusDeactivated": "Deaktivováno (Manuální)", "statusBanned": "Zablokováno / Porušení sandboxu", - "statusCreditsExhausted": "Nedostatečný zůstatek / Kvóta vyčerpána" + "statusCreditsExhausted": "Nedostatečný zůstatek / Kvóta vyčerpána", + "hideEmails": "Hide all emails", + "repairEnv": "Repair env", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active", + "audioSpeech": "Audio Speech", + "embeddings": "Embeddings", + "selectAllModels": "Select all", + "deselectAllModels": "Deselect all", + "repairEnvSuccess": "OAuth defaults restored", + "imagesGenerations": "Images Generations", + "audioTranscriptions": "Audio Transcriptions", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvFailed": "Failed to repair .env", + "repairEnvWorking": "Repairing...", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values." }, "settings": { "title": "Nastavení", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Překladatel", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Čekám na OpenAI autorizaci...", "waitingForAntigravityAuthorization": "Čekám na Antigravity autorizaci...", "waitingForQoderAuthorization": "Čekám na Qoder autorizaci...", - "exchangingCodeForTokens": "Vyměňuji kód za tokeny..." + "exchangingCodeForTokens": "Vyměňuji kód za tokeny...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Vrchol mezipaměti", "deduplicatedRequests": "Deduplikované požadavky", "savedCalls": "Uložená API volání", - "totalProcessed": "Celkem zpracováno" + "totalProcessed": "Celkem zpracováno", + "cachedRequests24h": "Cached Requests (24h)", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "lastUpdated": "Last updated", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "cacheRateDesc": "of total requests", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cacheRate": "Cache Rate", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "busiestHour": "Busiest Hour", + "trendHour": "Hour", + "peakCacheRate": "Peak Cache Rate", + "hoursTracked": "hours tracked", + "semanticCache": "Semantic Cache", + "entriesLoadError": "Failed to load semantic cache entries.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "activityVolume": "Activity", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours." }, "memory": { "title": "Správa paměti", @@ -3132,7 +3301,8 @@ "factual": "Faktická", "episodic": "Epizodická", "procedural": "Procedurální", - "semantic": "Sémantická" + "semantic": "Sémantická", + "delete": "Delete" }, "skills": { "title": "Dovednosti", diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index c155d098f0..65e5dcc4ff 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Kunne ikke gemme prisen", "Failed to reset pricing": "Failed to reset pricing", "apikey": "API nøgle", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Hjem", @@ -640,7 +643,8 @@ "opencode": "Brug, når du foretrækker terminal-native agentkørsler og scriptet automatisering via OpenCode.", "kiro": "Bruges ved integration af Kiro og styring af modelrouting centralt fra OmniRoute.", "antigravity": "Bruges, når Antigravity/Kiro-trafik skal opsnappes gennem MITM og dirigeres til OmniRoute.", - "copilot": "Brug, når du ønsker Copilot-chatstil UX, mens du håndhæver OmniRoute-nøgler og routingregler." + "copilot": "Brug, når du ønsker Copilot-chatstil UX, mens du håndhæver OmniRoute-nøgler og routingregler.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE med MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderProviderFirst": "Pick provider first", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "explorationRateLabel": "Exploration Rate", + "budgetCapLabel": "Budget Cap (USD / request)", + "reorderHandle": "Drag to reorder", + "builderPreview": "Preview", + "reviewName": "Name", + "weightStability": "Stability", + "builderStageVisited": "Stage completed", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "routerStrategyLabel": "Router Strategy", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "filterIntelligent": "Intelligent", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "providerScores": "Provider Scores", + "modePackLabel": "Mode Pack", + "builderAddStep": "Add step", + "builderProvider": "Provider", + "reviewNoSteps": "No steps configured", + "builderLoadingProviders": "Loading providers...", + "builderSelectProvider": "Select provider", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewAccounts": "Accounts", + "failedReorder": "Failed to reorder models", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderStagePending": "Pending", + "builderPinnedAccount": "Pinned Account", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "normalOperation": "Normal Operation", + "filterEmptyTitle": "No combos match this strategy filter.", + "excludedProviders": "Excluded Providers", + "contextRelaySummaryModel": "Summary Model", + "reviewComboRefs": "Combo References", + "reviewAdvanced": "Advanced Settings", + "builderModel": "Model", + "candidatePoolEmpty": "No active providers available yet.", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "builderLegacyEntry": "Legacy entry", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "incidentMode": "Incident Mode", + "reviewProviders": "Providers", + "budgetCapPlaceholder": "No limit", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "filterDeterministic": "Deterministic", + "weightTierPriority": "Tier", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "emailVisibilityStateOn": "On", + "reviewSequence": "Model Sequence", + "strategyRules": "Rules (6-Factor Scoring)", + "builderComboRefStep": "Add combo reference", + "builderBrowseCatalog": "Browse catalog", + "builderComboRef": "Combo Ref", + "builderAccount": "Account", + "builderStageLocked": "Locked — complete previous stage first", + "contextRelayHandoffThreshold": "Handoff Threshold", + "candidatePoolAllProviders": "All providers", + "reviewSteps": "Steps", + "candidatePoolLabel": "Candidate Pool", + "contextRelay": "Context Relay", + "filterAll": "All", + "builderAddComboRef": "Add combo reference", + "weightLatencyInv": "Latency", + "emailVisibilityStateOff": "Off", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "weightCostInv": "Cost", + "weightTaskFit": "Task Fit", + "reviewStrategy": "Strategy", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "cooldownMinutes": "Cooldown: {minutes}m", + "statusOverview": "Status Overview", + "builderTitle": "Build a Combo", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "reviewIntelligentTitle": "Intelligent Routing Config", + "activeModePack": "Active Mode Pack", + "builderSelectModel": "Select model", + "weightHealth": "Health", + "weightQuota": "Quota", + "reviewAgentFlags": "Agent Flags", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "noExcludedProviders": "No providers are currently excluded.", + "builderStageCurrent": "Current stage", + "builderFlowTitle": "Combo Builder Flow", + "contextRelayMaxMessages": "Max Messages For Summary" }, "costs": { "title": "Omkostninger", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC-anmodninger til`POST /a2a`vedhjælp af `message/send` eller `message/stream`.", "a2aQuickStartStep3": "Spor og kontroller opgaver ved hjælp af `tasks/get` og `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnvWorking": "Repairing...", + "repairEnvSuccess": "OAuth defaults restored", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "showEmails": "Show all emails", + "audioSpeech": "Audio Speech", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env", + "audioTranscriptions": "Audio Transcriptions", + "deselectAllModels": "Deselect all", + "imagesGenerations": "Images Generations", + "embeddings": "Embeddings", + "hideEmails": "Hide all emails", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnv": "Repair env", + "selectAllModels": "Select all" }, "settings": { "title": "Indstillinger", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "Oversætter", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Venter på OpenAI-godkendelse...", "waitingForAntigravityAuthorization": "Venter på antigravity-autorisation...", "waitingForQoderAuthorization": "Venter på Qoder-godkendelse...", - "exchangingCodeForTokens": "Udveksler kode til tokens..." + "exchangingCodeForTokens": "Udveksler kode til tokens...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "lastUpdated": "Last updated", + "peakCacheRate": "Peak Cache Rate", + "cachedRequests24h": "Cached Requests (24h)", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "entriesLoadError": "Failed to load semantic cache entries.", + "trendHour": "Hour", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "hoursTracked": "hours tracked", + "busiestHour": "Busiest Hour", + "cacheRateDesc": "of total requests", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "activityVolume": "Activity", + "semanticCache": "Semantic Cache", + "cacheRate": "Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 9b0cf2622e..fe1125fd4c 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Preise speichern fehlgeschlagen", "Failed to reset pricing": "Preise zurücksetzen fehlgeschlagen", "apikey": "API-Schlüssel", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Zuhause", @@ -640,7 +643,8 @@ "opencode": "Verwenden Sie diese Option, wenn Sie terminalnative Agentenausführungen und Skriptautomatisierung über OpenCode bevorzugen.", "kiro": "Zur Verwendung bei der Integration von Kiro und der zentralen Steuerung des Modellroutings über OmniRoute.", "antigravity": "Wird verwendet, wenn Antigravity/Kiro-Verkehr über MITM abgefangen und an OmniRoute weitergeleitet werden muss.", - "copilot": "Verwenden Sie diese Option, wenn Sie eine UX im Copilot-Chat-Stil wünschen und gleichzeitig OmniRoute-Schlüssel und Routing-Regeln durchsetzen möchten." + "copilot": "Verwenden Sie diese Option, wenn Sie eine UX im Copilot-Chat-Stil wünschen und gleichzeitig OmniRoute-Schlüssel und Routing-Regeln durchsetzen möchten.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE mit MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "weightCostInv": "Cost", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "builderFlowTitle": "Combo Builder Flow", + "weightHealth": "Health", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "incidentMode": "Incident Mode", + "budgetCapLabel": "Budget Cap (USD / request)", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "filterAll": "All", + "filterEmptyTitle": "No combos match this strategy filter.", + "statusOverview": "Status Overview", + "contextRelay": "Context Relay", + "failedReorder": "Failed to reorder models", + "contextRelayHandoffThreshold": "Handoff Threshold", + "builderPinnedAccount": "Pinned Account", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "excludedProviders": "Excluded Providers", + "builderAddComboRef": "Add combo reference", + "reorderHandle": "Drag to reorder", + "builderComboRef": "Combo Ref", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderSelectModel": "Select model", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "providerScores": "Provider Scores", + "activeModePack": "Active Mode Pack", + "builderTitle": "Build a Combo", + "weightQuota": "Quota", + "reviewProviders": "Providers", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderSelectProvider": "Select provider", + "reviewSteps": "Steps", + "routerStrategyLabel": "Router Strategy", + "builderPreview": "Preview", + "reviewIntelligentTitle": "Intelligent Routing Config", + "emailVisibilityStateOff": "Off", + "builderStageCurrent": "Current stage", + "builderStageLocked": "Locked — complete previous stage first", + "builderAddStep": "Add step", + "reviewAdvanced": "Advanced Settings", + "noExcludedProviders": "No providers are currently excluded.", + "emailVisibilityStateOn": "On", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderLegacyEntry": "Legacy entry", + "reviewName": "Name", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "weightStability": "Stability", + "budgetCapPlaceholder": "No limit", + "candidatePoolLabel": "Candidate Pool", + "contextRelayMaxMessages": "Max Messages For Summary", + "strategyRules": "Rules (6-Factor Scoring)", + "builderProviderFirst": "Pick provider first", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderProvider": "Provider", + "weightTierPriority": "Tier", + "reviewAgentFlags": "Agent Flags", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "filterIntelligent": "Intelligent", + "builderStagePending": "Pending", + "reviewNoSteps": "No steps configured", + "builderComboRefStep": "Add combo reference", + "cooldownMinutes": "Cooldown: {minutes}m", + "reviewAccounts": "Accounts", + "explorationRateLabel": "Exploration Rate", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "candidatePoolEmpty": "No active providers available yet.", + "reviewComboRefs": "Combo References", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderStageVisited": "Stage completed", + "modePackLabel": "Mode Pack", + "weightLatencyInv": "Latency", + "builderAccount": "Account", + "weightTaskFit": "Task Fit", + "reviewStrategy": "Strategy", + "reviewSequence": "Model Sequence", + "builderModel": "Model", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "normalOperation": "Normal Operation", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "filterDeterministic": "Deterministic", + "candidatePoolAllProviders": "All providers", + "contextRelaySummaryModel": "Summary Model", + "builderBrowseCatalog": "Browse catalog", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "builderLoadingProviders": "Loading providers..." }, "costs": { "title": "Kosten", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Senden Sie JSON-RPC-Anfragen an `POST /a2a` mit `message/send` oder `message/stream`.", "a2aQuickStartStep3": "Verfolgen und steuern Sie Aufgaben mit `tasks/get` und `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "modelsActiveCount": "{active}/{total} active", + "hideEmails": "Hide all emails", + "embeddings": "Embeddings", + "deselectAllModels": "Deselect all", + "audioSpeech": "Audio Speech", + "repairEnvFailed": "Failed to repair .env", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnvSuccess": "OAuth defaults restored", + "showEmails": "Show all emails", + "imagesGenerations": "Images Generations", + "repairEnv": "Repair env", + "selectAllModels": "Select all", + "repairEnvWorking": "Repairing...", + "noModelsMatch": "No models match \"{filter}\"", + "audioTranscriptions": "Audio Transcriptions" }, "settings": { "title": "Einstellungen", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "Übersetzer", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Warte auf OpenAI-Autorisierung...", "waitingForAntigravityAuthorization": "Warte auf Antigravity-Autorisierung...", "waitingForQoderAuthorization": "Warte auf Qoder-Autorisierung...", - "exchangingCodeForTokens": "Tausche Code gegen Token aus..." + "exchangingCodeForTokens": "Tausche Code gegen Token aus...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "lastUpdated": "Last updated", + "hoursTracked": "hours tracked", + "cacheRate": "Cache Rate", + "cacheRateDesc": "of total requests", + "cachedRequests24h": "Cached Requests (24h)", + "busiestHour": "Busiest Hour", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "semanticCache": "Semantic Cache", + "activityVolume": "Activity", + "trendHour": "Hour", + "peakCacheRate": "Peak Cache Rate", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "entriesLoadError": "Failed to load semantic cache entries." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 1398393d8c..327f99121f 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -136,7 +136,10 @@ "Failed to save pricing": "No se pudo guardar el precio", "Failed to reset pricing": "No se pudo restablecer el precio", "apikey": "Clave API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Inicio", @@ -640,7 +643,8 @@ "opencode": "Úselo cuando prefiera ejecuciones de agentes nativos de terminal y automatización con scripts a través de OpenCode.", "kiro": "Utilícelo al integrar Kiro y controlar el enrutamiento de modelos de forma centralizada desde OmniRoute.", "antigravity": "Úselo cuando el tráfico de Antigravity/Kiro debe interceptarse a través de MITM y enrutarse a OmniRoute.", - "copilot": "Úselo cuando desee una experiencia de usuario estilo chat Copilot mientras aplica las claves de OmniRoute y las reglas de enrutamiento." + "copilot": "Úselo cuando desee una experiencia de usuario estilo chat Copilot mientras aplica las claves de OmniRoute y las reglas de enrutamiento.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE antigravedad de Google con MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "weightTierPriority": "Tier", + "explorationRateLabel": "Exploration Rate", + "normalOperation": "Normal Operation", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + } + }, + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "filterEmptyTitle": "No combos match this strategy filter.", + "reviewAdvanced": "Advanced Settings", + "providerScores": "Provider Scores", + "filterDeterministic": "Deterministic", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "filterIntelligent": "Intelligent", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "excludedProviders": "Excluded Providers", + "builderAddStep": "Add step", + "reorderHandle": "Drag to reorder", + "builderProviderFirst": "Pick provider first", + "builderLegacyEntry": "Legacy entry", + "reviewName": "Name", + "weightQuota": "Quota", + "filterAll": "All", + "builderPreview": "Preview", + "reviewStrategy": "Strategy", + "reviewSteps": "Steps", + "statusOverview": "Status Overview", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "weightHealth": "Health", + "builderAccount": "Account", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "weightLatencyInv": "Latency", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderLoadingProviders": "Loading providers...", + "weightStability": "Stability", + "weightTaskFit": "Task Fit", + "budgetCapPlaceholder": "No limit", + "builderProvider": "Provider", + "emailVisibilityStateOn": "On", + "builderStageVisited": "Stage completed", + "noExcludedProviders": "No providers are currently excluded.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "candidatePoolEmpty": "No active providers available yet.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "reviewAgentFlags": "Agent Flags", + "builderStageLocked": "Locked — complete previous stage first", + "reviewNoSteps": "No steps configured", + "candidatePoolLabel": "Candidate Pool", + "builderStageCurrent": "Current stage", + "builderComboRef": "Combo Ref", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "emailVisibilityStateOff": "Off", + "builderAddComboRef": "Add combo reference", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "modePackUpdated": "Mode pack updated to {pack}.", + "contextRelaySummaryModel": "Summary Model", + "builderModel": "Model", + "reviewProviders": "Providers", + "candidatePoolAllProviders": "All providers", + "builderFlowTitle": "Combo Builder Flow", + "routerStrategyLabel": "Router Strategy", + "builderStagePending": "Pending", + "contextRelayHandoffThreshold": "Handoff Threshold", + "cooldownMinutes": "Cooldown: {minutes}m", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderSelectModel": "Select model", + "builderSelectProvider": "Select provider", + "failedReorder": "Failed to reorder models", + "reviewIntelligentTitle": "Intelligent Routing Config", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "incidentMode": "Incident Mode", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderTitle": "Build a Combo", + "builderPinnedAccount": "Pinned Account", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "activeModePack": "Active Mode Pack", + "builderComboRefStep": "Add combo reference", + "strategyRules": "Rules (6-Factor Scoring)", + "contextRelay": "Context Relay", + "reviewSequence": "Model Sequence", + "reviewAccounts": "Accounts", + "reviewComboRefs": "Combo References", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "budgetCapLabel": "Budget Cap (USD / request)", + "modePackLabel": "Mode Pack", + "weightCostInv": "Cost", + "builderBrowseCatalog": "Browse catalog", + "advancedWeightsTitle": "Advanced: Scoring Weights" }, "costs": { "title": "Costos", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Envíe solicitudes JSON-RPC a `POST /a2a` usando `message/send` o `message/stream`.", "a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1754,7 +1881,17 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "modelsActiveCount": "{active}/{total} active", + "audioTranscriptions": "Audio Transcriptions", + "imagesGenerations": "Images Generations", + "deselectAllModels": "Deselect all", + "selectAllModels": "Select all", + "embeddings": "Embeddings", + "showEmails": "Show all emails", + "audioSpeech": "Audio Speech", + "noModelsMatch": "No models match \"{filter}\"", + "hideEmails": "Hide all emails" }, "settings": { "title": "Configuración", @@ -2271,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Traductor", @@ -2697,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "OmniRuta", @@ -3113,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "busiestHour": "Busiest Hour", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "activityVolume": "Activity", + "cacheRate": "Cache Rate", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "trendHour": "Hour", + "semanticCache": "Semantic Cache", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "cacheRateDesc": "of total requests", + "peakCacheRate": "Peak Cache Rate", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "hoursTracked": "hours tracked", + "lastUpdated": "Last updated", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "cachedRequests24h": "Cached Requests (24h)" }, "memory": { "title": "Memory Management", @@ -3137,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 313b81c00a..fee29551d8 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Hinnoittelun tallentaminen epäonnistui", "Failed to reset pricing": "Hinnoittelun nollaaminen epäonnistui", "apikey": "API-avain", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Kotiin", @@ -640,7 +643,8 @@ "opencode": "Käytä, kun haluat käyttää päätealustaisia ​​agentteja ja komentosarjottua automaatiota OpenCoden kautta.", "kiro": "Käytä integroitaessa Kiroa ja ohjattaessa mallin reititystä keskitetysti OmniRoutesta.", "antigravity": "Käytä, kun Antigravity/Kiro-liikenne on siepattava MITM:n kautta ja ohjattava OmniRouteen.", - "copilot": "Käytä, kun haluat Copilot-chat-tyylisen UX:n ja pakota OmniRoute-avaimia ja reitityssääntöjä." + "copilot": "Käytä, kun haluat Copilot-chat-tyylisen UX:n ja pakota OmniRoute-avaimia ja reitityssääntöjä.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE ja MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "modePackUpdated": "Mode pack updated to {pack}.", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "reviewStrategy": "Strategy", + "incidentMode": "Incident Mode", + "builderTitle": "Build a Combo", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "candidatePoolLabel": "Candidate Pool", + "weightHealth": "Health", + "builderStage": { + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + } + }, + "statusOverview": "Status Overview", + "weightQuota": "Quota", + "weightTierPriority": "Tier", + "reviewAccounts": "Accounts", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "strategyRules": "Rules (6-Factor Scoring)", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "budgetCapPlaceholder": "No limit", + "modePackLabel": "Mode Pack", + "builderSelectModel": "Select model", + "contextRelaySummaryModel": "Summary Model", + "builderAccount": "Account", + "emailVisibilityStateOn": "On", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "emailVisibilityStateOff": "Off", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "reviewName": "Name", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderLoadingProviders": "Loading providers...", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "reorderHandle": "Drag to reorder", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewSteps": "Steps", + "builderAddStep": "Add step", + "builderComboRef": "Combo Ref", + "weightTaskFit": "Task Fit", + "builderProviderFirst": "Pick provider first", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "weightCostInv": "Cost", + "builderPreview": "Preview", + "reviewComboRefs": "Combo References", + "builderStageCurrent": "Current stage", + "builderLegacyEntry": "Legacy entry", + "weightLatencyInv": "Latency", + "routerStrategyLabel": "Router Strategy", + "failedReorder": "Failed to reorder models", + "builderBrowseCatalog": "Browse catalog", + "candidatePoolAllProviders": "All providers", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "budgetCapLabel": "Budget Cap (USD / request)", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "providerScores": "Provider Scores", + "contextRelay": "Context Relay", + "candidatePoolEmpty": "No active providers available yet.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "filterIntelligent": "Intelligent", + "reviewSequence": "Model Sequence", + "explorationRateLabel": "Exploration Rate", + "builderSelectProvider": "Select provider", + "builderFlowTitle": "Combo Builder Flow", + "activeModePack": "Active Mode Pack", + "reviewNoSteps": "No steps configured", + "reviewAdvanced": "Advanced Settings", + "reviewProviders": "Providers", + "filterAll": "All", + "reviewIntelligentTitle": "Intelligent Routing Config", + "builderComboRefStep": "Add combo reference", + "excludedProviders": "Excluded Providers", + "noExcludedProviders": "No providers are currently excluded.", + "builderStageVisited": "Stage completed", + "normalOperation": "Normal Operation", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderStagePending": "Pending", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayMaxMessages": "Max Messages For Summary", + "filterDeterministic": "Deterministic", + "builderPinnedAccount": "Pinned Account", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "weightStability": "Stability", + "builderProvider": "Provider", + "reviewAgentFlags": "Agent Flags", + "builderModel": "Model", + "builderStageLocked": "Locked — complete previous stage first", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderAddComboRef": "Add combo reference" }, "costs": { "title": "Kustannukset", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.", "a2aQuickStartStep3": "Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnv": "Repair env", + "audioSpeech": "Audio Speech", + "selectAllModels": "Select all", + "audioTranscriptions": "Audio Transcriptions", + "repairEnvWorking": "Repairing...", + "repairEnvSuccess": "OAuth defaults restored", + "embeddings": "Embeddings", + "deselectAllModels": "Deselect all", + "imagesGenerations": "Images Generations", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env", + "hideEmails": "Hide all emails", + "showEmails": "Show all emails", + "noModelsMatch": "No models match \"{filter}\"" }, "settings": { "title": "Asetukset", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Kääntäjä", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Odotetaan OpenAI-valtuutusta...", "waitingForAntigravityAuthorization": "Odotetaan antigravitaatiovaltuutusta...", "waitingForQoderAuthorization": "Odotetaan Qoder-valtuutusta...", - "exchangingCodeForTokens": "Vaihdetaan koodia tokeneihin..." + "exchangingCodeForTokens": "Vaihdetaan koodia tokeneihin...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "cacheRateDesc": "of total requests", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "semanticCache": "Semantic Cache", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cacheRate": "Cache Rate", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "entriesLoadError": "Failed to load semantic cache entries.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "hoursTracked": "hours tracked", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "busiestHour": "Busiest Hour", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "peakCacheRate": "Peak Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "trendHour": "Hour", + "lastUpdated": "Last updated", + "activityVolume": "Activity" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 3072df5553..b8fa16a98f 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Échec de l'enregistrement des prix", "Failed to reset pricing": "Échec de la réinitialisation des prix", "apikey": "Clé API", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Accueil", @@ -640,7 +643,8 @@ "opencode": "À utiliser lorsque vous préférez les exécutions d'agents natifs du terminal et l'automatisation par script via OpenCode.", "kiro": "À utiliser lors de l'intégration de Kiro et du contrôle centralisé du routage de modèles à partir d'OmniRoute.", "antigravity": "À utiliser lorsque le trafic Antigravity/Kiro doit être intercepté via MITM et acheminé vers OmniRoute.", - "copilot": "À utiliser lorsque vous souhaitez une UX de style chat Copilot tout en appliquant les clés OmniRoute et les règles de routage." + "copilot": "À utiliser lorsque vous souhaitez une UX de style chat Copilot tout en appliquant les clés OmniRoute et les règles de routage.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE Google Antigravity avec MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewAdvanced": "Advanced Settings", + "builderStage": { + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "builderProviderFirst": "Pick provider first", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderAddStep": "Add step", + "filterIntelligent": "Intelligent", + "failedReorder": "Failed to reorder models", + "providerScores": "Provider Scores", + "reviewIntelligentTitle": "Intelligent Routing Config", + "filterDeterministic": "Deterministic", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "noExcludedProviders": "No providers are currently excluded.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "reviewNoSteps": "No steps configured", + "builderComboRef": "Combo Ref", + "builderStageVisited": "Stage completed", + "builderComboRefStep": "Add combo reference", + "builderSelectProvider": "Select provider", + "builderStagePending": "Pending", + "candidatePoolEmpty": "No active providers available yet.", + "reviewSteps": "Steps", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderLegacyEntry": "Legacy entry", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderAccount": "Account", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "emailVisibilityStateOff": "Off", + "weightTierPriority": "Tier", + "weightCostInv": "Cost", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewName": "Name", + "builderLoadingProviders": "Loading providers...", + "routerStrategyLabel": "Router Strategy", + "builderFlowTitle": "Combo Builder Flow", + "weightStability": "Stability", + "explorationRateLabel": "Exploration Rate", + "activeModePack": "Active Mode Pack", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "excludedProviders": "Excluded Providers", + "builderSelectModel": "Select model", + "weightQuota": "Quota", + "reviewSequence": "Model Sequence", + "builderAddComboRef": "Add combo reference", + "contextRelayHandoffThreshold": "Handoff Threshold", + "filterAll": "All", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderStageLocked": "Locked — complete previous stage first", + "weightHealth": "Health", + "budgetCapLabel": "Budget Cap (USD / request)", + "reviewComboRefs": "Combo References", + "budgetCapPlaceholder": "No limit", + "builderProvider": "Provider", + "builderBrowseCatalog": "Browse catalog", + "builderStageCurrent": "Current stage", + "incidentMode": "Incident Mode", + "contextRelaySummaryModel": "Summary Model", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "weightLatencyInv": "Latency", + "builderPreview": "Preview", + "candidatePoolAllProviders": "All providers", + "filterEmptyTitle": "No combos match this strategy filter.", + "reviewAgentFlags": "Agent Flags", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "weightTaskFit": "Task Fit", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "contextRelay": "Context Relay", + "statusOverview": "Status Overview", + "modePackUpdated": "Mode pack updated to {pack}.", + "reorderHandle": "Drag to reorder", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "builderTitle": "Build a Combo", + "candidatePoolLabel": "Candidate Pool", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "modePackLabel": "Mode Pack", + "reviewStrategy": "Strategy", + "strategyRules": "Rules (6-Factor Scoring)", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "reviewProviders": "Providers", + "reviewAccounts": "Accounts", + "builderModel": "Model", + "normalOperation": "Normal Operation", + "emailVisibilityStateOn": "On", + "builderPinnedAccount": "Pinned Account" }, "costs": { "title": "Coûts", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Envoyez des requêtes JSON-RPC à `POST /a2a` en utilisant `message/send` ou `message/stream`.", "a2aQuickStartStep3": "Suivez et contrôlez les tâches à l’aide de `tasks/get` et `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioTranscriptions": "Audio Transcriptions", + "noModelsMatch": "No models match \"{filter}\"", + "showEmails": "Show all emails", + "selectAllModels": "Select all", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "audioSpeech": "Audio Speech", + "modelsActiveCount": "{active}/{total} active", + "repairEnvSuccess": "OAuth defaults restored", + "repairEnvWorking": "Repairing...", + "hideEmails": "Hide all emails", + "repairEnv": "Repair env", + "deselectAllModels": "Deselect all", + "embeddings": "Embeddings", + "repairEnvFailed": "Failed to repair .env", + "imagesGenerations": "Images Generations" }, "settings": { "title": "Paramètres", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Traducteur", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "trendHour": "Hour", + "cacheRateDesc": "of total requests", + "peakCacheRate": "Peak Cache Rate", + "activityVolume": "Activity", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cachedRequests24h": "Cached Requests (24h)", + "cacheRate": "Cache Rate", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "semanticCache": "Semantic Cache", + "lastUpdated": "Last updated", + "hoursTracked": "hours tracked", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "busiestHour": "Busiest Hour", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 515b907964..07144cec07 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -136,7 +136,10 @@ "Failed to save pricing": "חיסכון במחיר נכשל", "Failed to reset pricing": "איפוס התמחור נכשל", "apikey": "מפתח API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "בית", @@ -640,7 +643,8 @@ "opencode": "השתמש כאשר אתה מעדיף ריצות סוכנים מקוריים ומאוטומציה של סקריפטים באמצעות OpenCode.", "kiro": "השתמש בעת שילוב Kiro ושליטה בניתוב מודלים באופן מרכזי מ- OmniRoute.", "antigravity": "השתמש כאשר יש ליירט תעבורת Antigravity/Kiro דרך MITM ולנתב אל OmniRoute.", - "copilot": "השתמש כאשר אתה רוצה UX בסגנון צ'אט Copilot תוך אכיפת מפתחות וכללי ניתוב OmniRoute." + "copilot": "השתמש כאשר אתה רוצה UX בסגנון צ'אט Copilot תוך אכיפת מפתחות וכללי ניתוב OmniRoute.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE עם MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "explorationRateLabel": "Exploration Rate", + "weightTaskFit": "Task Fit", + "builderBrowseCatalog": "Browse catalog", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderFlowTitle": "Combo Builder Flow", + "weightHealth": "Health", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "budgetCapPlaceholder": "No limit", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "providerScores": "Provider Scores", + "builderPreview": "Preview", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "builderStageVisited": "Stage completed", + "weightLatencyInv": "Latency", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "cooldownMinutes": "Cooldown: {minutes}m", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderProvider": "Provider", + "failedReorder": "Failed to reorder models", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderStage": { + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + } + }, + "reviewSteps": "Steps", + "builderLoadingProviders": "Loading providers...", + "weightCostInv": "Cost", + "builderAccount": "Account", + "activeModePack": "Active Mode Pack", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "routerStrategyLabel": "Router Strategy", + "reviewAccounts": "Accounts", + "builderStageLocked": "Locked — complete previous stage first", + "reviewStrategy": "Strategy", + "builderProviderFirst": "Pick provider first", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderAddComboRef": "Add combo reference", + "contextRelay": "Context Relay", + "incidentMode": "Incident Mode", + "builderSelectModel": "Select model", + "builderComboRef": "Combo Ref", + "strategyRules": "Rules (6-Factor Scoring)", + "builderStagePending": "Pending", + "reviewAgentFlags": "Agent Flags", + "budgetCapLabel": "Budget Cap (USD / request)", + "normalOperation": "Normal Operation", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderTitle": "Build a Combo", + "reviewIntelligentTitle": "Intelligent Routing Config", + "emailVisibilityStateOff": "Off", + "filterAll": "All", + "builderStageCurrent": "Current stage", + "builderModel": "Model", + "weightStability": "Stability", + "excludedProviders": "Excluded Providers", + "builderLegacyEntry": "Legacy entry", + "builderPinnedAccount": "Pinned Account", + "contextRelaySummaryModel": "Summary Model", + "candidatePoolEmpty": "No active providers available yet.", + "candidatePoolAllProviders": "All providers", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "reorderHandle": "Drag to reorder", + "noExcludedProviders": "No providers are currently excluded.", + "emailVisibilityStateOn": "On", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "modePackLabel": "Mode Pack", + "weightQuota": "Quota", + "builderSelectProvider": "Select provider", + "candidatePoolLabel": "Candidate Pool", + "filterDeterministic": "Deterministic", + "reviewName": "Name", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderAddStep": "Add step", + "reviewAdvanced": "Advanced Settings", + "reviewSequence": "Model Sequence", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "statusOverview": "Status Overview", + "builderComboRefStep": "Add combo reference", + "filterIntelligent": "Intelligent", + "reviewNoSteps": "No steps configured", + "reviewComboRefs": "Combo References", + "reviewProviders": "Providers", + "weightTierPriority": "Tier", + "filterEmptyTitle": "No combos match this strategy filter." }, "costs": { "title": "עלויות", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnvFailed": "Failed to repair .env", + "showEmails": "Show all emails", + "noModelsMatch": "No models match \"{filter}\"", + "deselectAllModels": "Deselect all", + "modelsActiveCount": "{active}/{total} active", + "repairEnvSuccess": "OAuth defaults restored", + "imagesGenerations": "Images Generations", + "embeddings": "Embeddings", + "audioSpeech": "Audio Speech", + "hideEmails": "Hide all emails", + "audioTranscriptions": "Audio Transcriptions", + "selectAllModels": "Select all", + "repairEnv": "Repair env", + "repairEnvWorking": "Repairing...", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values." }, "settings": { "title": "הגדרות", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "מתרגם", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "ממתין להרשאת OpenAI...", "waitingForAntigravityAuthorization": "ממתין לאישור נגד כבידה...", "waitingForQoderAuthorization": "ממתין להרשאת Qoder...", - "exchangingCodeForTokens": "מחליף קוד לאסימונים..." + "exchangingCodeForTokens": "מחליף קוד לאסימונים...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "trendHour": "Hour", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "semanticCache": "Semantic Cache", + "cacheRateDesc": "of total requests", + "activityVolume": "Activity", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "lastUpdated": "Last updated", + "cacheRate": "Cache Rate", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "busiestHour": "Busiest Hour", + "entriesLoadError": "Failed to load semantic cache entries.", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "peakCacheRate": "Peak Cache Rate", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "hoursTracked": "hours tracked", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index efb23337e5..552f50cd4a 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Failed to save pricing", "Failed to reset pricing": "Failed to reset pricing", "apikey": "API Key", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "घर", @@ -640,7 +643,8 @@ "opencode": "जब आप ओपनकोड के माध्यम से टर्मिनल-नेटिव एजेंट रन और स्क्रिप्टेड ऑटोमेशन पसंद करते हैं तो इसका उपयोग करें।", "kiro": "किरो को एकीकृत करते समय और ओमनीरूट से केंद्रीय रूप से मॉडल रूटिंग को नियंत्रित करते समय उपयोग करें।", "antigravity": "इसका उपयोग तब करें जब एंटीग्रेविटी/किरो ट्रैफिक को एमआईटीएम के माध्यम से रोका जाना चाहिए और ओमनीरूट पर भेजा जाना चाहिए।", - "copilot": "जब आप ओम्निरूट कुंजी और रूटिंग नियमों को लागू करते समय कोपायलट चैट शैली यूएक्स चाहते हैं तो इसका उपयोग करें।" + "copilot": "जब आप ओम्निरूट कुंजी और रूटिंग नियमों को लागू करते समय कोपायलट चैट शैली यूएक्स चाहते हैं तो इसका उपयोग करें।", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "एमआईटीएम के साथ गूगल एंटीग्रेविटी आईडीई", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "activeModePack": "Active Mode Pack", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "reviewAccounts": "Accounts", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderTitle": "Build a Combo", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewProviders": "Providers", + "builderModel": "Model", + "weightHealth": "Health", + "weightStability": "Stability", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "emailVisibilityStateOff": "Off", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "candidatePoolAllProviders": "All providers", + "routerStrategyLabel": "Router Strategy", + "builderBrowseCatalog": "Browse catalog", + "builderStage": { + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + } + }, + "builderProviderFirst": "Pick provider first", + "reviewNoSteps": "No steps configured", + "contextRelayHandoffThreshold": "Handoff Threshold", + "builderFlowTitle": "Combo Builder Flow", + "builderPinnedAccount": "Pinned Account", + "builderStageLocked": "Locked — complete previous stage first", + "filterDeterministic": "Deterministic", + "candidatePoolLabel": "Candidate Pool", + "contextRelay": "Context Relay", + "reorderHandle": "Drag to reorder", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderAccount": "Account", + "builderAddComboRef": "Add combo reference", + "reviewAdvanced": "Advanced Settings", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderPreview": "Preview", + "noExcludedProviders": "No providers are currently excluded.", + "statusOverview": "Status Overview", + "reviewName": "Name", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "reviewSequence": "Model Sequence", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderComboRefStep": "Add combo reference", + "weightLatencyInv": "Latency", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "weightTierPriority": "Tier", + "modePackLabel": "Mode Pack", + "builderAddStep": "Add step", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderLegacyEntry": "Legacy entry", + "explorationRateLabel": "Exploration Rate", + "filterAll": "All", + "builderStageCurrent": "Current stage", + "filterIntelligent": "Intelligent", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "weightTaskFit": "Task Fit", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderStagePending": "Pending", + "budgetCapPlaceholder": "No limit", + "weightQuota": "Quota", + "reviewAgentFlags": "Agent Flags", + "builderStageVisited": "Stage completed", + "providerScores": "Provider Scores", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "strategyRules": "Rules (6-Factor Scoring)", + "normalOperation": "Normal Operation", + "builderSelectModel": "Select model", + "builderLoadingProviders": "Loading providers...", + "builderComboRef": "Combo Ref", + "failedReorder": "Failed to reorder models", + "builderSelectProvider": "Select provider", + "weightCostInv": "Cost", + "emailVisibilityStateOn": "On", + "reviewIntelligentTitle": "Intelligent Routing Config", + "candidatePoolEmpty": "No active providers available yet.", + "reviewStrategy": "Strategy", + "reviewComboRefs": "Combo References", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderProvider": "Provider", + "incidentMode": "Incident Mode", + "reviewSteps": "Steps", + "excludedProviders": "Excluded Providers" }, "costs": { "title": "लागत", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "noModelsMatch": "No models match \"{filter}\"", + "hideEmails": "Hide all emails", + "imagesGenerations": "Images Generations", + "repairEnvFailed": "Failed to repair .env", + "repairEnvWorking": "Repairing...", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "selectAllModels": "Select all", + "embeddings": "Embeddings", + "deselectAllModels": "Deselect all", + "repairEnv": "Repair env", + "repairEnvSuccess": "OAuth defaults restored", + "audioSpeech": "Audio Speech", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active", + "audioTranscriptions": "Audio Transcriptions" }, "settings": { "title": "सेटिंग्स", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "अनुवादक", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "ओम्निरूट", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "semanticCache": "Semantic Cache", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "entriesLoadError": "Failed to load semantic cache entries.", + "peakCacheRate": "Peak Cache Rate", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "activityVolume": "Activity", + "lastUpdated": "Last updated", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "cacheRate": "Cache Rate", + "trendHour": "Hour", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "hoursTracked": "hours tracked", + "cacheRateDesc": "of total requests", + "busiestHour": "Busiest Hour" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 38d83d27a5..aa6efb9074 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Nem sikerült menteni az árakat", "Failed to reset pricing": "Nem sikerült visszaállítani az árakat", "apikey": "API kulcs", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Otthon", @@ -640,7 +643,8 @@ "opencode": "Akkor használja, ha a terminál-natív ügynökfuttatásokat és az OpenCode-on keresztüli parancsfájl-automatizálást részesíti előnyben.", "kiro": "Használja a Kiro integrálásához és a modell-útválasztás központi vezérléséhez az OmniRoute-ból.", "antigravity": "Akkor használja, ha az Antigravity/Kiro forgalmat MITM-en keresztül kell elfogni, és az OmniRoute-hoz kell irányítani.", - "copilot": "Használja, ha másodpilóta csevegési stílusú UX-et szeretne, miközben betartja az OmniRoute kulcsokat és útválasztási szabályokat." + "copilot": "Használja, ha másodpilóta csevegési stílusú UX-et szeretne, miközben betartja az OmniRoute kulcsokat és útválasztási szabályokat.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE MITM-mel", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "reviewIntelligentTitle": "Intelligent Routing Config", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderProvider": "Provider", + "weightTierPriority": "Tier", + "builderComboRefStep": "Add combo reference", + "builderStage": { + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "normalOperation": "Normal Operation", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderProviderFirst": "Pick provider first", + "reorderHandle": "Drag to reorder", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "weightHealth": "Health", + "reviewStrategy": "Strategy", + "reviewSteps": "Steps", + "builderSelectProvider": "Select provider", + "routerStrategyLabel": "Router Strategy", + "candidatePoolAllProviders": "All providers", + "modePackLabel": "Mode Pack", + "builderStagePending": "Pending", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "filterIntelligent": "Intelligent", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelaySummaryModel": "Summary Model", + "builderTitle": "Build a Combo", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "reviewAdvanced": "Advanced Settings", + "emailVisibilityStateOn": "On", + "builderStageCurrent": "Current stage", + "candidatePoolLabel": "Candidate Pool", + "weightTaskFit": "Task Fit", + "builderLegacyEntry": "Legacy entry", + "explorationRateLabel": "Exploration Rate", + "builderBrowseCatalog": "Browse catalog", + "incidentMode": "Incident Mode", + "builderAddStep": "Add step", + "builderFlowTitle": "Combo Builder Flow", + "reviewSequence": "Model Sequence", + "builderStageVisited": "Stage completed", + "noExcludedProviders": "No providers are currently excluded.", + "builderModel": "Model", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "reviewNoSteps": "No steps configured", + "modePackUpdated": "Mode pack updated to {pack}.", + "weightStability": "Stability", + "strategyRules": "Rules (6-Factor Scoring)", + "candidatePoolEmpty": "No active providers available yet.", + "providerScores": "Provider Scores", + "reviewAccounts": "Accounts", + "weightQuota": "Quota", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "failedReorder": "Failed to reorder models", + "weightCostInv": "Cost", + "builderPinnedAccount": "Pinned Account", + "weightLatencyInv": "Latency", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "excludedProviders": "Excluded Providers", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "cooldownMinutes": "Cooldown: {minutes}m", + "activeModePack": "Active Mode Pack", + "reviewProviders": "Providers", + "builderComboRef": "Combo Ref", + "budgetCapPlaceholder": "No limit", + "builderAccount": "Account", + "statusOverview": "Status Overview", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderAddComboRef": "Add combo reference", + "builderStageLocked": "Locked — complete previous stage first", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelayMaxMessages": "Max Messages For Summary", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderSelectModel": "Select model", + "emailVisibilityStateOff": "Off", + "filterEmptyTitle": "No combos match this strategy filter.", + "filterAll": "All", + "reviewAgentFlags": "Agent Flags", + "reviewComboRefs": "Combo References", + "builderPreview": "Preview", + "contextRelayHandoffThreshold": "Handoff Threshold", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderLoadingProviders": "Loading providers...", + "reviewName": "Name", + "contextRelay": "Context Relay", + "filterDeterministic": "Deterministic", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "intelligentPanelTitle": "Intelligent Routing Dashboard" }, "costs": { "title": "Költségek", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Kövesse nyomon és vezérelje a feladatokat a `tasks/get` és `tasks/cancel` használatával.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioSpeech": "Audio Speech", + "deselectAllModels": "Deselect all", + "repairEnvFailed": "Failed to repair .env", + "repairEnvWorking": "Repairing...", + "hideEmails": "Hide all emails", + "noModelsMatch": "No models match \"{filter}\"", + "showEmails": "Show all emails", + "repairEnvSuccess": "OAuth defaults restored", + "modelsActiveCount": "{active}/{total} active", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnv": "Repair env", + "embeddings": "Embeddings", + "imagesGenerations": "Images Generations", + "audioTranscriptions": "Audio Transcriptions", + "selectAllModels": "Select all" }, "settings": { "title": "Beállítások elemre", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Fordító", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Várakozás az OpenAI engedélyezésére...", "waitingForAntigravityAuthorization": "Várakozás az Antigravitációs engedélyezésre...", "waitingForQoderAuthorization": "Várakozás az Qoder engedélyezésére...", - "exchangingCodeForTokens": "Kód cseréje tokenre..." + "exchangingCodeForTokens": "Kód cseréje tokenre...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "hoursTracked": "hours tracked", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "semanticCache": "Semantic Cache", + "cacheRate": "Cache Rate", + "lastUpdated": "Last updated", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cacheRateDesc": "of total requests", + "trendHour": "Hour", + "cachedRequests24h": "Cached Requests (24h)", + "activityVolume": "Activity", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "peakCacheRate": "Peak Cache Rate", + "busiestHour": "Busiest Hour", + "entriesLoadError": "Failed to load semantic cache entries.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 6f0175dfb2..612a25f133 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Gagal menyimpan harga", "Failed to reset pricing": "Gagal menyetel ulang harga", "apikey": "Kunci API", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Rumah", @@ -640,7 +643,8 @@ "opencode": "Gunakan saat Anda lebih suka menjalankan agen terminal-asli dan otomatisasi skrip melalui OpenCode.", "kiro": "Gunakan saat mengintegrasikan Kiro dan mengontrol perutean model secara terpusat dari OmniRoute.", "antigravity": "Gunakan ketika lalu lintas Antigravitasi/Kiro harus dicegat melalui MITM dan dialihkan ke OmniRoute.", - "copilot": "Gunakan saat Anda menginginkan UX gaya obrolan kopilot sambil menerapkan kunci OmniRoute dan aturan perutean." + "copilot": "Gunakan saat Anda menginginkan UX gaya obrolan kopilot sambil menerapkan kunci OmniRoute dan aturan perutean.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE Antigravitasi Google dengan MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "incidentMode": "Incident Mode", + "builderLoadingProviders": "Loading providers...", + "builderTitle": "Build a Combo", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "reviewSteps": "Steps", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + } + }, + "reviewAdvanced": "Advanced Settings", + "builderComboRefStep": "Add combo reference", + "builderProvider": "Provider", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "weightStability": "Stability", + "builderStageCurrent": "Current stage", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "activeModePack": "Active Mode Pack", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderSelectModel": "Select model", + "reviewSequence": "Model Sequence", + "noExcludedProviders": "No providers are currently excluded.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderSelectProvider": "Select provider", + "budgetCapLabel": "Budget Cap (USD / request)", + "excludedProviders": "Excluded Providers", + "builderStagePending": "Pending", + "reviewNoSteps": "No steps configured", + "reviewStrategy": "Strategy", + "candidatePoolEmpty": "No active providers available yet.", + "weightQuota": "Quota", + "budgetCapPlaceholder": "No limit", + "builderStageLocked": "Locked — complete previous stage first", + "failedReorder": "Failed to reorder models", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "weightCostInv": "Cost", + "builderLegacyEntry": "Legacy entry", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "weightHealth": "Health", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "reviewComboRefs": "Combo References", + "weightTierPriority": "Tier", + "statusOverview": "Status Overview", + "explorationRateLabel": "Exploration Rate", + "emailVisibilityStateOn": "On", + "candidatePoolLabel": "Candidate Pool", + "reorderHandle": "Drag to reorder", + "builderModel": "Model", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewIntelligentTitle": "Intelligent Routing Config", + "reviewProviders": "Providers", + "contextRelaySummaryModel": "Summary Model", + "normalOperation": "Normal Operation", + "strategyRules": "Rules (6-Factor Scoring)", + "filterDeterministic": "Deterministic", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderBrowseCatalog": "Browse catalog", + "contextRelayMaxMessages": "Max Messages For Summary", + "weightTaskFit": "Task Fit", + "builderAddStep": "Add step", + "reviewName": "Name", + "providerScores": "Provider Scores", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderPinnedAccount": "Pinned Account", + "builderAddComboRef": "Add combo reference", + "builderAccount": "Account", + "filterIntelligent": "Intelligent", + "contextRelay": "Context Relay", + "builderFlowTitle": "Combo Builder Flow", + "builderStageVisited": "Stage completed", + "modePackLabel": "Mode Pack", + "routerStrategyLabel": "Router Strategy", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderPreview": "Preview", + "emailVisibilityStateOff": "Off", + "filterAll": "All", + "builderComboRef": "Combo Ref", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderProviderFirst": "Pick provider first", + "candidatePoolAllProviders": "All providers", + "reviewAgentFlags": "Agent Flags", + "weightLatencyInv": "Latency", + "reviewAccounts": "Accounts", + "filterEmptyTitle": "No combos match this strategy filter.", + "modePackUpdated": "Mode pack updated to {pack}.", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "costs": { "title": "Biaya", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "deselectAllModels": "Deselect all", + "repairEnvFailed": "Failed to repair .env", + "modelsActiveCount": "{active}/{total} active", + "audioSpeech": "Audio Speech", + "selectAllModels": "Select all", + "repairEnvWorking": "Repairing...", + "hideEmails": "Hide all emails", + "repairEnv": "Repair env", + "repairEnvSuccess": "OAuth defaults restored", + "embeddings": "Embeddings", + "showEmails": "Show all emails", + "imagesGenerations": "Images Generations", + "noModelsMatch": "No models match \"{filter}\"", + "audioTranscriptions": "Audio Transcriptions" }, "settings": { "title": "Pengaturan", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Penerjemah", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "activityVolume": "Activity", + "cacheRateDesc": "of total requests", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "peakCacheRate": "Peak Cache Rate", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "trendHour": "Hour", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "cacheRate": "Cache Rate", + "entriesLoadError": "Failed to load semantic cache entries.", + "cachedRequests24h": "Cached Requests (24h)", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticCache": "Semantic Cache", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "hoursTracked": "hours tracked", + "lastUpdated": "Last updated", + "busiestHour": "Busiest Hour", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index b648335ffb..f27cc80e37 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Impossibile salvare i prezzi", "Failed to reset pricing": "Impossibile reimpostare i prezzi", "apikey": "Chiave API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Casa", @@ -640,7 +643,8 @@ "opencode": "Utilizzalo quando preferisci l'esecuzione dell'agente nativo del terminale e l'automazione basata su script tramite OpenCode.", "kiro": "Da utilizzare quando si integra Kiro e si controlla l'instradamento del modello centralmente da OmniRoute.", "antigravity": "Da utilizzare quando il traffico Antigravity/Kiro deve essere intercettato tramite MITM e instradato a OmniRoute.", - "copilot": "Utilizzalo quando desideri un'esperienza utente in stile chat Copilot applicando al tempo stesso le chiavi OmniRoute e le regole di routing." + "copilot": "Utilizzalo quando desideri un'esperienza utente in stile chat Copilot applicando al tempo stesso le chiavi OmniRoute e le regole di routing.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE Antigravità di Google con MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "reorderHandle": "Drag to reorder", + "builderComboRef": "Combo Ref", + "builderStage": { + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + } + }, + "budgetCapLabel": "Budget Cap (USD / request)", + "reviewIntelligentTitle": "Intelligent Routing Config", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderProviderFirst": "Pick provider first", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "emailVisibilityStateOff": "Off", + "reviewProviders": "Providers", + "builderAddStep": "Add step", + "candidatePoolAllProviders": "All providers", + "builderBrowseCatalog": "Browse catalog", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "strategyRules": "Rules (6-Factor Scoring)", + "builderTitle": "Build a Combo", + "statusOverview": "Status Overview", + "modePackUpdated": "Mode pack updated to {pack}.", + "reviewNoSteps": "No steps configured", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderStageCurrent": "Current stage", + "reviewSequence": "Model Sequence", + "filterDeterministic": "Deterministic", + "reviewStrategy": "Strategy", + "builderPreview": "Preview", + "budgetCapPlaceholder": "No limit", + "candidatePoolEmpty": "No active providers available yet.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderFlowTitle": "Combo Builder Flow", + "weightTierPriority": "Tier", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderComboRefStep": "Add combo reference", + "filterEmptyTitle": "No combos match this strategy filter.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderSelectModel": "Select model", + "reviewSteps": "Steps", + "cooldownMinutes": "Cooldown: {minutes}m", + "weightQuota": "Quota", + "activeModePack": "Active Mode Pack", + "explorationRateLabel": "Exploration Rate", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderAddComboRef": "Add combo reference", + "builderPinnedAccount": "Pinned Account", + "normalOperation": "Normal Operation", + "failedReorder": "Failed to reorder models", + "reviewAgentFlags": "Agent Flags", + "weightTaskFit": "Task Fit", + "builderModel": "Model", + "reviewComboRefs": "Combo References", + "modePackLabel": "Mode Pack", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderAccount": "Account", + "reviewAdvanced": "Advanced Settings", + "filterAll": "All", + "weightHealth": "Health", + "excludedProviders": "Excluded Providers", + "weightStability": "Stability", + "builderProvider": "Provider", + "candidatePoolLabel": "Candidate Pool", + "weightLatencyInv": "Latency", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "filterIntelligent": "Intelligent", + "builderLegacyEntry": "Legacy entry", + "builderSelectProvider": "Select provider", + "incidentMode": "Incident Mode", + "contextRelaySummaryModel": "Summary Model", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderStageLocked": "Locked — complete previous stage first", + "providerScores": "Provider Scores", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderLoadingProviders": "Loading providers...", + "builderStageVisited": "Stage completed", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderStagePending": "Pending", + "reviewName": "Name", + "noExcludedProviders": "No providers are currently excluded.", + "emailVisibilityStateOn": "On", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "contextRelay": "Context Relay", + "reviewAccounts": "Accounts", + "weightCostInv": "Cost", + "routerStrategyLabel": "Router Strategy", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model." }, "costs": { "title": "Costi", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "imagesGenerations": "Images Generations", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "noModelsMatch": "No models match \"{filter}\"", + "audioTranscriptions": "Audio Transcriptions", + "deselectAllModels": "Deselect all", + "repairEnvSuccess": "OAuth defaults restored", + "modelsActiveCount": "{active}/{total} active", + "selectAllModels": "Select all", + "audioSpeech": "Audio Speech", + "repairEnv": "Repair env", + "repairEnvFailed": "Failed to repair .env", + "hideEmails": "Hide all emails", + "repairEnvWorking": "Repairing...", + "embeddings": "Embeddings", + "showEmails": "Show all emails" }, "settings": { "title": "Impostazioni", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "Traduttore", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "hoursTracked": "hours tracked", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "activityVolume": "Activity", + "peakCacheRate": "Peak Cache Rate", + "trendHour": "Hour", + "cacheRateDesc": "of total requests", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "cacheRate": "Cache Rate", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "busiestHour": "Busiest Hour", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "cachedRequests24h": "Cached Requests (24h)", + "lastUpdated": "Last updated", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCache": "Semantic Cache", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 95879f738e..db75bb02cc 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -136,7 +136,10 @@ "Failed to save pricing": "価格設定を保存できませんでした", "Failed to reset pricing": "価格設定のリセットに失敗しました", "apikey": "APIキー", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "ホーム", @@ -640,7 +643,8 @@ "opencode": "ターミナルネイティブのエージェントの実行と OpenCode によるスクリプトによる自動化を希望する場合に使用します。", "kiro": "Kiro を統合し、OmniRoute からモデルのルーティングを一元的に制御する場合に使用します。", "antigravity": "Antigravity/Kiro トラフィックを MITM 経由でインターセプトし、OmniRoute にルーティングする必要がある場合に使用します。", - "copilot": "OmniRoute キーとルーティング ルールを適用しながら、Copilot チャット スタイルの UX が必要な場合に使用します。" + "copilot": "OmniRoute キーとルーティング ルールを適用しながら、Copilot チャット スタイルの UX が必要な場合に使用します。", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "MITM を備えた Google Antigravity IDE", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "explorationRateLabel": "Exploration Rate", + "builderFlowTitle": "Combo Builder Flow", + "builderStage": { + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + } + }, + "budgetCapLabel": "Budget Cap (USD / request)", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderBrowseCatalog": "Browse catalog", + "builderSelectModel": "Select model", + "emailVisibilityStateOff": "Off", + "noExcludedProviders": "No providers are currently excluded.", + "excludedProviders": "Excluded Providers", + "modePackUpdated": "Mode pack updated to {pack}.", + "statusOverview": "Status Overview", + "builderStageLocked": "Locked — complete previous stage first", + "builderPinnedAccount": "Pinned Account", + "reviewIntelligentTitle": "Intelligent Routing Config", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "reviewStrategy": "Strategy", + "normalOperation": "Normal Operation", + "weightStability": "Stability", + "contextRelaySummaryModel": "Summary Model", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "incidentMode": "Incident Mode", + "candidatePoolEmpty": "No active providers available yet.", + "reviewProviders": "Providers", + "strategyRules": "Rules (6-Factor Scoring)", + "builderAddComboRef": "Add combo reference", + "candidatePoolAllProviders": "All providers", + "contextRelay": "Context Relay", + "filterAll": "All", + "weightTaskFit": "Task Fit", + "weightTierPriority": "Tier", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "weightQuota": "Quota", + "builderComboRef": "Combo Ref", + "weightCostInv": "Cost", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "candidatePoolLabel": "Candidate Pool", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "filterIntelligent": "Intelligent", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderStageCurrent": "Current stage", + "weightHealth": "Health", + "builderComboRefStep": "Add combo reference", + "reviewComboRefs": "Combo References", + "builderPreview": "Preview", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderProvider": "Provider", + "reviewSequence": "Model Sequence", + "filterDeterministic": "Deterministic", + "builderProviderFirst": "Pick provider first", + "modePackLabel": "Mode Pack", + "reviewAccounts": "Accounts", + "builderLoadingProviders": "Loading providers...", + "providerScores": "Provider Scores", + "builderModel": "Model", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "failedReorder": "Failed to reorder models", + "builderLegacyEntry": "Legacy entry", + "routerStrategyLabel": "Router Strategy", + "activeModePack": "Active Mode Pack", + "builderStagePending": "Pending", + "reorderHandle": "Drag to reorder", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewAdvanced": "Advanced Settings", + "weightLatencyInv": "Latency", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "reviewSteps": "Steps", + "budgetCapPlaceholder": "No limit", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderAddStep": "Add step", + "builderStageVisited": "Stage completed", + "builderAccount": "Account", + "reviewName": "Name", + "builderSelectProvider": "Select provider", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderTitle": "Build a Combo", + "reviewAgentFlags": "Agent Flags", + "emailVisibilityStateOn": "On", + "contextRelayMaxMessages": "Max Messages For Summary", + "reviewNoSteps": "No steps configured", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity." }, "costs": { "title": "コスト", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "エンドポイント プロキシ", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "embeddings": "Embeddings", + "repairEnvSuccess": "OAuth defaults restored", + "audioSpeech": "Audio Speech", + "repairEnvWorking": "Repairing...", + "audioTranscriptions": "Audio Transcriptions", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvFailed": "Failed to repair .env", + "imagesGenerations": "Images Generations", + "showEmails": "Show all emails", + "repairEnv": "Repair env", + "deselectAllModels": "Deselect all", + "selectAllModels": "Select all", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "modelsActiveCount": "{active}/{total} active", + "hideEmails": "Hide all emails" }, "settings": { "title": "設定", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "翻訳者", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "オムニルート", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "cachedRequests24h": "Cached Requests (24h)", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "trendHour": "Hour", + "cacheRate": "Cache Rate", + "hoursTracked": "hours tracked", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "activityVolume": "Activity", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "peakCacheRate": "Peak Cache Rate", + "lastUpdated": "Last updated", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "busiestHour": "Busiest Hour", + "semanticCache": "Semantic Cache", + "cacheRateDesc": "of total requests", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 7c38183270..5400bd1d3e 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -136,7 +136,10 @@ "Failed to save pricing": "가격을 저장하지 못했습니다.", "Failed to reset pricing": "가격을 재설정하지 못했습니다.", "apikey": "API 키", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "홈", @@ -640,7 +643,8 @@ "opencode": "OpenCode를 통해 터미널 기반 에이전트 실행 및 스크립트 자동화를 선호할 때 사용하세요.", "kiro": "Kiro를 통합하고 OmniRoute에서 중앙에서 모델 라우팅을 제어할 때 사용합니다.", "antigravity": "Antigravity/Kiro 트래픽이 MITM을 통해 가로채어 OmniRoute로 라우팅되어야 하는 경우에 사용합니다.", - "copilot": "OmniRoute 키와 라우팅 규칙을 적용하면서 Copilot 채팅 스타일 UX를 원할 때 사용하세요." + "copilot": "OmniRoute 키와 라우팅 규칙을 적용하면서 Copilot 채팅 스타일 UX를 원할 때 사용하세요.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "MITM이 포함된 Google 반중력 IDE", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "filterAll": "All", + "builderAddComboRef": "Add combo reference", + "cooldownMinutes": "Cooldown: {minutes}m", + "excludedProviders": "Excluded Providers", + "emailVisibilityStateOn": "On", + "builderStage": { + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + } + }, + "builderLoadingProviders": "Loading providers...", + "providerScores": "Provider Scores", + "filterDeterministic": "Deterministic", + "weightCostInv": "Cost", + "builderAddStep": "Add step", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "incidentMode": "Incident Mode", + "builderPinnedAccount": "Pinned Account", + "builderProvider": "Provider", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "weightTierPriority": "Tier", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderStagePending": "Pending", + "reviewAgentFlags": "Agent Flags", + "builderSelectModel": "Select model", + "normalOperation": "Normal Operation", + "builderBrowseCatalog": "Browse catalog", + "modePackUpdated": "Mode pack updated to {pack}.", + "activeModePack": "Active Mode Pack", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "noExcludedProviders": "No providers are currently excluded.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "weightLatencyInv": "Latency", + "weightStability": "Stability", + "builderComboRefStep": "Add combo reference", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "statusOverview": "Status Overview", + "reviewSteps": "Steps", + "failedReorder": "Failed to reorder models", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderSelectProvider": "Select provider", + "builderModel": "Model", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderStageVisited": "Stage completed", + "weightQuota": "Quota", + "builderStageLocked": "Locked — complete previous stage first", + "reviewNoSteps": "No steps configured", + "candidatePoolLabel": "Candidate Pool", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "reviewName": "Name", + "builderProviderFirst": "Pick provider first", + "reviewIntelligentTitle": "Intelligent Routing Config", + "routerStrategyLabel": "Router Strategy", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "weightTaskFit": "Task Fit", + "builderStageCurrent": "Current stage", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "contextRelayMaxMessages": "Max Messages For Summary", + "reviewAccounts": "Accounts", + "reviewProviders": "Providers", + "builderLegacyEntry": "Legacy entry", + "strategyRules": "Rules (6-Factor Scoring)", + "builderPreview": "Preview", + "candidatePoolAllProviders": "All providers", + "builderComboRef": "Combo Ref", + "builderFlowTitle": "Combo Builder Flow", + "builderTitle": "Build a Combo", + "reviewSequence": "Model Sequence", + "filterIntelligent": "Intelligent", + "filterEmptyTitle": "No combos match this strategy filter.", + "budgetCapPlaceholder": "No limit", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "reviewAdvanced": "Advanced Settings", + "weightHealth": "Health", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "candidatePoolEmpty": "No active providers available yet.", + "explorationRateLabel": "Exploration Rate", + "reorderHandle": "Drag to reorder", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "emailVisibilityStateOff": "Off", + "contextRelaySummaryModel": "Summary Model", + "reviewStrategy": "Strategy", + "reviewComboRefs": "Combo References", + "modePackLabel": "Mode Pack", + "contextRelay": "Context Relay", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderAccount": "Account" }, "costs": { "title": "비용", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "엔드포인트 프록시", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "noModelsMatch": "No models match \"{filter}\"", + "embeddings": "Embeddings", + "deselectAllModels": "Deselect all", + "modelsActiveCount": "{active}/{total} active", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnvWorking": "Repairing...", + "imagesGenerations": "Images Generations", + "audioSpeech": "Audio Speech", + "showEmails": "Show all emails", + "audioTranscriptions": "Audio Transcriptions", + "selectAllModels": "Select all", + "repairEnvFailed": "Failed to repair .env", + "hideEmails": "Hide all emails", + "repairEnv": "Repair env", + "repairEnvSuccess": "OAuth defaults restored" }, "settings": { "title": "설정", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "번역기", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "옴니루트", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "hoursTracked": "hours tracked", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cacheRateDesc": "of total requests", + "activityVolume": "Activity", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "cacheRate": "Cache Rate", + "entriesLoadError": "Failed to load semantic cache entries.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCache": "Semantic Cache", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "peakCacheRate": "Peak Cache Rate", + "busiestHour": "Busiest Hour", + "trendHour": "Hour", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "lastUpdated": "Last updated", + "cachedRequests24h": "Cached Requests (24h)" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index ad85d77910..382836ec56 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Gagal menyimpan harga", "Failed to reset pricing": "Gagal menetapkan semula harga", "apikey": "Kunci API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Rumah", @@ -640,7 +643,8 @@ "opencode": "Gunakan apabila anda lebih suka ejen terminal-native run dan automasi skrip melalui OpenCode.", "kiro": "Gunakan apabila menyepadukan Kiro dan mengawal penghalaan model secara berpusat daripada OmniRoute.", "antigravity": "Gunakan apabila trafik Antigraviti/Kiro mesti dipintas melalui MITM dan dihalakan ke OmniRoute.", - "copilot": "Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan." + "copilot": "Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE Antigraviti Google dengan MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "explorationRateLabel": "Exploration Rate", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderStage": { + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + } + }, + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderComboRefStep": "Add combo reference", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderFlowTitle": "Combo Builder Flow", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewAccounts": "Accounts", + "builderAddStep": "Add step", + "strategyRules": "Rules (6-Factor Scoring)", + "statusOverview": "Status Overview", + "reviewNoSteps": "No steps configured", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewAgentFlags": "Agent Flags", + "reviewComboRefs": "Combo References", + "budgetCapPlaceholder": "No limit", + "builderStagePending": "Pending", + "modePackUpdated": "Mode pack updated to {pack}.", + "weightLatencyInv": "Latency", + "emailVisibilityStateOff": "Off", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewIntelligentTitle": "Intelligent Routing Config", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "incidentMode": "Incident Mode", + "builderPinnedAccount": "Pinned Account", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderAddComboRef": "Add combo reference", + "budgetCapLabel": "Budget Cap (USD / request)", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "cooldownMinutes": "Cooldown: {minutes}m", + "filterAll": "All", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "reviewProviders": "Providers", + "providerScores": "Provider Scores", + "reviewSequence": "Model Sequence", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "modePackLabel": "Mode Pack", + "normalOperation": "Normal Operation", + "builderStageVisited": "Stage completed", + "builderProviderFirst": "Pick provider first", + "builderLegacyEntry": "Legacy entry", + "reorderHandle": "Drag to reorder", + "filterIntelligent": "Intelligent", + "activeModePack": "Active Mode Pack", + "contextRelay": "Context Relay", + "filterEmptyTitle": "No combos match this strategy filter.", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "candidatePoolLabel": "Candidate Pool", + "reviewSteps": "Steps", + "weightHealth": "Health", + "builderTitle": "Build a Combo", + "candidatePoolAllProviders": "All providers", + "builderSelectProvider": "Select provider", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "builderComboRef": "Combo Ref", + "weightTaskFit": "Task Fit", + "builderStageCurrent": "Current stage", + "builderBrowseCatalog": "Browse catalog", + "filterDeterministic": "Deterministic", + "builderModel": "Model", + "builderStageLocked": "Locked — complete previous stage first", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "emailVisibilityStateOn": "On", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "weightTierPriority": "Tier", + "builderAccount": "Account", + "builderSelectModel": "Select model", + "builderProvider": "Provider", + "reviewStrategy": "Strategy", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "weightCostInv": "Cost", + "excludedProviders": "Excluded Providers", + "reviewName": "Name", + "weightQuota": "Quota", + "contextRelayHandoffThreshold": "Handoff Threshold", + "candidatePoolEmpty": "No active providers available yet.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderLoadingProviders": "Loading providers...", + "reviewAdvanced": "Advanced Settings", + "weightStability": "Stability", + "noExcludedProviders": "No providers are currently excluded.", + "routerStrategyLabel": "Router Strategy", + "failedReorder": "Failed to reorder models", + "builderPreview": "Preview" }, "costs": { "title": "Kos", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.", "a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "noModelsMatch": "No models match \"{filter}\"", + "deselectAllModels": "Deselect all", + "selectAllModels": "Select all", + "repairEnvFailed": "Failed to repair .env", + "audioSpeech": "Audio Speech", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "audioTranscriptions": "Audio Transcriptions", + "embeddings": "Embeddings", + "modelsActiveCount": "{active}/{total} active", + "repairEnvWorking": "Repairing...", + "imagesGenerations": "Images Generations", + "hideEmails": "Hide all emails", + "repairEnvSuccess": "OAuth defaults restored", + "showEmails": "Show all emails", + "repairEnv": "Repair env" }, "settings": { "title": "tetapan", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Penterjemah", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Menunggu kebenaran OpenAI...", "waitingForAntigravityAuthorization": "Menunggu kebenaran Antigraviti...", "waitingForQoderAuthorization": "Menunggu kebenaran Qoder...", - "exchangingCodeForTokens": "Bertukar kod untuk token..." + "exchangingCodeForTokens": "Bertukar kod untuk token...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCache": "Semantic Cache", + "trendHour": "Hour", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "busiestHour": "Busiest Hour", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "hoursTracked": "hours tracked", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "cacheRate": "Cache Rate", + "activityVolume": "Activity", + "cacheRateDesc": "of total requests", + "peakCacheRate": "Peak Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "lastUpdated": "Last updated" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index d6283c8f04..5f27b4f32e 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Kan de prijzen niet opslaan", "Failed to reset pricing": "Kan de prijzen niet opnieuw instellen", "apikey": "API-sleutel", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Thuis", @@ -640,7 +643,8 @@ "opencode": "Gebruik dit wanneer u de voorkeur geeft aan terminal-native agentruns en scriptautomatisering via OpenCode.", "kiro": "Te gebruiken bij het integreren van Kiro en het centraal beheren van modelrouting vanuit OmniRoute.", "antigravity": "Gebruik wanneer Antigravity/Kiro-verkeer moet worden onderschept via MITM en naar OmniRoute moet worden gerouteerd.", - "copilot": "Gebruik wanneer u UX in Copilot-chatstijl wilt terwijl u OmniRoute-sleutels en routeringsregels afdwingt." + "copilot": "Gebruik wanneer u UX in Copilot-chatstijl wilt terwijl u OmniRoute-sleutels en routeringsregels afdwingt.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE met MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderTitle": "Build a Combo", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "weightTierPriority": "Tier", + "reviewAccounts": "Accounts", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "weightLatencyInv": "Latency", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "reviewAdvanced": "Advanced Settings", + "reviewName": "Name", + "weightQuota": "Quota", + "modePackLabel": "Mode Pack", + "noExcludedProviders": "No providers are currently excluded.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "reorderHandle": "Drag to reorder", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderStage": { + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + } + }, + "builderProvider": "Provider", + "reviewNoSteps": "No steps configured", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "reviewIntelligentTitle": "Intelligent Routing Config", + "activeModePack": "Active Mode Pack", + "builderComboRef": "Combo Ref", + "builderComboRefStep": "Add combo reference", + "builderPreview": "Preview", + "reviewStrategy": "Strategy", + "builderStageLocked": "Locked — complete previous stage first", + "budgetCapPlaceholder": "No limit", + "builderProviderFirst": "Pick provider first", + "reviewProviders": "Providers", + "incidentMode": "Incident Mode", + "reviewSteps": "Steps", + "weightStability": "Stability", + "filterDeterministic": "Deterministic", + "budgetCapLabel": "Budget Cap (USD / request)", + "candidatePoolAllProviders": "All providers", + "builderSelectModel": "Select model", + "routerStrategyLabel": "Router Strategy", + "filterIntelligent": "Intelligent", + "builderLegacyEntry": "Legacy entry", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "filterEmptyTitle": "No combos match this strategy filter.", + "providerScores": "Provider Scores", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "candidatePoolEmpty": "No active providers available yet.", + "normalOperation": "Normal Operation", + "contextRelaySummaryModel": "Summary Model", + "builderAccount": "Account", + "failedReorder": "Failed to reorder models", + "reviewSequence": "Model Sequence", + "builderStageVisited": "Stage completed", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "excludedProviders": "Excluded Providers", + "builderModel": "Model", + "builderAddComboRef": "Add combo reference", + "builderStagePending": "Pending", + "builderPinnedAccount": "Pinned Account", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "weightCostInv": "Cost", + "weightTaskFit": "Task Fit", + "contextRelay": "Context Relay", + "statusOverview": "Status Overview", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderAddStep": "Add step", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderLoadingProviders": "Loading providers...", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderSelectProvider": "Select provider", + "filterAll": "All", + "builderBrowseCatalog": "Browse catalog", + "builderStageCurrent": "Current stage", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "explorationRateLabel": "Exploration Rate", + "builderFlowTitle": "Combo Builder Flow", + "reviewAgentFlags": "Agent Flags", + "emailVisibilityStateOff": "Off", + "strategyRules": "Rules (6-Factor Scoring)", + "reviewComboRefs": "Combo References", + "candidatePoolLabel": "Candidate Pool", + "emailVisibilityStateOn": "On", + "contextRelayHandoffThreshold": "Handoff Threshold", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "cooldownMinutes": "Cooldown: {minutes}m", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "weightHealth": "Health" }, "costs": { "title": "Kosten", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioTranscriptions": "Audio Transcriptions", + "repairEnvFailed": "Failed to repair .env", + "hideEmails": "Hide all emails", + "repairEnvWorking": "Repairing...", + "embeddings": "Embeddings", + "repairEnv": "Repair env", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "noModelsMatch": "No models match \"{filter}\"", + "selectAllModels": "Select all", + "modelsActiveCount": "{active}/{total} active", + "repairEnvSuccess": "OAuth defaults restored", + "deselectAllModels": "Deselect all", + "imagesGenerations": "Images Generations", + "audioSpeech": "Audio Speech", + "showEmails": "Show all emails" }, "settings": { "title": "Instellingen", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Vertaler", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Wachten op OpenAI-autorisatie...", "waitingForAntigravityAuthorization": "Wachten op toestemming voor anti-zwaartekracht...", "waitingForQoderAuthorization": "Wachten op Qoder-autorisatie...", - "exchangingCodeForTokens": "Code uitwisselen voor tokens..." + "exchangingCodeForTokens": "Code uitwisselen voor tokens...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "hoursTracked": "hours tracked", + "busiestHour": "Busiest Hour", + "lastUpdated": "Last updated", + "activityVolume": "Activity", + "trendHour": "Hour", + "semanticCache": "Semantic Cache", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "entriesLoadError": "Failed to load semantic cache entries.", + "cacheRateDesc": "of total requests", + "cachedRequests24h": "Cached Requests (24h)", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "cacheRate": "Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "peakCacheRate": "Peak Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index c7d339ad33..150a300ac3 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Kunne ikke lagre prisen", "Failed to reset pricing": "Kunne ikke tilbakestille priser", "apikey": "API-nøkkel", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Hjem", @@ -640,7 +643,8 @@ "opencode": "Bruk når du foretrekker terminal-native agentkjøringer og skriptautomatisering via OpenCode.", "kiro": "Brukes når du integrerer Kiro og kontrollerer modellruting sentralt fra OmniRoute.", "antigravity": "Brukes når Antigravity/Kiro-trafikk må avskjæres gjennom MITM og rutes til OmniRoute.", - "copilot": "Bruk når du vil ha Copilot chat-stil UX mens du håndhever OmniRoute-nøkler og rutingsregler." + "copilot": "Bruk når du vil ha Copilot chat-stil UX mens du håndhever OmniRoute-nøkler og rutingsregler.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE med MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "reviewComboRefs": "Combo References", + "builderAddComboRef": "Add combo reference", + "reviewAgentFlags": "Agent Flags", + "filterAll": "All", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderStage": { + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + } + }, + "cooldownMinutes": "Cooldown: {minutes}m", + "builderAccount": "Account", + "candidatePoolLabel": "Candidate Pool", + "builderLegacyEntry": "Legacy entry", + "builderProviderFirst": "Pick provider first", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "incidentMode": "Incident Mode", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "explorationRateLabel": "Exploration Rate", + "contextRelaySummaryModel": "Summary Model", + "noExcludedProviders": "No providers are currently excluded.", + "weightHealth": "Health", + "budgetCapLabel": "Budget Cap (USD / request)", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderTitle": "Build a Combo", + "builderFlowTitle": "Combo Builder Flow", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "builderModel": "Model", + "builderStageCurrent": "Current stage", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "weightTaskFit": "Task Fit", + "builderComboRefStep": "Add combo reference", + "emailVisibilityStateOff": "Off", + "normalOperation": "Normal Operation", + "reorderHandle": "Drag to reorder", + "weightCostInv": "Cost", + "activeModePack": "Active Mode Pack", + "candidatePoolAllProviders": "All providers", + "builderStageLocked": "Locked — complete previous stage first", + "emailVisibilityStateOn": "On", + "providerScores": "Provider Scores", + "excludedProviders": "Excluded Providers", + "filterEmptyTitle": "No combos match this strategy filter.", + "reviewSequence": "Model Sequence", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "failedReorder": "Failed to reorder models", + "builderStagePending": "Pending", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "weightStability": "Stability", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "filterIntelligent": "Intelligent", + "builderSelectModel": "Select model", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "strategyRules": "Rules (6-Factor Scoring)", + "builderComboRef": "Combo Ref", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderLoadingProviders": "Loading providers...", + "builderPinnedAccount": "Pinned Account", + "reviewNoSteps": "No steps configured", + "reviewAccounts": "Accounts", + "modePackLabel": "Mode Pack", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "statusOverview": "Status Overview", + "builderProvider": "Provider", + "contextRelay": "Context Relay", + "builderAddStep": "Add step", + "weightQuota": "Quota", + "candidatePoolEmpty": "No active providers available yet.", + "builderBrowseCatalog": "Browse catalog", + "reviewIntelligentTitle": "Intelligent Routing Config", + "contextRelayMaxMessages": "Max Messages For Summary", + "reviewName": "Name", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "modePackUpdated": "Mode pack updated to {pack}.", + "reviewSteps": "Steps", + "weightLatencyInv": "Latency", + "builderPreview": "Preview", + "filterDeterministic": "Deterministic", + "reviewAdvanced": "Advanced Settings", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "budgetCapPlaceholder": "No limit", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderSelectProvider": "Select provider", + "reviewStrategy": "Strategy", + "routerStrategyLabel": "Router Strategy", + "weightTierPriority": "Tier", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderStageVisited": "Stage completed", + "reviewProviders": "Providers" }, "costs": { "title": "Kostnader", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC-forespørsler til `POST /a2a` ved å bruke `message/send` eller `message/stream`.", "a2aQuickStartStep3": "Spor og kontroller oppgaver ved å bruke `tasks/get` og `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "audioSpeech": "Audio Speech", + "repairEnv": "Repair env", + "hideEmails": "Hide all emails", + "repairEnvWorking": "Repairing...", + "repairEnvFailed": "Failed to repair .env", + "repairEnvSuccess": "OAuth defaults restored", + "selectAllModels": "Select all", + "audioTranscriptions": "Audio Transcriptions", + "imagesGenerations": "Images Generations", + "embeddings": "Embeddings", + "noModelsMatch": "No models match \"{filter}\"", + "deselectAllModels": "Deselect all", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active" }, "settings": { "title": "Innstillinger", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Oversetter", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Venter på OpenAI-godkjenning...", "waitingForAntigravityAuthorization": "Venter på antigravity-autorisasjon...", "waitingForQoderAuthorization": "Venter på Qoder-autorisasjon...", - "exchangingCodeForTokens": "Utveksler kode for tokens..." + "exchangingCodeForTokens": "Utveksler kode for tokens...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "busiestHour": "Busiest Hour", + "cachedRequests24h": "Cached Requests (24h)", + "activityVolume": "Activity", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "peakCacheRate": "Peak Cache Rate", + "cacheRate": "Cache Rate", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticCache": "Semantic Cache", + "lastUpdated": "Last updated", + "trendHour": "Hour", + "cacheRateDesc": "of total requests", + "hoursTracked": "hours tracked", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 838dd61629..99b5a246ba 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Nabigong i-save ang pagpepresyo", "Failed to reset pricing": "Nabigong i-reset ang pagpepresyo", "apikey": "API Key", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Bahay", @@ -640,7 +643,8 @@ "opencode": "Gamitin kapag mas gusto mo ang terminal-native agent run at scripted automation sa pamamagitan ng OpenCode.", "kiro": "Gamitin kapag isinasama ang Kiro at kinokontrol ang pagruruta ng modelo sa gitna mula sa OmniRoute.", "antigravity": "Gamitin kapag ang trapiko ng Antigravity/Kiro ay dapat ma-intercept sa MITM at iruta sa OmniRoute.", - "copilot": "Gamitin kapag gusto mong Copilot chat style UX habang ipinapatupad ang mga OmniRoute key at mga panuntunan sa pagruruta." + "copilot": "Gamitin kapag gusto mong Copilot chat style UX habang ipinapatupad ang mga OmniRoute key at mga panuntunan sa pagruruta.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE na may MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "contextRelaySummaryModel": "Summary Model", + "filterIntelligent": "Intelligent", + "normalOperation": "Normal Operation", + "strategyRules": "Rules (6-Factor Scoring)", + "providerScores": "Provider Scores", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderStageLocked": "Locked — complete previous stage first", + "weightLatencyInv": "Latency", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "emailVisibilityStateOff": "Off", + "statusOverview": "Status Overview", + "incidentMode": "Incident Mode", + "reviewName": "Name", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderProvider": "Provider", + "builderStageCurrent": "Current stage", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderStage": { + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "failedReorder": "Failed to reorder models", + "reorderHandle": "Drag to reorder", + "builderAddStep": "Add step", + "reviewComboRefs": "Combo References", + "builderPreview": "Preview", + "builderLegacyEntry": "Legacy entry", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "filterAll": "All", + "contextRelay": "Context Relay", + "modePackLabel": "Mode Pack", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "excludedProviders": "Excluded Providers", + "builderFlowTitle": "Combo Builder Flow", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold", + "cooldownMinutes": "Cooldown: {minutes}m", + "reviewAgentFlags": "Agent Flags", + "weightHealth": "Health", + "builderModel": "Model", + "filterEmptyTitle": "No combos match this strategy filter.", + "reviewSteps": "Steps", + "budgetCapPlaceholder": "No limit", + "filterDeterministic": "Deterministic", + "modePackUpdated": "Mode pack updated to {pack}.", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderAccount": "Account", + "reviewNoSteps": "No steps configured", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "builderComboRef": "Combo Ref", + "routerStrategyLabel": "Router Strategy", + "builderPinnedAccount": "Pinned Account", + "reviewSequence": "Model Sequence", + "reviewStrategy": "Strategy", + "builderSelectProvider": "Select provider", + "candidatePoolAllProviders": "All providers", + "reviewIntelligentTitle": "Intelligent Routing Config", + "builderBrowseCatalog": "Browse catalog", + "weightTaskFit": "Task Fit", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "builderStagePending": "Pending", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "weightCostInv": "Cost", + "builderLoadingProviders": "Loading providers...", + "builderComboRefStep": "Add combo reference", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "weightStability": "Stability", + "candidatePoolLabel": "Candidate Pool", + "noExcludedProviders": "No providers are currently excluded.", + "weightTierPriority": "Tier", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewProviders": "Providers", + "builderSelectModel": "Select model", + "builderAddComboRef": "Add combo reference", + "reviewAccounts": "Accounts", + "builderProviderFirst": "Pick provider first", + "explorationRateLabel": "Exploration Rate", + "activeModePack": "Active Mode Pack", + "builderTitle": "Build a Combo", + "emailVisibilityStateOn": "On", + "builderStageVisited": "Stage completed", + "candidatePoolEmpty": "No active providers available yet.", + "weightQuota": "Quota", + "reviewAdvanced": "Advanced Settings" }, "costs": { "title": "Mga gastos", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Subaybayan at kontrolin ang mga gawain gamit ang `tasks/get` at `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "hideEmails": "Hide all emails", + "imagesGenerations": "Images Generations", + "audioSpeech": "Audio Speech", + "repairEnvSuccess": "OAuth defaults restored", + "audioTranscriptions": "Audio Transcriptions", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env", + "repairEnv": "Repair env", + "embeddings": "Embeddings", + "selectAllModels": "Select all", + "deselectAllModels": "Deselect all", + "repairEnvWorking": "Repairing...", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values." }, "settings": { "title": "Mga setting", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Tagasalin", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Naghihintay ng awtorisasyon sa OpenAI...", "waitingForAntigravityAuthorization": "Naghihintay ng awtorisasyon sa Antigravity...", "waitingForQoderAuthorization": "Naghihintay ng awtorisasyon ng Qoder...", - "exchangingCodeForTokens": "Pagpapalit ng code para sa mga token..." + "exchangingCodeForTokens": "Pagpapalit ng code para sa mga token...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "lastUpdated": "Last updated", + "semanticCache": "Semantic Cache", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "activityVolume": "Activity", + "peakCacheRate": "Peak Cache Rate", + "busiestHour": "Busiest Hour", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cachedRequests24h": "Cached Requests (24h)", + "cacheRateDesc": "of total requests", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "hoursTracked": "hours tracked", + "cacheRate": "Cache Rate", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "entriesLoadError": "Failed to load semantic cache entries.", + "trendHour": "Hour" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 02e8c5c0a5..cac812562f 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Nie udało się zapisać cen", "Failed to reset pricing": "Nie udało się zresetować cen", "apikey": "Klucz API", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Dom", @@ -640,7 +643,8 @@ "opencode": "Użyj, jeśli wolisz uruchamianie agentów natywnych w terminalu i automatyzację skryptów za pośrednictwem OpenCode.", "kiro": "Użyj podczas integracji Kiro i centralnego sterowania routingiem modeli z OmniRoute.", "antigravity": "Użyj, gdy ruch antygrawitacyjny/Kiro musi zostać przechwycony przez MITM i skierowany do OmniRoute.", - "copilot": "Użyj, jeśli chcesz mieć UX w stylu czatu Copilot, jednocześnie wymuszając klucze OmniRoute i reguły routingu." + "copilot": "Użyj, jeśli chcesz mieć UX w stylu czatu Copilot, jednocześnie wymuszając klucze OmniRoute i reguły routingu.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE z MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "budgetCapLabel": "Budget Cap (USD / request)", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "modePackUpdated": "Mode pack updated to {pack}.", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewSteps": "Steps", + "reviewAccounts": "Accounts", + "reorderHandle": "Drag to reorder", + "contextRelaySummaryModel": "Summary Model", + "filterAll": "All", + "activeModePack": "Active Mode Pack", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "providerScores": "Provider Scores", + "builderStage": { + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + } + }, + "reviewAgentFlags": "Agent Flags", + "filterIntelligent": "Intelligent", + "builderLoadingProviders": "Loading providers...", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "excludedProviders": "Excluded Providers", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "weightLatencyInv": "Latency", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderLegacyEntry": "Legacy entry", + "weightTaskFit": "Task Fit", + "weightQuota": "Quota", + "builderSelectModel": "Select model", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderProviderFirst": "Pick provider first", + "reviewName": "Name", + "builderStageLocked": "Locked — complete previous stage first", + "builderProvider": "Provider", + "budgetCapPlaceholder": "No limit", + "builderStageVisited": "Stage completed", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderTitle": "Build a Combo", + "builderAccount": "Account", + "weightHealth": "Health", + "contextRelayMaxMessages": "Max Messages For Summary", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "weightTierPriority": "Tier", + "emailVisibilityStateOn": "On", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderComboRefStep": "Add combo reference", + "reviewStrategy": "Strategy", + "builderSelectProvider": "Select provider", + "filterDeterministic": "Deterministic", + "reviewComboRefs": "Combo References", + "builderAddComboRef": "Add combo reference", + "reviewIntelligentTitle": "Intelligent Routing Config", + "modePackLabel": "Mode Pack", + "builderBrowseCatalog": "Browse catalog", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "builderAddStep": "Add step", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "weightStability": "Stability", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderStageCurrent": "Current stage", + "failedReorder": "Failed to reorder models", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "reviewProviders": "Providers", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "noExcludedProviders": "No providers are currently excluded.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "cooldownMinutes": "Cooldown: {minutes}m", + "statusOverview": "Status Overview", + "contextRelayHandoffThreshold": "Handoff Threshold", + "builderPreview": "Preview", + "builderStagePending": "Pending", + "builderModel": "Model", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "strategyRules": "Rules (6-Factor Scoring)", + "candidatePoolAllProviders": "All providers", + "reviewAdvanced": "Advanced Settings", + "reviewSequence": "Model Sequence", + "reviewNoSteps": "No steps configured", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "weightCostInv": "Cost", + "incidentMode": "Incident Mode", + "candidatePoolLabel": "Candidate Pool", + "candidatePoolEmpty": "No active providers available yet.", + "normalOperation": "Normal Operation", + "builderFlowTitle": "Combo Builder Flow", + "contextRelay": "Context Relay", + "explorationRateLabel": "Exploration Rate", + "emailVisibilityStateOff": "Off", + "builderComboRef": "Combo Ref", + "builderPinnedAccount": "Pinned Account", + "routerStrategyLabel": "Router Strategy" }, "costs": { "title": "Koszty", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioTranscriptions": "Audio Transcriptions", + "repairEnvWorking": "Repairing...", + "hideEmails": "Hide all emails", + "modelsActiveCount": "{active}/{total} active", + "embeddings": "Embeddings", + "selectAllModels": "Select all", + "showEmails": "Show all emails", + "audioSpeech": "Audio Speech", + "deselectAllModels": "Deselect all", + "repairEnv": "Repair env", + "repairEnvFailed": "Failed to repair .env", + "imagesGenerations": "Images Generations", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnvSuccess": "OAuth defaults restored" }, "settings": { "title": "Ustawienia", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Tłumacz", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "cacheRate": "Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "activityVolume": "Activity", + "hoursTracked": "hours tracked", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "semanticCache": "Semantic Cache", + "cacheRateDesc": "of total requests", + "cachedRequests24h": "Cached Requests (24h)", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "lastUpdated": "Last updated", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "trendHour": "Hour", + "busiestHour": "Busiest Hour", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "peakCacheRate": "Peak Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index d64a16585b..b8d22403fc 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Falha ao salvar o preço", "Failed to reset pricing": "Falha ao redefinir o preço", "apikey": "Chave de API", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Início", @@ -640,7 +643,8 @@ "opencode": "Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.", "kiro": "Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.", "antigravity": "Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.", - "copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento." + "copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE com MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — IDE com IA", "windsurf": "Windsurf — Editor de Código com IA", - "copilot": "GitHub Copilot — Assistente de IA" + "copilot": "GitHub Copilot — Assistente de IA", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -899,6 +904,16 @@ "when": "Você quer distribuição perfeitamente uniforme — cada modelo é usado uma vez antes de repetir.", "avoid": "Os modelos têm qualidade ou latência muito diferentes e a ordem importa.", "example": "Múltiplas contas do mesmo modelo para distribuir uso de forma equilibrada." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1018,7 +1033,108 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderPreview": "Preview", + "builderStage": { + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + } + }, + "routerStrategyLabel": "Router Strategy", + "emailVisibilityStateOn": "On", + "reviewAdvanced": "Advanced Settings", + "reviewComboRefs": "Combo References", + "weightStability": "Stability", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderComboRefStep": "Add combo reference", + "builderStageCurrent": "Current stage", + "builderStageVisited": "Stage completed", + "builderAccount": "Account", + "explorationRateLabel": "Exploration Rate", + "excludedProviders": "Excluded Providers", + "weightLatencyInv": "Latency", + "reorderHandle": "Drag to reorder", + "builderTitle": "Build a Combo", + "builderProviderFirst": "Pick provider first", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "statusOverview": "Status Overview", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderStageLocked": "Locked — complete previous stage first", + "builderPinnedAccount": "Pinned Account", + "budgetCapLabel": "Budget Cap (USD / request)", + "modePackUpdated": "Mode pack updated to {pack}.", + "incidentMode": "Incident Mode", + "providerScores": "Provider Scores", + "noExcludedProviders": "No providers are currently excluded.", + "normalOperation": "Normal Operation", + "reviewProviders": "Providers", + "builderSelectModel": "Select model", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "builderFlowTitle": "Combo Builder Flow", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "filterIntelligent": "Intelligent", + "weightTierPriority": "Tier", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "filterDeterministic": "Deterministic", + "builderSelectProvider": "Select provider", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "budgetCapPlaceholder": "No limit", + "builderAddStep": "Add step", + "builderLegacyEntry": "Legacy entry", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "filterAll": "All", + "candidatePoolEmpty": "No active providers available yet.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderComboRef": "Combo Ref", + "builderLoadingProviders": "Loading providers...", + "emailVisibilityStateOff": "Off", + "reviewSequence": "Model Sequence", + "reviewSteps": "Steps", + "candidatePoolLabel": "Candidate Pool", + "reviewAgentFlags": "Agent Flags", + "cooldownMinutes": "Cooldown: {minutes}m", + "modePackLabel": "Mode Pack", + "reviewName": "Name", + "weightHealth": "Health", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "activeModePack": "Active Mode Pack", + "reviewStrategy": "Strategy", + "candidatePoolAllProviders": "All providers", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "reviewIntelligentTitle": "Intelligent Routing Config", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "failedReorder": "Failed to reorder models", + "builderBrowseCatalog": "Browse catalog", + "weightTaskFit": "Task Fit", + "builderProvider": "Provider", + "reviewAccounts": "Accounts", + "strategyRules": "Rules (6-Factor Scoring)", + "weightCostInv": "Cost", + "builderAddComboRef": "Add combo reference", + "weightQuota": "Quota", + "reviewNoSteps": "No steps configured", + "builderModel": "Model", + "builderStagePending": "Pending", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo." }, "costs": { "title": "Custos", @@ -1156,7 +1272,9 @@ "a2aQuickStartStep2": "Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.", "a2aQuickStartStep3": "Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1314,7 +1432,8 @@ "factual": "Factual", "episodic": "Episódica", "procedural": "Procedural", - "semantic": "Semântica" + "semantic": "Semântica", + "delete": "Delete" }, "skills": { "title": "Skills", @@ -1813,7 +1932,18 @@ "statusBanned": "Banido / Sandbox Violation", "statusCreditsExhausted": "Saldo Insuficiente", "modelsImported": "{count} models imported", - "close": "Close" + "close": "Close", + "embeddings": "Embeddings", + "audioSpeech": "Audio Speech", + "imagesGenerations": "Images Generations", + "repairEnv": "Repair env", + "repairEnvFailed": "Failed to repair .env", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "showEmails": "Show all emails", + "repairEnvWorking": "Repairing...", + "repairEnvSuccess": "OAuth defaults restored", + "hideEmails": "Hide all emails", + "audioTranscriptions": "Audio Transcriptions" }, "settings": { "title": "Configurações", @@ -2760,7 +2890,11 @@ "waitingForOpenAIAuthorization": "Aguardando autorização do OpenAI...", "waitingForAntigravityAuthorization": "Aguardando autorização antigravidade...", "waitingForQoderAuthorization": "Aguardando autorização do Qoder...", - "exchangingCodeForTokens": "Trocando código por tokens..." + "exchangingCodeForTokens": "Trocando código por tokens...", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3176,6 +3310,25 @@ "deduplicatedRequests": "Requisições Desduplicadas", "savedCalls": "Chamadas API Poupadas", "totalProcessed": "Total Processado", - "peakCached": "Peak cached" + "peakCached": "Peak cached", + "entriesLoadError": "Failed to load semantic cache entries.", + "peakCacheRate": "Peak Cache Rate", + "semanticCache": "Semantic Cache", + "busiestHour": "Busiest Hour", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "activityVolume": "Activity", + "cachedRequests24h": "Cached Requests (24h)", + "cacheRate": "Cache Rate", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "lastUpdated": "Last updated", + "hoursTracked": "hours tracked", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "trendHour": "Hour", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cacheRateDesc": "of total requests" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 237ae659be..e67a3ef0b6 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Falha ao salvar o preço", "Failed to reset pricing": "Falha ao redefinir o preço", "apikey": "Chave de API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Página inicial", @@ -640,7 +643,8 @@ "opencode": "Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.", "kiro": "Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.", "antigravity": "Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.", - "copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento." + "copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE antigravidade do Google com MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderModel": "Model", + "incidentMode": "Incident Mode", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "weightCostInv": "Cost", + "builderStage": { + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + } + }, + "builderComboRef": "Combo Ref", + "budgetCapLabel": "Budget Cap (USD / request)", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderTitle": "Build a Combo", + "failedReorder": "Failed to reorder models", + "builderAddComboRef": "Add combo reference", + "builderProviderFirst": "Pick provider first", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "filterIntelligent": "Intelligent", + "filterAll": "All", + "weightStability": "Stability", + "builderSelectProvider": "Select provider", + "modePackLabel": "Mode Pack", + "cooldownMinutes": "Cooldown: {minutes}m", + "reorderHandle": "Drag to reorder", + "normalOperation": "Normal Operation", + "candidatePoolEmpty": "No active providers available yet.", + "excludedProviders": "Excluded Providers", + "builderStageCurrent": "Current stage", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "contextRelaySummaryModel": "Summary Model", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewNoSteps": "No steps configured", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "activeModePack": "Active Mode Pack", + "builderAccount": "Account", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderStageLocked": "Locked — complete previous stage first", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "noExcludedProviders": "No providers are currently excluded.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "candidatePoolAllProviders": "All providers", + "strategyRules": "Rules (6-Factor Scoring)", + "filterDeterministic": "Deterministic", + "builderStagePending": "Pending", + "weightHealth": "Health", + "budgetCapPlaceholder": "No limit", + "reviewSteps": "Steps", + "emailVisibilityStateOn": "On", + "weightLatencyInv": "Latency", + "builderProvider": "Provider", + "reviewSequence": "Model Sequence", + "builderFlowTitle": "Combo Builder Flow", + "explorationRateLabel": "Exploration Rate", + "reviewAdvanced": "Advanced Settings", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "statusOverview": "Status Overview", + "reviewAccounts": "Accounts", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderPreview": "Preview", + "builderAddStep": "Add step", + "emailVisibilityStateOff": "Off", + "reviewComboRefs": "Combo References", + "reviewAgentFlags": "Agent Flags", + "builderComboRefStep": "Add combo reference", + "builderLegacyEntry": "Legacy entry", + "reviewProviders": "Providers", + "providerScores": "Provider Scores", + "builderStageVisited": "Stage completed", + "weightQuota": "Quota", + "candidatePoolLabel": "Candidate Pool", + "contextRelay": "Context Relay", + "builderBrowseCatalog": "Browse catalog", + "reviewIntelligentTitle": "Intelligent Routing Config", + "builderLoadingProviders": "Loading providers...", + "routerStrategyLabel": "Router Strategy", + "weightTierPriority": "Tier", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "reviewName": "Name", + "contextRelayHandoffThreshold": "Handoff Threshold", + "reviewStrategy": "Strategy", + "weightTaskFit": "Task Fit", + "builderPinnedAccount": "Pinned Account", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderSelectModel": "Select model" }, "costs": { "title": "Custos", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1305,7 +1432,8 @@ "factual": "Factual", "episodic": "Episódica", "procedural": "Procedural", - "semantic": "Semântica" + "semantic": "Semântica", + "delete": "Delete" }, "skills": { "title": "Skills", @@ -1804,7 +1932,18 @@ "statusBanned": "Banido / Sandbox Violation", "statusCreditsExhausted": "Saldo Insuficiente", "modelsImported": "{count} models imported", - "close": "Close" + "close": "Close", + "repairEnv": "Repair env", + "repairEnvWorking": "Repairing...", + "audioSpeech": "Audio Speech", + "hideEmails": "Hide all emails", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "audioTranscriptions": "Audio Transcriptions", + "imagesGenerations": "Images Generations", + "showEmails": "Show all emails", + "embeddings": "Embeddings", + "repairEnvFailed": "Failed to repair .env", + "repairEnvSuccess": "OAuth defaults restored" }, "settings": { "title": "Configurações", @@ -2321,7 +2460,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos." }, "translator": { "title": "Tradutor", @@ -2747,7 +2890,11 @@ "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens..." + "exchangingCodeForTokens": "Exchanging code for tokens...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3163,6 +3310,25 @@ "deduplicatedRequests": "Requisições Desduplicadas", "savedCalls": "Chamadas API Poupadas", "totalProcessed": "Total Processado", - "peakCached": "Peak cached" + "peakCached": "Peak cached", + "lastUpdated": "Last updated", + "cacheRateDesc": "of total requests", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "cacheRate": "Cache Rate", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "activityVolume": "Activity", + "busiestHour": "Busiest Hour", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "hoursTracked": "hours tracked", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCache": "Semantic Cache", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "peakCacheRate": "Peak Cache Rate", + "trendHour": "Hour", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." } } diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index d5fca1461b..09ad08f571 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Nu s-a salvat prețul", "Failed to reset pricing": "Nu s-a resetat prețul", "apikey": "Cheia API", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Acasă", @@ -640,7 +643,8 @@ "opencode": "Utilizați atunci când preferați rulările de agent nativ terminal și automatizarea prin script prin OpenCode.", "kiro": "Utilizați atunci când integrați Kiro și controlați rutarea modelului central din OmniRoute.", "antigravity": "Utilizați atunci când traficul Antigravity/Kiro trebuie interceptat prin MITM și direcționat către OmniRoute.", - "copilot": "Utilizați atunci când doriți UX în stilul de chat Copilot, în timp ce aplicați cheile și regulile de rutare OmniRoute." + "copilot": "Utilizați atunci când doriți UX în stilul de chat Copilot, în timp ce aplicați cheile și regulile de rutare OmniRoute.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE cu MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "budgetCapPlaceholder": "No limit", + "emailVisibilityStateOff": "Off", + "weightHealth": "Health", + "builderSelectProvider": "Select provider", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "reviewProviders": "Providers", + "reviewNoSteps": "No steps configured", + "normalOperation": "Normal Operation", + "reviewStrategy": "Strategy", + "weightTaskFit": "Task Fit", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderModel": "Model", + "builderLoadingProviders": "Loading providers...", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderPreview": "Preview", + "filterEmptyTitle": "No combos match this strategy filter.", + "filterDeterministic": "Deterministic", + "builderFlowTitle": "Combo Builder Flow", + "candidatePoolAllProviders": "All providers", + "reorderHandle": "Drag to reorder", + "providerScores": "Provider Scores", + "builderBrowseCatalog": "Browse catalog", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "builderStage": { + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + } + }, + "reviewIntelligentTitle": "Intelligent Routing Config", + "weightCostInv": "Cost", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "reviewAdvanced": "Advanced Settings", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "reviewName": "Name", + "builderStageCurrent": "Current stage", + "statusOverview": "Status Overview", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "candidatePoolEmpty": "No active providers available yet.", + "weightLatencyInv": "Latency", + "excludedProviders": "Excluded Providers", + "contextRelay": "Context Relay", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderProvider": "Provider", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderAccount": "Account", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "candidatePoolLabel": "Candidate Pool", + "reviewComboRefs": "Combo References", + "activeModePack": "Active Mode Pack", + "builderStageVisited": "Stage completed", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "reviewAccounts": "Accounts", + "budgetCapLabel": "Budget Cap (USD / request)", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderAddStep": "Add step", + "routerStrategyLabel": "Router Strategy", + "weightTierPriority": "Tier", + "incidentMode": "Incident Mode", + "builderLegacyEntry": "Legacy entry", + "builderComboRefStep": "Add combo reference", + "filterIntelligent": "Intelligent", + "reviewSteps": "Steps", + "builderSelectModel": "Select model", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderProviderFirst": "Pick provider first", + "builderTitle": "Build a Combo", + "strategyRules": "Rules (6-Factor Scoring)", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderAddComboRef": "Add combo reference", + "builderStagePending": "Pending", + "explorationRateLabel": "Exploration Rate", + "noExcludedProviders": "No providers are currently excluded.", + "failedReorder": "Failed to reorder models", + "weightQuota": "Quota", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "cooldownMinutes": "Cooldown: {minutes}m", + "emailVisibilityStateOn": "On", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewAgentFlags": "Agent Flags", + "modePackLabel": "Mode Pack", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "filterAll": "All", + "builderStageLocked": "Locked — complete previous stage first", + "builderComboRef": "Combo Ref", + "weightStability": "Stability", + "reviewSequence": "Model Sequence", + "builderPinnedAccount": "Pinned Account" }, "costs": { "title": "Costuri", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "imagesGenerations": "Images Generations", + "embeddings": "Embeddings", + "repairEnv": "Repair env", + "selectAllModels": "Select all", + "audioSpeech": "Audio Speech", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "hideEmails": "Hide all emails", + "deselectAllModels": "Deselect all", + "audioTranscriptions": "Audio Transcriptions", + "showEmails": "Show all emails", + "repairEnvWorking": "Repairing...", + "repairEnvFailed": "Failed to repair .env", + "modelsActiveCount": "{active}/{total} active", + "repairEnvSuccess": "OAuth defaults restored", + "noModelsMatch": "No models match \"{filter}\"" }, "settings": { "title": "Setări", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model" }, "translator": { "title": "Traducător", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Se așteaptă autorizarea OpenAI...", "waitingForAntigravityAuthorization": "Se așteaptă autorizația antigravitație...", "waitingForQoderAuthorization": "Se așteaptă autorizarea Qoder...", - "exchangingCodeForTokens": "Se schimbă codul pentru jetoane..." + "exchangingCodeForTokens": "Se schimbă codul pentru jetoane...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "entriesLoadError": "Failed to load semantic cache entries.", + "busiestHour": "Busiest Hour", + "hoursTracked": "hours tracked", + "lastUpdated": "Last updated", + "cacheRate": "Cache Rate", + "activityVolume": "Activity", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "cacheRateDesc": "of total requests", + "trendHour": "Hour", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cachedRequests24h": "Cached Requests (24h)", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticCache": "Semantic Cache", + "peakCacheRate": "Peak Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index eb382eb6da..e8d408d109 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Не удалось сохранить цену.", "Failed to reset pricing": "Не удалось сбросить цены.", "apikey": "API-ключ", - "http": "HTTP" + "http": "HTTP", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet" }, "sidebar": { "home": "Главная", @@ -640,7 +643,8 @@ "opencode": "Используйте, если вы предпочитаете запускать собственные агенты терминала и автоматизировать скрипты через OpenCode.", "kiro": "Используйте при интеграции Kiro и централизованном управлении маршрутизацией модели из OmniRoute.", "antigravity": "Используйте, когда трафик Антигравитации/Киро необходимо перехватить через MITM и направить в OmniRoute.", - "copilot": "Используйте его, если вам нужен пользовательский интерфейс в стиле чата Copilot, одновременно обеспечивая соблюдение ключей OmniRoute и правил маршрутизации." + "copilot": "Используйте его, если вам нужен пользовательский интерфейс в стиле чата Copilot, одновременно обеспечивая соблюдение ключей OmniRoute и правил маршрутизации.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE с MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode - агент кодирования с ИИ в терминале", "kiro": "Amazon Kiro - IDE с ИИ", "windsurf": "Редактор кода Windsurf с ИИ", - "copilot": "Ассистент GitHub Copilot с ИИ" + "copilot": "Ассистент GitHub Copilot с ИИ", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -914,6 +919,16 @@ "when": "Используйте, когда нужен идеально ровный spread - каждая модель используется один раз перед повтором.", "avoid": "Избегайте, когда модели отличаются по качеству или задержке и важен порядок.", "example": "Пример: несколько аккаунтов одной модели для равномерного распределения использования." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." } }, "advancedHelp": { @@ -1033,7 +1048,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "cooldownMinutes": "Cooldown: {minutes}m", + "contextRelaySummaryModel": "Summary Model", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "weightCostInv": "Cost", + "strategyRules": "Rules (6-Factor Scoring)", + "builderStage": { + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + } + }, + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewComboRefs": "Combo References", + "builderSelectModel": "Select model", + "builderAddComboRef": "Add combo reference", + "emailVisibilityStateOn": "On", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "reviewName": "Name", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "activeModePack": "Active Mode Pack", + "modePackUpdated": "Mode pack updated to {pack}.", + "filterAll": "All", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "budgetCapLabel": "Budget Cap (USD / request)", + "filterDeterministic": "Deterministic", + "weightHealth": "Health", + "builderPinnedAccount": "Pinned Account", + "reviewAgentFlags": "Agent Flags", + "reviewAccounts": "Accounts", + "reviewNoSteps": "No steps configured", + "reorderHandle": "Drag to reorder", + "weightTaskFit": "Task Fit", + "incidentMode": "Incident Mode", + "weightQuota": "Quota", + "modePackLabel": "Mode Pack", + "builderPreview": "Preview", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "candidatePoolLabel": "Candidate Pool", + "builderAddStep": "Add step", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "reviewSteps": "Steps", + "weightLatencyInv": "Latency", + "filterEmptyTitle": "No combos match this strategy filter.", + "explorationRateLabel": "Exploration Rate", + "noExcludedProviders": "No providers are currently excluded.", + "weightStability": "Stability", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderStageVisited": "Stage completed", + "candidatePoolEmpty": "No active providers available yet.", + "reviewIntelligentTitle": "Intelligent Routing Config", + "builderTitle": "Build a Combo", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderAccount": "Account", + "builderStageLocked": "Locked — complete previous stage first", + "reviewAdvanced": "Advanced Settings", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "failedReorder": "Failed to reorder models", + "routerStrategyLabel": "Router Strategy", + "candidatePoolAllProviders": "All providers", + "statusOverview": "Status Overview", + "builderModel": "Model", + "builderProvider": "Provider", + "emailVisibilityStateOff": "Off", + "reviewStrategy": "Strategy", + "providerScores": "Provider Scores", + "builderComboRef": "Combo Ref", + "builderStageCurrent": "Current stage", + "budgetCapPlaceholder": "No limit", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "normalOperation": "Normal Operation", + "builderLegacyEntry": "Legacy entry", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderProviderFirst": "Pick provider first", + "contextRelay": "Context Relay", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "contextRelayMaxMessages": "Max Messages For Summary", + "weightTierPriority": "Tier", + "reviewSequence": "Model Sequence", + "builderBrowseCatalog": "Browse catalog", + "contextRelayHandoffThreshold": "Handoff Threshold", + "reviewProviders": "Providers", + "builderFlowTitle": "Combo Builder Flow", + "builderStagePending": "Pending", + "builderLoadingProviders": "Loading providers...", + "excludedProviders": "Excluded Providers", + "builderComboRefStep": "Add combo reference", + "builderSelectProvider": "Select provider", + "filterIntelligent": "Intelligent", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "advancedWeightsTitle": "Advanced: Scoring Weights" }, "costs": { "title": "Затраты", @@ -1171,7 +1296,9 @@ "a2aQuickStartStep2": "Отправляйте JSON-RPC-запросы на `POST /a2a` через `message/send` или `message/stream`.", "a2aQuickStartStep3": "Отслеживайте и управляйте задачами через `tasks/get` и `tasks/cancel`.", "completionsLegacy": "Завершения (устар.)", - "completionsLegacyDesc": "Устаревшие текстовые завершения OpenAI — поддерживают и строку prompt, и массив messages" + "completionsLegacyDesc": "Устаревшие текстовые завершения OpenAI — поддерживают и строку prompt, и массив messages", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Прокси конечных точек", @@ -1778,7 +1905,17 @@ "chatPathHint": "Пользовательский путь чата для провайдеров с нестандартными API (например, /v4/chat/completions)", "modelsPathLabel": "Путь эндпоинта моделей", "modelsPathPlaceholder": "/models", - "modelsPathHint": "Пользовательский путь моделей для проверки (например, /v4/models)" + "modelsPathHint": "Пользовательский путь моделей для проверки (например, /v4/models)", + "showEmails": "Show all emails", + "deselectAllModels": "Deselect all", + "embeddings": "Embeddings", + "hideEmails": "Hide all emails", + "audioSpeech": "Audio Speech", + "imagesGenerations": "Images Generations", + "noModelsMatch": "No models match \"{filter}\"", + "modelsActiveCount": "{active}/{total} active", + "audioTranscriptions": "Audio Transcriptions", + "selectAllModels": "Select all" }, "settings": { "title": "Настройки", @@ -2295,7 +2432,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Переводчик", @@ -2721,7 +2862,11 @@ "waitingForOpenAIAuthorization": "Ожидание авторизации OpenAI...", "waitingForAntigravityAuthorization": "Ожидание авторизации Antigravity...", "waitingForQoderAuthorization": "Ожидание авторизации Qoder...", - "exchangingCodeForTokens": "Обмен кода на токены..." + "exchangingCodeForTokens": "Обмен кода на токены...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "ОмниРоут", @@ -3045,7 +3190,8 @@ "factual": "Фактическая", "episodic": "Эпизодическая", "procedural": "Процедурная", - "semantic": "Семантическая" + "semantic": "Семантическая", + "delete": "Delete" }, "skills": { "title": "Навыки", @@ -3188,6 +3334,25 @@ "deduplicatedRequests": "Дедуплицированные запросы", "peakCached": "Пик кэша", "savedCalls": "Сэкономленные API-запросы", - "totalProcessed": "Всего запросов обработано" + "totalProcessed": "Всего запросов обработано", + "trendHour": "Hour", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "busiestHour": "Busiest Hour", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "activityVolume": "Activity", + "semanticCache": "Semantic Cache", + "peakCacheRate": "Peak Cache Rate", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "hoursTracked": "hours tracked", + "cacheRate": "Cache Rate", + "lastUpdated": "Last updated", + "cachedRequests24h": "Cached Requests (24h)", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cacheRateDesc": "of total requests", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." } } diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 554117f98e..a32d6ebdda 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Cenu sa nepodarilo uložiť", "Failed to reset pricing": "Cenu sa nepodarilo resetovať", "apikey": "API kľúč", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Domov", @@ -640,7 +643,8 @@ "opencode": "Použite, ak uprednostňujete spúšťanie natívneho agenta a skriptovanú automatizáciu cez OpenCode.", "kiro": "Použite pri integrácii Kiro a centrálnom riadení smerovania modelu z OmniRoute.", "antigravity": "Použite, keď musí byť premávka Antigravity/Kiro zachytená cez MITM a nasmerovaná na OmniRoute.", - "copilot": "Použite, keď chcete UX v štýle chatu Copilot pri presadzovaní kľúčov OmniRoute a pravidiel smerovania." + "copilot": "Použite, keď chcete UX v štýle chatu Copilot pri presadzovaní kľúčov OmniRoute a pravidiel smerovania.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE s MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "weightLatencyInv": "Latency", + "builderStage": { + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "activeModePack": "Active Mode Pack", + "reviewAgentFlags": "Agent Flags", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "builderSelectModel": "Select model", + "builderProviderFirst": "Pick provider first", + "weightStability": "Stability", + "candidatePoolLabel": "Candidate Pool", + "strategyRules": "Rules (6-Factor Scoring)", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "weightQuota": "Quota", + "builderFlowTitle": "Combo Builder Flow", + "contextRelaySummaryModel": "Summary Model", + "reviewName": "Name", + "providerScores": "Provider Scores", + "noExcludedProviders": "No providers are currently excluded.", + "builderModel": "Model", + "emailVisibilityStateOff": "Off", + "reviewIntelligentTitle": "Intelligent Routing Config", + "cooldownMinutes": "Cooldown: {minutes}m", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "builderAddStep": "Add step", + "reviewSteps": "Steps", + "reviewNoSteps": "No steps configured", + "incidentMode": "Incident Mode", + "reviewProviders": "Providers", + "budgetCapPlaceholder": "No limit", + "filterAll": "All", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewAdvanced": "Advanced Settings", + "builderStagePending": "Pending", + "filterDeterministic": "Deterministic", + "weightCostInv": "Cost", + "filterIntelligent": "Intelligent", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderProvider": "Provider", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "contextRelay": "Context Relay", + "candidatePoolEmpty": "No active providers available yet.", + "statusOverview": "Status Overview", + "weightHealth": "Health", + "filterEmptyTitle": "No combos match this strategy filter.", + "weightTaskFit": "Task Fit", + "builderTitle": "Build a Combo", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderStageVisited": "Stage completed", + "builderBrowseCatalog": "Browse catalog", + "builderStageLocked": "Locked — complete previous stage first", + "reorderHandle": "Drag to reorder", + "builderLegacyEntry": "Legacy entry", + "modePackLabel": "Mode Pack", + "builderComboRefStep": "Add combo reference", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewComboRefs": "Combo References", + "failedReorder": "Failed to reorder models", + "emailVisibilityStateOn": "On", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderComboRef": "Combo Ref", + "modePackUpdated": "Mode pack updated to {pack}.", + "candidatePoolAllProviders": "All providers", + "routerStrategyLabel": "Router Strategy", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "builderAccount": "Account", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "explorationRateLabel": "Exploration Rate", + "reviewStrategy": "Strategy", + "budgetCapLabel": "Budget Cap (USD / request)", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "builderLoadingProviders": "Loading providers...", + "builderAddComboRef": "Add combo reference", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "weightTierPriority": "Tier", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "excludedProviders": "Excluded Providers", + "reviewAccounts": "Accounts", + "builderSelectProvider": "Select provider", + "normalOperation": "Normal Operation", + "builderPreview": "Preview", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "reviewSequence": "Model Sequence", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "builderPinnedAccount": "Pinned Account", + "builderStageCurrent": "Current stage", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "costs": { "title": "náklady", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioTranscriptions": "Audio Transcriptions", + "imagesGenerations": "Images Generations", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvFailed": "Failed to repair .env", + "deselectAllModels": "Deselect all", + "showEmails": "Show all emails", + "repairEnv": "Repair env", + "modelsActiveCount": "{active}/{total} active", + "hideEmails": "Hide all emails", + "repairEnvSuccess": "OAuth defaults restored", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnvWorking": "Repairing...", + "selectAllModels": "Select all", + "embeddings": "Embeddings", + "audioSpeech": "Audio Speech" }, "settings": { "title": "Nastavenia", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "Prekladateľ", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Čaká sa na autorizáciu OpenAI...", "waitingForAntigravityAuthorization": "Čaká sa na antigravitačné povolenie...", "waitingForQoderAuthorization": "Čaká sa na autorizáciu Qoder...", - "exchangingCodeForTokens": "Výmena kódu za tokeny..." + "exchangingCodeForTokens": "Výmena kódu za tokeny...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "activityVolume": "Activity", + "cacheRateDesc": "of total requests", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "entriesLoadError": "Failed to load semantic cache entries.", + "peakCacheRate": "Peak Cache Rate", + "trendHour": "Hour", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "busiestHour": "Busiest Hour", + "cachedRequests24h": "Cached Requests (24h)", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "hoursTracked": "hours tracked", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "lastUpdated": "Last updated", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "cacheRate": "Cache Rate", + "semanticCache": "Semantic Cache", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 11c95d46c3..856014ecbc 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Det gick inte att spara pris", "Failed to reset pricing": "Det gick inte att återställa prissättningen", "apikey": "API-nyckel", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Hem", @@ -640,7 +643,8 @@ "opencode": "Använd när du föredrar terminalbaserade agentkörningar och skriptautomation via OpenCode.", "kiro": "Använd när du integrerar Kiro och styr modelldirigering centralt från OmniRoute.", "antigravity": "Använd när Antigravity/Kiro-trafik måste avlyssnas genom MITM och dirigeras till OmniRoute.", - "copilot": "Använd när du vill ha Copilot chattstil UX samtidigt som du upprätthåller OmniRoute-nycklar och routingregler." + "copilot": "Använd när du vill ha Copilot chattstil UX samtidigt som du upprätthåller OmniRoute-nycklar och routingregler.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE med MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "builderModel": "Model", + "builderComboRefStep": "Add combo reference", + "filterIntelligent": "Intelligent", + "builderSelectModel": "Select model", + "reviewStrategy": "Strategy", + "weightCostInv": "Cost", + "weightQuota": "Quota", + "builderFlowTitle": "Combo Builder Flow", + "weightTaskFit": "Task Fit", + "reviewNoSteps": "No steps configured", + "builderStage": { + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + } + }, + "strategyRules": "Rules (6-Factor Scoring)", + "builderSelectProvider": "Select provider", + "excludedProviders": "Excluded Providers", + "builderTitle": "Build a Combo", + "builderAccount": "Account", + "reviewIntelligentTitle": "Intelligent Routing Config", + "builderBrowseCatalog": "Browse catalog", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderStageLocked": "Locked — complete previous stage first", + "reviewComboRefs": "Combo References", + "weightTierPriority": "Tier", + "routerStrategyLabel": "Router Strategy", + "candidatePoolEmpty": "No active providers available yet.", + "builderAddStep": "Add step", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "filterEmptyTitle": "No combos match this strategy filter.", + "contextRelay": "Context Relay", + "reviewSteps": "Steps", + "providerScores": "Provider Scores", + "contextRelayMaxMessages": "Max Messages For Summary", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "weightLatencyInv": "Latency", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "budgetCapLabel": "Budget Cap (USD / request)", + "normalOperation": "Normal Operation", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "reviewName": "Name", + "contextRelaySummaryModel": "Summary Model", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "cooldownMinutes": "Cooldown: {minutes}m", + "statusOverview": "Status Overview", + "emailVisibilityStateOn": "On", + "modePackLabel": "Mode Pack", + "failedReorder": "Failed to reorder models", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "incidentMode": "Incident Mode", + "builderStagePending": "Pending", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderStageCurrent": "Current stage", + "noExcludedProviders": "No providers are currently excluded.", + "reorderHandle": "Drag to reorder", + "activeModePack": "Active Mode Pack", + "builderPinnedAccount": "Pinned Account", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderPreview": "Preview", + "weightStability": "Stability", + "candidatePoolLabel": "Candidate Pool", + "builderStageVisited": "Stage completed", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "reviewSequence": "Model Sequence", + "weightHealth": "Health", + "reviewProviders": "Providers", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderProvider": "Provider", + "filterAll": "All", + "builderProviderFirst": "Pick provider first", + "candidatePoolAllProviders": "All providers", + "emailVisibilityStateOff": "Off", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "explorationRateLabel": "Exploration Rate", + "builderComboRef": "Combo Ref", + "builderLoadingProviders": "Loading providers...", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewAgentFlags": "Agent Flags", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "budgetCapPlaceholder": "No limit", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderLegacyEntry": "Legacy entry", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "reviewAdvanced": "Advanced Settings", + "reviewAccounts": "Accounts", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderAddComboRef": "Add combo reference", + "filterDeterministic": "Deterministic" }, "costs": { "title": "Kostnader", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "embeddings": "Embeddings", + "modelsActiveCount": "{active}/{total} active", + "imagesGenerations": "Images Generations", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "noModelsMatch": "No models match \"{filter}\"", + "selectAllModels": "Select all", + "repairEnvWorking": "Repairing...", + "audioTranscriptions": "Audio Transcriptions", + "hideEmails": "Hide all emails", + "audioSpeech": "Audio Speech", + "repairEnvFailed": "Failed to repair .env", + "repairEnv": "Repair env", + "repairEnvSuccess": "OAuth defaults restored", + "showEmails": "Show all emails", + "deselectAllModels": "Deselect all" }, "settings": { "title": "Inställningar", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Översättare", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Väntar på OpenAI-auktorisering...", "waitingForAntigravityAuthorization": "Väntar på antigravitationstillstånd...", "waitingForQoderAuthorization": "Väntar på Qoder-auktorisering...", - "exchangingCodeForTokens": "Byter ut kod för tokens..." + "exchangingCodeForTokens": "Byter ut kod för tokens...", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "semanticCache": "Semantic Cache", + "cacheRateDesc": "of total requests", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "lastUpdated": "Last updated", + "trendHour": "Hour", + "hoursTracked": "hours tracked", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "busiestHour": "Busiest Hour", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "activityVolume": "Activity", + "cacheRate": "Cache Rate", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "cachedRequests24h": "Cached Requests (24h)", + "peakCacheRate": "Peak Cache Rate" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 4b1f35c9bd..a795c81677 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -136,7 +136,10 @@ "Failed to save pricing": "บันทึกราคาไม่สำเร็จ", "Failed to reset pricing": "ไม่สามารถรีเซ็ตราคาได้", "apikey": "คีย์ API", - "http": "HTTP" + "http": "HTTP", + "goToDashboard": "Go to Dashboard", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "บ้าน", @@ -640,7 +643,8 @@ "opencode": "ใช้เมื่อคุณต้องการเรียกใช้ Terminal-Native Agent และใช้สคริปต์อัตโนมัติผ่าน OpenCode", "kiro": "ใช้เมื่อรวม Kiro และควบคุมการกำหนดเส้นทางโมเดลจากส่วนกลางจาก OmniRoute", "antigravity": "ใช้เมื่อต้องสกัดกั้นการรับส่งข้อมูล Antigravity/Kiro ผ่าน MITM และกำหนดเส้นทางไปยัง OmniRoute", - "copilot": "ใช้เมื่อคุณต้องการ UX รูปแบบการแชทของ Copilot ในขณะที่บังคับใช้คีย์ OmniRoute และกฎการกำหนดเส้นทาง" + "copilot": "ใช้เมื่อคุณต้องการ UX รูปแบบการแชทของ Copilot ในขณะที่บังคับใช้คีย์ OmniRoute และกฎการกำหนดเส้นทาง", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google ต้านแรงโน้มถ่วง IDE พร้อม MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "reviewIntelligentTitle": "Intelligent Routing Config", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "failedReorder": "Failed to reorder models", + "candidatePoolLabel": "Candidate Pool", + "routerStrategyLabel": "Router Strategy", + "builderStage": { + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + }, + "review": { + "description": "Final validation before saving", + "label": "Review" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + } + }, + "candidatePoolEmpty": "No active providers available yet.", + "emailVisibilityStateOn": "On", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "reviewAccounts": "Accounts", + "contextRelayHandoffThreshold": "Handoff Threshold", + "filterDeterministic": "Deterministic", + "reviewComboRefs": "Combo References", + "weightTierPriority": "Tier", + "reviewSequence": "Model Sequence", + "builderProviderFirst": "Pick provider first", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "reviewAgentFlags": "Agent Flags", + "builderStageVisited": "Stage completed", + "reviewName": "Name", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderLegacyEntry": "Legacy entry", + "builderAccount": "Account", + "builderStagePending": "Pending", + "builderProvider": "Provider", + "builderLoadingProviders": "Loading providers...", + "builderPreview": "Preview", + "builderTitle": "Build a Combo", + "modePackUpdated": "Mode pack updated to {pack}.", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "budgetCapPlaceholder": "No limit", + "reviewNoSteps": "No steps configured", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewStrategy": "Strategy", + "excludedProviders": "Excluded Providers", + "modePackLabel": "Mode Pack", + "reorderHandle": "Drag to reorder", + "weightTaskFit": "Task Fit", + "reviewSteps": "Steps", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "builderModel": "Model", + "explorationRateLabel": "Exploration Rate", + "reviewProviders": "Providers", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "builderPinnedAccount": "Pinned Account", + "providerScores": "Provider Scores", + "builderAddStep": "Add step", + "contextRelaySummaryModel": "Summary Model", + "strategyRules": "Rules (6-Factor Scoring)", + "weightCostInv": "Cost", + "statusOverview": "Status Overview", + "filterAll": "All", + "budgetCapLabel": "Budget Cap (USD / request)", + "weightQuota": "Quota", + "normalOperation": "Normal Operation", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "contextRelay": "Context Relay", + "incidentMode": "Incident Mode", + "builderBrowseCatalog": "Browse catalog", + "builderSelectProvider": "Select provider", + "builderSelectModel": "Select model", + "noExcludedProviders": "No providers are currently excluded.", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "reviewAdvanced": "Advanced Settings", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "weightHealth": "Health", + "builderStageLocked": "Locked — complete previous stage first", + "builderComboRefStep": "Add combo reference", + "builderComboRef": "Combo Ref", + "builderFlowTitle": "Combo Builder Flow", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "builderStageCurrent": "Current stage", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "emailVisibilityStateOff": "Off", + "activeModePack": "Active Mode Pack", + "builderAddComboRef": "Add combo reference", + "cooldownMinutes": "Cooldown: {minutes}m", + "filterEmptyTitle": "No combos match this strategy filter.", + "contextRelayMaxMessages": "Max Messages For Summary", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "candidatePoolAllProviders": "All providers", + "filterIntelligent": "Intelligent", + "weightLatencyInv": "Latency", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "weightStability": "Stability" }, "costs": { "title": "ค่าใช้จ่าย", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "repairEnvWorking": "Repairing...", + "noModelsMatch": "No models match \"{filter}\"", + "audioSpeech": "Audio Speech", + "selectAllModels": "Select all", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnvSuccess": "OAuth defaults restored", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env", + "showEmails": "Show all emails", + "deselectAllModels": "Deselect all", + "repairEnv": "Repair env", + "embeddings": "Embeddings", + "audioTranscriptions": "Audio Transcriptions", + "hideEmails": "Hide all emails", + "imagesGenerations": "Images Generations" }, "settings": { "title": "การตั้งค่า", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "นักแปล", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "กำลังรอการอนุญาต OpenAI...", "waitingForAntigravityAuthorization": "กำลังรอการอนุญาตต้านแรงโน้มถ่วง...", "waitingForQoderAuthorization": "กำลังรอการอนุญาตจาก Qoder...", - "exchangingCodeForTokens": "การเปลี่ยนรหัสเป็นโทเค็น..." + "exchangingCodeForTokens": "การเปลี่ยนรหัสเป็นโทเค็น...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version" }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "hoursTracked": "hours tracked", + "cacheRateDesc": "of total requests", + "busiestHour": "Busiest Hour", + "entriesLoadError": "Failed to load semantic cache entries.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "semanticCache": "Semantic Cache", + "cachedRequests24h": "Cached Requests (24h)", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "trendHour": "Hour", + "peakCacheRate": "Peak Cache Rate", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "activityVolume": "Activity", + "cacheRate": "Cache Rate", + "lastUpdated": "Last updated" }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index c1c3fdacb5..a42be28be3 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Fiyat kaydedilemedi", "Failed to reset pricing": "Fiyatlandırma sıfırlanamadı", "apikey": "API Anahtarı", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "goToDashboard": "Go to Dashboard", + "checkSystemStatus": "Check System Status" }, "sidebar": { "home": "Ana Sayfa", @@ -640,7 +643,8 @@ "opencode": "Terminal yerel ajan çalıştırmaları ve OpenCode ile betik tabanlı otomasyon tercih ettiğinizde kullanın.", "kiro": "Kiro'yu entegre ederken model yönlendirmesini OmniRoute üzerinden merkezi olarak yönetmek istediğinizde kullanın.", "antigravity": "Antigravity/Kiro trafiğinin MITM üzerinden yakalanıp OmniRoute'a yönlendirilmesi gerektiğinde kullanın.", - "copilot": "OmniRoute anahtarları ve yönlendirme kuralları uygulanırken Copilot sohbet tarzı bir UX istediğinizde kullanın." + "copilot": "OmniRoute anahtarları ve yönlendirme kuralları uygulanırken Copilot sohbet tarzı bir UX istediğinizde kullanın.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "MITM ile Google Antigravity IDE", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI kodlama ajanı (Terminal)", "kiro": "Amazon Kiro - AI destekli IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + }, + "context-relay": { + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "builderStage": { + "intelligent": { + "label": "Smart Routing", + "description": "Auto-routing candidate pool, presets, and scoring" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "description": "Name and starting template", + "label": "Basics" + } + }, + "builderSelectProvider": "Select provider", + "candidatePoolAllProviders": "All providers", + "budgetCapPlaceholder": "No limit", + "builderStagePending": "Pending", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "builderStageVisited": "Stage completed", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "reviewSequence": "Model Sequence", + "weightTaskFit": "Task Fit", + "builderComboRef": "Combo Ref", + "weightStability": "Stability", + "explorationRateLabel": "Exploration Rate", + "reviewComboRefs": "Combo References", + "reviewAgentFlags": "Agent Flags", + "builderPreview": "Preview", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "candidatePoolLabel": "Candidate Pool", + "budgetCapLabel": "Budget Cap (USD / request)", + "builderLoadingProviders": "Loading providers...", + "reviewIntelligentTitle": "Intelligent Routing Config", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "activeModePack": "Active Mode Pack", + "failedReorder": "Failed to reorder models", + "builderAddComboRef": "Add combo reference", + "routerStrategyLabel": "Router Strategy", + "candidatePoolEmpty": "No active providers available yet.", + "noExcludedProviders": "No providers are currently excluded.", + "builderTitle": "Build a Combo", + "builderComboRefStep": "Add combo reference", + "incidentMode": "Incident Mode", + "builderPinnedAccount": "Pinned Account", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "emailVisibilityStateOff": "Off", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "weightTierPriority": "Tier", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderProviderFirst": "Pick provider first", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderAddStep": "Add step", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewSteps": "Steps", + "builderProvider": "Provider", + "weightQuota": "Quota", + "filterEmptyTitle": "No combos match this strategy filter.", + "cooldownMinutes": "Cooldown: {minutes}m", + "filterAll": "All", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "contextRelayMaxMessages": "Max Messages For Summary", + "normalOperation": "Normal Operation", + "statusOverview": "Status Overview", + "excludedProviders": "Excluded Providers", + "contextRelay": "Context Relay", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "filterDeterministic": "Deterministic", + "reviewNoSteps": "No steps configured", + "weightCostInv": "Cost", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "reorderHandle": "Drag to reorder", + "builderLegacyEntry": "Legacy entry", + "modePackLabel": "Mode Pack", + "reviewProviders": "Providers", + "builderStageLocked": "Locked — complete previous stage first", + "contextRelaySummaryModel": "Summary Model", + "builderSelectModel": "Select model", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "strategyRules": "Rules (6-Factor Scoring)", + "reviewAccounts": "Accounts", + "weightHealth": "Health", + "reviewAdvanced": "Advanced Settings", + "builderStageCurrent": "Current stage", + "reviewStrategy": "Strategy", + "filterIntelligent": "Intelligent", + "weightLatencyInv": "Latency", + "builderFlowTitle": "Combo Builder Flow", + "builderBrowseCatalog": "Browse catalog", + "builderModel": "Model", + "modePackUpdated": "Mode pack updated to {pack}.", + "builderAccount": "Account", + "emailVisibilityStateOn": "On", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "reviewName": "Name", + "providerScores": "Provider Scores" }, "costs": { "title": "Maliyetler", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "JSON-RPC isteklerini `message/send` veya `message/stream` kullanarak `POST /a2a` adresine gönderin.", "a2aQuickStartStep3": "Görevleri `tasks/get` ve `tasks/cancel` ile izleyin ve yönetin.", "completionsLegacy": "Tamamlamalar (Eski)", - "completionsLegacyDesc": "Eski OpenAI metin tamamlamaları — hem bilgi istemi dizesini hem de mesaj dizisi biçimini kabul eder" + "completionsLegacyDesc": "Eski OpenAI metin tamamlamaları — hem bilgi istemi dizesini hem de mesaj dizisi biçimini kabul eder", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Uç Nokta Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "deselectAllModels": "Deselect all", + "imagesGenerations": "Images Generations", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnv": "Repair env", + "showEmails": "Show all emails", + "repairEnvFailed": "Failed to repair .env", + "repairEnvWorking": "Repairing...", + "hideEmails": "Hide all emails", + "audioTranscriptions": "Audio Transcriptions", + "modelsActiveCount": "{active}/{total} active", + "selectAllModels": "Select all", + "noModelsMatch": "No models match \"{filter}\"", + "embeddings": "Embeddings", + "audioSpeech": "Audio Speech", + "repairEnvSuccess": "OAuth defaults restored" }, "settings": { "title": "Ayarlar", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Çeviri", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "OpenAI yetkilendirmesi bekleniyor...", "waitingForAntigravityAuthorization": "Antigravity yetkilendirmesi bekleniyor...", "waitingForQoderAuthorization": "Qoder yetkilendirmesi bekleniyor...", - "exchangingCodeForTokens": "Kod jetonlarla değiştiriliyor..." + "exchangingCodeForTokens": "Kod jetonlarla değiştiriliyor...", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended.", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "activityVolume": "Activity", + "trendHour": "Hour", + "cacheRate": "Cache Rate", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "busiestHour": "Busiest Hour", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "cacheRateDesc": "of total requests", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "hoursTracked": "hours tracked", + "cachedRequests24h": "Cached Requests (24h)", + "peakCacheRate": "Peak Cache Rate", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "lastUpdated": "Last updated", + "entriesLoadError": "Failed to load semantic cache entries.", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "semanticCache": "Semantic Cache", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index f915ec7747..3e47d1454d 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Не вдалося зберегти ціни", "Failed to reset pricing": "Не вдалося скинути ціни", "apikey": "Ключ API", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "додому", @@ -640,7 +643,8 @@ "opencode": "Використовуйте, якщо ви віддаєте перевагу запуску агента на терміналі та автоматизації за сценарієм через OpenCode.", "kiro": "Використовуйте під час інтеграції Kiro та централізованого керування маршрутизацією моделі з OmniRoute.", "antigravity": "Використовуйте, коли трафік Antigravity/Kiro потрібно перехопити через MITM і направити на OmniRoute.", - "copilot": "Використовуйте, коли вам потрібен UX у стилі чату Copilot із застосуванням ключів OmniRoute і правил маршрутизації." + "copilot": "Використовуйте, коли вам потрібен UX у стилі чату Copilot із застосуванням ключів OmniRoute і правил маршрутизації.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE з MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "context-relay": { + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context.", + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "builderComboRefStep": "Add combo reference", + "builderFlowTitle": "Combo Builder Flow", + "noExcludedProviders": "No providers are currently excluded.", + "reviewProviders": "Providers", + "excludedProviders": "Excluded Providers", + "routerStrategyLabel": "Router Strategy", + "reviewSequence": "Model Sequence", + "builderStage": { + "strategy": { + "label": "Strategy", + "description": "Routing behavior and advanced settings" + }, + "steps": { + "label": "Steps", + "description": "Provider, model, and account selection" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "basics": { + "label": "Basics", + "description": "Name and starting template" + } + }, + "reviewSteps": "Steps", + "builderPinnedAccount": "Pinned Account", + "builderSelectProvider": "Select provider", + "builderSelectModel": "Select model", + "reviewAgentFlags": "Agent Flags", + "builderAccount": "Account", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderStageVisited": "Stage completed", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayHandoffThreshold": "Handoff Threshold", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "emailVisibilityStateOff": "Off", + "candidatePoolLabel": "Candidate Pool", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "filterEmptyTitle": "No combos match this strategy filter.", + "builderAddStep": "Add step", + "incidentMode": "Incident Mode", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "explorationRateLabel": "Exploration Rate", + "reorderHandle": "Drag to reorder", + "budgetCapLabel": "Budget Cap (USD / request)", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "activeModePack": "Active Mode Pack", + "weightQuota": "Quota", + "normalOperation": "Normal Operation", + "builderProviderFirst": "Pick provider first", + "weightCostInv": "Cost", + "builderLoadingProviders": "Loading providers...", + "weightLatencyInv": "Latency", + "reviewAdvanced": "Advanced Settings", + "filterAll": "All", + "builderTitle": "Build a Combo", + "contextRelay": "Context Relay", + "weightTaskFit": "Task Fit", + "contextRelayMaxMessages": "Max Messages For Summary", + "filterIntelligent": "Intelligent", + "weightTierPriority": "Tier", + "modePackUpdated": "Mode pack updated to {pack}.", + "reviewNoSteps": "No steps configured", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "budgetCapPlaceholder": "No limit", + "reviewName": "Name", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderStageLocked": "Locked — complete previous stage first", + "weightHealth": "Health", + "builderStageCurrent": "Current stage", + "providerScores": "Provider Scores", + "emailVisibilityStateOn": "On", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "reviewComboRefs": "Combo References", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "reviewIntelligentTitle": "Intelligent Routing Config", + "failedReorder": "Failed to reorder models", + "builderComboRef": "Combo Ref", + "builderStagePending": "Pending", + "reviewStrategy": "Strategy", + "statusOverview": "Status Overview", + "weightStability": "Stability", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "builderPreview": "Preview", + "builderBrowseCatalog": "Browse catalog", + "reviewAccounts": "Accounts", + "builderProvider": "Provider", + "builderAddComboRef": "Add combo reference", + "builderModel": "Model", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "filterDeterministic": "Deterministic", + "builderLegacyEntry": "Legacy entry", + "modePackLabel": "Mode Pack", + "candidatePoolEmpty": "No active providers available yet.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "cooldownMinutes": "Cooldown: {minutes}m", + "candidatePoolAllProviders": "All providers", + "strategyRules": "Rules (6-Factor Scoring)" }, "costs": { "title": "Витрати", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", + "musicGeneration": "Music Generation" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "embeddings": "Embeddings", + "hideEmails": "Hide all emails", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvSuccess": "OAuth defaults restored", + "repairEnvWorking": "Repairing...", + "audioTranscriptions": "Audio Transcriptions", + "selectAllModels": "Select all", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "imagesGenerations": "Images Generations", + "audioSpeech": "Audio Speech", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active", + "repairEnvFailed": "Failed to repair .env", + "repairEnv": "Repair env", + "deselectAllModels": "Deselect all" }, "settings": { "title": "Налаштування", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayMaxMessages": "Max Messages For Summary", + "contextRelaySummaryModel": "Summary Model", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelayHandoffThreshold": "Handoff Threshold" }, "translator": { "title": "Перекладач", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Очікування авторизації OpenAI...", "waitingForAntigravityAuthorization": "Очікування авторизації Antigravity...", "waitingForQoderAuthorization": "Очікування авторизації Qoder...", - "exchangingCodeForTokens": "Обмін коду на токени..." + "exchangingCodeForTokens": "Обмін коду на токени...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "cacheRateDesc": "of total requests", + "semanticCache": "Semantic Cache", + "cachedRequests24h": "Cached Requests (24h)", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "trendHour": "Hour", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "peakCacheRate": "Peak Cache Rate", + "activityVolume": "Activity", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "busiestHour": "Busiest Hour", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "hoursTracked": "hours tracked", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "lastUpdated": "Last updated", + "cacheRate": "Cache Rate", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index 1f8e77dc66..74517330fa 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -136,7 +136,10 @@ "Failed to save pricing": "Không lưu được giá", "Failed to reset pricing": "Không thể đặt lại giá", "apikey": "Khóa API", - "http": "HTTP" + "http": "HTTP", + "nothingHere": "Nothing here yet", + "checkSystemStatus": "Check System Status", + "goToDashboard": "Go to Dashboard" }, "sidebar": { "home": "Trang chủ", @@ -640,7 +643,8 @@ "opencode": "Sử dụng khi bạn thích chạy tác nhân gốc trên thiết bị đầu cuối và tự động hóa theo kịch bản thông qua OpenCode.", "kiro": "Sử dụng khi tích hợp Kiro và điều khiển định tuyến mô hình tập trung từ OmniRoute.", "antigravity": "Sử dụng khi lưu lượng truy cập AntiGravity/Kiro phải bị chặn thông qua MITM và được định tuyến đến OmniRoute.", - "copilot": "Sử dụng khi bạn muốn UX kiểu trò chuyện Copilot trong khi thực thi các khóa OmniRoute và quy tắc định tuyến." + "copilot": "Sử dụng khi bạn muốn UX kiểu trò chuyện Copilot trong khi thực thi các khóa OmniRoute và quy tắc định tuyến.", + "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute." }, "toolDescriptions": { "antigravity": "IDE chống trọng lực của Google với MITM", @@ -655,7 +659,8 @@ "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -890,6 +895,16 @@ "when": "Use when you want perfectly even spread — each model used once before repeating.", "avoid": "Avoid when models have different quality or latency and order matters.", "example": "Example: Multiple accounts of the same model to distribute usage evenly." + }, + "p2c": { + "example": "Example: High-throughput inference across 4+ equivalent model endpoints.", + "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", + "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin." + }, + "context-relay": { + "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion.", + "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", + "when": "Use when long sessions must survive account rotation without losing the working context." } }, "advancedHelp": { @@ -1009,7 +1024,117 @@ "wizardStep3Title": "Choose Strategy", "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo" + "wizardStep4Desc": "Review your configuration and activate the combo", + "reviewProviders": "Providers", + "builderStage": { + "basics": { + "label": "Basics", + "description": "Name and starting template" + }, + "steps": { + "description": "Provider, model, and account selection", + "label": "Steps" + }, + "strategy": { + "description": "Routing behavior and advanced settings", + "label": "Strategy" + }, + "review": { + "label": "Review", + "description": "Final validation before saving" + }, + "intelligent": { + "description": "Auto-routing candidate pool, presets, and scoring", + "label": "Smart Routing" + } + }, + "filterAll": "All", + "advancedWeightsTitle": "Advanced: Scoring Weights", + "providerScores": "Provider Scores", + "explorationRateLabel": "Exploration Rate", + "intelligentPanelTitle": "Intelligent Routing Dashboard", + "emailVisibilityStateOff": "Off", + "builderSelectProvider": "Select provider", + "filterIntelligent": "Intelligent", + "modePackUpdated": "Mode pack updated to {pack}.", + "activeModePack": "Active Mode Pack", + "weightStability": "Stability", + "contextRelay": "Context Relay", + "candidatePoolEmpty": "No active providers available yet.", + "emailVisibilityStateOn": "On", + "builderComboRef": "Combo Ref", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", + "builderAccount": "Account", + "normalOperation": "Normal Operation", + "builderStageCurrent": "Current stage", + "failedReorder": "Failed to reorder models", + "weightQuota": "Quota", + "filterDeterministic": "Deterministic", + "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", + "builderSelectModel": "Select model", + "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", + "strategyRules": "Rules (6-Factor Scoring)", + "builderPinnedAccount": "Pinned Account", + "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", + "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", + "builderStagePending": "Pending", + "builderLoadingProviders": "Loading providers...", + "excludedProviders": "Excluded Providers", + "budgetCapLabel": "Budget Cap (USD / request)", + "contextRelaySummaryModel": "Summary Model", + "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", + "reviewAdvanced": "Advanced Settings", + "reviewComboRefs": "Combo References", + "reviewNoSteps": "No steps configured", + "reviewSteps": "Steps", + "statusOverview": "Status Overview", + "builderFlowTitle": "Combo Builder Flow", + "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", + "contextRelayMaxMessages": "Max Messages For Summary", + "reorderHandle": "Drag to reorder", + "weightCostInv": "Cost", + "builderStageLocked": "Locked — complete previous stage first", + "candidatePoolLabel": "Candidate Pool", + "weightTaskFit": "Task Fit", + "weightLatencyInv": "Latency", + "reviewAccounts": "Accounts", + "allProvidersHealthy": "Providers are reporting healthy routing conditions.", + "builderIntelligentTitle": "Intelligent Routing Configuration", + "modePackLabel": "Mode Pack", + "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", + "routerStrategyLabel": "Router Strategy", + "builderStageVisited": "Stage completed", + "candidatePoolAllProviders": "All providers", + "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", + "builderModel": "Model", + "builderBrowseCatalog": "Browse catalog", + "builderPreview": "Preview", + "budgetCapPlaceholder": "No limit", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", + "reviewName": "Name", + "cooldownMinutes": "Cooldown: {minutes}m", + "builderProviderFirst": "Pick provider first", + "reviewIntelligentTitle": "Intelligent Routing Config", + "incidentMode": "Incident Mode", + "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", + "highCircuitBreakerRate": "High circuit breaker trip rate detected.", + "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", + "weightHealth": "Health", + "builderAddComboRef": "Add combo reference", + "reviewAgentFlags": "Agent Flags", + "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", + "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", + "weightTierPriority": "Tier", + "builderLegacyEntry": "Legacy entry", + "builderAddStep": "Add step", + "noExcludedProviders": "No providers are currently excluded.", + "builderTitle": "Build a Combo", + "builderProvider": "Provider", + "reviewSequence": "Model Sequence", + "reviewStrategy": "Strategy", + "builderComboRefStep": "Add combo reference", + "filterEmptyTitle": "No combos match this strategy filter." }, "costs": { "title": "Chi phí", @@ -1147,7 +1272,9 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "musicGeneration": "Music Generation", + "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1749,7 +1876,22 @@ "close": "Close", "statusDeactivated": "Deactivated (Manual)", "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted" + "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", + "audioTranscriptions": "Audio Transcriptions", + "audioSpeech": "Audio Speech", + "noModelsMatch": "No models match \"{filter}\"", + "repairEnvWorking": "Repairing...", + "deselectAllModels": "Deselect all", + "hideEmails": "Hide all emails", + "repairEnvFailed": "Failed to repair .env", + "repairEnvSuccess": "OAuth defaults restored", + "embeddings": "Embeddings", + "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", + "repairEnv": "Repair env", + "selectAllModels": "Select all", + "imagesGenerations": "Images Generations", + "showEmails": "Show all emails", + "modelsActiveCount": "{active}/{total} active" }, "settings": { "title": "Cài đặt", @@ -2266,7 +2408,11 @@ "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", "noExactAliasesConfigured": "No exact-match aliases configured.", "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured." + "noWildcardAliasesConfigured": "No wildcard aliases configured.", + "contextRelayHandoffThreshold": "Handoff Threshold", + "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", + "contextRelaySummaryModel": "Summary Model", + "contextRelayMaxMessages": "Max Messages For Summary" }, "translator": { "title": "Người phiên dịch", @@ -2692,7 +2838,11 @@ "waitingForOpenAIAuthorization": "Đang chờ ủy quyền OpenAI...", "waitingForAntigravityAuthorization": "Đang chờ ủy quyền chống hấp dẫn...", "waitingForQoderAuthorization": "Đang chờ ủy quyền Qoder...", - "exchangingCodeForTokens": "Đổi mã lấy token..." + "exchangingCodeForTokens": "Đổi mã lấy token...", + "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", + "nodeIncompatibleTitle": "Incompatible Node.js Version", + "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", + "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS) or 22.22.2+ (22.x LTS). Node 22 LTS is recommended." }, "landing": { "brandName": "OmniRoute", @@ -3108,7 +3258,26 @@ "peakCached": "Peak cached", "deduplicatedRequests": "Deduplicated Requests", "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed" + "totalProcessed": "Total Requests Processed", + "lastUpdated": "Last updated", + "hoursTracked": "hours tracked", + "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", + "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", + "semanticCache": "Semantic Cache", + "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", + "busiestHour": "Busiest Hour", + "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", + "cachedRequests24h": "Cached Requests (24h)", + "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", + "entriesLoadError": "Failed to load semantic cache entries.", + "cacheRate": "Cache Rate", + "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", + "trendHour": "Hour", + "peakCacheRate": "Peak Cache Rate", + "activityVolume": "Activity", + "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", + "cacheRateDesc": "of total requests", + "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals." }, "memory": { "title": "Memory Management", @@ -3132,7 +3301,8 @@ "factual": "Factual", "episodic": "Episodic", "procedural": "Procedural", - "semantic": "Semantic" + "semantic": "Semantic", + "delete": "Delete" }, "skills": { "title": "Skills", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 171bd2152e..19eaf5f6d0 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -659,7 +659,8 @@ "opencode": "OpenCode AI 编码智能体(终端)", "kiro": "Amazon Kiro - AI 驱动 IDE", "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant" + "copilot": "GitHub Copilot AI Assistant", + "qwen": "Alibaba Qwen Code CLI" }, "guides": { "cursor": { @@ -1976,7 +1977,11 @@ "statusBanned": "已封禁 / 沙箱违规", "statusCreditsExhausted": "余额不足 / 配额已耗尽", "showEmails": "显示所有邮箱", - "hideEmails": "隐藏所有邮箱" + "hideEmails": "隐藏所有邮箱", + "imagesGenerations": "Images Generations", + "audioSpeech": "Audio Speech", + "audioTranscriptions": "Audio Transcriptions", + "embeddings": "Embeddings" }, "settings": { "title": "设置",