- 🚅 LiteLLM
+ {productNames.liteLLMWithLogo}
{actionLabel}
{isResetPassword ? t("onboarding.formBody.resetDescription") : t("onboarding.formBody.signUpDescription")}
diff --git a/ui/litellm-dashboard/src/components/AIHub/ModelHubTable.tsx b/ui/litellm-dashboard/src/components/AIHub/ModelHubTable.tsx
index 60259b1f7f0..ad27e56dc56 100644
--- a/ui/litellm-dashboard/src/components/AIHub/ModelHubTable.tsx
+++ b/ui/litellm-dashboard/src/components/AIHub/ModelHubTable.tsx
@@ -833,8 +833,6 @@ const ModelHubTable: React.FC = ({
{(() => {
const capabilities = getModelCapabilities(selectedModel);
- const colors = ["green", "blue", "purple", "orange", "red", "yellow"];
-
if (capabilities.length === 0) {
return (
{t("aiHub.modelHubTable.modelDialog.noCapabilities")}
diff --git a/ui/litellm-dashboard/src/components/CreateUserButton.tsx b/ui/litellm-dashboard/src/components/CreateUserButton.tsx
index bf188d36716..b0670dff510 100644
--- a/ui/litellm-dashboard/src/components/CreateUserButton.tsx
+++ b/ui/litellm-dashboard/src/components/CreateUserButton.tsx
@@ -274,7 +274,12 @@ export const CreateUserButton: React.FC
= ({
const userIdField = (
<>
-
+
{({ id, value, onChange, onBlur }) => (
= ({
{({ ref, value, ...control }) => }
diff --git a/ui/litellm-dashboard/src/components/ModelInfoEditForm.tsx b/ui/litellm-dashboard/src/components/ModelInfoEditForm.tsx
index 7a60e149c34..337de5ec74d 100644
--- a/ui/litellm-dashboard/src/components/ModelInfoEditForm.tsx
+++ b/ui/litellm-dashboard/src/components/ModelInfoEditForm.tsx
@@ -50,6 +50,7 @@ import {
isPositiveWholePtuCount,
ptuWindowIsOrdered,
} from "../utils/ptuValidation";
+import { codeSamples } from "@/i18n/untranslated/codeSamples";
interface PtuEditField {
name: string;
@@ -811,7 +812,7 @@ const ModelInfoEditForm: React.FC = ({
)}
@@ -841,7 +842,7 @@ const ModelInfoEditForm: React.FC = ({
aria-label={t("modelInfoEditForm.fields.litellmParams.label")}
value={(value as string) ?? ""}
rows={4}
- placeholder={'{\n "drop_params": true\n}'}
+ placeholder={codeSamples.models.litellmParamsJson}
/>
)}
diff --git a/ui/litellm-dashboard/src/components/Navbar/ViewSwitcher.tsx b/ui/litellm-dashboard/src/components/Navbar/ViewSwitcher.tsx
index e9eb5586c42..5c8d4a7a850 100644
--- a/ui/litellm-dashboard/src/components/Navbar/ViewSwitcher.tsx
+++ b/ui/litellm-dashboard/src/components/Navbar/ViewSwitcher.tsx
@@ -16,6 +16,7 @@ import { useUISettings } from "@/app/(dashboard)/hooks/uiSettings/useUISettings"
import { uiHref } from "@/utils/uiHref";
import { cn } from "@/lib/cva.config";
import i18n from "@/i18n/i18n";
+import { productNames } from "@/i18n/untranslated/productNames";
const GATEWAY = "ai-gateway";
const CHAT = "chat";
@@ -123,7 +124,7 @@ export default function ViewSwitcher({ className, contentClassName }: ViewSwitch
label: (
- Moyai {" "}
+ {productNames.moyai} {" "}
{t("shell.viewSwitcher.moyaiDescription")}
diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/CyberArk/CyberArk.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/CyberArk/CyberArk.tsx
index 97ab9654e4b..c9b853dd99b 100644
--- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/CyberArk/CyberArk.tsx
+++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/CyberArk/CyberArk.tsx
@@ -20,6 +20,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import CyberArkEmptyPlaceholder from "./CyberArkEmptyPlaceholder";
import EditCyberArkModal from "./EditCyberArkModal";
import { FIELD_LABELS, SENSITIVE_FIELDS } from "./constants";
+import { productNames } from "@/i18n/untranslated/productNames";
function detectAuthMethod(values: Record, t: TFunction): string {
if (values.cyberark_api_key) return t("adminPanel.cyberArk.authMethods.apiKey");
@@ -145,7 +146,7 @@ export default function CyberArk() {
- CyberArk Conjur
+ {productNames.cyberArkConjur}
{t("adminPanel.cyberArk.description")}
diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/HashicorpVault/HashicorpVault.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/HashicorpVault/HashicorpVault.tsx
index 5d23be5b967..4857618483d 100644
--- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/HashicorpVault/HashicorpVault.tsx
+++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/HashicorpVault/HashicorpVault.tsx
@@ -20,6 +20,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import EditHashicorpVaultModal from "./EditHashicorpVaultModal";
import HashicorpVaultEmptyPlaceholder from "./HashicorpVaultEmptyPlaceholder";
import { FIELD_LABELS, SENSITIVE_FIELDS } from "./constants";
+import { productNames } from "@/i18n/untranslated/productNames";
function detectAuthMethod(values: Record, t: TFunction): string {
if (values.approle_role_id || values.approle_secret_id) return "AppRole";
@@ -142,7 +143,7 @@ export default function HashicorpVault() {
- Hashicorp Vault
+ {productNames.hashicorpVault}
{t("adminPanel.hashicorpVault.description")}
diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/MCPToolSearchSettings/MCPToolSearchSettings.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/MCPToolSearchSettings/MCPToolSearchSettings.tsx
index ed3fed59a98..f15b3648114 100644
--- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/MCPToolSearchSettings/MCPToolSearchSettings.tsx
+++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/MCPToolSearchSettings/MCPToolSearchSettings.tsx
@@ -31,6 +31,7 @@ import {
storedValuesToForm,
ToolSearchFormValues,
} from "./toolSearchForm";
+import { codeSamples } from "@/i18n/untranslated/codeSamples";
interface MCPToolSearchSettingsProps {
accessToken: string | null;
@@ -232,7 +233,7 @@ export default function MCPToolSearchSettings({ accessToken }: MCPToolSearchSett
id={id}
ref={ref}
value={value}
- placeholder={"my_server-get_rates\nmy_server-list_accounts"}
+ placeholder={codeSamples.mcpServers.toolSearchToolNames}
onChange={(event) => onChange(event.target.value)}
onBlur={onBlur}
disabled={isUpdating}
diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/PluginSettings/PluginSettings.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/PluginSettings/PluginSettings.tsx
index fb7452b0c11..5dea4bfb5f6 100644
--- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/PluginSettings/PluginSettings.tsx
+++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/PluginSettings/PluginSettings.tsx
@@ -16,6 +16,7 @@ import { UiLoadingSpinner } from "@/components/ui/ui-loading-spinner";
import { useZodForm } from "@/lib/forms/useZodForm";
import { pluginSchema, type PluginFormValues } from "./schema";
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
+import { productNames } from "@/i18n/untranslated/productNames";
const INLINE_CODE_CLASS = "rounded-sm bg-muted px-1 py-0.5 font-mono text-xs";
@@ -209,7 +210,7 @@ export default function PluginSettings() {
name="display_name"
label={t("adminPanel.pluginSettings.modal.fields.displayName.label")}
>
- {({ ref, ...field }) => }
+ {({ ref, ...field }) => }
`page-visibility-${page}`;
+
interface PageVisibilitySettingsProps {
enabledPagesInternalUsers: string[] | null | undefined;
enabledPagesPropertyDescription?: string;
@@ -89,7 +91,7 @@ export default function PageVisibilitySettings({
{pages.map((page) => {
- const checkboxId = `page-visibility-${page.page}`;
+ const checkboxId = pageVisibilityCheckboxId(page.page);
return (
-
Moyai
+
{productNames.moyai}
{moyaiUrl
? t("adminPanel.uiSettings.moyai.connectedTo", { url: moyaiUrl })
diff --git a/ui/litellm-dashboard/src/components/SidebarAccountMenu/SidebarAccountMenu.tsx b/ui/litellm-dashboard/src/components/SidebarAccountMenu/SidebarAccountMenu.tsx
index 6066c9404c6..11c2b156626 100644
--- a/ui/litellm-dashboard/src/components/SidebarAccountMenu/SidebarAccountMenu.tsx
+++ b/ui/litellm-dashboard/src/components/SidebarAccountMenu/SidebarAccountMenu.tsx
@@ -23,6 +23,7 @@ import { ChevronsUpDown, Crown, IdCard, KeyRound, LogOut, Mail, ShieldCheck } fr
import { useRouter } from "next/navigation";
import React from "react";
import { Trans, useTranslation } from "react-i18next";
+import { productNames } from "@/i18n/untranslated/productNames";
const RELEASE_NOTES_URL = "https://docs.litellm.ai/release_notes";
@@ -193,7 +194,7 @@ const SidebarAccountMenu: React.FC = ({ onLogout, colla
data-testid="sidebar-account-menu-panel"
>
-
LiteLLM
+
{productNames.liteLLM}
{!disableBouncingIcon && (
= ({ accessToken, userID, userRole, isViewOnly
ref={ref}
value={value ?? ""}
rows={4}
- placeholder='{"namespace": "admin", "mount": "secret", "path_prefix": "litellm"}'
+ placeholder={codeSamples.teams.vaultConfigJson}
disabled={!premiumUser}
/>
)}
diff --git a/ui/litellm-dashboard/src/components/TeamsPage/TeamsTable.tsx b/ui/litellm-dashboard/src/components/TeamsPage/TeamsTable.tsx
index e7c9b2c143d..1256db02b34 100644
--- a/ui/litellm-dashboard/src/components/TeamsPage/TeamsTable.tsx
+++ b/ui/litellm-dashboard/src/components/TeamsPage/TeamsTable.tsx
@@ -7,6 +7,7 @@ import {
DataTable,
DataTableFilterDrawer,
DataTableFilterField,
+ type FilterDraft,
DataTableToolbar,
} from "@/components/shared/DataTable";
import { SearchSelect } from "@/components/shared/SearchSelect";
@@ -206,7 +207,7 @@ export function TeamsTable({ userRole, userID, onSelectTeam, onEditTeam, onDelet
title={t("teams.table.filters.title")}
description={t("teams.table.filters.description")}
>
- {({ get, set }) => (
+ {({ get, set }: FilterDraft<"org_id" | "team_id" | "alias">) => (
<>
(isDark ? "light" : "dark");
+
const ThemeToggle: React.FC = () => {
const { t } = useTranslation();
const { setTheme, resolvedTheme } = useTheme();
@@ -20,7 +22,7 @@ const ThemeToggle: React.FC = () => {
aria-label={label}
title={label}
className="text-muted-foreground"
- onClick={() => setTheme(isDark ? "light" : "dark")}
+ onClick={() => setTheme(oppositeTheme(isDark))}
>
{isDark ? : }
diff --git a/ui/litellm-dashboard/src/components/UIAccessControlForm.tsx b/ui/litellm-dashboard/src/components/UIAccessControlForm.tsx
index e1700938df0..84ace2e02aa 100644
--- a/ui/litellm-dashboard/src/components/UIAccessControlForm.tsx
+++ b/ui/litellm-dashboard/src/components/UIAccessControlForm.tsx
@@ -16,6 +16,7 @@ import { useZodForm } from "@/lib/forms/useZodForm";
import i18n from "@/i18n/i18n";
import { toast } from "@/lib/toast";
import { getSSOSettings, updateSSOSettings } from "./networking";
+import { codeSamples } from "@/i18n/untranslated/codeSamples";
interface UIAccessControlFormProps {
accessToken: string | null;
@@ -211,7 +212,9 @@ const UIAccessControlForm: React.FC = ({ accessToken,
t("adminPanel.uiAccessControl.fields.jwtFieldHint"),
)}
>
- {({ ref, value, ...field }) => }
+ {({ ref, value, ...field }) => (
+
+ )}
diff --git a/ui/litellm-dashboard/src/components/UsagePage/components/KeyActivityPanel.tsx b/ui/litellm-dashboard/src/components/UsagePage/components/KeyActivityPanel.tsx
index c3eb4afdd40..33c52742f4c 100644
--- a/ui/litellm-dashboard/src/components/UsagePage/components/KeyActivityPanel.tsx
+++ b/ui/litellm-dashboard/src/components/UsagePage/components/KeyActivityPanel.tsx
@@ -124,7 +124,7 @@ interface KeySummaryStripProps {
const KeySummaryStrip: React.FC = ({ summary, loading, hidePromptCachingMetrics }) => {
const { t } = useTranslation();
const daily = useMemo(() => summarySeries(summary), [summary]);
- const trend = (dataKey: string) =>
+ const trend = (dataKey: "spend" | "requests" | "tokens") =>
loading || daily.length < 2 ? undefined : (
);
diff --git a/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx b/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx
index c38075b11d1..34062ae0e34 100644
--- a/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx
+++ b/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx
@@ -11,6 +11,7 @@ import {
DataTable,
DataTableFilterDrawer,
DataTableFilterField,
+ type FilterDraft,
DataTableToolbar,
usePersistedColumnVisibility,
useUrlTableState,
@@ -298,7 +299,7 @@ export function VirtualKeysTable({ headerActions }: VirtualKeysTableProps) {
title={t("apiKeys.virtualKeysTable.filters.title")}
description={t("apiKeys.virtualKeysTable.filters.description")}
>
- {({ get, set }) => (
+ {({ get, set }: FilterDraft<"key_hash" | "org_id" | "status" | "team_id" | "user_id">) => (
<>
;
summaryMetrics?: ModelActivityData;
@@ -680,7 +682,7 @@ export const ActivityMetrics: React.FC = ({
}
>
= ({
description: t("addModel.autoRouterClassifierTabs.families.decisionModelDescription"),
},
...(switchyard
- ? [{ value: "switchyard", label: "Switchyard", description: "Route by the conversation’s tool history." }]
+ ? [
+ {
+ value: "switchyard",
+ label: productNames.switchyard,
+ description: t("addModel.autoRouterClassifierTabs.families.switchyardDescription"),
+ },
+ ]
: []),
].map((option) => (
= ({
{t("addModel.autoRouterClassifierTabs.decisionModelLabel")}
= ({
- Jev
- Laya
- Bespoke Nimble
- Databricks
+ {productNames.jev}
+ {productNames.laya}
+ {productNames.bespokeNimble}
+ {productNames.databricks}
diff --git a/ui/litellm-dashboard/src/components/add_model/AutoRouterSimpleSetup.tsx b/ui/litellm-dashboard/src/components/add_model/AutoRouterSimpleSetup.tsx
index 092bf41c444..4c43d121068 100644
--- a/ui/litellm-dashboard/src/components/add_model/AutoRouterSimpleSetup.tsx
+++ b/ui/litellm-dashboard/src/components/add_model/AutoRouterSimpleSetup.tsx
@@ -5,6 +5,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@
import { UiLoadingSpinner } from "@/components/ui/ui-loading-spinner";
import { ROUTER_FAMILIES, ROUTER_GOALS, type FamilyPreference, type RouterGoal, type SolverModel } from "./auto_setup";
+const TIER_ROLES = ["everyday", "hard"] as const;
+
type Props = {
customized: boolean;
hasSuggestions: boolean;
@@ -144,7 +146,7 @@ export default function AutoRouterSimpleSetup({
)}
- {(["everyday", "hard"] as const).map((role) => {
+ {TIER_ROLES.map((role) => {
const chosen = role === "everyday" ? everyday : hard;
const other = role === "everyday" ? hard : everyday;
const choices = models.filter((model) => model.name !== other?.name);
diff --git a/ui/litellm-dashboard/src/components/add_model/CustomDimensionRows.tsx b/ui/litellm-dashboard/src/components/add_model/CustomDimensionRows.tsx
index ebb5af749bd..9eabf3e28c7 100644
--- a/ui/litellm-dashboard/src/components/add_model/CustomDimensionRows.tsx
+++ b/ui/litellm-dashboard/src/components/add_model/CustomDimensionRows.tsx
@@ -9,6 +9,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@
import { Slider } from "@/components/ui/slider";
import type { CustomDimensionRow } from "./custom_dimensions";
+const MATCH_FIELDS = ["keywords", "patterns"] as const;
+
const SCORING_MODES = [
{ value: "binary", labelKey: "addModel.customDimensionRows.scoringModes.binary" },
{ value: "match_count", labelKey: "addModel.customDimensionRows.scoringModes.matchCount" },
@@ -87,7 +89,7 @@ export default function CustomDimensionRows({ rows, disabled, onChange, onWeight
/>
- {(["keywords", "patterns"] as const).map((field) => (
+ {MATCH_FIELDS.map((field) => (
{field === "keywords"
diff --git a/ui/litellm-dashboard/src/components/add_model/ForecastClassifierConfig.tsx b/ui/litellm-dashboard/src/components/add_model/ForecastClassifierConfig.tsx
index b538bb832af..13b188c24b5 100644
--- a/ui/litellm-dashboard/src/components/add_model/ForecastClassifierConfig.tsx
+++ b/ui/litellm-dashboard/src/components/add_model/ForecastClassifierConfig.tsx
@@ -32,6 +32,8 @@ import { activeTierRows } from "./tier_rows";
import { setTierModels } from "./tier_set_actions";
import { tierRowLabel, setTierModelParam, setTierModelReasoningEffort } from "./complexity_router_tiers";
+const CALIBRATION_ROLES = ["efficient", "capable"] as const;
+
interface Props {
value: ComplexityRouterConfigValue;
onChange: (value: ComplexityRouterConfigValue) => void;
@@ -401,7 +403,7 @@ const ForecastClassifierConfig = ({ value, onChange, modelOptions, effortOptions
)}
{!isCapability &&
fuse.calibration &&
- (["efficient", "capable"] as const).map((role) => (
+ CALIBRATION_ROLES.map((role) => (
= ({
value={exampleDraft}
onChange={(e) => setExampleDraft(e.target.value)}
rows={6}
- placeholder={'- "what is the capital of France?" -> SIMPLE'}
+ placeholder={codeSamples.models.openingPromptExample}
aria-label={t("addModel.openingPromptEditor.examples.label")}
className="mt-2 font-mono text-xs"
/>
diff --git a/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx b/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx
index c01cb745ec8..f57930a9549 100644
--- a/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx
+++ b/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx
@@ -5,6 +5,7 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import type { ComplexityRouterConfigValue } from "./ComplexityRouterConfig";
import { getReminderMarkersError, type ReminderMarkerPair } from "./build_complexity_router_config";
+import { codeSamples } from "@/i18n/untranslated/codeSamples";
const ReminderMarkers: React.FC<{
value: ComplexityRouterConfigValue;
@@ -42,7 +43,7 @@ const ReminderMarkers: React.FC<{
update(index, { open: event.target.value })}
/>
@@ -53,7 +54,7 @@ const ReminderMarkers: React.FC<{
update(index, { close: event.target.value })}
/>
diff --git a/ui/litellm-dashboard/src/components/add_model/SwitchyardConfigFields.tsx b/ui/litellm-dashboard/src/components/add_model/SwitchyardConfigFields.tsx
index 2043e392928..f55e137b738 100644
--- a/ui/litellm-dashboard/src/components/add_model/SwitchyardConfigFields.tsx
+++ b/ui/litellm-dashboard/src/components/add_model/SwitchyardConfigFields.tsx
@@ -14,6 +14,8 @@ import {
parseToolSemantics,
type SwitchyardConfig,
} from "./switchyard_config";
+import { useTranslation } from "react-i18next";
+import { codeSamples } from "@/i18n/untranslated/codeSamples";
interface Props {
value: SwitchyardConfig;
@@ -23,6 +25,15 @@ interface Props {
onToolSemanticsError: (error: string | null) => void;
}
+const TIERS = ["capable", "efficient"] as const;
+
+const LLM_NUMBER_FIELDS = [
+ ["base_threshold", "addModel.switchyardConfigFields.llmFields.capabilityThreshold"],
+ ["threshold_step", "addModel.switchyardConfigFields.llmFields.thresholdStep"],
+ ["max_output_tokens", "addModel.switchyardConfigFields.llmFields.maxOutputTokens"],
+ ["recent_turn_window", "addModel.switchyardConfigFields.llmFields.recentTurnWindow"],
+] as const;
+
const isStructured = (instructions: unknown): instructions is Record
=>
typeof instructions === "object" && instructions !== null;
const instructionsText = (instructions: string | Record | null | undefined): string =>
@@ -35,6 +46,7 @@ export default function SwitchyardConfigFields({
decisionModels,
onToolSemanticsError,
}: Props) {
+ const { t } = useTranslation();
const id = useId();
const [toolSemantics, setToolSemantics] = useState(
value.options.tool_semantics ? JSON.stringify(value.options.tool_semantics, null, 2) : "",
@@ -65,24 +77,24 @@ export default function SwitchyardConfigFields({
- Heuristic
+ {t("addModel.switchyardConfigFields.heuristic")}
- Stage Router
+ {t("addModel.switchyardConfigFields.stageRouter")}
- Bias
+ {t("addModel.switchyardConfigFields.bias")}
onChange({
@@ -98,29 +110,33 @@ export default function SwitchyardConfigFields({
- Cost-first
+
+ {t("addModel.switchyardConfigFields.biasOptions.costFirst")}
+
- Quality-first (experimental)
+
+ {t("addModel.switchyardConfigFields.biasOptions.qualityFirst")}
+
{value.options.picker === "capable_first" && (
-
- Switchyard has not benchmarked this bias, so it has no calibrated confidence thresholds.
-
+
{t("addModel.switchyardConfigFields.qualityFirstWarning")}
)}
- {(["capable", "efficient"] as const).map((tier) => (
+ {TIERS.map((tier) => (
- {tier === "capable" ? "Capable model" : "Efficient model"}
+ {tier === "capable"
+ ? t("addModel.switchyardConfigFields.capableModel")
+ : t("addModel.switchyardConfigFields.efficientModel")}
onChange({ ...value, models: { ...value.models, [tier]: model ?? "" } })}
choices={models}
- placeholder="Select a model"
+ placeholder={t("addModel.switchyardConfigFields.selectModel")}
ariaInvalid={undefined}
ariaDescribedBy={undefined}
/>
@@ -131,10 +147,10 @@ export default function SwitchyardConfigFields({
- Classifier
+ {t("addModel.switchyardConfigFields.classifier")}
- Ask a judge model when the tool history does not give a confident routing decision.
+ {t("addModel.switchyardConfigFields.classifierDescription")}
- Classifier type
+ {t("addModel.switchyardConfigFields.classifierType")}
onChange(setClassifierKind(value, kind === "decision" ? "decision" : "llm"))}
>
@@ -161,21 +177,29 @@ export default function SwitchyardConfigFields({
- LLM judge
- Decision model
+ {t("addModel.switchyardConfigFields.classifierKinds.llm")}
+
+ {t("addModel.switchyardConfigFields.classifierKinds.decision")}
+
- {decision ? "Decision model" : "Judge model"}
+ {decision
+ ? t("addModel.switchyardConfigFields.decisionModel")
+ : t("addModel.switchyardConfigFields.judgeModel")}
onChange({ ...value, models: { ...value.models, judge: judge ?? "" } })}
choices={decision ? decisionModels : models}
- placeholder={decision ? "Select a decision model" : "Select a judge model"}
+ placeholder={
+ decision
+ ? t("addModel.switchyardConfigFields.selectDecisionModel")
+ : t("addModel.switchyardConfigFields.selectJudgeModel")
+ }
ariaInvalid={undefined}
ariaDescribedBy={undefined}
/>
@@ -186,7 +210,7 @@ export default function SwitchyardConfigFields({
- Confidence threshold
+ {t("addModel.switchyardConfigFields.confidenceThreshold")}
{stageConfidence(value).toFixed(2)}
@@ -204,39 +228,42 @@ export default function SwitchyardConfigFields({
}
/>
- Below this confidence, use {classifier ? "the judge model" : "the bias’s default model"}. Critical errors can
- still select the capable model.
+ {classifier
+ ? t("addModel.switchyardConfigFields.fallbackToJudge")
+ : t("addModel.switchyardConfigFields.fallbackToDefault")}
- Advanced settings
+
+ {t("addModel.switchyardConfigFields.advancedSettings")}
+
-
Stage
+
{t("addModel.switchyardConfigFields.sections.stage")}
- Recent window
+ {t("addModel.switchyardConfigFields.recentWindow")}
setOption("recent_window", event.target.value)}
/>
- Tool semantics
+ {t("addModel.switchyardConfigFields.toolSemantics")}
{decision && (
<>
-
Decision model
+
{t("addModel.switchyardConfigFields.sections.decisionModel")}
-
Advantage cutoff
+
{t("addModel.switchyardConfigFields.advantageCutoff")}
- Route to the capable model when the decision model’s advantage probability is above this value.
+ {t("addModel.switchyardConfigFields.advantageCutoffHelp")}
-
Decision instructions
+
+ {t("addModel.switchyardConfigFields.decisionInstructions")}
+