nvidia-nat 1.3.0rc1__py3-none-any.whl → 1.3.0rc3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. nat/agent/prompt_optimizer/register.py +2 -2
  2. nat/agent/react_agent/register.py +20 -21
  3. nat/agent/rewoo_agent/register.py +18 -20
  4. nat/agent/tool_calling_agent/register.py +7 -3
  5. nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +31 -18
  6. nat/builder/component_utils.py +1 -1
  7. nat/builder/context.py +22 -6
  8. nat/builder/function.py +3 -2
  9. nat/builder/workflow_builder.py +46 -3
  10. nat/cli/commands/mcp/mcp.py +6 -6
  11. nat/cli/commands/workflow/templates/config.yml.j2 +14 -12
  12. nat/cli/commands/workflow/templates/register.py.j2 +2 -2
  13. nat/cli/commands/workflow/templates/workflow.py.j2 +35 -21
  14. nat/cli/commands/workflow/workflow_commands.py +54 -10
  15. nat/cli/entrypoint.py +9 -1
  16. nat/cli/main.py +3 -0
  17. nat/data_models/api_server.py +143 -66
  18. nat/data_models/config.py +1 -1
  19. nat/data_models/span.py +41 -3
  20. nat/experimental/test_time_compute/functions/execute_score_select_function.py +1 -1
  21. nat/experimental/test_time_compute/functions/ttc_tool_wrapper_function.py +2 -2
  22. nat/front_ends/console/console_front_end_plugin.py +11 -2
  23. nat/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +1 -1
  24. nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +5 -35
  25. nat/front_ends/fastapi/message_validator.py +3 -1
  26. nat/observability/exporter/span_exporter.py +34 -14
  27. nat/observability/register.py +16 -0
  28. nat/profiler/decorators/framework_wrapper.py +1 -1
  29. nat/profiler/forecasting/models/linear_model.py +1 -1
  30. nat/profiler/forecasting/models/random_forest_regressor.py +1 -1
  31. nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +1 -1
  32. nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +1 -1
  33. nat/runtime/runner.py +103 -6
  34. nat/runtime/session.py +27 -1
  35. nat/tool/memory_tools/add_memory_tool.py +3 -3
  36. nat/tool/memory_tools/delete_memory_tool.py +3 -4
  37. nat/tool/memory_tools/get_memory_tool.py +4 -4
  38. nat/utils/decorators.py +210 -0
  39. nat/utils/type_converter.py +8 -0
  40. nvidia_nat-1.3.0rc3.dist-info/METADATA +195 -0
  41. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/RECORD +46 -45
  42. nvidia_nat-1.3.0rc1.dist-info/METADATA +0 -391
  43. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/WHEEL +0 -0
  44. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/entry_points.txt +0 -0
  45. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
  46. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/licenses/LICENSE.md +0 -0
  47. {nvidia_nat-1.3.0rc1.dist-info → nvidia_nat-1.3.0rc3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,210 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ """Deprecation utilities.
16
+
17
+ This module provides helpers to standardize deprecation signaling across the
18
+ codebase:
19
+
20
+ - ``issue_deprecation_warning``: Builds and emits a single deprecation message
21
+ per function using the standard logging pipeline.
22
+ - ``deprecated``: A decorator that wraps sync/async functions and generators to
23
+ log a one-time deprecation message upon first use. It supports optional
24
+ metadata, a planned removal version, a suggested replacement, and an
25
+ optional feature name label.
26
+
27
+ Messages are emitted via ``logging.getLogger(__name__).warning`` (not
28
+ ``warnings.warn``) so they appear in normal application logs and respect global
29
+ logging configuration. Each unique function logs at most once per process.
30
+ """
31
+
32
+ import functools
33
+ import inspect
34
+ import logging
35
+ from collections.abc import AsyncGenerator
36
+ from collections.abc import Callable
37
+ from collections.abc import Generator
38
+ from typing import Any
39
+ from typing import TypeVar
40
+ from typing import overload
41
+
42
+ logger = logging.getLogger(__name__)
43
+
44
+ _warning_issued = set()
45
+
46
+ # Type variables for overloads
47
+ F = TypeVar('F', bound=Callable[..., Any])
48
+
49
+
50
+ def issue_deprecation_warning(function_name: str,
51
+ removal_version: str | None = None,
52
+ replacement: str | None = None,
53
+ reason: str | None = None,
54
+ feature_name: str | None = None,
55
+ metadata: dict[str, Any] | None = None) -> None:
56
+ """
57
+ Log a deprecation warning message for the function.
58
+
59
+ A warning is emitted only once per function. When a ``metadata`` dict
60
+ is supplied, it is appended to the log entry to provide extra context
61
+ (e.g., version, author, feature flag).
62
+
63
+ Args:
64
+ function_name: The name of the deprecated function
65
+ removal_version: The version when the function will be removed
66
+ replacement: What to use instead of this function
67
+ reason: Why the function is being deprecated
68
+ feature_name: Optional name of the feature that is deprecated
69
+ metadata: Optional dictionary of metadata to log with the warning
70
+ """
71
+ if function_name not in _warning_issued:
72
+ # Build the deprecation message
73
+ if feature_name:
74
+ warning_message = f"{feature_name} is deprecated"
75
+ else:
76
+ warning_message = f"Function {function_name} is deprecated"
77
+
78
+ if removal_version:
79
+ warning_message += f" and will be removed in version {removal_version}"
80
+ else:
81
+ warning_message += " and will be removed in a future release"
82
+
83
+ warning_message += "."
84
+
85
+ if reason:
86
+ warning_message += f" Reason: {reason}."
87
+
88
+ if replacement:
89
+ warning_message += f" Use '{replacement}' instead."
90
+
91
+ if metadata:
92
+ warning_message += f" | Metadata: {metadata}"
93
+
94
+ # Issue warning and save function name to avoid duplicate warnings
95
+ logger.warning(warning_message)
96
+ _warning_issued.add(function_name)
97
+
98
+
99
+ # Overloads for different function types
100
+ @overload
101
+ def deprecated(func: F,
102
+ *,
103
+ removal_version: str | None = None,
104
+ replacement: str | None = None,
105
+ reason: str | None = None,
106
+ feature_name: str | None = None,
107
+ metadata: dict[str, Any] | None = None) -> F:
108
+ """Overload for direct decorator usage (when called without parentheses)."""
109
+ ...
110
+
111
+
112
+ @overload
113
+ def deprecated(*,
114
+ removal_version: str | None = None,
115
+ replacement: str | None = None,
116
+ reason: str | None = None,
117
+ feature_name: str | None = None,
118
+ metadata: dict[str, Any] | None = None) -> Callable[[F], F]:
119
+ """Overload for decorator factory usage (when called with parentheses)."""
120
+ ...
121
+
122
+
123
+ def deprecated(func: Any = None,
124
+ *,
125
+ removal_version: str | None = None,
126
+ replacement: str | None = None,
127
+ reason: str | None = None,
128
+ feature_name: str | None = None,
129
+ metadata: dict[str, Any] | None = None) -> Any:
130
+ """
131
+ Decorator that can wrap any type of function (sync, async, generator,
132
+ async generator) and logs a deprecation warning.
133
+
134
+ Args:
135
+ func: The function to be decorated.
136
+ removal_version: The version when the function will be removed
137
+ replacement: What to use instead of this function
138
+ reason: Why the function is being deprecated
139
+ feature_name: Optional name of the feature that is deprecated. If provided, the warning will be
140
+ prefixed with "The <feature_name> feature is deprecated".
141
+ metadata: Optional dictionary of metadata to log with the warning. This can include information
142
+ like version, author, etc. If provided, the metadata will be
143
+ logged alongside the deprecation warning.
144
+ """
145
+ function_name: str = f"{func.__module__}.{func.__qualname__}" if func else "<unknown_function>"
146
+
147
+ # If called as @deprecated(...) but not immediately passed a function
148
+ if func is None:
149
+
150
+ def decorator_wrapper(actual_func):
151
+ return deprecated(actual_func,
152
+ removal_version=removal_version,
153
+ replacement=replacement,
154
+ reason=reason,
155
+ feature_name=feature_name,
156
+ metadata=metadata)
157
+
158
+ return decorator_wrapper
159
+
160
+ # --- Validate metadata ---
161
+ if metadata is not None:
162
+ if not isinstance(metadata, dict):
163
+ raise TypeError("metadata must be a dict[str, Any].")
164
+ if any(not isinstance(k, str) for k in metadata.keys()):
165
+ raise TypeError("All metadata keys must be strings.")
166
+
167
+ # --- Now detect the function type and wrap accordingly ---
168
+ if inspect.isasyncgenfunction(func):
169
+ # ---------------------
170
+ # ASYNC GENERATOR
171
+ # ---------------------
172
+
173
+ @functools.wraps(func)
174
+ async def async_gen_wrapper(*args, **kwargs) -> AsyncGenerator[Any, Any]:
175
+ issue_deprecation_warning(function_name, removal_version, replacement, reason, feature_name, metadata)
176
+ async for item in func(*args, **kwargs):
177
+ yield item # yield the original item
178
+
179
+ return async_gen_wrapper
180
+
181
+ if inspect.iscoroutinefunction(func):
182
+ # ---------------------
183
+ # ASYNC FUNCTION
184
+ # ---------------------
185
+ @functools.wraps(func)
186
+ async def async_wrapper(*args, **kwargs) -> Any:
187
+ issue_deprecation_warning(function_name, removal_version, replacement, reason, feature_name, metadata)
188
+ result = await func(*args, **kwargs)
189
+ return result
190
+
191
+ return async_wrapper
192
+
193
+ if inspect.isgeneratorfunction(func):
194
+ # ---------------------
195
+ # SYNC GENERATOR
196
+ # ---------------------
197
+ @functools.wraps(func)
198
+ def sync_gen_wrapper(*args, **kwargs) -> Generator[Any, Any, Any]:
199
+ issue_deprecation_warning(function_name, removal_version, replacement, reason, feature_name, metadata)
200
+ yield from func(*args, **kwargs) # yield the original item
201
+
202
+ return sync_gen_wrapper
203
+
204
+ @functools.wraps(func)
205
+ def sync_wrapper(*args, **kwargs) -> Any:
206
+ issue_deprecation_warning(function_name, removal_version, replacement, reason, feature_name, metadata)
207
+ result = func(*args, **kwargs)
208
+ return result
209
+
210
+ return sync_wrapper
@@ -93,6 +93,14 @@ class TypeConverter:
93
93
  if to_type is None or decomposed.is_instance(data):
94
94
  return data
95
95
 
96
+ # 2) If data is a union type, try to convert to each type in the union
97
+ if decomposed.is_union:
98
+ for union_type in decomposed.args:
99
+ result = self._convert(data, union_type)
100
+ if result is not None:
101
+ return result
102
+ return None
103
+
96
104
  root = decomposed.root
97
105
 
98
106
  # 2) Attempt direct in *this* converter
@@ -0,0 +1,195 @@
1
+ Metadata-Version: 2.4
2
+ Name: nvidia-nat
3
+ Version: 1.3.0rc3
4
+ Summary: NVIDIA NeMo Agent toolkit
5
+ Author: NVIDIA Corporation
6
+ Maintainer: NVIDIA Corporation
7
+ License: Apache-2.0
8
+ Project-URL: documentation, https://docs.nvidia.com/nemo/agent-toolkit/latest/
9
+ Project-URL: source, https://github.com/NVIDIA/NeMo-Agent-Toolkit
10
+ Keywords: ai,rag,agents
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Requires-Python: <3.14,>=3.11
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE-3rd-party.txt
18
+ License-File: LICENSE.md
19
+ Requires-Dist: aioboto3>=11.0.0
20
+ Requires-Dist: authlib~=1.5
21
+ Requires-Dist: click~=8.1
22
+ Requires-Dist: colorama~=0.4.6
23
+ Requires-Dist: datasets~=4.0
24
+ Requires-Dist: expandvars~=1.0
25
+ Requires-Dist: fastapi~=0.115.5
26
+ Requires-Dist: httpx~=0.27
27
+ Requires-Dist: jinja2~=3.1
28
+ Requires-Dist: jsonpath-ng~=1.7
29
+ Requires-Dist: mcp~=1.13
30
+ Requires-Dist: nest-asyncio~=1.6
31
+ Requires-Dist: networkx~=3.4
32
+ Requires-Dist: numpy~=1.26; python_version < "3.12"
33
+ Requires-Dist: numpy~=2.3; python_version >= "3.12"
34
+ Requires-Dist: openinference-semantic-conventions~=0.1.14
35
+ Requires-Dist: openpyxl~=3.1
36
+ Requires-Dist: optuna~=4.4.0
37
+ Requires-Dist: pip>=24.3.1
38
+ Requires-Dist: pkce==1.0.3
39
+ Requires-Dist: pkginfo~=1.12
40
+ Requires-Dist: platformdirs~=4.3
41
+ Requires-Dist: pydantic~=2.11
42
+ Requires-Dist: pymilvus~=2.4
43
+ Requires-Dist: python-dotenv~=1.1.1
44
+ Requires-Dist: PyYAML~=6.0
45
+ Requires-Dist: ragas~=0.2.14
46
+ Requires-Dist: rich~=13.9
47
+ Requires-Dist: tabulate~=0.9
48
+ Requires-Dist: uvicorn[standard]<0.36
49
+ Requires-Dist: wikipedia~=1.4
50
+ Provides-Extra: all
51
+ Requires-Dist: nvidia-nat-all; extra == "all"
52
+ Provides-Extra: adk
53
+ Requires-Dist: nvidia-nat-adk; extra == "adk"
54
+ Provides-Extra: agno
55
+ Requires-Dist: nvidia-nat-agno; extra == "agno"
56
+ Provides-Extra: crewai
57
+ Requires-Dist: nvidia-nat-crewai; extra == "crewai"
58
+ Provides-Extra: data-flywheel
59
+ Requires-Dist: nvidia-nat-data-flywheel; extra == "data-flywheel"
60
+ Provides-Extra: ingestion
61
+ Requires-Dist: nvidia-nat-ingestion; extra == "ingestion"
62
+ Provides-Extra: langchain
63
+ Requires-Dist: nvidia-nat-langchain; extra == "langchain"
64
+ Provides-Extra: llama-index
65
+ Requires-Dist: nvidia-nat-llama-index; extra == "llama-index"
66
+ Provides-Extra: mcp
67
+ Requires-Dist: nvidia-nat-mcp; extra == "mcp"
68
+ Provides-Extra: mem0ai
69
+ Requires-Dist: nvidia-nat-mem0ai; extra == "mem0ai"
70
+ Provides-Extra: opentelemetry
71
+ Requires-Dist: nvidia-nat-opentelemetry; extra == "opentelemetry"
72
+ Provides-Extra: phoenix
73
+ Requires-Dist: nvidia-nat-phoenix; extra == "phoenix"
74
+ Provides-Extra: profiling
75
+ Requires-Dist: nvidia-nat-profiling; extra == "profiling"
76
+ Provides-Extra: ragaai
77
+ Requires-Dist: nvidia-nat-ragaai; extra == "ragaai"
78
+ Provides-Extra: mysql
79
+ Requires-Dist: nvidia-nat-mysql; extra == "mysql"
80
+ Provides-Extra: redis
81
+ Requires-Dist: nvidia-nat-redis; extra == "redis"
82
+ Provides-Extra: s3
83
+ Requires-Dist: nvidia-nat-s3; extra == "s3"
84
+ Provides-Extra: semantic-kernel
85
+ Requires-Dist: nvidia-nat-semantic-kernel; extra == "semantic-kernel"
86
+ Provides-Extra: telemetry
87
+ Requires-Dist: nvidia-nat-opentelemetry; extra == "telemetry"
88
+ Requires-Dist: nvidia-nat-phoenix; extra == "telemetry"
89
+ Requires-Dist: nvidia-nat-weave; extra == "telemetry"
90
+ Requires-Dist: nvidia-nat-ragaai; extra == "telemetry"
91
+ Provides-Extra: weave
92
+ Requires-Dist: nvidia-nat-weave; extra == "weave"
93
+ Provides-Extra: zep-cloud
94
+ Requires-Dist: nvidia-nat-zep-cloud; extra == "zep-cloud"
95
+ Provides-Extra: examples
96
+ Requires-Dist: nat_adk_demo; extra == "examples"
97
+ Requires-Dist: nat_agno_personal_finance; extra == "examples"
98
+ Requires-Dist: nat_haystack_deep_research_agent; extra == "examples"
99
+ Requires-Dist: nat_alert_triage_agent; extra == "examples"
100
+ Requires-Dist: nat_automated_description_generation; extra == "examples"
101
+ Requires-Dist: nat_email_phishing_analyzer; extra == "examples"
102
+ Requires-Dist: nat_multi_frameworks; extra == "examples"
103
+ Requires-Dist: nat_plot_charts; extra == "examples"
104
+ Requires-Dist: nat_por_to_jiratickets; extra == "examples"
105
+ Requires-Dist: nat_profiler_agent; extra == "examples"
106
+ Requires-Dist: nat_redact_pii; extra == "examples"
107
+ Requires-Dist: nat_router_agent; extra == "examples"
108
+ Requires-Dist: nat_semantic_kernel_demo; extra == "examples"
109
+ Requires-Dist: nat_sequential_executor; extra == "examples"
110
+ Requires-Dist: nat_simple_auth; extra == "examples"
111
+ Requires-Dist: nat_simple_auth_mcp; extra == "examples"
112
+ Requires-Dist: nat_simple_web_query; extra == "examples"
113
+ Requires-Dist: nat_simple_web_query_eval; extra == "examples"
114
+ Requires-Dist: nat_simple_calculator; extra == "examples"
115
+ Requires-Dist: nat_simple_calculator_custom_routes; extra == "examples"
116
+ Requires-Dist: nat_simple_calculator_eval; extra == "examples"
117
+ Requires-Dist: nat_simple_calculator_mcp; extra == "examples"
118
+ Requires-Dist: nat_simple_calculator_observability; extra == "examples"
119
+ Requires-Dist: nat_simple_calculator_hitl; extra == "examples"
120
+ Requires-Dist: nat_simple_rag; extra == "examples"
121
+ Requires-Dist: nat_swe_bench; extra == "examples"
122
+ Requires-Dist: nat_user_report; extra == "examples"
123
+ Provides-Extra: gunicorn
124
+ Requires-Dist: gunicorn~=23.0; extra == "gunicorn"
125
+ Provides-Extra: async-endpoints
126
+ Requires-Dist: aiosqlite~=0.21; extra == "async-endpoints"
127
+ Requires-Dist: dask==2023.6; extra == "async-endpoints"
128
+ Requires-Dist: distributed==2023.6; extra == "async-endpoints"
129
+ Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "async-endpoints"
130
+ Provides-Extra: nvidia-haystack
131
+ Requires-Dist: nvidia-haystack~=0.3.0; extra == "nvidia-haystack"
132
+ Provides-Extra: litellm
133
+ Requires-Dist: litellm==1.74.9; extra == "litellm"
134
+ Provides-Extra: openai
135
+ Requires-Dist: openai~=1.106; extra == "openai"
136
+ Dynamic: license-file
137
+
138
+ <!--
139
+ SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
140
+ SPDX-License-Identifier: Apache-2.0
141
+
142
+ Licensed under the Apache License, Version 2.0 (the "License");
143
+ you may not use this file except in compliance with the License.
144
+ You may obtain a copy of the License at
145
+
146
+ http://www.apache.org/licenses/LICENSE-2.0
147
+
148
+ Unless required by applicable law or agreed to in writing, software
149
+ distributed under the License is distributed on an "AS IS" BASIS,
150
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
151
+ See the License for the specific language governing permissions and
152
+ limitations under the License.
153
+ -->
154
+
155
+ ![NVIDIA NeMo Agent Toolkit](https://media.githubusercontent.com/media/NVIDIA/NeMo-Agent-Toolkit/refs/heads/main/docs/source/_static/banner.png "NeMo Agent toolkit banner image")
156
+
157
+ # NVIDIA NeMo Agent Toolkit
158
+
159
+ NeMo Agent toolkit is a flexible library designed to seamlessly integrate your enterprise agents—regardless of framework—with various data sources and tools. By treating agents, tools, and agentic workflows as simple function calls, NeMo Agent toolkit enables true composability: build once and reuse anywhere.
160
+
161
+ ## Key Features
162
+
163
+ - [**Framework Agnostic:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/extend/plugins.html) Works with any agentic framework, so you can use your current technology stack without replatforming.
164
+ - [**Reusability:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/extend/sharing-components.html) Every agent, tool, or workflow can be combined and repurposed, allowing developers to leverage existing work in new scenarios.
165
+ - [**Rapid Development:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/tutorials/index.html) Start with a pre-built agent, tool, or workflow, and customize it to your needs.
166
+ - [**Profiling:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/profiler.html) Profile entire workflows down to the tool and agent level, track input/output tokens and timings, and identify bottlenecks.
167
+ - [**Observability:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/observe/observe-workflow-with-phoenix.html) Monitor and debug your workflows with any OpenTelemetry-compatible observability tool, with examples using [Phoenix](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/observe/observe-workflow-with-phoenix.html) and [W&B Weave](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/observe/observe-workflow-with-weave.html).
168
+ - [**Evaluation System:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/evaluate.html) Validate and maintain accuracy of agentic workflows with built-in evaluation tools.
169
+ - [**User Interface:**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/quick-start/launching-ui.html) Use the NeMo Agent toolkit UI chat interface to interact with your agents, visualize output, and debug workflows.
170
+ - [**MCP Compatibility**](https://docs.nvidia.com/nemo/agent-toolkit/1.3/workflows/mcp/mcp-client.html) Compatible with Model Context Protocol (MCP), allowing tools served by MCP Servers to be used as NeMo Agent toolkit functions.
171
+
172
+ With NeMo Agent toolkit, you can move quickly, experiment freely, and ensure reliability across all your agent-driven projects.
173
+
174
+ ## Links
175
+ * [Documentation](https://docs.nvidia.com/nemo/agent-toolkit/1.3/index.html): Explore the full documentation for NeMo Agent toolkit.
176
+
177
+ ## First time user?
178
+ If this is your first time using NeMo Agent toolkit, it is recommended to install the latest version from the [source repository](https://github.com/NVIDIA/NeMo-Agent-Toolkit?tab=readme-ov-file#quick-start) on GitHub. This package is intended for users who are familiar with NeMo Agent toolkit applications and need to add NeMo Agent toolkit as a dependency to their project.
179
+
180
+ ## Feedback
181
+
182
+ We would love to hear from you! Please file an issue on [GitHub](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues) if you have any feedback or feature requests.
183
+
184
+ ## Acknowledgements
185
+
186
+ We would like to thank the following open source projects that made NeMo Agent toolkit possible:
187
+
188
+ - [CrewAI](https://github.com/crewAIInc/crewAI)
189
+ - [FastAPI](https://github.com/tiangolo/fastapi)
190
+ - [LangChain](https://github.com/langchain-ai/langchain)
191
+ - [Llama-Index](https://github.com/run-llama/llama_index)
192
+ - [Mem0ai](https://github.com/mem0ai/mem0)
193
+ - [Ragas](https://github.com/explodinggradients/ragas)
194
+ - [Semantic Kernel](https://github.com/microsoft/semantic-kernel)
195
+ - [uv](https://github.com/astral-sh/uv)