MCPcopy
hub / github.com/openai/openai-python / __stream__

Method __stream__

src/openai/_streaming.py:55–110  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

53 yield from self._decoder.iter_bytes(self.response.iter_bytes())
54
55 def __stream__(self) -> Iterator[_T]:
56 cast_to = cast(Any, self._cast_to)
57 response = self.response
58 process_data = self._client._process_response_data
59 iterator = self._iter_events()
60
61 try:
62 for sse in iterator:
63 if sse.data.startswith("[DONE]"):
64 break
65
66 # we have to special case the Assistants `thread.` events since we won't have an "event" key in the data
67 if sse.event and sse.event.startswith("thread."):
68 data = sse.json()
69
70 if sse.event == "error" and is_mapping(data) and data.get("error"):
71 message = None
72 error = data.get("error")
73 if is_mapping(error):
74 message = error.get("message")
75 if not message or not isinstance(message, str):
76 message = "An error occurred during streaming"
77
78 raise APIError(
79 message=message,
80 request=self.response.request,
81 body=data["error"],
82 )
83
84 yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response)
85 else:
86 data = sse.json()
87 if is_mapping(data) and data.get("error"):
88 message = None
89 error = data.get("error")
90 if is_mapping(error):
91 message = error.get("message")
92 if not message or not isinstance(message, str):
93 message = "An error occurred during streaming"
94
95 raise APIError(
96 message=message,
97 request=self.response.request,
98 body=data["error"],
99 )
100
101 yield process_data(
102 data={"data": data, "event": sse.event}
103 if self._options is not None and self._options.synthesize_event_and_data
104 else data,
105 cast_to=cast_to,
106 response=response,
107 )
108 finally:
109 # Ensure the response is closed even if the consumer doesn't read all data
110 response.close()
111
112 def __enter__(self) -> Self:

Callers 1

__init__Method · 0.95

Calls 6

_iter_eventsMethod · 0.95
is_mappingFunction · 0.85
APIErrorClass · 0.85
jsonMethod · 0.45
getMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected