v1.3.0
What's Changed
🚀 Notable Features and Improvements
- ADK Support: Supports Google Agent Development Kit (ADK). Adds tool calling, core observability, and LLM integration in this release.
- Control-Flow Agents: Sequential Executor (Linear Agent) and Router Agent now control flow patterns of tool calls and sub-agents.
- Function Groups: Packages multiple related functions together so they share configuration, context, and resources.
- Hyperparameter Agent Optimizer: Automates hyperparameter tuning and prompt engineering for workflows.
- Introductory Notebook Improvements: Reorganizes getting started notebooks and adds Open in Colab links.
- LLM Improvements
- Adds LiteLLM Provider
- Supports GPT-5 (
/chat/completionsendpoint only) - Adds Nemotron thinking configuration
- MCP Improvements
- Supports
streamable-http-sseis no longer the default transport type. - Supports initial authorization - Enables connecting to MCP servers that require authentication.
- Supports multiple MCP tools from a single configuration - Pulls in entire tool sets published by MCP servers or filters them based on user configuration.
- Enhances CLI utilities for MCP servers and clients - Improves the
nat mcpsub command for querying, calling, and listing tools.
- Supports
- Python 3.13 support
🚨 Breaking Changes
- Redis Configuration Changes in @willkill07 in #649
- MCP enhancements: improves server config and adds support for all transport types (stdio, streamable-http) by @AnuradhaKaruppiah in #718
- Move MCP client to a separate sub-package by @AnuradhaKaruppiah in #768
- Signature change for
BaseAgentby @yczhang-nv in #757 - Builtin GitHub tools switched to Function Groups by @willkill07 in #684
- Fix chat history support in tool_calling_agent by @gfreeman-nvidia in #837
- Change
nat mcpto a command group withserveandclientsubcommands by @zhongxuanwang-nv in #811 - Builder
get_*functions should be markedasyncby @willkill07 in #834 - MCP Client Auth Support (part-2) by @AnuradhaKaruppiah in #854
- ReWOO Agent Workflow Refactoring (Dependency DAG for async Executor). by @billxbf in #861
- Reduce phoenix dependencies by @willkill07 in #985
- Remove example with poor performance by @dagardner-nv in #1011
- Deprecate the
WeaveTelemetryExporter.entityfield by @dagardner-nv in #1016 - Syncing UI submodule to bring secure proxy server updates by @ericevans-nv in #1044
✨ New Features
- Add features
nat workflow createa versioned dependency anddataand symlinks folder by @zhongxuanwang-nv in #639 - Feature: Azure OpenAI LLM provider and client by @willkill07 in #643
- Timezone Support for
datetimeTool and Normalize Response Time Handling by @zhongxuanwang-nv in #660 - Feature: GPT-5 Support by @willkill07 in #664
- Customize Log Truncation in Config by @RohanAdwankar in #723
- feat: Support for Nemotron thinking configuration by @willkill07 in #717
- Track agent system prompt in config and add config to skip maintenance check by @hsin-c in #724
- Add
nvidia-nat-data-flywheelsubpackage with NeMo Data Flywheel integrations by @mpenn in #716 - Enhance
ProcessingExportersystem to support redaction of content in telemetry traces by @mpenn in #751 - feat: Python 3.13 support by @willkill07 in #761
- Add test LLM provider to support testing by @zhongxuanwang-nv in #764
- Support additional provider parameters in LLM and Embedder config by @YosiElias in #749
- Add return_direct option to tool_calling_agent for direct tool responses by @thepatrickchin in #775
- Enable MCP auth for NAT MCP clients by @AnuradhaKaruppiah in #752
- Add function group filtering by @willkill07 in #807
- Implement
Sequential Executortool by @yczhang-nv in #806 - Add a /debug route to NAT MCP frontend to expose MCP tools by @zhongxuanwang-nv in #813
- MCP OAuth2 Token Introspection Validator by @ericevans-nv in #809
- [Synopsys] Feature: Google ADK Integration by @saglave in #726
- Add a blueprint for Haystack Deep Research Agent by @oryx1729 in #461
- fix: re-add litellm after accidental removal by @willkill07 in #852
- Add
mcp/client/tool/listendpoint by @yczhang-nv in #853 - feat: LiteLLM support for LangChain/LangGraph, Agno, CrewAI, LlamaIndex by @willkill07 in #881
- Add configurable token storage to MCP auth by @yczhang-nv in #883
- feat: Improve the developer journey for example notebooks by @willkill07 in #912
- feat: Add .env loading support to NAT cli by @willkill07 in #952
- feat: make built-in agents input adaptable by @willkill07 in #959
- UI submodule update 1.3 by @ericevans-nv in #1002
- feat: switch to nemotron reasoning models by @willkill07 in #1036
🔧 Improvements
- Collapse the
docsdependency group into thedevdependencies group by @dagardner-nv in #591 - Forward-merge release/1.2 into develop by @dagardner-nv in #679
- Forward-merge release/1.2 into develop by @dagardner-nv in #690
- Weave: Group workflow traces under the parent evaluation call by @AnuradhaKaruppiah in #663
- Misc release script improvements by @dagardner-nv in #692
- Fix
pytestfixture deprecation warning by @willkill07 in #698 - Adopt ruff in CI by @dagardner-nv in #694
- Upload test results to codecov by @dagardner-nv in #699
- Add Coderabbit config by @dagardner-nv in #710
- Allow custom post-processing of EvalInput after the workflow is run by @AnuradhaKaruppiah in #701
- Adding a Needs Triage label to issues which are created externally by @mdemoret-nv in #700
- Add fixtures allowing e2e tests to be optionally skipped upon missing environment variables by @dagardner-nv in #720
- Enable running e2e tests for nightly CI by @dagardner-nv in #727
- Enable the forward merger plugin of the rapids ops bot by @dagardner-nv in #728
- Ensure error reporting and propagating in a consistent pattern by @yczhang-nv in #722
- Improve input normalization of
ReActagent by @yczhang-nv in #730 - Update version of numpy to be more recent by @zhongxuanwang-nv in #746
- chore: update LangChain and LangGraph versions by @willkill07 in #780
- Refactor OTLPSpanHeaderRedactionAdapterExporter to support multiple headers and Span tags by @mpenn in #767
- Require approval from the
nat-dep-approversgroup for dependency changes by @dagardner-nv in #782 - Add
tool_call_max_retriesoption to ReWOO agent by @yczhang-nv in #785 - Add NAT Agent Hyperparameter Optimizer by @dnandakumar-nv in #650
- Deprecating
use_uvloopfrom general section of the config. by @zhongxuanwang-nv in #794 - Report nightly test results by @dagardner-nv in #797
- Expanding nightly E2E tests by @dagardner-nv in #812
- Move MCP Client functionality to function groups by @AnuradhaKaruppiah in #814
- Add
raise_tool_call_erroroption toReWOOagent by @yczhang-nv in #819 - Improved Dask shutdown by @dagardner-nv in #825
- fix: improve Google ADK structure and fix callback handlers for tools and LLMs by @willkill07 in #848
- Skip some tests in
test_mcp_client_base.pyto avoid blocking CI by @yczhang-nv in #850 - Implement OAuth2 security test coverage by @ericevans-nv in #862
- Console Auth Flow Exception Improvement by @ericevans-nv in #867
- Simplify simple-calculator MCP example by @AnuradhaKaruppiah in #874
- ReWOO typing enhancements; more ruff checks; prefer
langchain-tavilyby @willkill07 in #872 - Mandate user id for MCP oauth2 authentication by @AnuradhaKaruppiah in #873
- chore: bump nat-ui submodule by @willkill07 in #876
- Add additional E2E tests for examples by @dagardner-nv in #849
- Include branch name in nightly test report by @dagardner-nv in #879
- Improve new workflow template by @zhongxuanwang-nv in #851
- Enhance OpenAI Chat API Compatibility by @ericevans-nv in #889
- chore: additional workflow template cleanup by @willkill07 in #899
- Add hierarchical IDs for consistent telemetry and reporting by @zhongxuanwang-nv in #863
- Perform vale spelling checks on notebooks by @dagardner-nv in #896
- Implement deprecated decorator for deprecation notices by @AnuradhaKaruppiah in #904
- Implement session aware MCP client routing by @AnuradhaKaruppiah in #898
- feat: Improve the developer journey for example notebooks (part 2) by @willkill07 in #913
- Set the title warning to an error by @dagardner-nv in #918
- Improve multi-user MCP client handling by @AnuradhaKaruppiah in #922
- Avoid Pydantic serialization warning triggered by tests by @dagardner-nv in #925
- fix: haystack deep research agent must be part of examples by @willkill07 in #927
- Silence several warnings being emitted by the tests by @dagardner-nv in #928
- UI submodule update by @ericevans-nv in #932
- Add ADK to TestLLM by @zhongxuanwang-nv in #937
- Add opensearch service to CI by @dagardner-nv in #944
- Add an integration test for the custom route front-end example by @dagardner-nv in #945
- fix: move Google ADK agent example back to ADK example by @willkill07 in #943
- Add a docker compose yaml for running integration tests by @dagardner-nv in #946
- Clean up MCP logs by @AnuradhaKaruppiah in #957
- Limit when we upload to artifactory by @dagardner-nv in #965
- Add security related warnings to MCP auth documentation by @yczhang-nv in #979
- Add E2E test for the simple calculator HITL example by @dagardner-nv in #984
- Add additional E2E tests for examples by @dagardner-nv in #986
- Add an E2E test for the simple calculator MCP example by @dagardner-nv in #990
- Add E2E test for Redis Memory example by @dagardner-nv in #994
- Enable Chat History for WebSocket Messages by @ericevans-nv in #999
- fix: explicitly add
tool.uv.managed = trueto pyproject.toml files by @willkill07 in #1003 - fix: address coderabbit feedback given from forward merge PR by @willkill07 in #1007
- Fix string concatenation by @zhongxuanwang-nv in #995
- Update backend corresponding to the MCP UI changes by @AnuradhaKaruppiah in #988
- Add E2E tests for Simple Calculator Observability example by @dagardner-nv in #1019
- fix: update authlib by @willkill07 in #1017
- feat: unify wording for agent docs; clarify local LLMs; update telemetry package by @willkill07 in #1042
- Always perform wheel builds in nightly CI by @dagardner-nv in #1046
- docs: getting started notebook no. 1-5 cleanup by @bbednarski9 in #1039
- fix: reintroduce
--all-filesto pre-commit CI by @willkill07 in #1048 - Add E2E test for Langfuse observability example by @dagardner-nv in #1047
- Refactor Optimizer Documentation for Clarity by @dnandakumar-nv in #1026
- Move pareto visualzation section to docs from example by @dnandakumar-nv in #1064
- Add location for prompt optimization functions by @dnandakumar-nv in #1077
- Fix WebSocket HITL Response Schema and Update UI Submodule by @ericevans-nv in #1079
- Add E2E test for Simple Calculator LangSmith observability example by @dagardner-nv in #1083
- feat(mcp): allow MCP Server
--tool_namefilter to reference function groups by @willkill07 in #1093 - Add gRPC Protocol Support to OTLP Span Exporters by @mpenn in #1102
🐛 Bug Fixes
- Toolcalling prompt by @gfreeman-nvidia in #617
- Fix missing f-string prefixes in error messages by @YosiElias in #686
- Configure
setuptools_scmto use the--first-parentflag by @dagardner-nv in #693 - Persist User Message ID For HTTP Connections by @ericevans-nv in #696
- fix(pytest): suppress upstream pydantic warning from mem0 by @willkill07 in #709
- fix(
ModelGatedFieldMixin): support multiple and indirect inheritance; rename toGatedFieldMixinby @willkill07 in #707 - Configure coderabbit not to apply conflicting labels by @dagardner-nv in #714
- Add missing implementation of abstract methods of
ToolTestRunnerby @yczhang-nv in #729 - fix: Improved model detection/rules for
ThinkingMixinby @willkill07 in #733 - Set
StreamHandlerto usesys.stdoutinconsoleregistered logging method by @mpenn in #742 - Add observability support when using MCP front end by @mpenn in #741
- Fix issues in GPU Sizing Launchable Notebook by @nv-edwli in #747
- fix(llm): resolve patch order to apply retry before thinking by @willkill07 in #750
- Remove conflicting/redundant
langchain-milvusdeps by @dagardner-nv in #754 - Update weave to 0.52 to handle incompat with gql 4.0.0 by @AnuradhaKaruppiah in #755
- fix: include
thinkingin model_dump forserveconfig serialization by @willkill07 in #771 - Update MCP client readme to use the streamable-http example by @AnuradhaKaruppiah in #777
- Fix async endpoints when using multiple workers by @dagardner-nv in #725
- fix: ensure
model_dumpexcludesNonefields when appropriate by @willkill07 in #772 - Fix workflow create documentation and command by @dagardner-nv in #790
- Fix
run_ci_local.shto not prompt for username/password by @dagardner-nv in #792 - Fix NAT FastAPI front end with Stdio-MCP server fails to initialize by @zhongxuanwang-nv in #788
- Enable agent optimizer and refine LangChain callback handling. by @dnandakumar-nv in #796
- fix(cli): nat workflow create should validate workflow name by @Akshat8510 in #787
- Fix issue where optimizable params are in model dump by @dnandakumar-nv in #801
- Prevent retry storms in nested method calls by @dnandakumar-nv in #803
- Fix the
test_unified_api_serverintegration tests by @dagardner-nv in #804 - Fixes
chat_completionreturning wrong type and substitute.contentwith.text()by @zhongxuanwang-nv in #802 - Move visualization import into method for Optimizer by @dnandakumar-nv in #810
- fix: ensure workflows set a
FunctionGroupsinstance_nameby @willkill07 in #815 - Make workflow name and description configurable as MCP tools by @yczhang-nv in #816
- fix: ensure
ContextVarsare all properly initialized by @willkill07 in #822 - Update RedisEditor to retrieve full document data from Redis when using get_memory tool by @thepatrickchin in #823
- fix: correct logic for
test_unified_api_server.pyby @willkill07 in #826 - Fix
TraceAdapterRegistrylookup errors inSpanToDFWRecordProcessorby @mpenn in #831 - Fix
test_azure_openai_minimal_agenttest by @dagardner-nv in #832 - Avoid calling 'git lfs install' as CI already performs this by @dagardner-nv in #833
- Add missing dependencies by @dagardner-nv in #835
- Enable running tests for examples by @dagardner-nv in #838
- fix: Ensure console front-end validation is called by @willkill07 in #844
- Fix tests under
examples/, remove all pytestskipmarkers by @dagardner-nv in #846 - Fix
chat_historyprocessing logic in ReAct agent by @yczhang-nv in #847 - Improve robustness of MCP client remote tool calling by @yczhang-nv in #840
- Fix swallowing client errors bug by @zhongxuanwang-nv in #841
- Declare
pipas a direct dependency by @dagardner-nv in #871 - Improve the re-connect handling mechanism for MCP with auth by @yczhang-nv in #875
- fix: ensure registration of adk demo functions; reduce warnings by @willkill07 in #885
- Fix problem with displaying MCP tools via the client CLI commands by @AnuradhaKaruppiah in #888
- Revert "mcp-client-cli: Note that client and server transports must match." by @AnuradhaKaruppiah in #892
- Fix Google ADK Demo registration by @willkill07 in #901
- fix: haystack deep research example test failure by @willkill07 in #910
- fix: Improve version detection for prerelease workflow creation by @willkill07 in #911
- fix: TTC must await get_function from builder by @willkill07 in #914
- fix: Docker must redeclare args in multi-stage builds; fix path in docs by @willkill07 in #916
- fix: pin uvicorn to prevent nest_asyncio patch error by @willkill07 in #929
- Resolve cancel scope error in MCP session cleanup with lifetime task by @AnuradhaKaruppiah in #931
- fix: import error for weave sanitize by @willkill07 in #934
- fix: add missing awaits for get_memory_client by @willkill07 in #935
- Update package metadata by @dagardner-nv in #938
- fix: ensure console logging is configurable by @willkill07 in #947
- Enable the upload step for the release branches in nightly builds by @dagardner-nv in #953
- fix: custom plot charts function should error on invalid chart types by @willkill07 in #949
- Attempt to fix wheel metadata by @dagardner-nv in #958
- fix: ensure mcp client can load exported function group functions by @willkill07 in #960
- fix: Dockerfiles must not use any arg expansion on
COPY --fromlines by @willkill07 in #962 - fix: tracing in configs, clarify directions for simple web query by @willkill07 in #968
- Fix profiler agent tests by @dagardner-nv in #969
- Fix the simple calc hitl example by @dagardner-nv in #970
- Fix the profiler agent E2E test by @dagardner-nv in #975
- fix: small changes to improve reliability of getting started notebooks by @bbednarski9 in #989
- Fix reasoning models ending with v1 to use detailed thinking format by @jiayin-nvidia in #980
- fix: Update system message (if exists) for thinking injection by @willkill07 in #987
- fix: improve agent-to-agent calling by simplifying pydantic model by @willkill07 in #993
- fix: langchain web ingest script must not always add CUDA documents by @willkill07 in #1018
- Suppress error log generated when terminating NAT MCP server with
ctrl + Cby @yczhang-nv in #1022 - docs: prevent coderabbit from applying common labels by @willkill07 in #1029
- Fix MCP auth redirect handling for remote-ssh and update docs by @AnuradhaKaruppiah in #1023
- Fix broken E2E tests by @dagardner-nv in #1033
- Fixing the repeated step id bug by @zhongxuanwang-nv in #1032
- fix: update mcp test to not patch multiple times by @willkill07 in #1045
- Keep original
NaNornullscores from LLM judge in eval output by @yczhang-nv in #1058 - fix: eval integration test should inspect Ragas evaluators by @willkill07 in #1067
- fix: pin langchain to prevent upgrade by @willkill07 in #1074
- fix: strip rc package from notebook by @willkill07 in #1081
- fix: apply coderabbit suggestions from forward merge by @willkill07 in #1089
- fix: generalize eval test by reducing assumptions by @willkill07 in #1090
- fix(mcp-client): support anyOf and oneOf when constructing schemas by @willkill07 in #1094
- fix(rewoo): replace placeholder IFF type is
strby @willkill07 in #1105 - fix(examples-hitl):
RetryReactAgentmust work with function groups by @willkill07 in #1106
📝 Documentation Updates
- fix(docs): Update Phoenix URL by @willkill07 in #721
- Add Dynatrace as otel export destination by @robertjahn in #736
- Add GPU Sizing Launchable Notebook to
notebooksdirectory by @nv-edwli in #738 - Adjust GPU Sizing Launchable Notebook by @nv-edwli in #739
- docs: use https GitHub URL for easier installation and contribution by @mengdig-nv in #743
- docs: add notes on
nat evalrequiring[profiling]sub-package by @willkill07 in #769 - docs: add supported platforms to README and Installing Guide by @willkill07 in #766
- Add cursor rules for
test_llmfromnvidia-nat-testpackage by @zhongxuanwang-nv in #774 - Remove issue #72 from list of known issues by @dagardner-nv in #779
- Add 'LangGraph' in locations where 'LangChain' appears by @zhongxuanwang-nv in #778
- Document async endpoint functionality by @dagardner-nv in #786
- Document the NeMo-Agent-Toolkit-Examples repo by @dagardner-nv in #793
- Add GitHub Release Notes Template by @willkill07 in #808
- Move router agent to
control_flowcategory by @yczhang-nv in #817 - docs: update example README to match current examples; move
haystack_deep_research_agentby @willkill07 in #866 - Add Tracing Exporters configuration guide for Dynatrace by @robertjahn in #856
- MCP authentication Overview Doc by @AnuradhaKaruppiah in #877
- Optimizer doc fix by @dnandakumar-nv in #884
- PyPi package install README updates by @ericevans-nv in #886
- mcp-client-cli: Note that client and server transports must match. by @AnuradhaKaruppiah in #887
- Fix notebook link to install instructions by @dagardner-nv in #890
- Add a note that the transport on the MCP client andMCP server need to match by @AnuradhaKaruppiah in #893
- fix: documentation CLI tree update by @willkill07 in #900
- Update MCP related CLI commands in
cli.mdby @yczhang-nv in #903 - Update CLI Docs for Optimizer by @dnandakumar-nv in #902
- docs: add note about increasing file descriptor limit by @nouraellm in #897
- Add sizing calc summary in the main CLI docs by @AnuradhaKaruppiah in #908
- Add missing plugins to list in
installing.mdby @dagardner-nv in #906 - Include plugins in the staged API tree for documentation builds by @dagardner-nv in #909
- docs: Add nat object-store documentation to CLI docs by @willkill07 in #907
- fix: ReWOO example must properly escape quotes in string by @willkill07 in #915
- docs: Clarify MinIO directions for simple_web_query_eval by @willkill07 in #917
- fix: Prefer OpenAI schema for ReAct and Tool Calling Agents by @willkill07 in #923
- feat: Enable GFM-style Mermaid code blocks in Sphinx by @willkill07 in #924
- docs: update top-level README with libraries; remove outdated uvloop by @willkill07 in #926
- Update UI Submodule and Reference Docs by @ericevans-nv in #939
- Update sizing calc with pre-requisites by @AnuradhaKaruppiah in #942
- docs: update Using Local LLMs (model name and directions) by @willkill07 in #941
- docs: clarify the need for a virtual environment in setup by @willkill07 in #948
- docs: clarify the need for a separate venv for local vLLM by @willkill07 in #950
- docs: improve automated description example; hoist Milvus to top-level by @willkill07 in #963
- Document running integration tests locally by @dagardner-nv in #966
- Update MCP documentation for consistency and clarity by @dagardner-nv in #977
- docs: update create workflow guide by @willkill07 in #983
- docs: remove duplicate line in MCP authentication documentation by @willkill07 in #982
- ReWOO doc and test example fix by @billxbf in #997
- fix: update notebook cells to remove unnecessary comments by @willkill07 in #1008
- Update Migration Guide with Guidance on API data model changes by @ericevans-nv in #1012
- Resolve Doc Build Issues by @ericevans-nv in #1015
- Fix misplaced sample output in the MCP client doc by @AnuradhaKaruppiah in #1021
- fix: correct file paths in evaluate documentation by @willkill07 in #1024
- docs: update migration guide for 1.3 by @willkill07 in #1027
- docs: update the automated function description example by @willkill07 in #1028
- docs: Fix missing await in memory documentation examples by @jackaldenryan in #1035
- docs: update ADK demo example; add framework documentation by @willkill07 in #1040
- Added documentation for the data flywheel observability plugin by @mpenn in #1031
- Document clearly that auth is not supported on the MCP server side by @AnuradhaKaruppiah in #1043
- docs: update function groups documentation by @willkill07 in #1025
- docs: add google colab links by @willkill07 in #1051
- Added a note in the MCP doc for directly referencing a MCP tool within a client by @AnuradhaKaruppiah in #1052
- Update
evaluate.mdto add options to avoid[429] Too Many Requestserrors by @yczhang-nv in #1056 - docs: document observability provider support by providers by @willkill07 in #1060
- Document writing E2E integration tests by @dagardner-nv in #1062
- docs: document observability provider requirements by @willkill07 in #1059
- docs: improve documentation for
nat evaloutput files by @bbednarski9 in #1061 - docs: update function group documentation and object store example by @willkill07 in #1065
- docs: update Ragas docs; remove RAG references from Ragas by @willkill07 in #1066
- docs: fix dynatrace OTLP link by @willkill07 in #1069
- docs: clarify evaluators output files by @willkill07 in #1068
- docs: add documentation for ThinkingMixin by @willkill07 in #1071
- Minor documentation for LangSmith tracing by @dagardner-nv in #1075
- docs: use github and sphinx flavored admonitions where appropriate by @willkill07 in #1078
- Added summary and made doc changes to align with standards by @lvojtku in #1085
- docs: clarify that function groups can be used as part of
tool_namelist by @willkill07 in #1092 - Improve Readme for 1.3 Release by @mdemoret-nv in #1100
- docs: 1.3 changelog by @willkill07 in #1070
🙌 New Contributors
- @zhongxuanwang-nv made their first contribution in #639
- @YosiElias made their first contribution in #686
- @RohanAdwankar made their first contribution in #723
- @robertjahn made their first contribution in #736
- @nv-edwli made their first contribution in #738
- @mengdig-nv made their first contribution in #743
- @Akshat8510 made their first contribution in #787
- @saglave made their first contribution in #726
- @oryx1729 made their first contribution in #461
- @billxbf made their first contribution in #861
- @nouraellm made their first contribution in #897
- @jiayin-nvidia made their first contribution in #980
- @jackaldenryan made their first contribution in #1035
Full Changelog: v1.2.1...v1.3.0