c23ff21d7c
Under managed Relay execution the provider factory runs lazily inside provider_stream() on the Relay session's event loop. The MoA facade's auxiliary call_llm(stream=True) is invoked from that callback, so the eager final_response check added for the non-managed path never fires: the inner ManagedLlmStream is returned to the outer stream, which then synchronously iterates it on the same loop thread and dies with RuntimeError: Cannot run the event loop while another loop is running (the completed response effectively trapped one level deeper). stream_current() now detects a running event loop and returns the raw factory result instead of nesting a ManagedLlmStream: the outer managed stream already provides Relay tracking for the enclosing attempt, and its own completed_response_predicate traps the completed response as final_response — the same contract the main streaming worker consumes (chat_completion_helpers reads stream.final_response after the chunk loop). Nested managed streams remain supported for genuinely streaming providers via the outer stream's own iteration. Adds managed-execution regressions using the retained relay_turn fixture: direct completed-response trapping, and the nested facade-shaped stream_current call.