Every model-provider attempt (LiteLLM callback + native OpenAI/Codex wrapper)
emits an LlmRequestEvent: provider, model, host, outcome, HTTP status,
provider request id (response header first, Anthropic error body fallback),
usage/cost, duration, agent + retry attempt. Prompts, completions, headers
and credentials are never recorded; error text is redacted and truncated.
Agent failure reasons now go through failure_text() so a blocked Anthropic
call's request id lands in the operator-visible failure text.
* fix(llm): cap the tool calls one assistant response may queue
* fix(llm): cap the subscription backend's responses too
---------
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
Adds an integration test that drives Runner.run_streamed against a
non-streaming gateway through _NonStreamingModel: the synthetic terminal
event feeds the runner, which executes the tool call and continues to a
final answer over two non-streaming turns. Removes the README env-var note.
Some OpenAI-compatible gateways don't support Server-Sent Events (or
deliver them unreliably), but the SDK run loop Strix uses only issues
streamed requests, so such a gateway fails every turn. Add an opt-in
LLM_DISABLE_STREAMING setting that wraps the resolved model in
_NonStreamingModel: each turn makes one non-streaming get_response and
replays the completed result as a single terminal stream event, so tool
calls, usage, and the rest of the agent loop are unchanged. Subscription
(ChatGPT) models are always streamed and are not wrapped.