|
78 | 78 | CustomTask, |
79 | 79 | DurationSummary, |
80 | 80 | FileSource, |
| 81 | + GeneratedImage, |
| 82 | + GeneratedImageItem, |
81 | 83 | HiddenContextItem, |
82 | 84 | InferenceOptions, |
83 | 85 | Page, |
@@ -1191,6 +1193,115 @@ async def test_stream_agent_response_assistant_message_content_types(): |
1191 | 1193 | assert message.id == "1" |
1192 | 1194 |
|
1193 | 1195 |
|
| 1196 | +async def test_stream_agent_response_image_generation_events_default_data_url(): |
| 1197 | + context = AgentContext( |
| 1198 | + previous_response_id=None, thread=thread, store=mock_store, request_context=None |
| 1199 | + ) |
| 1200 | + result = make_result() |
| 1201 | + |
| 1202 | + result.add_event( |
| 1203 | + RawResponsesStreamEvent( |
| 1204 | + type="raw_response_event", |
| 1205 | + data=Mock( |
| 1206 | + type="response.output_item.added", |
| 1207 | + item=Mock(type="image_generation_call", id="img_call_1"), |
| 1208 | + output_index=0, |
| 1209 | + sequence_number=0, |
| 1210 | + ), |
| 1211 | + ) |
| 1212 | + ) |
| 1213 | + result.add_event( |
| 1214 | + RawResponsesStreamEvent( |
| 1215 | + type="raw_response_event", |
| 1216 | + data=Mock( |
| 1217 | + type="response.output_item.done", |
| 1218 | + item=Mock( |
| 1219 | + type="image_generation_call", id="img_call_1", result="dGVzdA==" |
| 1220 | + ), |
| 1221 | + output_index=0, |
| 1222 | + sequence_number=1, |
| 1223 | + ), |
| 1224 | + ) |
| 1225 | + ) |
| 1226 | + result.done() |
| 1227 | + |
| 1228 | + stream = stream_agent_response(context, result) |
| 1229 | + event1 = await stream.__anext__() |
| 1230 | + assert isinstance(event1, ThreadItemAddedEvent) |
| 1231 | + assert isinstance(event1.item, GeneratedImageItem) |
| 1232 | + assert event1.item.type == "generated_image" |
| 1233 | + assert event1.item.id == "message_id" |
| 1234 | + assert event1.item.image is None |
| 1235 | + |
| 1236 | + event2 = await stream.__anext__() |
| 1237 | + assert isinstance(event2, ThreadItemDoneEvent) |
| 1238 | + assert isinstance(event2.item, GeneratedImageItem) |
| 1239 | + assert event2.item.id == event1.item.id |
| 1240 | + assert event2.item.image == GeneratedImage( |
| 1241 | + id="img_call_1", url="data:image/png;base64,dGVzdA==" |
| 1242 | + ) |
| 1243 | + |
| 1244 | + with pytest.raises(StopAsyncIteration): |
| 1245 | + await stream.__anext__() |
| 1246 | + |
| 1247 | + |
| 1248 | +async def test_stream_agent_response_image_generation_events_with_async_converter(): |
| 1249 | + context = AgentContext( |
| 1250 | + previous_response_id=None, thread=thread, store=mock_store, request_context=None |
| 1251 | + ) |
| 1252 | + result = make_result() |
| 1253 | + |
| 1254 | + result.add_event( |
| 1255 | + RawResponsesStreamEvent( |
| 1256 | + type="raw_response_event", |
| 1257 | + data=Mock( |
| 1258 | + type="response.output_item.added", |
| 1259 | + item=Mock(type="image_generation_call", id="img_call_1"), |
| 1260 | + output_index=0, |
| 1261 | + sequence_number=0, |
| 1262 | + ), |
| 1263 | + ) |
| 1264 | + ) |
| 1265 | + result.add_event( |
| 1266 | + RawResponsesStreamEvent( |
| 1267 | + type="raw_response_event", |
| 1268 | + data=Mock( |
| 1269 | + type="response.output_item.done", |
| 1270 | + item=Mock( |
| 1271 | + type="image_generation_call", id="img_call_1", result="dGVzdA==" |
| 1272 | + ), |
| 1273 | + output_index=0, |
| 1274 | + sequence_number=1, |
| 1275 | + ), |
| 1276 | + ) |
| 1277 | + ) |
| 1278 | + result.done() |
| 1279 | + |
| 1280 | + calls: list[str] = [] |
| 1281 | + |
| 1282 | + async def base64_to_generated_image(b64: str) -> GeneratedImage: |
| 1283 | + calls.append(b64) |
| 1284 | + return GeneratedImage(id="custom_img_1", url=f"https://example.com/{b64}") |
| 1285 | + |
| 1286 | + stream = stream_agent_response( |
| 1287 | + context, result, base64_to_generated_image=base64_to_generated_image |
| 1288 | + ) |
| 1289 | + event1 = await stream.__anext__() |
| 1290 | + assert isinstance(event1, ThreadItemAddedEvent) |
| 1291 | + assert isinstance(event1.item, GeneratedImageItem) |
| 1292 | + assert event1.item.image is None |
| 1293 | + |
| 1294 | + event2 = await stream.__anext__() |
| 1295 | + assert isinstance(event2, ThreadItemDoneEvent) |
| 1296 | + assert isinstance(event2.item, GeneratedImageItem) |
| 1297 | + assert calls == ["dGVzdA=="] |
| 1298 | + assert event2.item.image == GeneratedImage( |
| 1299 | + id="custom_img_1", url="https://example.com/dGVzdA==" |
| 1300 | + ) |
| 1301 | + with pytest.raises(StopAsyncIteration): |
| 1302 | + await stream.__anext__() |
| 1303 | + |
| 1304 | + |
1194 | 1305 | async def test_workflow_streams_first_thought(): |
1195 | 1306 | context = AgentContext( |
1196 | 1307 | previous_response_id=None, thread=thread, store=mock_store, request_context=None |
|
0 commit comments