nvidia-nat 1.1.0a20251020__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 (480) hide show
  1. aiq/__init__.py +66 -0
  2. nat/agent/__init__.py +0 -0
  3. nat/agent/base.py +265 -0
  4. nat/agent/dual_node.py +72 -0
  5. nat/agent/prompt_optimizer/__init__.py +0 -0
  6. nat/agent/prompt_optimizer/prompt.py +68 -0
  7. nat/agent/prompt_optimizer/register.py +149 -0
  8. nat/agent/react_agent/__init__.py +0 -0
  9. nat/agent/react_agent/agent.py +394 -0
  10. nat/agent/react_agent/output_parser.py +104 -0
  11. nat/agent/react_agent/prompt.py +44 -0
  12. nat/agent/react_agent/register.py +168 -0
  13. nat/agent/reasoning_agent/__init__.py +0 -0
  14. nat/agent/reasoning_agent/reasoning_agent.py +227 -0
  15. nat/agent/register.py +23 -0
  16. nat/agent/rewoo_agent/__init__.py +0 -0
  17. nat/agent/rewoo_agent/agent.py +593 -0
  18. nat/agent/rewoo_agent/prompt.py +107 -0
  19. nat/agent/rewoo_agent/register.py +175 -0
  20. nat/agent/tool_calling_agent/__init__.py +0 -0
  21. nat/agent/tool_calling_agent/agent.py +246 -0
  22. nat/agent/tool_calling_agent/register.py +129 -0
  23. nat/authentication/__init__.py +14 -0
  24. nat/authentication/api_key/__init__.py +14 -0
  25. nat/authentication/api_key/api_key_auth_provider.py +96 -0
  26. nat/authentication/api_key/api_key_auth_provider_config.py +124 -0
  27. nat/authentication/api_key/register.py +26 -0
  28. nat/authentication/credential_validator/__init__.py +14 -0
  29. nat/authentication/credential_validator/bearer_token_validator.py +557 -0
  30. nat/authentication/exceptions/__init__.py +14 -0
  31. nat/authentication/exceptions/api_key_exceptions.py +38 -0
  32. nat/authentication/http_basic_auth/__init__.py +0 -0
  33. nat/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
  34. nat/authentication/http_basic_auth/register.py +30 -0
  35. nat/authentication/interfaces.py +96 -0
  36. nat/authentication/oauth2/__init__.py +14 -0
  37. nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +140 -0
  38. nat/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
  39. nat/authentication/oauth2/oauth2_resource_server_config.py +124 -0
  40. nat/authentication/oauth2/register.py +25 -0
  41. nat/authentication/register.py +20 -0
  42. nat/builder/__init__.py +0 -0
  43. nat/builder/builder.py +317 -0
  44. nat/builder/component_utils.py +320 -0
  45. nat/builder/context.py +321 -0
  46. nat/builder/embedder.py +24 -0
  47. nat/builder/eval_builder.py +166 -0
  48. nat/builder/evaluator.py +29 -0
  49. nat/builder/framework_enum.py +25 -0
  50. nat/builder/front_end.py +73 -0
  51. nat/builder/function.py +714 -0
  52. nat/builder/function_base.py +380 -0
  53. nat/builder/function_info.py +625 -0
  54. nat/builder/intermediate_step_manager.py +206 -0
  55. nat/builder/llm.py +25 -0
  56. nat/builder/retriever.py +25 -0
  57. nat/builder/user_interaction_manager.py +78 -0
  58. nat/builder/workflow.py +160 -0
  59. nat/builder/workflow_builder.py +1365 -0
  60. nat/cli/__init__.py +14 -0
  61. nat/cli/cli_utils/__init__.py +0 -0
  62. nat/cli/cli_utils/config_override.py +231 -0
  63. nat/cli/cli_utils/validation.py +37 -0
  64. nat/cli/commands/__init__.py +0 -0
  65. nat/cli/commands/configure/__init__.py +0 -0
  66. nat/cli/commands/configure/channel/__init__.py +0 -0
  67. nat/cli/commands/configure/channel/add.py +28 -0
  68. nat/cli/commands/configure/channel/channel.py +34 -0
  69. nat/cli/commands/configure/channel/remove.py +30 -0
  70. nat/cli/commands/configure/channel/update.py +30 -0
  71. nat/cli/commands/configure/configure.py +33 -0
  72. nat/cli/commands/evaluate.py +139 -0
  73. nat/cli/commands/info/__init__.py +14 -0
  74. nat/cli/commands/info/info.py +47 -0
  75. nat/cli/commands/info/list_channels.py +32 -0
  76. nat/cli/commands/info/list_components.py +128 -0
  77. nat/cli/commands/mcp/__init__.py +14 -0
  78. nat/cli/commands/mcp/mcp.py +986 -0
  79. nat/cli/commands/object_store/__init__.py +14 -0
  80. nat/cli/commands/object_store/object_store.py +227 -0
  81. nat/cli/commands/optimize.py +90 -0
  82. nat/cli/commands/registry/__init__.py +14 -0
  83. nat/cli/commands/registry/publish.py +88 -0
  84. nat/cli/commands/registry/pull.py +118 -0
  85. nat/cli/commands/registry/registry.py +36 -0
  86. nat/cli/commands/registry/remove.py +108 -0
  87. nat/cli/commands/registry/search.py +153 -0
  88. nat/cli/commands/sizing/__init__.py +14 -0
  89. nat/cli/commands/sizing/calc.py +297 -0
  90. nat/cli/commands/sizing/sizing.py +27 -0
  91. nat/cli/commands/start.py +257 -0
  92. nat/cli/commands/uninstall.py +81 -0
  93. nat/cli/commands/validate.py +47 -0
  94. nat/cli/commands/workflow/__init__.py +14 -0
  95. nat/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  96. nat/cli/commands/workflow/templates/config.yml.j2 +17 -0
  97. nat/cli/commands/workflow/templates/pyproject.toml.j2 +25 -0
  98. nat/cli/commands/workflow/templates/register.py.j2 +4 -0
  99. nat/cli/commands/workflow/templates/workflow.py.j2 +50 -0
  100. nat/cli/commands/workflow/workflow.py +37 -0
  101. nat/cli/commands/workflow/workflow_commands.py +403 -0
  102. nat/cli/entrypoint.py +141 -0
  103. nat/cli/main.py +60 -0
  104. nat/cli/register_workflow.py +522 -0
  105. nat/cli/type_registry.py +1069 -0
  106. nat/control_flow/__init__.py +0 -0
  107. nat/control_flow/register.py +20 -0
  108. nat/control_flow/router_agent/__init__.py +0 -0
  109. nat/control_flow/router_agent/agent.py +329 -0
  110. nat/control_flow/router_agent/prompt.py +48 -0
  111. nat/control_flow/router_agent/register.py +91 -0
  112. nat/control_flow/sequential_executor.py +166 -0
  113. nat/data_models/__init__.py +14 -0
  114. nat/data_models/agent.py +34 -0
  115. nat/data_models/api_server.py +843 -0
  116. nat/data_models/authentication.py +245 -0
  117. nat/data_models/common.py +171 -0
  118. nat/data_models/component.py +60 -0
  119. nat/data_models/component_ref.py +179 -0
  120. nat/data_models/config.py +434 -0
  121. nat/data_models/dataset_handler.py +169 -0
  122. nat/data_models/discovery_metadata.py +305 -0
  123. nat/data_models/embedder.py +27 -0
  124. nat/data_models/evaluate.py +130 -0
  125. nat/data_models/evaluator.py +26 -0
  126. nat/data_models/front_end.py +26 -0
  127. nat/data_models/function.py +64 -0
  128. nat/data_models/function_dependencies.py +80 -0
  129. nat/data_models/gated_field_mixin.py +242 -0
  130. nat/data_models/interactive.py +246 -0
  131. nat/data_models/intermediate_step.py +302 -0
  132. nat/data_models/invocation_node.py +38 -0
  133. nat/data_models/llm.py +27 -0
  134. nat/data_models/logging.py +26 -0
  135. nat/data_models/memory.py +27 -0
  136. nat/data_models/object_store.py +44 -0
  137. nat/data_models/optimizable.py +119 -0
  138. nat/data_models/optimizer.py +149 -0
  139. nat/data_models/profiler.py +54 -0
  140. nat/data_models/registry_handler.py +26 -0
  141. nat/data_models/retriever.py +30 -0
  142. nat/data_models/retry_mixin.py +35 -0
  143. nat/data_models/span.py +228 -0
  144. nat/data_models/step_adaptor.py +64 -0
  145. nat/data_models/streaming.py +33 -0
  146. nat/data_models/swe_bench_model.py +54 -0
  147. nat/data_models/telemetry_exporter.py +26 -0
  148. nat/data_models/temperature_mixin.py +44 -0
  149. nat/data_models/thinking_mixin.py +86 -0
  150. nat/data_models/top_p_mixin.py +44 -0
  151. nat/data_models/ttc_strategy.py +30 -0
  152. nat/embedder/__init__.py +0 -0
  153. nat/embedder/azure_openai_embedder.py +46 -0
  154. nat/embedder/nim_embedder.py +59 -0
  155. nat/embedder/openai_embedder.py +42 -0
  156. nat/embedder/register.py +22 -0
  157. nat/eval/__init__.py +14 -0
  158. nat/eval/config.py +62 -0
  159. nat/eval/dataset_handler/__init__.py +0 -0
  160. nat/eval/dataset_handler/dataset_downloader.py +106 -0
  161. nat/eval/dataset_handler/dataset_filter.py +52 -0
  162. nat/eval/dataset_handler/dataset_handler.py +431 -0
  163. nat/eval/evaluate.py +565 -0
  164. nat/eval/evaluator/__init__.py +14 -0
  165. nat/eval/evaluator/base_evaluator.py +77 -0
  166. nat/eval/evaluator/evaluator_model.py +58 -0
  167. nat/eval/intermediate_step_adapter.py +99 -0
  168. nat/eval/rag_evaluator/__init__.py +0 -0
  169. nat/eval/rag_evaluator/evaluate.py +178 -0
  170. nat/eval/rag_evaluator/register.py +143 -0
  171. nat/eval/register.py +26 -0
  172. nat/eval/remote_workflow.py +133 -0
  173. nat/eval/runners/__init__.py +14 -0
  174. nat/eval/runners/config.py +39 -0
  175. nat/eval/runners/multi_eval_runner.py +54 -0
  176. nat/eval/runtime_evaluator/__init__.py +14 -0
  177. nat/eval/runtime_evaluator/evaluate.py +123 -0
  178. nat/eval/runtime_evaluator/register.py +100 -0
  179. nat/eval/runtime_event_subscriber.py +52 -0
  180. nat/eval/swe_bench_evaluator/__init__.py +0 -0
  181. nat/eval/swe_bench_evaluator/evaluate.py +215 -0
  182. nat/eval/swe_bench_evaluator/register.py +36 -0
  183. nat/eval/trajectory_evaluator/__init__.py +0 -0
  184. nat/eval/trajectory_evaluator/evaluate.py +75 -0
  185. nat/eval/trajectory_evaluator/register.py +40 -0
  186. nat/eval/tunable_rag_evaluator/__init__.py +0 -0
  187. nat/eval/tunable_rag_evaluator/evaluate.py +242 -0
  188. nat/eval/tunable_rag_evaluator/register.py +52 -0
  189. nat/eval/usage_stats.py +41 -0
  190. nat/eval/utils/__init__.py +0 -0
  191. nat/eval/utils/eval_trace_ctx.py +89 -0
  192. nat/eval/utils/output_uploader.py +140 -0
  193. nat/eval/utils/tqdm_position_registry.py +40 -0
  194. nat/eval/utils/weave_eval.py +193 -0
  195. nat/experimental/__init__.py +0 -0
  196. nat/experimental/decorators/__init__.py +0 -0
  197. nat/experimental/decorators/experimental_warning_decorator.py +154 -0
  198. nat/experimental/test_time_compute/__init__.py +0 -0
  199. nat/experimental/test_time_compute/editing/__init__.py +0 -0
  200. nat/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +147 -0
  201. nat/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +204 -0
  202. nat/experimental/test_time_compute/editing/motivation_aware_summarization.py +107 -0
  203. nat/experimental/test_time_compute/functions/__init__.py +0 -0
  204. nat/experimental/test_time_compute/functions/execute_score_select_function.py +105 -0
  205. nat/experimental/test_time_compute/functions/plan_select_execute_function.py +228 -0
  206. nat/experimental/test_time_compute/functions/ttc_tool_orchestration_function.py +205 -0
  207. nat/experimental/test_time_compute/functions/ttc_tool_wrapper_function.py +146 -0
  208. nat/experimental/test_time_compute/models/__init__.py +0 -0
  209. nat/experimental/test_time_compute/models/editor_config.py +132 -0
  210. nat/experimental/test_time_compute/models/scoring_config.py +112 -0
  211. nat/experimental/test_time_compute/models/search_config.py +120 -0
  212. nat/experimental/test_time_compute/models/selection_config.py +154 -0
  213. nat/experimental/test_time_compute/models/stage_enums.py +43 -0
  214. nat/experimental/test_time_compute/models/strategy_base.py +67 -0
  215. nat/experimental/test_time_compute/models/tool_use_config.py +41 -0
  216. nat/experimental/test_time_compute/models/ttc_item.py +48 -0
  217. nat/experimental/test_time_compute/register.py +35 -0
  218. nat/experimental/test_time_compute/scoring/__init__.py +0 -0
  219. nat/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +168 -0
  220. nat/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +168 -0
  221. nat/experimental/test_time_compute/scoring/motivation_aware_scorer.py +111 -0
  222. nat/experimental/test_time_compute/search/__init__.py +0 -0
  223. nat/experimental/test_time_compute/search/multi_llm_planner.py +128 -0
  224. nat/experimental/test_time_compute/search/multi_query_retrieval_search.py +122 -0
  225. nat/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +128 -0
  226. nat/experimental/test_time_compute/selection/__init__.py +0 -0
  227. nat/experimental/test_time_compute/selection/best_of_n_selector.py +63 -0
  228. nat/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +131 -0
  229. nat/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +157 -0
  230. nat/experimental/test_time_compute/selection/llm_based_plan_selector.py +128 -0
  231. nat/experimental/test_time_compute/selection/threshold_selector.py +58 -0
  232. nat/front_ends/__init__.py +14 -0
  233. nat/front_ends/console/__init__.py +14 -0
  234. nat/front_ends/console/authentication_flow_handler.py +285 -0
  235. nat/front_ends/console/console_front_end_config.py +32 -0
  236. nat/front_ends/console/console_front_end_plugin.py +108 -0
  237. nat/front_ends/console/register.py +25 -0
  238. nat/front_ends/cron/__init__.py +14 -0
  239. nat/front_ends/fastapi/__init__.py +14 -0
  240. nat/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  241. nat/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +27 -0
  242. nat/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +142 -0
  243. nat/front_ends/fastapi/dask_client_mixin.py +65 -0
  244. nat/front_ends/fastapi/fastapi_front_end_config.py +272 -0
  245. nat/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
  246. nat/front_ends/fastapi/fastapi_front_end_plugin.py +247 -0
  247. nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +1257 -0
  248. nat/front_ends/fastapi/html_snippets/__init__.py +14 -0
  249. nat/front_ends/fastapi/html_snippets/auth_code_grant_success.py +35 -0
  250. nat/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
  251. nat/front_ends/fastapi/job_store.py +602 -0
  252. nat/front_ends/fastapi/main.py +64 -0
  253. nat/front_ends/fastapi/message_handler.py +344 -0
  254. nat/front_ends/fastapi/message_validator.py +351 -0
  255. nat/front_ends/fastapi/register.py +25 -0
  256. nat/front_ends/fastapi/response_helpers.py +195 -0
  257. nat/front_ends/fastapi/step_adaptor.py +319 -0
  258. nat/front_ends/fastapi/utils.py +57 -0
  259. nat/front_ends/mcp/__init__.py +14 -0
  260. nat/front_ends/mcp/introspection_token_verifier.py +73 -0
  261. nat/front_ends/mcp/mcp_front_end_config.py +90 -0
  262. nat/front_ends/mcp/mcp_front_end_plugin.py +113 -0
  263. nat/front_ends/mcp/mcp_front_end_plugin_worker.py +268 -0
  264. nat/front_ends/mcp/memory_profiler.py +320 -0
  265. nat/front_ends/mcp/register.py +27 -0
  266. nat/front_ends/mcp/tool_converter.py +290 -0
  267. nat/front_ends/register.py +21 -0
  268. nat/front_ends/simple_base/__init__.py +14 -0
  269. nat/front_ends/simple_base/simple_front_end_plugin_base.py +56 -0
  270. nat/llm/__init__.py +0 -0
  271. nat/llm/aws_bedrock_llm.py +69 -0
  272. nat/llm/azure_openai_llm.py +57 -0
  273. nat/llm/litellm_llm.py +69 -0
  274. nat/llm/nim_llm.py +58 -0
  275. nat/llm/openai_llm.py +54 -0
  276. nat/llm/register.py +27 -0
  277. nat/llm/utils/__init__.py +14 -0
  278. nat/llm/utils/env_config_value.py +93 -0
  279. nat/llm/utils/error.py +17 -0
  280. nat/llm/utils/thinking.py +215 -0
  281. nat/memory/__init__.py +20 -0
  282. nat/memory/interfaces.py +183 -0
  283. nat/memory/models.py +112 -0
  284. nat/meta/pypi.md +58 -0
  285. nat/object_store/__init__.py +20 -0
  286. nat/object_store/in_memory_object_store.py +76 -0
  287. nat/object_store/interfaces.py +84 -0
  288. nat/object_store/models.py +38 -0
  289. nat/object_store/register.py +19 -0
  290. nat/observability/__init__.py +14 -0
  291. nat/observability/exporter/__init__.py +14 -0
  292. nat/observability/exporter/base_exporter.py +449 -0
  293. nat/observability/exporter/exporter.py +78 -0
  294. nat/observability/exporter/file_exporter.py +33 -0
  295. nat/observability/exporter/processing_exporter.py +550 -0
  296. nat/observability/exporter/raw_exporter.py +52 -0
  297. nat/observability/exporter/span_exporter.py +308 -0
  298. nat/observability/exporter_manager.py +335 -0
  299. nat/observability/mixin/__init__.py +14 -0
  300. nat/observability/mixin/batch_config_mixin.py +26 -0
  301. nat/observability/mixin/collector_config_mixin.py +23 -0
  302. nat/observability/mixin/file_mixin.py +288 -0
  303. nat/observability/mixin/file_mode.py +23 -0
  304. nat/observability/mixin/redaction_config_mixin.py +42 -0
  305. nat/observability/mixin/resource_conflict_mixin.py +134 -0
  306. nat/observability/mixin/serialize_mixin.py +61 -0
  307. nat/observability/mixin/tagging_config_mixin.py +62 -0
  308. nat/observability/mixin/type_introspection_mixin.py +496 -0
  309. nat/observability/processor/__init__.py +14 -0
  310. nat/observability/processor/batching_processor.py +308 -0
  311. nat/observability/processor/callback_processor.py +42 -0
  312. nat/observability/processor/falsy_batch_filter_processor.py +55 -0
  313. nat/observability/processor/intermediate_step_serializer.py +28 -0
  314. nat/observability/processor/processor.py +74 -0
  315. nat/observability/processor/processor_factory.py +70 -0
  316. nat/observability/processor/redaction/__init__.py +24 -0
  317. nat/observability/processor/redaction/contextual_redaction_processor.py +125 -0
  318. nat/observability/processor/redaction/contextual_span_redaction_processor.py +66 -0
  319. nat/observability/processor/redaction/redaction_processor.py +177 -0
  320. nat/observability/processor/redaction/span_header_redaction_processor.py +92 -0
  321. nat/observability/processor/span_tagging_processor.py +68 -0
  322. nat/observability/register.py +114 -0
  323. nat/observability/utils/__init__.py +14 -0
  324. nat/observability/utils/dict_utils.py +236 -0
  325. nat/observability/utils/time_utils.py +31 -0
  326. nat/plugins/.namespace +1 -0
  327. nat/profiler/__init__.py +0 -0
  328. nat/profiler/calc/__init__.py +14 -0
  329. nat/profiler/calc/calc_runner.py +626 -0
  330. nat/profiler/calc/calculations.py +288 -0
  331. nat/profiler/calc/data_models.py +188 -0
  332. nat/profiler/calc/plot.py +345 -0
  333. nat/profiler/callbacks/__init__.py +0 -0
  334. nat/profiler/callbacks/agno_callback_handler.py +295 -0
  335. nat/profiler/callbacks/base_callback_class.py +20 -0
  336. nat/profiler/callbacks/langchain_callback_handler.py +297 -0
  337. nat/profiler/callbacks/llama_index_callback_handler.py +205 -0
  338. nat/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
  339. nat/profiler/callbacks/token_usage_base_model.py +27 -0
  340. nat/profiler/data_frame_row.py +51 -0
  341. nat/profiler/data_models.py +24 -0
  342. nat/profiler/decorators/__init__.py +0 -0
  343. nat/profiler/decorators/framework_wrapper.py +180 -0
  344. nat/profiler/decorators/function_tracking.py +411 -0
  345. nat/profiler/forecasting/__init__.py +0 -0
  346. nat/profiler/forecasting/config.py +18 -0
  347. nat/profiler/forecasting/model_trainer.py +75 -0
  348. nat/profiler/forecasting/models/__init__.py +22 -0
  349. nat/profiler/forecasting/models/forecasting_base_model.py +42 -0
  350. nat/profiler/forecasting/models/linear_model.py +197 -0
  351. nat/profiler/forecasting/models/random_forest_regressor.py +269 -0
  352. nat/profiler/inference_metrics_model.py +28 -0
  353. nat/profiler/inference_optimization/__init__.py +0 -0
  354. nat/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  355. nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
  356. nat/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
  357. nat/profiler/inference_optimization/data_models.py +386 -0
  358. nat/profiler/inference_optimization/experimental/__init__.py +0 -0
  359. nat/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
  360. nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +404 -0
  361. nat/profiler/inference_optimization/llm_metrics.py +212 -0
  362. nat/profiler/inference_optimization/prompt_caching.py +163 -0
  363. nat/profiler/inference_optimization/token_uniqueness.py +107 -0
  364. nat/profiler/inference_optimization/workflow_runtimes.py +72 -0
  365. nat/profiler/intermediate_property_adapter.py +102 -0
  366. nat/profiler/parameter_optimization/__init__.py +0 -0
  367. nat/profiler/parameter_optimization/optimizable_utils.py +93 -0
  368. nat/profiler/parameter_optimization/optimizer_runtime.py +67 -0
  369. nat/profiler/parameter_optimization/parameter_optimizer.py +153 -0
  370. nat/profiler/parameter_optimization/parameter_selection.py +107 -0
  371. nat/profiler/parameter_optimization/pareto_visualizer.py +380 -0
  372. nat/profiler/parameter_optimization/prompt_optimizer.py +384 -0
  373. nat/profiler/parameter_optimization/update_helpers.py +66 -0
  374. nat/profiler/profile_runner.py +478 -0
  375. nat/profiler/utils.py +186 -0
  376. nat/registry_handlers/__init__.py +0 -0
  377. nat/registry_handlers/local/__init__.py +0 -0
  378. nat/registry_handlers/local/local_handler.py +176 -0
  379. nat/registry_handlers/local/register_local.py +37 -0
  380. nat/registry_handlers/metadata_factory.py +60 -0
  381. nat/registry_handlers/package_utils.py +570 -0
  382. nat/registry_handlers/pypi/__init__.py +0 -0
  383. nat/registry_handlers/pypi/pypi_handler.py +248 -0
  384. nat/registry_handlers/pypi/register_pypi.py +40 -0
  385. nat/registry_handlers/register.py +20 -0
  386. nat/registry_handlers/registry_handler_base.py +157 -0
  387. nat/registry_handlers/rest/__init__.py +0 -0
  388. nat/registry_handlers/rest/register_rest.py +56 -0
  389. nat/registry_handlers/rest/rest_handler.py +236 -0
  390. nat/registry_handlers/schemas/__init__.py +0 -0
  391. nat/registry_handlers/schemas/headers.py +42 -0
  392. nat/registry_handlers/schemas/package.py +68 -0
  393. nat/registry_handlers/schemas/publish.py +68 -0
  394. nat/registry_handlers/schemas/pull.py +82 -0
  395. nat/registry_handlers/schemas/remove.py +36 -0
  396. nat/registry_handlers/schemas/search.py +91 -0
  397. nat/registry_handlers/schemas/status.py +47 -0
  398. nat/retriever/__init__.py +0 -0
  399. nat/retriever/interface.py +41 -0
  400. nat/retriever/milvus/__init__.py +14 -0
  401. nat/retriever/milvus/register.py +81 -0
  402. nat/retriever/milvus/retriever.py +228 -0
  403. nat/retriever/models.py +77 -0
  404. nat/retriever/nemo_retriever/__init__.py +14 -0
  405. nat/retriever/nemo_retriever/register.py +60 -0
  406. nat/retriever/nemo_retriever/retriever.py +190 -0
  407. nat/retriever/register.py +21 -0
  408. nat/runtime/__init__.py +14 -0
  409. nat/runtime/loader.py +220 -0
  410. nat/runtime/runner.py +292 -0
  411. nat/runtime/session.py +223 -0
  412. nat/runtime/user_metadata.py +130 -0
  413. nat/settings/__init__.py +0 -0
  414. nat/settings/global_settings.py +329 -0
  415. nat/test/.namespace +1 -0
  416. nat/tool/__init__.py +0 -0
  417. nat/tool/chat_completion.py +77 -0
  418. nat/tool/code_execution/README.md +151 -0
  419. nat/tool/code_execution/__init__.py +0 -0
  420. nat/tool/code_execution/code_sandbox.py +267 -0
  421. nat/tool/code_execution/local_sandbox/.gitignore +1 -0
  422. nat/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
  423. nat/tool/code_execution/local_sandbox/__init__.py +13 -0
  424. nat/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
  425. nat/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
  426. nat/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
  427. nat/tool/code_execution/register.py +74 -0
  428. nat/tool/code_execution/test_code_execution_sandbox.py +414 -0
  429. nat/tool/code_execution/utils.py +100 -0
  430. nat/tool/datetime_tools.py +82 -0
  431. nat/tool/document_search.py +141 -0
  432. nat/tool/github_tools.py +450 -0
  433. nat/tool/memory_tools/__init__.py +0 -0
  434. nat/tool/memory_tools/add_memory_tool.py +79 -0
  435. nat/tool/memory_tools/delete_memory_tool.py +66 -0
  436. nat/tool/memory_tools/get_memory_tool.py +72 -0
  437. nat/tool/nvidia_rag.py +95 -0
  438. nat/tool/register.py +31 -0
  439. nat/tool/retriever.py +95 -0
  440. nat/tool/server_tools.py +66 -0
  441. nat/utils/__init__.py +0 -0
  442. nat/utils/callable_utils.py +70 -0
  443. nat/utils/data_models/__init__.py +0 -0
  444. nat/utils/data_models/schema_validator.py +58 -0
  445. nat/utils/debugging_utils.py +43 -0
  446. nat/utils/decorators.py +210 -0
  447. nat/utils/dump_distro_mapping.py +32 -0
  448. nat/utils/exception_handlers/__init__.py +0 -0
  449. nat/utils/exception_handlers/automatic_retries.py +342 -0
  450. nat/utils/exception_handlers/schemas.py +114 -0
  451. nat/utils/io/__init__.py +0 -0
  452. nat/utils/io/model_processing.py +28 -0
  453. nat/utils/io/yaml_tools.py +119 -0
  454. nat/utils/log_levels.py +25 -0
  455. nat/utils/log_utils.py +37 -0
  456. nat/utils/metadata_utils.py +74 -0
  457. nat/utils/optional_imports.py +142 -0
  458. nat/utils/producer_consumer_queue.py +178 -0
  459. nat/utils/reactive/__init__.py +0 -0
  460. nat/utils/reactive/base/__init__.py +0 -0
  461. nat/utils/reactive/base/observable_base.py +65 -0
  462. nat/utils/reactive/base/observer_base.py +55 -0
  463. nat/utils/reactive/base/subject_base.py +79 -0
  464. nat/utils/reactive/observable.py +59 -0
  465. nat/utils/reactive/observer.py +76 -0
  466. nat/utils/reactive/subject.py +131 -0
  467. nat/utils/reactive/subscription.py +49 -0
  468. nat/utils/settings/__init__.py +0 -0
  469. nat/utils/settings/global_settings.py +195 -0
  470. nat/utils/string_utils.py +38 -0
  471. nat/utils/type_converter.py +299 -0
  472. nat/utils/type_utils.py +488 -0
  473. nat/utils/url_utils.py +27 -0
  474. nvidia_nat-1.1.0a20251020.dist-info/METADATA +195 -0
  475. nvidia_nat-1.1.0a20251020.dist-info/RECORD +480 -0
  476. nvidia_nat-1.1.0a20251020.dist-info/WHEEL +5 -0
  477. nvidia_nat-1.1.0a20251020.dist-info/entry_points.txt +22 -0
  478. nvidia_nat-1.1.0a20251020.dist-info/licenses/LICENSE-3rd-party.txt +5478 -0
  479. nvidia_nat-1.1.0a20251020.dist-info/licenses/LICENSE.md +201 -0
  480. nvidia_nat-1.1.0a20251020.dist-info/top_level.txt +2 -0
@@ -0,0 +1,168 @@
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
+ import logging
17
+
18
+ from pydantic import AliasChoices
19
+ from pydantic import Field
20
+
21
+ from nat.builder.builder import Builder
22
+ from nat.builder.framework_enum import LLMFrameworkEnum
23
+ from nat.builder.function_info import FunctionInfo
24
+ from nat.cli.register_workflow import register_function
25
+ from nat.data_models.agent import AgentBaseConfig
26
+ from nat.data_models.api_server import ChatRequest
27
+ from nat.data_models.api_server import ChatRequestOrMessage
28
+ from nat.data_models.api_server import ChatResponse
29
+ from nat.data_models.api_server import Usage
30
+ from nat.data_models.component_ref import FunctionGroupRef
31
+ from nat.data_models.component_ref import FunctionRef
32
+ from nat.data_models.optimizable import OptimizableField
33
+ from nat.data_models.optimizable import OptimizableMixin
34
+ from nat.data_models.optimizable import SearchSpace
35
+ from nat.utils.type_converter import GlobalTypeConverter
36
+
37
+ logger = logging.getLogger(__name__)
38
+
39
+
40
+ class ReActAgentWorkflowConfig(AgentBaseConfig, OptimizableMixin, name="react_agent"):
41
+ """
42
+ Defines a NAT function that uses a ReAct Agent performs reasoning inbetween tool calls, and utilizes the
43
+ tool names and descriptions to select the optimal tool.
44
+ """
45
+ description: str = Field(default="ReAct Agent Workflow", description="The description of this functions use.")
46
+ tool_names: list[FunctionRef | FunctionGroupRef] = Field(
47
+ default_factory=list, description="The list of tools to provide to the react agent.")
48
+ retry_agent_response_parsing_errors: bool = Field(
49
+ default=True,
50
+ validation_alias=AliasChoices("retry_agent_response_parsing_errors", "retry_parsing_errors"),
51
+ description="Whether to retry when encountering parsing errors in the agent's response.")
52
+ parse_agent_response_max_retries: int = Field(
53
+ default=1,
54
+ validation_alias=AliasChoices("parse_agent_response_max_retries", "max_retries"),
55
+ description="Maximum number of times the Agent may retry parsing errors. "
56
+ "Prevents the Agent from getting into infinite hallucination loops.")
57
+ tool_call_max_retries: int = Field(default=1, description="The number of retries before raising a tool call error.")
58
+ max_tool_calls: int = Field(default=15,
59
+ validation_alias=AliasChoices("max_tool_calls", "max_iterations"),
60
+ description="Maximum number of tool calls before stopping the agent.")
61
+ pass_tool_call_errors_to_agent: bool = Field(
62
+ default=True,
63
+ description="Whether to pass tool call errors to agent. If False, failed tool calls will raise an exception.")
64
+ include_tool_input_schema_in_tool_description: bool = Field(
65
+ default=True, description="Specify inclusion of tool input schemas in the prompt.")
66
+ normalize_tool_input_quotes: bool = Field(
67
+ default=True,
68
+ description="Whether to replace single quotes with double quotes in the tool input. "
69
+ "This is useful for tools that expect structured json input.")
70
+ system_prompt: str | None = Field(
71
+ default=None,
72
+ description="Provides the SYSTEM_PROMPT to use with the agent") # defaults to SYSTEM_PROMPT in prompt.py
73
+ max_history: int = Field(default=15, description="Maximum number of messages to keep in the conversation history.")
74
+ additional_instructions: str | None = OptimizableField(
75
+ default=None,
76
+ description="Additional instructions to provide to the agent in addition to the base prompt.",
77
+ space=SearchSpace(
78
+ is_prompt=True,
79
+ prompt="No additional instructions.",
80
+ prompt_purpose="Additional instructions to provide to the agent in addition to the base prompt.",
81
+ ))
82
+
83
+
84
+ @register_function(config_type=ReActAgentWorkflowConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN])
85
+ async def react_agent_workflow(config: ReActAgentWorkflowConfig, builder: Builder):
86
+ from langchain.schema import BaseMessage
87
+ from langchain_core.messages import trim_messages
88
+ from langgraph.graph.state import CompiledStateGraph
89
+
90
+ from nat.agent.base import AGENT_LOG_PREFIX
91
+ from nat.agent.react_agent.agent import ReActAgentGraph
92
+ from nat.agent.react_agent.agent import ReActGraphState
93
+ from nat.agent.react_agent.agent import create_react_agent_prompt
94
+
95
+ prompt = create_react_agent_prompt(config)
96
+
97
+ # we can choose an LLM for the ReAct agent in the config file
98
+ llm = await builder.get_llm(config.llm_name, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
99
+ # the agent can run any installed tool, simply install the tool and add it to the config file
100
+ # the sample tool provided can easily be copied or changed
101
+ tools = await builder.get_tools(tool_names=config.tool_names, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
102
+ if not tools:
103
+ raise ValueError(f"No tools specified for ReAct Agent '{config.llm_name}'")
104
+ # configure callbacks, for sending intermediate steps
105
+ # construct the ReAct Agent Graph from the configured llm, prompt, and tools
106
+ graph: CompiledStateGraph = await ReActAgentGraph(
107
+ llm=llm,
108
+ prompt=prompt,
109
+ tools=tools,
110
+ use_tool_schema=config.include_tool_input_schema_in_tool_description,
111
+ detailed_logs=config.verbose,
112
+ log_response_max_chars=config.log_response_max_chars,
113
+ retry_agent_response_parsing_errors=config.retry_agent_response_parsing_errors,
114
+ parse_agent_response_max_retries=config.parse_agent_response_max_retries,
115
+ tool_call_max_retries=config.tool_call_max_retries,
116
+ pass_tool_call_errors_to_agent=config.pass_tool_call_errors_to_agent,
117
+ normalize_tool_input_quotes=config.normalize_tool_input_quotes).build_graph()
118
+
119
+ async def _response_fn(chat_request_or_message: ChatRequestOrMessage) -> ChatResponse | str:
120
+ """
121
+ Main workflow entry function for the ReAct Agent.
122
+
123
+ This function invokes the ReAct Agent Graph and returns the response.
124
+
125
+ Args:
126
+ chat_request_or_message (ChatRequestOrMessage): The input message to process
127
+
128
+ Returns:
129
+ ChatResponse | str: The response from the agent or error message
130
+ """
131
+ try:
132
+ message = GlobalTypeConverter.get().convert(chat_request_or_message, to_type=ChatRequest)
133
+
134
+ # initialize the starting state with the user query
135
+ messages: list[BaseMessage] = trim_messages(messages=[m.model_dump() for m in message.messages],
136
+ max_tokens=config.max_history,
137
+ strategy="last",
138
+ token_counter=len,
139
+ start_on="human",
140
+ include_system=True)
141
+
142
+ state = ReActGraphState(messages=messages)
143
+
144
+ # run the ReAct Agent Graph
145
+ state = await graph.ainvoke(state, config={'recursion_limit': (config.max_tool_calls + 1) * 2})
146
+ # setting recursion_limit: 4 allows 1 tool call
147
+ # - allows the ReAct Agent to perform 1 cycle / call 1 single tool,
148
+ # - but stops the agent when it tries to call a tool a second time
149
+
150
+ # get and return the output from the state
151
+ state = ReActGraphState(**state)
152
+ output_message = state.messages[-1]
153
+ content = str(output_message.content)
154
+
155
+ # Create usage statistics for the response
156
+ prompt_tokens = sum(len(str(msg.content).split()) for msg in message.messages)
157
+ completion_tokens = len(content.split()) if content else 0
158
+ total_tokens = prompt_tokens + completion_tokens
159
+ usage = Usage(prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, total_tokens=total_tokens)
160
+ response = ChatResponse.from_string(content, usage=usage)
161
+ if chat_request_or_message.is_string:
162
+ return GlobalTypeConverter.get().convert(response, to_type=str)
163
+ return response
164
+ except Exception as ex:
165
+ logger.error("%s ReAct Agent failed with exception: %s", AGENT_LOG_PREFIX, str(ex))
166
+ raise
167
+
168
+ yield FunctionInfo.from_fn(_response_fn, description=config.description)
File without changes
@@ -0,0 +1,227 @@
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
+ import logging
17
+ import re
18
+ from collections.abc import AsyncGenerator
19
+
20
+ from pydantic import Field
21
+
22
+ from nat.builder.builder import Builder
23
+ from nat.builder.framework_enum import LLMFrameworkEnum
24
+ from nat.builder.function_info import FunctionInfo
25
+ from nat.cli.register_workflow import register_function
26
+ from nat.data_models.agent import AgentBaseConfig
27
+ from nat.data_models.api_server import ChatRequest
28
+ from nat.data_models.component_ref import FunctionRef
29
+
30
+ logger = logging.getLogger(__name__)
31
+
32
+
33
+ class ReasoningFunctionConfig(AgentBaseConfig, name="reasoning_agent"):
34
+ """
35
+ Defines a NAT function that performs reasoning on the input data.
36
+ Output is passed to the next function in the workflow.
37
+
38
+ Designed to be used with an InterceptingFunction.
39
+ """
40
+ description: str = Field(default="Reasoning Agent", description="The description of this function's use.")
41
+ augmented_fn: FunctionRef = Field(description="The name of the function to reason on.")
42
+ reasoning_prompt_template: str = Field(
43
+ default=("You are an expert reasoning model task with creating a detailed execution plan"
44
+ " for a system that has the following description:\n\n"
45
+ "**Description:** \n{augmented_function_desc}\n\n"
46
+ "Given the following input and a list of available tools, please provide a detailed step-by-step plan"
47
+ " that an instruction following system can use to address the input. Ensure the plan includes:\n\n"
48
+ "1. Identifying the key components of the input.\n"
49
+ "2. Determining the most suitable tools for each task.\n"
50
+ "3. Outlining the sequence of actions to be taken.\n\n"
51
+ "**Input:** \n{input_text}\n\n"
52
+ "**Tools and description of the tool:** \n{tools}\n\n"
53
+ "An example plan could look like this:\n\n"
54
+ "1. Call tool A with input X\n"
55
+ "2. Call tool B with input Y\n"
56
+ "3. Interpret the output of tool A and B\n"
57
+ "4. Return the final result"
58
+ "\n\n **PLAN:**\n"),
59
+ description="The reasoning model prompt template.")
60
+
61
+ instruction_prompt_template: str = Field(
62
+ default=("Answer the following question based on message history: {input_text}"
63
+ "\n\nHere is a plan for execution that you could use to guide you if you wanted to:"
64
+ "\n\n{reasoning_output}"
65
+ "\n\nNOTE: Remember to follow your guidance on how to format output, etc."
66
+ "\n\n You must respond with the answer to the original question directly to the user."),
67
+ description="The instruction prompt template.")
68
+
69
+
70
+ @register_function(config_type=ReasoningFunctionConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN])
71
+ async def build_reasoning_function(config: ReasoningFunctionConfig, builder: Builder):
72
+ """
73
+ Build a ReasoningFunction from the provided config.
74
+
75
+ Args:
76
+ config (ReasoningFunctionConfig): The config for the ReasoningFunction.
77
+ builder (Builder): The Builder instance to use for building the function.
78
+
79
+ Returns:
80
+ ReasoningFunction: The built ReasoningFunction.
81
+ """
82
+ from langchain_core.language_models import BaseChatModel
83
+ from langchain_core.prompts import PromptTemplate
84
+
85
+ from nat.agent.base import AGENT_LOG_PREFIX
86
+
87
+ def remove_r1_think_tags(text: str):
88
+ pattern = r'(<think>)?.*?</think>\s*(.*)'
89
+
90
+ # Add re.DOTALL flag to make . match newlines
91
+ match = re.match(pattern, text, re.DOTALL)
92
+
93
+ if match:
94
+ return match.group(2)
95
+
96
+ return text
97
+
98
+ # Get the LLM to use for reasoning
99
+ llm: BaseChatModel = await builder.get_llm(config.llm_name, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
100
+
101
+ # Get the augmented function's description
102
+ augmented_function = await builder.get_function(config.augmented_fn)
103
+
104
+ # For now, we rely on runtime checking for type conversion
105
+
106
+ if augmented_function.description and augmented_function.description != "":
107
+ augmented_function_desc = augmented_function.description
108
+ else:
109
+ raise ValueError(f"Function {config.augmented_fn} does not have a description. Cannot augment "
110
+ f"function without a description.")
111
+
112
+ # Get the function dependencies of the augmented function
113
+ function_dependencies = builder.get_function_dependencies(config.augmented_fn)
114
+ function_used_tools = set()
115
+ function_used_tools.update(function_dependencies.functions)
116
+ for function_group in function_dependencies.function_groups:
117
+ function_used_tools.update(builder.get_function_group_dependencies(function_group).functions)
118
+
119
+ tool_names_with_desc: list[tuple[str, str]] = []
120
+
121
+ for tool in function_used_tools:
122
+ tool_impl = await builder.get_function(tool)
123
+ tool_names_with_desc.append((tool, tool_impl.description if hasattr(tool_impl, "description") else ""))
124
+
125
+ # Draft the reasoning prompt for the augmented function
126
+ template = PromptTemplate(template=config.reasoning_prompt_template,
127
+ input_variables=["augmented_function_desc", "input_text", "tools"],
128
+ validate_template=True)
129
+
130
+ downstream_template = PromptTemplate(template=config.instruction_prompt_template,
131
+ input_variables=["input_text", "reasoning_output"],
132
+ validate_template=True)
133
+
134
+ streaming_inner_fn = None
135
+ single_inner_fn = None
136
+
137
+ if augmented_function.has_streaming_output:
138
+
139
+ async def streaming_inner(
140
+ input_message: ChatRequest) -> AsyncGenerator[augmented_function.streaming_output_type]:
141
+ """
142
+ Perform reasoning on the input text.
143
+
144
+ Args:
145
+ input_message (ChatRequest): The input text to reason on.
146
+ """
147
+
148
+ input_text = "".join([str(message.model_dump()) + "\n" for message in input_message.messages])
149
+
150
+ prompt = await template.ainvoke(
151
+ input={
152
+ "augmented_function_desc": augmented_function_desc,
153
+ "input_text": input_text,
154
+ "tools": "\n".join([f"- {tool[0]}: {tool[1]}" for tool in tool_names_with_desc])
155
+ })
156
+
157
+ prompt = prompt.to_string()
158
+
159
+ # Get the reasoning output from the LLM
160
+ reasoning_output = ""
161
+
162
+ async for chunk in llm.astream(prompt):
163
+ reasoning_output += chunk.content
164
+
165
+ reasoning_output = remove_r1_think_tags(reasoning_output)
166
+
167
+ output = await downstream_template.ainvoke(input={
168
+ "input_text": input_text, "reasoning_output": reasoning_output
169
+ })
170
+
171
+ output = output.to_string()
172
+
173
+ if config.verbose:
174
+ logger.info("%s Reasoning plan and input to agent: \n\n%s", AGENT_LOG_PREFIX, output)
175
+
176
+ async for chunk in augmented_function.acall_stream(output):
177
+ yield chunk
178
+
179
+ streaming_inner_fn = streaming_inner
180
+
181
+ if augmented_function.has_single_output:
182
+
183
+ async def single_inner(input_message: ChatRequest) -> augmented_function.single_output_type:
184
+ """
185
+ Perform reasoning on the input text.
186
+
187
+ Args:
188
+ input_message (ChatRequest): The input text to reason on.
189
+ """
190
+
191
+ input_text = "".join([str(message.model_dump()) + "\n" for message in input_message.messages])
192
+
193
+ prompt = await template.ainvoke(
194
+ input={
195
+ "augmented_function_desc": augmented_function_desc,
196
+ "input_text": input_text,
197
+ "tools": "\n".join([f"- {tool[0]}: {tool[1]}" for tool in tool_names_with_desc])
198
+ })
199
+
200
+ prompt = prompt.to_string()
201
+
202
+ # Get the reasoning output from the LLM
203
+ reasoning_output = ""
204
+
205
+ async for chunk in llm.astream(prompt):
206
+ reasoning_output += chunk.content
207
+
208
+ reasoning_output = remove_r1_think_tags(reasoning_output)
209
+
210
+ output = await downstream_template.ainvoke(input={
211
+ "input_text": input_text, "reasoning_output": reasoning_output
212
+ })
213
+
214
+ output = output.to_string()
215
+
216
+ if config.verbose:
217
+ logger.info("%s Reasoning plan and input to agent: \n\n%s", AGENT_LOG_PREFIX, output)
218
+
219
+ return await augmented_function.acall_invoke(output)
220
+
221
+ single_inner_fn = single_inner
222
+
223
+ yield FunctionInfo.create(
224
+ single_fn=single_inner_fn,
225
+ stream_fn=streaming_inner_fn,
226
+ description=("Reasoning function that generates a detailed execution plan for a system based on the input."),
227
+ converters=augmented_function.converter_list)
nat/agent/register.py ADDED
@@ -0,0 +1,23 @@
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
+ # flake8: noqa
17
+
18
+ # Import any workflows which need to be automatically registered here
19
+ from .prompt_optimizer import register as prompt_optimizer
20
+ from .react_agent import register as react_agent
21
+ from .reasoning_agent import reasoning_agent
22
+ from .rewoo_agent import register as rewoo_agent
23
+ from .tool_calling_agent import register as tool_calling_agent
File without changes