Skip to content

Commit 30b8187

Browse files
committed
Refactor to remove duplicate logic
1 parent 4f20137 commit 30b8187

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

llm_openai.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,18 @@ def build_kwargs(self, prompt, messages):
225225
}
226226
return kwargs
227227

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+
228240

229241
class ResponsesModel(_SharedResponses, KeyModel):
230242
def execute(
@@ -241,16 +253,13 @@ def execute(
241253
kwargs["stream"] = stream
242254
if stream:
243255
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
249259
else:
250260
client_response = client.responses.create(**kwargs)
251261
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)
254263

255264

256265
class AsyncResponsesModel(_SharedResponses, AsyncKeyModel):
@@ -267,18 +276,14 @@ async def execute(
267276
kwargs = self.build_kwargs(prompt, messages)
268277
kwargs["stream"] = stream
269278
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
277283
else:
278284
client_response = await client.responses.create(**kwargs)
279285
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)
282287

283288

284289
def _attachment(attachment, image_detail):

0 commit comments

Comments
 (0)