diff --git a/src/openai/_streaming.py b/src/openai/_streaming.py index 641c3a7a72..acb7fe6303 100644 --- a/src/openai/_streaming.py +++ b/src/openai/_streaming.py @@ -59,7 +59,7 @@ def __stream__(self) -> Iterator[_T]: if sse.data.startswith("[DONE]"): break - if sse.event is None or sse.event.startswith("response.") or sse.event.startswith('transcript.'): + if is_valid_event(sse.event): data = sse.json() if is_mapping(data) and data.get("error"): message = None @@ -161,7 +161,7 @@ async def __stream__(self) -> AsyncIterator[_T]: if sse.data.startswith("[DONE]"): break - if sse.event is None or sse.event.startswith("response.") or sse.event.startswith('transcript.'): + if is_valid_event(sse.event): data = sse.json() if is_mapping(data) and data.get("error"): message = None @@ -385,6 +385,15 @@ def is_stream_class_type(typ: type) -> TypeGuard[type[Stream[object]] | type[Asy return inspect.isclass(origin) and issubclass(origin, (Stream, AsyncStream)) +def is_valid_event(event: str | None) -> bool: + """Given an event fieldname, checks if it is a response, transcript, or None""" + if event is None: + return True + if event in ("response", "transcript") or event.startswith("response.") or event.startswith("transcript."): + return True + return False + + def extract_stream_chunk_type( stream_cls: type, *,