diff --git a/litellm/router.py b/litellm/router.py
index c72dedc26df..845c388ecd6 100644
--- a/litellm/router.py
+++ b/litellm/router.py
@@ -9706,6 +9706,26 @@ class Router:
_settings_to_return["routing_groups"] = [group.model_dump() for group in self._routing_groups.values()]
return _settings_to_return
+ def _merge_default_litellm_params_setting(self, value: dict | None) -> None:
+ if value is not None:
+ self.default_litellm_params = {**self.default_litellm_params, **value}
+
+ def _apply_optional_pre_call_checks_setting(self, value: OptionalPreCallChecks | None) -> None:
+ if value is None:
+ return
+ new_checks = [check for check in value if check not in self.optional_pre_call_checks]
+ if new_checks:
+ self.add_optional_pre_call_checks(new_checks)
+
+ # Settings whose update logic doesn't fit `setattr(self, var, value)` (e.g.
+ # merge-not-replace, or side effects beyond storing the value). Dispatched via
+ # a single `var in ...` branch in update_settings so adding an entry here
+ # doesn't grow that function's branch count per field.
+ _CUSTOM_UPDATE_SETTINGS_HANDLERS: dict = {
+ "default_litellm_params": _merge_default_litellm_params_setting,
+ "optional_pre_call_checks": _apply_optional_pre_call_checks_setting,
+ }
+
def update_settings(self, **kwargs):
"""
Update the router settings.
@@ -9756,14 +9776,8 @@ class Router:
value = RetryPolicy(**value)
if value is None or isinstance(value, RetryPolicy):
setattr(self, var, value)
- elif var == "default_litellm_params":
- if kwargs[var] is not None:
- self.default_litellm_params = {**self.default_litellm_params, **kwargs[var]}
- elif var == "optional_pre_call_checks":
- if kwargs[var] is not None:
- new_checks = [check for check in kwargs[var] if check not in self.optional_pre_call_checks]
- if new_checks:
- self.add_optional_pre_call_checks(new_checks)
+ elif var in self._CUSTOM_UPDATE_SETTINGS_HANDLERS:
+ self._CUSTOM_UPDATE_SETTINGS_HANDLERS[var](self, kwargs[var])
else:
value = kwargs[var]
# only run routing strategy init if it has changed
diff --git a/ui/litellm-dashboard/src/components/router_settings/OptionalPreCallChecksSelector.test.tsx b/ui/litellm-dashboard/src/components/router_settings/OptionalPreCallChecksSelector.test.tsx
index 2e4b7712c5f..ccda8a9d778 100644
--- a/ui/litellm-dashboard/src/components/router_settings/OptionalPreCallChecksSelector.test.tsx
+++ b/ui/litellm-dashboard/src/components/router_settings/OptionalPreCallChecksSelector.test.tsx
@@ -36,17 +36,13 @@ const options = ["prompt_caching", "router_budget_limiting", "session_affinity"]
describe("OptionalPreCallChecksSelector", () => {
it("should render one option per entry in options", () => {
- render(
- ,
- );
+ render();
const select = screen.getByTestId("optional-pre-call-checks-select") as HTMLSelectElement;
expect(Array.from(select.options).map((o) => o.value)).toEqual(options);
});
it("should display default label when no metadata is provided", () => {
- render(
- ,
- );
+ render();
expect(screen.getByText("Optional Pre-call Checks")).toBeInTheDocument();
});
diff --git a/ui/litellm-dashboard/src/components/router_settings/RouterSettingsForm.test.tsx b/ui/litellm-dashboard/src/components/router_settings/RouterSettingsForm.test.tsx
index c28633af171..ad3a0dcbf07 100644
--- a/ui/litellm-dashboard/src/components/router_settings/RouterSettingsForm.test.tsx
+++ b/ui/litellm-dashboard/src/components/router_settings/RouterSettingsForm.test.tsx
@@ -138,7 +138,10 @@ describe("RouterSettingsForm", () => {
const props = {
...baseProps,
routerFieldsMetadata: {
- optional_pre_call_checks: { ui_field_name: "Optional Pre-call Checks", options: ["prompt_caching", "router_budget_limiting"] },
+ optional_pre_call_checks: {
+ ui_field_name: "Optional Pre-call Checks",
+ options: ["prompt_caching", "router_budget_limiting"],
+ },
},
};
render();
diff --git a/ui/litellm-dashboard/src/lib/http/schema.d.ts b/ui/litellm-dashboard/src/lib/http/schema.d.ts
index 43bb465ec58..d4dc6e14d31 100644
--- a/ui/litellm-dashboard/src/lib/http/schema.d.ts
+++ b/ui/litellm-dashboard/src/lib/http/schema.d.ts
@@ -32223,6 +32223,10 @@ export interface components {
}[] | null;
/** Cooldown Time */
cooldown_time?: number | null;
+ /** Default Litellm Params */
+ default_litellm_params?: {
+ [key: string]: unknown;
+ } | null;
/** Fallbacks */
fallbacks?: {
[key: string]: unknown;
@@ -32248,6 +32252,8 @@ export interface components {
} | null;
/** Num Retries */
num_retries?: number | null;
+ /** Optional Pre Call Checks */
+ optional_pre_call_checks?: ("prompt_caching" | "router_budget_limiting" | "responses_api_deployment_check" | "deployment_affinity" | "session_affinity" | "forward_client_headers_by_model_group" | "enforce_model_rate_limits" | "encrypted_content_affinity")[] | null;
/** Retry After */
retry_after?: number | null;
retry_policy?: components["schemas"]["RetryPolicy"] | null;