Migration Guide#
NeMo Agent Toolkit is designed to be backwards compatible with the previous version of the toolkit except for changes documented on this page.
Additionally, all new contributions should rely on the most recent version of the toolkit and not rely on any deprecated functionality.
Migrating to a new version of NeMo Agent Toolkit#
It is strongly encouraged to migrate any existing code to the latest conventions and remove any deprecated functionality.
Version Specific Changes#
v1.6.0#
User Identity Resolution#
User identity is now resolved by a centralized UserManager component. The following changes apply:
User IDs are now UUID v5 hashes. Previously, user IDs were raw credential strings (cookie values, JWT claim values). They are now deterministic UUID v5 values derived from the credential. User IDs are opaque routing keys — no downstream code depends on a specific format.
JWT claim precedence corrected to RFC 7519. The previous precedence (
name > email > preferred_username > sub) was non-standard. The new precedence issub > email > preferred_usernameper RFC 7519 and OpenID Connect Core 1.0. Users whose identity was previously resolved from thenameclaim will be assigned a newuser_idbased onsubafter upgrade.Securitymodel removed from WebSocket messages. TheSecurityPydantic model and thesecurityfield onWebSocketUserMessageandWebSocketUserInteractionResponseMessagehave been removed. User identity is now resolved via theauth_messageflow or from connection headers. See User Identity Resolution for details.
Evaluator Package Split (Breaking)#
As part of dependency reduction, evaluator ownership is being moved out of nvidia-nat-eval and into framework-specific packages.
trajectoryevaluator moved tonvidia-nat-langchain.tunable_rag_evaluatormoved tonvidia-nat-langchain.ragasevaluator moved tonvidia-nat-ragas.Performance evaluators moved to
nvidia-nat-profiler:avg_llm_latencyavg_workflow_runtimeavg_num_llm_callsavg_tokens_per_llm_end
nvidia-nat-evalno longer includes a directragasdependency.swe_benchevaluator has been removed (no replacement package in this release).
This is a breaking change:
nvidia-nat-evalno longer owns these built-in evaluator implementations.nvidia-nat-langchainnow imports evaluator base contracts fromnvidia-nat-eval.If
nvidia-nat-langchainis installed withoutnvidia-nat-eval, LangChain evaluator registration imports can fail.
To migrate:
Install both packages when using these evaluators:
pip install "nvidia-nat-eval" nvidia-nat-langchain
Install the RAGAS evaluator package when using
_type: ragas:pip install nvidia-nat-ragas
Install the profiler package when using performance evaluators or profiling workflows:
pip install nvidia-nat-profilerNote: the previous dependency group name
nvidia-nat-profilingis nownvidia-nat-profiler.
Keep evaluator config names unchanged (
trajectory,tunable_rag_evaluator,avg_llm_latency,avg_workflow_runtime,avg_num_llm_calls,avg_tokens_per_llm_end).Remove any
_type: swe_benchevaluator entries from evaluation configurations.If you only need custom evaluators, keep
nvidia-nat-evalinstalled for evaluator contracts and do not rely on moved built-ins.
Eval Exporter Callback Split#
Eval metric exporting now uses generic eval-callback hooks owned by nvidia-nat-eval, while provider-specific implementations live in provider packages.
Weave eval metric export callback now lives in
nvidia-nat-weave.nvidia-nat-evalno longer hard-couples directly to Weave internals for eval metric publishing.If a telemetry exporter is configured but its eval callback provider package is missing,
nvidia-nat-evalnow logs a warning and continues evaluation without exporter publishing.
To migrate:
Install the matching provider package for configured telemetry exporters (for Weave:
pip install nvidia-nat-weave).Keep existing telemetry exporter config names unchanged (for example
_type: weave).
Eval CLI Command Package Split#
CLI command ownership is now aligned to package domains:
nat evalis provided bynvidia-nat-eval.nat sizingis provided bynvidia-nat-profiler.nat red-teamis provided bynvidia-nat-security.
To migrate:
Install command-specific packages as needed:
pip install "nvidia-nat[eval]"pip install "nvidia-nat-eval[full]"pip install nvidia-nat-profilerpip install nvidia-nat-security
Configuration Optimizer Package Extraction (Breaking)#
Optimizer ownership now lives in the optional nvidia-nat-config-optimizer package.
This is a breaking change:
The
nat optimizecommand is no longer owned by core and is only available whennvidia-nat-config-optimizeris installed.Optimizer implementation modules moved from core paths into
nat.plugins.config_optimizer.*.The
nvidia-nat[optimizer]extra has been renamed tonvidia-nat[config-optimizer].
To migrate:
Install config optimizer support when needed:
pip install "nvidia-nat[config-optimizer]"pip install nvidia-nat-config-optimizer
Update optimizer imports:
nat.parameter_optimization.prompt_optimizer=>nat.plugins.config_optimizer.prompts.ga_prompt_optimizernat.parameter_optimization.parameter_optimizer=>nat.plugins.config_optimizer.parameters.optimizernat.parameter_optimization.optimizer_runtime=>nat.plugins.config_optimizer.optimizer_runtime
Keep optimizer callbacks at their core path:
nat.profiler.parameter_optimization.optimizer_callbacks
v1.5.0#
Removing Old Aliases and Transitional Packages#
NVIDIA NeMo Agent Toolkit 1.2 changed the name and API. Compatibility aliases and transitional packages were provided to reduce development friction. Since three releases have passed, compatibility aliases and transitional packages are now removed.
aiqtoolkittransitional package is removed. Usenvidia-nat.All AIQ compatibility aliases have been removed.
aiqmodule is removed. Usenatinstead.The
aiqcommand is removed. Usenatinstead.
Packaging Restructure#
NeMo Agent Toolkit adds support for new libraries, frameworks, and integrations. With these added subpackages, conflicting dependencies have arisen.
nvidia-natis now a meta-package. All code has been moved intonvidia-nat-coreAll prior meta-packages have been removed.
nvidia-nat-all(no replacement, thoughnvidia-nat[most]extra does exist)nvidia-nat-ingestion(no replacement; examples directly use dependencies)nvidia-nat-profiling(usenvidia-nat[profiling])
Evaluation Package Split#
Evaluation and profiling implementations moved out of core into the nvidia-nat-eval package.
To migrate:
Install evaluation support when needed:
pip install "nvidia-nat[eval]"pip install nvidia-nat-eval
Install profiling support when needed:
pip install "nvidia-nat[profiling]"pip install "nvidia-nat-eval[profiling]"
Treat these commands as eval-owned commands that require
nvidia-nat-eval:nat eval,nat red-team, andnat sizing.
Import Path Changes#
For users migrating existing integrations, the primary import change is (old => new):
nat.eval.*=>nat.plugins.eval.*nat.profiler.*=>nat.plugins.eval.profiler.*(exceptnat.profiler.parameter_optimization.*, which remains in core)nat.eval.runtime_event_subscriber.pull_intermediate=>nat.builder.runtime_event_subscriber.pull_intermediate
For evaluation data models, prefer canonical core paths:
nat.data_models.evaluatorforEvalInput*/EvalOutput*nat.data_models.evaluate_runtimeforEvaluationRunConfig/EvaluationRunOutputnat.data_models.token_usage.TokenUsageBaseModelfor token usage counters (replacesnat.plugins.eval.profiler.callbacks.token_usage_base_model)
Internal module reorganization inside nat.plugins.eval is implementation detail and may change between releases.
nat.eval Deprecation Shim#
Core provides a temporary compatibility shim for nat.eval imports.
What to expect:
Importing from
nat.evalemits aUserWarningthat the path is deprecated.The shim requires
nvidia-nat-evalto be installed.Update imports to externally supported
nat.plugins.eval.*andnat.data_models.*paths now, because the shim will be removed in a future major release.
v1.4.0#
Weave Trace Identifier Namespace#
Weave trace identifiers now use the nat namespace.
If you depend on Weave trace names, update your dashboards and alert filters:
Replace any old namespace prefixes (
aiq) withnat.Re-run any saved queries that filter on trace or span names.
Calculator Function Group Migration#
The calculator tools moved to a single function group with new names and input schemas.
Update your configurations and tool calls:
Use the
calculatorfunction group with names such ascalculator__addandcalculator__compare.Pass numeric arrays for arithmetic inputs instead of parsing strings.
Sensitive Configuration Fields Use Secret Types#
Sensitive configuration fields now use Pydantic SecretStr types for redaction and serialization.
If you read or set secret fields in code:
Use
.get_secret_value()when you need the raw value.Update any tests that compare secrets to expect
SecretStrbehavior.
Zep Cloud v3 Migration#
The Zep Cloud integration now targets the v3 API and thread-based memory.
To migrate existing Zep configurations:
Upgrade your dependency to
zep-cloud~=3.0.Update any session-based references to thread-based APIs and ensure
conversation_idis set for per-thread storage.
LLM and Embedder Model Dump Changes#
All LLM and embedder providers now use exclude_unset=True for model_dump.
If you rely on implicit defaults being forwarded:
Set explicit values in your configuration for fields you need to send.
Update any custom providers that serialize configuration files to use the same behavior.
Per-User Function Instantiation#
Functions and function groups can now be registered as per-user components.
If you enabled per-user workflows:
Register per-user functions with
@register_per_user_function()and ensure schemas are explicit.Verify your
nat serveusage sets anat-sessioncookie so per-user workflows can resolve a user ID.
Removal of default_user_id in General config#
The default_user_id field was removed to prevent unsafe per-user workflow sharing.
To migrate existing configurations:
Remove
default_user_idfrom thegeneralconfiguration section.For
nat runandnat eval, set the newuser_idfields inConsoleFrontEndConfigandEvaluationRunConfig.
Function Group Separator Change#
Function group names now use __ instead of ..
To migrate:
Update function names from
group.functiontogroup__functionin configuration files and tool calls.Watch for deprecation warnings if you still use the legacy separator.
MCP Frontend Refactor#
MCP server and frontend code moved into the nvidia-nat-mcp package.
Update your MCP usage:
Import
MCPFrontEndPluginWorkerfromnat.plugins.mcp.server.front_end_plugin_worker.Recommended: migrate any
mcp_tool_wrapperusage tomcp_client.
nvidia-nat-all Packaging Changes#
The nvidia-nat-all meta-package removed conflicting optional dependencies.
If you rely on extras:
Reinstall
nvidia-nat-alland review the updated optional dependency list.Install additional frameworks explicitly when needed to avoid conflicts.
v1.3.0#
CLI Changes#
The MCP server CLI commands have been restructured.
nat mcpis now a command group and can no longer be used to start the MCP server.nat mcp serveis now the main command to start the MCP server.nat info mcphas been removed. Use the newnat mcp clientcommand instead.
Listing MCP Tools:
# Old (v1.2)
nat info mcp
nat info mcp --tool tool_name
# New (v1.3)
nat mcp client tool list
nat mcp client tool list --tool tool_name
Pinging MCP Server:
# Old (v1.2)
nat info mcp ping --url http://localhost:9901/sse
# New (v1.3)
nat mcp client ping --url http://localhost:9901/mcp
API Changes#
API Server Data Models#
The nat.data_models.api_server module has been updated to improve type safety and OpenAI API compatibility.
nat.data_models.api_server.Choicehas been split into two specialized models:nat.data_models.api_server.ChatResponseChoice- for non-streaming responses (containsmessagefield)nat.data_models.api_server.ChatResponseChunkChoice- for streaming responses (containsdeltafield)nat.data_models.api_server.Choiceremains as a backward compatibility alias forChatResponseChoice
nat.data_models.api_server.ChatResponsenow requiresusagefield (no longer optional).
Builder get_* methods switched to asynchronous#
The following builder methods have been switched to asynchronous to be aligned with other builder methods.
nat.builder.Builder.get_function()is now marked as asyncnat.builder.Builder.get_functions()is now marked as asyncnat.builder.Builder.get_memory_client()is now marked as asyncnat.builder.Builder.get_memory_clients()is now marked as asyncnat.builder.Builder.get_tool()is now marked as asyncnat.builder.Builder.get_tools()is now marked as async
Migration example:
# Old (v1.2)
function = builder.get_function("my_function")
# New (v1.3)
function = await builder.get_function("my_function")
MCP Default Transport Changed#
v1.2: Used SSE transport at
http://localhost:9901/ssev1.3: Uses streamable-http transport at
http://localhost:9901/mcp
To use SSE transport for backward compatibility:
nat mcp serve --config_file config.yml --transport sse
Warning
SSE transport does not support authentication. For production deployments, use streamable-http transport with authentication configured.
Package Changes#
Core MCP functionality has been moved to the nvidia-nat-mcp package.
If you are using MCP functionality, you will need to install the nvidia-nat[mcp] extra.
Package Dependency Updates#
The following dependency updates may affect your workflows:
mcpupdated from~1.10to~1.13- Update your MCP server configurations if neededuvicornlimited to<0.36fornest_asynciocompatibilitylangchain-coreupdated to~0.3.75- Review any custom LangChain workflows for compatibilitylanggraphupdated to~0.6.7- Review any custom LangGraph workflows for compatibilitycrewaiupdated to~0.193.2- Review any custom CrewAI workflows for compatibilitysemantic-kernelupdated to~1.35- Review any custom Semantic Kernel workflows for compatibility
Deprecations#
Warning
The following features are deprecated and will be removed in a future release.
nat.telemetry_exporters.weave.WeaveTelemetryExporter.entity- Theentityfield is deprecated. Remove this field from your Weave exporter configuration.use_uvloopconfiguration option - This setting in the general section of the config is deprecated. Remove this option from your workflow configurations.
v1.2.0#
Package Changes#
The
aiqtoolkitpackage has been renamed tonvidia-nat.
Warning
aiqtoolkit will be removed in a future release and is published as a transitional package.
Module Changes#
The
aiqmodule has been deprecated. Usenatinstead.
Warning
aiq will be removed in a future release.
CLI Changes#
The
aiqcommand has been deprecated. Usenatinstead.
Warning
The aiq command will be removed in a future release.
API Changes#
Note
Compatibility aliases are in place to ensure backwards compatibility, however it is strongly encouraged to migrate to the new names.
Types which previously contained
AIQhave had theirAIQprefix removed.aiq.data_models.config.AIQConfig->nat.data_models.config.Configaiq.builder.context.AIQContext->nat.builder.context.Contextaiq.builder.context.AIQContextState->nat.builder.context.ContextStateaiq.builder.user_interaction_manager.AIQUserInteractionManager->nat.builder.user_interaction_manager.UserInteractionManageraiq.cli.commands.workflow.workflow_commands.AIQPackageError->nat.cli.commands.workflow.workflow_commands.PackageErroraiq.data_models.api_server.AIQChatRequest->nat.data_models.api_server.ChatRequestaiq.data_models.api_server.AIQChoiceMessage->nat.data_models.api_server.ChoiceMessageaiq.data_models.api_server.AIQChoiceDelta->nat.data_models.api_server.ChoiceDeltaaiq.data_models.api_server.AIQChoice->nat.data_models.api_server.Choiceaiq.data_models.api_server.AIQUsage->nat.data_models.api_server.Usageaiq.data_models.api_server.AIQResponseSerializable->nat.data_models.api_server.ResponseSerializableaiq.data_models.api_server.AIQResponseBaseModelOutput->nat.data_models.api_server.ResponseBaseModelOutputaiq.data_models.api_server.AIQResponseBaseModelIntermediate->nat.data_models.api_server.ResponseBaseModelIntermediateaiq.data_models.api_server.AIQChatResponse->nat.data_models.api_server.ChatResponseaiq.data_models.api_server.AIQChatResponseChunk->nat.data_models.api_server.ChatResponseChunkaiq.data_models.api_server.AIQResponseIntermediateStep->nat.data_models.api_server.ResponseIntermediateStepaiq.data_models.api_server.AIQResponsePayloadOutput->nat.data_models.api_server.ResponsePayloadOutputaiq.data_models.api_server.AIQGenerateResponse->nat.data_models.api_server.GenerateResponseaiq.data_models.component.AIQComponentEnum->nat.data_models.component.ComponentEnumaiq.front_ends.fastapi.fastapi_front_end_config.AIQEvaluateRequest->nat.front_ends.fastapi.fastapi_front_end_config.EvaluateRequestaiq.front_ends.fastapi.fastapi_front_end_config.AIQEvaluateResponse->nat.front_ends.fastapi.fastapi_front_end_config.EvaluateResponseaiq.front_ends.fastapi.fastapi_front_end_config.AIQAsyncGenerateResponse->nat.front_ends.fastapi.fastapi_front_end_config.AsyncGenerateResponseaiq.front_ends.fastapi.fastapi_front_end_config.AIQEvaluateStatusResponse->nat.front_ends.fastapi.fastapi_front_end_config.EvaluateStatusResponseaiq.front_ends.fastapi.fastapi_front_end_config.AIQAsyncGenerationStatusResponse->nat.front_ends.fastapi.fastapi_front_end_config.AsyncGenerationStatusResponseaiq.registry_handlers.schemas.publish.BuiltAIQArtifact->nat.registry_handlers.schemas.publish.BuiltArtifactaiq.registry_handlers.schemas.publish.AIQArtifact->nat.registry_handlers.schemas.publish.Artifactaiq.retriever.interface.AIQRetriever->nat.retriever.interface.Retrieveraiq.retriever.models.AIQDocument->nat.retriever.models.Documentaiq.runtime.runner.AIQRunnerState->nat.runtime.runner.RunnerStateaiq.runtime.runner.AIQRunner->nat.runtime.runner.Runneraiq.runtime.session.AIQSessionManager->nat.runtime.session.SessionManageraiq.tool.retriever.AIQRetrieverConfig->nat.tool.retriever.RetrieverConfig
Functions and decorators which previously contained
aiq_have hadaiqremoved. Compatibility aliases are in place to ensure backwards compatibility.aiq.experimental.decorators.experimental_warning_decorator.aiq_experimental()->nat.experimental.decorators.experimental_warning_decorator.experimental()aiq.registry_handlers.package_utils.build_aiq_artifact()->nat.registry_handlers.package_utils.build_artifact()aiq.runtime.loader.get_all_aiq_entrypoints_distro_mapping()->nat.runtime.loader.get_all_entrypoints_distro_mapping()aiq.tool.retriever.aiq_retriever_tool()->nat.tool.retriever.retriever_tool()
v1.1.0#
Package Changes#
The
agentiqpackage has been renamed toaiqtoolkit.
Warning
agentiq will be removed in a future release and is published as a transitional package.