@@ -225,6 +225,18 @@ def build_kwargs(self, prompt, messages):
225
225
}
226
226
return kwargs
227
227
228
+ def _handle_event (self , event , response ):
229
+ if event .type == "response.output_text.delta" :
230
+ return event .delta
231
+ elif event .type == "response.completed" :
232
+ response .response_json = event .response .model_dump ()
233
+ self .set_usage (response , event .response .usage )
234
+ return None
235
+
236
+ def _finish_non_streaming_response (self , response , client_response ):
237
+ response .response_json = client_response .model_dump ()
238
+ self .set_usage (response , client_response .usage )
239
+
228
240
229
241
class ResponsesModel (_SharedResponses , KeyModel ):
230
242
def execute (
@@ -241,16 +253,13 @@ def execute(
241
253
kwargs ["stream" ] = stream
242
254
if stream :
243
255
for event in client .responses .create (** kwargs ):
244
- if event .type == "response.output_text.delta" :
245
- yield event .delta
246
- elif event .type == "response.completed" :
247
- response .response_json = event .response .model_dump ()
248
- self .set_usage (response , event .response .usage )
256
+ delta = self ._handle_event (event , response )
257
+ if delta is not None :
258
+ yield delta
249
259
else :
250
260
client_response = client .responses .create (** kwargs )
251
261
yield client_response .output_text
252
- response .response_json = client_response .model_dump ()
253
- self .set_usage (response , client_response .usage )
262
+ self ._finish_non_streaming_response (response , client_response )
254
263
255
264
256
265
class AsyncResponsesModel (_SharedResponses , AsyncKeyModel ):
@@ -267,18 +276,14 @@ async def execute(
267
276
kwargs = self .build_kwargs (prompt , messages )
268
277
kwargs ["stream" ] = stream
269
278
if stream :
270
- completion = await client .responses .create (** kwargs )
271
- async for event in completion :
272
- if event .type == "response.output_text.delta" :
273
- yield event .delta
274
- elif event .type == "response.completed" :
275
- response .response_json = event .response .model_dump ()
276
- self .set_usage (response , event .response .usage )
279
+ async for event in await client .responses .create (** kwargs ):
280
+ delta = self ._handle_event (event , response )
281
+ if delta is not None :
282
+ yield delta
277
283
else :
278
284
client_response = await client .responses .create (** kwargs )
279
285
yield client_response .output_text
280
- response .response_json = client_response .model_dump ()
281
- self .set_usage (response , client_response .usage )
286
+ self ._finish_non_streaming_response (response , client_response )
282
287
283
288
284
289
def _attachment (attachment , image_detail ):
0 commit comments