mirror of
https://github.com/BerriAI/litellm.git
synced 2026-11-11 08:38:24 +00:00
fix(redact_messages): guard against None output_items in Responses API redaction helpers
- Add early return guard for None or empty output_items in _redact_responses_api_output - Add early return guard for None or empty output_items in _redact_responses_api_output_dict - Add unit test verifying perform_redaction and helpers safely handle None output - Fixes #43797
This commit is contained in:
parent
cfe0100e1f
commit
8a1c7b82ad
2 changed files with 25 additions and 1 deletions
|
|
@ -219,6 +219,8 @@ def _redact_field_when_present(item: object, field: str) -> None:
|
|||
|
||||
def _redact_responses_api_output(output_items):
|
||||
"""Helper to redact ResponsesAPIResponse output items."""
|
||||
if not output_items:
|
||||
return
|
||||
for output_item in output_items:
|
||||
output_type = stream_item_field(output_item, "type")
|
||||
if getattr(output_item, "text", None) is not None:
|
||||
|
|
@ -295,7 +297,9 @@ def _redacted_responses_api_output_item(item: object, redacted_str: str) -> obje
|
|||
}
|
||||
|
||||
|
||||
def _redact_responses_api_output_dict(output_items: Sequence[object], redacted_str: str) -> Sequence[object]:
|
||||
def _redact_responses_api_output_dict(output_items: Sequence[object] | None, redacted_str: str) -> Sequence[object]:
|
||||
if not output_items:
|
||||
return []
|
||||
return [_redacted_responses_api_output_item(item, redacted_str) for item in output_items]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -899,6 +899,26 @@ class TestPerformRedaction:
|
|||
assert none_dict == {"type": "output_text", "text": None, "content": [{"text": None}]}
|
||||
assert real_dict == {"type": "output_text", "text": "real answer", "content": [{"text": "real part"}]}
|
||||
|
||||
def test_redact_responses_api_output_handles_none(self):
|
||||
from litellm.litellm_core_utils.redact_messages import (
|
||||
_redact_responses_api_output,
|
||||
_redact_responses_api_output_dict,
|
||||
_redact_streaming_response,
|
||||
)
|
||||
|
||||
_redact_responses_api_output(None)
|
||||
assert _redact_responses_api_output_dict(None, "redacted-by-litellm") == []
|
||||
|
||||
# Test dictionary output: None
|
||||
result_dict = {"output": None}
|
||||
redacted_dict = perform_redaction({}, result_dict)
|
||||
assert redacted_dict["output"] is None
|
||||
|
||||
# Test object/streaming response output: None
|
||||
streaming_obj = SimpleNamespace(output=None)
|
||||
_redact_streaming_response(streaming_obj)
|
||||
assert streaming_obj.output is None
|
||||
|
||||
def test_skips_non_dict_response_output_items(self):
|
||||
result = {
|
||||
"output": [
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue