aiqtoolkit 1.2.0rc4__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 (441) 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 -96
  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 -335
  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 -76
  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 -567
  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 -215
  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 -151
  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/dump_distro_mapping.py +0 -32
  409. aiq/utils/exception_handlers/__init__.py +0 -0
  410. aiq/utils/exception_handlers/automatic_retries.py +0 -289
  411. aiq/utils/exception_handlers/mcp.py +0 -211
  412. aiq/utils/exception_handlers/schemas.py +0 -114
  413. aiq/utils/io/__init__.py +0 -0
  414. aiq/utils/io/model_processing.py +0 -28
  415. aiq/utils/io/yaml_tools.py +0 -119
  416. aiq/utils/log_utils.py +0 -37
  417. aiq/utils/metadata_utils.py +0 -74
  418. aiq/utils/optional_imports.py +0 -142
  419. aiq/utils/producer_consumer_queue.py +0 -178
  420. aiq/utils/reactive/__init__.py +0 -0
  421. aiq/utils/reactive/base/__init__.py +0 -0
  422. aiq/utils/reactive/base/observable_base.py +0 -65
  423. aiq/utils/reactive/base/observer_base.py +0 -55
  424. aiq/utils/reactive/base/subject_base.py +0 -79
  425. aiq/utils/reactive/observable.py +0 -59
  426. aiq/utils/reactive/observer.py +0 -76
  427. aiq/utils/reactive/subject.py +0 -131
  428. aiq/utils/reactive/subscription.py +0 -49
  429. aiq/utils/settings/__init__.py +0 -0
  430. aiq/utils/settings/global_settings.py +0 -197
  431. aiq/utils/string_utils.py +0 -38
  432. aiq/utils/type_converter.py +0 -290
  433. aiq/utils/type_utils.py +0 -484
  434. aiq/utils/url_utils.py +0 -27
  435. aiqtoolkit-1.2.0rc4.dist-info/METADATA +0 -363
  436. aiqtoolkit-1.2.0rc4.dist-info/RECORD +0 -438
  437. aiqtoolkit-1.2.0rc4.dist-info/entry_points.txt +0 -20
  438. aiqtoolkit-1.2.0rc4.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  439. aiqtoolkit-1.2.0rc4.dist-info/licenses/LICENSE.md +0 -201
  440. aiqtoolkit-1.2.0rc4.dist-info/top_level.txt +0 -1
  441. {aiqtoolkit-1.2.0rc4.dist-info → aiqtoolkit-1.2.0rc5.dist-info}/WHEEL +0 -0
@@ -1,238 +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 copy
17
- import logging
18
- import threading
19
- import time
20
- from collections.abc import Callable
21
- from typing import Any
22
- from uuid import uuid4
23
-
24
- import semantic_kernel
25
- from pydantic import BaseModel
26
- from pydantic import Field
27
- from semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base import OpenAIChatCompletionBase
28
-
29
- from aiq.builder.context import AIQContext
30
- from aiq.builder.framework_enum import LLMFrameworkEnum
31
- from aiq.data_models.intermediate_step import IntermediateStepPayload
32
- from aiq.data_models.intermediate_step import IntermediateStepType
33
- from aiq.data_models.intermediate_step import StreamEventData
34
- from aiq.data_models.intermediate_step import TraceMetadata
35
- from aiq.data_models.intermediate_step import UsageInfo
36
- from aiq.profiler.callbacks.base_callback_class import BaseProfilerCallback
37
- from aiq.profiler.callbacks.token_usage_base_model import TokenUsageBaseModel
38
-
39
- logger = logging.getLogger(__name__)
40
-
41
-
42
- class SemanticKernelPatchMethod(BaseModel):
43
- """
44
- Stores the module and function to patch in Semantic Kernel.
45
- """
46
- module: Any = Field(..., description="The module to patch")
47
- function: str = Field(..., description="The function to patch")
48
-
49
-
50
- class SemanticKernelProfilerHandler(BaseProfilerCallback):
51
- """
52
- A callback manager/handler for Msft Semantic Kernel that intercepts calls to:
53
-
54
- - Chat Completions Endpoints
55
- - Tool calls
56
-
57
- to collect usage statistics (tokens, inputs, outputs, time intervals, etc.)
58
- and store them in AIQ Toolkit's usage_stats queue for subsequent analysis.
59
- """
60
-
61
- def __init__(self, workflow_llms: dict) -> None:
62
- super().__init__()
63
- self._lock = threading.Lock()
64
- self.last_call_ts = time.time()
65
- self.step_manager = AIQContext.get().intermediate_step_manager
66
- self._builder_llms = workflow_llms
67
-
68
- # Original references to SK methods
69
- self._original_tool_call = None
70
-
71
- # Store a mapping of current SK methods we support patching for
72
- self._patch_methods = {
73
- "openai_streaming":
74
- SemanticKernelPatchMethod(module=OpenAIChatCompletionBase,
75
- function="_inner_get_streaming_chat_message_contents"),
76
- "openai_non_streaming":
77
- SemanticKernelPatchMethod(module=OpenAIChatCompletionBase, function="_inner_get_chat_message_contents")
78
- }
79
-
80
- def instrument(self) -> None:
81
- """
82
- Monkey-patch the relevant Semantic Kernel methods with usage-stat collection logic.
83
- """
84
-
85
- functions_to_patch = []
86
-
87
- # Gather the appropriate modules/functions based on your builder config
88
- for llm in self._builder_llms:
89
- if self._builder_llms[llm].provider_type == 'openai': # pylint: disable=consider-using-in
90
- functions_to_patch.extend(["openai_non_streaming", "openai_streaming"])
91
-
92
- # Grab original reference for the tool call
93
- self._original_tool_call = getattr(semantic_kernel.Kernel, "invoke_function_call", None)
94
-
95
- # Now do direct monkey-patching: replace each function with a closure
96
- for method in functions_to_patch:
97
- patch_method = self._patch_methods[method]
98
- setattr(patch_method.module,
99
- patch_method.function,
100
- self._build_llm_call_patch(getattr(patch_method.module, patch_method.function)))
101
-
102
- if self._original_tool_call:
103
- patched_tool_call = self._build_tool_call_patch(self._original_tool_call)
104
- setattr(semantic_kernel.Kernel, "invoke_function_call", patched_tool_call)
105
-
106
- logger.debug("SemanticKernelProfilerHandler instrumentation applied successfully.")
107
-
108
- def _build_llm_call_patch(self, original_func: Callable[..., Any]) -> Callable[..., Any]:
109
- """
110
- Returns an async monkey-patch that wraps the original chat-completion method.
111
- Replicates the usage collection from _llm_call_wrapper.
112
- """
113
-
114
- async def patched_llm_call(sk_self, *args, **kwargs) -> Any:
115
- now = time.time()
116
- seconds_between_calls = int(now - self.last_call_ts)
117
- uuid = str(uuid4())
118
-
119
- # Build the input stats
120
- if args:
121
- chat_input = [copy.deepcopy(args[0].model_dump())]
122
- else:
123
- # if no args, fallback on kwargs["chat_history"]
124
- chat_input = [kwargs["chat_history"].model_dump()]
125
-
126
- model_name = sk_self.ai_model_id
127
-
128
- model_input = ""
129
- try:
130
- for message in chat_input[0]["messages"]:
131
- for item in message["items"]:
132
- if "text" in item:
133
- model_input += item["text"]
134
- except Exception as e:
135
- logger.exception("Error in getting model input: %s", e, exc_info=True)
136
-
137
- input_stats = IntermediateStepPayload(event_type=IntermediateStepType.LLM_START,
138
- framework=LLMFrameworkEnum.SEMANTIC_KERNEL,
139
- name=model_name,
140
- UUID=uuid,
141
- data=StreamEventData(input=model_input),
142
- metadata=TraceMetadata(chat_inputs=copy.deepcopy(chat_input)),
143
- usage_info=UsageInfo(token_usage=TokenUsageBaseModel(),
144
- num_llm_calls=1,
145
- seconds_between_calls=seconds_between_calls))
146
-
147
- self.step_manager.push_intermediate_step(input_stats)
148
-
149
- # Call the original method
150
- output = await original_func(sk_self, *args, **kwargs)
151
-
152
- model_output = output[0].content
153
- now = time.time()
154
- # Build the output stats
155
- output_stats = IntermediateStepPayload(
156
- event_type=IntermediateStepType.LLM_END,
157
- span_event_timestamp=now,
158
- framework=LLMFrameworkEnum.SEMANTIC_KERNEL,
159
- name=model_name,
160
- UUID=uuid,
161
- data=StreamEventData(input=model_input, output=model_output),
162
- metadata=TraceMetadata(chat_responses=output[0].model_dump()),
163
- usage_info=UsageInfo(token_usage=TokenUsageBaseModel(**output[0].metadata["usage"].model_dump())))
164
-
165
- self.step_manager.push_intermediate_step(output_stats)
166
-
167
- # Update last_call_ts
168
- self.last_call_ts = time.time()
169
-
170
- return output
171
-
172
- return patched_llm_call
173
-
174
- def _build_tool_call_patch(self, original_func: Callable[..., Any]) -> Callable[..., Any]:
175
- """
176
- Returns an async monkey-patch that wraps the original tool call (invoke_function_call).
177
- Replicates usage collection from _tool_use_wrapper.
178
- """
179
-
180
- async def patched_tool_call(kernel_self, *args, **kwargs) -> Any:
181
-
182
- uuid = str(uuid4())
183
- now = time.time()
184
- # Extract the tool input
185
- if kwargs:
186
- tool_input = kwargs["function_call"].model_dump(exclude="content_type")
187
- else:
188
- tool_input = args[0].model_dump(exclude="content_type")
189
-
190
- try:
191
- # Pre-call usage event
192
- input_stat = IntermediateStepPayload(event_type=IntermediateStepType.TOOL_START,
193
- framework=LLMFrameworkEnum.SEMANTIC_KERNEL,
194
- name=tool_input["name"],
195
- UUID=uuid,
196
- data=StreamEventData(input=tool_input),
197
- metadata=TraceMetadata(tool_inputs=copy.deepcopy(tool_input),
198
- tool_info=copy.deepcopy(tool_input)),
199
- usage_info=UsageInfo(token_usage=TokenUsageBaseModel()))
200
-
201
- self.step_manager.push_intermediate_step(input_stat)
202
- now = time.time()
203
- # Call the original invoke_function_call
204
- result = await original_func(kernel_self, *args, **kwargs)
205
-
206
- # Try to get the chat history from kwargs or args
207
- if kwargs:
208
- chat_history = copy.deepcopy(kwargs["chat_history"])
209
- else:
210
- chat_history = copy.deepcopy(args[1])
211
-
212
- # Post-call usage event
213
- output_stat = IntermediateStepPayload(event_type=IntermediateStepType.TOOL_END,
214
- span_event_timestamp=now,
215
- framework=LLMFrameworkEnum.SEMANTIC_KERNEL,
216
- name=tool_input["name"],
217
- UUID=uuid,
218
- data=StreamEventData(input=tool_input,
219
- output=[
220
- item.model_dump(exclude="content_type")
221
- for item in chat_history[-1].items
222
- ]),
223
- metadata=TraceMetadata(tool_outputs=[
224
- item.model_dump(exclude="content_type")
225
- for item in chat_history[-1].items
226
- ],
227
- tool_info=copy.deepcopy(tool_input)),
228
- usage_info=UsageInfo(token_usage=TokenUsageBaseModel()))
229
-
230
- self.step_manager.push_intermediate_step(output_stat)
231
-
232
- return result
233
-
234
- except Exception as e:
235
- logger.exception("ToolUsage._use error: %s", e)
236
- raise
237
-
238
- return patched_tool_call
@@ -1,27 +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
- from pydantic import Field
18
-
19
-
20
- class TokenUsageBaseModel(BaseModel):
21
- """
22
- Base model for token usage callbacks.
23
- """
24
-
25
- prompt_tokens: int = Field(default=0, description="Number of tokens in the prompt.")
26
- completion_tokens: int = Field(default=0, description="Number of tokens in the completion.")
27
- total_tokens: int = Field(default=0, description="Number of tokens total.")
@@ -1,51 +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 typing import Any
17
-
18
- from pydantic import BaseModel
19
- from pydantic import ConfigDict
20
- from pydantic import field_validator
21
-
22
-
23
- class DataFrameRow(BaseModel):
24
- model_config = ConfigDict(extra="allow", validate_assignment=True)
25
-
26
- event_type: Any
27
- event_timestamp: float | None
28
- example_number: int | None
29
- prompt_tokens: int | None
30
- completion_tokens: int | None
31
- total_tokens: int | None
32
- llm_text_input: str | None
33
- llm_text_output: str | None
34
- llm_new_token: str | None
35
- llm_name: str | None
36
- tool_name: str | None
37
- function_name: str | None
38
- function_id: str | None
39
- parent_function_name: str | None
40
- parent_function_id: str | None
41
- UUID: str | None
42
- framework: str | None
43
-
44
- @field_validator('llm_text_input', 'llm_text_output', 'llm_new_token', mode='before')
45
- def cast_to_str(cls, v): # pylint: disable=no-self-argument
46
- if v is None:
47
- return v
48
- try:
49
- return str(v)
50
- except Exception as e:
51
- raise ValueError(f"Value {v} cannot be cast to str: {e}") from e
@@ -1,24 +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
- from aiq.profiler.inference_metrics_model import InferenceMetricsModel
19
- from aiq.profiler.inference_optimization.data_models import WorkflowRuntimeMetrics
20
-
21
-
22
- class ProfilerResults(BaseModel):
23
- workflow_runtime_metrics: WorkflowRuntimeMetrics | None = None
24
- llm_latency_ci: InferenceMetricsModel | None = None
File without changes
@@ -1,131 +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
- # pylint disable=ungrouped-imports
17
-
18
- from __future__ import annotations
19
-
20
- import functools
21
- import logging
22
- from collections.abc import Callable
23
- from contextlib import AbstractAsyncContextManager as AsyncContextManager
24
- from contextlib import asynccontextmanager
25
- from contextvars import ContextVar
26
- from typing import Any
27
-
28
- from aiq.builder.framework_enum import LLMFrameworkEnum
29
-
30
- logger = logging.getLogger(__name__)
31
-
32
- _library_instrumented = {
33
- "langchain": False,
34
- "crewai": False,
35
- "semantic_kernel": False,
36
- "agno": False,
37
- }
38
-
39
- callback_handler_var: ContextVar[Any | None] = ContextVar("callback_handler_var", default=None)
40
-
41
-
42
- def set_framework_profiler_handler(
43
- workflow_llms: dict = None,
44
- frameworks: list[LLMFrameworkEnum] = None,
45
- ) -> Callable[[Callable[..., AsyncContextManager[Any]]], Callable[..., AsyncContextManager[Any]]]:
46
- """
47
- Decorator that wraps an async context manager function to set up framework-specific profiling.
48
- """
49
-
50
- def decorator(func: Callable[..., AsyncContextManager[Any]]) -> Callable[..., AsyncContextManager[Any]]:
51
-
52
- @functools.wraps(func)
53
- @asynccontextmanager
54
- async def wrapper(workflow_config, builder):
55
-
56
- if LLMFrameworkEnum.LANGCHAIN in frameworks and not _library_instrumented["langchain"]:
57
- from langchain_core.tracers.context import register_configure_hook
58
-
59
- from aiq.profiler.callbacks.langchain_callback_handler import LangchainProfilerHandler
60
-
61
- handler = LangchainProfilerHandler()
62
- callback_handler_var.set(handler)
63
- register_configure_hook(callback_handler_var, inheritable=True)
64
- _library_instrumented["langchain"] = True
65
- logger.debug("Langchain callback handler registered")
66
-
67
- if LLMFrameworkEnum.LLAMA_INDEX in frameworks:
68
- from llama_index.core import Settings
69
- from llama_index.core.callbacks import CallbackManager
70
-
71
- from aiq.profiler.callbacks.llama_index_callback_handler import LlamaIndexProfilerHandler
72
-
73
- handler = LlamaIndexProfilerHandler()
74
- Settings.callback_manager = CallbackManager([handler])
75
- logger.debug("LlamaIndex callback handler registered")
76
-
77
- if LLMFrameworkEnum.CREWAI in frameworks and not _library_instrumented["crewai"]:
78
- from aiq.plugins.crewai.crewai_callback_handler import \
79
- CrewAIProfilerHandler # pylint: disable=ungrouped-imports,line-too-long # noqa E501
80
-
81
- handler = CrewAIProfilerHandler()
82
- handler.instrument()
83
- _library_instrumented["crewai"] = True
84
- logger.debug("CrewAI callback handler registered")
85
-
86
- if LLMFrameworkEnum.SEMANTIC_KERNEL in frameworks and not _library_instrumented["semantic_kernel"]:
87
- from aiq.profiler.callbacks.semantic_kernel_callback_handler import SemanticKernelProfilerHandler
88
-
89
- handler = SemanticKernelProfilerHandler(workflow_llms=workflow_llms)
90
- handler.instrument()
91
- _library_instrumented["semantic_kernel"] = True
92
- logger.debug("SemanticKernel callback handler registered")
93
-
94
- if LLMFrameworkEnum.AGNO in frameworks and not _library_instrumented["agno"]:
95
- from aiq.profiler.callbacks.agno_callback_handler import AgnoProfilerHandler
96
-
97
- handler = AgnoProfilerHandler()
98
- handler.instrument()
99
- _library_instrumented["agno"] = True
100
- logger.info("Agno callback handler registered")
101
-
102
- # IMPORTANT: actually call the wrapped function as an async context manager
103
- async with func(workflow_config, builder) as result:
104
- yield result
105
-
106
- return wrapper
107
-
108
- return decorator
109
-
110
-
111
- def chain_wrapped_build_fn(
112
- original_build_fn: Callable[..., AsyncContextManager],
113
- workflow_llms: dict,
114
- function_frameworks: list[LLMFrameworkEnum],
115
- ) -> Callable[..., AsyncContextManager]:
116
- """
117
- Convert an original build function into an async context manager that
118
- wraps it with a single call to set_framework_profiler_handler, passing
119
- all frameworks at once.
120
- """
121
-
122
- # Define a base async context manager that simply calls the original build function.
123
- @asynccontextmanager
124
- async def base_fn(*args, **kwargs):
125
- async with original_build_fn(*args, **kwargs) as w:
126
- yield w
127
-
128
- # Instead of wrapping iteratively, we now call the decorator once,
129
- # passing the entire list of frameworks along with the workflow_llms.
130
- wrapped_fn = set_framework_profiler_handler(workflow_llms, function_frameworks)(base_fn)
131
- return wrapped_fn