fix(messages): expose upstream headers to python

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Yujong Lee 2026-09-27 01:37:32 +00:00
parent d404f55802
commit fb75b91b61
2 changed files with 20 additions and 4 deletions

View file

@ -9,6 +9,7 @@ from pydantic import TypeAdapter, ValidationError
import litellm
from litellm.litellm_core_utils.core_helpers import normalize_drop_params
from litellm.litellm_core_utils.core_helpers import process_response_headers
from litellm.llms.anthropic.pass_through.utils import is_reasoning_auto_summary_enabled
from litellm.router_utils.add_retry_fallback_headers import _add_headers_to_response
from litellm.rust_bridge import failures
@ -54,7 +55,10 @@ def response(
) -> AnthropicMessagesResponse:
response_value = dict(value)
if headers:
_add_headers_to_response(response_value, dict(httpx.Headers(list(headers)).items()))
_add_headers_to_response(
response_value,
process_response_headers(httpx.Headers(list(headers))),
)
return cast( # cast-ok: AnthropicMessagesResponse is a TypedDict over the normalized native payload
AnthropicMessagesResponse,
response_value,

View file

@ -1,12 +1,13 @@
from dataclasses import astuple
from types import MappingProxyType
from typing import Final
from litellm.rust_bridge.messages.route_host import arguments, response
from litellm.rust_bridge.messages.entrypoints import LiteLLMMessagesRequest
from dataclasses import astuple
import pytest
import litellm
from litellm.rust_bridge.messages import route_host
from litellm.rust_bridge.messages.entrypoints import LiteLLMMessagesRequest
from litellm.rust_bridge.messages.route_host import arguments, response
def test_response_is_a_detached_public_messages_dict() -> None:
@ -30,6 +31,17 @@ def test_response_is_a_detached_public_messages_dict() -> None:
assert "_hidden_params" not in native
def test_response_projects_upstream_headers_into_hidden_params() -> None:
built: Final = response(
MappingProxyType({"id": "msg_native"}),
(("request-id", "req_upstream_123"), ("x-ratelimit-remaining-requests", "41")),
)
additional: Final = built["_hidden_params"]["additional_headers"]
assert additional["llm_provider-request-id"] == "req_upstream_123"
assert additional["x-ratelimit-remaining-requests"] == "41"
def test_arguments_are_the_public_kwargs_view() -> None:
kwargs: Final = MappingProxyType({"litellm_metadata": {"user_id": "u"}})
request: Final = LiteLLMMessagesRequest(