diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html
index a16d3fce5..e2c53d4b0 100644
--- a/docs/_static/llama-stack-spec.html
+++ b/docs/_static/llama-stack-spec.html
@@ -8293,28 +8293,60 @@
"type": "array",
"items": {
"type": "object",
- "additionalProperties": {
- "oneOf": [
- {
- "type": "null"
+ "properties": {
+ "attributes": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "type": "null"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ]
},
- {
- "type": "boolean"
- },
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "array"
- },
- {
- "type": "object"
- }
- ]
- }
+ "description": "(Optional) Key-value attributes associated with the file"
+ },
+ "file_id": {
+ "type": "string",
+ "description": "Unique identifier of the file containing the result"
+ },
+ "filename": {
+ "type": "string",
+ "description": "Name of the file containing the result"
+ },
+ "score": {
+ "type": "number",
+ "description": "Relevance score for this search result (between 0 and 1)"
+ },
+ "text": {
+ "type": "string",
+ "description": "Text content of the search result"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "attributes",
+ "file_id",
+ "filename",
+ "score",
+ "text"
+ ],
+ "title": "OpenAIResponseOutputMessageFileSearchToolCallResults",
+ "description": "Search results returned by the file search operation."
},
"description": "(Optional) Search results returned by the file search operation"
}
diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml
index d5ad66d5e..85cec3a78 100644
--- a/docs/_static/llama-stack-spec.yaml
+++ b/docs/_static/llama-stack-spec.yaml
@@ -6021,14 +6021,44 @@ components:
type: array
items:
type: object
- additionalProperties:
- oneOf:
- - type: 'null'
- - type: boolean
- - type: number
- - type: string
- - type: array
- - type: object
+ properties:
+ attributes:
+ type: object
+ additionalProperties:
+ oneOf:
+ - type: 'null'
+ - type: boolean
+ - type: number
+ - type: string
+ - type: array
+ - type: object
+ description: >-
+ (Optional) Key-value attributes associated with the file
+ file_id:
+ type: string
+ description: >-
+ Unique identifier of the file containing the result
+ filename:
+ type: string
+ description: Name of the file containing the result
+ score:
+ type: number
+ description: >-
+ Relevance score for this search result (between 0 and 1)
+ text:
+ type: string
+ description: Text content of the search result
+ additionalProperties: false
+ required:
+ - attributes
+ - file_id
+ - filename
+ - score
+ - text
+ title: >-
+ OpenAIResponseOutputMessageFileSearchToolCallResults
+ description: >-
+ Search results returned by the file search operation.
description: >-
(Optional) Search results returned by the file search operation
additionalProperties: false
diff --git a/llama_stack/apis/agents/openai_responses.py b/llama_stack/apis/agents/openai_responses.py
index 10cadf38f..8574104dc 100644
--- a/llama_stack/apis/agents/openai_responses.py
+++ b/llama_stack/apis/agents/openai_responses.py
@@ -170,6 +170,23 @@ class OpenAIResponseOutputMessageWebSearchToolCall(BaseModel):
type: Literal["web_search_call"] = "web_search_call"
+class OpenAIResponseOutputMessageFileSearchToolCallResults(BaseModel):
+ """Search results returned by the file search operation.
+
+ :param attributes: (Optional) Key-value attributes associated with the file
+ :param file_id: Unique identifier of the file containing the result
+ :param filename: Name of the file containing the result
+ :param score: Relevance score for this search result (between 0 and 1)
+ :param text: Text content of the search result
+ """
+
+ attributes: dict[str, Any]
+ file_id: str
+ filename: str
+ score: float
+ text: str
+
+
@json_schema_type
class OpenAIResponseOutputMessageFileSearchToolCall(BaseModel):
"""File search tool call output message for OpenAI responses.
@@ -185,7 +202,7 @@ class OpenAIResponseOutputMessageFileSearchToolCall(BaseModel):
queries: list[str]
status: str
type: Literal["file_search_call"] = "file_search_call"
- results: list[dict[str, Any]] | None = None
+ results: list[OpenAIResponseOutputMessageFileSearchToolCallResults] | None = None
@json_schema_type
diff --git a/llama_stack/providers/inline/agents/meta_reference/openai_responses.py b/llama_stack/providers/inline/agents/meta_reference/openai_responses.py
index db70bc046..b98ca114f 100644
--- a/llama_stack/providers/inline/agents/meta_reference/openai_responses.py
+++ b/llama_stack/providers/inline/agents/meta_reference/openai_responses.py
@@ -38,6 +38,7 @@ from llama_stack.apis.agents.openai_responses import (
OpenAIResponseOutputMessageContent,
OpenAIResponseOutputMessageContentOutputText,
OpenAIResponseOutputMessageFileSearchToolCall,
+ OpenAIResponseOutputMessageFileSearchToolCallResults,
OpenAIResponseOutputMessageFunctionToolCall,
OpenAIResponseOutputMessageMCPListTools,
OpenAIResponseOutputMessageWebSearchToolCall,
@@ -827,12 +828,13 @@ class OpenAIResponsesImpl:
text = result.metadata["chunks"][i] if "chunks" in result.metadata else None
score = result.metadata["scores"][i] if "scores" in result.metadata else None
message.results.append(
- {
- "file_id": doc_id,
- "filename": doc_id,
- "text": text,
- "score": score,
- }
+ OpenAIResponseOutputMessageFileSearchToolCallResults(
+ file_id=doc_id,
+ filename=doc_id,
+ text=text,
+ score=score,
+ attributes={},
+ )
)
if error_exc or (result.error_code and result.error_code > 0) or result.error_message:
message.status = "failed"