From ce3a17458c926fff377b9c1d96ea3ea1044e7dc4 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 13:52:52 +0200 Subject: [PATCH 1/4] fix(openai): Check output is a Sequence before iterating --- sentry_sdk/integrations/openai.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/integrations/openai.py b/sentry_sdk/integrations/openai.py index 99a50fcd0c..98e4090990 100644 --- a/sentry_sdk/integrations/openai.py +++ b/sentry_sdk/integrations/openai.py @@ -1,7 +1,7 @@ import json import sys import time -from collections.abc import Iterable +from collections.abc import Iterable, Sequence from functools import wraps from typing import TYPE_CHECKING, cast @@ -711,7 +711,9 @@ def _set_common_output_data( "tool": [], } - if has_data_collection_enabled(client.options): + if has_data_collection_enabled(client.options) and isinstance( + response.output, Sequence + ): record_outputs = client.options["data_collection"]["gen_ai"]["outputs"] if record_outputs: From e8e89d472009f5957f98448e87bcbfda71b5abb1 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 14:01:39 +0200 Subject: [PATCH 2/4] add isinstance to other branch --- sentry_sdk/integrations/openai.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/openai.py b/sentry_sdk/integrations/openai.py index 98e4090990..39942922e1 100644 --- a/sentry_sdk/integrations/openai.py +++ b/sentry_sdk/integrations/openai.py @@ -743,7 +743,11 @@ def _set_common_output_data( span, SPANDATA.GEN_AI_RESPONSE_TEXT, output_messages["response"] ) - elif should_send_default_pii() and integration.include_prompts: + elif ( + should_send_default_pii() + and integration.include_prompts + and isinstance(response.output, Sequence) + ): for output in response.output: if output.type == "function_call": output_messages["tool"].append(output.dict()) From 7b867831335a97a18f8d05ff80a49187698b9b5a Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 14:31:06 +0200 Subject: [PATCH 3/4] add isinstance check --- sentry_sdk/integrations/openai.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/openai.py b/sentry_sdk/integrations/openai.py index 39942922e1..12ad1b0e22 100644 --- a/sentry_sdk/integrations/openai.py +++ b/sentry_sdk/integrations/openai.py @@ -301,7 +301,7 @@ def _calculate_responses_token_usage( if streaming_message_responses is not None: for message in streaming_message_responses: output_tokens += count_tokens(message) - elif hasattr(response, "output"): + elif hasattr(response, "output") and isinstance(response.output, Sequence): for output_item in response.output: if hasattr(output_item, "content"): for content_item in output_item.content: From 39db46036f541278e16f506592b5318a09432a7b Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 15:36:32 +0200 Subject: [PATCH 4/4] check against list instead of Sequence --- sentry_sdk/integrations/openai.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sentry_sdk/integrations/openai.py b/sentry_sdk/integrations/openai.py index 12ad1b0e22..1fbc22021e 100644 --- a/sentry_sdk/integrations/openai.py +++ b/sentry_sdk/integrations/openai.py @@ -1,7 +1,7 @@ import json import sys import time -from collections.abc import Iterable, Sequence +from collections.abc import Iterable from functools import wraps from typing import TYPE_CHECKING, cast @@ -301,7 +301,7 @@ def _calculate_responses_token_usage( if streaming_message_responses is not None: for message in streaming_message_responses: output_tokens += count_tokens(message) - elif hasattr(response, "output") and isinstance(response.output, Sequence): + elif hasattr(response, "output") and isinstance(response.output, list): for output_item in response.output: if hasattr(output_item, "content"): for content_item in output_item.content: @@ -712,7 +712,7 @@ def _set_common_output_data( } if has_data_collection_enabled(client.options) and isinstance( - response.output, Sequence + response.output, list ): record_outputs = client.options["data_collection"]["gen_ai"]["outputs"] @@ -746,7 +746,7 @@ def _set_common_output_data( elif ( should_send_default_pii() and integration.include_prompts - and isinstance(response.output, Sequence) + and isinstance(response.output, list) ): for output in response.output: if output.type == "function_call":