nvidia-nat 1.3.0a20250924__py3-none-any.whl → 1.3.0a20250926__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.
- nat/agent/react_agent/agent.py +5 -4
- nat/agent/react_agent/register.py +2 -5
- nat/agent/rewoo_agent/register.py +1 -4
- nat/agent/tool_calling_agent/register.py +1 -3
- nat/builder/component_utils.py +1 -1
- nat/builder/framework_enum.py +1 -0
- nat/builder/function.py +2 -1
- nat/front_ends/console/console_front_end_plugin.py +7 -4
- nat/front_ends/simple_base/simple_front_end_plugin_base.py +2 -0
- nat/llm/litellm_llm.py +69 -0
- nat/llm/register.py +4 -0
- nat/profiler/decorators/framework_wrapper.py +52 -3
- nat/runtime/runner.py +2 -1
- nat/utils/type_converter.py +4 -3
- nat/utils/type_utils.py +1 -1
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/METADATA +10 -3
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/RECORD +22 -21
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/WHEEL +0 -0
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/entry_points.txt +0 -0
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/top_level.txt +0 -0
nat/agent/react_agent/agent.py
CHANGED
|
@@ -59,6 +59,7 @@ class ReActGraphState(BaseModel):
|
|
|
59
59
|
messages: list[BaseMessage] = Field(default_factory=list) # input and output of the ReAct Agent
|
|
60
60
|
agent_scratchpad: list[AgentAction] = Field(default_factory=list) # agent thoughts / intermediate steps
|
|
61
61
|
tool_responses: list[BaseMessage] = Field(default_factory=list) # the responses from any tool calls
|
|
62
|
+
final_answer: str | None = Field(default=None) # the final answer from the ReAct Agent
|
|
62
63
|
|
|
63
64
|
|
|
64
65
|
class ReActAgentGraph(DualNodeAgent):
|
|
@@ -204,6 +205,7 @@ class ReActAgentGraph(DualNodeAgent):
|
|
|
204
205
|
# this is where we handle the final output of the Agent, we can clean-up/format/postprocess here
|
|
205
206
|
# the final answer goes in the "messages" state channel
|
|
206
207
|
state.messages += [AIMessage(content=final_answer)]
|
|
208
|
+
state.final_answer = final_answer
|
|
207
209
|
else:
|
|
208
210
|
# the agent wants to call a tool, ensure the thoughts are preserved for the next agentic cycle
|
|
209
211
|
agent_output.log = output_message.content
|
|
@@ -242,10 +244,9 @@ class ReActAgentGraph(DualNodeAgent):
|
|
|
242
244
|
async def conditional_edge(self, state: ReActGraphState):
|
|
243
245
|
try:
|
|
244
246
|
logger.debug("%s Starting the ReAct Conditional Edge", AGENT_LOG_PREFIX)
|
|
245
|
-
if
|
|
246
|
-
# the ReAct Agent has finished executing
|
|
247
|
-
|
|
248
|
-
logger.debug("%s Final answer:\n%s", AGENT_LOG_PREFIX, last_message_content)
|
|
247
|
+
if state.final_answer:
|
|
248
|
+
# the ReAct Agent has finished executing
|
|
249
|
+
logger.debug("%s Final answer:\n%s", AGENT_LOG_PREFIX, state.final_answer)
|
|
249
250
|
return AgentDecision.END
|
|
250
251
|
# else the agent wants to call a tool
|
|
251
252
|
agent_output = state.agent_scratchpad[-1]
|
|
@@ -152,11 +152,8 @@ async def react_agent_workflow(config: ReActAgentWorkflowConfig, builder: Builde
|
|
|
152
152
|
return ChatResponse.from_string(str(output_message.content))
|
|
153
153
|
|
|
154
154
|
except Exception as ex:
|
|
155
|
-
logger.exception("%s ReAct Agent failed with exception: %s", AGENT_LOG_PREFIX, ex)
|
|
156
|
-
|
|
157
|
-
if config.verbose:
|
|
158
|
-
return ChatResponse.from_string(str(ex))
|
|
159
|
-
return ChatResponse.from_string("I seem to be having a problem.")
|
|
155
|
+
logger.exception("%s ReAct Agent failed with exception: %s", AGENT_LOG_PREFIX, str(ex))
|
|
156
|
+
raise RuntimeError
|
|
160
157
|
|
|
161
158
|
if (config.use_openai_api):
|
|
162
159
|
yield FunctionInfo.from_fn(_response_fn, description=config.description)
|
|
@@ -158,10 +158,7 @@ async def rewoo_agent_workflow(config: ReWOOAgentWorkflowConfig, builder: Builde
|
|
|
158
158
|
|
|
159
159
|
except Exception as ex:
|
|
160
160
|
logger.exception("ReWOO Agent failed with exception: %s", ex)
|
|
161
|
-
|
|
162
|
-
if config.verbose:
|
|
163
|
-
return ChatResponse.from_string(str(ex))
|
|
164
|
-
return ChatResponse.from_string("I seem to be having a problem.")
|
|
161
|
+
raise RuntimeError
|
|
165
162
|
|
|
166
163
|
if (config.use_openai_api):
|
|
167
164
|
yield FunctionInfo.from_fn(_response_fn, description=config.description)
|
|
@@ -115,9 +115,7 @@ async def tool_calling_agent_workflow(config: ToolCallAgentWorkflowConfig, build
|
|
|
115
115
|
return str(output_message.content)
|
|
116
116
|
except Exception as ex:
|
|
117
117
|
logger.exception("%s Tool Calling Agent failed with exception: %s", AGENT_LOG_PREFIX, ex)
|
|
118
|
-
|
|
119
|
-
return str(ex)
|
|
120
|
-
return "I seem to be having a problem."
|
|
118
|
+
raise RuntimeError
|
|
121
119
|
|
|
122
120
|
try:
|
|
123
121
|
yield FunctionInfo.from_fn(_response_fn, description=config.description)
|
nat/builder/component_utils.py
CHANGED
|
@@ -158,7 +158,7 @@ def recursive_componentref_discovery(cls: TypedBaseModel, value: typing.Any,
|
|
|
158
158
|
yield from recursive_componentref_discovery(cls, field_data, field_info.annotation)
|
|
159
159
|
if (decomposed_type.is_union):
|
|
160
160
|
for arg in decomposed_type.args:
|
|
161
|
-
if arg is typing.Any or
|
|
161
|
+
if arg is typing.Any or DecomposedType(arg).is_instance(value):
|
|
162
162
|
yield from recursive_componentref_discovery(cls, value, arg)
|
|
163
163
|
else:
|
|
164
164
|
for arg in decomposed_type.args:
|
nat/builder/framework_enum.py
CHANGED
nat/builder/function.py
CHANGED
|
@@ -159,7 +159,8 @@ class Function(FunctionBase[InputT, StreamingOutputT, SingleOutputT], ABC):
|
|
|
159
159
|
|
|
160
160
|
return result
|
|
161
161
|
except Exception as e:
|
|
162
|
-
|
|
162
|
+
err_msg = f"Error: {e}" if str(e).strip() else ""
|
|
163
|
+
logger.error("Error with ainvoke in function with input: %s. %s", value, err_msg)
|
|
163
164
|
raise
|
|
164
165
|
|
|
165
166
|
@typing.final
|
|
@@ -55,9 +55,10 @@ class ConsoleFrontEndPlugin(SimpleFrontEndPluginBase[ConsoleFrontEndConfig]):
|
|
|
55
55
|
self.auth_flow_handler = ConsoleAuthenticationFlowHandler()
|
|
56
56
|
|
|
57
57
|
async def pre_run(self):
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
if (self.front_end_config.input_query is not None and self.front_end_config.input_file is not None):
|
|
59
|
+
raise click.UsageError("Must specify either --input or --input_file, not both")
|
|
60
|
+
if (self.front_end_config.input_query is None and self.front_end_config.input_file is None):
|
|
61
|
+
raise click.UsageError("Must specify either --input or --input_file")
|
|
61
62
|
|
|
62
63
|
async def run_workflow(self, session_manager: SessionManager):
|
|
63
64
|
|
|
@@ -80,7 +81,9 @@ class ConsoleFrontEndPlugin(SimpleFrontEndPluginBase[ConsoleFrontEndConfig]):
|
|
|
80
81
|
input_list = list(self.front_end_config.input_query)
|
|
81
82
|
logger.debug("Processing input: %s", self.front_end_config.input_query)
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
# Make `return_exceptions=False` explicit; all exceptions are raised instead of being silenced
|
|
85
|
+
runner_outputs = await asyncio.gather(*[run_single_query(query) for query in input_list],
|
|
86
|
+
return_exceptions=False)
|
|
84
87
|
|
|
85
88
|
elif (self.front_end_config.input_file):
|
|
86
89
|
|
|
@@ -35,6 +35,8 @@ class SimpleFrontEndPluginBase(FrontEndBase[FrontEndConfigT], ABC):
|
|
|
35
35
|
|
|
36
36
|
async def run(self):
|
|
37
37
|
|
|
38
|
+
await self.pre_run()
|
|
39
|
+
|
|
38
40
|
# Must yield the workflow function otherwise it cleans up
|
|
39
41
|
async with WorkflowBuilder.from_config(config=self.full_config) as builder:
|
|
40
42
|
|
nat/llm/litellm_llm.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
|
|
16
|
+
from collections.abc import AsyncIterator
|
|
17
|
+
|
|
18
|
+
from pydantic import AliasChoices
|
|
19
|
+
from pydantic import ConfigDict
|
|
20
|
+
from pydantic import Field
|
|
21
|
+
|
|
22
|
+
from nat.builder.builder import Builder
|
|
23
|
+
from nat.builder.llm import LLMProviderInfo
|
|
24
|
+
from nat.cli.register_workflow import register_llm_provider
|
|
25
|
+
from nat.data_models.llm import LLMBaseConfig
|
|
26
|
+
from nat.data_models.retry_mixin import RetryMixin
|
|
27
|
+
from nat.data_models.temperature_mixin import TemperatureMixin
|
|
28
|
+
from nat.data_models.thinking_mixin import ThinkingMixin
|
|
29
|
+
from nat.data_models.top_p_mixin import TopPMixin
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class LiteLlmModelConfig(
|
|
33
|
+
LLMBaseConfig,
|
|
34
|
+
RetryMixin,
|
|
35
|
+
TemperatureMixin,
|
|
36
|
+
TopPMixin,
|
|
37
|
+
ThinkingMixin,
|
|
38
|
+
name="litellm",
|
|
39
|
+
):
|
|
40
|
+
"""A LiteLlm provider to be used with an LLM client."""
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(protected_namespaces=(), extra="allow")
|
|
43
|
+
|
|
44
|
+
api_key: str | None = Field(default=None, description="API key to interact with hosted model.")
|
|
45
|
+
base_url: str | None = Field(default=None,
|
|
46
|
+
description="Base url to the hosted model.",
|
|
47
|
+
validation_alias=AliasChoices("base_url", "api_base"),
|
|
48
|
+
serialization_alias="api_base")
|
|
49
|
+
model_name: str = Field(validation_alias=AliasChoices("model_name", "model"),
|
|
50
|
+
serialization_alias="model",
|
|
51
|
+
description="The LiteLlm hosted model name.")
|
|
52
|
+
seed: int | None = Field(default=None, description="Random seed to set for generation.")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@register_llm_provider(config_type=LiteLlmModelConfig)
|
|
56
|
+
async def litellm_model(
|
|
57
|
+
config: LiteLlmModelConfig,
|
|
58
|
+
_builder: Builder,
|
|
59
|
+
) -> AsyncIterator[LLMProviderInfo]:
|
|
60
|
+
"""Litellm model provider.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
config (LiteLlmModelConfig): The LiteLlm model configuration.
|
|
64
|
+
_builder (Builder): The NAT builder instance.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
AsyncIterator[LLMProviderInfo]: An async iterator that yields an LLMProviderInfo object.
|
|
68
|
+
"""
|
|
69
|
+
yield LLMProviderInfo(config=config, description="A LiteLlm model for use with an LLM client.")
|
nat/llm/register.py
CHANGED
|
@@ -15,9 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
# flake8: noqa
|
|
17
17
|
# isort:skip_file
|
|
18
|
+
"""Register LLM providers via import side effects.
|
|
18
19
|
|
|
20
|
+
This module is imported by the NeMo Agent Toolkit runtime to ensure providers are registered and discoverable.
|
|
21
|
+
"""
|
|
19
22
|
# Import any providers which need to be automatically registered here
|
|
20
23
|
from . import aws_bedrock_llm
|
|
21
24
|
from . import azure_openai_llm
|
|
25
|
+
from . import litellm_llm
|
|
22
26
|
from . import nim_llm
|
|
23
27
|
from . import openai_llm
|
|
@@ -17,6 +17,7 @@ from __future__ import annotations
|
|
|
17
17
|
|
|
18
18
|
import functools
|
|
19
19
|
import logging
|
|
20
|
+
from collections.abc import AsyncIterator
|
|
20
21
|
from collections.abc import Callable
|
|
21
22
|
from contextlib import AbstractAsyncContextManager as AsyncContextManager
|
|
22
23
|
from contextlib import asynccontextmanager
|
|
@@ -32,20 +33,37 @@ _library_instrumented = {
|
|
|
32
33
|
"crewai": False,
|
|
33
34
|
"semantic_kernel": False,
|
|
34
35
|
"agno": False,
|
|
36
|
+
"adk": False,
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
callback_handler_var: ContextVar[Any | None] = ContextVar("callback_handler_var", default=None)
|
|
38
40
|
|
|
39
41
|
|
|
40
42
|
def set_framework_profiler_handler(
|
|
41
|
-
workflow_llms: dict = None,
|
|
42
|
-
frameworks: list[LLMFrameworkEnum] = None,
|
|
43
|
+
workflow_llms: dict | None = None,
|
|
44
|
+
frameworks: list[LLMFrameworkEnum] | None = None,
|
|
43
45
|
) -> Callable[[Callable[..., AsyncContextManager[Any]]], Callable[..., AsyncContextManager[Any]]]:
|
|
44
46
|
"""
|
|
45
47
|
Decorator that wraps an async context manager function to set up framework-specific profiling.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
workflow_llms (dict | None): A dictionary of workflow LLM configurations.
|
|
51
|
+
frameworks (list[LLMFrameworkEnum] | None): A list of LLM frameworks used in the workflow functions.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
Callable[[Callable[..., AsyncContextManager[Any]]], Callable[..., AsyncContextManager[Any]]]:
|
|
55
|
+
A decorator that wraps the original function with profiling setup.
|
|
46
56
|
"""
|
|
47
57
|
|
|
48
58
|
def decorator(func: Callable[..., AsyncContextManager[Any]]) -> Callable[..., AsyncContextManager[Any]]:
|
|
59
|
+
"""The actual decorator that wraps the function.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
func (Callable[..., AsyncContextManager[Any]]): The function to wrap.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Callable[..., AsyncContextManager[Any]]: The wrapped function.
|
|
66
|
+
"""
|
|
49
67
|
|
|
50
68
|
@functools.wraps(func)
|
|
51
69
|
@asynccontextmanager
|
|
@@ -99,6 +117,20 @@ def set_framework_profiler_handler(
|
|
|
99
117
|
_library_instrumented["agno"] = True
|
|
100
118
|
logger.info("Agno callback handler registered")
|
|
101
119
|
|
|
120
|
+
if LLMFrameworkEnum.ADK in frameworks and not _library_instrumented["adk"]:
|
|
121
|
+
try:
|
|
122
|
+
from nat.plugins.adk.adk_callback_handler import ADKProfilerHandler
|
|
123
|
+
except ImportError as e:
|
|
124
|
+
logger.warning(
|
|
125
|
+
"ADK profiler not available. " +
|
|
126
|
+
"Install NAT with ADK extras: pip install 'nvidia-nat[adk]'. Error: %s",
|
|
127
|
+
e)
|
|
128
|
+
else:
|
|
129
|
+
handler = ADKProfilerHandler()
|
|
130
|
+
handler.instrument()
|
|
131
|
+
_library_instrumented["adk"] = True
|
|
132
|
+
logger.debug("ADK callback handler registered")
|
|
133
|
+
|
|
102
134
|
# IMPORTANT: actually call the wrapped function as an async context manager
|
|
103
135
|
async with func(workflow_config, builder) as result:
|
|
104
136
|
yield result
|
|
@@ -117,11 +149,28 @@ def chain_wrapped_build_fn(
|
|
|
117
149
|
Convert an original build function into an async context manager that
|
|
118
150
|
wraps it with a single call to set_framework_profiler_handler, passing
|
|
119
151
|
all frameworks at once.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
original_build_fn (Callable[..., AsyncContextManager]): The original build function to wrap.
|
|
155
|
+
workflow_llms (dict): A dictionary of workflow LLM configurations.
|
|
156
|
+
function_frameworks (list[LLMFrameworkEnum]): A list of LLM frameworks used in the workflow functions.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
Callable[..., AsyncContextManager]: The wrapped build function.
|
|
120
160
|
"""
|
|
121
161
|
|
|
122
162
|
# Define a base async context manager that simply calls the original build function.
|
|
123
163
|
@asynccontextmanager
|
|
124
|
-
async def base_fn(*args, **kwargs):
|
|
164
|
+
async def base_fn(*args, **kwargs) -> AsyncIterator[Any]:
|
|
165
|
+
"""Base async context manager that calls the original build function.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
*args: Positional arguments to pass to the original build function.
|
|
169
|
+
**kwargs: Keyword arguments to pass to the original build function.
|
|
170
|
+
|
|
171
|
+
Yields:
|
|
172
|
+
The result of the original build function.
|
|
173
|
+
"""
|
|
125
174
|
async with original_build_fn(*args, **kwargs) as w:
|
|
126
175
|
yield w
|
|
127
176
|
|
nat/runtime/runner.py
CHANGED
|
@@ -149,7 +149,8 @@ class Runner:
|
|
|
149
149
|
|
|
150
150
|
return result
|
|
151
151
|
except Exception as e:
|
|
152
|
-
|
|
152
|
+
err_msg = f": {e}" if str(e).strip() else "."
|
|
153
|
+
logger.error("Error running workflow%s", err_msg)
|
|
153
154
|
event_stream = self._context_state.event_stream.get()
|
|
154
155
|
if event_stream:
|
|
155
156
|
event_stream.on_complete()
|
nat/utils/type_converter.py
CHANGED
|
@@ -90,7 +90,7 @@ class TypeConverter:
|
|
|
90
90
|
decomposed = DecomposedType(to_type)
|
|
91
91
|
|
|
92
92
|
# 1) If data is already correct type, return it
|
|
93
|
-
if to_type is None or decomposed.is_instance(
|
|
93
|
+
if to_type is None or decomposed.is_instance(data):
|
|
94
94
|
return data
|
|
95
95
|
|
|
96
96
|
root = decomposed.root
|
|
@@ -198,16 +198,17 @@ class TypeConverter:
|
|
|
198
198
|
"""
|
|
199
199
|
visited = set()
|
|
200
200
|
final = self._try_indirect_conversion(data, to_type, visited)
|
|
201
|
+
src_type = type(data)
|
|
201
202
|
if final is not None:
|
|
202
203
|
# Warn once if found a chain
|
|
203
|
-
self._maybe_warn_indirect(
|
|
204
|
+
self._maybe_warn_indirect(src_type, to_type)
|
|
204
205
|
return final
|
|
205
206
|
|
|
206
207
|
# If no success, try parent's indirect
|
|
207
208
|
if self._parent is not None:
|
|
208
209
|
parent_final = self._parent._try_indirect_convert(data, to_type)
|
|
209
210
|
if parent_final is not None:
|
|
210
|
-
self._maybe_warn_indirect(
|
|
211
|
+
self._maybe_warn_indirect(src_type, to_type)
|
|
211
212
|
return parent_final
|
|
212
213
|
|
|
213
214
|
return None
|
nat/utils/type_utils.py
CHANGED
|
@@ -353,7 +353,7 @@ class DecomposedType:
|
|
|
353
353
|
True if the current type is an instance of the specified instance, False otherwise
|
|
354
354
|
"""
|
|
355
355
|
|
|
356
|
-
return isinstance(instance, self.root)
|
|
356
|
+
return isinstance(instance, self.get_base_type().root)
|
|
357
357
|
|
|
358
358
|
def get_pydantic_schema(self,
|
|
359
359
|
converters: list[collections.abc.Callable] | None = None) -> type[BaseModel] | type[None]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nvidia-nat
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.0a20250926
|
|
4
4
|
Summary: NVIDIA NeMo Agent toolkit
|
|
5
5
|
Author: NVIDIA Corporation
|
|
6
6
|
Maintainer: NVIDIA Corporation
|
|
@@ -215,7 +215,7 @@ Description-Content-Type: text/markdown
|
|
|
215
215
|
License-File: LICENSE-3rd-party.txt
|
|
216
216
|
License-File: LICENSE.md
|
|
217
217
|
Requires-Dist: aioboto3>=11.0.0
|
|
218
|
-
Requires-Dist: authlib~=1.
|
|
218
|
+
Requires-Dist: authlib~=1.5
|
|
219
219
|
Requires-Dist: click~=8.1
|
|
220
220
|
Requires-Dist: colorama~=0.4.6
|
|
221
221
|
Requires-Dist: datasets~=4.0
|
|
@@ -241,10 +241,12 @@ Requires-Dist: PyYAML~=6.0
|
|
|
241
241
|
Requires-Dist: ragas~=0.2.14
|
|
242
242
|
Requires-Dist: rich~=13.9
|
|
243
243
|
Requires-Dist: tabulate~=0.9
|
|
244
|
-
Requires-Dist: uvicorn[standard]~=0.
|
|
244
|
+
Requires-Dist: uvicorn[standard]~=0.34
|
|
245
245
|
Requires-Dist: wikipedia~=1.4
|
|
246
246
|
Provides-Extra: all
|
|
247
247
|
Requires-Dist: nvidia-nat-all; extra == "all"
|
|
248
|
+
Provides-Extra: adk
|
|
249
|
+
Requires-Dist: nvidia-nat-adk; extra == "adk"
|
|
248
250
|
Provides-Extra: agno
|
|
249
251
|
Requires-Dist: nvidia-nat-agno; extra == "agno"
|
|
250
252
|
Provides-Extra: crewai
|
|
@@ -287,6 +289,7 @@ Requires-Dist: nvidia-nat-weave; extra == "weave"
|
|
|
287
289
|
Provides-Extra: zep-cloud
|
|
288
290
|
Requires-Dist: nvidia-nat-zep-cloud; extra == "zep-cloud"
|
|
289
291
|
Provides-Extra: examples
|
|
292
|
+
Requires-Dist: nat_adk_demo; extra == "examples"
|
|
290
293
|
Requires-Dist: nat_agno_personal_finance; extra == "examples"
|
|
291
294
|
Requires-Dist: nat_alert_triage_agent; extra == "examples"
|
|
292
295
|
Requires-Dist: nat_automated_description_generation; extra == "examples"
|
|
@@ -320,6 +323,10 @@ Requires-Dist: aiosqlite~=0.21; extra == "async-endpoints"
|
|
|
320
323
|
Requires-Dist: dask==2023.6; extra == "async-endpoints"
|
|
321
324
|
Requires-Dist: distributed==2023.6; extra == "async-endpoints"
|
|
322
325
|
Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "async-endpoints"
|
|
326
|
+
Provides-Extra: litellm
|
|
327
|
+
Requires-Dist: litellm==1.74.9; extra == "litellm"
|
|
328
|
+
Provides-Extra: openai
|
|
329
|
+
Requires-Dist: openai~=1.106; extra == "openai"
|
|
323
330
|
Dynamic: license-file
|
|
324
331
|
|
|
325
332
|
<!--
|
|
@@ -7,19 +7,19 @@ nat/agent/prompt_optimizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
7
7
|
nat/agent/prompt_optimizer/prompt.py,sha256=2I1cGZH73Q1pwxA_V-9b1sFCdQ1PLFxliaRtrIkVVVU,3042
|
|
8
8
|
nat/agent/prompt_optimizer/register.py,sha256=qV9Qkd4XDfwVYSzZOyI9RlRzK26jukaB51RriYgWd6k,6790
|
|
9
9
|
nat/agent/react_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
nat/agent/react_agent/agent.py,sha256=
|
|
10
|
+
nat/agent/react_agent/agent.py,sha256=sWrg9WrglTKQQyG3EcjNm2JTEchCPEo9li-Po7TJKss,21294
|
|
11
11
|
nat/agent/react_agent/output_parser.py,sha256=m7K6wRwtckBBpAHqOf3BZ9mqZLwrP13Kxz5fvNxbyZE,4219
|
|
12
12
|
nat/agent/react_agent/prompt.py,sha256=N47JJrT6xwYQCv1jedHhlul2AE7EfKsSYfAbgJwWRew,1758
|
|
13
|
-
nat/agent/react_agent/register.py,sha256=
|
|
13
|
+
nat/agent/react_agent/register.py,sha256=b97dfNtA0I3bNBOGdr9_akQ89UDwPHPPb7LqpsZNaWI,8815
|
|
14
14
|
nat/agent/reasoning_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
nat/agent/reasoning_agent/reasoning_agent.py,sha256=k_0wEDqACQn1Rn1MAKxoXyqOKsthHCQ1gt990YYUqHU,9575
|
|
16
16
|
nat/agent/rewoo_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
nat/agent/rewoo_agent/agent.py,sha256=ogTtUsNqbAjEprBKp2ZEoYfuHvgxnjV7NgygvSgMz7M,19264
|
|
18
18
|
nat/agent/rewoo_agent/prompt.py,sha256=nFMav3Zl_vmKPLzAIhbQHlldWnurPJb1GlwnekUuxDs,3720
|
|
19
|
-
nat/agent/rewoo_agent/register.py,sha256=
|
|
19
|
+
nat/agent/rewoo_agent/register.py,sha256=668zAag6eqajX_PIfh6c-0I0UQN5D-lRiz_mNKHXXjM,8954
|
|
20
20
|
nat/agent/tool_calling_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
nat/agent/tool_calling_agent/agent.py,sha256=4SIp29I56oznPRQu7B3HCoX53Ri3_o3BRRYNJjeBkF8,11006
|
|
22
|
-
nat/agent/tool_calling_agent/register.py,sha256=
|
|
22
|
+
nat/agent/tool_calling_agent/register.py,sha256=ijiRfgDVtt2p7_q1YbIQZmUVV8-jf3yT18HwtKyReUI,6822
|
|
23
23
|
nat/authentication/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
24
24
|
nat/authentication/interfaces.py,sha256=FAYM-QXVUn3a_8bmAZ7kP-lmN_BrLW8mo6krZJ3e0ME,3314
|
|
25
25
|
nat/authentication/register.py,sha256=lFhswYUk9iZ53mq33fClR9UfjJPdjGIivGGNHQeWiYo,915
|
|
@@ -41,14 +41,14 @@ nat/authentication/oauth2/oauth2_resource_server_config.py,sha256=ltcNp8Dwb2Q4tl
|
|
|
41
41
|
nat/authentication/oauth2/register.py,sha256=7rXhf-ilgSS_bUJsd9pOOCotL1FM8dKUt3ke1TllKkQ,1228
|
|
42
42
|
nat/builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
nat/builder/builder.py,sha256=vf5Vv5kq0gJ8D5bWw0bA64pDaszUWL19QHDiLuSP-Fs,11610
|
|
44
|
-
nat/builder/component_utils.py,sha256
|
|
44
|
+
nat/builder/component_utils.py,sha256=-5vEWLwj9ch-1B9vbkBjCIkXB9SL8Tj9yl6zFwhV6wU,13832
|
|
45
45
|
nat/builder/context.py,sha256=6mpk7H_gZ5_gVOKbWp8BrToqJraP1GEh9-uKX4vRrpA,12462
|
|
46
46
|
nat/builder/embedder.py,sha256=NPkOEcxt_-wc53QRijCQQDLretRUYHRYaKoYmarmrBk,965
|
|
47
47
|
nat/builder/eval_builder.py,sha256=I-ScvupmorClYoVBIs_PhSsB7Xf9e2nGWe0rCZp3txo,6857
|
|
48
48
|
nat/builder/evaluator.py,sha256=xWHMND2vcAUkdFP7FU3jnVki1rUHeTa0-9saFh2hWKs,1162
|
|
49
|
-
nat/builder/framework_enum.py,sha256=
|
|
49
|
+
nat/builder/framework_enum.py,sha256=n7IaTQBxhFozIQqRMcX9kXntw28JhFzCj82jJ0C5tNU,901
|
|
50
50
|
nat/builder/front_end.py,sha256=mHooS1M7mVo1swSgbYoqbzQENXkuG7_Es9q4gFiuL8E,2175
|
|
51
|
-
nat/builder/function.py,sha256=
|
|
51
|
+
nat/builder/function.py,sha256=RrfKSCt9WunPhwn5fk8X7wuvb9A21iO8T-IySHUi3KM,27763
|
|
52
52
|
nat/builder/function_base.py,sha256=0Eg8RtjWhEU3Yme0CVxcRutobA0Qo8-YHZLI6L2qAgM,13116
|
|
53
53
|
nat/builder/function_info.py,sha256=7Rmrn-gOFrT2TIJklJwA_O-ycx_oimwZ0-qMYpbuZrU,25161
|
|
54
54
|
nat/builder/intermediate_step_manager.py,sha256=iOuMLWTaES0J0XzaLxhTUqFvuoCAChJu3V69T43K0k0,7599
|
|
@@ -234,7 +234,7 @@ nat/front_ends/register.py,sha256=_C6AFpsQ8hUXavKHaBMy0g137fOcLfEjyU0EAuYqtao,85
|
|
|
234
234
|
nat/front_ends/console/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
235
235
|
nat/front_ends/console/authentication_flow_handler.py,sha256=Q1A7dv-pUlzsGZ8NXu8r-aGCqRiFqadPPBOw2TmyUNk,9566
|
|
236
236
|
nat/front_ends/console/console_front_end_config.py,sha256=wkMXk-RCdlEj3303kB1gh47UKJnubX2R-vzBzhedpS4,1318
|
|
237
|
-
nat/front_ends/console/console_front_end_plugin.py,sha256=
|
|
237
|
+
nat/front_ends/console/console_front_end_plugin.py,sha256=euUxC794jhZgODNMfxriCkeHn9eluU1UwWYUnyDh-iU,4315
|
|
238
238
|
nat/front_ends/console/register.py,sha256=2Kf6Mthx6jzWzU8YdhYIR1iABmZDvs1UXM_20npXWXs,1153
|
|
239
239
|
nat/front_ends/cron/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
240
240
|
nat/front_ends/fastapi/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
@@ -265,13 +265,14 @@ nat/front_ends/mcp/mcp_front_end_plugin_worker.py,sha256=jMclC0qEd910oTGCqd1kQ8W
|
|
|
265
265
|
nat/front_ends/mcp/register.py,sha256=3aJtgG5VaiqujoeU1-Eq7Hl5pWslIlIwGFU2ASLTXgM,1173
|
|
266
266
|
nat/front_ends/mcp/tool_converter.py,sha256=J0GS85qs2rVO2ZyGfxQcbtlWevoMJCEiEfa83PK10Ew,11548
|
|
267
267
|
nat/front_ends/simple_base/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
268
|
-
nat/front_ends/simple_base/simple_front_end_plugin_base.py,sha256=
|
|
268
|
+
nat/front_ends/simple_base/simple_front_end_plugin_base.py,sha256=py_yA9XAw-yHfK5cQJLM8ElnubEEM2ac8M0bvz-ScWs,1801
|
|
269
269
|
nat/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
270
270
|
nat/llm/aws_bedrock_llm.py,sha256=-P6OltFz8CPHmKmgUipFaIpROLGdnnRmd-q5BfjY7lM,3219
|
|
271
271
|
nat/llm/azure_openai_llm.py,sha256=30JWbNyscHhuRjFdWF2yLAEcKurY0q2BSMVFTdtSv9g,2649
|
|
272
|
+
nat/llm/litellm_llm.py,sha256=3XtAKdI4lmbbuiEGKSJob0mqAp8RvYRpxK6t0GQk0UE,2770
|
|
272
273
|
nat/llm/nim_llm.py,sha256=9sU3FUOedx5jY3He3qiN0T-AC48F5maIpz87NxP7Q0Q,2696
|
|
273
274
|
nat/llm/openai_llm.py,sha256=AMf8Xxzo3kYVi7XfyqatuU1-CH0-8QGmshDbSHHREXY,2487
|
|
274
|
-
nat/llm/register.py,sha256=
|
|
275
|
+
nat/llm/register.py,sha256=7xDYdK4w4opAwIjzDM5x7moJXT3QeEGaGGc_nDfY0i4,1090
|
|
275
276
|
nat/llm/utils/__init__.py,sha256=GUJrgGtpvyMUCjUBvR3faAdv-tZzbU9W-izgx9aMEQg,680
|
|
276
277
|
nat/llm/utils/env_config_value.py,sha256=kBVsv0pEokIAfDQx5omR7_FevFv_5fTPswcbnvhVT2c,3548
|
|
277
278
|
nat/llm/utils/error.py,sha256=gFFDG_v_3hBZVWpcD7HWkno-NBHDjXae7qDGnfiCNwA,820
|
|
@@ -342,7 +343,7 @@ nat/profiler/callbacks/llama_index_callback_handler.py,sha256=xzYve07uMlSTDjj929
|
|
|
342
343
|
nat/profiler/callbacks/semantic_kernel_callback_handler.py,sha256=BknzhQNB-MDMhR4QC9JScCp-zXq7KZ33SFb7X0MiTaI,11087
|
|
343
344
|
nat/profiler/callbacks/token_usage_base_model.py,sha256=X0b_AbBgVQAAbgbDMim-3S3XdQ7PaPs9qMUACvMAe5o,1104
|
|
344
345
|
nat/profiler/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
345
|
-
nat/profiler/decorators/framework_wrapper.py,sha256=
|
|
346
|
+
nat/profiler/decorators/framework_wrapper.py,sha256=lKX-nMkwKc4Pcb3PiA_w6f0Zfa_aC8BQsDB1pWwJTjI,7680
|
|
346
347
|
nat/profiler/decorators/function_tracking.py,sha256=ro4KdkoS9Y2cF36wxbY-XCQHGpL6o-JNU0MC0uP4jFg,16769
|
|
347
348
|
nat/profiler/forecasting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
348
349
|
nat/profiler/forecasting/config.py,sha256=5BhMa8csuPCjEnTaNQjo_2IoO7esh1ch02MoSWkvwPw,791
|
|
@@ -405,7 +406,7 @@ nat/retriever/nemo_retriever/register.py,sha256=3XdrvEJzX2Zc8wpdm__4YYlEWBW-FK3t
|
|
|
405
406
|
nat/retriever/nemo_retriever/retriever.py,sha256=gi3_qJFqE-iqRh3of_cmJg-SwzaQ3z24zA9LwY_MSLY,6930
|
|
406
407
|
nat/runtime/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
|
|
407
408
|
nat/runtime/loader.py,sha256=obUdAgZVYCPGC0R8u3wcoKFJzzSPQgJvrbU4OWygtog,7953
|
|
408
|
-
nat/runtime/runner.py,sha256=
|
|
409
|
+
nat/runtime/runner.py,sha256=Kzm5GRrGUFMQ_fbLOCJumYc4R-JXdTm5tUw2yMMDJpE,6450
|
|
409
410
|
nat/runtime/session.py,sha256=U3UHQpdCBkCiJetsWdq9r6wUEVDBa2gv1VQedE64kY8,6959
|
|
410
411
|
nat/runtime/user_metadata.py,sha256=ce37NRYJWnMOWk6A7VAQ1GQztjMmkhMOq-uYf2gNCwo,3692
|
|
411
412
|
nat/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -446,8 +447,8 @@ nat/utils/metadata_utils.py,sha256=BSsiB6jIWd8oEuEynJi55qCG762UuTYFaiUH0OT9HdY,2
|
|
|
446
447
|
nat/utils/optional_imports.py,sha256=jQSVBc2fBSRw-2d6r8cEwvh5-di2EUUPakuuo9QbbwA,4039
|
|
447
448
|
nat/utils/producer_consumer_queue.py,sha256=AcSYkAMBxLx06A5Xdy960PP3AJ7YaSPGJ7rbN_hJsjI,6599
|
|
448
449
|
nat/utils/string_utils.py,sha256=71HuIzGx7rF8ocTmeoUBpnCi1Qf1yynYlNLLIKP4BVs,1415
|
|
449
|
-
nat/utils/type_converter.py,sha256
|
|
450
|
-
nat/utils/type_utils.py,sha256=
|
|
450
|
+
nat/utils/type_converter.py,sha256=-2PwMsEm7tlmrniZzO7x2DnRxhOEeJGVAIJc3c5n2g4,10655
|
|
451
|
+
nat/utils/type_utils.py,sha256=xdD-_jmqPewBooqs_N0ZVGO_xsKv4ZOgISWi3EcFZXo,14835
|
|
451
452
|
nat/utils/url_utils.py,sha256=UzDP_xaS6brWTu7vAws0B4jZyrITIK9Si3U6pZBZqDE,1028
|
|
452
453
|
nat/utils/data_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
453
454
|
nat/utils/data_models/schema_validator.py,sha256=pmGr5KuRX5tbVsymG1NxaSnGrKIfzxXEJNd58wIQ9SM,1532
|
|
@@ -468,10 +469,10 @@ nat/utils/reactive/base/observer_base.py,sha256=6BiQfx26EMumotJ3KoVcdmFBYR_fnAss
|
|
|
468
469
|
nat/utils/reactive/base/subject_base.py,sha256=UQOxlkZTIeeyYmG5qLtDpNf_63Y7p-doEeUA08_R8ME,2521
|
|
469
470
|
nat/utils/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
470
471
|
nat/utils/settings/global_settings.py,sha256=9JaO6pxKT_Pjw6rxJRsRlFCXdVKCl_xUKU2QHZQWWNM,7294
|
|
471
|
-
nvidia_nat-1.3.
|
|
472
|
-
nvidia_nat-1.3.
|
|
473
|
-
nvidia_nat-1.3.
|
|
474
|
-
nvidia_nat-1.3.
|
|
475
|
-
nvidia_nat-1.3.
|
|
476
|
-
nvidia_nat-1.3.
|
|
477
|
-
nvidia_nat-1.3.
|
|
472
|
+
nvidia_nat-1.3.0a20250926.dist-info/licenses/LICENSE-3rd-party.txt,sha256=fOk5jMmCX9YoKWyYzTtfgl-SUy477audFC5hNY4oP7Q,284609
|
|
473
|
+
nvidia_nat-1.3.0a20250926.dist-info/licenses/LICENSE.md,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
474
|
+
nvidia_nat-1.3.0a20250926.dist-info/METADATA,sha256=AsBqos4EXJEwd-G-QSIF4iXItfZ7ULCpgwh0QCVd1lQ,22862
|
|
475
|
+
nvidia_nat-1.3.0a20250926.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
476
|
+
nvidia_nat-1.3.0a20250926.dist-info/entry_points.txt,sha256=4jCqjyETMpyoWbCBf4GalZU8I_wbstpzwQNezdAVbbo,698
|
|
477
|
+
nvidia_nat-1.3.0a20250926.dist-info/top_level.txt,sha256=lgJWLkigiVZuZ_O1nxVnD_ziYBwgpE2OStdaCduMEGc,8
|
|
478
|
+
nvidia_nat-1.3.0a20250926.dist-info/RECORD,,
|
|
File without changes
|
{nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{nvidia_nat-1.3.0a20250924.dist-info → nvidia_nat-1.3.0a20250926.dist-info}/licenses/LICENSE.md
RENAMED
|
File without changes
|
|
File without changes
|