diff --git a/src/pipecat/services/xai/realtime/llm.py b/src/pipecat/services/xai/realtime/llm.py index 8b8e0d94a..7ac83d071 100644 --- a/src/pipecat/services/xai/realtime/llm.py +++ b/src/pipecat/services/xai/realtime/llm.py @@ -942,12 +942,19 @@ class GrokRealtimeLLMService(LLMService[GrokRealtimeLLMAdapter]): error_msg="Grok Realtime does not support streamed async tool results.", ) continue - # kind == "final": deliver via the formal tool-result channel - # — same path as a synchronous tool result, just delayed. - if send_new_results: - sent_new_result = True - await self._send_tool_result(async_payload.tool_call_id, async_payload.result) - self._completed_tool_calls.add(async_payload.tool_call_id) + if async_payload.kind == "final": + # Deliver via the formal tool-result channel — same path + # as a synchronous tool result, just delayed. + if send_new_results: + sent_new_result = True + await self._send_tool_result( + async_payload.tool_call_id, async_payload.result + ) + self._completed_tool_calls.add(async_payload.tool_call_id) + continue + # Defensive: any async-tool message must not fall through + # to the regular tool-result block below, even if it + # carries a kind we don't recognize. continue # Look for newly-completed "regular" (as opposed to async-tool) results