From 9dcee00ef7be22bac1f9ac68ca59db070522a4fc Mon Sep 17 00:00:00 2001 From: Ashwin Bharambe Date: Sat, 11 Oct 2025 14:32:44 -0700 Subject: [PATCH] Added in_progress, searching, and completed events for knowledge_search tool execution to match OpenAI Responses API spec. Mirrors existing web_search event pattern. --- .../meta_reference/responses/tool_executor.py | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py b/llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py index 0a9967fe5..9ba04e63f 100644 --- a/llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py +++ b/llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py @@ -11,6 +11,9 @@ from collections.abc import AsyncIterator from llama_stack.apis.agents.openai_responses import ( OpenAIResponseInputToolFileSearch, OpenAIResponseInputToolMCP, + OpenAIResponseObjectStreamResponseFileSearchCallCompleted, + OpenAIResponseObjectStreamResponseFileSearchCallInProgress, + OpenAIResponseObjectStreamResponseFileSearchCallSearching, OpenAIResponseObjectStreamResponseMcpCallCompleted, OpenAIResponseObjectStreamResponseMcpCallFailed, OpenAIResponseObjectStreamResponseMcpCallInProgress, @@ -221,7 +224,13 @@ class ToolExecutor: output_index=output_index, sequence_number=sequence_number, ) - # Note: knowledge_search and other custom tools don't have specific streaming events in OpenAI spec + elif function_name == "knowledge_search": + sequence_number += 1 + progress_event = OpenAIResponseObjectStreamResponseFileSearchCallInProgress( + item_id=item_id, + output_index=output_index, + sequence_number=sequence_number, + ) if progress_event: yield ToolExecutionResult(stream_event=progress_event, sequence_number=sequence_number) @@ -236,6 +245,16 @@ class ToolExecutor: ) yield ToolExecutionResult(stream_event=searching_event, sequence_number=sequence_number) + # For file search, emit searching event + if function_name == "knowledge_search": + sequence_number += 1 + searching_event = OpenAIResponseObjectStreamResponseFileSearchCallSearching( + item_id=item_id, + output_index=output_index, + sequence_number=sequence_number, + ) + yield ToolExecutionResult(stream_event=searching_event, sequence_number=sequence_number) + async def _execute_tool( self, function_name: str, @@ -322,7 +341,13 @@ class ToolExecutor: output_index=output_index, sequence_number=sequence_number, ) - # Note: knowledge_search and other custom tools don't have specific completion events in OpenAI spec + elif function_name == "knowledge_search": + sequence_number += 1 + completion_event = OpenAIResponseObjectStreamResponseFileSearchCallCompleted( + item_id=item_id, + output_index=output_index, + sequence_number=sequence_number, + ) if completion_event: yield ToolExecutionResult(stream_event=completion_event, sequence_number=sequence_number)