diff --git a/ui/litellm-dashboard/src/components/add_model/ComplexityRouterAdvancedSections.tsx b/ui/litellm-dashboard/src/components/add_model/ComplexityRouterAdvancedSections.tsx index 71f8bce76b5..44adecb9e1d 100644 --- a/ui/litellm-dashboard/src/components/add_model/ComplexityRouterAdvancedSections.tsx +++ b/ui/litellm-dashboard/src/components/add_model/ComplexityRouterAdvancedSections.tsx @@ -141,7 +141,7 @@ const ComplexityRouterAdvancedSections: React.FCAdvanced: Reminder Markers, + label: Advanced: Ignore Custom Tags, children: , }, { diff --git a/ui/litellm-dashboard/src/components/add_model/ComplexityRouterConfig.test.tsx b/ui/litellm-dashboard/src/components/add_model/ComplexityRouterConfig.test.tsx index 56b37b92af3..756e505997c 100644 --- a/ui/litellm-dashboard/src/components/add_model/ComplexityRouterConfig.test.tsx +++ b/ui/litellm-dashboard/src/components/add_model/ComplexityRouterConfig.test.tsx @@ -101,7 +101,7 @@ describe("ComplexityRouterConfig", () => { expect(screen.getByText("Advanced: Heuristic Keyword Overrides")).toBeInTheDocument(); expect(screen.getByText("Advanced: Housekeeping Routing")).toBeInTheDocument(); - expect(screen.getByText("Advanced: Reminder Markers")).toBeInTheDocument(); + expect(screen.getByText("Advanced: Ignore Custom Tags")).toBeInTheDocument(); const capabilityValue = { ...defaultValue, classifier_type: "capability" as const }; rerender(); @@ -128,7 +128,7 @@ describe("ComplexityRouterConfig", () => { renderWithProviders( , ); - fireEvent.click(screen.getByText("Advanced: Reminder Markers")); + fireEvent.click(screen.getByText("Advanced: Ignore Custom Tags")); const validation = screen.queryByText(/needs both/i); if (showValidationErrors) { expect(validation).toBeInTheDocument(); diff --git a/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx b/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx index c7f9ee48e0b..88901bb8645 100644 --- a/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx +++ b/ui/litellm-dashboard/src/components/add_model/ReminderMarkers.tsx @@ -26,31 +26,32 @@ const ReminderMarkers: React.FC<{ return (

- Delimiter pairs that wrap harness-injected reminder blocks, which are stripped before classification. Setting - any pair replaces the built-in pairs, so list every pair your harness emits. Matching is case-insensitive and - values are saved lowercased. + Auto Router already ignores built-in reminder tags, such as <system-reminder>, when choosing + a model. Leave this empty to keep the defaults. Add custom opening and closing tags to ignore the text between + them when routing. Custom pairs replace the defaults, so include any built-in pairs you still need. The selected + model still receives the full message. Matching is case-insensitive.

{markers.map((marker, index) => (
update(index, { open: event.target.value })} />
update(index, { close: event.target.value })} /> @@ -58,7 +59,7 @@ const ReminderMarkers: React.FC<{ {showValidationErrors && error &&

{error}

}
diff --git a/ui/litellm-dashboard/src/components/add_model/build_complexity_router_config.ts b/ui/litellm-dashboard/src/components/add_model/build_complexity_router_config.ts index 9b4f1980f62..13df40464f0 100644 --- a/ui/litellm-dashboard/src/components/add_model/build_complexity_router_config.ts +++ b/ui/litellm-dashboard/src/components/add_model/build_complexity_router_config.ts @@ -414,8 +414,8 @@ export const getReminderMarkersError = (pairs: ReminderMarkerPair[] | undefined) for (const [index, pair] of (pairs ?? []).entries()) { const open = pair.open.trim().toLowerCase(); const close = pair.close.trim().toLowerCase(); - if (!open || !close) return `Reminder marker pair ${index + 1} needs both an opening and a closing delimiter`; - if (open === close) return `Reminder marker pair ${index + 1} must use different opening and closing delimiters`; + if (!open || !close) return `Tag pair ${index + 1} needs both an opening and a closing tag`; + if (open === close) return `Tag pair ${index + 1} must use different opening and closing tags`; } return null; }; diff --git a/ui/litellm-dashboard/src/components/edit_auto_router/edit_auto_router_modal.integration.test.tsx b/ui/litellm-dashboard/src/components/edit_auto_router/edit_auto_router_modal.integration.test.tsx index aa6cf92ceb9..6d66152cee5 100644 --- a/ui/litellm-dashboard/src/components/edit_auto_router/edit_auto_router_modal.integration.test.tsx +++ b/ui/litellm-dashboard/src/components/edit_auto_router/edit_auto_router_modal.integration.test.tsx @@ -377,9 +377,9 @@ describe("EditAutoRouterModal advanced field round trips", () => { expect(screen.getByRole("switch", { name: "Route housekeeping calls to the cheapest tier" })).not.toBeChecked(); expect(screen.getByRole("combobox", { name: "e.g., conversation title" })).toHaveValue(""); - await user.click(screen.getByText("Advanced: Reminder Markers")); - expect(screen.getByLabelText("Opening delimiter")).toHaveValue(""); - expect(screen.getByLabelText("Closing delimiter")).toHaveValue(""); + await user.click(screen.getByText("Advanced: Ignore Custom Tags")); + expect(screen.getByLabelText("Opening tag")).toHaveValue(""); + expect(screen.getByLabelText("Closing tag")).toHaveValue(""); await user.click(screen.getByText("Advanced: Response Format")); const maxTokensSwitch = screen.getByRole("switch", { name: "Cap max_tokens at the tier model's output ceiling" });