diff --git a/llama_stack/apis/tools/tools.py b/llama_stack/apis/tools/tools.py index 52b86375a..f68a29b9f 100644 --- a/llama_stack/apis/tools/tools.py +++ b/llama_stack/apis/tools/tools.py @@ -26,6 +26,8 @@ class ToolParameter(BaseModel): :param parameter_type: Type of the parameter (e.g., string, integer) :param description: Human-readable description of what the parameter does :param required: Whether this parameter is required for tool invocation + :param items: Type of the elements when parameter_type is array + :param title: (Optional) Title of the parameter :param default: (Optional) Default value for the parameter if not provided """ @@ -33,6 +35,8 @@ class ToolParameter(BaseModel): parameter_type: str description: str required: bool = Field(default=True) + items: dict | None = None + title: str | None = None default: Any | None = None diff --git a/llama_stack/models/llama/datatypes.py b/llama_stack/models/llama/datatypes.py index 7f1ebed55..0baa6e55b 100644 --- a/llama_stack/models/llama/datatypes.py +++ b/llama_stack/models/llama/datatypes.py @@ -92,6 +92,8 @@ class ToolParamDefinition(BaseModel): param_type: str description: str | None = None required: bool | None = True + items: Any | None = None + title: str | None = None default: Any | None = None diff --git a/llama_stack/providers/inline/agents/meta_reference/agent_instance.py b/llama_stack/providers/inline/agents/meta_reference/agent_instance.py index fb22e10cc..e65963fb2 100644 --- a/llama_stack/providers/inline/agents/meta_reference/agent_instance.py +++ b/llama_stack/providers/inline/agents/meta_reference/agent_instance.py @@ -797,6 +797,8 @@ class ChatAgent(ShieldRunnerMixin): param_type=param.parameter_type, description=param.description, required=param.required, + items=param.items, + title=param.title, default=param.default, ) for param in tool_def.parameters @@ -840,6 +842,8 @@ class ChatAgent(ShieldRunnerMixin): param_type=param.parameter_type, description=param.description, required=param.required, + items=param.items, + title=param.title, default=param.default, ) for param in tool_def.parameters diff --git a/llama_stack/providers/utils/inference/openai_compat.py b/llama_stack/providers/utils/inference/openai_compat.py index 47144ee0e..24ef7fdd2 100644 --- a/llama_stack/providers/utils/inference/openai_compat.py +++ b/llama_stack/providers/utils/inference/openai_compat.py @@ -796,6 +796,10 @@ def convert_tooldef_to_openai_tool(tool: ToolDefinition) -> dict: properties[param_name].update(description=param.description) if param.default: properties[param_name].update(default=param.default) + if param.items: + properties[param_name].update(items=param.items) + if param.title: + properties[param_name].update(title=param.title) if param.required: required.append(param_name) diff --git a/llama_stack/providers/utils/tools/mcp.py b/llama_stack/providers/utils/tools/mcp.py index 02f7aaf8a..26b8c0981 100644 --- a/llama_stack/providers/utils/tools/mcp.py +++ b/llama_stack/providers/utils/tools/mcp.py @@ -88,6 +88,10 @@ async def list_mcp_tools(endpoint: str, headers: dict[str, str]) -> ListToolDefs name=param_name, parameter_type=param_schema.get("type", "string"), description=param_schema.get("description", ""), + required="default" not in param_schema, + items=param_schema.get("items", None), + title=param_schema.get("title", None), + default=param_schema.get("default", None), ) ) tools.append(