This commit is contained in:
Lance Galletti 2025-06-27 11:39:51 +02:00 committed by GitHub
commit 0c871c59bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 160 additions and 0 deletions

View file

@ -5547,6 +5547,31 @@
"additionalProperties": {
"$ref": "#/components/schemas/ToolParamDefinition"
}
},
"annotations": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
}
},
"additionalProperties": false,
@ -6447,6 +6472,31 @@
}
]
}
},
"annotations": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
}
},
"additionalProperties": false,
@ -8461,6 +8511,31 @@
},
"description": {
"type": "string"
},
"annotations": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
}
},
"additionalProperties": false,
@ -10962,6 +11037,31 @@
}
]
}
},
"annotations": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
}
},
"additionalProperties": false,

View file

@ -3912,6 +3912,16 @@ components:
type: object
additionalProperties:
$ref: '#/components/schemas/ToolParamDefinition'
annotations:
type: object
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
additionalProperties: false
required:
- tool_name
@ -4610,6 +4620,16 @@ components:
- type: string
- type: array
- type: object
annotations:
type: object
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
additionalProperties: false
required:
- name
@ -5962,6 +5982,16 @@ components:
type: string
description:
type: string
annotations:
type: object
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
additionalProperties: false
required:
- input_schema
@ -7722,6 +7752,16 @@ components:
- type: string
- type: array
- type: object
annotations:
type: object
additionalProperties:
oneOf:
- type: 'null'
- type: boolean
- type: number
- type: string
- type: array
- type: object
additionalProperties: false
required:
- identifier

View file

@ -161,6 +161,7 @@ class MCPListToolsTool(BaseModel):
input_schema: dict[str, Any]
name: str
description: str | None = None
annotations: dict[str, Any] | None = None
@json_schema_type

View file

@ -27,6 +27,15 @@ class ToolParameter(BaseModel):
default: Any | None = None
@json_schema_type
class ToolAnnotations(BaseModel):
title: str | None = None
readOnlyHint: bool | None = None
destructiveHint: bool | None = None
idempotentHint: bool | None = None
openWorldHint: bool | None = None
@json_schema_type
class Tool(Resource):
type: Literal[ResourceType.tool] = ResourceType.tool
@ -34,6 +43,7 @@ class Tool(Resource):
description: str
parameters: list[ToolParameter]
metadata: dict[str, Any] | None = None
annotations: ToolAnnotations | None = None
@json_schema_type
@ -42,6 +52,7 @@ class ToolDef(BaseModel):
description: str | None = None
parameters: list[ToolParameter] | None = None
metadata: dict[str, Any] | None = None
annotations: ToolAnnotations | None = None
@json_schema_type

View file

@ -74,6 +74,7 @@ class ToolGroupsRoutingTable(CommonRoutingTableImpl, ToolGroups):
parameters=t.parameters or [],
metadata=t.metadata,
provider_id=toolgroup.provider_id,
annotations=t.annotations,
)
)

View file

@ -11,6 +11,8 @@ from typing import Annotated, Any, Literal
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
from apis.tools import ToolAnnotations
# The goal is that these set of types are relevant for all Llama models.
# That isn't the current state yet -- e.g., BuiltinTool is somewhat specific to
# the llama3 series of models.
@ -99,6 +101,7 @@ class ToolDefinition(BaseModel):
tool_name: BuiltinTool | str
description: str | None = None
parameters: dict[str, ToolParamDefinition] | None = None
annotations: ToolAnnotations | None = None
@field_validator("tool_name", mode="before")
@classmethod

View file

@ -843,6 +843,7 @@ class ChatAgent(ShieldRunnerMixin):
)
for param in tool_def.parameters
},
annotations=tool_def.annotations,
)
tool_name_to_args[tool_def.identifier] = toolgroup_to_args.get(toolgroup_name, {})

View file

@ -666,6 +666,7 @@ class OpenAIResponsesImpl:
},
"required": [p.name for p in t.parameters if p.required],
},
annotations=t.annotations,
)
)
else:

View file

@ -57,6 +57,7 @@ async def list_mcp_tools(endpoint: str, headers: dict[str, str]) -> ListToolDefs
description=param_schema.get("description", ""),
)
)
annotations = getattr(tool, "annotations", None)
tools.append(
ToolDef(
name=tool.name,
@ -65,6 +66,7 @@ async def list_mcp_tools(endpoint: str, headers: dict[str, str]) -> ListToolDefs
metadata={
"endpoint": endpoint,
},
annotations=annotations,
)
)
return ListToolDefsResponse(data=tools)