teknium1
486d632cc2
fix(auxiliary): coerce None final.output to empty list in Codex aux adapter
...
Closes #33368 .
`_CodexCompletionsAdapter.create()` iterates `final.output` from the
Codex Responses stream. The event-driven consumer (introduced in #33042 )
always sets `final.output` to a list, so this shape can't come from our
own code path. But:
- Mocked clients in tests can return a typed Response with `output=None`
- Third-party shims / compatibility layers that bypass the consumer can
do the same
- A future code path that wraps a different consumer could regress
The old code `getattr(final, "output", [])` returns `None` (not the
default `[]`) when the attribute EXISTS but is `None`. Iterating
`None` then raises `TypeError: 'NoneType' object is not iterable` —
the exact error logged by title-generation when this fires.
Fix: `getattr(final, "output", None) or []` — single-line defensive
coerce. Cheap; zero risk.
Regression test asserts the auxiliary path handles a final whose
`.output` is `None` (via monkey-patched consumer) without raising and
returns the expected chat.completions-shaped response.
Reporter: @pavegrid-1 (issue #33368 ).
2026-05-27 11:08:21 -07:00
..
2026-05-20 01:46:40 -05:00
2026-05-27 05:25:38 -07:00
2026-02-26 13:54:20 +03:00
2026-05-24 17:45:12 -07:00
2026-04-24 07:14:00 -07:00
2026-05-24 15:27:45 -07:00
2026-05-16 02:38:02 -07:00
2026-05-05 17:23:45 -07:00
2026-05-15 14:00:01 -07:00
2026-04-19 22:43:09 -07:00
2026-05-18 10:14:38 -07:00
2026-05-27 11:08:21 -07:00
2026-05-23 17:49:47 -07:00
2026-05-17 02:29:41 -07:00
2026-04-30 20:18:44 -07:00
2026-04-28 06:50:14 -07:00
2026-05-18 10:14:38 -07:00
2026-05-18 10:14:38 -07:00
2026-05-13 17:32:22 -07:00
2026-05-13 17:32:22 -07:00
2026-04-29 23:23:50 -07:00
2026-05-27 02:25:59 -07:00
2026-05-27 01:52:34 -07:00
2026-04-14 01:43:45 -07:00
2026-05-16 17:18:25 -07:00
2026-04-27 06:27:59 -07:00
2026-05-14 14:28:14 -07:00
2026-05-23 02:20:14 -07:00
2026-04-10 19:15:50 -07:00
2026-04-20 01:56:41 -07:00
2026-04-29 20:05:32 -07:00
2026-05-16 02:24:48 -07:00
2026-04-19 18:12:55 -07:00
2026-05-25 17:41:40 -07:00
2026-04-07 17:19:07 -07:00
2026-04-30 10:31:47 -07:00
2026-05-02 01:29:57 -07:00
2026-05-10 06:44:53 -07:00
2026-04-30 23:04:50 -07:00
2026-05-04 02:19:28 -07:00
2026-05-21 07:48:53 -07:00
2026-05-17 02:29:41 -07:00
2026-04-20 22:14:29 -07:00
2026-03-15 20:21:21 -07:00
2026-05-23 21:03:51 -07:00
2026-05-23 21:03:51 -07:00
2026-05-13 06:46:23 -07:00
2026-05-26 22:01:17 -07:00
2026-05-08 16:39:32 -07:00
2026-03-29 00:33:30 -07:00
2026-05-25 03:40:47 -07:00
2026-05-24 00:38:17 -07:00
2026-05-25 03:40:47 -07:00
2026-05-14 08:03:56 -07:00
2026-05-18 20:04:57 -07:00
2026-04-24 04:46:17 -07:00
2026-04-24 05:35:17 -07:00
2026-04-24 03:40:00 -07:00
2026-05-10 07:14:14 -07:00
2026-04-21 21:30:10 -07:00
2026-05-20 23:27:10 -07:00
2026-04-20 23:20:33 -07:00
2026-04-29 06:35:42 -07:00
2026-05-23 17:38:19 -07:00
2026-04-22 14:46:10 -07:00
2026-05-11 16:49:13 -07:00
2026-05-21 23:18:37 -07:00
2026-05-05 15:09:59 -07:00
2026-04-22 05:27:10 -07:00
2026-04-07 22:23:28 -07:00
2026-05-05 13:40:01 -07:00
2026-04-28 12:27:36 -07:00
2026-04-24 03:00:33 -07:00
2026-05-25 14:51:43 -07:00
2026-05-27 00:43:32 -07:00
2026-05-16 13:02:19 -07:00
2026-05-25 01:47:55 -07:00
2026-05-25 06:06:51 -07:00
2026-04-26 04:53:42 -07:00
2026-04-29 08:08:36 -07:00
2026-05-05 10:13:34 -07:00
2026-05-10 07:09:28 -07:00
2026-05-12 20:49:20 -07:00
2026-05-27 00:43:32 -07:00
2026-05-12 20:46:04 -07:00
2026-04-21 05:52:46 -07:00
2026-04-09 03:43:14 -07:00
2026-05-24 15:43:48 -07:00
2026-05-24 18:10:47 -07:00
2026-04-26 20:48:35 -07:00
2026-05-17 02:31:18 -07:00
2026-05-18 21:38:05 -07:00
2026-04-29 21:07:47 -07:00
2026-05-21 16:40:04 +05:30
2026-05-21 19:08:38 -07:00
2026-05-18 10:53:08 -07:00
2026-04-21 14:23:45 -07:00
2026-04-20 20:53:51 -07:00
2026-05-25 23:17:33 -07:00
2026-05-17 23:20:37 -07:00
2026-05-05 04:33:38 -07:00
2026-05-04 12:07:17 -07:00
2026-05-25 14:52:24 -07:00
2026-05-19 00:12:12 -07:00
2026-05-13 06:46:23 -07:00
2026-05-25 01:41:19 -07:00
2026-05-24 18:04:54 -07:00
2026-05-08 14:55:40 -07:00
2026-04-25 08:21:14 -07:00
2026-05-27 00:43:32 -07:00
2026-05-13 16:39:41 -07:00
2026-05-04 05:05:43 -07:00
2026-05-24 15:01:28 -07:00