Commit 8df11f8
devteamaegis
fix(prediction): output_iterator silently iterates string output character-by-character
Both output_iterator and async_output_iterator used ``self.output or []``
to coerce the model's output to a list. This idiom is only safe when
output is None (not started yet) or an actual list.
For non-array model outputs (plain string, URL, dict) the falsy-or pattern
silently returns the raw value. Calling ``yield from "hello world"`` then
iterates over 11 individual characters instead of the intended single token,
and ``output[len(previous_output):]`` on a string produces a string slice
rather than a list slice — causing subtly wrong behaviour with no error.
Fix: replace ``value or []`` with an explicit isinstance check that accepts
None (treated as an empty list, meaning "no output yet") and list, and
raises a descriptive ValueError for anything else so callers know to use
``prediction.output`` directly for non-streaming models.
Also fixes the variable shadowing bug in async_output_iterator where the
loop variable was named ``output`` instead of ``item``, clobbering the
outer ``output`` reference on each iteration.
Resolves the long-standing ``# TODO: check output is list`` comments.1 parent d2956ff commit 8df11f8
2 files changed
Lines changed: 135 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
144 | | - | |
| 144 | + | |
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
| |||
150 | 150 | | |
151 | 151 | | |
152 | 152 | | |
153 | | - | |
| 153 | + | |
154 | 154 | | |
155 | 155 | | |
156 | 156 | | |
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
256 | 275 | | |
257 | 276 | | |
258 | 277 | | |
259 | 278 | | |
260 | 279 | | |
261 | 280 | | |
262 | | - | |
| 281 | + | |
263 | 282 | | |
264 | 283 | | |
265 | | - | |
| 284 | + | |
266 | 285 | | |
267 | 286 | | |
268 | 287 | | |
| |||
271 | 290 | | |
272 | 291 | | |
273 | 292 | | |
274 | | - | |
275 | | - | |
276 | | - | |
277 | | - | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
278 | 308 | | |
279 | 309 | | |
280 | 310 | | |
281 | 311 | | |
282 | 312 | | |
283 | 313 | | |
284 | 314 | | |
285 | | - | |
| 315 | + | |
286 | 316 | | |
287 | 317 | | |
288 | | - | |
| 318 | + | |
289 | 319 | | |
290 | | - | |
291 | | - | |
| 320 | + | |
| 321 | + | |
292 | 322 | | |
293 | 323 | | |
294 | 324 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
540 | 541 | | |
541 | 542 | | |
542 | 543 | | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
0 commit comments