aiqtoolkit 1.1.0rc6__py3-none-any.whl → 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.

Potentially problematic release.


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

Files changed (319) hide show
  1. aiqtoolkit-1.2.0.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2.0.dist-info/RECORD +4 -0
  3. {aiqtoolkit-1.1.0rc6.dist-info → aiqtoolkit-1.2.0.dist-info}/WHEEL +1 -1
  4. aiqtoolkit-1.2.0.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 -176
  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.0rc6.dist-info/METADATA +0 -331
  315. aiqtoolkit-1.1.0rc6.dist-info/RECORD +0 -316
  316. aiqtoolkit-1.1.0rc6.dist-info/entry_points.txt +0 -17
  317. aiqtoolkit-1.1.0rc6.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  318. aiqtoolkit-1.1.0rc6.dist-info/licenses/LICENSE.md +0 -201
  319. aiqtoolkit-1.1.0rc6.dist-info/top_level.txt +0 -1
@@ -1,237 +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 re
17
- import typing
18
- from enum import Enum
19
-
20
- from pydantic import BaseModel
21
- from pydantic import Discriminator
22
- from pydantic import Field
23
- from pydantic import field_validator
24
-
25
-
26
- class HumanPromptModelType(str, Enum):
27
- """
28
- Represents the type of an interaction model.
29
- """
30
- TEXT = "text"
31
- NOTIFICATION = "notification"
32
- BINARY_CHOICE = "binary_choice"
33
- RADIO = "radio"
34
- CHECKBOX = "checkbox"
35
- DROPDOWN = "dropdown"
36
-
37
-
38
- class BinaryChoiceOptionsType(str, Enum):
39
- """
40
- Represents the types of system interaction binary choice content
41
- """
42
- CONTINUE = "continue"
43
- CANCEL = "cancel"
44
-
45
-
46
- class MultipleChoiceOptionType(str, Enum):
47
- """
48
- Represents the types of system interaction multiple choice content
49
- """
50
- EMAIL = "email"
51
- SMS = "sms"
52
- PUSH = "push"
53
-
54
-
55
- class BinaryHumanPromptOption(BaseModel):
56
- """
57
- Represents a choice for a binary interaction.
58
- """
59
- id: str = Field(default="default", description="The ID of the choice.")
60
- label: str = Field(default="default", description="Label of the choice")
61
- value: typing.Any = Field(default="default", description="The value of the choice.")
62
-
63
-
64
- class MultipleChoiceOption(BaseModel):
65
- id: str = Field(default="default", description="The ID of the choice.")
66
- label: str = Field(default="default", description="The label for the multiple choice interaction.")
67
- value: str = Field(default="default", description="The value for the multiple choice interaction.")
68
- description: str = Field(default="default", description="The description for the multiple choice interaction.")
69
-
70
-
71
- class HumanResponseText(BaseModel):
72
- """
73
- Represents a text response to an interaction.
74
- """
75
- type: typing.Literal[HumanPromptModelType.TEXT] = HumanPromptModelType.TEXT
76
- text: str = Field(description="The text of the response.")
77
-
78
-
79
- class HumanResponseNotification(BaseModel):
80
- """
81
- Represents a notification response to an interaction.
82
- """
83
- type: typing.Literal[HumanPromptModelType.NOTIFICATION] = HumanPromptModelType.NOTIFICATION
84
- text: str = Field(default="Notification acknowledgement.", description="Default notification response text.")
85
-
86
-
87
- class HumanResponseBinary(BaseModel):
88
- """
89
- Represents a binary response to an interaction.
90
- """
91
- type: typing.Literal[HumanPromptModelType.BINARY_CHOICE] = HumanPromptModelType.BINARY_CHOICE
92
- selected_option: BinaryHumanPromptOption = Field(description="The selected binary response.")
93
-
94
-
95
- class HumanResponseRadio(BaseModel):
96
- """
97
- Represents a multiple choice radio response to an interaction.
98
- """
99
- type: typing.Literal[HumanPromptModelType.RADIO] = HumanPromptModelType.RADIO
100
- selected_option: MultipleChoiceOption = Field(description="The selected multiple choice radio response.")
101
-
102
-
103
- class HumanResponseCheckbox(BaseModel):
104
- """
105
- Represents a multiple choice checkbox response to an interaction.
106
- """
107
- type: typing.Literal[HumanPromptModelType.CHECKBOX] = HumanPromptModelType.CHECKBOX
108
- selected_option: MultipleChoiceOption = Field(description="The selected multiple choice checkbox response.")
109
-
110
-
111
- class HumanResponseDropdown(BaseModel):
112
- """
113
- Represents a multiple choice dropdown response to an interaction.
114
- """
115
- type: typing.Literal[HumanPromptModelType.DROPDOWN] = HumanPromptModelType.DROPDOWN
116
- selected_option: MultipleChoiceOption = Field(description="The selected multiple choice dropdown response.")
117
-
118
-
119
- HumanResponse = typing.Annotated[HumanResponseText | HumanResponseBinary | HumanResponseNotification
120
- | HumanResponseRadio | HumanResponseCheckbox
121
- | HumanResponseDropdown,
122
- Discriminator("type")]
123
-
124
-
125
- class HumanPromptBase(BaseModel):
126
- """
127
- Base interaction model to derive from
128
- """
129
- text: str = Field(description="Text prompt that will be displayed to the user.")
130
-
131
-
132
- class HumanPromptText(HumanPromptBase):
133
- """
134
- Represents a text interaction.
135
- """
136
- input_type: typing.Literal[HumanPromptModelType.TEXT] = HumanPromptModelType.TEXT
137
- placeholder: str | None = Field(description="The placeholder for the text.")
138
- required: bool = Field(default=True, description="Whether the interaction is required.")
139
-
140
-
141
- class HumanPromptNotification(HumanPromptBase):
142
- """
143
- Represents a notification interaction.
144
- """
145
- input_type: typing.Literal[HumanPromptModelType.NOTIFICATION] = HumanPromptModelType.NOTIFICATION
146
-
147
-
148
- class HumanPromptBinary(HumanPromptBase):
149
- """
150
- Represents a binary interaction.
151
- """
152
- input_type: typing.Literal[HumanPromptModelType.BINARY_CHOICE] = HumanPromptModelType.BINARY_CHOICE
153
- options: list[BinaryHumanPromptOption] = Field(description="The options for the binary interaction.")
154
-
155
- # Field validator to make sure len(options) == 2
156
- @field_validator("options", mode="before")
157
- @classmethod
158
- def validate_options(cls, options):
159
- if len(options) != 2:
160
- raise ValueError("Binary interactions must have exactly two options.")
161
- return options
162
-
163
-
164
- class HumanPromptMultipleChoiceBase(HumanPromptBase):
165
- """
166
- Represents a multiple choice interaction.
167
- """
168
- options: list[MultipleChoiceOption] = Field(description="The options for the multiple choice interaction.")
169
-
170
-
171
- class HumanPromptRadio(HumanPromptMultipleChoiceBase):
172
- """
173
- Represents a radio interaction.
174
- """
175
- input_type: typing.Literal[HumanPromptModelType.RADIO] = HumanPromptModelType.RADIO
176
-
177
-
178
- class HumanPromptCheckbox(HumanPromptMultipleChoiceBase):
179
- """
180
- Represents a checkbox interaction.
181
- """
182
- input_type: typing.Literal[HumanPromptModelType.CHECKBOX] = HumanPromptModelType.CHECKBOX
183
-
184
-
185
- class HumanPromptDropdown(HumanPromptMultipleChoiceBase):
186
- """
187
- Represents a dropdown interaction.
188
- """
189
- input_type: typing.Literal[HumanPromptModelType.DROPDOWN] = HumanPromptModelType.DROPDOWN
190
-
191
-
192
- HumanPrompt = typing.Annotated[HumanPromptText | HumanPromptNotification | HumanPromptBinary | HumanPromptRadio
193
- | HumanPromptCheckbox | HumanPromptDropdown,
194
- Discriminator("input_type")]
195
-
196
-
197
- class InteractionStatus(str, Enum):
198
- """
199
- Represents the status of an interaction.
200
- """
201
- PENDING = "pending"
202
- IN_PROGRESS = "in_progress"
203
- COMPLETED = "completed"
204
- FAILED = "failed"
205
-
206
-
207
- class InteractionBase(BaseModel):
208
- """
209
- Represents a system-human interaction.
210
- """
211
- id: str = Field(description="The ID of the interaction.")
212
- type: str = Field(default="system_human_interaction", description="The type of the interaction.")
213
- thread_id: str | None = Field(description="The thread ID of the interaction.", default=None)
214
- parent_id: str | None = Field(description="The parent ID of the interaction.", default=None)
215
- status: InteractionStatus = Field(description="The status of the interaction.", default=InteractionStatus.PENDING)
216
- timestamp: str = Field(description="The timestamp of the interaction.")
217
-
218
- @field_validator("timestamp", mode="before")
219
- @classmethod
220
- def validate_timestamp(cls, timestamp):
221
- if not re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z", timestamp):
222
- raise ValueError("Timestamp must be in the format 2025-01-13T10:00:03Z")
223
- return timestamp
224
-
225
-
226
- class InteractionPrompt(InteractionBase):
227
- """
228
- Represents a system-human interaction with a prompt.
229
- """
230
- content: HumanPrompt = Field(description="The content of the interaction.")
231
-
232
-
233
- class InteractionResponse(InteractionBase):
234
- """
235
- Represents a system-human interaction with a response.
236
- """
237
- content: HumanResponse = Field(description="The content of the interaction.")
@@ -1,269 +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 time
17
- import typing
18
- import uuid
19
- from enum import Enum
20
-
21
- from pydantic import BaseModel
22
- from pydantic import ConfigDict
23
- from pydantic import Field
24
- from pydantic import model_validator
25
-
26
- from aiq.builder.framework_enum import LLMFrameworkEnum
27
- from aiq.data_models.invocation_node import InvocationNode
28
- from aiq.profiler.callbacks.token_usage_base_model import TokenUsageBaseModel
29
-
30
-
31
- class IntermediateStepCategory(str, Enum):
32
- LLM = "LLM"
33
- TOOL = "TOOL"
34
- WORKFLOW = "WORKFLOW"
35
- TASK = "TASK"
36
- FUNCTION = "FUNCTION"
37
- CUSTOM = "CUSTOM"
38
- SPAN = "SPAN"
39
-
40
-
41
- class IntermediateStepType(str, Enum):
42
- LLM_START = "LLM_START"
43
- LLM_END = "LLM_END"
44
- LLM_NEW_TOKEN = "LLM_NEW_TOKEN"
45
- TOOL_START = "TOOL_START"
46
- TOOL_END = "TOOL_END"
47
- WORKFLOW_START = "WORKFLOW_START"
48
- WORKFLOW_END = "WORKFLOW_END"
49
- TASK_START = "TASK_START"
50
- TASK_END = "TASK_END"
51
- FUNCTION_START = "FUNCTION_START"
52
- FUNCTION_END = "FUNCTION_END"
53
- CUSTOM_START = "CUSTOM_START"
54
- CUSTOM_END = "CUSTOM_END"
55
- SPAN_START = "SPAN_START"
56
- SPAN_CHUNK = "SPAN_CHUNK"
57
- SPAN_END = "SPAN_END"
58
-
59
-
60
- class IntermediateStepState(str, Enum):
61
- START = "START"
62
- CHUNK = "CHUNK"
63
- END = "END"
64
-
65
-
66
- class StreamEventData(BaseModel):
67
- """
68
- AIQStreamEventData is a data model that represents the data field in an streaming event.
69
- """
70
-
71
- # Allow extra fields in the model_config to support derived models
72
- model_config = ConfigDict(extra="allow")
73
-
74
- input: typing.Any | None = None
75
- output: typing.Any | None = None
76
- chunk: typing.Any | None = None
77
-
78
-
79
- class UsageInfo(BaseModel):
80
- token_usage: TokenUsageBaseModel = TokenUsageBaseModel()
81
- num_llm_calls: int = 0
82
- seconds_between_calls: int = 0
83
-
84
-
85
- class TraceMetadata(BaseModel):
86
- chat_responses: typing.Any | None = None
87
- chat_inputs: typing.Any | None = None
88
- tool_inputs: typing.Any | None = None
89
- tool_outputs: typing.Any | None = None
90
- tool_info: typing.Any | None = None
91
- span_inputs: typing.Any | None = None
92
- span_outputs: typing.Any | None = None
93
- provided_metadata: typing.Any | None = None
94
-
95
- # Allow extra fields in the model_config to support derived models
96
- model_config = ConfigDict(extra="allow")
97
-
98
-
99
- class IntermediateStepPayload(BaseModel):
100
- """
101
- AIQIntermediateStep is a data model that represents an intermediate step in the AIQ Toolkit. Intermediate steps are
102
- captured while a request is running and can be used to show progress or to evaluate the path a workflow took to get
103
- a response.
104
- """
105
-
106
- # Allow extra fields in the model_config to support derived models
107
- model_config = ConfigDict(extra="allow")
108
-
109
- event_type: IntermediateStepType
110
- # Create an event timestamp field with the default being a lambda that returns the current time
111
- event_timestamp: float = Field(default_factory=lambda: time.time())
112
- span_event_timestamp: float | None = None # Used for tracking the start time of a task if this is end
113
- framework: LLMFrameworkEnum | None = None
114
- name: str | None = None
115
- tags: list[str] | None = None
116
- metadata: dict[str, typing.Any] | TraceMetadata | None = None
117
- data: StreamEventData | None = None
118
- usage_info: UsageInfo | None = None
119
- UUID: str = Field(default_factory=lambda: str(uuid.uuid4()))
120
-
121
- @property
122
- def event_category(self) -> IntermediateStepCategory: # pylint: disable=too-many-return-statements
123
- match self.event_type:
124
- case IntermediateStepType.LLM_START:
125
- return IntermediateStepCategory.LLM
126
- case IntermediateStepType.LLM_END:
127
- return IntermediateStepCategory.LLM
128
- case IntermediateStepType.LLM_NEW_TOKEN:
129
- return IntermediateStepCategory.LLM
130
- case IntermediateStepType.TOOL_START:
131
- return IntermediateStepCategory.TOOL
132
- case IntermediateStepType.TOOL_END:
133
- return IntermediateStepCategory.TOOL
134
- case IntermediateStepType.WORKFLOW_START:
135
- return IntermediateStepCategory.WORKFLOW
136
- case IntermediateStepType.WORKFLOW_END:
137
- return IntermediateStepCategory.WORKFLOW
138
- case IntermediateStepType.TASK_START:
139
- return IntermediateStepCategory.TASK
140
- case IntermediateStepType.TASK_END:
141
- return IntermediateStepCategory.TASK
142
- case IntermediateStepType.FUNCTION_START:
143
- return IntermediateStepCategory.FUNCTION
144
- case IntermediateStepType.FUNCTION_END:
145
- return IntermediateStepCategory.FUNCTION
146
- case IntermediateStepType.CUSTOM_START:
147
- return IntermediateStepCategory.CUSTOM
148
- case IntermediateStepType.CUSTOM_END:
149
- return IntermediateStepCategory.CUSTOM
150
- case IntermediateStepType.SPAN_START:
151
- return IntermediateStepCategory.SPAN
152
- case IntermediateStepType.SPAN_CHUNK:
153
- return IntermediateStepCategory.SPAN
154
- case IntermediateStepType.SPAN_END:
155
- return IntermediateStepCategory.SPAN
156
- case _:
157
- raise ValueError(f"Unknown event type: {self.event_type}")
158
-
159
- @property
160
- def event_state(self) -> IntermediateStepState: # pylint: disable=too-many-return-statements
161
- match self.event_type:
162
- case IntermediateStepType.LLM_START:
163
- return IntermediateStepState.START
164
- case IntermediateStepType.LLM_END:
165
- return IntermediateStepState.END
166
- case IntermediateStepType.LLM_NEW_TOKEN:
167
- return IntermediateStepState.CHUNK
168
- case IntermediateStepType.TOOL_START:
169
- return IntermediateStepState.START
170
- case IntermediateStepType.TOOL_END:
171
- return IntermediateStepState.END
172
- case IntermediateStepType.WORKFLOW_START:
173
- return IntermediateStepState.START
174
- case IntermediateStepType.WORKFLOW_END:
175
- return IntermediateStepState.END
176
- case IntermediateStepType.TASK_START:
177
- return IntermediateStepState.START
178
- case IntermediateStepType.TASK_END:
179
- return IntermediateStepState.END
180
- case IntermediateStepType.FUNCTION_START:
181
- return IntermediateStepState.START
182
- case IntermediateStepType.FUNCTION_END:
183
- return IntermediateStepState.END
184
- case IntermediateStepType.CUSTOM_START:
185
- return IntermediateStepState.START
186
- case IntermediateStepType.CUSTOM_END:
187
- return IntermediateStepState.END
188
- case IntermediateStepType.SPAN_START:
189
- return IntermediateStepState.START
190
- case IntermediateStepType.SPAN_CHUNK:
191
- return IntermediateStepState.CHUNK
192
- case IntermediateStepType.SPAN_END:
193
- return IntermediateStepState.END
194
- case _:
195
- raise ValueError(f"Unknown event type: {self.event_type}")
196
-
197
- @model_validator(mode="after")
198
- def check_span_event_timestamp(self) -> "IntermediateStepPayload":
199
- if self.event_state != IntermediateStepState.END and self.span_event_timestamp is not None:
200
- raise ValueError("span_event_timestamp can only be provided for events with an END state")
201
- return self
202
-
203
-
204
- class IntermediateStep(BaseModel):
205
- """
206
- AIQIntermediateStep is a data model that represents an intermediate step in the AIQ Toolkit. Intermediate steps are
207
- captured while a request is running and can be used to show progress or to evaluate the path a workflow took to get
208
- a response.
209
- """
210
-
211
- # Allow extra fields in the model_config to support derived models
212
- model_config = ConfigDict(extra="forbid")
213
-
214
- function_ancestry: InvocationNode | None = InvocationNode(function_name="N/A", function_id="N/A")
215
-
216
- payload: IntermediateStepPayload
217
-
218
- # ===== Payload Properties =====
219
- @property
220
- def event_type(self) -> IntermediateStepType:
221
- return self.payload.event_type
222
-
223
- @property
224
- def event_timestamp(self) -> float:
225
- return self.payload.event_timestamp
226
-
227
- @property
228
- def span_event_timestamp(self) -> float | None:
229
- return self.payload.span_event_timestamp
230
-
231
- @property
232
- def framework(self) -> LLMFrameworkEnum | None:
233
- return self.payload.framework
234
-
235
- @property
236
- def name(self) -> str | None:
237
- return self.payload.name
238
-
239
- @property
240
- def tags(self) -> list[str] | None:
241
- return self.payload.tags
242
-
243
- @property
244
- def metadata(self) -> dict[str, typing.Any] | TraceMetadata | None:
245
- return self.payload.metadata
246
-
247
- @property
248
- def data(self) -> StreamEventData | None:
249
- return self.payload.data
250
-
251
- @property
252
- def usage_info(self) -> UsageInfo | None:
253
- return self.payload.usage_info
254
-
255
- @property
256
- def UUID(self) -> str: # pylint: disable=invalid-name
257
- return self.payload.UUID
258
-
259
- @property
260
- def event_category(self) -> IntermediateStepCategory:
261
- return self.payload.event_category
262
-
263
- @property
264
- def event_state(self) -> IntermediateStepState:
265
- return self.payload.event_state
266
-
267
- @property
268
- def parent_id(self) -> str | None:
269
- return self.function_ancestry.function_id if self.function_ancestry else None
@@ -1,38 +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 pydantic import BaseModel
17
-
18
-
19
- class InvocationNode(BaseModel):
20
- """
21
- Represents a node in an invocation call graph.
22
-
23
- The InvocationNode class encapsulates the details of a specific function
24
- invocation within a call graph. It stores the unique identifier of the
25
- invocation, the function name, and optional details about the parent
26
- node (if any). This class is useful for tracing the execution flow
27
- in a system or application.
28
-
29
- Attributes:
30
- function_id (str): Unique identifier for the function invocation.
31
- function_name (str): Name of the function invoked.
32
- parent_id (str | None): Unique identifier of the parent invocation, if applicable. Defaults to None.
33
- parent_name (str | None): Name of the parent function invoked, if applicable. Defaults to None.
34
- """
35
- function_id: str
36
- function_name: str
37
- parent_id: str | None = None
38
- parent_name: str | None = None
aiq/data_models/llm.py DELETED
@@ -1,26 +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
- import typing
17
-
18
- from .common import BaseModelRegistryTag
19
- from .common import TypedBaseModel
20
-
21
-
22
- class LLMBaseConfig(TypedBaseModel, BaseModelRegistryTag):
23
- pass
24
-
25
-
26
- LLMBaseConfigT = typing.TypeVar("LLMBaseConfigT", bound=LLMBaseConfig)
@@ -1,26 +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
- import typing
17
-
18
- from .common import BaseModelRegistryTag
19
- from .common import TypedBaseModel
20
-
21
-
22
- class LoggingBaseConfig(TypedBaseModel, BaseModelRegistryTag):
23
- pass
24
-
25
-
26
- LoggingMethodConfigT = typing.TypeVar("LoggingMethodConfigT", bound=LoggingBaseConfig)
aiq/data_models/memory.py DELETED
@@ -1,26 +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
- import typing
17
-
18
- from .common import BaseModelRegistryTag
19
- from .common import TypedBaseModel
20
-
21
-
22
- class MemoryBaseConfig(TypedBaseModel, BaseModelRegistryTag):
23
- pass
24
-
25
-
26
- MemoryBaseConfigT = typing.TypeVar("MemoryBaseConfigT", bound=MemoryBaseConfig)
@@ -1,53 +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 pydantic import BaseModel
17
-
18
-
19
- class PromptCachingConfig(BaseModel):
20
- enable: bool = False
21
- min_frequency: float = 0.5
22
-
23
-
24
- class BottleneckConfig(BaseModel):
25
- enable_simple_stack: bool = False
26
- enable_nested_stack: bool = False
27
-
28
-
29
- class ConcurrencySpikeConfig(BaseModel):
30
- enable: bool = False
31
- spike_threshold: int = 1
32
-
33
-
34
- class PrefixSpanConfig(BaseModel):
35
- enable: bool = False
36
- min_support: float = 2
37
- min_coverage: float = 0
38
- max_text_len: int = 1000
39
- top_k: int = 10
40
- chain_with_common_prefixes: bool = False
41
-
42
-
43
- class ProfilerConfig(BaseModel):
44
-
45
- token_usage_forecast: bool = False
46
- token_uniqueness_forecast: bool = False
47
- workflow_runtime_forecast: bool = False
48
- compute_llm_metrics: bool = False
49
- csv_exclude_io_text: bool = False
50
- prompt_caching_prefixes: PromptCachingConfig = PromptCachingConfig()
51
- bottleneck_analysis: BottleneckConfig = BottleneckConfig()
52
- concurrency_spike_analysis: ConcurrencySpikeConfig = ConcurrencySpikeConfig()
53
- prefix_span_analysis: PrefixSpanConfig = PrefixSpanConfig()