From 15534ba9b028544a573a0a396c489f2469b2e034 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Fri, 4 Sep 2026 16:24:58 -0700 Subject: [PATCH] fix(rust): align native route quality gates --- litellm/rust_bridge/bindings.py | 2 +- litellm/rust_bridge/runtime.py | 2 +- .../rust_bridge/native_route_wheel_test.py | 5 ++++ .../test_litellm/rust_bridge/test_bindings.py | 26 ++++++++++++------- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/litellm/rust_bridge/bindings.py b/litellm/rust_bridge/bindings.py index 1be2aff3777..e374fcc42b1 100644 --- a/litellm/rust_bridge/bindings.py +++ b/litellm/rust_bridge/bindings.py @@ -32,7 +32,7 @@ class NativeBinding(Generic[BindingT]): self._override: BindingT | None | _Unset = _UNSET @classmethod - def callable(cls, route: str, attribute: str) -> NativeBinding[BindingT]: + def native(cls, route: str, attribute: str) -> NativeBinding[BindingT]: return cls( route, attribute, diff --git a/litellm/rust_bridge/runtime.py b/litellm/rust_bridge/runtime.py index 68f7ea0c0d0..df7556b8a09 100644 --- a/litellm/rust_bridge/runtime.py +++ b/litellm/rust_bridge/runtime.py @@ -75,7 +75,7 @@ class EndpointBinding(Generic[BindingT]): ) -> EndpointBinding[BindingT]: binding: NativeBinding[BindingT] = cast( # cast-ok: classmethod loses the caller's generic parameter NativeBinding[BindingT], - NativeBinding.callable(route, attribute), + NativeBinding.native(route, attribute), ) return EndpointBinding( route=route, diff --git a/tests/test_litellm/rust_bridge/native_route_wheel_test.py b/tests/test_litellm/rust_bridge/native_route_wheel_test.py index 927c315e634..b056cb777a3 100644 --- a/tests/test_litellm/rust_bridge/native_route_wheel_test.py +++ b/tests/test_litellm/rust_bridge/native_route_wheel_test.py @@ -136,6 +136,11 @@ ROUTE_CASES: Final = ( "messages": [{"role": "user", "content": "hello-from-chat"}], "optional_params": {"max_tokens": 17}, "api_key": "sk-native", + "request_context": { + "metadata": None, + "litellm_metadata": None, + "request_metadata_fields": [], + }, }, assert_request=assert_chat_completions_request, success_value=lambda response: response["choices"][0]["message"]["content"], diff --git a/tests/test_litellm/rust_bridge/test_bindings.py b/tests/test_litellm/rust_bridge/test_bindings.py index 7ec34a12ea2..36f9f49f8ea 100644 --- a/tests/test_litellm/rust_bridge/test_bindings.py +++ b/tests/test_litellm/rust_bridge/test_bindings.py @@ -21,7 +21,7 @@ def test_binding_loads_only_valid_native_attributes( expected: int | None, ) -> None: monkeypatch.setattr(bindings, "get_native_bridge", lambda: native) - monkeypatch.setattr(bindings, "native_route_ready", lambda _route: native is not None) + monkeypatch.setattr(bindings, "native_route_ready", lambda _route, _capabilities: native is not None) binding: Final = bindings.NativeBinding( "test", "route", validate=lambda value: value if isinstance(value, int) else None ) @@ -39,18 +39,22 @@ def test_binding_loads_only_valid_native_attributes( ) def test_callable_binding_rejects_non_callables(monkeypatch: pytest.MonkeyPatch, value: object) -> None: monkeypatch.setattr(bindings, "get_native_bridge", lambda: SimpleNamespace(route=value)) - monkeypatch.setattr(bindings, "native_route_ready", lambda _route: True) - binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.callable("test", "route") + monkeypatch.setattr(bindings, "native_route_ready", lambda _route, _capabilities: True) + binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.native("test", "route") assert binding.load() is None def test_callable_binding_resolves_override_and_reset(monkeypatch: pytest.MonkeyPatch) -> None: - native_route: Final = lambda: "native" - replacement: Final = lambda: "replacement" + def native_route() -> str: + return "native" + + def replacement() -> str: + return "replacement" + monkeypatch.setattr(bindings, "get_native_bridge", lambda: SimpleNamespace(route=native_route)) - monkeypatch.setattr(bindings, "native_route_ready", lambda _route: True) - binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.callable("test", "route") + monkeypatch.setattr(bindings, "native_route_ready", lambda _route, _capabilities: True) + binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.native("test", "route") assert binding.load() is native_route binding.override(None) @@ -62,10 +66,12 @@ def test_callable_binding_resolves_override_and_reset(monkeypatch: pytest.Monkey def test_unregistered_callable_cannot_activate_dispatch(monkeypatch: pytest.MonkeyPatch) -> None: - native_route: Final = lambda: "native" + def native_route() -> str: + return "native" + monkeypatch.setattr(bindings, "get_native_bridge", lambda: SimpleNamespace(route=native_route)) - monkeypatch.setattr(bindings, "native_route_ready", lambda _route: False) - binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.callable("test", "route") + monkeypatch.setattr(bindings, "native_route_ready", lambda _route, _capabilities: False) + binding: Final[bindings.NativeBinding[object]] = bindings.NativeBinding.native("test", "route") assert binding.load() is None