def tool(
function: Callable[..., Any] | None = None,
*,
name: str | None = None,
description: str | None = None,
schema: FunctionParameters | None = None,
sync_to_thread: bool = True,
) -> FunctionTool | Callable[[Callable[..., Any]], FunctionTool]:
def make_tool(f: Callable[..., Any]) -> FunctionTool:
call_model = build_model(f, sync_to_thread=sync_to_thread)
return FunctionTool(
call_model,
name=name or f.__name__,
description=description or f.__doc__ or "",
schema=schema
or get_schema(
call_model,
exclude=(CONTEXT_OPTION_NAME,),
),
)
if function:
return make_tool(function)
return make_tool