From 6b59ebdfb36c9511a46443db90f6326f6c514771 Mon Sep 17 00:00:00 2001 From: Danylo Date: Fri, 6 Feb 2026 23:46:35 +0100 Subject: [PATCH] fix: raise ContentFilterFinishReasonError on refusal responses When responses.parse() receives a refusal response from the model (e.g., due to content moderation), it now raises ContentFilterFinishReasonError instead of letting the refusal text pass through to Pydantic validation, which would result in a confusing pydantic_core.ValidationError. This makes the behavior consistent with chat completions parsing, which already handles refusals properly. Fixes #2834 --- src/openai/lib/_parsing/_responses.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openai/lib/_parsing/_responses.py b/src/openai/lib/_parsing/_responses.py index 4bed171df7..ed492253a0 100644 --- a/src/openai/lib/_parsing/_responses.py +++ b/src/openai/lib/_parsing/_responses.py @@ -63,6 +63,9 @@ def parse_response( if output.type == "message": content_list: List[ParsedContent[TextFormatT]] = [] for item in output.content: + if item.type == "refusal": + from ..._exceptions import ContentFilterFinishReasonError + raise ContentFilterFinishReasonError() if item.type != "output_text": content_list.append(item) continue