Functions#

Functions are reusable components that perform specific operations, such as web searches, API calls, or calculations.

In NeMo Agent toolkit, functions are a core abstraction that offer type-safe, asynchronous operations with support for both single and streaming outputs. They wrap callable objects (like Python functions or coroutines) and enhance them with:

  • Type validation and conversion

  • Schema-based input/output validation via Pydantic models

  • Unified interfaces to improve composability

  • Support for both streaming and non-streaming (single) outputs

Agents and Tools#

In an agentic workflow, a set of tools are made available to the agent to use to perform a given task.

In NeMo Agent toolkit, both agents and tools are implemented as functions, because of this, an agent can be used as a tool for another agent allowing for multi-agent workflows (refer to the examples/agents/mixture_of_agents example for more details).

Included Functions#

For a complete list of functions run the following command:

nat info components -t function

Key Concepts#

Type Safety#

Functions use Python’s type annotation system to:

  • Validate inputs and outputs

  • Convert between different types using converters

  • Generate input and output schemas that provide runtime information about the function’s input and output types

Dual Output Modes#

Functions support two output modes:

  • Single Output - For operations that produce a single result

  • Streaming Output - For operations that produce multiple results

A function can support either or both modes.

Input and Output Schemas#

Every function has schemas to define the input and output types. Every function has:

  • An input schema

  • A streaming output schema (optional)

  • A single output schema (optional)

These schemas are Pydantic BaseModel classes that provide runtime validation and documentation. Pydantic models are used because they provide a way to validate and coerce values at runtime while also providing a way to document the schema properties of the input and output values.

Asynchronous Operation#

All function operations are asynchronous. To invoke a function, use one of the following methods:

Using asynchronous operations allows for better performance and scalability when processing a large number of functions in parallel. In most cases, applications that integrate LLMs are IO bound and can benefit from cooperative multitasking. Asynchronous operations also provide a natural mechanism (using ContextVars) for maintaining application state between multiple function invocations simultaneously.

Writing Functions#

For information about writing functions, refer to the Writing Custom Functions document.

Function Groups#

Function groups are collections of related functions that can share configuration, context, and resources. For more information, refer to the Function Groups document.