refactor(rust_bridge): share call_hook instead of per-route native lambdas

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Yujong Lee 2026-09-17 00:01:52 +00:00
parent 43c50325a6
commit 6d30006592
5 changed files with 23 additions and 12 deletions

View file

@ -10,7 +10,7 @@ from litellm.rust_bridge.chat_completions.entrypoints import (
NATIVE_COMPLETION,
LiteLLMChatCompletionsRequest,
)
from litellm.rust_bridge.dispatch import PublicDispatch
from litellm.rust_bridge.dispatch import PublicDispatch, call_hook
from litellm.rust_bridge.public_call import (
bind,
optional_bool,
@ -103,7 +103,7 @@ def completion(
kwargs,
python=python,
binding=NATIVE_COMPLETION,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)
@ -114,7 +114,7 @@ async def acompletion(*args: object, **kwargs: object) -> ChatResult: # kwargs-
kwargs,
python=python,
binding=NATIVE_ACOMPLETION,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)

View file

@ -5,7 +5,7 @@ from typing import Final, TypeAlias, cast # noqa: TID251 # native binding sele
from litellm.llms.anthropic.experimental_pass_through.messages import handler as main
from litellm.rust_bridge.catalog import Context, Delivery, Route
from litellm.rust_bridge.dispatch import PublicDispatch
from litellm.rust_bridge.dispatch import PublicDispatch, call_hook
from litellm.rust_bridge.messages.entrypoints import (
NATIVE_AMESSAGES,
NATIVE_MESSAGES,
@ -102,7 +102,7 @@ def anthropic_messages_handler(
kwargs,
python=python,
binding=NATIVE_MESSAGES,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)
@ -113,7 +113,7 @@ async def anthropic_messages(*args: object, **kwargs: object) -> MessagesResult:
kwargs,
python=python,
binding=NATIVE_AMESSAGES,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)

View file

@ -7,7 +7,7 @@ from litellm.llms.base_llm.ocr.transformation import OCRResponse
from litellm.ocr import main
from litellm.ocr.main import convert_file_document_to_url_document, get_mime_type
from litellm.rust_bridge.catalog import Context, Route
from litellm.rust_bridge.dispatch import PublicDispatch
from litellm.rust_bridge.dispatch import PublicDispatch, call_hook
from litellm.rust_bridge.ocr.entrypoints import NATIVE_AOCR, NATIVE_OCR, LiteLLMOcrRequest
__all__ = ("aocr", "convert_file_document_to_url_document", "get_mime_type", "ocr")
@ -77,7 +77,7 @@ def ocr(
kwargs,
python=_PYTHON_OCR,
binding=NATIVE_OCR,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)
@ -87,5 +87,5 @@ async def aocr(*args: object, **kwargs: object) -> OCRResponse: # kwargs-ok: pr
kwargs,
python=_PYTHON_AOCR,
binding=NATIVE_AOCR,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)

View file

@ -6,7 +6,7 @@ from typing import Final, TypeAlias, cast # noqa: TID251 # native binding sele
from litellm.responses import main
from litellm.responses.streaming_iterator import BaseResponsesAPIStreamingIterator
from litellm.rust_bridge.catalog import Context, Delivery, Route
from litellm.rust_bridge.dispatch import PublicDispatch
from litellm.rust_bridge.dispatch import PublicDispatch, call_hook
from litellm.rust_bridge.public_call import bind, optional_bool, optional_mapping, optional_str, signature
from litellm.rust_bridge.responses.entrypoints import (
NATIVE_ARESPONSES,
@ -95,7 +95,7 @@ def responses(
kwargs,
python=python,
binding=NATIVE_RESPONSES,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)
@ -106,7 +106,7 @@ async def aresponses(*args: object, **kwargs: object) -> ResponsesResult: # kwa
kwargs,
python=python,
binding=NATIVE_ARESPONSES,
native=lambda hook, request, call_args, call_kwargs: hook(request, call_args, call_kwargs),
native=call_hook,
)

View file

@ -14,6 +14,17 @@ RequestT = TypeVar("RequestT")
NativeT = TypeVar("NativeT")
ResultT = TypeVar("ResultT")
NativeHook = Callable[[RequestT, tuple[object, ...], Mapping[str, object]], ResultT]
def call_hook(
hook: NativeHook[RequestT, ResultT],
request: RequestT,
args: tuple[object, ...],
kwargs: Mapping[str, object],
) -> ResultT:
return hook(request, args, kwargs)
@dataclass(frozen=True, slots=True)
class PublicDispatch(Generic[RequestT]):