mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-05 02:41:56 +00:00
address greptile review feedback (greploop iteration 4)
Guard aclose() call to prevent masking original exception; add explicit test for content param forwarding
This commit is contained in:
parent
758f83642f
commit
586f5a0325
2 changed files with 65 additions and 1 deletions
|
|
@ -427,5 +427,8 @@ async def _async_streaming(
|
|||
)
|
||||
)
|
||||
except Exception:
|
||||
await iter_response.aclose()
|
||||
try:
|
||||
await iter_response.aclose()
|
||||
except Exception:
|
||||
pass
|
||||
raise
|
||||
|
|
|
|||
|
|
@ -510,6 +510,67 @@ def test_azure_with_custom_api_base_and_key():
|
|||
assert response.status_code == 200 # type: ignore[union-attr]
|
||||
|
||||
|
||||
def test_content_param_forwarded_to_build_request():
|
||||
"""
|
||||
Regression test: the `content` parameter passed to llm_passthrough_route
|
||||
must be forwarded to build_request instead of silently dropped.
|
||||
When content is provided and signed_json_body is None, build_request should
|
||||
receive content=<value> and data=None, json=None.
|
||||
"""
|
||||
client = HTTPHandler()
|
||||
|
||||
mock_provider_config = MagicMock()
|
||||
mock_provider_config.get_complete_url.return_value = (
|
||||
httpx.URL("https://my-azure.openai.azure.com/openai/deployments/gpt-4/chat/completions"),
|
||||
"https://my-azure.openai.azure.com",
|
||||
)
|
||||
mock_provider_config.get_api_key.return_value = "test-key"
|
||||
mock_provider_config.validate_environment.return_value = {"api-key": "test-key"}
|
||||
# sign_request returns (headers, None) — no signed body, so content should be used
|
||||
mock_provider_config.sign_request.return_value = ({"api-key": "test-key"}, None)
|
||||
mock_provider_config.is_streaming_request.return_value = False
|
||||
|
||||
raw_content = b'{"model":"gpt-4","messages":[{"role":"user","content":"hi"}]}'
|
||||
|
||||
with patch(
|
||||
"litellm.utils.ProviderConfigManager.get_provider_passthrough_config",
|
||||
return_value=mock_provider_config,
|
||||
), patch(
|
||||
"litellm.litellm_core_utils.get_litellm_params.get_litellm_params",
|
||||
return_value={},
|
||||
), patch(
|
||||
"litellm.litellm_core_utils.get_llm_provider_logic.get_llm_provider",
|
||||
return_value=("gpt-4", "azure", "test-key", "https://my-azure.openai.azure.com"),
|
||||
), patch.object(
|
||||
client.client, "send", return_value=MagicMock(status_code=200)
|
||||
), patch.object(
|
||||
client.client, "build_request"
|
||||
) as mock_build_request:
|
||||
|
||||
mock_logging_obj = MagicMock()
|
||||
mock_logging_obj.update_environment_variables = MagicMock()
|
||||
|
||||
llm_passthrough_route(
|
||||
model="azure/gpt-4",
|
||||
endpoint="openai/deployments/gpt-4/chat/completions",
|
||||
method="POST",
|
||||
custom_llm_provider="azure",
|
||||
content=raw_content,
|
||||
data=None,
|
||||
json=None,
|
||||
client=client,
|
||||
litellm_logging_obj=mock_logging_obj,
|
||||
)
|
||||
|
||||
mock_build_request.assert_called_once()
|
||||
call_kwargs = mock_build_request.call_args.kwargs
|
||||
# content must be forwarded (not dropped)
|
||||
assert call_kwargs["content"] == raw_content
|
||||
# data and json must be None when content is provided
|
||||
assert call_kwargs["data"] is None
|
||||
assert call_kwargs["json"] is None
|
||||
|
||||
|
||||
def _make_429_streaming_response() -> MagicMock:
|
||||
"""Build a mock httpx.Response that looks like a streaming 429 from Azure."""
|
||||
error_body = json.dumps(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue