mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-11-07 19:20:34 +00:00
* fix(subagents): build the chat model off the event loop `SubagentExecutor._create_agent` is awaited from `_aexecute` on the shared event loop, and it constructed the chat model inline. Provider construction can read local credentials -- the Codex provider loads the Codex CLI `auth.json` while it is built -- so every delegated task did synchronous file IO on the loop before its first model call, which stalls every concurrent turn sharing that loop. Build the model through `run_assembly`, the dedicated assembly pool the other provider-construction sites already use, and leave the rest of the middleware and graph assembly where it is. The helper preserves request context, and a cancelled construction still never starts an inference. `tests/blocking_io/test_subagent_model_offloop.py` drives the real `_create_agent` with a real `CodexChatModel` under the strict Blockbuster gate: on `main` the credential load fails with `BlockingError(os.stat)`, and reverting the `run_assembly` call reproduces the same failure. * docs(subagents): name the isolated subagent loop in the off-loop notes The blocked loop is the persistent isolated subagent loop every concurrent delegated task shares, not the Gateway request loop; say so in the boundary audit, the regression docstring, and the assertion message. --------- Co-authored-by: Totoro <msy626836554@gmail.com>