Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9cc7c9b
Set the title warning to an error (#918)
dagardner-nv Oct 6, 2025
eacf718
fix: Prefer OpenAI schema for ReAct and Tool Calling Agents (#923)
willkill07 Oct 6, 2025
94e64ac
feat: Enable GFM-style Mermaid code blocks in Sphinx (#924)
willkill07 Oct 6, 2025
4857d44
docs: update top-level README with libraries; remove outdated uvloop …
willkill07 Oct 6, 2025
f2e45a6
Improve multi-user MCP client handling (#922)
AnuradhaKaruppiah Oct 6, 2025
7a79ccd
Avoid Pydantic serialization warning triggered by tests (#925)
dagardner-nv Oct 6, 2025
6460b4b
fix: haystack deep research agent must be part of examples (#927)
willkill07 Oct 6, 2025
a69d117
fix: pin uvicorn to prevent nest_asyncio patch error (#929)
willkill07 Oct 6, 2025
62c05b5
Silence several warnings being emitted by the tests (#928)
dagardner-nv Oct 6, 2025
5d11923
UI submodule update (#932)
ericevans-nv Oct 7, 2025
21f2e30
Resolve cancel scope error in MCP session cleanup with lifetime task …
AnuradhaKaruppiah Oct 7, 2025
232e740
fix: import error for weave sanitize (#934)
willkill07 Oct 7, 2025
7514d78
fix: add missing awaits for get_memory_client (#935)
willkill07 Oct 7, 2025
4076e03
Update package metadata (#938)
dagardner-nv Oct 7, 2025
6461d86
Add ADK to TestLLM (#937)
zhongxuanwang-nv Oct 7, 2025
7f1872e
Update UI Submodule and Reference Docs (#939)
ericevans-nv Oct 7, 2025
a0a2f3c
Update sizing calc with pre-requisites (#942)
AnuradhaKaruppiah Oct 7, 2025
17aa6c8
docs: update Using Local LLMs (model name and directions) (#941)
willkill07 Oct 7, 2025
c17732d
Add opensearch service to CI (#944)
dagardner-nv Oct 7, 2025
39b6085
Add an integration test for the custom route front-end example (#945)
dagardner-nv Oct 7, 2025
a06926e
fix: move Google ADK agent example back to ADK example (#943)
willkill07 Oct 7, 2025
299561f
Add a docker compose yaml for running integration tests (#946)
dagardner-nv Oct 8, 2025
9743bcf
fix: ensure console logging is configurable (#947)
willkill07 Oct 8, 2025
e4e4195
docs: clarify the need for a virtual environment in setup (#948)
willkill07 Oct 8, 2025
c437c6c
docs: clarify the need for a separate venv for local vLLM (#950)
willkill07 Oct 8, 2025
148af34
Enable the upload step for the release branches in nightly builds (#953)
dagardner-nv Oct 8, 2025
cc31511
feat: Add .env loading support to NAT cli (#952)
willkill07 Oct 8, 2025
5216b1e
Merge branch 'release/1.3' into develop-merge-release/1.3
dagardner-nv Oct 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ reviews:
collapse_walkthrough: false
pre_merge_checks:
title:
mode: warning
mode: error
requirements: "Title should be concise, and descriptive, and use imperative mood (max ~72 chars)."
description:
mode: warning
Expand Down
19 changes: 17 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ variables:
NAT_CI_ETCD_HOST: "etcd"
NAT_CI_MILVUS_HOST: "milvus"
NAT_CI_MYSQL_HOST: "mysql"
NAT_CI_OPENSEARCH_URL: "http://opensearch:9200"
NAT_CI_REDIS_HOST: "redis"
NAT_CI_S3_HOST: "minio"
UV_CACHE_DIR: .uv-cache
Expand Down Expand Up @@ -81,19 +82,32 @@ test:python_tests:
- name: minio/minio:RELEASE.2025-07-18T21-56-31Z
alias: minio
command: ["server", "/data", "--console-address", ":9001"]
- mysql:9.3
pull_policy: if-not-present
- name: mysql:9.3
pull_policy: if-not-present
- name: arizephoenix/phoenix:latest
alias: phoenix
- redis:7-alpine
pull_policy: if-not-present
- name: redis:8.0
alias: redis
pull_policy: if-not-present
- name: quay.io/coreos/etcd:v3.5.5
alias: etcd
command: ["etcd", "--advertise-client-urls", "http://0.0.0.0:2379", "--listen-client-urls", "http://0.0.0.0:2379"]
pull_policy: if-not-present
- name: milvusdb/milvus:v2.3.1
alias: milvus
variables:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
command: ["milvus", "run", "standalone"]
pull_policy: if-not-present
- name: opensearchproject/opensearch:2.11.1
alias: opensearch
pull_policy: if-not-present
variables:
discovery.type: "single-node"
plugins.security.disabled: "true"

script:
- echo "Running tests"
Expand Down Expand Up @@ -147,3 +161,4 @@ upload:artifactory:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_BRANCH == 'main'
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH =~ /^release\/.*$/
26 changes: 20 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ NVIDIA NeMo Agent toolkit is a flexible, lightweight, and unifying library that

## ✨ Key Features

- 🧩 [**Framework Agnostic:**](./docs/source/quick-start/installing.md#framework-integrations) NeMo Agent toolkit works side-by-side and around existing agentic frameworks, such as [LangChain](https://www.langchain.com/), [LlamaIndex](https://www.llamaindex.ai/), [CrewAI](https://www.crewai.com/), and [Microsoft Semantic Kernel](https://learn.microsoft.com/en-us/semantic-kernel/), as well as customer enterprise frameworks and simple Python agents. This allows you to use your current technology stack without replatforming. NeMo Agent toolkit complements any existing agentic framework or memory tool you're using and isn't tied to any specific agentic framework, long-term memory, or data source.
- 🧩 [**Framework Agnostic:**](./docs/source/quick-start/installing.md#framework-integrations) NeMo Agent toolkit works side-by-side and around existing agentic frameworks, such as [LangChain](https://www.langchain.com/), [LlamaIndex](https://www.llamaindex.ai/), [CrewAI](https://www.crewai.com/), [Microsoft Semantic Kernel](https://learn.microsoft.com/en-us/semantic-kernel/), and [Google ADK](https://google.github.io/adk-docs/), as well as customer enterprise frameworks and simple Python agents. This allows you to use your current technology stack without replatforming. NeMo Agent toolkit complements any existing agentic framework or memory tool you're using and isn't tied to any specific agentic framework, long-term memory, or data source.

- 🔁 [**Reusability:**](./docs/source/extend/sharing-components.md) Every agent, tool, and agentic workflow in this library exists as a function call that works together in complex software applications. The composability between these agents, tools, and workflows allows you to build once and reuse in different scenarios.

Expand Down Expand Up @@ -72,6 +72,13 @@ Before you begin using NeMo Agent Toolkit, ensure that you have Python 3.11, 3.1

### Stable Version

Based on your system settings, you may need to configure and activate a Python virtual environment. On macOS or Linux, you can run the following commands:

```bash
python3 -m venv .venv
source .venv/bin/activate
```

To install the latest stable version of NeMo Agent Toolkit, run the following command:

```bash
Expand Down Expand Up @@ -108,7 +115,7 @@ More information on how to install the latest development version and contribute
export NVIDIA_API_KEY=<your_api_key>
```

2. Create the NeMo Agent toolkit workflow configuration file. This file will define the agents, tools, and workflows that will be used in the example. Save the following as `workflow.yaml`:
2. Create the NeMo Agent toolkit workflow configuration file. This file will define the agents, tools, and workflows that will be used in the example. Save the following as `workflow.yml`:

```yaml
functions:
Expand Down Expand Up @@ -137,10 +144,10 @@ More information on how to install the latest development version and contribute
parse_agent_response_max_retries: 3
```

3. Run the Hello World example using the `nat` CLI and the `workflow.yaml` file.
3. Run the Hello World example using the `nat` CLI and the `workflow.yml` file.

```bash
nat run --config_file workflow.yaml --input "List five subspecies of Aardvarks"
nat run --config_file workflow.yml --input "List five subspecies of Aardvarks"
```

This will run the workflow and output the results to the console.
Expand Down Expand Up @@ -168,9 +175,9 @@ The following diagram illustrates the key components of NeMo Agent toolkit and h
## 🛣️ Roadmap

- [x] Integrate with [NeMo DataFlywheel](https://github.com/NVIDIA-AI-Blueprints/data-flywheel) for continuous model improvement from production data.
- [ ] Add support for [Google ADK](https://google.github.io/adk-docs/) framework.
- [x] Add support for [Google ADK](https://google.github.io/adk-docs/) framework.
- [x] Add an agent optimizer to auto-tune hyperparameters and prompts to maximize performance.
- [ ] MCP authorization and streamable HTTP support.
- [x] MCP authorization and streamable HTTP support.
- [ ] Integration with [NeMo Guardrails](https://github.com/NVIDIA/NeMo-Guardrails) to secure any function in an agent workflow.
- [ ] End-to-end acceleration using intelligent integrations with [NVIDIA Dynamo](https://github.com/ai-dynamo/dynamo).

Expand All @@ -184,9 +191,16 @@ We would like to thank the following open source projects that made NeMo Agent t

- [CrewAI](https://github.com/crewAIInc/crewAI)
- [FastAPI](https://github.com/tiangolo/fastapi)
- [Google Agent Development Kit (ADK)](https://github.com/google/adk-python)
- [LangChain](https://github.com/langchain-ai/langchain)
- [Llama-Index](https://github.com/run-llama/llama_index)
- [Mem0ai](https://github.com/mem0ai/mem0)
- [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol/modelcontextprotocol)
- [MinIO](https://github.com/minio/minio)
- [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-python)
- [Phoenix](https://github.com/arize-ai/phoenix)
- [Ragas](https://github.com/explodinggradients/ragas)
- [Redis](https://github.com/redis/redis-py)
- [Semantic Kernel](https://github.com/microsoft/semantic-kernel)
- [Weave](https://github.com/wandb/weave)
- [uv](https://github.com/astral-sh/uv)
2 changes: 1 addition & 1 deletion ci/scripts/github/tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ rapids-logger "Running tests with Python version $(python --version) and pytest
set +e

REPORT_IDENT_SLUG="$(arch)-py${PYTHON_VERSION}"
pytest --junit-xml=${REPORTS_DIR}/report-${REPORT_IDENT_SLUG}_pytest.xml \
pytest --run_slow --junit-xml=${REPORTS_DIR}/report-${REPORT_IDENT_SLUG}_pytest.xml \
--cov=nat --cov-report term-missing \
--cov-report=xml:${REPORTS_DIR}/report-${REPORT_IDENT_SLUG}_pytest_coverage.xml
PYTEST_RESULTS=$?
Expand Down
2 changes: 1 addition & 1 deletion ci/scripts/gitlab/build_wheel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ if [[ "${BUILD_NAT_COMPAT}" == "true" ]]; then
done
fi

if [[ "${CI_COMMIT_BRANCH}" == "${CI_DEFAULT_BRANCH}" || "${CI_COMMIT_BRANCH}" == "main" ]]; then
if [[ "${CI_COMMIT_BRANCH}" == "${CI_DEFAULT_BRANCH}" || "${CI_COMMIT_BRANCH}" == "main" || "${CI_COMMIT_BRANCH}" == "release/"* ]]; then
rapids-logger "Uploading Wheels"

# Find and upload all .whl files from nested directories
Expand Down
4 changes: 2 additions & 2 deletions docs/source/_static/hitl_settings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions docs/source/_static/ui_home_page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,11 @@ def _build_api_tree() -> Path:
nbsphinx_allow_errors = True # Continue through Jupyter errors
add_module_names = False # Remove namespaces from class/method signatures
myst_heading_anchors = 4 # Generate links for markdown headers
copybutton_prompt_text = ">>> |$ |# " # characters to be stripped from the copied text
copybutton_prompt_text = ">>> |$ " # characters to be stripped from the copied text

# Allow GitHub-style mermaid fence code blocks to be used in markdown files
# see https://myst-parser.readthedocs.io/en/latest/configuration.html
myst_fence_as_directive = ["mermaid"]

suppress_warnings = [
"myst.header" # Allow header increases from h2 to h4 (skipping h3)
Expand Down
4 changes: 2 additions & 2 deletions docs/source/extend/telemetry-exporters.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Telemetry exporters in NeMo Agent toolkit are responsible for:

The flexible telemetry export system routes workflow events through different exporter types to various destinations:

```{mermaid}
```mermaid
graph TD
A[Workflow Events] --> B[Event Stream]
B --> C[Telemetry Exporter]
Expand All @@ -182,7 +182,7 @@ graph TD

NeMo Agent toolkit supports several types of exporters based on the data they handle:

```{mermaid}
```mermaid
graph LR
A["IntermediateStep"] --> B["Raw Exporter"]
A --> C["Span Exporter"]
Expand Down
2 changes: 1 addition & 1 deletion docs/source/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ Adding a Telemetry Exporter <./extend/telemetry-exporters.md>
API Authentication <./reference/api-authentication.md>
Interactive Models <./reference/interactive-models.md>
API Server Endpoints <./reference/api-server-endpoints.md>
Websockets <./reference/websockets.md>
WebSockets <./reference/websockets.md>
Command Line Interface (CLI) <./reference/cli.md>
Cursor Rules Reference <./reference/cursor-rules-reference.md>
Evaluation <./reference/evaluate.md>
Expand Down
76 changes: 58 additions & 18 deletions docs/source/quick-start/launching-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,43 +16,54 @@ limitations under the License.
-->

# Launching the NVIDIA NeMo Agent Toolkit API Server and User Interface

NVIDIA NeMo Agent toolkit provides a user interface for interacting with your running workflow. This guide walks you through starting the API server and launching the web-based user interface to interact with your workflows.

## User Interface Features
- Chat history
- Interact with a workflow via the HTTP API
- Interact with a workflow via a WebSocket
- Enable or disable a workflow's intermediate steps
- Expand all workflow intermediate steps by default
- Override intermediate steps with the same ID

- Modern and responsive user interface
- Real-time streaming responses
- Human-in-the-loop workflow support
- Chat history and conversation management
- Light and Dark theme support
- WebSocket and HTTP API integration
- Intermediate steps visualization
- Docker deployment support

## Walk-through

This walk-through guides you through the steps to set up and configure the NeMo Agent toolkit user interface.

### Prerequisites

Before starting, ensure you have:

- NeMo Agent toolkit installed and configured
- Set up the simple calculator workflow by following the instructions in `examples/getting_started/simple_calculator/README.md`
- Node.js v18+ installed (required for the web interface)


The NeMo Agent toolkit UI is located in a Git submodule at `external/nat-ui`. Ensure you have checked out all of the Git submodules by running the following:

```bash
git submodule update --init --recursive
```

### Start the NeMo Agent Toolkit Server

You can start the NeMo Agent toolkit server using the `nat serve` command with the appropriate configuration file.

```bash
nat serve --config_file=examples/getting_started/simple_calculator/configs/config.yml
```

Running this command will produce the expected output as shown below (truncated for brevity):

```bash
INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)
```

### Verify the NeMo Agent Toolkit Server is Running

After the server is running, you can make HTTP requests to interact with the workflow. This step confirms that the server is properly configured and can process requests.

```bash
Expand All @@ -66,47 +77,76 @@ curl --request POST \
```

Running this command will produce the following expected output:
> **Note:** The response depends on the current time of day that the command is run.
:::note
The response depends on the current time of day that the command is run.
:::
```bash
{
"value": "No, 8 is less than the current hour of the day (4)."
}
```

### Launch the NeMo Agent Toolkit User Interface

After the NeMo Agent toolkit server starts, launch the web user interface. Launching the UI requires that Node.js v18+ is installed. Instructions for downloading and installing Node.js can be found in the official [Node.js documentation](https://nodejs.org/en/download).

For comprehensive information about the NeMo Agent Toolkit UI, including setup instructions, configuration options, and UI components documentation, see:

- [NeMo Agent Toolkit UI README](https://github.com/NVIDIA/NeMo-Agent-Toolkit-UI/blob/main/README.md) - Complete UI documentation and setup guide
- [UI Components Documentation](https://github.com/NVIDIA/NeMo-Agent-Toolkit-UI/tree/main/docs/ui) - Detailed information about components, features, and interface elements

#### Local Development

```bash
cd external/nat-ui
npm install
npm ci
npm run dev
```

After the web development server starts, open a web browser and navigate to [`http://localhost:3000/`](http://localhost:3000/).
Port `3001` is an alternative port if port `3000` (default) is in use.

![NeMo Agent toolkit Web User Interface](../_static/ui_home_page.png)

:::important
Workflows requiring human input or interaction (such as human-in-the-loop workflows, OAuth authentication, or interactive prompts) must use WebSocket connections. HTTP requests are the default method of communication, but human-in-the-loop functionality is not supported through HTTP. Ensure that `WebSocket` mode is enabled in the UI by navigating to the top-right corner and selecting the `WebSocket` option in the arrow pop-out.
:::

### Connect the User Interface to the NeMo Agent Toolkit Server Using HTTP API

Configure the settings by selecting the *Settings* icon located on the bottom left corner of the home page.

![NeMo Agent toolkit Web UI Settings](../_static/ui_generate_example_settings.png)

#### Settings Options
**Note:** It's recommended to select `/chat/stream` for intermediate results streaming.
- `Theme`: Light or Dark Theme.
- `HTTP URL for Chat Completion`: REST API enpoint.
- /generate
- /generate/stream
- /chat
- /chat/stream
- `WebSocket URL for Completion`: WebSocket URL to connect to running NeMo Agent toolkit server.
- `WebSocket Schema`: Workflow schema type over WebSocket connection.

**Appearance:**

- `Theme`: Switch between Light and Dark mode

**API Configuration:**

- `HTTP Endpoint`: Select API endpoint type:
- **Chat Completions — Streaming** - Real-time OpenAI Chat Completions compatible API endpoint with streaming responses (recommended for intermediate results)
- **Chat Completions — Non-Streaming** - Standard OpenAI Chat Completions compatible API endpoint
- **Generate — Streaming** - Text generation with streaming
- **Generate — Non-Streaming** - Standard text generation
- `Optional Generation Parameters`: OpenAI Chat Completions compatible JSON parameters that can be added to the request body (available for chat endpoints)

**WebSocket Configuration:**

- `WebSocket Schema`: Select schema for real-time connections:
- **Chat Completions — Streaming** - Streaming chat over WebSocket (recommended for intermediate results)
- **Chat Completions — Non-Streaming** - Non-streaming chat over WebSocket
- **Generate — Streaming** - Streaming generation over WebSocket
- **Generate — Non-Streaming** - Non-streaming generation over WebSocket

:::note
For intermediate results streaming, use **Chat Completions — Streaming** (`/chat/stream`) or **Generate — Streaming** (`/generate/stream`).
:::

### Simple Calculator Example Conversation

Interact with the chat interface by prompting the Agent with the
message: `Is 4 + 4 greater than the current hour of the day?`

Expand Down
2 changes: 1 addition & 1 deletion docs/source/reference/evaluate-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ It is recommended that the [Evaluating NeMo Agent toolkit Workflows](./evaluate.
The evaluation endpoint can be used to start evaluation jobs on a remote NeMo Agent toolkit server. This endpoint is only available when the `async_endpoints` optional dependency extra is installed. For users installing from source, this can be done by running `uv pip install -e '.[async_endpoints]'` from the root directory of the NeMo Agent toolkit library. Similarly, for users installing from PyPI, this can be done by running `pip install "nvidia-nat[async_endpoints]"`.

## Evaluation Endpoint Overview
```{mermaid}
```mermaid
graph TD
A["POST /evaluate"] --> B["Background Job Created"]
B --> C["GET /evaluate/job/{job_id}"]
Expand Down
Loading