aiqtoolkit 1.2.0rc3__py3-none-any.whl → 1.2.0rc5__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (440) hide show
  1. aiqtoolkit-1.2.0rc5.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2.0rc5.dist-info/RECORD +4 -0
  3. aiqtoolkit-1.2.0rc5.dist-info/top_level.txt +1 -0
  4. aiq/agent/__init__.py +0 -0
  5. aiq/agent/base.py +0 -239
  6. aiq/agent/dual_node.py +0 -67
  7. aiq/agent/react_agent/__init__.py +0 -0
  8. aiq/agent/react_agent/agent.py +0 -355
  9. aiq/agent/react_agent/output_parser.py +0 -104
  10. aiq/agent/react_agent/prompt.py +0 -41
  11. aiq/agent/react_agent/register.py +0 -149
  12. aiq/agent/reasoning_agent/__init__.py +0 -0
  13. aiq/agent/reasoning_agent/reasoning_agent.py +0 -225
  14. aiq/agent/register.py +0 -23
  15. aiq/agent/rewoo_agent/__init__.py +0 -0
  16. aiq/agent/rewoo_agent/agent.py +0 -411
  17. aiq/agent/rewoo_agent/prompt.py +0 -108
  18. aiq/agent/rewoo_agent/register.py +0 -158
  19. aiq/agent/tool_calling_agent/__init__.py +0 -0
  20. aiq/agent/tool_calling_agent/agent.py +0 -119
  21. aiq/agent/tool_calling_agent/register.py +0 -106
  22. aiq/authentication/__init__.py +0 -14
  23. aiq/authentication/api_key/__init__.py +0 -14
  24. aiq/authentication/api_key/api_key_auth_provider.py +0 -92
  25. aiq/authentication/api_key/api_key_auth_provider_config.py +0 -124
  26. aiq/authentication/api_key/register.py +0 -26
  27. aiq/authentication/exceptions/__init__.py +0 -14
  28. aiq/authentication/exceptions/api_key_exceptions.py +0 -38
  29. aiq/authentication/exceptions/auth_code_grant_exceptions.py +0 -86
  30. aiq/authentication/exceptions/call_back_exceptions.py +0 -38
  31. aiq/authentication/exceptions/request_exceptions.py +0 -54
  32. aiq/authentication/http_basic_auth/__init__.py +0 -0
  33. aiq/authentication/http_basic_auth/http_basic_auth_provider.py +0 -81
  34. aiq/authentication/http_basic_auth/register.py +0 -30
  35. aiq/authentication/interfaces.py +0 -93
  36. aiq/authentication/oauth2/__init__.py +0 -14
  37. aiq/authentication/oauth2/oauth2_auth_code_flow_provider.py +0 -107
  38. aiq/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +0 -39
  39. aiq/authentication/oauth2/register.py +0 -25
  40. aiq/authentication/register.py +0 -21
  41. aiq/builder/__init__.py +0 -0
  42. aiq/builder/builder.py +0 -285
  43. aiq/builder/component_utils.py +0 -316
  44. aiq/builder/context.py +0 -264
  45. aiq/builder/embedder.py +0 -24
  46. aiq/builder/eval_builder.py +0 -161
  47. aiq/builder/evaluator.py +0 -29
  48. aiq/builder/framework_enum.py +0 -24
  49. aiq/builder/front_end.py +0 -73
  50. aiq/builder/function.py +0 -344
  51. aiq/builder/function_base.py +0 -380
  52. aiq/builder/function_info.py +0 -627
  53. aiq/builder/intermediate_step_manager.py +0 -174
  54. aiq/builder/llm.py +0 -25
  55. aiq/builder/retriever.py +0 -25
  56. aiq/builder/user_interaction_manager.py +0 -74
  57. aiq/builder/workflow.py +0 -148
  58. aiq/builder/workflow_builder.py +0 -1117
  59. aiq/cli/__init__.py +0 -14
  60. aiq/cli/cli_utils/__init__.py +0 -0
  61. aiq/cli/cli_utils/config_override.py +0 -231
  62. aiq/cli/cli_utils/validation.py +0 -37
  63. aiq/cli/commands/__init__.py +0 -0
  64. aiq/cli/commands/configure/__init__.py +0 -0
  65. aiq/cli/commands/configure/channel/__init__.py +0 -0
  66. aiq/cli/commands/configure/channel/add.py +0 -28
  67. aiq/cli/commands/configure/channel/channel.py +0 -36
  68. aiq/cli/commands/configure/channel/remove.py +0 -30
  69. aiq/cli/commands/configure/channel/update.py +0 -30
  70. aiq/cli/commands/configure/configure.py +0 -33
  71. aiq/cli/commands/evaluate.py +0 -139
  72. aiq/cli/commands/info/__init__.py +0 -14
  73. aiq/cli/commands/info/info.py +0 -39
  74. aiq/cli/commands/info/list_channels.py +0 -32
  75. aiq/cli/commands/info/list_components.py +0 -129
  76. aiq/cli/commands/info/list_mcp.py +0 -213
  77. aiq/cli/commands/registry/__init__.py +0 -14
  78. aiq/cli/commands/registry/publish.py +0 -88
  79. aiq/cli/commands/registry/pull.py +0 -118
  80. aiq/cli/commands/registry/registry.py +0 -38
  81. aiq/cli/commands/registry/remove.py +0 -108
  82. aiq/cli/commands/registry/search.py +0 -155
  83. aiq/cli/commands/sizing/__init__.py +0 -14
  84. aiq/cli/commands/sizing/calc.py +0 -297
  85. aiq/cli/commands/sizing/sizing.py +0 -27
  86. aiq/cli/commands/start.py +0 -246
  87. aiq/cli/commands/uninstall.py +0 -81
  88. aiq/cli/commands/validate.py +0 -47
  89. aiq/cli/commands/workflow/__init__.py +0 -14
  90. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  91. aiq/cli/commands/workflow/templates/config.yml.j2 +0 -16
  92. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +0 -22
  93. aiq/cli/commands/workflow/templates/register.py.j2 +0 -5
  94. aiq/cli/commands/workflow/templates/workflow.py.j2 +0 -36
  95. aiq/cli/commands/workflow/workflow.py +0 -37
  96. aiq/cli/commands/workflow/workflow_commands.py +0 -313
  97. aiq/cli/entrypoint.py +0 -135
  98. aiq/cli/main.py +0 -44
  99. aiq/cli/register_workflow.py +0 -488
  100. aiq/cli/type_registry.py +0 -1000
  101. aiq/data_models/__init__.py +0 -14
  102. aiq/data_models/api_server.py +0 -694
  103. aiq/data_models/authentication.py +0 -231
  104. aiq/data_models/common.py +0 -171
  105. aiq/data_models/component.py +0 -54
  106. aiq/data_models/component_ref.py +0 -168
  107. aiq/data_models/config.py +0 -406
  108. aiq/data_models/dataset_handler.py +0 -123
  109. aiq/data_models/discovery_metadata.py +0 -286
  110. aiq/data_models/embedder.py +0 -27
  111. aiq/data_models/evaluate.py +0 -127
  112. aiq/data_models/evaluator.py +0 -26
  113. aiq/data_models/front_end.py +0 -26
  114. aiq/data_models/function.py +0 -30
  115. aiq/data_models/function_dependencies.py +0 -72
  116. aiq/data_models/interactive.py +0 -246
  117. aiq/data_models/intermediate_step.py +0 -302
  118. aiq/data_models/invocation_node.py +0 -38
  119. aiq/data_models/its_strategy.py +0 -30
  120. aiq/data_models/llm.py +0 -27
  121. aiq/data_models/logging.py +0 -26
  122. aiq/data_models/memory.py +0 -27
  123. aiq/data_models/object_store.py +0 -44
  124. aiq/data_models/profiler.py +0 -54
  125. aiq/data_models/registry_handler.py +0 -26
  126. aiq/data_models/retriever.py +0 -30
  127. aiq/data_models/retry_mixin.py +0 -35
  128. aiq/data_models/span.py +0 -187
  129. aiq/data_models/step_adaptor.py +0 -64
  130. aiq/data_models/streaming.py +0 -33
  131. aiq/data_models/swe_bench_model.py +0 -54
  132. aiq/data_models/telemetry_exporter.py +0 -26
  133. aiq/embedder/__init__.py +0 -0
  134. aiq/embedder/langchain_client.py +0 -41
  135. aiq/embedder/nim_embedder.py +0 -59
  136. aiq/embedder/openai_embedder.py +0 -43
  137. aiq/embedder/register.py +0 -24
  138. aiq/eval/__init__.py +0 -14
  139. aiq/eval/config.py +0 -60
  140. aiq/eval/dataset_handler/__init__.py +0 -0
  141. aiq/eval/dataset_handler/dataset_downloader.py +0 -106
  142. aiq/eval/dataset_handler/dataset_filter.py +0 -52
  143. aiq/eval/dataset_handler/dataset_handler.py +0 -254
  144. aiq/eval/evaluate.py +0 -506
  145. aiq/eval/evaluator/__init__.py +0 -14
  146. aiq/eval/evaluator/base_evaluator.py +0 -73
  147. aiq/eval/evaluator/evaluator_model.py +0 -45
  148. aiq/eval/intermediate_step_adapter.py +0 -99
  149. aiq/eval/rag_evaluator/__init__.py +0 -0
  150. aiq/eval/rag_evaluator/evaluate.py +0 -178
  151. aiq/eval/rag_evaluator/register.py +0 -143
  152. aiq/eval/register.py +0 -23
  153. aiq/eval/remote_workflow.py +0 -133
  154. aiq/eval/runners/__init__.py +0 -14
  155. aiq/eval/runners/config.py +0 -39
  156. aiq/eval/runners/multi_eval_runner.py +0 -54
  157. aiq/eval/runtime_event_subscriber.py +0 -52
  158. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  159. aiq/eval/swe_bench_evaluator/evaluate.py +0 -215
  160. aiq/eval/swe_bench_evaluator/register.py +0 -36
  161. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  162. aiq/eval/trajectory_evaluator/evaluate.py +0 -75
  163. aiq/eval/trajectory_evaluator/register.py +0 -40
  164. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  165. aiq/eval/tunable_rag_evaluator/evaluate.py +0 -245
  166. aiq/eval/tunable_rag_evaluator/register.py +0 -52
  167. aiq/eval/usage_stats.py +0 -41
  168. aiq/eval/utils/__init__.py +0 -0
  169. aiq/eval/utils/output_uploader.py +0 -140
  170. aiq/eval/utils/tqdm_position_registry.py +0 -40
  171. aiq/eval/utils/weave_eval.py +0 -184
  172. aiq/experimental/__init__.py +0 -0
  173. aiq/experimental/decorators/__init__.py +0 -0
  174. aiq/experimental/decorators/experimental_warning_decorator.py +0 -130
  175. aiq/experimental/inference_time_scaling/__init__.py +0 -0
  176. aiq/experimental/inference_time_scaling/editing/__init__.py +0 -0
  177. aiq/experimental/inference_time_scaling/editing/iterative_plan_refinement_editor.py +0 -147
  178. aiq/experimental/inference_time_scaling/editing/llm_as_a_judge_editor.py +0 -204
  179. aiq/experimental/inference_time_scaling/editing/motivation_aware_summarization.py +0 -107
  180. aiq/experimental/inference_time_scaling/functions/__init__.py +0 -0
  181. aiq/experimental/inference_time_scaling/functions/execute_score_select_function.py +0 -105
  182. aiq/experimental/inference_time_scaling/functions/its_tool_orchestration_function.py +0 -205
  183. aiq/experimental/inference_time_scaling/functions/its_tool_wrapper_function.py +0 -146
  184. aiq/experimental/inference_time_scaling/functions/plan_select_execute_function.py +0 -224
  185. aiq/experimental/inference_time_scaling/models/__init__.py +0 -0
  186. aiq/experimental/inference_time_scaling/models/editor_config.py +0 -132
  187. aiq/experimental/inference_time_scaling/models/its_item.py +0 -48
  188. aiq/experimental/inference_time_scaling/models/scoring_config.py +0 -112
  189. aiq/experimental/inference_time_scaling/models/search_config.py +0 -120
  190. aiq/experimental/inference_time_scaling/models/selection_config.py +0 -154
  191. aiq/experimental/inference_time_scaling/models/stage_enums.py +0 -43
  192. aiq/experimental/inference_time_scaling/models/strategy_base.py +0 -66
  193. aiq/experimental/inference_time_scaling/models/tool_use_config.py +0 -41
  194. aiq/experimental/inference_time_scaling/register.py +0 -36
  195. aiq/experimental/inference_time_scaling/scoring/__init__.py +0 -0
  196. aiq/experimental/inference_time_scaling/scoring/llm_based_agent_scorer.py +0 -168
  197. aiq/experimental/inference_time_scaling/scoring/llm_based_plan_scorer.py +0 -168
  198. aiq/experimental/inference_time_scaling/scoring/motivation_aware_scorer.py +0 -111
  199. aiq/experimental/inference_time_scaling/search/__init__.py +0 -0
  200. aiq/experimental/inference_time_scaling/search/multi_llm_planner.py +0 -128
  201. aiq/experimental/inference_time_scaling/search/multi_query_retrieval_search.py +0 -122
  202. aiq/experimental/inference_time_scaling/search/single_shot_multi_plan_planner.py +0 -128
  203. aiq/experimental/inference_time_scaling/selection/__init__.py +0 -0
  204. aiq/experimental/inference_time_scaling/selection/best_of_n_selector.py +0 -63
  205. aiq/experimental/inference_time_scaling/selection/llm_based_agent_output_selector.py +0 -131
  206. aiq/experimental/inference_time_scaling/selection/llm_based_output_merging_selector.py +0 -159
  207. aiq/experimental/inference_time_scaling/selection/llm_based_plan_selector.py +0 -128
  208. aiq/experimental/inference_time_scaling/selection/threshold_selector.py +0 -58
  209. aiq/front_ends/__init__.py +0 -14
  210. aiq/front_ends/console/__init__.py +0 -14
  211. aiq/front_ends/console/authentication_flow_handler.py +0 -233
  212. aiq/front_ends/console/console_front_end_config.py +0 -32
  213. aiq/front_ends/console/console_front_end_plugin.py +0 -96
  214. aiq/front_ends/console/register.py +0 -25
  215. aiq/front_ends/cron/__init__.py +0 -14
  216. aiq/front_ends/fastapi/__init__.py +0 -14
  217. aiq/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  218. aiq/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +0 -27
  219. aiq/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +0 -107
  220. aiq/front_ends/fastapi/fastapi_front_end_config.py +0 -234
  221. aiq/front_ends/fastapi/fastapi_front_end_controller.py +0 -68
  222. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +0 -116
  223. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +0 -1092
  224. aiq/front_ends/fastapi/html_snippets/__init__.py +0 -14
  225. aiq/front_ends/fastapi/html_snippets/auth_code_grant_success.py +0 -35
  226. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +0 -80
  227. aiq/front_ends/fastapi/job_store.py +0 -183
  228. aiq/front_ends/fastapi/main.py +0 -72
  229. aiq/front_ends/fastapi/message_handler.py +0 -298
  230. aiq/front_ends/fastapi/message_validator.py +0 -345
  231. aiq/front_ends/fastapi/register.py +0 -25
  232. aiq/front_ends/fastapi/response_helpers.py +0 -195
  233. aiq/front_ends/fastapi/step_adaptor.py +0 -321
  234. aiq/front_ends/mcp/__init__.py +0 -14
  235. aiq/front_ends/mcp/mcp_front_end_config.py +0 -32
  236. aiq/front_ends/mcp/mcp_front_end_plugin.py +0 -93
  237. aiq/front_ends/mcp/register.py +0 -27
  238. aiq/front_ends/mcp/tool_converter.py +0 -242
  239. aiq/front_ends/register.py +0 -22
  240. aiq/front_ends/simple_base/__init__.py +0 -14
  241. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +0 -54
  242. aiq/llm/__init__.py +0 -0
  243. aiq/llm/aws_bedrock_llm.py +0 -57
  244. aiq/llm/nim_llm.py +0 -46
  245. aiq/llm/openai_llm.py +0 -46
  246. aiq/llm/register.py +0 -23
  247. aiq/llm/utils/__init__.py +0 -14
  248. aiq/llm/utils/env_config_value.py +0 -94
  249. aiq/llm/utils/error.py +0 -17
  250. aiq/memory/__init__.py +0 -20
  251. aiq/memory/interfaces.py +0 -183
  252. aiq/memory/models.py +0 -112
  253. aiq/meta/module_to_distro.json +0 -3
  254. aiq/meta/pypi.md +0 -58
  255. aiq/object_store/__init__.py +0 -20
  256. aiq/object_store/in_memory_object_store.py +0 -74
  257. aiq/object_store/interfaces.py +0 -84
  258. aiq/object_store/models.py +0 -36
  259. aiq/object_store/register.py +0 -20
  260. aiq/observability/__init__.py +0 -14
  261. aiq/observability/exporter/__init__.py +0 -14
  262. aiq/observability/exporter/base_exporter.py +0 -449
  263. aiq/observability/exporter/exporter.py +0 -78
  264. aiq/observability/exporter/file_exporter.py +0 -33
  265. aiq/observability/exporter/processing_exporter.py +0 -322
  266. aiq/observability/exporter/raw_exporter.py +0 -52
  267. aiq/observability/exporter/span_exporter.py +0 -265
  268. aiq/observability/exporter_manager.py +0 -335
  269. aiq/observability/mixin/__init__.py +0 -14
  270. aiq/observability/mixin/batch_config_mixin.py +0 -26
  271. aiq/observability/mixin/collector_config_mixin.py +0 -23
  272. aiq/observability/mixin/file_mixin.py +0 -288
  273. aiq/observability/mixin/file_mode.py +0 -23
  274. aiq/observability/mixin/resource_conflict_mixin.py +0 -134
  275. aiq/observability/mixin/serialize_mixin.py +0 -61
  276. aiq/observability/mixin/type_introspection_mixin.py +0 -183
  277. aiq/observability/processor/__init__.py +0 -14
  278. aiq/observability/processor/batching_processor.py +0 -309
  279. aiq/observability/processor/callback_processor.py +0 -42
  280. aiq/observability/processor/intermediate_step_serializer.py +0 -28
  281. aiq/observability/processor/processor.py +0 -71
  282. aiq/observability/register.py +0 -96
  283. aiq/observability/utils/__init__.py +0 -14
  284. aiq/observability/utils/dict_utils.py +0 -236
  285. aiq/observability/utils/time_utils.py +0 -31
  286. aiq/plugins/.namespace +0 -1
  287. aiq/profiler/__init__.py +0 -0
  288. aiq/profiler/calc/__init__.py +0 -14
  289. aiq/profiler/calc/calc_runner.py +0 -627
  290. aiq/profiler/calc/calculations.py +0 -288
  291. aiq/profiler/calc/data_models.py +0 -188
  292. aiq/profiler/calc/plot.py +0 -345
  293. aiq/profiler/callbacks/__init__.py +0 -0
  294. aiq/profiler/callbacks/agno_callback_handler.py +0 -295
  295. aiq/profiler/callbacks/base_callback_class.py +0 -20
  296. aiq/profiler/callbacks/langchain_callback_handler.py +0 -290
  297. aiq/profiler/callbacks/llama_index_callback_handler.py +0 -205
  298. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +0 -238
  299. aiq/profiler/callbacks/token_usage_base_model.py +0 -27
  300. aiq/profiler/data_frame_row.py +0 -51
  301. aiq/profiler/data_models.py +0 -24
  302. aiq/profiler/decorators/__init__.py +0 -0
  303. aiq/profiler/decorators/framework_wrapper.py +0 -131
  304. aiq/profiler/decorators/function_tracking.py +0 -254
  305. aiq/profiler/forecasting/__init__.py +0 -0
  306. aiq/profiler/forecasting/config.py +0 -18
  307. aiq/profiler/forecasting/model_trainer.py +0 -75
  308. aiq/profiler/forecasting/models/__init__.py +0 -22
  309. aiq/profiler/forecasting/models/forecasting_base_model.py +0 -40
  310. aiq/profiler/forecasting/models/linear_model.py +0 -196
  311. aiq/profiler/forecasting/models/random_forest_regressor.py +0 -268
  312. aiq/profiler/inference_metrics_model.py +0 -28
  313. aiq/profiler/inference_optimization/__init__.py +0 -0
  314. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  315. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +0 -460
  316. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +0 -258
  317. aiq/profiler/inference_optimization/data_models.py +0 -386
  318. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  319. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +0 -468
  320. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +0 -405
  321. aiq/profiler/inference_optimization/llm_metrics.py +0 -212
  322. aiq/profiler/inference_optimization/prompt_caching.py +0 -163
  323. aiq/profiler/inference_optimization/token_uniqueness.py +0 -107
  324. aiq/profiler/inference_optimization/workflow_runtimes.py +0 -72
  325. aiq/profiler/intermediate_property_adapter.py +0 -102
  326. aiq/profiler/profile_runner.py +0 -473
  327. aiq/profiler/utils.py +0 -184
  328. aiq/registry_handlers/__init__.py +0 -0
  329. aiq/registry_handlers/local/__init__.py +0 -0
  330. aiq/registry_handlers/local/local_handler.py +0 -176
  331. aiq/registry_handlers/local/register_local.py +0 -37
  332. aiq/registry_handlers/metadata_factory.py +0 -60
  333. aiq/registry_handlers/package_utils.py +0 -198
  334. aiq/registry_handlers/pypi/__init__.py +0 -0
  335. aiq/registry_handlers/pypi/pypi_handler.py +0 -251
  336. aiq/registry_handlers/pypi/register_pypi.py +0 -40
  337. aiq/registry_handlers/register.py +0 -21
  338. aiq/registry_handlers/registry_handler_base.py +0 -157
  339. aiq/registry_handlers/rest/__init__.py +0 -0
  340. aiq/registry_handlers/rest/register_rest.py +0 -56
  341. aiq/registry_handlers/rest/rest_handler.py +0 -237
  342. aiq/registry_handlers/schemas/__init__.py +0 -0
  343. aiq/registry_handlers/schemas/headers.py +0 -42
  344. aiq/registry_handlers/schemas/package.py +0 -68
  345. aiq/registry_handlers/schemas/publish.py +0 -63
  346. aiq/registry_handlers/schemas/pull.py +0 -82
  347. aiq/registry_handlers/schemas/remove.py +0 -36
  348. aiq/registry_handlers/schemas/search.py +0 -91
  349. aiq/registry_handlers/schemas/status.py +0 -47
  350. aiq/retriever/__init__.py +0 -0
  351. aiq/retriever/interface.py +0 -37
  352. aiq/retriever/milvus/__init__.py +0 -14
  353. aiq/retriever/milvus/register.py +0 -81
  354. aiq/retriever/milvus/retriever.py +0 -228
  355. aiq/retriever/models.py +0 -74
  356. aiq/retriever/nemo_retriever/__init__.py +0 -14
  357. aiq/retriever/nemo_retriever/register.py +0 -60
  358. aiq/retriever/nemo_retriever/retriever.py +0 -190
  359. aiq/retriever/register.py +0 -22
  360. aiq/runtime/__init__.py +0 -14
  361. aiq/runtime/loader.py +0 -194
  362. aiq/runtime/runner.py +0 -190
  363. aiq/runtime/session.py +0 -158
  364. aiq/runtime/user_metadata.py +0 -130
  365. aiq/settings/__init__.py +0 -0
  366. aiq/settings/global_settings.py +0 -318
  367. aiq/test/.namespace +0 -1
  368. aiq/tool/__init__.py +0 -0
  369. aiq/tool/chat_completion.py +0 -74
  370. aiq/tool/code_execution/README.md +0 -152
  371. aiq/tool/code_execution/__init__.py +0 -0
  372. aiq/tool/code_execution/code_sandbox.py +0 -267
  373. aiq/tool/code_execution/local_sandbox/.gitignore +0 -1
  374. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +0 -60
  375. aiq/tool/code_execution/local_sandbox/__init__.py +0 -13
  376. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +0 -198
  377. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +0 -6
  378. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +0 -50
  379. aiq/tool/code_execution/register.py +0 -74
  380. aiq/tool/code_execution/test_code_execution_sandbox.py +0 -414
  381. aiq/tool/code_execution/utils.py +0 -100
  382. aiq/tool/datetime_tools.py +0 -42
  383. aiq/tool/document_search.py +0 -141
  384. aiq/tool/github_tools/__init__.py +0 -0
  385. aiq/tool/github_tools/create_github_commit.py +0 -133
  386. aiq/tool/github_tools/create_github_issue.py +0 -87
  387. aiq/tool/github_tools/create_github_pr.py +0 -106
  388. aiq/tool/github_tools/get_github_file.py +0 -106
  389. aiq/tool/github_tools/get_github_issue.py +0 -166
  390. aiq/tool/github_tools/get_github_pr.py +0 -256
  391. aiq/tool/github_tools/update_github_issue.py +0 -100
  392. aiq/tool/mcp/__init__.py +0 -14
  393. aiq/tool/mcp/exceptions.py +0 -142
  394. aiq/tool/mcp/mcp_client.py +0 -255
  395. aiq/tool/mcp/mcp_tool.py +0 -96
  396. aiq/tool/memory_tools/__init__.py +0 -0
  397. aiq/tool/memory_tools/add_memory_tool.py +0 -79
  398. aiq/tool/memory_tools/delete_memory_tool.py +0 -67
  399. aiq/tool/memory_tools/get_memory_tool.py +0 -72
  400. aiq/tool/nvidia_rag.py +0 -95
  401. aiq/tool/register.py +0 -38
  402. aiq/tool/retriever.py +0 -89
  403. aiq/tool/server_tools.py +0 -66
  404. aiq/utils/__init__.py +0 -0
  405. aiq/utils/data_models/__init__.py +0 -0
  406. aiq/utils/data_models/schema_validator.py +0 -58
  407. aiq/utils/debugging_utils.py +0 -43
  408. aiq/utils/exception_handlers/__init__.py +0 -0
  409. aiq/utils/exception_handlers/automatic_retries.py +0 -289
  410. aiq/utils/exception_handlers/mcp.py +0 -211
  411. aiq/utils/exception_handlers/schemas.py +0 -114
  412. aiq/utils/io/__init__.py +0 -0
  413. aiq/utils/io/model_processing.py +0 -28
  414. aiq/utils/io/yaml_tools.py +0 -119
  415. aiq/utils/log_utils.py +0 -37
  416. aiq/utils/metadata_utils.py +0 -74
  417. aiq/utils/optional_imports.py +0 -142
  418. aiq/utils/producer_consumer_queue.py +0 -178
  419. aiq/utils/reactive/__init__.py +0 -0
  420. aiq/utils/reactive/base/__init__.py +0 -0
  421. aiq/utils/reactive/base/observable_base.py +0 -65
  422. aiq/utils/reactive/base/observer_base.py +0 -55
  423. aiq/utils/reactive/base/subject_base.py +0 -79
  424. aiq/utils/reactive/observable.py +0 -59
  425. aiq/utils/reactive/observer.py +0 -76
  426. aiq/utils/reactive/subject.py +0 -131
  427. aiq/utils/reactive/subscription.py +0 -49
  428. aiq/utils/settings/__init__.py +0 -0
  429. aiq/utils/settings/global_settings.py +0 -197
  430. aiq/utils/string_utils.py +0 -38
  431. aiq/utils/type_converter.py +0 -290
  432. aiq/utils/type_utils.py +0 -484
  433. aiq/utils/url_utils.py +0 -27
  434. aiqtoolkit-1.2.0rc3.dist-info/METADATA +0 -363
  435. aiqtoolkit-1.2.0rc3.dist-info/RECORD +0 -437
  436. aiqtoolkit-1.2.0rc3.dist-info/entry_points.txt +0 -20
  437. aiqtoolkit-1.2.0rc3.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  438. aiqtoolkit-1.2.0rc3.dist-info/licenses/LICENSE.md +0 -201
  439. aiqtoolkit-1.2.0rc3.dist-info/top_level.txt +0 -1
  440. {aiqtoolkit-1.2.0rc3.dist-info → aiqtoolkit-1.2.0rc5.dist-info}/WHEEL +0 -0
@@ -1,694 +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_serializer
30
- from pydantic import field_validator
31
- from pydantic_core.core_schema import ValidationInfo
32
-
33
- from aiq.data_models.interactive import HumanPrompt
34
- from aiq.utils.type_converter import GlobalTypeConverter
35
-
36
-
37
- class Request(BaseModel):
38
- """
39
- Request is a data model that represents HTTP request attributes.
40
- """
41
- model_config = ConfigDict(extra="forbid")
42
-
43
- method: str | None = Field(default=None,
44
- description="HTTP method used for the request (e.g., GET, POST, PUT, DELETE).")
45
- url_path: str | None = Field(default=None, description="URL request path.")
46
- url_port: int | None = Field(default=None, description="URL request port number.")
47
- url_scheme: str | None = Field(default=None, description="URL scheme indicating the protocol (e.g., http, https).")
48
- headers: typing.Any | None = Field(default=None, description="HTTP headers associated with the request.")
49
- query_params: typing.Any | None = Field(default=None, description="Query parameters included in the request URL.")
50
- path_params: dict[str, str] | None = Field(default=None,
51
- description="Path parameters extracted from the request URL.")
52
- client_host: str | None = Field(default=None, description="Client host address from which the request originated.")
53
- client_port: int | None = Field(default=None, description="Client port number from which the request originated.")
54
- cookies: dict[str, str] | None = Field(
55
- default=None, description="Cookies sent with the request, stored in a dictionary-like object.")
56
-
57
-
58
- class ChatContentType(str, Enum):
59
- """
60
- ChatContentType is an Enum that represents the type of Chat content.
61
- """
62
- TEXT = "text"
63
- IMAGE_URL = "image_url"
64
- INPUT_AUDIO = "input_audio"
65
-
66
-
67
- class InputAudio(BaseModel):
68
- data: str = "default"
69
- format: str = "default"
70
-
71
-
72
- class AudioContent(BaseModel):
73
- model_config = ConfigDict(extra="forbid")
74
-
75
- type: typing.Literal[ChatContentType.INPUT_AUDIO] = ChatContentType.INPUT_AUDIO
76
- input_audio: InputAudio = InputAudio()
77
-
78
-
79
- class ImageUrl(BaseModel):
80
- url: HttpUrl = HttpUrl(url="http://default.com")
81
-
82
-
83
- class ImageContent(BaseModel):
84
- model_config = ConfigDict(extra="forbid")
85
-
86
- type: typing.Literal[ChatContentType.IMAGE_URL] = ChatContentType.IMAGE_URL
87
- image_url: ImageUrl = ImageUrl()
88
-
89
-
90
- class TextContent(BaseModel):
91
- model_config = ConfigDict(extra="forbid")
92
-
93
- type: typing.Literal[ChatContentType.TEXT] = ChatContentType.TEXT
94
- text: str = "default"
95
-
96
-
97
- class Security(BaseModel):
98
- model_config = ConfigDict(extra="forbid")
99
-
100
- api_key: str = "default"
101
- token: str = "default"
102
-
103
-
104
- UserContent = typing.Annotated[TextContent | ImageContent | AudioContent, Discriminator("type")]
105
-
106
-
107
- class Message(BaseModel):
108
- content: str | list[UserContent]
109
- role: str
110
-
111
-
112
- class AIQChatRequest(BaseModel):
113
- """
114
- AIQChatRequest is a data model that represents a request to the AIQ Toolkit chat API.
115
- Fully compatible with OpenAI Chat Completions API specification.
116
- """
117
-
118
- # Required fields
119
- messages: typing.Annotated[list[Message], conlist(Message, min_length=1)]
120
-
121
- # Optional fields (OpenAI Chat Completions API compatible)
122
- model: str | None = Field(default=None, description="name of the model to use")
123
- frequency_penalty: float | None = Field(default=0.0,
124
- description="Penalty for new tokens based on frequency in text")
125
- logit_bias: dict[str, float] | None = Field(default=None,
126
- description="Modify likelihood of specified tokens appearing")
127
- logprobs: bool | None = Field(default=None, description="Whether to return log probabilities")
128
- top_logprobs: int | None = Field(default=None, description="Number of most likely tokens to return")
129
- max_tokens: int | None = Field(default=None, description="Maximum number of tokens to generate")
130
- n: int | None = Field(default=1, description="Number of chat completion choices to generate")
131
- presence_penalty: float | None = Field(default=0.0, description="Penalty for new tokens based on presence in text")
132
- response_format: dict[str, typing.Any] | None = Field(default=None, description="Response format specification")
133
- seed: int | None = Field(default=None, description="Random seed for deterministic sampling")
134
- service_tier: typing.Literal["auto", "default"] | None = Field(default=None,
135
- description="Service tier for the request")
136
- stream: bool | None = Field(default=False, description="Whether to stream partial message deltas")
137
- stream_options: dict[str, typing.Any] | None = Field(default=None, description="Options for streaming")
138
- temperature: float | None = Field(default=1.0, description="Sampling temperature between 0 and 2")
139
- top_p: float | None = Field(default=None, description="Nucleus sampling parameter")
140
- tools: list[dict[str, typing.Any]] | None = Field(default=None, description="List of tools the model may call")
141
- tool_choice: str | dict[str, typing.Any] | None = Field(default=None, description="Controls which tool is called")
142
- parallel_tool_calls: bool | None = Field(default=True, description="Whether to enable parallel function calling")
143
- user: str | None = Field(default=None, description="Unique identifier representing end-user")
144
-
145
- model_config = ConfigDict(extra="allow",
146
- json_schema_extra={
147
- "example": {
148
- "model": "nvidia/nemotron",
149
- "messages": [{
150
- "role": "user", "content": "who are you?"
151
- }],
152
- "temperature": 0.7,
153
- "stream": False
154
- }
155
- })
156
-
157
- @staticmethod
158
- def from_string(data: str,
159
- *,
160
- model: str | None = None,
161
- temperature: float | None = None,
162
- max_tokens: int | None = None,
163
- top_p: float | None = None) -> "AIQChatRequest":
164
-
165
- return AIQChatRequest(messages=[Message(content=data, role="user")],
166
- model=model,
167
- temperature=temperature,
168
- max_tokens=max_tokens,
169
- top_p=top_p)
170
-
171
- @staticmethod
172
- def from_content(content: list[UserContent],
173
- *,
174
- model: str | None = None,
175
- temperature: float | None = None,
176
- max_tokens: int | None = None,
177
- top_p: float | None = None) -> "AIQChatRequest":
178
-
179
- return AIQChatRequest(messages=[Message(content=content, role="user")],
180
- model=model,
181
- temperature=temperature,
182
- max_tokens=max_tokens,
183
- top_p=top_p)
184
-
185
-
186
- class AIQChoiceMessage(BaseModel):
187
- content: str | None = None
188
- role: str | None = None
189
-
190
-
191
- class AIQChoiceDelta(BaseModel):
192
- """Delta object for streaming responses (OpenAI-compatible)"""
193
- content: str | None = None
194
- role: str | None = None
195
-
196
-
197
- class AIQChoice(BaseModel):
198
- model_config = ConfigDict(extra="allow")
199
-
200
- message: AIQChoiceMessage | None = None
201
- delta: AIQChoiceDelta | None = None
202
- finish_reason: typing.Literal['stop', 'length', 'tool_calls', 'content_filter', 'function_call'] | None = None
203
- index: int
204
- # logprobs: AIQChoiceLogprobs | None = None
205
-
206
-
207
- class AIQUsage(BaseModel):
208
- prompt_tokens: int
209
- completion_tokens: int
210
- total_tokens: int
211
-
212
-
213
- class AIQResponseSerializable(abc.ABC):
214
- """
215
- AIQChatResponseSerializable is an abstract class that defines the interface for serializing output for the AIQ
216
- Toolkit chat streaming API.
217
- """
218
-
219
- @abstractmethod
220
- def get_stream_data(self) -> str:
221
- pass
222
-
223
-
224
- class AIQResponseBaseModelOutput(BaseModel, AIQResponseSerializable):
225
-
226
- def get_stream_data(self) -> str:
227
- return f"data: {self.model_dump_json()}\n\n"
228
-
229
-
230
- class AIQResponseBaseModelIntermediate(BaseModel, AIQResponseSerializable):
231
-
232
- def get_stream_data(self) -> str:
233
- return f"intermediate_data: {self.model_dump_json()}\n\n"
234
-
235
-
236
- class AIQChatResponse(AIQResponseBaseModelOutput):
237
- """
238
- AIQChatResponse is a data model that represents a response from the AIQ Toolkit chat API.
239
- Fully compatible with OpenAI Chat Completions API specification.
240
- """
241
-
242
- # Allow extra fields in the model_config to support derived models
243
- model_config = ConfigDict(extra="allow")
244
- id: str
245
- object: str = "chat.completion"
246
- model: str = ""
247
- created: datetime.datetime
248
- choices: list[AIQChoice]
249
- usage: AIQUsage | None = None
250
- system_fingerprint: str | None = None
251
- service_tier: typing.Literal["scale", "default"] | None = None
252
-
253
- @field_serializer('created')
254
- def serialize_created(self, created: datetime.datetime) -> int:
255
- """Serialize datetime to Unix timestamp for OpenAI compatibility"""
256
- return int(created.timestamp())
257
-
258
- @staticmethod
259
- def from_string(data: str,
260
- *,
261
- id_: str | None = None,
262
- object_: str | None = None,
263
- model: str | None = None,
264
- created: datetime.datetime | None = None,
265
- usage: AIQUsage | None = None) -> "AIQChatResponse":
266
-
267
- if id_ is None:
268
- id_ = str(uuid.uuid4())
269
- if object_ is None:
270
- object_ = "chat.completion"
271
- if model is None:
272
- model = ""
273
- if created is None:
274
- created = datetime.datetime.now(datetime.timezone.utc)
275
-
276
- return AIQChatResponse(
277
- id=id_,
278
- object=object_,
279
- model=model,
280
- created=created,
281
- choices=[AIQChoice(index=0, message=AIQChoiceMessage(content=data), finish_reason="stop")],
282
- usage=usage)
283
-
284
-
285
- class AIQChatResponseChunk(AIQResponseBaseModelOutput):
286
- """
287
- AIQChatResponseChunk is a data model that represents a response chunk from the AIQ Toolkit chat streaming API.
288
- Fully compatible with OpenAI Chat Completions API specification.
289
- """
290
-
291
- # Allow extra fields in the model_config to support derived models
292
- model_config = ConfigDict(extra="allow")
293
-
294
- id: str
295
- choices: list[AIQChoice]
296
- created: datetime.datetime
297
- model: str = ""
298
- object: str = "chat.completion.chunk"
299
- system_fingerprint: str | None = None
300
- service_tier: typing.Literal["scale", "default"] | None = None
301
- usage: AIQUsage | None = None
302
-
303
- @field_serializer('created')
304
- def serialize_created(self, created: datetime.datetime) -> int:
305
- """Serialize datetime to Unix timestamp for OpenAI compatibility"""
306
- return int(created.timestamp())
307
-
308
- @staticmethod
309
- def from_string(data: str,
310
- *,
311
- id_: str | None = None,
312
- created: datetime.datetime | None = None,
313
- model: str | None = None,
314
- object_: str | None = None) -> "AIQChatResponseChunk":
315
-
316
- if id_ is None:
317
- id_ = str(uuid.uuid4())
318
- if created is None:
319
- created = datetime.datetime.now(datetime.timezone.utc)
320
- if model is None:
321
- model = ""
322
- if object_ is None:
323
- object_ = "chat.completion.chunk"
324
-
325
- return AIQChatResponseChunk(
326
- id=id_,
327
- choices=[AIQChoice(index=0, message=AIQChoiceMessage(content=data), finish_reason="stop")],
328
- created=created,
329
- model=model,
330
- object=object_)
331
-
332
- @staticmethod
333
- def create_streaming_chunk(content: str,
334
- *,
335
- id_: str | None = None,
336
- created: datetime.datetime | None = None,
337
- model: str | None = None,
338
- role: str | None = None,
339
- finish_reason: str | None = None,
340
- usage: AIQUsage | None = None,
341
- system_fingerprint: str | None = None) -> "AIQChatResponseChunk":
342
- """Create an OpenAI-compatible streaming chunk"""
343
- if id_ is None:
344
- id_ = str(uuid.uuid4())
345
- if created is None:
346
- created = datetime.datetime.now(datetime.timezone.utc)
347
- if model is None:
348
- model = ""
349
-
350
- delta = AIQChoiceDelta(content=content,
351
- role=role) if content is not None or role is not None else AIQChoiceDelta()
352
-
353
- return AIQChatResponseChunk(
354
- id=id_,
355
- choices=[AIQChoice(index=0, message=None, delta=delta, finish_reason=finish_reason)],
356
- created=created,
357
- model=model,
358
- object="chat.completion.chunk",
359
- usage=usage,
360
- system_fingerprint=system_fingerprint)
361
-
362
-
363
- class AIQResponseIntermediateStep(AIQResponseBaseModelIntermediate):
364
- """
365
- AIQResponseSerializedStep is a data model that represents a serialized step in the AIQ Toolkit chat streaming API.
366
- """
367
-
368
- # Allow extra fields in the model_config to support derived models
369
- model_config = ConfigDict(extra="allow")
370
-
371
- id: str
372
- parent_id: str | None = None
373
- type: str = "markdown"
374
- name: str
375
- payload: str
376
-
377
-
378
- class AIQResponsePayloadOutput(BaseModel, AIQResponseSerializable):
379
-
380
- payload: typing.Any
381
-
382
- def get_stream_data(self) -> str:
383
-
384
- if (isinstance(self.payload, BaseModel)):
385
- return f"data: {self.payload.model_dump_json()}\n\n"
386
-
387
- return f"data: {self.payload}\n\n"
388
-
389
-
390
- class AIQGenerateResponse(BaseModel):
391
- # Allow extra fields in the model_config to support derived models
392
- model_config = ConfigDict(extra="allow")
393
-
394
- # (fixme) define the intermediate step model
395
- intermediate_steps: list[tuple] | None = None
396
- output: str
397
- value: str | None = "default"
398
-
399
-
400
- class UserMessageContentRoleType(str, Enum):
401
- USER = "user"
402
- ASSISTANT = "assistant"
403
-
404
-
405
- class WebSocketMessageType(str, Enum):
406
- """
407
- WebSocketMessageType is an Enum that represents WebSocket Message types.
408
- """
409
- USER_MESSAGE = "user_message"
410
- RESPONSE_MESSAGE = "system_response_message"
411
- INTERMEDIATE_STEP_MESSAGE = "system_intermediate_message"
412
- SYSTEM_INTERACTION_MESSAGE = "system_interaction_message"
413
- USER_INTERACTION_MESSAGE = "user_interaction_message"
414
- ERROR_MESSAGE = "error_message"
415
-
416
-
417
- class WorkflowSchemaType(str, Enum):
418
- """
419
- WorkflowSchemaType is an Enum that represents Workkflow response types.
420
- """
421
- GENERATE_STREAM = "generate_stream"
422
- CHAT_STREAM = "chat_stream"
423
- GENERATE = "generate"
424
- CHAT = "chat"
425
-
426
-
427
- class WebSocketMessageStatus(str, Enum):
428
- """
429
- WebSocketMessageStatus is an Enum that represents the status of a WebSocket message.
430
- """
431
- IN_PROGRESS = "in_progress"
432
- COMPLETE = "complete"
433
-
434
-
435
- class UserMessages(BaseModel):
436
- model_config = ConfigDict(extra="forbid")
437
-
438
- role: UserMessageContentRoleType
439
- content: list[UserContent]
440
-
441
-
442
- class UserMessageContent(BaseModel):
443
- model_config = ConfigDict(extra="forbid")
444
- messages: list[UserMessages]
445
-
446
-
447
- class User(BaseModel):
448
- model_config = ConfigDict(extra="forbid")
449
-
450
- name: str = "default"
451
- email: str = "default"
452
-
453
-
454
- class ErrorTypes(str, Enum):
455
- UNKNOWN_ERROR = "unknown_error"
456
- INVALID_MESSAGE = "invalid_message"
457
- INVALID_MESSAGE_TYPE = "invalid_message_type"
458
- INVALID_USER_MESSAGE_CONTENT = "invalid_user_message_content"
459
- INVALID_DATA_CONTENT = "invalid_data_content"
460
-
461
-
462
- class Error(BaseModel):
463
- model_config = ConfigDict(extra="forbid")
464
-
465
- code: ErrorTypes = ErrorTypes.UNKNOWN_ERROR
466
- message: str = "default"
467
- details: str = "default"
468
-
469
-
470
- class WebSocketUserMessage(BaseModel):
471
- """
472
- For more details, refer to the API documentation:
473
- docs/source/developer_guide/websockets.md
474
- """
475
- # Allow extra fields in the model_config to support derived models
476
- model_config = ConfigDict(extra="allow")
477
-
478
- type: typing.Literal[WebSocketMessageType.USER_MESSAGE]
479
- schema_type: WorkflowSchemaType
480
- id: str = "default"
481
- conversation_id: str | None = None
482
- content: UserMessageContent
483
- user: User = User()
484
- security: Security = Security()
485
- error: Error = Error()
486
- schema_version: str = "1.0.0"
487
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
488
-
489
-
490
- class WebSocketUserInteractionResponseMessage(BaseModel):
491
- """
492
- For more details, refer to the API documentation:
493
- docs/source/developer_guide/websockets.md
494
- """
495
- type: typing.Literal[WebSocketMessageType.USER_INTERACTION_MESSAGE]
496
- id: str = "default"
497
- thread_id: str = "default"
498
- content: UserMessageContent
499
- user: User = User()
500
- security: Security = Security()
501
- error: Error = Error()
502
- schema_version: str = "1.0.0"
503
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
504
-
505
-
506
- class SystemIntermediateStepContent(BaseModel):
507
- model_config = ConfigDict(extra="forbid")
508
- name: str
509
- payload: str
510
-
511
-
512
- class WebSocketSystemIntermediateStepMessage(BaseModel):
513
- """
514
- For more details, refer to the API documentation:
515
- docs/source/developer_guide/websockets.md
516
- """
517
- # Allow extra fields in the model_config to support derived models
518
- model_config = ConfigDict(extra="allow")
519
-
520
- type: typing.Literal[WebSocketMessageType.INTERMEDIATE_STEP_MESSAGE]
521
- id: str = "default"
522
- thread_id: str | None = "default"
523
- parent_id: str = "default"
524
- intermediate_parent_id: str | None = "default"
525
- update_message_id: str | None = "default"
526
- content: SystemIntermediateStepContent
527
- status: WebSocketMessageStatus
528
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
529
-
530
-
531
- class SystemResponseContent(BaseModel):
532
- model_config = ConfigDict(extra="forbid")
533
-
534
- text: str | None = None
535
-
536
-
537
- class WebSocketSystemResponseTokenMessage(BaseModel):
538
- """
539
- For more details, refer to the API documentation:
540
- docs/source/developer_guide/websockets.md
541
- """
542
- # Allow extra fields in the model_config to support derived models
543
- model_config = ConfigDict(extra="allow")
544
-
545
- type: typing.Literal[WebSocketMessageType.RESPONSE_MESSAGE, WebSocketMessageType.ERROR_MESSAGE]
546
- id: str | None = "default"
547
- thread_id: str | None = "default"
548
- parent_id: str = "default"
549
- content: SystemResponseContent | Error | AIQGenerateResponse
550
- status: WebSocketMessageStatus
551
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
552
-
553
- @field_validator("content")
554
- @classmethod
555
- def validate_content_by_type(cls, value: SystemResponseContent | Error | AIQGenerateResponse, info: ValidationInfo):
556
- if info.data.get("type") == WebSocketMessageType.ERROR_MESSAGE and not isinstance(value, Error):
557
- raise ValueError(f"Field: content must be 'Error' when type is {WebSocketMessageType.ERROR_MESSAGE}")
558
-
559
- if info.data.get("type") == WebSocketMessageType.RESPONSE_MESSAGE and not isinstance(
560
- value, (SystemResponseContent, AIQGenerateResponse)):
561
- raise ValueError(
562
- f"Field: content must be 'SystemResponseContent' when type is {WebSocketMessageType.RESPONSE_MESSAGE}")
563
- return value
564
-
565
-
566
- class WebSocketSystemInteractionMessage(BaseModel):
567
- """
568
- For more details, refer to the API documentation:
569
- docs/source/developer_guide/websockets.md
570
- """
571
- # Allow extra fields in the model_config to support derived models
572
- model_config = ConfigDict(extra="allow")
573
-
574
- type: typing.Literal[
575
- WebSocketMessageType.SYSTEM_INTERACTION_MESSAGE] = WebSocketMessageType.SYSTEM_INTERACTION_MESSAGE
576
- id: str | None = "default"
577
- thread_id: str | None = "default"
578
- parent_id: str = "default"
579
- content: HumanPrompt
580
- status: WebSocketMessageStatus
581
- timestamp: str = str(datetime.datetime.now(datetime.timezone.utc))
582
-
583
-
584
- # ======== AIQGenerateResponse Converters ========
585
-
586
-
587
- def _generate_response_to_str(response: AIQGenerateResponse) -> str:
588
- return response.output
589
-
590
-
591
- GlobalTypeConverter.register_converter(_generate_response_to_str)
592
-
593
-
594
- def _generate_response_to_chat_response(response: AIQGenerateResponse) -> AIQChatResponse:
595
- data = response.output
596
-
597
- # Simulate usage
598
- prompt_tokens = 0
599
- usage = AIQUsage(prompt_tokens=prompt_tokens,
600
- completion_tokens=len(data.split()),
601
- total_tokens=prompt_tokens + len(data.split()))
602
-
603
- # Build and return the response
604
- return AIQChatResponse.from_string(data, usage=usage)
605
-
606
-
607
- GlobalTypeConverter.register_converter(_generate_response_to_chat_response)
608
-
609
-
610
- # ======== AIQChatRequest Converters ========
611
- def _aiq_chat_request_to_string(data: AIQChatRequest) -> str:
612
- if isinstance(data.messages[-1].content, str):
613
- return data.messages[-1].content
614
- return str(data.messages[-1].content)
615
-
616
-
617
- GlobalTypeConverter.register_converter(_aiq_chat_request_to_string)
618
-
619
-
620
- def _string_to_aiq_chat_request(data: str) -> AIQChatRequest:
621
- return AIQChatRequest.from_string(data, model="")
622
-
623
-
624
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_request)
625
-
626
-
627
- # ======== AIQChatResponse Converters ========
628
- def _aiq_chat_response_to_string(data: AIQChatResponse) -> str:
629
- return data.choices[0].message.content or ""
630
-
631
-
632
- GlobalTypeConverter.register_converter(_aiq_chat_response_to_string)
633
-
634
-
635
- def _string_to_aiq_chat_response(data: str) -> AIQChatResponse:
636
- '''Converts a string to an AIQChatResponse object'''
637
-
638
- # Simulate usage
639
- prompt_tokens = 0
640
- usage = AIQUsage(prompt_tokens=prompt_tokens,
641
- completion_tokens=len(data.split()),
642
- total_tokens=prompt_tokens + len(data.split()))
643
-
644
- # Build and return the response
645
- return AIQChatResponse.from_string(data, usage=usage)
646
-
647
-
648
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_response)
649
-
650
-
651
- def _chat_response_to_chat_response_chunk(data: AIQChatResponse) -> AIQChatResponseChunk:
652
- # Preserve original message structure for backward compatibility
653
- return AIQChatResponseChunk(id=data.id, choices=data.choices, created=data.created, model=data.model)
654
-
655
-
656
- GlobalTypeConverter.register_converter(_chat_response_to_chat_response_chunk)
657
-
658
-
659
- # ======== AIQChatResponseChunk Converters ========
660
- def _aiq_chat_response_chunk_to_string(data: AIQChatResponseChunk) -> str:
661
- if data.choices and len(data.choices) > 0:
662
- choice = data.choices[0]
663
- if choice.delta and choice.delta.content:
664
- return choice.delta.content
665
- if choice.message and choice.message.content:
666
- return choice.message.content
667
- return ""
668
-
669
-
670
- GlobalTypeConverter.register_converter(_aiq_chat_response_chunk_to_string)
671
-
672
-
673
- def _string_to_aiq_chat_response_chunk(data: str) -> AIQChatResponseChunk:
674
- '''Converts a string to an AIQChatResponseChunk object'''
675
-
676
- # Build and return the response
677
- return AIQChatResponseChunk.from_string(data)
678
-
679
-
680
- GlobalTypeConverter.register_converter(_string_to_aiq_chat_response_chunk)
681
-
682
-
683
- # ======== AINodeMessageChunk Converters ========
684
- def _ai_message_chunk_to_aiq_chat_response_chunk(data) -> AIQChatResponseChunk:
685
- '''Converts LangChain AINodeMessageChunk to AIQChatResponseChunk'''
686
- content = ""
687
- if hasattr(data, 'content') and data.content is not None:
688
- content = str(data.content)
689
- elif hasattr(data, 'text') and data.text is not None:
690
- content = str(data.text)
691
- elif hasattr(data, 'message') and data.message is not None:
692
- content = str(data.message)
693
-
694
- return AIQChatResponseChunk.create_streaming_chunk(content=content, role="assistant", finish_reason=None)