- Extended the `cancel_on_interruption=False` regression fix to `GrokRealtimeLLMService` and `AzureRealtimeLLMService` (the latter picks up the fix transitively by inheriting from `OpenAIRealtimeLLMService`). Same shape as the original fix for `AWSNovaSonicLLMService` and `OpenAIRealtimeLLMService`: each service now detects async-tool messages in the LLM context and routes the final result to its formal tool-result channel. Streamed intermediate results (`FunctionCallResultProperties(is_final=False)`) are not supported on these realtime services. `UltravoxRealtimeLLMService` now logs a one-time warning when async-tool messages appear in the context, since Ultravox freezes the conversation during tool execution and so the "keep talking while the tool runs" intent of `cancel_on_interruption=False` is structurally not achievable there. `GeminiLiveLLMService` and `InworldRealtimeLLMService` are excluded for now: Gemini Live's async-tool path needs deeper investigation, and Inworld appears to have a pre-existing problem with even simple tool calling on its Realtime API.