nvidia-nat 1.2.0rc5__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/agent/__init__.py +0 -0
  2. aiq/agent/base.py +239 -0
  3. aiq/agent/dual_node.py +67 -0
  4. aiq/agent/react_agent/__init__.py +0 -0
  5. aiq/agent/react_agent/agent.py +355 -0
  6. aiq/agent/react_agent/output_parser.py +104 -0
  7. aiq/agent/react_agent/prompt.py +41 -0
  8. aiq/agent/react_agent/register.py +149 -0
  9. aiq/agent/reasoning_agent/__init__.py +0 -0
  10. aiq/agent/reasoning_agent/reasoning_agent.py +225 -0
  11. aiq/agent/register.py +23 -0
  12. aiq/agent/rewoo_agent/__init__.py +0 -0
  13. aiq/agent/rewoo_agent/agent.py +411 -0
  14. aiq/agent/rewoo_agent/prompt.py +108 -0
  15. aiq/agent/rewoo_agent/register.py +158 -0
  16. aiq/agent/tool_calling_agent/__init__.py +0 -0
  17. aiq/agent/tool_calling_agent/agent.py +119 -0
  18. aiq/agent/tool_calling_agent/register.py +106 -0
  19. aiq/authentication/__init__.py +14 -0
  20. aiq/authentication/api_key/__init__.py +14 -0
  21. aiq/authentication/api_key/api_key_auth_provider.py +96 -0
  22. aiq/authentication/api_key/api_key_auth_provider_config.py +124 -0
  23. aiq/authentication/api_key/register.py +26 -0
  24. aiq/authentication/exceptions/__init__.py +14 -0
  25. aiq/authentication/exceptions/api_key_exceptions.py +38 -0
  26. aiq/authentication/http_basic_auth/__init__.py +0 -0
  27. aiq/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
  28. aiq/authentication/http_basic_auth/register.py +30 -0
  29. aiq/authentication/interfaces.py +93 -0
  30. aiq/authentication/oauth2/__init__.py +14 -0
  31. aiq/authentication/oauth2/oauth2_auth_code_flow_provider.py +107 -0
  32. aiq/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
  33. aiq/authentication/oauth2/register.py +25 -0
  34. aiq/authentication/register.py +21 -0
  35. aiq/builder/__init__.py +0 -0
  36. aiq/builder/builder.py +285 -0
  37. aiq/builder/component_utils.py +316 -0
  38. aiq/builder/context.py +264 -0
  39. aiq/builder/embedder.py +24 -0
  40. aiq/builder/eval_builder.py +161 -0
  41. aiq/builder/evaluator.py +29 -0
  42. aiq/builder/framework_enum.py +24 -0
  43. aiq/builder/front_end.py +73 -0
  44. aiq/builder/function.py +344 -0
  45. aiq/builder/function_base.py +380 -0
  46. aiq/builder/function_info.py +627 -0
  47. aiq/builder/intermediate_step_manager.py +174 -0
  48. aiq/builder/llm.py +25 -0
  49. aiq/builder/retriever.py +25 -0
  50. aiq/builder/user_interaction_manager.py +74 -0
  51. aiq/builder/workflow.py +148 -0
  52. aiq/builder/workflow_builder.py +1117 -0
  53. aiq/cli/__init__.py +14 -0
  54. aiq/cli/cli_utils/__init__.py +0 -0
  55. aiq/cli/cli_utils/config_override.py +231 -0
  56. aiq/cli/cli_utils/validation.py +37 -0
  57. aiq/cli/commands/__init__.py +0 -0
  58. aiq/cli/commands/configure/__init__.py +0 -0
  59. aiq/cli/commands/configure/channel/__init__.py +0 -0
  60. aiq/cli/commands/configure/channel/add.py +28 -0
  61. aiq/cli/commands/configure/channel/channel.py +36 -0
  62. aiq/cli/commands/configure/channel/remove.py +30 -0
  63. aiq/cli/commands/configure/channel/update.py +30 -0
  64. aiq/cli/commands/configure/configure.py +33 -0
  65. aiq/cli/commands/evaluate.py +139 -0
  66. aiq/cli/commands/info/__init__.py +14 -0
  67. aiq/cli/commands/info/info.py +39 -0
  68. aiq/cli/commands/info/list_channels.py +32 -0
  69. aiq/cli/commands/info/list_components.py +129 -0
  70. aiq/cli/commands/info/list_mcp.py +213 -0
  71. aiq/cli/commands/registry/__init__.py +14 -0
  72. aiq/cli/commands/registry/publish.py +88 -0
  73. aiq/cli/commands/registry/pull.py +118 -0
  74. aiq/cli/commands/registry/registry.py +38 -0
  75. aiq/cli/commands/registry/remove.py +108 -0
  76. aiq/cli/commands/registry/search.py +155 -0
  77. aiq/cli/commands/sizing/__init__.py +14 -0
  78. aiq/cli/commands/sizing/calc.py +297 -0
  79. aiq/cli/commands/sizing/sizing.py +27 -0
  80. aiq/cli/commands/start.py +246 -0
  81. aiq/cli/commands/uninstall.py +81 -0
  82. aiq/cli/commands/validate.py +47 -0
  83. aiq/cli/commands/workflow/__init__.py +14 -0
  84. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  85. aiq/cli/commands/workflow/templates/config.yml.j2 +16 -0
  86. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
  87. aiq/cli/commands/workflow/templates/register.py.j2 +5 -0
  88. aiq/cli/commands/workflow/templates/workflow.py.j2 +36 -0
  89. aiq/cli/commands/workflow/workflow.py +37 -0
  90. aiq/cli/commands/workflow/workflow_commands.py +313 -0
  91. aiq/cli/entrypoint.py +135 -0
  92. aiq/cli/main.py +44 -0
  93. aiq/cli/register_workflow.py +488 -0
  94. aiq/cli/type_registry.py +1000 -0
  95. aiq/data_models/__init__.py +14 -0
  96. aiq/data_models/api_server.py +694 -0
  97. aiq/data_models/authentication.py +231 -0
  98. aiq/data_models/common.py +171 -0
  99. aiq/data_models/component.py +54 -0
  100. aiq/data_models/component_ref.py +168 -0
  101. aiq/data_models/config.py +406 -0
  102. aiq/data_models/dataset_handler.py +123 -0
  103. aiq/data_models/discovery_metadata.py +335 -0
  104. aiq/data_models/embedder.py +27 -0
  105. aiq/data_models/evaluate.py +127 -0
  106. aiq/data_models/evaluator.py +26 -0
  107. aiq/data_models/front_end.py +26 -0
  108. aiq/data_models/function.py +30 -0
  109. aiq/data_models/function_dependencies.py +72 -0
  110. aiq/data_models/interactive.py +246 -0
  111. aiq/data_models/intermediate_step.py +302 -0
  112. aiq/data_models/invocation_node.py +38 -0
  113. aiq/data_models/llm.py +27 -0
  114. aiq/data_models/logging.py +26 -0
  115. aiq/data_models/memory.py +27 -0
  116. aiq/data_models/object_store.py +44 -0
  117. aiq/data_models/profiler.py +54 -0
  118. aiq/data_models/registry_handler.py +26 -0
  119. aiq/data_models/retriever.py +30 -0
  120. aiq/data_models/retry_mixin.py +35 -0
  121. aiq/data_models/span.py +187 -0
  122. aiq/data_models/step_adaptor.py +64 -0
  123. aiq/data_models/streaming.py +33 -0
  124. aiq/data_models/swe_bench_model.py +54 -0
  125. aiq/data_models/telemetry_exporter.py +26 -0
  126. aiq/data_models/ttc_strategy.py +30 -0
  127. aiq/embedder/__init__.py +0 -0
  128. aiq/embedder/langchain_client.py +41 -0
  129. aiq/embedder/nim_embedder.py +59 -0
  130. aiq/embedder/openai_embedder.py +43 -0
  131. aiq/embedder/register.py +24 -0
  132. aiq/eval/__init__.py +14 -0
  133. aiq/eval/config.py +60 -0
  134. aiq/eval/dataset_handler/__init__.py +0 -0
  135. aiq/eval/dataset_handler/dataset_downloader.py +106 -0
  136. aiq/eval/dataset_handler/dataset_filter.py +52 -0
  137. aiq/eval/dataset_handler/dataset_handler.py +254 -0
  138. aiq/eval/evaluate.py +506 -0
  139. aiq/eval/evaluator/__init__.py +14 -0
  140. aiq/eval/evaluator/base_evaluator.py +73 -0
  141. aiq/eval/evaluator/evaluator_model.py +45 -0
  142. aiq/eval/intermediate_step_adapter.py +99 -0
  143. aiq/eval/rag_evaluator/__init__.py +0 -0
  144. aiq/eval/rag_evaluator/evaluate.py +178 -0
  145. aiq/eval/rag_evaluator/register.py +143 -0
  146. aiq/eval/register.py +23 -0
  147. aiq/eval/remote_workflow.py +133 -0
  148. aiq/eval/runners/__init__.py +14 -0
  149. aiq/eval/runners/config.py +39 -0
  150. aiq/eval/runners/multi_eval_runner.py +54 -0
  151. aiq/eval/runtime_event_subscriber.py +52 -0
  152. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  153. aiq/eval/swe_bench_evaluator/evaluate.py +215 -0
  154. aiq/eval/swe_bench_evaluator/register.py +36 -0
  155. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  156. aiq/eval/trajectory_evaluator/evaluate.py +75 -0
  157. aiq/eval/trajectory_evaluator/register.py +40 -0
  158. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  159. aiq/eval/tunable_rag_evaluator/evaluate.py +245 -0
  160. aiq/eval/tunable_rag_evaluator/register.py +52 -0
  161. aiq/eval/usage_stats.py +41 -0
  162. aiq/eval/utils/__init__.py +0 -0
  163. aiq/eval/utils/output_uploader.py +140 -0
  164. aiq/eval/utils/tqdm_position_registry.py +40 -0
  165. aiq/eval/utils/weave_eval.py +184 -0
  166. aiq/experimental/__init__.py +0 -0
  167. aiq/experimental/decorators/__init__.py +0 -0
  168. aiq/experimental/decorators/experimental_warning_decorator.py +130 -0
  169. aiq/experimental/test_time_compute/__init__.py +0 -0
  170. aiq/experimental/test_time_compute/editing/__init__.py +0 -0
  171. aiq/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +147 -0
  172. aiq/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +204 -0
  173. aiq/experimental/test_time_compute/editing/motivation_aware_summarization.py +107 -0
  174. aiq/experimental/test_time_compute/functions/__init__.py +0 -0
  175. aiq/experimental/test_time_compute/functions/execute_score_select_function.py +105 -0
  176. aiq/experimental/test_time_compute/functions/its_tool_orchestration_function.py +205 -0
  177. aiq/experimental/test_time_compute/functions/its_tool_wrapper_function.py +146 -0
  178. aiq/experimental/test_time_compute/functions/plan_select_execute_function.py +224 -0
  179. aiq/experimental/test_time_compute/models/__init__.py +0 -0
  180. aiq/experimental/test_time_compute/models/editor_config.py +132 -0
  181. aiq/experimental/test_time_compute/models/scoring_config.py +112 -0
  182. aiq/experimental/test_time_compute/models/search_config.py +120 -0
  183. aiq/experimental/test_time_compute/models/selection_config.py +154 -0
  184. aiq/experimental/test_time_compute/models/stage_enums.py +43 -0
  185. aiq/experimental/test_time_compute/models/strategy_base.py +66 -0
  186. aiq/experimental/test_time_compute/models/tool_use_config.py +41 -0
  187. aiq/experimental/test_time_compute/models/ttc_item.py +48 -0
  188. aiq/experimental/test_time_compute/register.py +36 -0
  189. aiq/experimental/test_time_compute/scoring/__init__.py +0 -0
  190. aiq/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +168 -0
  191. aiq/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +168 -0
  192. aiq/experimental/test_time_compute/scoring/motivation_aware_scorer.py +111 -0
  193. aiq/experimental/test_time_compute/search/__init__.py +0 -0
  194. aiq/experimental/test_time_compute/search/multi_llm_planner.py +128 -0
  195. aiq/experimental/test_time_compute/search/multi_query_retrieval_search.py +122 -0
  196. aiq/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +128 -0
  197. aiq/experimental/test_time_compute/selection/__init__.py +0 -0
  198. aiq/experimental/test_time_compute/selection/best_of_n_selector.py +63 -0
  199. aiq/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +131 -0
  200. aiq/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +159 -0
  201. aiq/experimental/test_time_compute/selection/llm_based_plan_selector.py +128 -0
  202. aiq/experimental/test_time_compute/selection/threshold_selector.py +58 -0
  203. aiq/front_ends/__init__.py +14 -0
  204. aiq/front_ends/console/__init__.py +14 -0
  205. aiq/front_ends/console/authentication_flow_handler.py +233 -0
  206. aiq/front_ends/console/console_front_end_config.py +32 -0
  207. aiq/front_ends/console/console_front_end_plugin.py +96 -0
  208. aiq/front_ends/console/register.py +25 -0
  209. aiq/front_ends/cron/__init__.py +14 -0
  210. aiq/front_ends/fastapi/__init__.py +14 -0
  211. aiq/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  212. aiq/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +27 -0
  213. aiq/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +107 -0
  214. aiq/front_ends/fastapi/fastapi_front_end_config.py +234 -0
  215. aiq/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
  216. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +116 -0
  217. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +1092 -0
  218. aiq/front_ends/fastapi/html_snippets/__init__.py +14 -0
  219. aiq/front_ends/fastapi/html_snippets/auth_code_grant_success.py +35 -0
  220. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
  221. aiq/front_ends/fastapi/job_store.py +183 -0
  222. aiq/front_ends/fastapi/main.py +72 -0
  223. aiq/front_ends/fastapi/message_handler.py +298 -0
  224. aiq/front_ends/fastapi/message_validator.py +345 -0
  225. aiq/front_ends/fastapi/register.py +25 -0
  226. aiq/front_ends/fastapi/response_helpers.py +195 -0
  227. aiq/front_ends/fastapi/step_adaptor.py +321 -0
  228. aiq/front_ends/mcp/__init__.py +14 -0
  229. aiq/front_ends/mcp/mcp_front_end_config.py +32 -0
  230. aiq/front_ends/mcp/mcp_front_end_plugin.py +93 -0
  231. aiq/front_ends/mcp/register.py +27 -0
  232. aiq/front_ends/mcp/tool_converter.py +242 -0
  233. aiq/front_ends/register.py +22 -0
  234. aiq/front_ends/simple_base/__init__.py +14 -0
  235. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +54 -0
  236. aiq/llm/__init__.py +0 -0
  237. aiq/llm/aws_bedrock_llm.py +57 -0
  238. aiq/llm/nim_llm.py +46 -0
  239. aiq/llm/openai_llm.py +46 -0
  240. aiq/llm/register.py +23 -0
  241. aiq/llm/utils/__init__.py +14 -0
  242. aiq/llm/utils/env_config_value.py +94 -0
  243. aiq/llm/utils/error.py +17 -0
  244. aiq/memory/__init__.py +20 -0
  245. aiq/memory/interfaces.py +183 -0
  246. aiq/memory/models.py +112 -0
  247. aiq/meta/module_to_distro.json +3 -0
  248. aiq/meta/pypi.md +58 -0
  249. aiq/object_store/__init__.py +20 -0
  250. aiq/object_store/in_memory_object_store.py +76 -0
  251. aiq/object_store/interfaces.py +84 -0
  252. aiq/object_store/models.py +36 -0
  253. aiq/object_store/register.py +20 -0
  254. aiq/observability/__init__.py +14 -0
  255. aiq/observability/exporter/__init__.py +14 -0
  256. aiq/observability/exporter/base_exporter.py +449 -0
  257. aiq/observability/exporter/exporter.py +78 -0
  258. aiq/observability/exporter/file_exporter.py +33 -0
  259. aiq/observability/exporter/processing_exporter.py +322 -0
  260. aiq/observability/exporter/raw_exporter.py +52 -0
  261. aiq/observability/exporter/span_exporter.py +265 -0
  262. aiq/observability/exporter_manager.py +335 -0
  263. aiq/observability/mixin/__init__.py +14 -0
  264. aiq/observability/mixin/batch_config_mixin.py +26 -0
  265. aiq/observability/mixin/collector_config_mixin.py +23 -0
  266. aiq/observability/mixin/file_mixin.py +288 -0
  267. aiq/observability/mixin/file_mode.py +23 -0
  268. aiq/observability/mixin/resource_conflict_mixin.py +134 -0
  269. aiq/observability/mixin/serialize_mixin.py +61 -0
  270. aiq/observability/mixin/type_introspection_mixin.py +183 -0
  271. aiq/observability/processor/__init__.py +14 -0
  272. aiq/observability/processor/batching_processor.py +310 -0
  273. aiq/observability/processor/callback_processor.py +42 -0
  274. aiq/observability/processor/intermediate_step_serializer.py +28 -0
  275. aiq/observability/processor/processor.py +71 -0
  276. aiq/observability/register.py +96 -0
  277. aiq/observability/utils/__init__.py +14 -0
  278. aiq/observability/utils/dict_utils.py +236 -0
  279. aiq/observability/utils/time_utils.py +31 -0
  280. aiq/plugins/.namespace +1 -0
  281. aiq/profiler/__init__.py +0 -0
  282. aiq/profiler/calc/__init__.py +14 -0
  283. aiq/profiler/calc/calc_runner.py +627 -0
  284. aiq/profiler/calc/calculations.py +288 -0
  285. aiq/profiler/calc/data_models.py +188 -0
  286. aiq/profiler/calc/plot.py +345 -0
  287. aiq/profiler/callbacks/__init__.py +0 -0
  288. aiq/profiler/callbacks/agno_callback_handler.py +295 -0
  289. aiq/profiler/callbacks/base_callback_class.py +20 -0
  290. aiq/profiler/callbacks/langchain_callback_handler.py +290 -0
  291. aiq/profiler/callbacks/llama_index_callback_handler.py +205 -0
  292. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
  293. aiq/profiler/callbacks/token_usage_base_model.py +27 -0
  294. aiq/profiler/data_frame_row.py +51 -0
  295. aiq/profiler/data_models.py +24 -0
  296. aiq/profiler/decorators/__init__.py +0 -0
  297. aiq/profiler/decorators/framework_wrapper.py +131 -0
  298. aiq/profiler/decorators/function_tracking.py +254 -0
  299. aiq/profiler/forecasting/__init__.py +0 -0
  300. aiq/profiler/forecasting/config.py +18 -0
  301. aiq/profiler/forecasting/model_trainer.py +75 -0
  302. aiq/profiler/forecasting/models/__init__.py +22 -0
  303. aiq/profiler/forecasting/models/forecasting_base_model.py +40 -0
  304. aiq/profiler/forecasting/models/linear_model.py +196 -0
  305. aiq/profiler/forecasting/models/random_forest_regressor.py +268 -0
  306. aiq/profiler/inference_metrics_model.py +28 -0
  307. aiq/profiler/inference_optimization/__init__.py +0 -0
  308. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  309. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
  310. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
  311. aiq/profiler/inference_optimization/data_models.py +386 -0
  312. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  313. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
  314. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
  315. aiq/profiler/inference_optimization/llm_metrics.py +212 -0
  316. aiq/profiler/inference_optimization/prompt_caching.py +163 -0
  317. aiq/profiler/inference_optimization/token_uniqueness.py +107 -0
  318. aiq/profiler/inference_optimization/workflow_runtimes.py +72 -0
  319. aiq/profiler/intermediate_property_adapter.py +102 -0
  320. aiq/profiler/profile_runner.py +473 -0
  321. aiq/profiler/utils.py +184 -0
  322. aiq/registry_handlers/__init__.py +0 -0
  323. aiq/registry_handlers/local/__init__.py +0 -0
  324. aiq/registry_handlers/local/local_handler.py +176 -0
  325. aiq/registry_handlers/local/register_local.py +37 -0
  326. aiq/registry_handlers/metadata_factory.py +60 -0
  327. aiq/registry_handlers/package_utils.py +567 -0
  328. aiq/registry_handlers/pypi/__init__.py +0 -0
  329. aiq/registry_handlers/pypi/pypi_handler.py +251 -0
  330. aiq/registry_handlers/pypi/register_pypi.py +40 -0
  331. aiq/registry_handlers/register.py +21 -0
  332. aiq/registry_handlers/registry_handler_base.py +157 -0
  333. aiq/registry_handlers/rest/__init__.py +0 -0
  334. aiq/registry_handlers/rest/register_rest.py +56 -0
  335. aiq/registry_handlers/rest/rest_handler.py +237 -0
  336. aiq/registry_handlers/schemas/__init__.py +0 -0
  337. aiq/registry_handlers/schemas/headers.py +42 -0
  338. aiq/registry_handlers/schemas/package.py +68 -0
  339. aiq/registry_handlers/schemas/publish.py +63 -0
  340. aiq/registry_handlers/schemas/pull.py +82 -0
  341. aiq/registry_handlers/schemas/remove.py +36 -0
  342. aiq/registry_handlers/schemas/search.py +91 -0
  343. aiq/registry_handlers/schemas/status.py +47 -0
  344. aiq/retriever/__init__.py +0 -0
  345. aiq/retriever/interface.py +37 -0
  346. aiq/retriever/milvus/__init__.py +14 -0
  347. aiq/retriever/milvus/register.py +81 -0
  348. aiq/retriever/milvus/retriever.py +228 -0
  349. aiq/retriever/models.py +74 -0
  350. aiq/retriever/nemo_retriever/__init__.py +14 -0
  351. aiq/retriever/nemo_retriever/register.py +60 -0
  352. aiq/retriever/nemo_retriever/retriever.py +190 -0
  353. aiq/retriever/register.py +22 -0
  354. aiq/runtime/__init__.py +14 -0
  355. aiq/runtime/loader.py +215 -0
  356. aiq/runtime/runner.py +190 -0
  357. aiq/runtime/session.py +158 -0
  358. aiq/runtime/user_metadata.py +130 -0
  359. aiq/settings/__init__.py +0 -0
  360. aiq/settings/global_settings.py +318 -0
  361. aiq/test/.namespace +1 -0
  362. aiq/tool/__init__.py +0 -0
  363. aiq/tool/chat_completion.py +74 -0
  364. aiq/tool/code_execution/README.md +151 -0
  365. aiq/tool/code_execution/__init__.py +0 -0
  366. aiq/tool/code_execution/code_sandbox.py +267 -0
  367. aiq/tool/code_execution/local_sandbox/.gitignore +1 -0
  368. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
  369. aiq/tool/code_execution/local_sandbox/__init__.py +13 -0
  370. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
  371. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
  372. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
  373. aiq/tool/code_execution/register.py +74 -0
  374. aiq/tool/code_execution/test_code_execution_sandbox.py +414 -0
  375. aiq/tool/code_execution/utils.py +100 -0
  376. aiq/tool/datetime_tools.py +42 -0
  377. aiq/tool/document_search.py +141 -0
  378. aiq/tool/github_tools/__init__.py +0 -0
  379. aiq/tool/github_tools/create_github_commit.py +133 -0
  380. aiq/tool/github_tools/create_github_issue.py +87 -0
  381. aiq/tool/github_tools/create_github_pr.py +106 -0
  382. aiq/tool/github_tools/get_github_file.py +106 -0
  383. aiq/tool/github_tools/get_github_issue.py +166 -0
  384. aiq/tool/github_tools/get_github_pr.py +256 -0
  385. aiq/tool/github_tools/update_github_issue.py +100 -0
  386. aiq/tool/mcp/__init__.py +14 -0
  387. aiq/tool/mcp/exceptions.py +142 -0
  388. aiq/tool/mcp/mcp_client.py +255 -0
  389. aiq/tool/mcp/mcp_tool.py +96 -0
  390. aiq/tool/memory_tools/__init__.py +0 -0
  391. aiq/tool/memory_tools/add_memory_tool.py +79 -0
  392. aiq/tool/memory_tools/delete_memory_tool.py +67 -0
  393. aiq/tool/memory_tools/get_memory_tool.py +72 -0
  394. aiq/tool/nvidia_rag.py +95 -0
  395. aiq/tool/register.py +38 -0
  396. aiq/tool/retriever.py +89 -0
  397. aiq/tool/server_tools.py +66 -0
  398. aiq/utils/__init__.py +0 -0
  399. aiq/utils/data_models/__init__.py +0 -0
  400. aiq/utils/data_models/schema_validator.py +58 -0
  401. aiq/utils/debugging_utils.py +43 -0
  402. aiq/utils/dump_distro_mapping.py +32 -0
  403. aiq/utils/exception_handlers/__init__.py +0 -0
  404. aiq/utils/exception_handlers/automatic_retries.py +289 -0
  405. aiq/utils/exception_handlers/mcp.py +211 -0
  406. aiq/utils/exception_handlers/schemas.py +114 -0
  407. aiq/utils/io/__init__.py +0 -0
  408. aiq/utils/io/model_processing.py +28 -0
  409. aiq/utils/io/yaml_tools.py +119 -0
  410. aiq/utils/log_utils.py +37 -0
  411. aiq/utils/metadata_utils.py +74 -0
  412. aiq/utils/optional_imports.py +142 -0
  413. aiq/utils/producer_consumer_queue.py +178 -0
  414. aiq/utils/reactive/__init__.py +0 -0
  415. aiq/utils/reactive/base/__init__.py +0 -0
  416. aiq/utils/reactive/base/observable_base.py +65 -0
  417. aiq/utils/reactive/base/observer_base.py +55 -0
  418. aiq/utils/reactive/base/subject_base.py +79 -0
  419. aiq/utils/reactive/observable.py +59 -0
  420. aiq/utils/reactive/observer.py +76 -0
  421. aiq/utils/reactive/subject.py +131 -0
  422. aiq/utils/reactive/subscription.py +49 -0
  423. aiq/utils/settings/__init__.py +0 -0
  424. aiq/utils/settings/global_settings.py +197 -0
  425. aiq/utils/string_utils.py +38 -0
  426. aiq/utils/type_converter.py +290 -0
  427. aiq/utils/type_utils.py +484 -0
  428. aiq/utils/url_utils.py +27 -0
  429. nvidia_nat-1.2.0rc5.dist-info/METADATA +363 -0
  430. nvidia_nat-1.2.0rc5.dist-info/RECORD +435 -0
  431. nvidia_nat-1.2.0rc5.dist-info/WHEEL +5 -0
  432. nvidia_nat-1.2.0rc5.dist-info/entry_points.txt +20 -0
  433. nvidia_nat-1.2.0rc5.dist-info/licenses/LICENSE-3rd-party.txt +3686 -0
  434. nvidia_nat-1.2.0rc5.dist-info/licenses/LICENSE.md +201 -0
  435. nvidia_nat-1.2.0rc5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,231 @@
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 typing
17
+ from datetime import datetime
18
+ from datetime import timezone
19
+ from enum import Enum
20
+
21
+ import httpx
22
+ from pydantic import BaseModel
23
+ from pydantic import ConfigDict
24
+ from pydantic import Field
25
+ from pydantic import SecretStr
26
+
27
+ from aiq.data_models.common import BaseModelRegistryTag
28
+ from aiq.data_models.common import TypedBaseModel
29
+
30
+
31
+ class AuthProviderBaseConfig(TypedBaseModel, BaseModelRegistryTag):
32
+ """
33
+ Base configuration for authentication providers.
34
+ """
35
+
36
+ # Default, forbid extra fields to prevent unexpected behavior or miss typed options
37
+ model_config = ConfigDict(extra="forbid")
38
+
39
+
40
+ AuthProviderBaseConfigT = typing.TypeVar("AuthProviderBaseConfigT", bound=AuthProviderBaseConfig)
41
+
42
+
43
+ class CredentialLocation(str, Enum):
44
+ """
45
+ Enum representing the location of credentials in an HTTP request.
46
+ """
47
+ HEADER = "header"
48
+ QUERY = "query"
49
+ COOKIE = "cookie"
50
+ BODY = "body"
51
+
52
+
53
+ class AuthFlowType(str, Enum):
54
+ """
55
+ Enum representing different types of authentication flows.
56
+ """
57
+ API_KEY = "api_key"
58
+ OAUTH2_CLIENT_CREDENTIALS = "oauth2_client_credentials"
59
+ OAUTH2_AUTHORIZATION_CODE = "oauth2_auth_code_flow"
60
+ OAUTH2_PASSWORD = "oauth2_password"
61
+ OAUTH2_DEVICE_CODE = "oauth2_device_code"
62
+ HTTP_BASIC = "http_basic"
63
+ NONE = "none"
64
+
65
+
66
+ class AuthenticatedContext(BaseModel):
67
+ """
68
+ Represents an authenticated context for making requests.
69
+ """
70
+ model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
71
+ headers: dict[str, str] | httpx.Headers | None = Field(default=None,
72
+ description="HTTP headers used for authentication.")
73
+ query_params: dict[str, str] | httpx.QueryParams | None = Field(
74
+ default=None, description="Query parameters used for authentication.")
75
+ cookies: dict[str, str] | httpx.Cookies | None = Field(default=None, description="Cookies used for authentication.")
76
+ body: dict[str, str] | None = Field(default=None, description="Authenticated Body value, if applicable.")
77
+ metadata: dict[str, typing.Any] | None = Field(default=None, description="Additional metadata for the request.")
78
+
79
+
80
+ class HeaderAuthScheme(str, Enum):
81
+ """
82
+ Enum representing different header authentication schemes.
83
+ """
84
+ BEARER = "Bearer"
85
+ X_API_KEY = "X-API-Key"
86
+ BASIC = "Basic"
87
+ CUSTOM = "Custom"
88
+
89
+
90
+ class HTTPMethod(str, Enum):
91
+ """
92
+ Enum representing HTTP methods used in requests.
93
+ """
94
+ GET = "GET"
95
+ POST = "POST"
96
+ PUT = "PUT"
97
+ DELETE = "DELETE"
98
+ PATCH = "PATCH"
99
+ HEAD = "HEAD"
100
+ OPTIONS = "OPTIONS"
101
+
102
+
103
+ class CredentialKind(str, Enum):
104
+ """
105
+ Enum representing different kinds of credentials used for authentication.
106
+ """
107
+ HEADER = "header"
108
+ QUERY = "query"
109
+ COOKIE = "cookie"
110
+ BASIC = "basic_auth"
111
+ BEARER = "bearer_token"
112
+
113
+
114
+ class _CredBase(BaseModel):
115
+ """
116
+ Base class for credentials used in authentication.
117
+ """
118
+ kind: CredentialKind
119
+ model_config = ConfigDict(extra="forbid")
120
+
121
+
122
+ class HeaderCred(_CredBase):
123
+ """
124
+ Represents a credential that is sent in the HTTP header.
125
+ """
126
+ kind: typing.Literal[CredentialKind.HEADER] = CredentialKind.HEADER
127
+ name: str
128
+ value: SecretStr
129
+
130
+
131
+ class QueryCred(_CredBase):
132
+ """
133
+ Represents a credential that is sent as a query parameter in the URL.
134
+ """
135
+ kind: typing.Literal[CredentialKind.QUERY] = CredentialKind.QUERY
136
+ name: str
137
+ value: SecretStr
138
+
139
+
140
+ class CookieCred(_CredBase):
141
+ """
142
+ Represents a credential that is sent as a cookie in the HTTP request.
143
+ """
144
+ kind: typing.Literal[CredentialKind.COOKIE] = CredentialKind.COOKIE
145
+ name: str
146
+ value: SecretStr
147
+
148
+
149
+ class BasicAuthCred(_CredBase):
150
+ """
151
+ Represents credentials for HTTP Basic Authentication.
152
+ """
153
+ kind: typing.Literal[CredentialKind.BASIC] = CredentialKind.BASIC
154
+ username: SecretStr
155
+ password: SecretStr
156
+
157
+
158
+ class BearerTokenCred(_CredBase):
159
+ """
160
+ Represents a credential for Bearer Token Authentication.
161
+ """
162
+ kind: typing.Literal[CredentialKind.BEARER] = CredentialKind.BEARER
163
+ token: SecretStr
164
+ scheme: str = "Bearer"
165
+ header_name: str = "Authorization"
166
+
167
+
168
+ Credential = typing.Annotated[
169
+ typing.Union[
170
+ HeaderCred,
171
+ QueryCred,
172
+ CookieCred,
173
+ BasicAuthCred,
174
+ BearerTokenCred,
175
+ ],
176
+ Field(discriminator="kind"),
177
+ ]
178
+
179
+
180
+ class AuthResult(BaseModel):
181
+ """
182
+ Represents the result of an authentication process.
183
+ """
184
+ credentials: list[Credential] = Field(default_factory=list,
185
+ description="List of credentials used for authentication.")
186
+ token_expires_at: datetime | None = Field(default=None, description="Expiration time of the token, if applicable.")
187
+ raw: dict[str, typing.Any] = Field(default_factory=dict,
188
+ description="Raw response data from the authentication process.")
189
+
190
+ model_config = ConfigDict(extra="forbid")
191
+
192
+ def is_expired(self) -> bool:
193
+ """
194
+ Checks if the authentication token has expired.
195
+ """
196
+ return bool(self.token_expires_at and datetime.now(timezone.utc) >= self.token_expires_at)
197
+
198
+ def as_requests_kwargs(self) -> dict[str, typing.Any]:
199
+ """
200
+ Converts the authentication credentials into a format suitable for use with the `httpx` library.
201
+ """
202
+ kw: dict[str, typing.Any] = {"headers": {}, "params": {}, "cookies": {}}
203
+
204
+ for cred in self.credentials:
205
+ match cred:
206
+ case HeaderCred():
207
+ kw["headers"][cred.name] = cred.value.get_secret_value()
208
+ case QueryCred():
209
+ kw["params"][cred.name] = cred.value.get_secret_value()
210
+ case CookieCred():
211
+ kw["cookies"][cred.name] = cred.value.get_secret_value()
212
+ case BearerTokenCred():
213
+ kw["headers"][cred.header_name] = (f"{cred.scheme} {cred.token.get_secret_value()}")
214
+ case BasicAuthCred():
215
+ kw["auth"] = (
216
+ cred.username.get_secret_value(),
217
+ cred.password.get_secret_value(),
218
+ )
219
+
220
+ return kw
221
+
222
+ def attach(self, target_kwargs: dict[str, typing.Any]) -> None:
223
+ """
224
+ Attaches the authentication credentials to the target request kwargs.
225
+ """
226
+ merged = self.as_requests_kwargs()
227
+ for k, v in merged.items():
228
+ if isinstance(v, dict):
229
+ target_kwargs.setdefault(k, {}).update(v)
230
+ else:
231
+ target_kwargs[k] = v
@@ -0,0 +1,171 @@
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 inspect
17
+ import sys
18
+ import typing
19
+ from hashlib import sha512
20
+
21
+ from pydantic import AliasChoices
22
+ from pydantic import BaseModel
23
+ from pydantic import Field
24
+ from pydantic.json_schema import GenerateJsonSchema
25
+ from pydantic.json_schema import JsonSchemaMode
26
+
27
+ _LT = typing.TypeVar("_LT")
28
+
29
+
30
+ class HashableBaseModel(BaseModel):
31
+ """
32
+ Subclass of a Pydantic BaseModel that is hashable. Use in objects that need to be hashed for caching purposes.
33
+ """
34
+
35
+ def __hash__(self):
36
+ return int.from_bytes(bytes=sha512(f"{self.__class__.__qualname__}::{self.model_dump_json()}".encode(
37
+ 'utf-8', errors='ignore')).digest(),
38
+ byteorder=sys.byteorder)
39
+
40
+ def __lt__(self, other):
41
+ return self.__hash__() < other.__hash__()
42
+
43
+ def __eq__(self, other):
44
+ return self.__hash__() == other.__hash__()
45
+
46
+ def __ne__(self, other):
47
+ return self.__hash__() != other.__hash__()
48
+
49
+ def __gt__(self, other):
50
+ return self.__hash__() > other.__hash__()
51
+
52
+ @classmethod
53
+ def generate_json_schema(cls) -> dict[str, typing.Any]:
54
+ return cls.model_json_schema()
55
+
56
+ @classmethod
57
+ def write_json_schema(cls, schema_path: str) -> None:
58
+
59
+ import json
60
+
61
+ schema = cls.generate_json_schema()
62
+
63
+ with open(schema_path, "w", encoding="utf-8") as f:
64
+ json.dump(schema, f, indent=2)
65
+
66
+
67
+ def subclass_depth(cls: type) -> int:
68
+ """
69
+ Compute a class' subclass depth.
70
+ """
71
+ depth = 0
72
+ while (cls is not object and cls.__base__ is not None):
73
+ cls = cls.__base__ # type: ignore
74
+ depth += 1
75
+ return depth
76
+
77
+
78
+ def _get_origin_or_base(cls: type) -> type:
79
+ """
80
+ Get the origin of a type or the base class if it is not a generic.
81
+ """
82
+ origin = typing.get_origin(cls)
83
+ if origin is None:
84
+ return cls
85
+ return origin
86
+
87
+
88
+ class BaseModelRegistryTag:
89
+
90
+ pass
91
+
92
+
93
+ class TypedBaseModel(BaseModel):
94
+ """
95
+ Subclass of Pydantic BaseModel that allows for specifying the object type. Use in Pydantic discriminated unions.
96
+ """
97
+
98
+ type: str = Field(default="unknown",
99
+ init=False,
100
+ serialization_alias="_type",
101
+ validation_alias=AliasChoices('type', '_type'),
102
+ description="The type of the object",
103
+ title="Type",
104
+ repr=False)
105
+
106
+ full_type: typing.ClassVar[str]
107
+ _typed_model_name: typing.ClassVar[str | None] = None
108
+
109
+ def __init_subclass__(cls, name: str | None = None):
110
+ super().__init_subclass__()
111
+
112
+ if (name is not None):
113
+ module = inspect.getmodule(cls)
114
+
115
+ assert module is not None, f"Module not found for class {cls} when registering {name}"
116
+ package_name: str | None = module.__package__
117
+
118
+ # If the package name is not set, then we use the module name. Must have some namespace which will be unique
119
+ if (not package_name):
120
+ package_name = module.__name__
121
+
122
+ full_name = f"{package_name}/{name}"
123
+
124
+ # Store the type name as a class attribute - no field manipulation needed!
125
+ cls._typed_model_name = name # type: ignore
126
+ cls.full_type = full_name
127
+
128
+ def model_post_init(self, __context):
129
+ """Set the type field to the correct value after instance creation."""
130
+ if hasattr(self.__class__, '_typed_model_name') and self.__class__._typed_model_name is not None:
131
+ object.__setattr__(self, 'type', self.__class__._typed_model_name)
132
+ # If no type name is set, the field retains its default "unknown" value
133
+
134
+ @classmethod
135
+ def model_json_schema(cls,
136
+ by_alias: bool = True,
137
+ ref_template: str = '#/$defs/{model}',
138
+ schema_generator: "type[GenerateJsonSchema]" = GenerateJsonSchema,
139
+ mode: JsonSchemaMode = 'validation') -> dict:
140
+ """Override to provide correct default for type field in schema."""
141
+ schema = super().model_json_schema(by_alias=by_alias,
142
+ ref_template=ref_template,
143
+ schema_generator=schema_generator,
144
+ mode=mode)
145
+
146
+ # Fix the type field default to show the actual component type instead of "unknown"
147
+ if ('properties' in schema and 'type' in schema['properties'] and hasattr(cls, '_typed_model_name')
148
+ and cls._typed_model_name is not None):
149
+ schema['properties']['type']['default'] = cls._typed_model_name
150
+
151
+ return schema
152
+
153
+ @classmethod
154
+ def static_type(cls):
155
+ return getattr(cls, '_typed_model_name')
156
+
157
+ @classmethod
158
+ def static_full_type(cls):
159
+ return cls.full_type
160
+
161
+ @staticmethod
162
+ def discriminator(v: typing.Any) -> str | None:
163
+ # If its serialized, then we use the alias
164
+ if isinstance(v, dict):
165
+ return v.get("_type", v.get("type"))
166
+
167
+ # Otherwise we use the property
168
+ return getattr(v, "type")
169
+
170
+
171
+ TypedBaseModelT = typing.TypeVar("TypedBaseModelT", bound=TypedBaseModel)
@@ -0,0 +1,54 @@
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
+ from enum import StrEnum
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class AIQComponentEnum(StrEnum):
23
+ # Keep sorted!!!
24
+ AUTHENTICATION_PROVIDER = "auth_provider"
25
+ EMBEDDER_CLIENT = "embedder_client"
26
+ EMBEDDER_PROVIDER = "embedder_provider"
27
+ EVALUATOR = "evaluator"
28
+ FRONT_END = "front_end"
29
+ FUNCTION = "function"
30
+ TTC_STRATEGY = "ttc_strategy"
31
+ LLM_CLIENT = "llm_client"
32
+ LLM_PROVIDER = "llm_provider"
33
+ LOGGING = "logging"
34
+ MEMORY = "memory"
35
+ OBJECT_STORE = "object_store"
36
+ PACKAGE = "package"
37
+ REGISTRY_HANDLER = "registry_handler"
38
+ RETRIEVER_CLIENT = "retriever_client"
39
+ RETRIEVER_PROVIDER = "retriever_provider"
40
+ TOOL_WRAPPER = "tool_wrapper"
41
+ TRACING = "tracing"
42
+ UNDEFINED = "undefined"
43
+
44
+
45
+ class ComponentGroup(StrEnum):
46
+ # Keep sorted!!!
47
+ AUTHENTICATION = "authentication"
48
+ EMBEDDERS = "embedders"
49
+ FUNCTIONS = "functions"
50
+ TTC_STRATEGIES = "ttc_strategies"
51
+ LLMS = "llms"
52
+ MEMORY = "memory"
53
+ OBJECT_STORES = "object_stores"
54
+ RETRIEVERS = "retrievers"
@@ -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 typing
17
+ from abc import ABC
18
+ from abc import abstractmethod
19
+
20
+ from pydantic_core import CoreSchema
21
+ from pydantic_core import core_schema
22
+
23
+ from aiq.data_models.common import HashableBaseModel
24
+ from aiq.data_models.component import ComponentGroup
25
+ from aiq.utils.type_utils import override
26
+
27
+
28
+ def generate_instance_id(input_object: typing.Any) -> str:
29
+ """Generates a unique identifier for a python object derived from its python unique id.
30
+
31
+ Args:
32
+ input_object (typing.Any): The input object to receive a unique identifier.
33
+
34
+ Returns:
35
+ str: Unique identifier.
36
+ """
37
+
38
+ return str(id(input_object))
39
+
40
+
41
+ class ComponentRefNode(HashableBaseModel):
42
+ """A node type for component runtime instances reference names in a networkx digraph.
43
+
44
+ Args:
45
+ ref_name (ComponentRef): The name of the component runtime instance.
46
+ component_group (ComponentGroup): The component group in an AIQ Toolkit configuration object.
47
+ """
48
+
49
+ ref_name: "ComponentRef"
50
+ component_group: ComponentGroup
51
+
52
+
53
+ class ComponentRef(str, ABC):
54
+ """
55
+ Abstract class used for the interface to derive ComponentRef objects.
56
+ """
57
+
58
+ def __new__(cls, value: "ComponentRef | str"):
59
+ # Sublcassing str skips abstractmethod enforcement.
60
+ if len(cls.__abstractmethods__ - set(cls.__dict__)):
61
+ abstract_methods = ", ".join([f"'{method}'" for method in cls.__abstractmethods__])
62
+ raise TypeError(f"Can't instantiate abstract class {cls.__name__} "
63
+ f"without an implementation for abstract method(s) {abstract_methods}")
64
+
65
+ return super().__new__(cls, value)
66
+
67
+ @property
68
+ @abstractmethod
69
+ def component_group(self) -> ComponentGroup:
70
+ """Provides the component group this ComponentRef object represents.
71
+
72
+ Returns:
73
+ ComponentGroup: A component group of the AIQ Toolkit configuration object
74
+ """
75
+
76
+ pass
77
+
78
+ @classmethod
79
+ def __get_pydantic_core_schema__(cls, source_type, handler, **kwargs) -> CoreSchema:
80
+ return core_schema.no_info_plain_validator_function(cls)
81
+
82
+
83
+ class EmbedderRef(ComponentRef):
84
+ """
85
+ A reference to an embedder in an AIQ Toolkit configuration object.
86
+ """
87
+
88
+ @property
89
+ @override
90
+ def component_group(self):
91
+ return ComponentGroup.EMBEDDERS
92
+
93
+
94
+ class FunctionRef(ComponentRef):
95
+ """
96
+ A reference to a function in an AIQ Toolkit configuration object.
97
+ """
98
+
99
+ @property
100
+ @override
101
+ def component_group(self):
102
+ return ComponentGroup.FUNCTIONS
103
+
104
+
105
+ class LLMRef(ComponentRef):
106
+ """
107
+ A reference to an LLM in an AIQ Toolkit configuration object.
108
+ """
109
+
110
+ @property
111
+ @override
112
+ def component_group(self):
113
+ return ComponentGroup.LLMS
114
+
115
+
116
+ class MemoryRef(ComponentRef):
117
+ """
118
+ A reference to a memory in an AIQ Toolkit configuration object.
119
+ """
120
+
121
+ @property
122
+ @override
123
+ def component_group(self):
124
+ return ComponentGroup.MEMORY
125
+
126
+
127
+ class ObjectStoreRef(ComponentRef):
128
+ """
129
+ A reference to an object store in an AIQ toolkit configuration object.
130
+ """
131
+
132
+ @property
133
+ @override
134
+ def component_group(self):
135
+ return ComponentGroup.OBJECT_STORES
136
+
137
+
138
+ class RetrieverRef(ComponentRef):
139
+ """
140
+ A reference to a retriever in an AIQ Toolkit configuration object.
141
+ """
142
+
143
+ @property
144
+ @override
145
+ def component_group(self):
146
+ return ComponentGroup.RETRIEVERS
147
+
148
+
149
+ class AuthenticationRef(ComponentRef):
150
+ """
151
+ A reference to an API Authentication Provider in an AIQ Toolkit configuration object.
152
+ """
153
+
154
+ @property
155
+ @override
156
+ def component_group(self):
157
+ return ComponentGroup.AUTHENTICATION
158
+
159
+
160
+ class TTCStrategyRef(ComponentRef):
161
+ """
162
+ A reference to an TTC strategy in an NeMo Agent Toolkit configuration object.
163
+ """
164
+
165
+ @property
166
+ @override
167
+ def component_group(self):
168
+ return ComponentGroup.TTC_STRATEGIES