nvidia-nat 1.2.0__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 (435) hide show
  1. aiq/__init__.py +66 -0
  2. nat/agent/__init__.py +0 -0
  3. nat/agent/base.py +256 -0
  4. nat/agent/dual_node.py +67 -0
  5. nat/agent/react_agent/__init__.py +0 -0
  6. nat/agent/react_agent/agent.py +363 -0
  7. nat/agent/react_agent/output_parser.py +104 -0
  8. nat/agent/react_agent/prompt.py +44 -0
  9. nat/agent/react_agent/register.py +149 -0
  10. nat/agent/reasoning_agent/__init__.py +0 -0
  11. nat/agent/reasoning_agent/reasoning_agent.py +225 -0
  12. nat/agent/register.py +23 -0
  13. nat/agent/rewoo_agent/__init__.py +0 -0
  14. nat/agent/rewoo_agent/agent.py +415 -0
  15. nat/agent/rewoo_agent/prompt.py +110 -0
  16. nat/agent/rewoo_agent/register.py +157 -0
  17. nat/agent/tool_calling_agent/__init__.py +0 -0
  18. nat/agent/tool_calling_agent/agent.py +119 -0
  19. nat/agent/tool_calling_agent/register.py +106 -0
  20. nat/authentication/__init__.py +14 -0
  21. nat/authentication/api_key/__init__.py +14 -0
  22. nat/authentication/api_key/api_key_auth_provider.py +96 -0
  23. nat/authentication/api_key/api_key_auth_provider_config.py +124 -0
  24. nat/authentication/api_key/register.py +26 -0
  25. nat/authentication/exceptions/__init__.py +14 -0
  26. nat/authentication/exceptions/api_key_exceptions.py +38 -0
  27. nat/authentication/http_basic_auth/__init__.py +0 -0
  28. nat/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
  29. nat/authentication/http_basic_auth/register.py +30 -0
  30. nat/authentication/interfaces.py +93 -0
  31. nat/authentication/oauth2/__init__.py +14 -0
  32. nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +107 -0
  33. nat/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
  34. nat/authentication/oauth2/register.py +25 -0
  35. nat/authentication/register.py +21 -0
  36. nat/builder/__init__.py +0 -0
  37. nat/builder/builder.py +285 -0
  38. nat/builder/component_utils.py +316 -0
  39. nat/builder/context.py +270 -0
  40. nat/builder/embedder.py +24 -0
  41. nat/builder/eval_builder.py +161 -0
  42. nat/builder/evaluator.py +29 -0
  43. nat/builder/framework_enum.py +24 -0
  44. nat/builder/front_end.py +73 -0
  45. nat/builder/function.py +344 -0
  46. nat/builder/function_base.py +380 -0
  47. nat/builder/function_info.py +627 -0
  48. nat/builder/intermediate_step_manager.py +174 -0
  49. nat/builder/llm.py +25 -0
  50. nat/builder/retriever.py +25 -0
  51. nat/builder/user_interaction_manager.py +78 -0
  52. nat/builder/workflow.py +148 -0
  53. nat/builder/workflow_builder.py +1117 -0
  54. nat/cli/__init__.py +14 -0
  55. nat/cli/cli_utils/__init__.py +0 -0
  56. nat/cli/cli_utils/config_override.py +231 -0
  57. nat/cli/cli_utils/validation.py +37 -0
  58. nat/cli/commands/__init__.py +0 -0
  59. nat/cli/commands/configure/__init__.py +0 -0
  60. nat/cli/commands/configure/channel/__init__.py +0 -0
  61. nat/cli/commands/configure/channel/add.py +28 -0
  62. nat/cli/commands/configure/channel/channel.py +34 -0
  63. nat/cli/commands/configure/channel/remove.py +30 -0
  64. nat/cli/commands/configure/channel/update.py +30 -0
  65. nat/cli/commands/configure/configure.py +33 -0
  66. nat/cli/commands/evaluate.py +139 -0
  67. nat/cli/commands/info/__init__.py +14 -0
  68. nat/cli/commands/info/info.py +37 -0
  69. nat/cli/commands/info/list_channels.py +32 -0
  70. nat/cli/commands/info/list_components.py +129 -0
  71. nat/cli/commands/info/list_mcp.py +304 -0
  72. nat/cli/commands/registry/__init__.py +14 -0
  73. nat/cli/commands/registry/publish.py +88 -0
  74. nat/cli/commands/registry/pull.py +118 -0
  75. nat/cli/commands/registry/registry.py +36 -0
  76. nat/cli/commands/registry/remove.py +108 -0
  77. nat/cli/commands/registry/search.py +155 -0
  78. nat/cli/commands/sizing/__init__.py +14 -0
  79. nat/cli/commands/sizing/calc.py +297 -0
  80. nat/cli/commands/sizing/sizing.py +27 -0
  81. nat/cli/commands/start.py +246 -0
  82. nat/cli/commands/uninstall.py +81 -0
  83. nat/cli/commands/validate.py +47 -0
  84. nat/cli/commands/workflow/__init__.py +14 -0
  85. nat/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  86. nat/cli/commands/workflow/templates/config.yml.j2 +16 -0
  87. nat/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
  88. nat/cli/commands/workflow/templates/register.py.j2 +5 -0
  89. nat/cli/commands/workflow/templates/workflow.py.j2 +36 -0
  90. nat/cli/commands/workflow/workflow.py +37 -0
  91. nat/cli/commands/workflow/workflow_commands.py +317 -0
  92. nat/cli/entrypoint.py +135 -0
  93. nat/cli/main.py +57 -0
  94. nat/cli/register_workflow.py +488 -0
  95. nat/cli/type_registry.py +1000 -0
  96. nat/data_models/__init__.py +14 -0
  97. nat/data_models/api_server.py +716 -0
  98. nat/data_models/authentication.py +231 -0
  99. nat/data_models/common.py +171 -0
  100. nat/data_models/component.py +58 -0
  101. nat/data_models/component_ref.py +168 -0
  102. nat/data_models/config.py +410 -0
  103. nat/data_models/dataset_handler.py +169 -0
  104. nat/data_models/discovery_metadata.py +305 -0
  105. nat/data_models/embedder.py +27 -0
  106. nat/data_models/evaluate.py +127 -0
  107. nat/data_models/evaluator.py +26 -0
  108. nat/data_models/front_end.py +26 -0
  109. nat/data_models/function.py +30 -0
  110. nat/data_models/function_dependencies.py +72 -0
  111. nat/data_models/interactive.py +246 -0
  112. nat/data_models/intermediate_step.py +302 -0
  113. nat/data_models/invocation_node.py +38 -0
  114. nat/data_models/llm.py +27 -0
  115. nat/data_models/logging.py +26 -0
  116. nat/data_models/memory.py +27 -0
  117. nat/data_models/object_store.py +44 -0
  118. nat/data_models/profiler.py +54 -0
  119. nat/data_models/registry_handler.py +26 -0
  120. nat/data_models/retriever.py +30 -0
  121. nat/data_models/retry_mixin.py +35 -0
  122. nat/data_models/span.py +190 -0
  123. nat/data_models/step_adaptor.py +64 -0
  124. nat/data_models/streaming.py +33 -0
  125. nat/data_models/swe_bench_model.py +54 -0
  126. nat/data_models/telemetry_exporter.py +26 -0
  127. nat/data_models/ttc_strategy.py +30 -0
  128. nat/embedder/__init__.py +0 -0
  129. nat/embedder/nim_embedder.py +59 -0
  130. nat/embedder/openai_embedder.py +43 -0
  131. nat/embedder/register.py +22 -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 +367 -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 +241 -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 +320 -0
  224. nat/front_ends/fastapi/message_validator.py +352 -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 +36 -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 +241 -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/pypi.md +58 -0
  249. nat/object_store/__init__.py +20 -0
  250. nat/object_store/in_memory_object_store.py +76 -0
  251. nat/object_store/interfaces.py +84 -0
  252. nat/object_store/models.py +38 -0
  253. nat/object_store/register.py +20 -0
  254. nat/observability/__init__.py +14 -0
  255. nat/observability/exporter/__init__.py +14 -0
  256. nat/observability/exporter/base_exporter.py +449 -0
  257. nat/observability/exporter/exporter.py +78 -0
  258. nat/observability/exporter/file_exporter.py +33 -0
  259. nat/observability/exporter/processing_exporter.py +322 -0
  260. nat/observability/exporter/raw_exporter.py +52 -0
  261. nat/observability/exporter/span_exporter.py +288 -0
  262. nat/observability/exporter_manager.py +335 -0
  263. nat/observability/mixin/__init__.py +14 -0
  264. nat/observability/mixin/batch_config_mixin.py +26 -0
  265. nat/observability/mixin/collector_config_mixin.py +23 -0
  266. nat/observability/mixin/file_mixin.py +288 -0
  267. nat/observability/mixin/file_mode.py +23 -0
  268. nat/observability/mixin/resource_conflict_mixin.py +134 -0
  269. nat/observability/mixin/serialize_mixin.py +61 -0
  270. nat/observability/mixin/type_introspection_mixin.py +183 -0
  271. nat/observability/processor/__init__.py +14 -0
  272. nat/observability/processor/batching_processor.py +310 -0
  273. nat/observability/processor/callback_processor.py +42 -0
  274. nat/observability/processor/intermediate_step_serializer.py +28 -0
  275. nat/observability/processor/processor.py +71 -0
  276. nat/observability/register.py +96 -0
  277. nat/observability/utils/__init__.py +14 -0
  278. nat/observability/utils/dict_utils.py +236 -0
  279. nat/observability/utils/time_utils.py +31 -0
  280. nat/plugins/.namespace +1 -0
  281. nat/profiler/__init__.py +0 -0
  282. nat/profiler/calc/__init__.py +14 -0
  283. nat/profiler/calc/calc_runner.py +627 -0
  284. nat/profiler/calc/calculations.py +288 -0
  285. nat/profiler/calc/data_models.py +188 -0
  286. nat/profiler/calc/plot.py +345 -0
  287. nat/profiler/callbacks/__init__.py +0 -0
  288. nat/profiler/callbacks/agno_callback_handler.py +295 -0
  289. nat/profiler/callbacks/base_callback_class.py +20 -0
  290. nat/profiler/callbacks/langchain_callback_handler.py +290 -0
  291. nat/profiler/callbacks/llama_index_callback_handler.py +205 -0
  292. nat/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
  293. nat/profiler/callbacks/token_usage_base_model.py +27 -0
  294. nat/profiler/data_frame_row.py +51 -0
  295. nat/profiler/data_models.py +24 -0
  296. nat/profiler/decorators/__init__.py +0 -0
  297. nat/profiler/decorators/framework_wrapper.py +131 -0
  298. nat/profiler/decorators/function_tracking.py +254 -0
  299. nat/profiler/forecasting/__init__.py +0 -0
  300. nat/profiler/forecasting/config.py +18 -0
  301. nat/profiler/forecasting/model_trainer.py +75 -0
  302. nat/profiler/forecasting/models/__init__.py +22 -0
  303. nat/profiler/forecasting/models/forecasting_base_model.py +40 -0
  304. nat/profiler/forecasting/models/linear_model.py +197 -0
  305. nat/profiler/forecasting/models/random_forest_regressor.py +269 -0
  306. nat/profiler/inference_metrics_model.py +28 -0
  307. nat/profiler/inference_optimization/__init__.py +0 -0
  308. nat/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  309. nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
  310. nat/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
  311. nat/profiler/inference_optimization/data_models.py +386 -0
  312. nat/profiler/inference_optimization/experimental/__init__.py +0 -0
  313. nat/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
  314. nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
  315. nat/profiler/inference_optimization/llm_metrics.py +212 -0
  316. nat/profiler/inference_optimization/prompt_caching.py +163 -0
  317. nat/profiler/inference_optimization/token_uniqueness.py +107 -0
  318. nat/profiler/inference_optimization/workflow_runtimes.py +72 -0
  319. nat/profiler/intermediate_property_adapter.py +102 -0
  320. nat/profiler/profile_runner.py +473 -0
  321. nat/profiler/utils.py +184 -0
  322. nat/registry_handlers/__init__.py +0 -0
  323. nat/registry_handlers/local/__init__.py +0 -0
  324. nat/registry_handlers/local/local_handler.py +176 -0
  325. nat/registry_handlers/local/register_local.py +37 -0
  326. nat/registry_handlers/metadata_factory.py +60 -0
  327. nat/registry_handlers/package_utils.py +571 -0
  328. nat/registry_handlers/pypi/__init__.py +0 -0
  329. nat/registry_handlers/pypi/pypi_handler.py +251 -0
  330. nat/registry_handlers/pypi/register_pypi.py +40 -0
  331. nat/registry_handlers/register.py +21 -0
  332. nat/registry_handlers/registry_handler_base.py +157 -0
  333. nat/registry_handlers/rest/__init__.py +0 -0
  334. nat/registry_handlers/rest/register_rest.py +56 -0
  335. nat/registry_handlers/rest/rest_handler.py +237 -0
  336. nat/registry_handlers/schemas/__init__.py +0 -0
  337. nat/registry_handlers/schemas/headers.py +42 -0
  338. nat/registry_handlers/schemas/package.py +68 -0
  339. nat/registry_handlers/schemas/publish.py +68 -0
  340. nat/registry_handlers/schemas/pull.py +82 -0
  341. nat/registry_handlers/schemas/remove.py +36 -0
  342. nat/registry_handlers/schemas/search.py +91 -0
  343. nat/registry_handlers/schemas/status.py +47 -0
  344. nat/retriever/__init__.py +0 -0
  345. nat/retriever/interface.py +41 -0
  346. nat/retriever/milvus/__init__.py +14 -0
  347. nat/retriever/milvus/register.py +81 -0
  348. nat/retriever/milvus/retriever.py +228 -0
  349. nat/retriever/models.py +77 -0
  350. nat/retriever/nemo_retriever/__init__.py +14 -0
  351. nat/retriever/nemo_retriever/register.py +60 -0
  352. nat/retriever/nemo_retriever/retriever.py +190 -0
  353. nat/retriever/register.py +22 -0
  354. nat/runtime/__init__.py +14 -0
  355. nat/runtime/loader.py +220 -0
  356. nat/runtime/runner.py +195 -0
  357. nat/runtime/session.py +162 -0
  358. nat/runtime/user_metadata.py +130 -0
  359. nat/settings/__init__.py +0 -0
  360. nat/settings/global_settings.py +318 -0
  361. nat/test/.namespace +1 -0
  362. nat/tool/__init__.py +0 -0
  363. nat/tool/chat_completion.py +74 -0
  364. nat/tool/code_execution/README.md +151 -0
  365. nat/tool/code_execution/__init__.py +0 -0
  366. nat/tool/code_execution/code_sandbox.py +267 -0
  367. nat/tool/code_execution/local_sandbox/.gitignore +1 -0
  368. nat/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
  369. nat/tool/code_execution/local_sandbox/__init__.py +13 -0
  370. nat/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
  371. nat/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
  372. nat/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
  373. nat/tool/code_execution/register.py +74 -0
  374. nat/tool/code_execution/test_code_execution_sandbox.py +414 -0
  375. nat/tool/code_execution/utils.py +100 -0
  376. nat/tool/datetime_tools.py +42 -0
  377. nat/tool/document_search.py +141 -0
  378. nat/tool/github_tools/__init__.py +0 -0
  379. nat/tool/github_tools/create_github_commit.py +133 -0
  380. nat/tool/github_tools/create_github_issue.py +87 -0
  381. nat/tool/github_tools/create_github_pr.py +106 -0
  382. nat/tool/github_tools/get_github_file.py +106 -0
  383. nat/tool/github_tools/get_github_issue.py +166 -0
  384. nat/tool/github_tools/get_github_pr.py +256 -0
  385. nat/tool/github_tools/update_github_issue.py +100 -0
  386. nat/tool/mcp/__init__.py +14 -0
  387. nat/tool/mcp/exceptions.py +142 -0
  388. nat/tool/mcp/mcp_client.py +255 -0
  389. nat/tool/mcp/mcp_tool.py +96 -0
  390. nat/tool/memory_tools/__init__.py +0 -0
  391. nat/tool/memory_tools/add_memory_tool.py +79 -0
  392. nat/tool/memory_tools/delete_memory_tool.py +67 -0
  393. nat/tool/memory_tools/get_memory_tool.py +72 -0
  394. nat/tool/nvidia_rag.py +95 -0
  395. nat/tool/register.py +38 -0
  396. nat/tool/retriever.py +94 -0
  397. nat/tool/server_tools.py +66 -0
  398. nat/utils/__init__.py +0 -0
  399. nat/utils/data_models/__init__.py +0 -0
  400. nat/utils/data_models/schema_validator.py +58 -0
  401. nat/utils/debugging_utils.py +43 -0
  402. nat/utils/dump_distro_mapping.py +32 -0
  403. nat/utils/exception_handlers/__init__.py +0 -0
  404. nat/utils/exception_handlers/automatic_retries.py +289 -0
  405. nat/utils/exception_handlers/mcp.py +211 -0
  406. nat/utils/exception_handlers/schemas.py +114 -0
  407. nat/utils/io/__init__.py +0 -0
  408. nat/utils/io/model_processing.py +28 -0
  409. nat/utils/io/yaml_tools.py +119 -0
  410. nat/utils/log_utils.py +37 -0
  411. nat/utils/metadata_utils.py +74 -0
  412. nat/utils/optional_imports.py +142 -0
  413. nat/utils/producer_consumer_queue.py +178 -0
  414. nat/utils/reactive/__init__.py +0 -0
  415. nat/utils/reactive/base/__init__.py +0 -0
  416. nat/utils/reactive/base/observable_base.py +65 -0
  417. nat/utils/reactive/base/observer_base.py +55 -0
  418. nat/utils/reactive/base/subject_base.py +79 -0
  419. nat/utils/reactive/observable.py +59 -0
  420. nat/utils/reactive/observer.py +76 -0
  421. nat/utils/reactive/subject.py +131 -0
  422. nat/utils/reactive/subscription.py +49 -0
  423. nat/utils/settings/__init__.py +0 -0
  424. nat/utils/settings/global_settings.py +197 -0
  425. nat/utils/string_utils.py +38 -0
  426. nat/utils/type_converter.py +290 -0
  427. nat/utils/type_utils.py +484 -0
  428. nat/utils/url_utils.py +27 -0
  429. nvidia_nat-1.2.0.dist-info/METADATA +365 -0
  430. nvidia_nat-1.2.0.dist-info/RECORD +435 -0
  431. nvidia_nat-1.2.0.dist-info/WHEEL +5 -0
  432. nvidia_nat-1.2.0.dist-info/entry_points.txt +21 -0
  433. nvidia_nat-1.2.0.dist-info/licenses/LICENSE-3rd-party.txt +5478 -0
  434. nvidia_nat-1.2.0.dist-info/licenses/LICENSE.md +201 -0
  435. nvidia_nat-1.2.0.dist-info/top_level.txt +2 -0
nat/builder/context.py ADDED
@@ -0,0 +1,270 @@
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 typing
17
+ import uuid
18
+ from collections.abc import Awaitable
19
+ from collections.abc import Callable
20
+ from contextlib import contextmanager
21
+ from contextvars import ContextVar
22
+
23
+ from nat.builder.intermediate_step_manager import IntermediateStepManager
24
+ from nat.builder.user_interaction_manager import UserInteractionManager
25
+ from nat.data_models.authentication import AuthenticatedContext
26
+ from nat.data_models.authentication import AuthFlowType
27
+ from nat.data_models.authentication import AuthProviderBaseConfig
28
+ from nat.data_models.interactive import HumanResponse
29
+ from nat.data_models.interactive import InteractionPrompt
30
+ from nat.data_models.intermediate_step import IntermediateStep
31
+ from nat.data_models.intermediate_step import IntermediateStepPayload
32
+ from nat.data_models.intermediate_step import IntermediateStepType
33
+ from nat.data_models.intermediate_step import StreamEventData
34
+ from nat.data_models.invocation_node import InvocationNode
35
+ from nat.runtime.user_metadata import RequestAttributes
36
+ from nat.utils.reactive.subject import Subject
37
+
38
+
39
+ class Singleton(type):
40
+
41
+ def __init__(cls, name, bases, dict): # pylint: disable=W0622
42
+ super(Singleton, cls).__init__(name, bases, dict)
43
+ cls.instance = None
44
+
45
+ def __call__(cls, *args, **kw):
46
+ if cls.instance is None:
47
+ cls.instance = super(Singleton, cls).__call__(*args, **kw)
48
+ return cls.instance
49
+
50
+
51
+ class ActiveFunctionContextManager:
52
+
53
+ def __init__(self):
54
+ self._output: typing.Any | None = None
55
+
56
+ @property
57
+ def output(self) -> typing.Any | None:
58
+ return self._output
59
+
60
+ def set_output(self, output: typing.Any):
61
+ self._output = output
62
+
63
+
64
+ class ContextState(metaclass=Singleton):
65
+
66
+ def __init__(self):
67
+ self.conversation_id: ContextVar[str | None] = ContextVar("conversation_id", default=None)
68
+ self.input_message: ContextVar[typing.Any] = ContextVar("input_message", default=None)
69
+ self.user_manager: ContextVar[typing.Any] = ContextVar("user_manager", default=None)
70
+ self.metadata: ContextVar[RequestAttributes] = ContextVar("request_attributes", default=RequestAttributes())
71
+ self.event_stream: ContextVar[Subject[IntermediateStep] | None] = ContextVar("event_stream", default=Subject())
72
+ self.active_function: ContextVar[InvocationNode] = ContextVar("active_function",
73
+ default=InvocationNode(function_id="root",
74
+ function_name="root"))
75
+ self.active_span_id_stack: ContextVar[list[str]] = ContextVar("active_span_id_stack", default=["root"])
76
+
77
+ # Default is a lambda no-op which returns NoneType
78
+ self.user_input_callback: ContextVar[Callable[[InteractionPrompt], Awaitable[HumanResponse | None]]
79
+ | None] = ContextVar(
80
+ "user_input_callback",
81
+ default=UserInteractionManager.default_callback_handler)
82
+ self.user_auth_callback: ContextVar[Callable[[AuthProviderBaseConfig, AuthFlowType],
83
+ Awaitable[AuthenticatedContext]]
84
+ | None] = ContextVar("user_auth_callback", default=None)
85
+
86
+ @staticmethod
87
+ def get() -> "ContextState":
88
+ return ContextState()
89
+
90
+
91
+ class Context:
92
+
93
+ def __init__(self, context: ContextState):
94
+ self._context_state = context
95
+
96
+ @property
97
+ def input_message(self):
98
+ """
99
+ Retrieves the input message from the context state.
100
+
101
+ The input_message property is used to access the message stored in the
102
+ context state. This property returns the message as it is currently
103
+ maintained in the context.
104
+
105
+ Returns:
106
+ str: The input message retrieved from the context state.
107
+ """
108
+ return self._context_state.input_message.get()
109
+
110
+ @property
111
+ def user_manager(self):
112
+ """
113
+ Retrieves the user manager instance from the current context state.
114
+
115
+ This property provides access to the user manager through the context
116
+ state, allowing interaction with user management functionalities.
117
+
118
+ Returns:
119
+ UserManager: The instance of the user manager retrieved from the
120
+ context state.
121
+ """
122
+ return self._context_state.user_manager.get()
123
+
124
+ @property
125
+ def metadata(self):
126
+ """
127
+ Retrieves the request attributes instance from the current context state
128
+ providing access to user-defined metadata.
129
+
130
+ Returns:
131
+ RequestAttributes: The instance of the request attributes
132
+ retrieved from the context state.
133
+ """
134
+ return self._context_state.metadata.get()
135
+
136
+ @property
137
+ def user_interaction_manager(self) -> UserInteractionManager:
138
+ """
139
+ Return an instance of UserInteractionManager that uses
140
+ the current context's user_input_callback.
141
+ """
142
+ return UserInteractionManager(self._context_state)
143
+
144
+ @property
145
+ def intermediate_step_manager(self) -> IntermediateStepManager:
146
+ """
147
+ Retrieves the intermediate step manager instance from the current context state.
148
+
149
+ This property provides access to the intermediate step manager through the context
150
+ state, allowing interaction with intermediate step management functionalities.
151
+
152
+ Returns:
153
+ IntermediateStepManager: The instance of the intermediate step manager retrieved
154
+ from the context state.
155
+ """
156
+ return IntermediateStepManager(self._context_state)
157
+
158
+ @property
159
+ def conversation_id(self) -> str | None:
160
+ """
161
+ This property retrieves the conversation ID which is the unique identifier for the current chat conversation.
162
+
163
+ Returns:
164
+ str | None
165
+ """
166
+ return self._context_state.conversation_id.get()
167
+
168
+ @contextmanager
169
+ def push_active_function(self, function_name: str, input_data: typing.Any | None):
170
+ """
171
+ Set the 'active_function' in context, push an invocation node,
172
+ AND create an OTel child span for that function call.
173
+ """
174
+ parent_function_node = self._context_state.active_function.get()
175
+ current_function_id = str(uuid.uuid4())
176
+ current_function_node = InvocationNode(function_id=current_function_id,
177
+ function_name=function_name,
178
+ parent_id=parent_function_node.function_id,
179
+ parent_name=parent_function_node.function_name)
180
+
181
+ # 1) Set the active function in the contextvar
182
+ fn_token = self._context_state.active_function.set(current_function_node)
183
+
184
+ # 2) Optionally record function start as an intermediate step
185
+ step_manager = self.intermediate_step_manager
186
+ step_manager.push_intermediate_step(
187
+ IntermediateStepPayload(UUID=current_function_id,
188
+ event_type=IntermediateStepType.FUNCTION_START,
189
+ name=function_name,
190
+ data=StreamEventData(input=input_data)))
191
+
192
+ manager = ActiveFunctionContextManager()
193
+
194
+ try:
195
+ yield manager # run the function body
196
+ finally:
197
+ # 3) Record function end
198
+
199
+ data = StreamEventData(input=input_data, output=manager.output)
200
+
201
+ step_manager.push_intermediate_step(
202
+ IntermediateStepPayload(UUID=current_function_id,
203
+ event_type=IntermediateStepType.FUNCTION_END,
204
+ name=function_name,
205
+ data=data))
206
+
207
+ # 4) Unset the function contextvar
208
+ self._context_state.active_function.reset(fn_token)
209
+
210
+ @property
211
+ def active_function(self) -> InvocationNode:
212
+ """
213
+ Retrieves the active function from the context state.
214
+
215
+ This property is used to access the active function stored in the context
216
+ state. The active function is the function that is currently being executed.
217
+ """
218
+ return self._context_state.active_function.get()
219
+
220
+ @property
221
+ def active_span_id(self) -> str:
222
+ """
223
+ Retrieves the active span ID from the context state.
224
+
225
+ This property provides access to the active span ID stored in the context state. The active span ID represents
226
+ the currently running function/tool/llm/agent/etc and can be used to group telemetry data together.
227
+
228
+ Returns:
229
+ str: The active span ID.
230
+ """
231
+ return self._context_state.active_span_id_stack.get()[-1]
232
+
233
+ @property
234
+ def user_auth_callback(self) -> Callable[[AuthProviderBaseConfig, AuthFlowType], Awaitable[AuthenticatedContext]]:
235
+ """
236
+ Retrieves the user authentication callback function from the context state.
237
+
238
+ This property provides access to the user authentication callback function stored in the context state.
239
+ The callback function is responsible for handling user authentication based on the provided configuration.
240
+
241
+ Returns:
242
+ Callable[[AuthenticationBaseConfig], Awaitable[AuthenticatedContext]]: The user authentication
243
+ callback function.
244
+
245
+ Raises:
246
+ RuntimeError: If the user authentication callback is not set in the context.
247
+ """
248
+ callback = self._context_state.user_auth_callback.get()
249
+ if callback is None:
250
+ raise RuntimeError("User authentication callback is not set in the context.")
251
+ return callback
252
+
253
+ @staticmethod
254
+ def get() -> "Context":
255
+ """
256
+ Static method to retrieve the current Context instance.
257
+
258
+ This method creates and returns an instance of the Context class
259
+ by obtaining the current state from the ContextState.
260
+
261
+ Returns:
262
+ Context: The created Context instance.
263
+ """
264
+ return Context(ContextState.get())
265
+
266
+
267
+ # Compatibility aliases with previous releases
268
+
269
+ AIQContextState = ContextState
270
+ AIQContext = Context
@@ -0,0 +1,24 @@
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 nat.data_models.embedder import EmbedderBaseConfig
17
+
18
+
19
+ class EmbedderProviderInfo:
20
+
21
+ def __init__(self, *, config: EmbedderBaseConfig, description: str):
22
+ self.config = config
23
+ self.provider_type = type(config).static_type()
24
+ self.description = description
@@ -0,0 +1,161 @@
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 dataclasses
17
+ import logging
18
+ from contextlib import asynccontextmanager
19
+ from pathlib import Path
20
+
21
+ from nat.builder.builder import EvalBuilder
22
+ from nat.builder.evaluator import EvaluatorInfo
23
+ from nat.builder.framework_enum import LLMFrameworkEnum
24
+ from nat.builder.workflow_builder import WorkflowBuilder
25
+ from nat.cli.type_registry import TypeRegistry
26
+ from nat.data_models.config import Config
27
+ from nat.data_models.config import GeneralConfig
28
+ from nat.data_models.evaluate import EvalGeneralConfig
29
+ from nat.data_models.evaluator import EvaluatorBaseConfig
30
+ from nat.data_models.function import EmptyFunctionConfig
31
+ from nat.utils.type_utils import override
32
+
33
+ logger = logging.getLogger(__name__)
34
+
35
+
36
+ @dataclasses.dataclass
37
+ class ConfiguredEvaluator:
38
+ config: EvaluatorBaseConfig
39
+ instance: EvaluatorInfo
40
+
41
+
42
+ class WorkflowEvalBuilder(WorkflowBuilder, EvalBuilder):
43
+
44
+ def __init__(self,
45
+ general_config: GeneralConfig | None = None,
46
+ eval_general_config: EvalGeneralConfig | None = None,
47
+ registry: TypeRegistry | None = None):
48
+ super().__init__(general_config=general_config, registry=registry)
49
+ self.eval_general_config = eval_general_config
50
+ self._evaluators: dict[str, ConfiguredEvaluator] = {}
51
+
52
+ @override
53
+ async def add_evaluator(self, name: str, config: EvaluatorBaseConfig):
54
+ if name in self._evaluators:
55
+ raise ValueError(f"Evaluator `{name}` already exists in the list of evaluators")
56
+
57
+ try:
58
+ evaluator_info = self._registry.get_evaluator(type(config))
59
+ info_obj = await self._get_exit_stack().enter_async_context(evaluator_info.build_fn(config, self))
60
+
61
+ # Store the evaluator
62
+ self._evaluators[name] = ConfiguredEvaluator(config=config, instance=info_obj)
63
+ except Exception as e:
64
+ logger.error("Error %s adding evaluator `%s` with config `%s`", e, name, config, exc_info=True)
65
+ raise
66
+
67
+ @override
68
+ def get_evaluator(self, evaluator_name: str) -> EvaluatorInfo:
69
+
70
+ if (evaluator_name not in self._evaluators):
71
+ raise ValueError(f"Evaluator `{evaluator_name}` not found")
72
+
73
+ return self._evaluators[evaluator_name].instance
74
+
75
+ @override
76
+ def get_evaluator_config(self, evaluator_name: str) -> EvaluatorBaseConfig:
77
+
78
+ if evaluator_name not in self._evaluators:
79
+ raise ValueError(f"Evaluator `{evaluator_name}` not found")
80
+
81
+ # Return the tool configuration object
82
+ return self._evaluators[evaluator_name].config
83
+
84
+ @override
85
+ def get_max_concurrency(self) -> int:
86
+ return self.eval_general_config.max_concurrency
87
+
88
+ @override
89
+ def get_output_dir(self) -> Path:
90
+ return self.eval_general_config.output_dir
91
+
92
+ @override
93
+ def get_all_tools(self, wrapper_type: LLMFrameworkEnum | str):
94
+ tools = []
95
+ tool_wrapper_reg = self._registry.get_tool_wrapper(llm_framework=wrapper_type)
96
+ for fn_name in self._functions:
97
+ fn = self.get_function(fn_name)
98
+ try:
99
+ tools.append(tool_wrapper_reg.build_fn(fn_name, fn, self))
100
+ except Exception:
101
+ logger.exception("Error fetching tool `%s`", fn_name, exc_info=True)
102
+
103
+ return tools
104
+
105
+ def _log_build_failure_evaluator(self,
106
+ failing_evaluator_name: str,
107
+ completed_evaluators: list[str],
108
+ remaining_evaluators: list[str],
109
+ original_error: Exception) -> None:
110
+ """
111
+ Log comprehensive evaluator build failure information.
112
+
113
+ Args:
114
+ failing_evaluator_name (str): The name of the evaluator that failed to build
115
+ completed_evaluators (list[str]): List of evaluator names that were successfully built
116
+ remaining_evaluators (list[str]): List of evaluator names still to be built
117
+ original_error (Exception): The original exception that caused the failure
118
+ """
119
+ # Convert evaluator names to (name, type) tuples for consistent logging
120
+ completed_components = [(name, "evaluator") for name in completed_evaluators]
121
+ remaining_components = [(name, "evaluator") for name in remaining_evaluators]
122
+
123
+ # Use the inherited common logging method from WorkflowBuilder
124
+ self._log_build_failure(failing_evaluator_name,
125
+ "evaluator",
126
+ completed_components,
127
+ remaining_components,
128
+ original_error)
129
+
130
+ async def populate_builder(self, config: Config):
131
+ # Skip setting workflow if workflow config is EmptyFunctionConfig
132
+ skip_workflow = isinstance(config.workflow, EmptyFunctionConfig)
133
+
134
+ await super().populate_builder(config, skip_workflow)
135
+
136
+ # Initialize progress tracking for evaluators
137
+ completed_evaluators = []
138
+ remaining_evaluators = list(config.eval.evaluators.keys())
139
+
140
+ # Instantiate the evaluators with enhanced error logging
141
+ for name, evaluator_config in config.eval.evaluators.items():
142
+ try:
143
+ # Remove from remaining as we start building
144
+ remaining_evaluators.remove(name)
145
+
146
+ await self.add_evaluator(name, evaluator_config)
147
+
148
+ # Add to completed after successful build
149
+ completed_evaluators.append(name)
150
+
151
+ except Exception as e:
152
+ self._log_build_failure_evaluator(name, completed_evaluators, remaining_evaluators, e)
153
+ raise
154
+
155
+ @classmethod
156
+ @asynccontextmanager
157
+ async def from_config(cls, config: Config):
158
+
159
+ async with cls(config.general, config.eval.general, registry=None) as builder:
160
+ await builder.populate_builder(config)
161
+ yield builder
@@ -0,0 +1,29 @@
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 Callable
17
+
18
+ from nat.data_models.evaluator import EvaluatorBaseConfig
19
+ from nat.eval.evaluator.evaluator_model import EvalInput
20
+ from nat.eval.evaluator.evaluator_model import EvalOutput
21
+
22
+
23
+ class EvaluatorInfo:
24
+
25
+ def __init__(self, *, config: EvaluatorBaseConfig, evaluate_fn: Callable[[EvalInput], EvalOutput],
26
+ description: str):
27
+ self.config = config
28
+ self.evaluate_fn = evaluate_fn
29
+ self.description = description
@@ -0,0 +1,24 @@
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
+ from enum import Enum
17
+
18
+
19
+ class LLMFrameworkEnum(str, Enum):
20
+ LANGCHAIN = "langchain"
21
+ LLAMA_INDEX = "llama_index"
22
+ CREWAI = "crewai"
23
+ SEMANTIC_KERNEL = "semantic_kernel"
24
+ AGNO = "agno"
@@ -0,0 +1,73 @@
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 typing
17
+ from abc import ABC
18
+ from abc import abstractmethod
19
+
20
+ from nat.data_models.front_end import FrontEndConfigT
21
+
22
+ if (typing.TYPE_CHECKING):
23
+ from nat.data_models.config import Config
24
+
25
+
26
+ class FrontEndBase(typing.Generic[FrontEndConfigT], ABC):
27
+
28
+ def __init__(self, full_config: "Config"):
29
+ """
30
+ Initializes the FrontEndBase object with the specified NAT configuration.
31
+
32
+ Parameters
33
+ ----------
34
+ full_config : Config
35
+ The configuration object to use for the front end.
36
+ """
37
+
38
+ super().__init__()
39
+
40
+ self._full_config: "Config" = full_config
41
+ self._front_end_config: FrontEndConfigT = typing.cast(FrontEndConfigT, full_config.general.front_end)
42
+
43
+ @property
44
+ def front_end_config(self) -> FrontEndConfigT:
45
+ """
46
+ Returns the front end configuration object extracted from the NAT configuration.
47
+
48
+ Returns
49
+ -------
50
+ FrontEndConfigT
51
+ The front end configuration object.
52
+ """
53
+ return self._front_end_config
54
+
55
+ @property
56
+ def full_config(self) -> "Config":
57
+ """
58
+ Returns the full NAT configuration object.
59
+
60
+ Returns
61
+ -------
62
+ Config
63
+ The full NAT configuration object.
64
+ """
65
+
66
+ return self._full_config
67
+
68
+ @abstractmethod
69
+ async def run(self):
70
+ """
71
+ Runs the specified configuration file, launching the workflow until the front end is complete.
72
+ """
73
+ pass