Skip to content

FunctionTool

autogen.beta.tools.final.function_tool.FunctionTool #

FunctionTool(model, *, name, description, schema, middleware=())

Bases: Tool

Source code in autogen/beta/tools/final/function_tool.py
def __init__(
    self,
    model: CallModel,
    *,
    name: str,
    description: str,
    schema: FunctionParameters,
    middleware: Iterable[ToolMiddleware] = (),
) -> None:
    self.model = model
    self._middleware: tuple[ToolMiddleware, ...] = tuple(middleware)

    self.schema = FunctionToolSchema(
        function=FunctionDefinition(
            name=name,
            description=description,
            parameters=schema,
        )
    )

    self.provider: Provider | None = None
    self.name = name

model instance-attribute #

model = model

schema instance-attribute #

schema = FunctionToolSchema(function=FunctionDefinition(name=name, description=description, parameters=schema))

provider instance-attribute #

provider = None

name instance-attribute #

name = name

with_middleware #

with_middleware(*middleware)

Return a new FunctionTool with additional middleware appended.

Does not modify the original tool.

Source code in autogen/beta/tools/final/function_tool.py
def with_middleware(self, *middleware: ToolMiddleware) -> "FunctionTool":
    """Return a new FunctionTool with additional middleware appended.

    Does not modify the original tool.
    """
    cloned = deepcopy(self)
    cloned._middleware = tuple(middleware) + self._middleware
    return cloned

schemas async #

schemas(context)
Source code in autogen/beta/tools/final/function_tool.py
async def schemas(self, context: "Context") -> list[FunctionToolSchema]:
    return [self.schema]

set_provider #

set_provider(provider)
Source code in autogen/beta/tools/final/function_tool.py
def set_provider(self, provider: Provider) -> None:
    self.provider = provider

ensure_tool staticmethod #

ensure_tool(func, *, provider=None)
Source code in autogen/beta/tools/final/function_tool.py
@staticmethod
def ensure_tool(
    func: "Tool | Callable[..., Any]",
    *,
    provider: Provider | None = None,
) -> "Tool":
    t = deepcopy(func) if isinstance(func, Tool) else tool(func)
    t.set_provider(provider)
    return t

register #

register(stack, context, *, middleware=())
Source code in autogen/beta/tools/final/function_tool.py
def register(
    self,
    stack: "ExitStack",
    context: "Context",
    *,
    middleware: Iterable["BaseMiddleware"] = (),
) -> None:
    execution: ToolExecution = self
    for hook in reversed(self._middleware):
        execution = _wrap_middleware(hook, execution)
    for mw in middleware:
        execution = _wrap_middleware(mw.on_tool_execution, execution)

    async def execute(event: "ToolCallEvent", context: "Context") -> None:
        result = await execution(event, context)
        await context.send(result)

    stack.enter_context(context.stream.where(ToolCallEvent.name == self.schema.function.name).sub_scope(execute))