aiqtoolkit 1.1.0a20250515__py3-none-any.whl → 1.1.0a20251020__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aiqtoolkit might be problematic. Click here for more details.

Files changed (319) hide show
  1. aiqtoolkit-1.1.0a20251020.dist-info/METADATA +37 -0
  2. aiqtoolkit-1.1.0a20251020.dist-info/RECORD +4 -0
  3. {aiqtoolkit-1.1.0a20250515.dist-info → aiqtoolkit-1.1.0a20251020.dist-info}/WHEEL +1 -1
  4. aiqtoolkit-1.1.0a20251020.dist-info/top_level.txt +1 -0
  5. aiq/agent/__init__.py +0 -0
  6. aiq/agent/base.py +0 -76
  7. aiq/agent/dual_node.py +0 -67
  8. aiq/agent/react_agent/__init__.py +0 -0
  9. aiq/agent/react_agent/agent.py +0 -322
  10. aiq/agent/react_agent/output_parser.py +0 -104
  11. aiq/agent/react_agent/prompt.py +0 -46
  12. aiq/agent/react_agent/register.py +0 -148
  13. aiq/agent/reasoning_agent/__init__.py +0 -0
  14. aiq/agent/reasoning_agent/reasoning_agent.py +0 -224
  15. aiq/agent/register.py +0 -23
  16. aiq/agent/rewoo_agent/__init__.py +0 -0
  17. aiq/agent/rewoo_agent/agent.py +0 -410
  18. aiq/agent/rewoo_agent/prompt.py +0 -108
  19. aiq/agent/rewoo_agent/register.py +0 -158
  20. aiq/agent/tool_calling_agent/__init__.py +0 -0
  21. aiq/agent/tool_calling_agent/agent.py +0 -123
  22. aiq/agent/tool_calling_agent/register.py +0 -105
  23. aiq/builder/__init__.py +0 -0
  24. aiq/builder/builder.py +0 -223
  25. aiq/builder/component_utils.py +0 -303
  26. aiq/builder/context.py +0 -227
  27. aiq/builder/embedder.py +0 -24
  28. aiq/builder/eval_builder.py +0 -120
  29. aiq/builder/evaluator.py +0 -29
  30. aiq/builder/framework_enum.py +0 -24
  31. aiq/builder/front_end.py +0 -73
  32. aiq/builder/function.py +0 -297
  33. aiq/builder/function_base.py +0 -376
  34. aiq/builder/function_info.py +0 -627
  35. aiq/builder/intermediate_step_manager.py +0 -135
  36. aiq/builder/llm.py +0 -25
  37. aiq/builder/retriever.py +0 -25
  38. aiq/builder/user_interaction_manager.py +0 -71
  39. aiq/builder/workflow.py +0 -143
  40. aiq/builder/workflow_builder.py +0 -757
  41. aiq/cli/__init__.py +0 -14
  42. aiq/cli/cli_utils/__init__.py +0 -0
  43. aiq/cli/cli_utils/config_override.py +0 -231
  44. aiq/cli/cli_utils/validation.py +0 -37
  45. aiq/cli/commands/__init__.py +0 -0
  46. aiq/cli/commands/configure/__init__.py +0 -0
  47. aiq/cli/commands/configure/channel/__init__.py +0 -0
  48. aiq/cli/commands/configure/channel/add.py +0 -28
  49. aiq/cli/commands/configure/channel/channel.py +0 -36
  50. aiq/cli/commands/configure/channel/remove.py +0 -30
  51. aiq/cli/commands/configure/channel/update.py +0 -30
  52. aiq/cli/commands/configure/configure.py +0 -33
  53. aiq/cli/commands/evaluate.py +0 -139
  54. aiq/cli/commands/info/__init__.py +0 -14
  55. aiq/cli/commands/info/info.py +0 -39
  56. aiq/cli/commands/info/list_channels.py +0 -32
  57. aiq/cli/commands/info/list_components.py +0 -129
  58. aiq/cli/commands/info/list_mcp.py +0 -126
  59. aiq/cli/commands/registry/__init__.py +0 -14
  60. aiq/cli/commands/registry/publish.py +0 -88
  61. aiq/cli/commands/registry/pull.py +0 -118
  62. aiq/cli/commands/registry/registry.py +0 -38
  63. aiq/cli/commands/registry/remove.py +0 -108
  64. aiq/cli/commands/registry/search.py +0 -155
  65. aiq/cli/commands/start.py +0 -250
  66. aiq/cli/commands/uninstall.py +0 -83
  67. aiq/cli/commands/validate.py +0 -47
  68. aiq/cli/commands/workflow/__init__.py +0 -14
  69. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  70. aiq/cli/commands/workflow/templates/config.yml.j2 +0 -16
  71. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +0 -22
  72. aiq/cli/commands/workflow/templates/register.py.j2 +0 -5
  73. aiq/cli/commands/workflow/templates/workflow.py.j2 +0 -36
  74. aiq/cli/commands/workflow/workflow.py +0 -37
  75. aiq/cli/commands/workflow/workflow_commands.py +0 -313
  76. aiq/cli/entrypoint.py +0 -133
  77. aiq/cli/main.py +0 -44
  78. aiq/cli/register_workflow.py +0 -408
  79. aiq/cli/type_registry.py +0 -879
  80. aiq/data_models/__init__.py +0 -14
  81. aiq/data_models/api_server.py +0 -588
  82. aiq/data_models/common.py +0 -143
  83. aiq/data_models/component.py +0 -46
  84. aiq/data_models/component_ref.py +0 -135
  85. aiq/data_models/config.py +0 -349
  86. aiq/data_models/dataset_handler.py +0 -122
  87. aiq/data_models/discovery_metadata.py +0 -286
  88. aiq/data_models/embedder.py +0 -26
  89. aiq/data_models/evaluate.py +0 -104
  90. aiq/data_models/evaluator.py +0 -26
  91. aiq/data_models/front_end.py +0 -26
  92. aiq/data_models/function.py +0 -30
  93. aiq/data_models/function_dependencies.py +0 -64
  94. aiq/data_models/interactive.py +0 -237
  95. aiq/data_models/intermediate_step.py +0 -269
  96. aiq/data_models/invocation_node.py +0 -38
  97. aiq/data_models/llm.py +0 -26
  98. aiq/data_models/logging.py +0 -26
  99. aiq/data_models/memory.py +0 -26
  100. aiq/data_models/profiler.py +0 -53
  101. aiq/data_models/registry_handler.py +0 -26
  102. aiq/data_models/retriever.py +0 -30
  103. aiq/data_models/step_adaptor.py +0 -64
  104. aiq/data_models/streaming.py +0 -33
  105. aiq/data_models/swe_bench_model.py +0 -54
  106. aiq/data_models/telemetry_exporter.py +0 -26
  107. aiq/embedder/__init__.py +0 -0
  108. aiq/embedder/langchain_client.py +0 -41
  109. aiq/embedder/nim_embedder.py +0 -58
  110. aiq/embedder/openai_embedder.py +0 -42
  111. aiq/embedder/register.py +0 -24
  112. aiq/eval/__init__.py +0 -14
  113. aiq/eval/config.py +0 -42
  114. aiq/eval/dataset_handler/__init__.py +0 -0
  115. aiq/eval/dataset_handler/dataset_downloader.py +0 -106
  116. aiq/eval/dataset_handler/dataset_filter.py +0 -52
  117. aiq/eval/dataset_handler/dataset_handler.py +0 -169
  118. aiq/eval/evaluate.py +0 -325
  119. aiq/eval/evaluator/__init__.py +0 -14
  120. aiq/eval/evaluator/evaluator_model.py +0 -44
  121. aiq/eval/intermediate_step_adapter.py +0 -93
  122. aiq/eval/rag_evaluator/__init__.py +0 -0
  123. aiq/eval/rag_evaluator/evaluate.py +0 -138
  124. aiq/eval/rag_evaluator/register.py +0 -138
  125. aiq/eval/register.py +0 -23
  126. aiq/eval/remote_workflow.py +0 -128
  127. aiq/eval/runtime_event_subscriber.py +0 -52
  128. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  129. aiq/eval/swe_bench_evaluator/evaluate.py +0 -215
  130. aiq/eval/swe_bench_evaluator/register.py +0 -36
  131. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  132. aiq/eval/trajectory_evaluator/evaluate.py +0 -118
  133. aiq/eval/trajectory_evaluator/register.py +0 -40
  134. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  135. aiq/eval/tunable_rag_evaluator/evaluate.py +0 -263
  136. aiq/eval/tunable_rag_evaluator/register.py +0 -50
  137. aiq/eval/utils/__init__.py +0 -0
  138. aiq/eval/utils/output_uploader.py +0 -131
  139. aiq/eval/utils/tqdm_position_registry.py +0 -40
  140. aiq/front_ends/__init__.py +0 -14
  141. aiq/front_ends/console/__init__.py +0 -14
  142. aiq/front_ends/console/console_front_end_config.py +0 -32
  143. aiq/front_ends/console/console_front_end_plugin.py +0 -107
  144. aiq/front_ends/console/register.py +0 -25
  145. aiq/front_ends/cron/__init__.py +0 -14
  146. aiq/front_ends/fastapi/__init__.py +0 -14
  147. aiq/front_ends/fastapi/fastapi_front_end_config.py +0 -150
  148. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +0 -103
  149. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +0 -607
  150. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +0 -80
  151. aiq/front_ends/fastapi/job_store.py +0 -161
  152. aiq/front_ends/fastapi/main.py +0 -70
  153. aiq/front_ends/fastapi/message_handler.py +0 -279
  154. aiq/front_ends/fastapi/message_validator.py +0 -345
  155. aiq/front_ends/fastapi/register.py +0 -25
  156. aiq/front_ends/fastapi/response_helpers.py +0 -195
  157. aiq/front_ends/fastapi/step_adaptor.py +0 -320
  158. aiq/front_ends/fastapi/websocket.py +0 -148
  159. aiq/front_ends/mcp/__init__.py +0 -14
  160. aiq/front_ends/mcp/mcp_front_end_config.py +0 -32
  161. aiq/front_ends/mcp/mcp_front_end_plugin.py +0 -93
  162. aiq/front_ends/mcp/register.py +0 -27
  163. aiq/front_ends/mcp/tool_converter.py +0 -242
  164. aiq/front_ends/register.py +0 -22
  165. aiq/front_ends/simple_base/__init__.py +0 -14
  166. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +0 -52
  167. aiq/llm/__init__.py +0 -0
  168. aiq/llm/nim_llm.py +0 -45
  169. aiq/llm/openai_llm.py +0 -45
  170. aiq/llm/register.py +0 -22
  171. aiq/llm/utils/__init__.py +0 -14
  172. aiq/llm/utils/env_config_value.py +0 -94
  173. aiq/llm/utils/error.py +0 -17
  174. aiq/memory/__init__.py +0 -20
  175. aiq/memory/interfaces.py +0 -183
  176. aiq/memory/models.py +0 -112
  177. aiq/meta/module_to_distro.json +0 -3
  178. aiq/meta/pypi.md +0 -58
  179. aiq/observability/__init__.py +0 -0
  180. aiq/observability/async_otel_listener.py +0 -429
  181. aiq/observability/register.py +0 -99
  182. aiq/plugins/.namespace +0 -1
  183. aiq/profiler/__init__.py +0 -0
  184. aiq/profiler/callbacks/__init__.py +0 -0
  185. aiq/profiler/callbacks/agno_callback_handler.py +0 -295
  186. aiq/profiler/callbacks/base_callback_class.py +0 -20
  187. aiq/profiler/callbacks/langchain_callback_handler.py +0 -278
  188. aiq/profiler/callbacks/llama_index_callback_handler.py +0 -205
  189. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +0 -238
  190. aiq/profiler/callbacks/token_usage_base_model.py +0 -27
  191. aiq/profiler/data_frame_row.py +0 -51
  192. aiq/profiler/decorators/__init__.py +0 -0
  193. aiq/profiler/decorators/framework_wrapper.py +0 -131
  194. aiq/profiler/decorators/function_tracking.py +0 -254
  195. aiq/profiler/forecasting/__init__.py +0 -0
  196. aiq/profiler/forecasting/config.py +0 -18
  197. aiq/profiler/forecasting/model_trainer.py +0 -75
  198. aiq/profiler/forecasting/models/__init__.py +0 -22
  199. aiq/profiler/forecasting/models/forecasting_base_model.py +0 -40
  200. aiq/profiler/forecasting/models/linear_model.py +0 -196
  201. aiq/profiler/forecasting/models/random_forest_regressor.py +0 -268
  202. aiq/profiler/inference_metrics_model.py +0 -25
  203. aiq/profiler/inference_optimization/__init__.py +0 -0
  204. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  205. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +0 -452
  206. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +0 -258
  207. aiq/profiler/inference_optimization/data_models.py +0 -386
  208. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  209. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +0 -468
  210. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +0 -405
  211. aiq/profiler/inference_optimization/llm_metrics.py +0 -212
  212. aiq/profiler/inference_optimization/prompt_caching.py +0 -163
  213. aiq/profiler/inference_optimization/token_uniqueness.py +0 -107
  214. aiq/profiler/inference_optimization/workflow_runtimes.py +0 -72
  215. aiq/profiler/intermediate_property_adapter.py +0 -102
  216. aiq/profiler/profile_runner.py +0 -433
  217. aiq/profiler/utils.py +0 -184
  218. aiq/registry_handlers/__init__.py +0 -0
  219. aiq/registry_handlers/local/__init__.py +0 -0
  220. aiq/registry_handlers/local/local_handler.py +0 -176
  221. aiq/registry_handlers/local/register_local.py +0 -37
  222. aiq/registry_handlers/metadata_factory.py +0 -60
  223. aiq/registry_handlers/package_utils.py +0 -198
  224. aiq/registry_handlers/pypi/__init__.py +0 -0
  225. aiq/registry_handlers/pypi/pypi_handler.py +0 -251
  226. aiq/registry_handlers/pypi/register_pypi.py +0 -40
  227. aiq/registry_handlers/register.py +0 -21
  228. aiq/registry_handlers/registry_handler_base.py +0 -157
  229. aiq/registry_handlers/rest/__init__.py +0 -0
  230. aiq/registry_handlers/rest/register_rest.py +0 -56
  231. aiq/registry_handlers/rest/rest_handler.py +0 -237
  232. aiq/registry_handlers/schemas/__init__.py +0 -0
  233. aiq/registry_handlers/schemas/headers.py +0 -42
  234. aiq/registry_handlers/schemas/package.py +0 -68
  235. aiq/registry_handlers/schemas/publish.py +0 -63
  236. aiq/registry_handlers/schemas/pull.py +0 -82
  237. aiq/registry_handlers/schemas/remove.py +0 -36
  238. aiq/registry_handlers/schemas/search.py +0 -91
  239. aiq/registry_handlers/schemas/status.py +0 -47
  240. aiq/retriever/__init__.py +0 -0
  241. aiq/retriever/interface.py +0 -37
  242. aiq/retriever/milvus/__init__.py +0 -14
  243. aiq/retriever/milvus/register.py +0 -81
  244. aiq/retriever/milvus/retriever.py +0 -228
  245. aiq/retriever/models.py +0 -74
  246. aiq/retriever/nemo_retriever/__init__.py +0 -14
  247. aiq/retriever/nemo_retriever/register.py +0 -60
  248. aiq/retriever/nemo_retriever/retriever.py +0 -190
  249. aiq/retriever/register.py +0 -22
  250. aiq/runtime/__init__.py +0 -14
  251. aiq/runtime/loader.py +0 -188
  252. aiq/runtime/runner.py +0 -176
  253. aiq/runtime/session.py +0 -140
  254. aiq/runtime/user_metadata.py +0 -131
  255. aiq/settings/__init__.py +0 -0
  256. aiq/settings/global_settings.py +0 -318
  257. aiq/test/.namespace +0 -1
  258. aiq/tool/__init__.py +0 -0
  259. aiq/tool/code_execution/__init__.py +0 -0
  260. aiq/tool/code_execution/code_sandbox.py +0 -188
  261. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +0 -60
  262. aiq/tool/code_execution/local_sandbox/__init__.py +0 -13
  263. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +0 -83
  264. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +0 -4
  265. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +0 -25
  266. aiq/tool/code_execution/register.py +0 -70
  267. aiq/tool/code_execution/utils.py +0 -100
  268. aiq/tool/datetime_tools.py +0 -42
  269. aiq/tool/document_search.py +0 -141
  270. aiq/tool/github_tools/__init__.py +0 -0
  271. aiq/tool/github_tools/create_github_commit.py +0 -133
  272. aiq/tool/github_tools/create_github_issue.py +0 -87
  273. aiq/tool/github_tools/create_github_pr.py +0 -106
  274. aiq/tool/github_tools/get_github_file.py +0 -106
  275. aiq/tool/github_tools/get_github_issue.py +0 -166
  276. aiq/tool/github_tools/get_github_pr.py +0 -256
  277. aiq/tool/github_tools/update_github_issue.py +0 -100
  278. aiq/tool/mcp/__init__.py +0 -14
  279. aiq/tool/mcp/mcp_client.py +0 -220
  280. aiq/tool/mcp/mcp_tool.py +0 -95
  281. aiq/tool/memory_tools/__init__.py +0 -0
  282. aiq/tool/memory_tools/add_memory_tool.py +0 -79
  283. aiq/tool/memory_tools/delete_memory_tool.py +0 -67
  284. aiq/tool/memory_tools/get_memory_tool.py +0 -72
  285. aiq/tool/nvidia_rag.py +0 -95
  286. aiq/tool/register.py +0 -37
  287. aiq/tool/retriever.py +0 -89
  288. aiq/tool/server_tools.py +0 -63
  289. aiq/utils/__init__.py +0 -0
  290. aiq/utils/data_models/__init__.py +0 -0
  291. aiq/utils/data_models/schema_validator.py +0 -58
  292. aiq/utils/debugging_utils.py +0 -43
  293. aiq/utils/exception_handlers/__init__.py +0 -0
  294. aiq/utils/exception_handlers/schemas.py +0 -114
  295. aiq/utils/io/__init__.py +0 -0
  296. aiq/utils/io/yaml_tools.py +0 -119
  297. aiq/utils/metadata_utils.py +0 -74
  298. aiq/utils/optional_imports.py +0 -142
  299. aiq/utils/producer_consumer_queue.py +0 -178
  300. aiq/utils/reactive/__init__.py +0 -0
  301. aiq/utils/reactive/base/__init__.py +0 -0
  302. aiq/utils/reactive/base/observable_base.py +0 -65
  303. aiq/utils/reactive/base/observer_base.py +0 -55
  304. aiq/utils/reactive/base/subject_base.py +0 -79
  305. aiq/utils/reactive/observable.py +0 -59
  306. aiq/utils/reactive/observer.py +0 -76
  307. aiq/utils/reactive/subject.py +0 -131
  308. aiq/utils/reactive/subscription.py +0 -49
  309. aiq/utils/settings/__init__.py +0 -0
  310. aiq/utils/settings/global_settings.py +0 -197
  311. aiq/utils/type_converter.py +0 -232
  312. aiq/utils/type_utils.py +0 -397
  313. aiq/utils/url_utils.py +0 -27
  314. aiqtoolkit-1.1.0a20250515.dist-info/METADATA +0 -331
  315. aiqtoolkit-1.1.0a20250515.dist-info/RECORD +0 -316
  316. aiqtoolkit-1.1.0a20250515.dist-info/entry_points.txt +0 -17
  317. aiqtoolkit-1.1.0a20250515.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  318. aiqtoolkit-1.1.0a20250515.dist-info/licenses/LICENSE.md +0 -201
  319. aiqtoolkit-1.1.0a20250515.dist-info/top_level.txt +0 -1
aiq/builder/evaluator.py DELETED
@@ -1,29 +0,0 @@
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 aiq.data_models.evaluator import EvaluatorBaseConfig
19
- from aiq.eval.evaluator.evaluator_model import EvalInput
20
- from aiq.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
@@ -1,24 +0,0 @@
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"
aiq/builder/front_end.py DELETED
@@ -1,73 +0,0 @@
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 aiq.data_models.front_end import FrontEndConfigT
21
-
22
- if (typing.TYPE_CHECKING):
23
- from aiq.data_models.config import AIQConfig
24
-
25
-
26
- class FrontEndBase(typing.Generic[FrontEndConfigT], ABC):
27
-
28
- def __init__(self, full_config: "AIQConfig"):
29
- """
30
- Initializes the FrontEndBase object with the specified AIQ Toolkit configuration.
31
-
32
- Parameters
33
- ----------
34
- full_config : AIQConfig
35
- The configuration object to use for the front end.
36
- """
37
-
38
- super().__init__()
39
-
40
- self._full_config: "AIQConfig" = 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 AIQ Toolkit 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) -> "AIQConfig":
57
- """
58
- Returns the full AIQ Toolkit configuration object.
59
-
60
- Returns
61
- -------
62
- AIQConfig
63
- The full AIQ Toolkit 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
aiq/builder/function.py DELETED
@@ -1,297 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- import logging
17
- import typing
18
- from abc import ABC
19
- from abc import abstractmethod
20
- from collections.abc import AsyncGenerator
21
- from collections.abc import Awaitable
22
- from collections.abc import Callable
23
-
24
- from pydantic import BaseModel
25
-
26
- from aiq.builder.context import AIQContext
27
- from aiq.builder.function_base import FunctionBase
28
- from aiq.builder.function_base import InputT
29
- from aiq.builder.function_base import SingleOutputT
30
- from aiq.builder.function_base import StreamingOutputT
31
- from aiq.builder.function_info import FunctionInfo
32
- from aiq.data_models.function import FunctionBaseConfig
33
-
34
- _InvokeFnT = Callable[[InputT], Awaitable[SingleOutputT]]
35
- _StreamFnT = Callable[[InputT], AsyncGenerator[StreamingOutputT]]
36
-
37
- _T = typing.TypeVar("_T")
38
-
39
- logger = logging.getLogger(__name__)
40
-
41
-
42
- class Function(FunctionBase[InputT, StreamingOutputT, SingleOutputT], ABC):
43
-
44
- def __init__(self,
45
- *,
46
- config: FunctionBaseConfig,
47
- description: str | None,
48
- input_schema: type[BaseModel] | None = None,
49
- streaming_output_schema: type[BaseModel] | type[None] | None = None,
50
- single_output_schema: type[BaseModel] | type[None] | None = None,
51
- converters: list[Callable[[typing.Any], typing.Any]] | None = None):
52
-
53
- super().__init__(input_schema=input_schema,
54
- streaming_output_schema=streaming_output_schema,
55
- single_output_schema=single_output_schema,
56
- converters=converters)
57
-
58
- self.config = config
59
- self.description = description
60
- self._context = AIQContext.get()
61
-
62
- def convert(self, value: typing.Any, to_type: type[_T]) -> _T:
63
- """
64
- Converts the given value to the specified type using the function's converter.
65
-
66
- Parameters
67
- ----------
68
- value : typing.Any
69
- The value to convert.
70
- to_type : type
71
- The type to convert the value to.
72
-
73
- Returns
74
- -------
75
- _T
76
- The converted value.
77
- """
78
-
79
- return self._converter.convert(value, to_type=to_type)
80
-
81
- @abstractmethod
82
- async def _ainvoke(self, value: InputT) -> SingleOutputT:
83
- pass
84
-
85
- @typing.overload
86
- async def ainvoke(self, value: InputT | typing.Any) -> SingleOutputT:
87
- ...
88
-
89
- @typing.overload
90
- async def ainvoke(self, value: InputT | typing.Any, to_type: type[_T]) -> _T:
91
- ...
92
-
93
- @typing.final
94
- async def ainvoke(self, value: InputT | typing.Any, to_type: type | None = None):
95
- """
96
- Runs the function with the given input and returns a single output from the function. This is the
97
- main entry point for running a function.
98
-
99
- Parameters
100
- ----------
101
- value : InputT | typing.Any
102
- The input to the function.
103
- to_type : type | None, optional
104
- The type to convert the output to using the function's converter. When not specified, the
105
- output will match `single_output_type`.
106
-
107
- Returns
108
- -------
109
- typing.Any
110
- The output of the function optionally converted to the specified type.
111
- """
112
-
113
- with self._context.push_active_function(self.config.type,
114
- input_data=value) as manager: # Set the current invocation context
115
- try:
116
- converted_input: InputT = self._convert_input(value) # type: ignore
117
-
118
- result = await self._ainvoke(converted_input)
119
-
120
- if to_type is not None and not isinstance(result, to_type):
121
- result = self._converter.convert(result, to_type=to_type)
122
-
123
- manager.set_output(result)
124
-
125
- return result
126
- except Exception as e:
127
- logger.error("Error with ainvoke in function with input: %s.", value, exc_info=True)
128
- raise e
129
-
130
- @typing.final
131
- async def acall_invoke(self, *args, **kwargs):
132
- """
133
- A wrapper around `ainvoke` that allows for calling the function with arbitrary arguments and keyword arguments.
134
- This is useful in scenarios where the function might be called by an LLM or other system which gives varying
135
- inputs to the function. The function will attempt to convert the args and kwargs to the input schema of the
136
- function.
137
-
138
- Returns
139
- -------
140
- SingleOutputT
141
- The output of the function.
142
- """
143
-
144
- if (len(args) == 1 and not kwargs):
145
- # If only one argument is passed, assume it is the input just like ainvoke
146
- return await self.ainvoke(value=args[0])
147
-
148
- if (not args and kwargs):
149
- # If only kwargs are passed, assume we are calling a function with named arguments in a dict
150
- # This will rely on the processing in ainvoke to convert from dict to the correct input type
151
- return await self.ainvoke(value=kwargs)
152
-
153
- # Possibly have both args and kwargs, final attempt is to use the input schema object constructor.
154
- try:
155
- input_obj = self.input_schema(*args, **kwargs)
156
-
157
- return await self.ainvoke(value=input_obj)
158
- except Exception as e:
159
- logger.error(
160
- "Error in acall_invoke() converting input to function schema. Both args and kwargs were "
161
- "supplied which could not be converted to the input schema. args: %s\nkwargs: %s\nschema: %s",
162
- args,
163
- kwargs,
164
- self.input_schema)
165
- raise e
166
-
167
- @abstractmethod
168
- async def _astream(self, value: InputT) -> AsyncGenerator[StreamingOutputT]:
169
- yield # type: ignore
170
-
171
- @typing.overload
172
- async def astream(self, value: InputT | typing.Any) -> AsyncGenerator[SingleOutputT]:
173
- ...
174
-
175
- @typing.overload
176
- async def astream(self, value: InputT | typing.Any, to_type: type[_T]) -> AsyncGenerator[_T]:
177
- ...
178
-
179
- @typing.final
180
- async def astream(self, value: InputT | typing.Any, to_type: type | None = None):
181
- """
182
- Runs the function with the given input and returns a stream of outputs from the function. This is the main entry
183
- point for running a function with streaming output.
184
-
185
- Parameters
186
- ----------
187
- value : InputT | typing.Any
188
- The input to the function.
189
- to_type : type | None, optional
190
- The type to convert the output to using the function's converter. When not specified, the
191
- output will match `streaming_output_type`.
192
-
193
- Yields
194
- ------
195
- typing.Any
196
- The output of the function optionally converted to the specified type.
197
- """
198
-
199
- with self._context.push_active_function(self.config.type, input_data=value):
200
- try:
201
- converted_input: InputT = self._convert_input(value) # type: ignore
202
-
203
- async for data in self._astream(converted_input):
204
-
205
- if to_type is not None and not isinstance(data, to_type):
206
- yield self._converter.convert(data, to_type=to_type)
207
- else:
208
- yield data
209
- except Exception as e:
210
- logger.error("Error with astream in function with input: %s.", value, exc_info=True)
211
- raise e
212
-
213
- @typing.final
214
- async def acall_stream(self, *args, **kwargs):
215
- """
216
- A wrapper around `astream` that allows for calling the function with arbitrary arguments and keyword arguments.
217
- This is useful in scenarios where the function might be called by an LLM or other system which gives varying
218
- inputs to the function. The function will attempt to convert the args and kwargs to the input schema of the
219
- function.
220
-
221
- Yields
222
- ------
223
- StreamingOutputT
224
- The output of the function.
225
- """
226
-
227
- if (len(args) == 1 and not kwargs):
228
- # If only one argument is passed, assume it is the input just like ainvoke
229
- async for x in self.astream(value=args[0]):
230
- yield x
231
-
232
- elif (not args and kwargs):
233
- # If only kwargs are passed, assume we are calling a function with named arguments in a dict
234
- # This will rely on the processing in ainvoke to convert from dict to the correct input type
235
- async for x in self.astream(value=kwargs):
236
- yield x
237
-
238
- # Possibly have both args and kwargs, final attempt is to use the input schema object constructor.
239
- else:
240
- try:
241
- input_obj = self.input_schema(*args, **kwargs)
242
-
243
- async for x in self.astream(value=input_obj):
244
- yield x
245
- except Exception as e:
246
- logger.error(
247
- "Error in acall_stream() converting input to function schema. Both args and kwargs were "
248
- "supplied which could not be converted to the input schema. args: %s\nkwargs: %s\nschema: %s",
249
- args,
250
- kwargs,
251
- self.input_schema)
252
- raise e
253
-
254
-
255
- class LambdaFunction(Function[InputT, StreamingOutputT, SingleOutputT]):
256
-
257
- def __init__(self, *, config: FunctionBaseConfig, info: FunctionInfo):
258
-
259
- super().__init__(config=config,
260
- description=info.description,
261
- input_schema=info.input_schema,
262
- streaming_output_schema=info.stream_output_schema,
263
- single_output_schema=info.single_output_schema,
264
- converters=info.converters)
265
-
266
- self._info = info
267
-
268
- self._ainvoke_fn: _InvokeFnT = info.single_fn
269
- self._astream_fn: _StreamFnT = info.stream_fn
270
-
271
- @property
272
- def has_streaming_output(self) -> bool:
273
- return self._astream_fn is not None
274
-
275
- @property
276
- def has_single_output(self) -> bool:
277
- return self._ainvoke_fn is not None
278
-
279
- async def _ainvoke(self, value: InputT) -> SingleOutputT:
280
- return await self._ainvoke_fn(value)
281
-
282
- async def _astream(self, value: InputT) -> AsyncGenerator[StreamingOutputT]:
283
- async for x in self._astream_fn(value):
284
- yield x
285
-
286
- @staticmethod
287
- def from_info(*, config: FunctionBaseConfig,
288
- info: FunctionInfo) -> 'LambdaFunction[InputT, StreamingOutputT, SingleOutputT]':
289
-
290
- input_type: type = info.input_type
291
- streaming_output_type = info.stream_output_type
292
- single_output_type = info.single_output_type
293
-
294
- class FunctionImpl(LambdaFunction[input_type, streaming_output_type, single_output_type]):
295
- pass
296
-
297
- return FunctionImpl(config=config, info=info)