nvidia-nat 1.2.0a20250813__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 (436) hide show
  1. nat/agent/__init__.py +0 -0
  2. nat/agent/base.py +239 -0
  3. nat/agent/dual_node.py +67 -0
  4. nat/agent/react_agent/__init__.py +0 -0
  5. nat/agent/react_agent/agent.py +355 -0
  6. nat/agent/react_agent/output_parser.py +104 -0
  7. nat/agent/react_agent/prompt.py +41 -0
  8. nat/agent/react_agent/register.py +149 -0
  9. nat/agent/reasoning_agent/__init__.py +0 -0
  10. nat/agent/reasoning_agent/reasoning_agent.py +225 -0
  11. nat/agent/register.py +23 -0
  12. nat/agent/rewoo_agent/__init__.py +0 -0
  13. nat/agent/rewoo_agent/agent.py +411 -0
  14. nat/agent/rewoo_agent/prompt.py +108 -0
  15. nat/agent/rewoo_agent/register.py +158 -0
  16. nat/agent/tool_calling_agent/__init__.py +0 -0
  17. nat/agent/tool_calling_agent/agent.py +119 -0
  18. nat/agent/tool_calling_agent/register.py +106 -0
  19. nat/authentication/__init__.py +14 -0
  20. nat/authentication/api_key/__init__.py +14 -0
  21. nat/authentication/api_key/api_key_auth_provider.py +96 -0
  22. nat/authentication/api_key/api_key_auth_provider_config.py +124 -0
  23. nat/authentication/api_key/register.py +26 -0
  24. nat/authentication/exceptions/__init__.py +14 -0
  25. nat/authentication/exceptions/api_key_exceptions.py +38 -0
  26. nat/authentication/http_basic_auth/__init__.py +0 -0
  27. nat/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
  28. nat/authentication/http_basic_auth/register.py +30 -0
  29. nat/authentication/interfaces.py +93 -0
  30. nat/authentication/oauth2/__init__.py +14 -0
  31. nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +107 -0
  32. nat/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
  33. nat/authentication/oauth2/register.py +25 -0
  34. nat/authentication/register.py +21 -0
  35. nat/builder/__init__.py +0 -0
  36. nat/builder/builder.py +285 -0
  37. nat/builder/component_utils.py +316 -0
  38. nat/builder/context.py +270 -0
  39. nat/builder/embedder.py +24 -0
  40. nat/builder/eval_builder.py +161 -0
  41. nat/builder/evaluator.py +29 -0
  42. nat/builder/framework_enum.py +24 -0
  43. nat/builder/front_end.py +73 -0
  44. nat/builder/function.py +344 -0
  45. nat/builder/function_base.py +380 -0
  46. nat/builder/function_info.py +627 -0
  47. nat/builder/intermediate_step_manager.py +174 -0
  48. nat/builder/llm.py +25 -0
  49. nat/builder/retriever.py +25 -0
  50. nat/builder/user_interaction_manager.py +78 -0
  51. nat/builder/workflow.py +148 -0
  52. nat/builder/workflow_builder.py +1117 -0
  53. nat/cli/__init__.py +14 -0
  54. nat/cli/cli_utils/__init__.py +0 -0
  55. nat/cli/cli_utils/config_override.py +231 -0
  56. nat/cli/cli_utils/validation.py +37 -0
  57. nat/cli/commands/__init__.py +0 -0
  58. nat/cli/commands/configure/__init__.py +0 -0
  59. nat/cli/commands/configure/channel/__init__.py +0 -0
  60. nat/cli/commands/configure/channel/add.py +28 -0
  61. nat/cli/commands/configure/channel/channel.py +36 -0
  62. nat/cli/commands/configure/channel/remove.py +30 -0
  63. nat/cli/commands/configure/channel/update.py +30 -0
  64. nat/cli/commands/configure/configure.py +33 -0
  65. nat/cli/commands/evaluate.py +139 -0
  66. nat/cli/commands/info/__init__.py +14 -0
  67. nat/cli/commands/info/info.py +39 -0
  68. nat/cli/commands/info/list_channels.py +32 -0
  69. nat/cli/commands/info/list_components.py +129 -0
  70. nat/cli/commands/info/list_mcp.py +304 -0
  71. nat/cli/commands/registry/__init__.py +14 -0
  72. nat/cli/commands/registry/publish.py +88 -0
  73. nat/cli/commands/registry/pull.py +118 -0
  74. nat/cli/commands/registry/registry.py +38 -0
  75. nat/cli/commands/registry/remove.py +108 -0
  76. nat/cli/commands/registry/search.py +155 -0
  77. nat/cli/commands/sizing/__init__.py +14 -0
  78. nat/cli/commands/sizing/calc.py +297 -0
  79. nat/cli/commands/sizing/sizing.py +27 -0
  80. nat/cli/commands/start.py +246 -0
  81. nat/cli/commands/uninstall.py +81 -0
  82. nat/cli/commands/validate.py +47 -0
  83. nat/cli/commands/workflow/__init__.py +14 -0
  84. nat/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  85. nat/cli/commands/workflow/templates/config.yml.j2 +16 -0
  86. nat/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
  87. nat/cli/commands/workflow/templates/register.py.j2 +5 -0
  88. nat/cli/commands/workflow/templates/workflow.py.j2 +36 -0
  89. nat/cli/commands/workflow/workflow.py +37 -0
  90. nat/cli/commands/workflow/workflow_commands.py +317 -0
  91. nat/cli/entrypoint.py +135 -0
  92. nat/cli/main.py +57 -0
  93. nat/cli/register_workflow.py +488 -0
  94. nat/cli/type_registry.py +1000 -0
  95. nat/data_models/__init__.py +14 -0
  96. nat/data_models/api_server.py +709 -0
  97. nat/data_models/authentication.py +231 -0
  98. nat/data_models/common.py +171 -0
  99. nat/data_models/component.py +58 -0
  100. nat/data_models/component_ref.py +168 -0
  101. nat/data_models/config.py +410 -0
  102. nat/data_models/dataset_handler.py +123 -0
  103. nat/data_models/discovery_metadata.py +334 -0
  104. nat/data_models/embedder.py +27 -0
  105. nat/data_models/evaluate.py +127 -0
  106. nat/data_models/evaluator.py +26 -0
  107. nat/data_models/front_end.py +26 -0
  108. nat/data_models/function.py +30 -0
  109. nat/data_models/function_dependencies.py +72 -0
  110. nat/data_models/interactive.py +246 -0
  111. nat/data_models/intermediate_step.py +302 -0
  112. nat/data_models/invocation_node.py +38 -0
  113. nat/data_models/llm.py +27 -0
  114. nat/data_models/logging.py +26 -0
  115. nat/data_models/memory.py +27 -0
  116. nat/data_models/object_store.py +44 -0
  117. nat/data_models/profiler.py +54 -0
  118. nat/data_models/registry_handler.py +26 -0
  119. nat/data_models/retriever.py +30 -0
  120. nat/data_models/retry_mixin.py +35 -0
  121. nat/data_models/span.py +190 -0
  122. nat/data_models/step_adaptor.py +64 -0
  123. nat/data_models/streaming.py +33 -0
  124. nat/data_models/swe_bench_model.py +54 -0
  125. nat/data_models/telemetry_exporter.py +26 -0
  126. nat/data_models/ttc_strategy.py +30 -0
  127. nat/embedder/__init__.py +0 -0
  128. nat/embedder/langchain_client.py +41 -0
  129. nat/embedder/nim_embedder.py +59 -0
  130. nat/embedder/openai_embedder.py +43 -0
  131. nat/embedder/register.py +24 -0
  132. nat/eval/__init__.py +14 -0
  133. nat/eval/config.py +60 -0
  134. nat/eval/dataset_handler/__init__.py +0 -0
  135. nat/eval/dataset_handler/dataset_downloader.py +106 -0
  136. nat/eval/dataset_handler/dataset_filter.py +52 -0
  137. nat/eval/dataset_handler/dataset_handler.py +254 -0
  138. nat/eval/evaluate.py +510 -0
  139. nat/eval/evaluator/__init__.py +14 -0
  140. nat/eval/evaluator/base_evaluator.py +77 -0
  141. nat/eval/evaluator/evaluator_model.py +45 -0
  142. nat/eval/intermediate_step_adapter.py +99 -0
  143. nat/eval/rag_evaluator/__init__.py +0 -0
  144. nat/eval/rag_evaluator/evaluate.py +178 -0
  145. nat/eval/rag_evaluator/register.py +143 -0
  146. nat/eval/register.py +23 -0
  147. nat/eval/remote_workflow.py +133 -0
  148. nat/eval/runners/__init__.py +14 -0
  149. nat/eval/runners/config.py +39 -0
  150. nat/eval/runners/multi_eval_runner.py +54 -0
  151. nat/eval/runtime_event_subscriber.py +52 -0
  152. nat/eval/swe_bench_evaluator/__init__.py +0 -0
  153. nat/eval/swe_bench_evaluator/evaluate.py +215 -0
  154. nat/eval/swe_bench_evaluator/register.py +36 -0
  155. nat/eval/trajectory_evaluator/__init__.py +0 -0
  156. nat/eval/trajectory_evaluator/evaluate.py +75 -0
  157. nat/eval/trajectory_evaluator/register.py +40 -0
  158. nat/eval/tunable_rag_evaluator/__init__.py +0 -0
  159. nat/eval/tunable_rag_evaluator/evaluate.py +245 -0
  160. nat/eval/tunable_rag_evaluator/register.py +52 -0
  161. nat/eval/usage_stats.py +41 -0
  162. nat/eval/utils/__init__.py +0 -0
  163. nat/eval/utils/output_uploader.py +140 -0
  164. nat/eval/utils/tqdm_position_registry.py +40 -0
  165. nat/eval/utils/weave_eval.py +184 -0
  166. nat/experimental/__init__.py +0 -0
  167. nat/experimental/decorators/__init__.py +0 -0
  168. nat/experimental/decorators/experimental_warning_decorator.py +134 -0
  169. nat/experimental/test_time_compute/__init__.py +0 -0
  170. nat/experimental/test_time_compute/editing/__init__.py +0 -0
  171. nat/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +147 -0
  172. nat/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +204 -0
  173. nat/experimental/test_time_compute/editing/motivation_aware_summarization.py +107 -0
  174. nat/experimental/test_time_compute/functions/__init__.py +0 -0
  175. nat/experimental/test_time_compute/functions/execute_score_select_function.py +105 -0
  176. nat/experimental/test_time_compute/functions/plan_select_execute_function.py +224 -0
  177. nat/experimental/test_time_compute/functions/ttc_tool_orchestration_function.py +205 -0
  178. nat/experimental/test_time_compute/functions/ttc_tool_wrapper_function.py +146 -0
  179. nat/experimental/test_time_compute/models/__init__.py +0 -0
  180. nat/experimental/test_time_compute/models/editor_config.py +132 -0
  181. nat/experimental/test_time_compute/models/scoring_config.py +112 -0
  182. nat/experimental/test_time_compute/models/search_config.py +120 -0
  183. nat/experimental/test_time_compute/models/selection_config.py +154 -0
  184. nat/experimental/test_time_compute/models/stage_enums.py +43 -0
  185. nat/experimental/test_time_compute/models/strategy_base.py +66 -0
  186. nat/experimental/test_time_compute/models/tool_use_config.py +41 -0
  187. nat/experimental/test_time_compute/models/ttc_item.py +48 -0
  188. nat/experimental/test_time_compute/register.py +36 -0
  189. nat/experimental/test_time_compute/scoring/__init__.py +0 -0
  190. nat/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +168 -0
  191. nat/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +168 -0
  192. nat/experimental/test_time_compute/scoring/motivation_aware_scorer.py +111 -0
  193. nat/experimental/test_time_compute/search/__init__.py +0 -0
  194. nat/experimental/test_time_compute/search/multi_llm_planner.py +128 -0
  195. nat/experimental/test_time_compute/search/multi_query_retrieval_search.py +122 -0
  196. nat/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +128 -0
  197. nat/experimental/test_time_compute/selection/__init__.py +0 -0
  198. nat/experimental/test_time_compute/selection/best_of_n_selector.py +63 -0
  199. nat/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +131 -0
  200. nat/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +159 -0
  201. nat/experimental/test_time_compute/selection/llm_based_plan_selector.py +128 -0
  202. nat/experimental/test_time_compute/selection/threshold_selector.py +58 -0
  203. nat/front_ends/__init__.py +14 -0
  204. nat/front_ends/console/__init__.py +14 -0
  205. nat/front_ends/console/authentication_flow_handler.py +233 -0
  206. nat/front_ends/console/console_front_end_config.py +32 -0
  207. nat/front_ends/console/console_front_end_plugin.py +96 -0
  208. nat/front_ends/console/register.py +25 -0
  209. nat/front_ends/cron/__init__.py +14 -0
  210. nat/front_ends/fastapi/__init__.py +14 -0
  211. nat/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  212. nat/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +27 -0
  213. nat/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +107 -0
  214. nat/front_ends/fastapi/fastapi_front_end_config.py +242 -0
  215. nat/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
  216. nat/front_ends/fastapi/fastapi_front_end_plugin.py +116 -0
  217. nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +1087 -0
  218. nat/front_ends/fastapi/html_snippets/__init__.py +14 -0
  219. nat/front_ends/fastapi/html_snippets/auth_code_grant_success.py +35 -0
  220. nat/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
  221. nat/front_ends/fastapi/job_store.py +183 -0
  222. nat/front_ends/fastapi/main.py +72 -0
  223. nat/front_ends/fastapi/message_handler.py +309 -0
  224. nat/front_ends/fastapi/message_validator.py +354 -0
  225. nat/front_ends/fastapi/register.py +25 -0
  226. nat/front_ends/fastapi/response_helpers.py +195 -0
  227. nat/front_ends/fastapi/step_adaptor.py +319 -0
  228. nat/front_ends/mcp/__init__.py +14 -0
  229. nat/front_ends/mcp/mcp_front_end_config.py +35 -0
  230. nat/front_ends/mcp/mcp_front_end_plugin.py +81 -0
  231. nat/front_ends/mcp/mcp_front_end_plugin_worker.py +143 -0
  232. nat/front_ends/mcp/register.py +27 -0
  233. nat/front_ends/mcp/tool_converter.py +242 -0
  234. nat/front_ends/register.py +22 -0
  235. nat/front_ends/simple_base/__init__.py +14 -0
  236. nat/front_ends/simple_base/simple_front_end_plugin_base.py +54 -0
  237. nat/llm/__init__.py +0 -0
  238. nat/llm/aws_bedrock_llm.py +57 -0
  239. nat/llm/nim_llm.py +46 -0
  240. nat/llm/openai_llm.py +46 -0
  241. nat/llm/register.py +23 -0
  242. nat/llm/utils/__init__.py +14 -0
  243. nat/llm/utils/env_config_value.py +94 -0
  244. nat/llm/utils/error.py +17 -0
  245. nat/memory/__init__.py +20 -0
  246. nat/memory/interfaces.py +183 -0
  247. nat/memory/models.py +112 -0
  248. nat/meta/module_to_distro.json +4 -0
  249. nat/meta/pypi.md +58 -0
  250. nat/object_store/__init__.py +20 -0
  251. nat/object_store/in_memory_object_store.py +76 -0
  252. nat/object_store/interfaces.py +84 -0
  253. nat/object_store/models.py +36 -0
  254. nat/object_store/register.py +20 -0
  255. nat/observability/__init__.py +14 -0
  256. nat/observability/exporter/__init__.py +14 -0
  257. nat/observability/exporter/base_exporter.py +449 -0
  258. nat/observability/exporter/exporter.py +78 -0
  259. nat/observability/exporter/file_exporter.py +33 -0
  260. nat/observability/exporter/processing_exporter.py +322 -0
  261. nat/observability/exporter/raw_exporter.py +52 -0
  262. nat/observability/exporter/span_exporter.py +288 -0
  263. nat/observability/exporter_manager.py +335 -0
  264. nat/observability/mixin/__init__.py +14 -0
  265. nat/observability/mixin/batch_config_mixin.py +26 -0
  266. nat/observability/mixin/collector_config_mixin.py +23 -0
  267. nat/observability/mixin/file_mixin.py +288 -0
  268. nat/observability/mixin/file_mode.py +23 -0
  269. nat/observability/mixin/resource_conflict_mixin.py +134 -0
  270. nat/observability/mixin/serialize_mixin.py +61 -0
  271. nat/observability/mixin/type_introspection_mixin.py +183 -0
  272. nat/observability/processor/__init__.py +14 -0
  273. nat/observability/processor/batching_processor.py +310 -0
  274. nat/observability/processor/callback_processor.py +42 -0
  275. nat/observability/processor/intermediate_step_serializer.py +28 -0
  276. nat/observability/processor/processor.py +71 -0
  277. nat/observability/register.py +96 -0
  278. nat/observability/utils/__init__.py +14 -0
  279. nat/observability/utils/dict_utils.py +236 -0
  280. nat/observability/utils/time_utils.py +31 -0
  281. nat/plugins/.namespace +1 -0
  282. nat/profiler/__init__.py +0 -0
  283. nat/profiler/calc/__init__.py +14 -0
  284. nat/profiler/calc/calc_runner.py +627 -0
  285. nat/profiler/calc/calculations.py +288 -0
  286. nat/profiler/calc/data_models.py +188 -0
  287. nat/profiler/calc/plot.py +345 -0
  288. nat/profiler/callbacks/__init__.py +0 -0
  289. nat/profiler/callbacks/agno_callback_handler.py +295 -0
  290. nat/profiler/callbacks/base_callback_class.py +20 -0
  291. nat/profiler/callbacks/langchain_callback_handler.py +290 -0
  292. nat/profiler/callbacks/llama_index_callback_handler.py +205 -0
  293. nat/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
  294. nat/profiler/callbacks/token_usage_base_model.py +27 -0
  295. nat/profiler/data_frame_row.py +51 -0
  296. nat/profiler/data_models.py +24 -0
  297. nat/profiler/decorators/__init__.py +0 -0
  298. nat/profiler/decorators/framework_wrapper.py +131 -0
  299. nat/profiler/decorators/function_tracking.py +254 -0
  300. nat/profiler/forecasting/__init__.py +0 -0
  301. nat/profiler/forecasting/config.py +18 -0
  302. nat/profiler/forecasting/model_trainer.py +75 -0
  303. nat/profiler/forecasting/models/__init__.py +22 -0
  304. nat/profiler/forecasting/models/forecasting_base_model.py +40 -0
  305. nat/profiler/forecasting/models/linear_model.py +196 -0
  306. nat/profiler/forecasting/models/random_forest_regressor.py +268 -0
  307. nat/profiler/inference_metrics_model.py +28 -0
  308. nat/profiler/inference_optimization/__init__.py +0 -0
  309. nat/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  310. nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
  311. nat/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
  312. nat/profiler/inference_optimization/data_models.py +386 -0
  313. nat/profiler/inference_optimization/experimental/__init__.py +0 -0
  314. nat/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
  315. nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
  316. nat/profiler/inference_optimization/llm_metrics.py +212 -0
  317. nat/profiler/inference_optimization/prompt_caching.py +163 -0
  318. nat/profiler/inference_optimization/token_uniqueness.py +107 -0
  319. nat/profiler/inference_optimization/workflow_runtimes.py +72 -0
  320. nat/profiler/intermediate_property_adapter.py +102 -0
  321. nat/profiler/profile_runner.py +473 -0
  322. nat/profiler/utils.py +184 -0
  323. nat/registry_handlers/__init__.py +0 -0
  324. nat/registry_handlers/local/__init__.py +0 -0
  325. nat/registry_handlers/local/local_handler.py +176 -0
  326. nat/registry_handlers/local/register_local.py +37 -0
  327. nat/registry_handlers/metadata_factory.py +60 -0
  328. nat/registry_handlers/package_utils.py +571 -0
  329. nat/registry_handlers/pypi/__init__.py +0 -0
  330. nat/registry_handlers/pypi/pypi_handler.py +251 -0
  331. nat/registry_handlers/pypi/register_pypi.py +40 -0
  332. nat/registry_handlers/register.py +21 -0
  333. nat/registry_handlers/registry_handler_base.py +157 -0
  334. nat/registry_handlers/rest/__init__.py +0 -0
  335. nat/registry_handlers/rest/register_rest.py +56 -0
  336. nat/registry_handlers/rest/rest_handler.py +237 -0
  337. nat/registry_handlers/schemas/__init__.py +0 -0
  338. nat/registry_handlers/schemas/headers.py +42 -0
  339. nat/registry_handlers/schemas/package.py +68 -0
  340. nat/registry_handlers/schemas/publish.py +68 -0
  341. nat/registry_handlers/schemas/pull.py +82 -0
  342. nat/registry_handlers/schemas/remove.py +36 -0
  343. nat/registry_handlers/schemas/search.py +91 -0
  344. nat/registry_handlers/schemas/status.py +47 -0
  345. nat/retriever/__init__.py +0 -0
  346. nat/retriever/interface.py +41 -0
  347. nat/retriever/milvus/__init__.py +14 -0
  348. nat/retriever/milvus/register.py +81 -0
  349. nat/retriever/milvus/retriever.py +228 -0
  350. nat/retriever/models.py +77 -0
  351. nat/retriever/nemo_retriever/__init__.py +14 -0
  352. nat/retriever/nemo_retriever/register.py +60 -0
  353. nat/retriever/nemo_retriever/retriever.py +190 -0
  354. nat/retriever/register.py +22 -0
  355. nat/runtime/__init__.py +14 -0
  356. nat/runtime/loader.py +219 -0
  357. nat/runtime/runner.py +195 -0
  358. nat/runtime/session.py +162 -0
  359. nat/runtime/user_metadata.py +130 -0
  360. nat/settings/__init__.py +0 -0
  361. nat/settings/global_settings.py +318 -0
  362. nat/test/.namespace +1 -0
  363. nat/tool/__init__.py +0 -0
  364. nat/tool/chat_completion.py +74 -0
  365. nat/tool/code_execution/README.md +151 -0
  366. nat/tool/code_execution/__init__.py +0 -0
  367. nat/tool/code_execution/code_sandbox.py +267 -0
  368. nat/tool/code_execution/local_sandbox/.gitignore +1 -0
  369. nat/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
  370. nat/tool/code_execution/local_sandbox/__init__.py +13 -0
  371. nat/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
  372. nat/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
  373. nat/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
  374. nat/tool/code_execution/register.py +74 -0
  375. nat/tool/code_execution/test_code_execution_sandbox.py +414 -0
  376. nat/tool/code_execution/utils.py +100 -0
  377. nat/tool/datetime_tools.py +42 -0
  378. nat/tool/document_search.py +141 -0
  379. nat/tool/github_tools/__init__.py +0 -0
  380. nat/tool/github_tools/create_github_commit.py +133 -0
  381. nat/tool/github_tools/create_github_issue.py +87 -0
  382. nat/tool/github_tools/create_github_pr.py +106 -0
  383. nat/tool/github_tools/get_github_file.py +106 -0
  384. nat/tool/github_tools/get_github_issue.py +166 -0
  385. nat/tool/github_tools/get_github_pr.py +256 -0
  386. nat/tool/github_tools/update_github_issue.py +100 -0
  387. nat/tool/mcp/__init__.py +14 -0
  388. nat/tool/mcp/exceptions.py +142 -0
  389. nat/tool/mcp/mcp_client.py +255 -0
  390. nat/tool/mcp/mcp_tool.py +96 -0
  391. nat/tool/memory_tools/__init__.py +0 -0
  392. nat/tool/memory_tools/add_memory_tool.py +79 -0
  393. nat/tool/memory_tools/delete_memory_tool.py +67 -0
  394. nat/tool/memory_tools/get_memory_tool.py +72 -0
  395. nat/tool/nvidia_rag.py +95 -0
  396. nat/tool/register.py +38 -0
  397. nat/tool/retriever.py +94 -0
  398. nat/tool/server_tools.py +66 -0
  399. nat/utils/__init__.py +0 -0
  400. nat/utils/data_models/__init__.py +0 -0
  401. nat/utils/data_models/schema_validator.py +58 -0
  402. nat/utils/debugging_utils.py +43 -0
  403. nat/utils/dump_distro_mapping.py +32 -0
  404. nat/utils/exception_handlers/__init__.py +0 -0
  405. nat/utils/exception_handlers/automatic_retries.py +289 -0
  406. nat/utils/exception_handlers/mcp.py +211 -0
  407. nat/utils/exception_handlers/schemas.py +114 -0
  408. nat/utils/io/__init__.py +0 -0
  409. nat/utils/io/model_processing.py +28 -0
  410. nat/utils/io/yaml_tools.py +119 -0
  411. nat/utils/log_utils.py +37 -0
  412. nat/utils/metadata_utils.py +74 -0
  413. nat/utils/optional_imports.py +142 -0
  414. nat/utils/producer_consumer_queue.py +178 -0
  415. nat/utils/reactive/__init__.py +0 -0
  416. nat/utils/reactive/base/__init__.py +0 -0
  417. nat/utils/reactive/base/observable_base.py +65 -0
  418. nat/utils/reactive/base/observer_base.py +55 -0
  419. nat/utils/reactive/base/subject_base.py +79 -0
  420. nat/utils/reactive/observable.py +59 -0
  421. nat/utils/reactive/observer.py +76 -0
  422. nat/utils/reactive/subject.py +131 -0
  423. nat/utils/reactive/subscription.py +49 -0
  424. nat/utils/settings/__init__.py +0 -0
  425. nat/utils/settings/global_settings.py +197 -0
  426. nat/utils/string_utils.py +38 -0
  427. nat/utils/type_converter.py +290 -0
  428. nat/utils/type_utils.py +484 -0
  429. nat/utils/url_utils.py +27 -0
  430. nvidia_nat-1.2.0a20250813.dist-info/METADATA +363 -0
  431. nvidia_nat-1.2.0a20250813.dist-info/RECORD +436 -0
  432. nvidia_nat-1.2.0a20250813.dist-info/WHEEL +5 -0
  433. nvidia_nat-1.2.0a20250813.dist-info/entry_points.txt +21 -0
  434. nvidia_nat-1.2.0a20250813.dist-info/licenses/LICENSE-3rd-party.txt +3686 -0
  435. nvidia_nat-1.2.0a20250813.dist-info/licenses/LICENSE.md +201 -0
  436. nvidia_nat-1.2.0a20250813.dist-info/top_level.txt +1 -0
@@ -0,0 +1,96 @@
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 Field
19
+
20
+ from nat.builder.builder import Builder
21
+ from nat.cli.register_workflow import register_logging_method
22
+ from nat.cli.register_workflow import register_telemetry_exporter
23
+ from nat.data_models.logging import LoggingBaseConfig
24
+ from nat.data_models.telemetry_exporter import TelemetryExporterBaseConfig
25
+ from nat.observability.mixin.file_mode import FileMode
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+
30
+ class FileTelemetryExporterConfig(TelemetryExporterBaseConfig, name="file"):
31
+ """A telemetry exporter that writes runtime traces to local files with optional rolling."""
32
+
33
+ output_path: str = Field(description="Output path for logs. When rolling is disabled: exact file path. "
34
+ "When rolling is enabled: directory path or file path (directory + base name).")
35
+ project: str = Field(description="Name to affiliate with this application.")
36
+ mode: FileMode = Field(
37
+ default=FileMode.APPEND,
38
+ description="File write mode: 'append' to add to existing file or 'overwrite' to start fresh.")
39
+ enable_rolling: bool = Field(default=False, description="Enable rolling log files based on size limits.")
40
+ max_file_size: int = Field(
41
+ default=10 * 1024 * 1024, # 10MB
42
+ description="Maximum file size in bytes before rolling to a new file.")
43
+ max_files: int = Field(default=5, description="Maximum number of rolled files to keep.")
44
+ cleanup_on_init: bool = Field(default=False, description="Clean up old files during initialization.")
45
+
46
+
47
+ @register_telemetry_exporter(config_type=FileTelemetryExporterConfig)
48
+ async def file_telemetry_exporter(config: FileTelemetryExporterConfig, builder: Builder): # pylint: disable=W0613
49
+ """
50
+ Build and return a FileExporter for file-based telemetry export with optional rolling.
51
+ """
52
+
53
+ from nat.observability.exporter.file_exporter import FileExporter
54
+
55
+ yield FileExporter(output_path=config.output_path,
56
+ project=config.project,
57
+ mode=config.mode,
58
+ enable_rolling=config.enable_rolling,
59
+ max_file_size=config.max_file_size,
60
+ max_files=config.max_files,
61
+ cleanup_on_init=config.cleanup_on_init)
62
+
63
+
64
+ class ConsoleLoggingMethodConfig(LoggingBaseConfig, name="console"):
65
+ """A logger to write runtime logs to the console."""
66
+
67
+ level: str = Field(description="The logging level of console logger.")
68
+
69
+
70
+ @register_logging_method(config_type=ConsoleLoggingMethodConfig)
71
+ async def console_logging_method(config: ConsoleLoggingMethodConfig, builder: Builder): # pylint: disable=W0613
72
+ """
73
+ Build and return a StreamHandler for console-based logging.
74
+ """
75
+ level = getattr(logging, config.level.upper(), logging.INFO)
76
+ handler = logging.StreamHandler()
77
+ handler.setLevel(level)
78
+ yield handler
79
+
80
+
81
+ class FileLoggingMethod(LoggingBaseConfig, name="file"):
82
+ """A logger to write runtime logs to a file."""
83
+
84
+ path: str = Field(description="The file path to save the logging output.")
85
+ level: str = Field(description="The logging level of file logger.")
86
+
87
+
88
+ @register_logging_method(config_type=FileLoggingMethod)
89
+ async def file_logging_method(config: FileLoggingMethod, builder: Builder): # pylint: disable=W0613
90
+ """
91
+ Build and return a FileHandler for file-based logging.
92
+ """
93
+ level = getattr(logging, config.level.upper(), logging.INFO)
94
+ handler = logging.FileHandler(filename=config.path, mode="a", encoding="utf-8")
95
+ handler.setLevel(level)
96
+ yield handler
@@ -0,0 +1,14 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024-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.
@@ -0,0 +1,236 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024-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 asyncio
17
+ import logging
18
+ from collections.abc import AsyncGenerator
19
+ from contextlib import asynccontextmanager
20
+ from typing import Any
21
+ from weakref import WeakKeyDictionary
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class KeyedLock:
27
+ """
28
+ A lock manager that provides an asyncio-compatible lock for each unique key.
29
+
30
+ This allows for fine-grained locking based on arbitrary keys, so that
31
+ concurrent operations on different keys do not block each other.
32
+
33
+ Attributes:
34
+ _locks (AsyncDictionary): A dictionary to store locks per key.
35
+ """
36
+
37
+ def __init__(self):
38
+ """
39
+ Initialize the KeyedLock with an internal AsyncSafeWeakKeyDictionary to store locks per key.
40
+ """
41
+ self._locks: AsyncDictionary = AsyncDictionary()
42
+
43
+ @asynccontextmanager
44
+ async def get_lock(self, key: Any) -> AsyncGenerator[None]:
45
+ """
46
+ Async context manager to acquire a lock for a specific key.
47
+
48
+ Args:
49
+ key (Any): The key to lock on.
50
+
51
+ Yields:
52
+ None: Control is yielded while the lock is held.
53
+ """
54
+ lock = await self._locks.get(key)
55
+ if lock is None:
56
+ lock = asyncio.Lock()
57
+ await self._locks.set(key, lock)
58
+ async with lock:
59
+ yield
60
+
61
+ async def delete(self, key: Any) -> None:
62
+ """
63
+ Remove the lock associated with the given key, if it exists.
64
+
65
+ Args:
66
+ key (Any): The key whose lock should be removed.
67
+ """
68
+ await self._locks.delete(key)
69
+
70
+ async def clear(self) -> None:
71
+ """
72
+ Remove all locks managed by this KeyedLock instance.
73
+ """
74
+ await self._locks.clear()
75
+
76
+
77
+ class AsyncDictionary:
78
+ """
79
+ An asyncio-safe dictionary.
80
+
81
+ This class wraps a regular dictionary with an asyncio.Lock to ensure
82
+ thread safety for concurrent async operations.
83
+
84
+ Attributes:
85
+ _dict (dict): A dictionary to store the key-value pairs.
86
+ _lock (asyncio.Lock): A lock to synchronize access to the dictionary.
87
+ """
88
+
89
+ def __init__(self):
90
+ """
91
+ Initialize the AsyncDictionary with a regular dictionary and an asyncio.Lock.
92
+ """
93
+ self._dict: dict = {}
94
+ self._lock = asyncio.Lock()
95
+
96
+ async def get(self, key: Any, default: Any | None = None) -> Any | None:
97
+ """
98
+ Get the value associated with the given key, or return default if not found.
99
+
100
+ Args:
101
+ key (Any): The key to look up.
102
+ default (Any | None, optional): The value to return if key is not found. Defaults to None.
103
+
104
+ Returns:
105
+ Any | None: The value associated with the key, or default.
106
+ """
107
+ async with self._lock:
108
+ return self._dict.get(key, default)
109
+
110
+ async def keys(self) -> list[Any]:
111
+ """
112
+ Get a list of all keys currently in the dictionary.
113
+
114
+ Returns:
115
+ list[Any]: A list of keys.
116
+ """
117
+ async with self._lock:
118
+ return list(self._dict.keys())
119
+
120
+ async def values(self) -> list[Any]:
121
+ """
122
+ Get a list of all values currently in the dictionary.
123
+
124
+ Returns:
125
+ list[Any]: A list of values.
126
+ """
127
+ async with self._lock:
128
+ return list(self._dict.values())
129
+
130
+ async def set(self, key: Any, value: Any) -> None:
131
+ """
132
+ Set the value for the given key, overwriting any existing value.
133
+
134
+ Args:
135
+ key (Any): The key to set.
136
+ value (Any): The value to associate with the key.
137
+ """
138
+ async with self._lock:
139
+ self._dict[key] = value
140
+
141
+ async def set_strict(self, key: Any, value: Any) -> None:
142
+ """
143
+ Set the value for the given key only if the key does not already exist.
144
+
145
+ Args:
146
+ key (Any): The key to set.
147
+ value (Any): The value to associate with the key.
148
+
149
+ Raises:
150
+ ValueError: If the key already exists in the dictionary.
151
+ """
152
+ async with self._lock:
153
+ if key in self._dict:
154
+ raise ValueError(f"Key '{key}' already exists")
155
+ self._dict[key] = value
156
+
157
+ async def delete(self, key: Any) -> None:
158
+ """
159
+ Remove the value associated with the given key, if it exists.
160
+
161
+ Args:
162
+ key (Any): The key to remove.
163
+ """
164
+ async with self._lock:
165
+ self._dict.pop(key, None)
166
+
167
+ async def delete_strict(self, key: Any) -> None:
168
+ """
169
+ Remove the value associated with the given key, raising an error if the key does not exist.
170
+
171
+ Args:
172
+ key (Any): The key to remove.
173
+
174
+ Raises:
175
+ ValueError: If the key does not exist in the dictionary.
176
+ """
177
+ async with self._lock:
178
+ if key not in self._dict:
179
+ raise ValueError(f"Key '{key}' does not exist")
180
+ self._dict.pop(key)
181
+
182
+ async def clear(self) -> None:
183
+ """
184
+ Remove all items from the dictionary.
185
+ """
186
+ async with self._lock:
187
+ self._dict.clear()
188
+
189
+ async def items(self) -> dict[Any, Any]:
190
+ """
191
+ Get a copy of the dictionary's items as a regular dict.
192
+
193
+ Returns:
194
+ dict[Any, Any]: A copy of the dictionary's items.
195
+ """
196
+ async with self._lock:
197
+ return dict(self._dict) # Return a copy to prevent external modification
198
+
199
+
200
+ class AsyncSafeWeakKeyDictionary(AsyncDictionary):
201
+ """
202
+ An asyncio-safe, weakly-referenced dictionary.
203
+
204
+ This class wraps a WeakKeyDictionary with an asyncio.Lock to ensure
205
+ thread safety for concurrent async operations.
206
+
207
+ Attributes:
208
+ _dict (WeakKeyDictionary): A dictionary to store the key-value pairs.
209
+ _lock (asyncio.Lock): A lock to synchronize access to the dictionary.
210
+ """
211
+
212
+ def __init__(self):
213
+ """
214
+ Initialize the AsyncSafeWeakKeyDictionary with a WeakKeyDictionary and an asyncio.Lock.
215
+ """
216
+ super().__init__()
217
+ self._dict: WeakKeyDictionary = WeakKeyDictionary()
218
+ self._lock = asyncio.Lock()
219
+
220
+
221
+ def merge_dicts(dict1: dict, dict2: dict) -> dict:
222
+ """
223
+ Merge two dictionaries, prioritizing non-null values from the first dictionary.
224
+
225
+ Args:
226
+ dict1 (dict): First dictionary (higher priority)
227
+ dict2 (dict): Second dictionary (lower priority)
228
+
229
+ Returns:
230
+ dict: Merged dictionary with non-null values from dict1 taking precedence
231
+ """
232
+ result = dict2.copy() # Start with a copy of the second dictionary
233
+ for key, value in dict1.items():
234
+ if value is not None: # Only update if value is not None
235
+ result[key] = value
236
+ return result
@@ -0,0 +1,31 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024-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
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ def ns_timestamp(seconds_float: float) -> int:
22
+ """
23
+ Convert a float timestamp in seconds to an integer nanosecond timestamp.
24
+
25
+ Args:
26
+ seconds_float (float): The timestamp in seconds (as a float).
27
+
28
+ Returns:
29
+ int: The timestamp in nanoseconds (as an integer).
30
+ """
31
+ return int(seconds_float * 1e9)
nat/plugins/.namespace ADDED
@@ -0,0 +1 @@
1
+ Note: This is a python namespace package and this directory should remain empty. Do NOT add a `__init__.py` file or any other files to this directory. This file is also needed to ensure the directory exists in git.
File without changes
@@ -0,0 +1,14 @@
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.