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,14 +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.
@@ -1,588 +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 abc
17
- import datetime
18
- import typing
19
- import uuid
20
- from abc import abstractmethod
21
- from enum import Enum
22
-
23
- from pydantic import BaseModel
24
- from pydantic import ConfigDict
25
- from pydantic import Discriminator
26
- from pydantic import Field
27
- from pydantic import HttpUrl
28
- from pydantic import conlist
29
- from pydantic import field_validator
30
- from pydantic_core.core_schema import ValidationInfo
31
-
32
- from aiq.data_models.interactive import HumanPrompt
33
- from aiq.utils.type_converter import GlobalTypeConverter
34
-
35
-
36
- class Request(BaseModel):
37
- """
38
- Request is a data model that represents HTTP request attributes.
39
- """
40
- model_config = ConfigDict(extra="forbid")
41
-
42
- method: str | None = Field(default=None,
43
- description="HTTP method used for the request (e.g., GET, POST, PUT, DELETE).")
44
- url_path: str | None = Field(default=None, description="URL request path.")
45
- url_port: int | None = Field(default=None, description="URL request port number.")
46
- url_scheme: str | None = Field(default=None, description="URL scheme indicating the protocol (e.g., http, https).")
47
- headers: typing.Any | None = Field(default=None, description="HTTP headers associated with the request.")
48
- query_params: typing.Any | None = Field(default=None, description="Query parameters included in the request URL.")
49
- path_params: dict[str, str] | None = Field(default=None,
50
- description="Path parameters extracted from the request URL.")
51
- client_host: str | None = Field(default=None, description="Client host address from which the request originated.")
52
- client_port: int | None = Field(default=None, description="Client port number from which the request originated.")
53
- cookies: dict[str, str] | None = Field(
54
- default=None, description="Cookies sent with the request, stored in a dictionary-like object.")
55
-
56
-
57
- class ChatContentType(str, Enum):
58
- """
59
- ChatContentType is an Enum that represents the type of Chat content.
60
- """
61
- TEXT = "text"
62
- IMAGE_URL = "image_url"
63
- INPUT_AUDIO = "input_audio"
64
-
65
-
66
- class InputAudio(BaseModel):
67
- data: str = "default"
68
- format: str = "default"
69
-
70
-
71
- class AudioContent(BaseModel):
72
- model_config = ConfigDict(extra="forbid")
73
-
74
- type: typing.Literal[ChatContentType.INPUT_AUDIO] = ChatContentType.INPUT_AUDIO
75
- input_audio: InputAudio = InputAudio()
76
-
77
-
78
- class ImageUrl(BaseModel):
79
- url: HttpUrl = HttpUrl(url="http://default.com")
80
-
81
-
82
- class ImageContent(BaseModel):
83
- model_config = ConfigDict(extra="forbid")
84
-
85
- type: typing.Literal[ChatContentType.IMAGE_URL] = ChatContentType.IMAGE_URL
86
- image_url: ImageUrl = ImageUrl()
87
-
88
-
89
- class TextContent(BaseModel):
90
- model_config = ConfigDict(extra="forbid")
91
-
92
- type: typing.Literal[ChatContentType.TEXT] = ChatContentType.TEXT
93
- text: str = "default"
94
-
95
-
96
- class Security(BaseModel):
97
- model_config = ConfigDict(extra="forbid")
98
-
99
- api_key: str = "default"
100
- token: str = "default"
101
-
102
-
103
- UserContent = typing.Annotated[TextContent | ImageContent | AudioContent, Discriminator("type")]
104
-
105
-
106
- class Message(BaseModel):
107
- content: str | list[UserContent]
108
- role: str
109
-
110
-
111
- class AIQChatRequest(BaseModel):
112
- """
113
- AIQChatRequest is a data model that represents a request to the AIQ Toolkit chat API.
114
- """
115
-
116
- # Allow extra fields in the model_config to support derived models
117
- model_config = ConfigDict(extra="allow")
118
-
119
- messages: typing.Annotated[list[Message], conlist(Message, min_length=1)]
120
- model: str | None = None
121
- temperature: float | None = None
122
- max_tokens: int | None = None
123
- top_p: float | None = None
124
-
125
- @staticmethod
126
- def from_string(data: str,
127
- *,
128
- model: str | None = None,
129
- temperature: float | None = None,
130
- max_tokens: int | None = None,
131
- top_p: float | None = None) -> "AIQChatRequest":
132
-
133
- return AIQChatRequest(messages=[Message(content=data, role="user")],
134
- model=model,
135
- temperature=temperature,
136
- max_tokens=max_tokens,
137
- top_p=top_p)
138
-
139
- @staticmethod
140
- def from_content(content: list[UserContent],
141
- *,
142
- model: str | None = None,
143
- temperature: float | None = None,
144
- max_tokens: int | None = None,
145
- top_p: float | None = None) -> "AIQChatRequest":
146
-
147
- return AIQChatRequest(messages=[Message(content=content, role="user")],
148
- model=model,
149
- temperature=temperature,
150
- max_tokens=max_tokens,
151
- top_p=top_p)
152
-
153
-
154
- class AIQChoiceMessage(BaseModel):
155
- content: str | None = None
156
- role: str | None = None
157
-
158
-
159
- class AIQChoice(BaseModel):
160
- model_config = ConfigDict(extra="allow")
161
-
162
- message: AIQChoiceMessage
163
- finish_reason: typing.Literal['stop', 'length', 'tool_calls', 'content_filter', 'function_call'] | None = None
164
- index: int
165
- # logprobs: AIQChoiceLogprobs | None = None
166
-
167
-
168
- class AIQUsage(BaseModel):
169
- prompt_tokens: int
170
- completion_tokens: int
171
- total_tokens: int
172
-
173
-
174
- class AIQResponseSerializable(abc.ABC):
175
- """
176
- AIQChatResponseSerializable is an abstract class that defines the interface for serializing output for the AIQ
177
- Toolkit chat streaming API.
178
- """
179
-
180
- @abstractmethod
181
- def get_stream_data(self) -> str:
182
- pass
183
-
184
-
185
- class AIQResponseBaseModelOutput(BaseModel, AIQResponseSerializable):
186
-
187
- def get_stream_data(self) -> str:
188
- return f"data: {self.model_dump_json()}\n\n"
189
-
190
-
191
- class AIQResponseBaseModelIntermediate(BaseModel, AIQResponseSerializable):
192
-
193
- def get_stream_data(self) -> str:
194
- return f"intermediate_data: {self.model_dump_json()}\n\n"
195
-
196
-
197
- class AIQChatResponse(AIQResponseBaseModelOutput):
198
- """
199
- AIQChatResponse is a data model that represents a response from the AIQ Toolkit chat API.
200
- """
201
-
202
- # Allow extra fields in the model_config to support derived models
203
- model_config = ConfigDict(extra="allow")
204
- id: str
205
- object: str
206
- model: str = ""
207
- created: datetime.datetime
208
- choices: list[AIQChoice]
209
- usage: AIQUsage | None = None
210
-
211
- @staticmethod
212
- def from_string(data: str,
213
- *,
214
- id_: str | None = None,
215
- object_: str | None = None,
216
- model: str | None = None,
217
- created: datetime.datetime | None = None,
218
- usage: AIQUsage | None = None) -> "AIQChatResponse":
219
-
220
- if id_ is None:
221
- id_ = str(uuid.uuid4())
222
- if object_ is None:
223
- object_ = "chat.completion"
224
- if model is None:
225
- model = ""
226
- if created is None:
227
- created = datetime.datetime.now(datetime.timezone.utc)
228
-
229
- return AIQChatResponse(
230
- id=id_,
231
- object=object_,
232
- model=model,
233
- created=created,
234
- choices=[AIQChoice(index=0, message=AIQChoiceMessage(content=data), finish_reason="stop")],
235
- usage=usage)
236
-
237
-
238
- class AIQChatResponseChunk(AIQResponseBaseModelOutput):
239
- """
240
- AIQChatResponseChunk is a data model that represents a response chunk from the AIQ Toolkit chat streaming API.
241
- """
242
-
243
- # Allow extra fields in the model_config to support derived models
244
- model_config = ConfigDict(extra="allow")
245
-
246
- id: str
247
- choices: list[AIQChoice]
248
- created: datetime.datetime
249
- model: str = ""
250
- object: str = "chat.completion.chunk"
251
-
252
- @staticmethod
253
- def from_string(data: str,
254
- *,
255
- id_: str | None = None,
256
- created: datetime.datetime | None = None,
257
- model: str | None = None,
258
- object_: str | None = None) -> "AIQChatResponseChunk":
259
-
260
- if id_ is None:
261
- id_ = str(uuid.uuid4())
262
- if created is None:
263
- created = datetime.datetime.now(datetime.timezone.utc)
264
- if model is None:
265
- model = ""
266
- if object_ is None:
267
- object_ = "chat.completion.chunk"
268
-
269
- return AIQChatResponseChunk(
270
- id=id_,
271
- choices=[AIQChoice(index=0, message=AIQChoiceMessage(content=data), finish_reason="stop")],
272
- created=created,
273
- model=model,
274
- object=object_)
275
-
276
-
277
- class AIQResponseIntermediateStep(AIQResponseBaseModelIntermediate):
278
- """
279
- AIQResponseSerializedStep is a data model that represents a serialized step in the AIQ Toolkit chat streaming API.
280
- """
281
-
282
- # Allow extra fields in the model_config to support derived models
283
- model_config = ConfigDict(extra="allow")
284
-
285
- id: str
286
- parent_id: str | None = None
287
- type: str = "markdown"
288
- name: str
289
- payload: str
290
-
291
-
292
- class AIQResponsePayloadOutput(BaseModel, AIQResponseSerializable):
293
-
294
- payload: typing.Any
295
-
296
- def get_stream_data(self) -> str:
297
-
298
- if (isinstance(self.payload, BaseModel)):
299
- return f"data: {self.payload.model_dump_json()}\n\n"
300
-
301
- return f"data: {self.payload}\n\n"
302
-
303
-
304
- class AIQGenerateResponse(BaseModel):
305
- # Allow extra fields in the model_config to support derived models
306
- model_config = ConfigDict(extra="allow")
307
-
308
- # (fixme) define the intermediate step model
309
- intermediate_steps: list[tuple] | None = None
310
- output: str
311
- value: str | None = "default"
312
-
313
-
314
- class UserMessageContentRoleType(str, Enum):
315
- USER = "user"
316
- ASSISTANT = "assistant"
317
-
318
-
319
- class WebSocketMessageType(str, Enum):
320
- """
321
- WebSocketMessageType is an Enum that represents WebSocket Message types.
322
- """
323
- USER_MESSAGE = "user_message"
324
- RESPONSE_MESSAGE = "system_response_message"
325
- INTERMEDIATE_STEP_MESSAGE = "system_intermediate_message"
326
- SYSTEM_INTERACTION_MESSAGE = "system_interaction_message"
327
- USER_INTERACTION_MESSAGE = "user_interaction_message"
328
- ERROR_MESSAGE = "error_message"
329
-
330
-
331
- class WorkflowSchemaType(str, Enum):
332
- """
333
- WorkflowSchemaType is an Enum that represents Workkflow response types.
334
- """
335
- GENERATE_STREAM = "generate_stream"
336
- CHAT_STREAM = "chat_stream"
337
- GENERATE = "generate"
338
- CHAT = "chat"
339
-
340
-
341
- class WebSocketMessageStatus(str, Enum):
342
- """
343
- WebSocketMessageStatus is an Enum that represents the status of a WebSocket message.
344
- """
345
- IN_PROGRESS = "in_progress"
346
- COMPLETE = "complete"
347
-
348
-
349
- class UserMessages(BaseModel):
350
- model_config = ConfigDict(extra="forbid")
351
-
352
- role: UserMessageContentRoleType
353
- content: list[UserContent]
354
-
355
-
356
- class UserMessageContent(BaseModel):
357
- model_config = ConfigDict(extra="forbid")
358
- messages: list[UserMessages]
359
-
360
-
361
- class User(BaseModel):
362
- model_config = ConfigDict(extra="forbid")
363
-
364
- name: str = "default"
365
- email: str = "default"
366
-
367
-
368
- class ErrorTypes(str, Enum):
369
- UNKNOWN_ERROR = "unknown_error"
370
- INVALID_MESSAGE = "invalid_message"
371
- INVALID_MESSAGE_TYPE = "invalid_message_type"
372
- INVALID_USER_MESSAGE_CONTENT = "invalid_user_message_content"
373
- INVALID_DATA_CONTENT = "invalid_data_content"
374
-
375
-
376
- class Error(BaseModel):
377
- model_config = ConfigDict(extra="forbid")
378
-
379
- code: ErrorTypes = ErrorTypes.UNKNOWN_ERROR
380
- message: str = "default"
381
- details: str = "default"
382
-
383
-
384
- class WebSocketUserMessage(BaseModel):
385
- """
386
- For more details, refer to the API documentation:
387
- docs/source/developer_guide/websockets.md
388
- """
389
- # Allow extra fields in the model_config to support derived models
390
- model_config = ConfigDict(extra="allow")
391
-
392
- type: typing.Literal[WebSocketMessageType.USER_MESSAGE]
393
- schema_type: WorkflowSchemaType
394
- id: str = "default"
395
- thread_id: str = "default"
396
- content: UserMessageContent
397
- user: User = User()
398
- security: Security = Security()
399
- error: Error = Error()
400
- schema_version: str = "1.0.0"
401
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
402
-
403
-
404
- class WebSocketUserInteractionResponseMessage(BaseModel):
405
- """
406
- For more details, refer to the API documentation:
407
- docs/source/developer_guide/websockets.md
408
- """
409
- type: typing.Literal[WebSocketMessageType.USER_INTERACTION_MESSAGE]
410
- id: str = "default"
411
- thread_id: str = "default"
412
- content: UserMessageContent
413
- user: User = User()
414
- security: Security = Security()
415
- error: Error = Error()
416
- schema_version: str = "1.0.0"
417
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
418
-
419
-
420
- class SystemIntermediateStepContent(BaseModel):
421
- model_config = ConfigDict(extra="forbid")
422
- name: str
423
- payload: str
424
-
425
-
426
- class WebSocketSystemIntermediateStepMessage(BaseModel):
427
- """
428
- For more details, refer to the API documentation:
429
- docs/source/developer_guide/websockets.md
430
- """
431
- # Allow extra fields in the model_config to support derived models
432
- model_config = ConfigDict(extra="allow")
433
-
434
- type: typing.Literal[WebSocketMessageType.INTERMEDIATE_STEP_MESSAGE]
435
- id: str = "default"
436
- thread_id: str | None = "default"
437
- parent_id: str = "default"
438
- intermediate_parent_id: str | None = "default"
439
- update_message_id: str | None = "default"
440
- content: SystemIntermediateStepContent
441
- status: WebSocketMessageStatus
442
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
443
-
444
-
445
- class SystemResponseContent(BaseModel):
446
- model_config = ConfigDict(extra="forbid")
447
-
448
- text: str | None = None
449
-
450
-
451
- class WebSocketSystemResponseTokenMessage(BaseModel):
452
- """
453
- For more details, refer to the API documentation:
454
- docs/source/developer_guide/websockets.md
455
- """
456
- # Allow extra fields in the model_config to support derived models
457
- model_config = ConfigDict(extra="allow")
458
-
459
- type: typing.Literal[WebSocketMessageType.RESPONSE_MESSAGE, WebSocketMessageType.ERROR_MESSAGE]
460
- id: str | None = "default"
461
- thread_id: str | None = "default"
462
- parent_id: str = "default"
463
- content: SystemResponseContent | Error | AIQGenerateResponse
464
- status: WebSocketMessageStatus
465
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
466
-
467
- @field_validator("content")
468
- @classmethod
469
- def validate_content_by_type(cls, value: SystemResponseContent | Error | AIQGenerateResponse, info: ValidationInfo):
470
- if info.data.get("type") == WebSocketMessageType.ERROR_MESSAGE and not isinstance(value, Error):
471
- raise ValueError(f"Field: content must be 'Error' when type is {WebSocketMessageType.ERROR_MESSAGE}")
472
-
473
- if info.data.get("type") == WebSocketMessageType.RESPONSE_MESSAGE and not isinstance(
474
- value, (SystemResponseContent, AIQGenerateResponse)):
475
- raise ValueError(
476
- f"Field: content must be 'SystemResponseContent' when type is {WebSocketMessageType.RESPONSE_MESSAGE}")
477
- return value
478
-
479
-
480
- class WebSocketSystemInteractionMessage(BaseModel):
481
- """
482
- For more details, refer to the API documentation:
483
- docs/source/developer_guide/websockets.md
484
- """
485
- # Allow extra fields in the model_config to support derived models
486
- model_config = ConfigDict(extra="allow")
487
-
488
- type: typing.Literal[
489
- WebSocketMessageType.SYSTEM_INTERACTION_MESSAGE] = WebSocketMessageType.SYSTEM_INTERACTION_MESSAGE
490
- id: str | None = "default"
491
- thread_id: str | None = "default"
492
- parent_id: str = "default"
493
- content: HumanPrompt
494
- status: WebSocketMessageStatus
495
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
496
-
497
-
498
- # ======== AIQGenerateResponse Converters ========
499
-
500
-
501
- def _generate_response_to_str(response: AIQGenerateResponse) -> str:
502
- return response.output
503
-
504
-
505
- GlobalTypeConverter.register_converter(_generate_response_to_str)
506
-
507
-
508
- def _generate_response_to_chat_response(response: AIQGenerateResponse) -> AIQChatResponse:
509
- data = response.output
510
-
511
- # Simulate usage
512
- prompt_tokens = 0
513
- usage = AIQUsage(prompt_tokens=prompt_tokens,
514
- completion_tokens=len(data.split()),
515
- total_tokens=prompt_tokens + len(data.split()))
516
-
517
- # Build and return the response
518
- return AIQChatResponse.from_string(data, usage=usage)
519
-
520
-
521
- GlobalTypeConverter.register_converter(_generate_response_to_chat_response)
522
-
523
-
524
- # ======== AIQChatRequest Converters ========
525
- def _aiq_chat_request_to_string(data: AIQChatRequest) -> str:
526
- if isinstance(data.messages[-1].content, str):
527
- return data.messages[-1].content
528
- return str(data.messages[-1].content)
529
-
530
-
531
- GlobalTypeConverter.register_converter(_aiq_chat_request_to_string)
532
-
533
-
534
- def _string_to_aiq_chat_request(data: str) -> AIQChatRequest:
535
- return AIQChatRequest.from_string(data, model="")
536
-
537
-
538
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_request)
539
-
540
-
541
- # ======== AIQChatResponse Converters ========
542
- def _aiq_chat_response_to_string(data: AIQChatResponse) -> str:
543
- return data.choices[0].message.content or ""
544
-
545
-
546
- GlobalTypeConverter.register_converter(_aiq_chat_response_to_string)
547
-
548
-
549
- def _string_to_aiq_chat_response(data: str) -> AIQChatResponse:
550
- '''Converts a string to an AIQChatResponse object'''
551
-
552
- # Simulate usage
553
- prompt_tokens = 0
554
- usage = AIQUsage(prompt_tokens=prompt_tokens,
555
- completion_tokens=len(data.split()),
556
- total_tokens=prompt_tokens + len(data.split()))
557
-
558
- # Build and return the response
559
- return AIQChatResponse.from_string(data, usage=usage)
560
-
561
-
562
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_response)
563
-
564
-
565
- def _chat_response_to_chat_response_chunk(data: AIQChatResponse) -> AIQChatResponseChunk:
566
-
567
- return AIQChatResponseChunk(id=data.id, choices=data.choices, created=data.created, model=data.model)
568
-
569
-
570
- GlobalTypeConverter.register_converter(_chat_response_to_chat_response_chunk)
571
-
572
-
573
- # ======== AIQChatResponseChunk Converters ========
574
- def _aiq_chat_response_chunk_to_string(data: AIQChatResponseChunk) -> str:
575
- return data.choices[0].message.content or ""
576
-
577
-
578
- GlobalTypeConverter.register_converter(_aiq_chat_response_chunk_to_string)
579
-
580
-
581
- def _string_to_aiq_chat_response_chunk(data: str) -> AIQChatResponseChunk:
582
- '''Converts a string to an AIQChatResponseChunk object'''
583
-
584
- # Build and return the response
585
- return AIQChatResponseChunk.from_string(data)
586
-
587
-
588
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_response_chunk)