aiqtoolkit 1.2.0rc4__py3-none-any.whl → 1.2rc9__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.2rc9.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2rc9.dist-info/RECORD +4 -0
  3. aiqtoolkit-1.2rc9.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.2rc9.dist-info}/WHEEL +0 -0
aiq/runtime/session.py DELETED
@@ -1,158 +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 asyncio
17
- import contextvars
18
- import typing
19
- from collections.abc import Awaitable
20
- from collections.abc import Callable
21
- from contextlib import asynccontextmanager
22
- from contextlib import nullcontext
23
-
24
- from starlette.requests import HTTPConnection
25
-
26
- from aiq.builder.context import AIQContext
27
- from aiq.builder.context import AIQContextState
28
- from aiq.builder.workflow import Workflow
29
- from aiq.data_models.authentication import AuthenticatedContext
30
- from aiq.data_models.authentication import AuthFlowType
31
- from aiq.data_models.authentication import AuthProviderBaseConfig
32
- from aiq.data_models.config import AIQConfig
33
- from aiq.data_models.interactive import HumanResponse
34
- from aiq.data_models.interactive import InteractionPrompt
35
-
36
- _T = typing.TypeVar("_T")
37
-
38
-
39
- class UserManagerBase:
40
- pass
41
-
42
-
43
- class AIQSessionManager:
44
-
45
- def __init__(self, workflow: Workflow, max_concurrency: int = 8):
46
- """
47
- The AIQSessionManager class is used to run and manage a user workflow session. It runs and manages the context,
48
- and configuration of a workflow with the specified concurrency.
49
-
50
- Parameters
51
- ----------
52
- workflow : Workflow
53
- The workflow to run
54
- max_concurrency : int, optional
55
- The maximum number of simultaneous workflow invocations, by default 8
56
- """
57
-
58
- if (workflow is None):
59
- raise ValueError("Workflow cannot be None")
60
-
61
- self._workflow: Workflow = workflow
62
-
63
- self._max_concurrency = max_concurrency
64
- self._context_state = AIQContextState.get()
65
- self._context = AIQContext(self._context_state)
66
-
67
- # We save the context because Uvicorn spawns a new process
68
- # for each request, and we need to restore the context vars
69
- self._saved_context = contextvars.copy_context()
70
-
71
- if (max_concurrency > 0):
72
- self._semaphore = asyncio.Semaphore(max_concurrency)
73
- else:
74
- # If max_concurrency is 0, then we don't need to limit the concurrency but we still need a context
75
- self._semaphore = nullcontext()
76
-
77
- @property
78
- def config(self) -> AIQConfig:
79
- return self._workflow.config
80
-
81
- @property
82
- def workflow(self) -> Workflow:
83
- return self._workflow
84
-
85
- @property
86
- def context(self) -> AIQContext:
87
- return self._context
88
-
89
- @asynccontextmanager
90
- async def session(self,
91
- user_manager=None,
92
- request: HTTPConnection | None = None,
93
- conversation_id: str | None = None,
94
- user_input_callback: Callable[[InteractionPrompt], Awaitable[HumanResponse]] = None,
95
- user_authentication_callback: Callable[[AuthProviderBaseConfig, AuthFlowType],
96
- Awaitable[AuthenticatedContext | None]] = None):
97
-
98
- token_user_input = None
99
- if user_input_callback is not None:
100
- token_user_input = self._context_state.user_input_callback.set(user_input_callback)
101
-
102
- token_user_manager = None
103
- if user_manager is not None:
104
- token_user_manager = self._context_state.user_manager.set(user_manager)
105
-
106
- token_user_authentication = None
107
- if user_authentication_callback is not None:
108
- token_user_authentication = self._context_state.user_auth_callback.set(user_authentication_callback)
109
-
110
- if conversation_id is not None and request is None:
111
- self._context_state.conversation_id.set(conversation_id)
112
-
113
- self.set_metadata_from_http_request(request)
114
-
115
- try:
116
- yield self
117
- finally:
118
- if token_user_manager is not None:
119
- self._context_state.user_manager.reset(token_user_manager)
120
- if token_user_input is not None:
121
- self._context_state.user_input_callback.reset(token_user_input)
122
- if token_user_authentication is not None:
123
- self._context_state.user_auth_callback.reset(token_user_authentication)
124
-
125
- @asynccontextmanager
126
- async def run(self, message):
127
- """
128
- Start a workflow run
129
- """
130
- async with self._semaphore:
131
- # Apply the saved context
132
- for k, v in self._saved_context.items():
133
- k.set(v)
134
-
135
- async with self._workflow.run(message) as runner:
136
- yield runner
137
-
138
- def set_metadata_from_http_request(self, request: HTTPConnection | None) -> None:
139
- """
140
- Extracts and sets user metadata request attributes from a HTTP request.
141
- If request is None, no attributes are set.
142
- """
143
- if request is None:
144
- return
145
-
146
- self._context.metadata._request.method = getattr(request, "method", None)
147
- self._context.metadata._request.url_path = request.url.path
148
- self._context.metadata._request.url_port = request.url.port
149
- self._context.metadata._request.url_scheme = request.url.scheme
150
- self._context.metadata._request.headers = request.headers
151
- self._context.metadata._request.query_params = request.query_params
152
- self._context.metadata._request.path_params = request.path_params
153
- self._context.metadata._request.client_host = request.client.host
154
- self._context.metadata._request.client_port = request.client.port
155
- self._context.metadata._request.cookies = request.cookies
156
-
157
- if request.headers.get("conversation-id"):
158
- self._context_state.conversation_id.set(request.headers["conversation-id"])
@@ -1,130 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from starlette.datastructures import Headers
17
- from starlette.datastructures import QueryParams
18
-
19
- from aiq.data_models.api_server import Request
20
-
21
-
22
- class RequestAttributes:
23
- """
24
- The RequestAttributes class is responsible for managing user http and webscoket session
25
- metadata. It provides a way to store and expose session attributes to workflow tools.
26
- """
27
-
28
- def __init__(self) -> None:
29
- self._request: Request = Request()
30
-
31
- @property
32
- def method(self) -> str | None:
33
- """
34
- This property retrieves the HTTP method of the request.
35
- It can be GET, POST, PUT, DELETE, etc.
36
-
37
- Returns:
38
- str | None
39
- """
40
- return self._request.method
41
-
42
- @property
43
- def url_path(self) -> str | None:
44
- """
45
- This property retrieves the path from the URL of the request.
46
-
47
- Returns:
48
- str | None
49
- """
50
- return self._request.url_path
51
-
52
- @property
53
- def url_port(self) -> int | None:
54
- """
55
- This property retrieves the port number from the URL of the request.
56
-
57
- Returns:
58
- int | None
59
- """
60
- return self._request.url_port
61
-
62
- @property
63
- def url_scheme(self) -> str | None:
64
- """
65
- This property retrieves the scheme from the URL of the request.
66
-
67
- Returns:
68
- str | None
69
- """
70
- return self._request.url_scheme
71
-
72
- @property
73
- def headers(self) -> Headers | None:
74
- """
75
- This property retrieves the headers from the request stored in a dictionary-like object.
76
-
77
- Returns:
78
- Headers | None
79
- """
80
- return self._request.headers
81
-
82
- @property
83
- def query_params(self) -> QueryParams | None:
84
- """
85
- This property retrieves the query parameters from the request stored in a dictionary-like object.
86
-
87
- Returns:
88
- QueryParams | None
89
- """
90
- return self._request.query_params
91
-
92
- @property
93
- def path_params(self) -> dict[str, str] | None:
94
- """
95
- This property retrieves the path parameters from the request stored in a dictionary-like object.
96
-
97
- Returns:
98
- dict[str, str] | None
99
- """
100
- return self._request.path_params
101
-
102
- @property
103
- def client_host(self) -> str | None:
104
- """
105
- This property retrieves the clients remote hostname or IP address.
106
-
107
- Returns:
108
- str | None
109
- """
110
- return self._request.client_host
111
-
112
- @property
113
- def client_port(self) -> int | None:
114
- """
115
- This property retrieves the clients remote port number from which the client is connecting to.
116
-
117
- Returns:
118
- int | None
119
- """
120
- return self._request.client_port
121
-
122
- @property
123
- def cookies(self) -> dict[str, str] | None:
124
- """
125
- This property retrieves the cookies from the request stored in a dictionary-like object.
126
-
127
- Returns:
128
- dict[str, str] | None
129
- """
130
- return self._request.cookies
aiq/settings/__init__.py DELETED
File without changes
@@ -1,318 +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 json
17
- import logging
18
- import os
19
- import typing
20
- from collections.abc import Callable
21
- from contextlib import contextmanager
22
- from copy import deepcopy
23
-
24
- from platformdirs import user_config_dir
25
- from pydantic import ConfigDict
26
- from pydantic import Discriminator
27
- from pydantic import Tag
28
- from pydantic import ValidationError
29
- from pydantic import ValidationInfo
30
- from pydantic import ValidatorFunctionWrapHandler
31
- from pydantic import field_validator
32
-
33
- from aiq.cli.type_registry import GlobalTypeRegistry
34
- from aiq.cli.type_registry import RegisteredInfo
35
- from aiq.data_models.common import HashableBaseModel
36
- from aiq.data_models.common import TypedBaseModel
37
- from aiq.data_models.common import TypedBaseModelT
38
- from aiq.data_models.registry_handler import RegistryHandlerBaseConfig
39
-
40
- logger = logging.getLogger(__name__)
41
-
42
-
43
- class Settings(HashableBaseModel):
44
-
45
- model_config = ConfigDict(extra="forbid")
46
-
47
- # Registry Handeler Configuration
48
- channels: dict[str, RegistryHandlerBaseConfig] = {}
49
-
50
- _configuration_directory: typing.ClassVar[str]
51
- _settings_changed_hooks: typing.ClassVar[list[Callable[[], None]]] = []
52
- _settings_changed_hooks_active: bool = True
53
-
54
- @field_validator("channels", mode="wrap")
55
- @classmethod
56
- def validate_components(cls, value: typing.Any, handler: ValidatorFunctionWrapHandler, info: ValidationInfo):
57
-
58
- try:
59
- return handler(value)
60
- except ValidationError as err:
61
-
62
- for e in err.errors():
63
- if e['type'] == 'union_tag_invalid' and len(e['loc']) > 0:
64
- requested_type = e['loc'][0]
65
-
66
- if (info.field_name == "channels"):
67
- registered_keys = GlobalTypeRegistry.get().get_registered_registry_handlers()
68
- else:
69
- assert False, f"Unknown field name {info.field_name} in validator"
70
-
71
- # Check and see if the there are multiple full types which match this short type
72
- matching_keys = [k for k in registered_keys if k.local_name == requested_type]
73
-
74
- assert len(matching_keys) != 1, "Exact match should have been found. Contact developers"
75
-
76
- matching_key_names = [x.full_type for x in matching_keys]
77
- registered_key_names = [x.full_type for x in registered_keys]
78
-
79
- if (len(matching_keys) == 0):
80
- # This is a case where the requested type is not found. Show a helpful message about what is
81
- # available
82
- raise ValueError(
83
- f"Requested {info.field_name} type `{requested_type}` not found. "
84
- "Have you ensured the necessary package has been installed with `uv pip install`?"
85
- "\nAvailable {} names:\n - {}".format(info.field_name,
86
- '\n - '.join(registered_key_names))) from err
87
-
88
- # This is a case where the requested type is ambiguous.
89
- raise ValueError(f"Requested {info.field_name} type `{requested_type}` is ambiguous. " +
90
- f"Matched multiple {info.field_name} by their local name: {matching_key_names}. " +
91
- f"Please use the fully qualified {info.field_name} name." +
92
- "\nAvailable {} names:\n - {}".format(info.field_name,
93
- '\n - '.join(registered_key_names))) from err
94
-
95
- raise
96
-
97
- @classmethod
98
- def rebuild_annotations(cls):
99
-
100
- def compute_annotation(cls: type[TypedBaseModelT], registrations: list[RegisteredInfo[TypedBaseModelT]]):
101
-
102
- while (len(registrations) < 2):
103
- registrations.append(RegisteredInfo[TypedBaseModelT](full_type=f"_ignore/{len(registrations)}",
104
- config_type=cls))
105
-
106
- short_names: dict[str, int] = {}
107
- type_list: list[tuple[str, type[TypedBaseModelT]]] = []
108
-
109
- # For all keys in the list, split the key by / and increment the count of the last element
110
- for key in registrations:
111
- short_names[key.local_name] = short_names.get(key.local_name, 0) + 1
112
-
113
- type_list.append((key.full_type, key.config_type))
114
-
115
- # Now loop again and if the short name is unique, then create two entries, for the short and full name
116
- for key in registrations:
117
-
118
- if (short_names[key.local_name] == 1):
119
- type_list.append((key.local_name, key.config_type))
120
-
121
- # pylint: disable=consider-alternative-union-syntax
122
- return typing.Union[tuple(typing.Annotated[x_type, Tag(x_id)] for x_id, x_type in type_list)]
123
-
124
- RegistryHandlerAnnotation = dict[
125
- str,
126
- typing.Annotated[compute_annotation(RegistryHandlerBaseConfig,
127
- GlobalTypeRegistry.get().get_registered_registry_handlers()),
128
- Discriminator(TypedBaseModel.discriminator)]]
129
-
130
- should_rebuild = False
131
-
132
- channels_field = cls.model_fields.get("channels")
133
- if channels_field is not None and channels_field.annotation != RegistryHandlerAnnotation:
134
- channels_field.annotation = RegistryHandlerAnnotation
135
- should_rebuild = True
136
-
137
- if (should_rebuild):
138
- cls.model_rebuild(force=True)
139
-
140
- @property
141
- def channel_names(self) -> list:
142
- return list(self.channels.keys())
143
-
144
- @property
145
- def configuration_directory(self) -> str:
146
- return self._configuration_directory
147
-
148
- @property
149
- def configuration_file(self) -> str:
150
- return os.path.join(self.configuration_directory, "config.json")
151
-
152
- @staticmethod
153
- def from_file():
154
-
155
- configuration_directory = os.getenv("AIQ_CONFIG_DIR", user_config_dir(appname="aiq"))
156
-
157
- if not os.path.exists(configuration_directory):
158
- os.makedirs(configuration_directory, exist_ok=True)
159
-
160
- configuration_file = os.path.join(configuration_directory, "config.json")
161
-
162
- file_path = os.path.join(configuration_directory, "config.json")
163
-
164
- if (not os.path.exists(configuration_file)):
165
- loaded_config = {}
166
- else:
167
- with open(file_path, mode="r", encoding="utf-8") as f:
168
- loaded_config = json.load(f)
169
-
170
- settings = Settings(**loaded_config)
171
- settings.set_configuration_directory(configuration_directory)
172
- return settings
173
-
174
- def set_configuration_directory(self, directory: str, remove: bool = False) -> None:
175
- if (remove):
176
- if os.path.exists(self.configuration_directory):
177
- os.rmdir(self.configuration_directory)
178
- self.__class__._configuration_directory = directory
179
-
180
- def reset_configuration_directory(self, remove: bool = False) -> None:
181
- if (remove):
182
- if os.path.exists(self.configuration_directory):
183
- os.rmdir(self.configuration_directory)
184
- self._configuration_directory = os.getenv("AIQ_CONFIG_DIR", user_config_dir(appname="aiq"))
185
-
186
- def _save_settings(self) -> None:
187
-
188
- if not os.path.exists(self.configuration_directory):
189
- os.mkdir(self.configuration_directory)
190
-
191
- with open(self.configuration_file, mode="w", encoding="utf-8") as f:
192
- f.write(self.model_dump_json(indent=4, by_alias=True, serialize_as_any=True))
193
-
194
- self._settings_changed()
195
-
196
- def update_settings(self, config_obj: "dict | Settings"):
197
- self._update_settings(config_obj)
198
-
199
- def _update_settings(self, config_obj: "dict | Settings"):
200
-
201
- if isinstance(config_obj, Settings):
202
- config_obj = config_obj.model_dump(serialize_as_any=True, by_alias=True)
203
-
204
- self._revalidate(config_dict=config_obj)
205
-
206
- self._save_settings()
207
-
208
- def _revalidate(self, config_dict) -> bool:
209
-
210
- try:
211
- validated_data = self.__class__(**config_dict)
212
-
213
- for field in validated_data.model_fields:
214
- match field:
215
- case "channels":
216
- self.channels = validated_data.channels
217
- case _:
218
- raise ValueError(f"Encountered invalid model field: {field}")
219
-
220
- return True
221
-
222
- except Exception as e:
223
- logger.exception("Unable to validate user settings configuration: %s", e, exc_info=True)
224
- return False
225
-
226
- def print_channel_settings(self, channel_type: str | None = None) -> None:
227
-
228
- import yaml
229
-
230
- remote_channels = self.model_dump(serialize_as_any=True, by_alias=True)
231
-
232
- if (not remote_channels or not remote_channels.get("channels")):
233
- logger.warning("No configured channels to list.")
234
- return
235
-
236
- if (channel_type is not None):
237
- filter_channels = []
238
- for channel, settings in remote_channels.items():
239
- if (settings["type"] != channel_type):
240
- filter_channels.append(channel)
241
- for channel in filter_channels:
242
- del remote_channels[channel]
243
-
244
- if (remote_channels):
245
- logger.info(yaml.dump(remote_channels, allow_unicode=True, default_flow_style=False))
246
-
247
- def override_settings(self, config_file: str) -> "Settings":
248
-
249
- from aiq.utils.io.yaml_tools import yaml_load
250
-
251
- override_settings_dict = yaml_load(config_file)
252
-
253
- settings_dict = self.model_dump()
254
- updated_settings = {**override_settings_dict, **settings_dict}
255
- self._update_settings(config_obj=updated_settings)
256
-
257
- return self
258
-
259
- def _settings_changed(self):
260
-
261
- if (not self._settings_changed_hooks_active):
262
- return
263
-
264
- for hook in self._settings_changed_hooks:
265
- hook()
266
-
267
- @contextmanager
268
- def pause_settings_changed_hooks(self):
269
-
270
- self._settings_changed_hooks_active = False
271
-
272
- try:
273
- yield
274
- finally:
275
- self._settings_changed_hooks_active = True
276
-
277
- # Ensure that the registration changed hooks are called
278
- self._settings_changed()
279
-
280
- def add_settings_changed_hook(self, cb: Callable[[], None]) -> None:
281
-
282
- self._settings_changed_hooks.append(cb)
283
-
284
-
285
- GlobalTypeRegistry.get().add_registration_changed_hook(lambda: Settings.rebuild_annotations())
286
-
287
-
288
- class GlobalSettings:
289
-
290
- _global_settings: Settings | None = None
291
-
292
- @staticmethod
293
- def get() -> Settings:
294
-
295
- if (GlobalSettings._global_settings is None):
296
- from aiq.runtime.loader import PluginTypes
297
- from aiq.runtime.loader import discover_and_register_plugins
298
-
299
- discover_and_register_plugins(PluginTypes.REGISTRY_HANDLER)
300
-
301
- GlobalSettings._global_settings = Settings.from_file()
302
-
303
- return GlobalSettings._global_settings
304
-
305
- @staticmethod
306
- @contextmanager
307
- def push():
308
-
309
- saved = GlobalSettings.get()
310
- settings = deepcopy(saved)
311
-
312
- try:
313
- GlobalSettings._global_settings = settings
314
-
315
- yield settings
316
- finally:
317
- GlobalSettings._global_settings = saved
318
- GlobalSettings._global_settings._settings_changed()
aiq/test/.namespace DELETED
@@ -1 +0,0 @@
1
- Note: This is a python namespace package and this directory should remain empty. Do NOT add a `__init__.py` file or any other files to this directory. This file is also needed to ensure the directory exists in git.
aiq/tool/__init__.py DELETED
File without changes
@@ -1,74 +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
- Simple Completion Function for AIQ Toolkit
17
-
18
- This module provides a simple completion function that can handle
19
- natural language queries and perform basic text completion tasks.
20
- """
21
-
22
- from pydantic import Field
23
-
24
- from aiq.builder.builder import Builder
25
- from aiq.builder.framework_enum import LLMFrameworkEnum
26
- from aiq.cli.register_workflow import register_function
27
- from aiq.data_models.component_ref import LLMRef
28
- from aiq.data_models.function import FunctionBaseConfig
29
-
30
-
31
- class ChatCompletionConfig(FunctionBaseConfig, name="chat_completion"):
32
- """Configuration for the Chat Completion Function."""
33
-
34
- system_prompt: str = Field(("You are a helpful AI assistant. Provide clear, accurate, and helpful "
35
- "responses to user queries. You can give general advice, recommendations, "
36
- "tips, and engage in conversation. Be helpful and informative."),
37
- description="The system prompt to use for chat completion.")
38
-
39
- llm_name: LLMRef = Field(description="The LLM to use for generating responses.")
40
-
41
-
42
- @register_function(config_type=ChatCompletionConfig)
43
- async def register_chat_completion(config: ChatCompletionConfig, builder: Builder):
44
- """Registers a chat completion function that can handle natural language queries."""
45
-
46
- # Get the LLM from the builder context using the configured LLM reference
47
- # Use LangChain framework wrapper since we're using LangChain-based LLM
48
- llm = await builder.get_llm(config.llm_name, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
49
-
50
- async def _chat_completion(query: str) -> str:
51
- """A simple chat completion function that responds to natural language queries.
52
-
53
- Args:
54
- query: The user's natural language query
55
-
56
- Returns:
57
- A helpful response to the query
58
- """
59
- try:
60
- # Create a simple prompt with the system message and user query
61
- prompt = f"{config.system_prompt}\n\nUser: {query}\n\nAssistant:"
62
-
63
- # Generate response using the LLM
64
- response = await llm.ainvoke(prompt)
65
-
66
- return response
67
-
68
- except Exception as e:
69
- # Fallback response if LLM call fails
70
- return (f"I apologize, but I encountered an error while processing your "
71
- f"query: '{query}'. Please try rephrasing your question or try "
72
- f"again later. Error: {str(e)}")
73
-
74
- yield _chat_completion