diff --git a/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx b/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx index a0e58bc0d2..3dabb89695 100644 --- a/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx +++ b/src/app/(dashboard)/dashboard/combos/BuilderIntelligentStep.tsx @@ -164,7 +164,11 @@ export default function BuilderIntelligentStep({ > {MODE_PACK_OPTIONS.map((modePack) => ( ))} diff --git a/src/app/(dashboard)/dashboard/combos/page.tsx b/src/app/(dashboard)/dashboard/combos/page.tsx index 5cd52d6bf6..696ffb1194 100644 --- a/src/app/(dashboard)/dashboard/combos/page.tsx +++ b/src/app/(dashboard)/dashboard/combos/page.tsx @@ -120,6 +120,21 @@ const STRATEGY_GUIDANCE_FALLBACK = { avoid: "Avoid when models have different quality or latency and order matters.", example: "Example: Multiple accounts of the same model to distribute usage evenly.", }, + auto: { + when: "Use when you have one preferred model and only want fallback on failure.", + avoid: "Avoid when you need balanced load between models.", + example: "Example: Primary coding model with cheaper backup for outages.", + }, + lkgp: { + when: "Use when you have one preferred model and only want fallback on failure.", + avoid: "Avoid when you need balanced load between models.", + example: "Example: Primary coding model with cheaper backup for outages.", + }, + "context-optimized": { + when: "Use when you have one preferred model and only want fallback on failure.", + avoid: "Avoid when you need balanced load between models.", + example: "Example: Primary coding model with cheaper backup for outages.", + }, }; const ADVANCED_FIELD_HELP_FALLBACK = { @@ -224,6 +239,33 @@ const STRATEGY_RECOMMENDATIONS_FALLBACK = { "Guarantees no model is skipped or repeated within a cycle.", ], }, + auto: { + title: "Fail-safe baseline", + description: "Use one primary model and keep fallback chain short and reliable.", + tips: [ + "Put your most reliable model first.", + "Keep 1-2 backup models with similar quality.", + "Use safe retries to absorb transient provider failures.", + ], + }, + lkgp: { + title: "Fail-safe baseline", + description: "Use one primary model and keep fallback chain short and reliable.", + tips: [ + "Put your most reliable model first.", + "Keep 1-2 backup models with similar quality.", + "Use safe retries to absorb transient provider failures.", + ], + }, + "context-optimized": { + title: "Fail-safe baseline", + description: "Use one primary model and keep fallback chain short and reliable.", + tips: [ + "Put your most reliable model first.", + "Keep 1-2 backup models with similar quality.", + "Use safe retries to absorb transient provider failures.", + ], + }, }; const COMBO_USAGE_GUIDE_STORAGE_KEY = "omniroute:combos:hide-usage-guide"; @@ -2467,7 +2509,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
{getI18nOrFallback( t, - "builderFlowDescription", + "builderStagesDescription", "Move through the stages in order to define the combo, build the steps, choose the routing strategy and review the result." )}
@@ -2719,7 +2761,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {{getI18nOrFallback( t, - "builderDescription", + "builderStepsDescription", "Build each combo step in sequence: provider, model, then account. This allows repeating the same provider and model with different accounts." )}
@@ -2797,7 +2839,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { @@ -2820,7 +2862,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { ? formatModelDisplay(builderCandidateStep) : getI18nOrFallback( t, - "builderPreviewEmpty", + "previewNextStep", "Choose provider and model to preview the next step." )} @@ -2858,7 +2900,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { @@ -3113,7 +3155,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { className="w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-text-muted hover:text-primary hover:border-primary/30 transition-colors flex items-center justify-center gap-1" > travel_explore - {getI18nOrFallback(t, "builderOpenLegacyCatalog", "Browse legacy model catalog")} + {getI18nOrFallback(t, "browseLegacyCatalog", "Browse legacy model catalog")} )} @@ -3388,34 +3430,31 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { smart_toy -Agent Features
- - — optional, for agent/tool workflows - +{t("agentFeaturesTitle")}
+ {t("agentFeaturesDescription")} {/* System Message Override */}- Only tools whose name matches this regex are forwarded to the provider. Leave - empty to forward all tools. + {t("agentFeaturesToolFilterHint")}
- Pins the provider/model across turns to preserve cache sessions. Internal tags - are stripped before forwarding to the provider. + {t("agentFeaturesContextCacheHint")}
- {images.length} image{images.length > 1 ? "s" : ""} generated + {t("imagesGenerated", { count: images.length })}
Model Playground
-- Test any model directly from the dashboard. Pick a provider, model, and endpoint type, - then send a request to see the raw response. -
+{t("title")}
+{t("description")}
info - Select an audio file to transcribe (mp3, wav, m4a, ogg, flac…) + {t("selectAudioFile")}
)}- Transcription + {t("transcription")}
Store reusable proxies and track assignments.
+{t("description")}
| Name | -Endpoint | -Status | -Health (24h) | -Usage | -Actions | +{t("tableName")} | +{t("tableEndpoint")} | +{t("tableStatus")} | +{t("tableHealth")} | +{t("tableUsage")} | +{t("tableActions")} | {usageById[item.id] != null - ? `${usageById[item.id].count} assignment(s)` - : "—"} + ? t("assignmentsCount", { count: usageById[item.id].count }) + : t("noData")} |
@@ -505,7 +507,7 @@ export default function ProxyRegistryManager() {
onClick={() => void handleTestProxy(item)}
loading={testingId === item.id}
>
- Test
+ {t("test")}
|
@@ -540,13 +542,13 @@ export default function ProxyRegistryManager() {
onClose={() => {
if (!saving) setModalOpen(false);
}}
- title={editingId ? "Edit Proxy" : "Create Proxy"}
+ title={editingId ? t("modalEditTitle") : t("modalCreateTitle")}
maxWidth="lg"
>
|---|