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

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

Potentially problematic release.


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

Files changed (440) hide show
  1. aiqtoolkit-1.2.0rc5.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2.0rc5.dist-info/RECORD +4 -0
  3. aiqtoolkit-1.2.0rc5.dist-info/top_level.txt +1 -0
  4. aiq/agent/__init__.py +0 -0
  5. aiq/agent/base.py +0 -239
  6. aiq/agent/dual_node.py +0 -67
  7. aiq/agent/react_agent/__init__.py +0 -0
  8. aiq/agent/react_agent/agent.py +0 -355
  9. aiq/agent/react_agent/output_parser.py +0 -104
  10. aiq/agent/react_agent/prompt.py +0 -41
  11. aiq/agent/react_agent/register.py +0 -149
  12. aiq/agent/reasoning_agent/__init__.py +0 -0
  13. aiq/agent/reasoning_agent/reasoning_agent.py +0 -225
  14. aiq/agent/register.py +0 -23
  15. aiq/agent/rewoo_agent/__init__.py +0 -0
  16. aiq/agent/rewoo_agent/agent.py +0 -411
  17. aiq/agent/rewoo_agent/prompt.py +0 -108
  18. aiq/agent/rewoo_agent/register.py +0 -158
  19. aiq/agent/tool_calling_agent/__init__.py +0 -0
  20. aiq/agent/tool_calling_agent/agent.py +0 -119
  21. aiq/agent/tool_calling_agent/register.py +0 -106
  22. aiq/authentication/__init__.py +0 -14
  23. aiq/authentication/api_key/__init__.py +0 -14
  24. aiq/authentication/api_key/api_key_auth_provider.py +0 -92
  25. aiq/authentication/api_key/api_key_auth_provider_config.py +0 -124
  26. aiq/authentication/api_key/register.py +0 -26
  27. aiq/authentication/exceptions/__init__.py +0 -14
  28. aiq/authentication/exceptions/api_key_exceptions.py +0 -38
  29. aiq/authentication/exceptions/auth_code_grant_exceptions.py +0 -86
  30. aiq/authentication/exceptions/call_back_exceptions.py +0 -38
  31. aiq/authentication/exceptions/request_exceptions.py +0 -54
  32. aiq/authentication/http_basic_auth/__init__.py +0 -0
  33. aiq/authentication/http_basic_auth/http_basic_auth_provider.py +0 -81
  34. aiq/authentication/http_basic_auth/register.py +0 -30
  35. aiq/authentication/interfaces.py +0 -93
  36. aiq/authentication/oauth2/__init__.py +0 -14
  37. aiq/authentication/oauth2/oauth2_auth_code_flow_provider.py +0 -107
  38. aiq/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +0 -39
  39. aiq/authentication/oauth2/register.py +0 -25
  40. aiq/authentication/register.py +0 -21
  41. aiq/builder/__init__.py +0 -0
  42. aiq/builder/builder.py +0 -285
  43. aiq/builder/component_utils.py +0 -316
  44. aiq/builder/context.py +0 -264
  45. aiq/builder/embedder.py +0 -24
  46. aiq/builder/eval_builder.py +0 -161
  47. aiq/builder/evaluator.py +0 -29
  48. aiq/builder/framework_enum.py +0 -24
  49. aiq/builder/front_end.py +0 -73
  50. aiq/builder/function.py +0 -344
  51. aiq/builder/function_base.py +0 -380
  52. aiq/builder/function_info.py +0 -627
  53. aiq/builder/intermediate_step_manager.py +0 -174
  54. aiq/builder/llm.py +0 -25
  55. aiq/builder/retriever.py +0 -25
  56. aiq/builder/user_interaction_manager.py +0 -74
  57. aiq/builder/workflow.py +0 -148
  58. aiq/builder/workflow_builder.py +0 -1117
  59. aiq/cli/__init__.py +0 -14
  60. aiq/cli/cli_utils/__init__.py +0 -0
  61. aiq/cli/cli_utils/config_override.py +0 -231
  62. aiq/cli/cli_utils/validation.py +0 -37
  63. aiq/cli/commands/__init__.py +0 -0
  64. aiq/cli/commands/configure/__init__.py +0 -0
  65. aiq/cli/commands/configure/channel/__init__.py +0 -0
  66. aiq/cli/commands/configure/channel/add.py +0 -28
  67. aiq/cli/commands/configure/channel/channel.py +0 -36
  68. aiq/cli/commands/configure/channel/remove.py +0 -30
  69. aiq/cli/commands/configure/channel/update.py +0 -30
  70. aiq/cli/commands/configure/configure.py +0 -33
  71. aiq/cli/commands/evaluate.py +0 -139
  72. aiq/cli/commands/info/__init__.py +0 -14
  73. aiq/cli/commands/info/info.py +0 -39
  74. aiq/cli/commands/info/list_channels.py +0 -32
  75. aiq/cli/commands/info/list_components.py +0 -129
  76. aiq/cli/commands/info/list_mcp.py +0 -213
  77. aiq/cli/commands/registry/__init__.py +0 -14
  78. aiq/cli/commands/registry/publish.py +0 -88
  79. aiq/cli/commands/registry/pull.py +0 -118
  80. aiq/cli/commands/registry/registry.py +0 -38
  81. aiq/cli/commands/registry/remove.py +0 -108
  82. aiq/cli/commands/registry/search.py +0 -155
  83. aiq/cli/commands/sizing/__init__.py +0 -14
  84. aiq/cli/commands/sizing/calc.py +0 -297
  85. aiq/cli/commands/sizing/sizing.py +0 -27
  86. aiq/cli/commands/start.py +0 -246
  87. aiq/cli/commands/uninstall.py +0 -81
  88. aiq/cli/commands/validate.py +0 -47
  89. aiq/cli/commands/workflow/__init__.py +0 -14
  90. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  91. aiq/cli/commands/workflow/templates/config.yml.j2 +0 -16
  92. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +0 -22
  93. aiq/cli/commands/workflow/templates/register.py.j2 +0 -5
  94. aiq/cli/commands/workflow/templates/workflow.py.j2 +0 -36
  95. aiq/cli/commands/workflow/workflow.py +0 -37
  96. aiq/cli/commands/workflow/workflow_commands.py +0 -313
  97. aiq/cli/entrypoint.py +0 -135
  98. aiq/cli/main.py +0 -44
  99. aiq/cli/register_workflow.py +0 -488
  100. aiq/cli/type_registry.py +0 -1000
  101. aiq/data_models/__init__.py +0 -14
  102. aiq/data_models/api_server.py +0 -694
  103. aiq/data_models/authentication.py +0 -231
  104. aiq/data_models/common.py +0 -171
  105. aiq/data_models/component.py +0 -54
  106. aiq/data_models/component_ref.py +0 -168
  107. aiq/data_models/config.py +0 -406
  108. aiq/data_models/dataset_handler.py +0 -123
  109. aiq/data_models/discovery_metadata.py +0 -286
  110. aiq/data_models/embedder.py +0 -27
  111. aiq/data_models/evaluate.py +0 -127
  112. aiq/data_models/evaluator.py +0 -26
  113. aiq/data_models/front_end.py +0 -26
  114. aiq/data_models/function.py +0 -30
  115. aiq/data_models/function_dependencies.py +0 -72
  116. aiq/data_models/interactive.py +0 -246
  117. aiq/data_models/intermediate_step.py +0 -302
  118. aiq/data_models/invocation_node.py +0 -38
  119. aiq/data_models/its_strategy.py +0 -30
  120. aiq/data_models/llm.py +0 -27
  121. aiq/data_models/logging.py +0 -26
  122. aiq/data_models/memory.py +0 -27
  123. aiq/data_models/object_store.py +0 -44
  124. aiq/data_models/profiler.py +0 -54
  125. aiq/data_models/registry_handler.py +0 -26
  126. aiq/data_models/retriever.py +0 -30
  127. aiq/data_models/retry_mixin.py +0 -35
  128. aiq/data_models/span.py +0 -187
  129. aiq/data_models/step_adaptor.py +0 -64
  130. aiq/data_models/streaming.py +0 -33
  131. aiq/data_models/swe_bench_model.py +0 -54
  132. aiq/data_models/telemetry_exporter.py +0 -26
  133. aiq/embedder/__init__.py +0 -0
  134. aiq/embedder/langchain_client.py +0 -41
  135. aiq/embedder/nim_embedder.py +0 -59
  136. aiq/embedder/openai_embedder.py +0 -43
  137. aiq/embedder/register.py +0 -24
  138. aiq/eval/__init__.py +0 -14
  139. aiq/eval/config.py +0 -60
  140. aiq/eval/dataset_handler/__init__.py +0 -0
  141. aiq/eval/dataset_handler/dataset_downloader.py +0 -106
  142. aiq/eval/dataset_handler/dataset_filter.py +0 -52
  143. aiq/eval/dataset_handler/dataset_handler.py +0 -254
  144. aiq/eval/evaluate.py +0 -506
  145. aiq/eval/evaluator/__init__.py +0 -14
  146. aiq/eval/evaluator/base_evaluator.py +0 -73
  147. aiq/eval/evaluator/evaluator_model.py +0 -45
  148. aiq/eval/intermediate_step_adapter.py +0 -99
  149. aiq/eval/rag_evaluator/__init__.py +0 -0
  150. aiq/eval/rag_evaluator/evaluate.py +0 -178
  151. aiq/eval/rag_evaluator/register.py +0 -143
  152. aiq/eval/register.py +0 -23
  153. aiq/eval/remote_workflow.py +0 -133
  154. aiq/eval/runners/__init__.py +0 -14
  155. aiq/eval/runners/config.py +0 -39
  156. aiq/eval/runners/multi_eval_runner.py +0 -54
  157. aiq/eval/runtime_event_subscriber.py +0 -52
  158. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  159. aiq/eval/swe_bench_evaluator/evaluate.py +0 -215
  160. aiq/eval/swe_bench_evaluator/register.py +0 -36
  161. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  162. aiq/eval/trajectory_evaluator/evaluate.py +0 -75
  163. aiq/eval/trajectory_evaluator/register.py +0 -40
  164. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  165. aiq/eval/tunable_rag_evaluator/evaluate.py +0 -245
  166. aiq/eval/tunable_rag_evaluator/register.py +0 -52
  167. aiq/eval/usage_stats.py +0 -41
  168. aiq/eval/utils/__init__.py +0 -0
  169. aiq/eval/utils/output_uploader.py +0 -140
  170. aiq/eval/utils/tqdm_position_registry.py +0 -40
  171. aiq/eval/utils/weave_eval.py +0 -184
  172. aiq/experimental/__init__.py +0 -0
  173. aiq/experimental/decorators/__init__.py +0 -0
  174. aiq/experimental/decorators/experimental_warning_decorator.py +0 -130
  175. aiq/experimental/inference_time_scaling/__init__.py +0 -0
  176. aiq/experimental/inference_time_scaling/editing/__init__.py +0 -0
  177. aiq/experimental/inference_time_scaling/editing/iterative_plan_refinement_editor.py +0 -147
  178. aiq/experimental/inference_time_scaling/editing/llm_as_a_judge_editor.py +0 -204
  179. aiq/experimental/inference_time_scaling/editing/motivation_aware_summarization.py +0 -107
  180. aiq/experimental/inference_time_scaling/functions/__init__.py +0 -0
  181. aiq/experimental/inference_time_scaling/functions/execute_score_select_function.py +0 -105
  182. aiq/experimental/inference_time_scaling/functions/its_tool_orchestration_function.py +0 -205
  183. aiq/experimental/inference_time_scaling/functions/its_tool_wrapper_function.py +0 -146
  184. aiq/experimental/inference_time_scaling/functions/plan_select_execute_function.py +0 -224
  185. aiq/experimental/inference_time_scaling/models/__init__.py +0 -0
  186. aiq/experimental/inference_time_scaling/models/editor_config.py +0 -132
  187. aiq/experimental/inference_time_scaling/models/its_item.py +0 -48
  188. aiq/experimental/inference_time_scaling/models/scoring_config.py +0 -112
  189. aiq/experimental/inference_time_scaling/models/search_config.py +0 -120
  190. aiq/experimental/inference_time_scaling/models/selection_config.py +0 -154
  191. aiq/experimental/inference_time_scaling/models/stage_enums.py +0 -43
  192. aiq/experimental/inference_time_scaling/models/strategy_base.py +0 -66
  193. aiq/experimental/inference_time_scaling/models/tool_use_config.py +0 -41
  194. aiq/experimental/inference_time_scaling/register.py +0 -36
  195. aiq/experimental/inference_time_scaling/scoring/__init__.py +0 -0
  196. aiq/experimental/inference_time_scaling/scoring/llm_based_agent_scorer.py +0 -168
  197. aiq/experimental/inference_time_scaling/scoring/llm_based_plan_scorer.py +0 -168
  198. aiq/experimental/inference_time_scaling/scoring/motivation_aware_scorer.py +0 -111
  199. aiq/experimental/inference_time_scaling/search/__init__.py +0 -0
  200. aiq/experimental/inference_time_scaling/search/multi_llm_planner.py +0 -128
  201. aiq/experimental/inference_time_scaling/search/multi_query_retrieval_search.py +0 -122
  202. aiq/experimental/inference_time_scaling/search/single_shot_multi_plan_planner.py +0 -128
  203. aiq/experimental/inference_time_scaling/selection/__init__.py +0 -0
  204. aiq/experimental/inference_time_scaling/selection/best_of_n_selector.py +0 -63
  205. aiq/experimental/inference_time_scaling/selection/llm_based_agent_output_selector.py +0 -131
  206. aiq/experimental/inference_time_scaling/selection/llm_based_output_merging_selector.py +0 -159
  207. aiq/experimental/inference_time_scaling/selection/llm_based_plan_selector.py +0 -128
  208. aiq/experimental/inference_time_scaling/selection/threshold_selector.py +0 -58
  209. aiq/front_ends/__init__.py +0 -14
  210. aiq/front_ends/console/__init__.py +0 -14
  211. aiq/front_ends/console/authentication_flow_handler.py +0 -233
  212. aiq/front_ends/console/console_front_end_config.py +0 -32
  213. aiq/front_ends/console/console_front_end_plugin.py +0 -96
  214. aiq/front_ends/console/register.py +0 -25
  215. aiq/front_ends/cron/__init__.py +0 -14
  216. aiq/front_ends/fastapi/__init__.py +0 -14
  217. aiq/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  218. aiq/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +0 -27
  219. aiq/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +0 -107
  220. aiq/front_ends/fastapi/fastapi_front_end_config.py +0 -234
  221. aiq/front_ends/fastapi/fastapi_front_end_controller.py +0 -68
  222. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +0 -116
  223. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +0 -1092
  224. aiq/front_ends/fastapi/html_snippets/__init__.py +0 -14
  225. aiq/front_ends/fastapi/html_snippets/auth_code_grant_success.py +0 -35
  226. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +0 -80
  227. aiq/front_ends/fastapi/job_store.py +0 -183
  228. aiq/front_ends/fastapi/main.py +0 -72
  229. aiq/front_ends/fastapi/message_handler.py +0 -298
  230. aiq/front_ends/fastapi/message_validator.py +0 -345
  231. aiq/front_ends/fastapi/register.py +0 -25
  232. aiq/front_ends/fastapi/response_helpers.py +0 -195
  233. aiq/front_ends/fastapi/step_adaptor.py +0 -321
  234. aiq/front_ends/mcp/__init__.py +0 -14
  235. aiq/front_ends/mcp/mcp_front_end_config.py +0 -32
  236. aiq/front_ends/mcp/mcp_front_end_plugin.py +0 -93
  237. aiq/front_ends/mcp/register.py +0 -27
  238. aiq/front_ends/mcp/tool_converter.py +0 -242
  239. aiq/front_ends/register.py +0 -22
  240. aiq/front_ends/simple_base/__init__.py +0 -14
  241. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +0 -54
  242. aiq/llm/__init__.py +0 -0
  243. aiq/llm/aws_bedrock_llm.py +0 -57
  244. aiq/llm/nim_llm.py +0 -46
  245. aiq/llm/openai_llm.py +0 -46
  246. aiq/llm/register.py +0 -23
  247. aiq/llm/utils/__init__.py +0 -14
  248. aiq/llm/utils/env_config_value.py +0 -94
  249. aiq/llm/utils/error.py +0 -17
  250. aiq/memory/__init__.py +0 -20
  251. aiq/memory/interfaces.py +0 -183
  252. aiq/memory/models.py +0 -112
  253. aiq/meta/module_to_distro.json +0 -3
  254. aiq/meta/pypi.md +0 -58
  255. aiq/object_store/__init__.py +0 -20
  256. aiq/object_store/in_memory_object_store.py +0 -74
  257. aiq/object_store/interfaces.py +0 -84
  258. aiq/object_store/models.py +0 -36
  259. aiq/object_store/register.py +0 -20
  260. aiq/observability/__init__.py +0 -14
  261. aiq/observability/exporter/__init__.py +0 -14
  262. aiq/observability/exporter/base_exporter.py +0 -449
  263. aiq/observability/exporter/exporter.py +0 -78
  264. aiq/observability/exporter/file_exporter.py +0 -33
  265. aiq/observability/exporter/processing_exporter.py +0 -322
  266. aiq/observability/exporter/raw_exporter.py +0 -52
  267. aiq/observability/exporter/span_exporter.py +0 -265
  268. aiq/observability/exporter_manager.py +0 -335
  269. aiq/observability/mixin/__init__.py +0 -14
  270. aiq/observability/mixin/batch_config_mixin.py +0 -26
  271. aiq/observability/mixin/collector_config_mixin.py +0 -23
  272. aiq/observability/mixin/file_mixin.py +0 -288
  273. aiq/observability/mixin/file_mode.py +0 -23
  274. aiq/observability/mixin/resource_conflict_mixin.py +0 -134
  275. aiq/observability/mixin/serialize_mixin.py +0 -61
  276. aiq/observability/mixin/type_introspection_mixin.py +0 -183
  277. aiq/observability/processor/__init__.py +0 -14
  278. aiq/observability/processor/batching_processor.py +0 -309
  279. aiq/observability/processor/callback_processor.py +0 -42
  280. aiq/observability/processor/intermediate_step_serializer.py +0 -28
  281. aiq/observability/processor/processor.py +0 -71
  282. aiq/observability/register.py +0 -96
  283. aiq/observability/utils/__init__.py +0 -14
  284. aiq/observability/utils/dict_utils.py +0 -236
  285. aiq/observability/utils/time_utils.py +0 -31
  286. aiq/plugins/.namespace +0 -1
  287. aiq/profiler/__init__.py +0 -0
  288. aiq/profiler/calc/__init__.py +0 -14
  289. aiq/profiler/calc/calc_runner.py +0 -627
  290. aiq/profiler/calc/calculations.py +0 -288
  291. aiq/profiler/calc/data_models.py +0 -188
  292. aiq/profiler/calc/plot.py +0 -345
  293. aiq/profiler/callbacks/__init__.py +0 -0
  294. aiq/profiler/callbacks/agno_callback_handler.py +0 -295
  295. aiq/profiler/callbacks/base_callback_class.py +0 -20
  296. aiq/profiler/callbacks/langchain_callback_handler.py +0 -290
  297. aiq/profiler/callbacks/llama_index_callback_handler.py +0 -205
  298. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +0 -238
  299. aiq/profiler/callbacks/token_usage_base_model.py +0 -27
  300. aiq/profiler/data_frame_row.py +0 -51
  301. aiq/profiler/data_models.py +0 -24
  302. aiq/profiler/decorators/__init__.py +0 -0
  303. aiq/profiler/decorators/framework_wrapper.py +0 -131
  304. aiq/profiler/decorators/function_tracking.py +0 -254
  305. aiq/profiler/forecasting/__init__.py +0 -0
  306. aiq/profiler/forecasting/config.py +0 -18
  307. aiq/profiler/forecasting/model_trainer.py +0 -75
  308. aiq/profiler/forecasting/models/__init__.py +0 -22
  309. aiq/profiler/forecasting/models/forecasting_base_model.py +0 -40
  310. aiq/profiler/forecasting/models/linear_model.py +0 -196
  311. aiq/profiler/forecasting/models/random_forest_regressor.py +0 -268
  312. aiq/profiler/inference_metrics_model.py +0 -28
  313. aiq/profiler/inference_optimization/__init__.py +0 -0
  314. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  315. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +0 -460
  316. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +0 -258
  317. aiq/profiler/inference_optimization/data_models.py +0 -386
  318. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  319. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +0 -468
  320. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +0 -405
  321. aiq/profiler/inference_optimization/llm_metrics.py +0 -212
  322. aiq/profiler/inference_optimization/prompt_caching.py +0 -163
  323. aiq/profiler/inference_optimization/token_uniqueness.py +0 -107
  324. aiq/profiler/inference_optimization/workflow_runtimes.py +0 -72
  325. aiq/profiler/intermediate_property_adapter.py +0 -102
  326. aiq/profiler/profile_runner.py +0 -473
  327. aiq/profiler/utils.py +0 -184
  328. aiq/registry_handlers/__init__.py +0 -0
  329. aiq/registry_handlers/local/__init__.py +0 -0
  330. aiq/registry_handlers/local/local_handler.py +0 -176
  331. aiq/registry_handlers/local/register_local.py +0 -37
  332. aiq/registry_handlers/metadata_factory.py +0 -60
  333. aiq/registry_handlers/package_utils.py +0 -198
  334. aiq/registry_handlers/pypi/__init__.py +0 -0
  335. aiq/registry_handlers/pypi/pypi_handler.py +0 -251
  336. aiq/registry_handlers/pypi/register_pypi.py +0 -40
  337. aiq/registry_handlers/register.py +0 -21
  338. aiq/registry_handlers/registry_handler_base.py +0 -157
  339. aiq/registry_handlers/rest/__init__.py +0 -0
  340. aiq/registry_handlers/rest/register_rest.py +0 -56
  341. aiq/registry_handlers/rest/rest_handler.py +0 -237
  342. aiq/registry_handlers/schemas/__init__.py +0 -0
  343. aiq/registry_handlers/schemas/headers.py +0 -42
  344. aiq/registry_handlers/schemas/package.py +0 -68
  345. aiq/registry_handlers/schemas/publish.py +0 -63
  346. aiq/registry_handlers/schemas/pull.py +0 -82
  347. aiq/registry_handlers/schemas/remove.py +0 -36
  348. aiq/registry_handlers/schemas/search.py +0 -91
  349. aiq/registry_handlers/schemas/status.py +0 -47
  350. aiq/retriever/__init__.py +0 -0
  351. aiq/retriever/interface.py +0 -37
  352. aiq/retriever/milvus/__init__.py +0 -14
  353. aiq/retriever/milvus/register.py +0 -81
  354. aiq/retriever/milvus/retriever.py +0 -228
  355. aiq/retriever/models.py +0 -74
  356. aiq/retriever/nemo_retriever/__init__.py +0 -14
  357. aiq/retriever/nemo_retriever/register.py +0 -60
  358. aiq/retriever/nemo_retriever/retriever.py +0 -190
  359. aiq/retriever/register.py +0 -22
  360. aiq/runtime/__init__.py +0 -14
  361. aiq/runtime/loader.py +0 -194
  362. aiq/runtime/runner.py +0 -190
  363. aiq/runtime/session.py +0 -158
  364. aiq/runtime/user_metadata.py +0 -130
  365. aiq/settings/__init__.py +0 -0
  366. aiq/settings/global_settings.py +0 -318
  367. aiq/test/.namespace +0 -1
  368. aiq/tool/__init__.py +0 -0
  369. aiq/tool/chat_completion.py +0 -74
  370. aiq/tool/code_execution/README.md +0 -152
  371. aiq/tool/code_execution/__init__.py +0 -0
  372. aiq/tool/code_execution/code_sandbox.py +0 -267
  373. aiq/tool/code_execution/local_sandbox/.gitignore +0 -1
  374. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +0 -60
  375. aiq/tool/code_execution/local_sandbox/__init__.py +0 -13
  376. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +0 -198
  377. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +0 -6
  378. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +0 -50
  379. aiq/tool/code_execution/register.py +0 -74
  380. aiq/tool/code_execution/test_code_execution_sandbox.py +0 -414
  381. aiq/tool/code_execution/utils.py +0 -100
  382. aiq/tool/datetime_tools.py +0 -42
  383. aiq/tool/document_search.py +0 -141
  384. aiq/tool/github_tools/__init__.py +0 -0
  385. aiq/tool/github_tools/create_github_commit.py +0 -133
  386. aiq/tool/github_tools/create_github_issue.py +0 -87
  387. aiq/tool/github_tools/create_github_pr.py +0 -106
  388. aiq/tool/github_tools/get_github_file.py +0 -106
  389. aiq/tool/github_tools/get_github_issue.py +0 -166
  390. aiq/tool/github_tools/get_github_pr.py +0 -256
  391. aiq/tool/github_tools/update_github_issue.py +0 -100
  392. aiq/tool/mcp/__init__.py +0 -14
  393. aiq/tool/mcp/exceptions.py +0 -142
  394. aiq/tool/mcp/mcp_client.py +0 -255
  395. aiq/tool/mcp/mcp_tool.py +0 -96
  396. aiq/tool/memory_tools/__init__.py +0 -0
  397. aiq/tool/memory_tools/add_memory_tool.py +0 -79
  398. aiq/tool/memory_tools/delete_memory_tool.py +0 -67
  399. aiq/tool/memory_tools/get_memory_tool.py +0 -72
  400. aiq/tool/nvidia_rag.py +0 -95
  401. aiq/tool/register.py +0 -38
  402. aiq/tool/retriever.py +0 -89
  403. aiq/tool/server_tools.py +0 -66
  404. aiq/utils/__init__.py +0 -0
  405. aiq/utils/data_models/__init__.py +0 -0
  406. aiq/utils/data_models/schema_validator.py +0 -58
  407. aiq/utils/debugging_utils.py +0 -43
  408. aiq/utils/exception_handlers/__init__.py +0 -0
  409. aiq/utils/exception_handlers/automatic_retries.py +0 -289
  410. aiq/utils/exception_handlers/mcp.py +0 -211
  411. aiq/utils/exception_handlers/schemas.py +0 -114
  412. aiq/utils/io/__init__.py +0 -0
  413. aiq/utils/io/model_processing.py +0 -28
  414. aiq/utils/io/yaml_tools.py +0 -119
  415. aiq/utils/log_utils.py +0 -37
  416. aiq/utils/metadata_utils.py +0 -74
  417. aiq/utils/optional_imports.py +0 -142
  418. aiq/utils/producer_consumer_queue.py +0 -178
  419. aiq/utils/reactive/__init__.py +0 -0
  420. aiq/utils/reactive/base/__init__.py +0 -0
  421. aiq/utils/reactive/base/observable_base.py +0 -65
  422. aiq/utils/reactive/base/observer_base.py +0 -55
  423. aiq/utils/reactive/base/subject_base.py +0 -79
  424. aiq/utils/reactive/observable.py +0 -59
  425. aiq/utils/reactive/observer.py +0 -76
  426. aiq/utils/reactive/subject.py +0 -131
  427. aiq/utils/reactive/subscription.py +0 -49
  428. aiq/utils/settings/__init__.py +0 -0
  429. aiq/utils/settings/global_settings.py +0 -197
  430. aiq/utils/string_utils.py +0 -38
  431. aiq/utils/type_converter.py +0 -290
  432. aiq/utils/type_utils.py +0 -484
  433. aiq/utils/url_utils.py +0 -27
  434. aiqtoolkit-1.2.0rc3.dist-info/METADATA +0 -363
  435. aiqtoolkit-1.2.0rc3.dist-info/RECORD +0 -437
  436. aiqtoolkit-1.2.0rc3.dist-info/entry_points.txt +0 -20
  437. aiqtoolkit-1.2.0rc3.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  438. aiqtoolkit-1.2.0rc3.dist-info/licenses/LICENSE.md +0 -201
  439. aiqtoolkit-1.2.0rc3.dist-info/top_level.txt +0 -1
  440. {aiqtoolkit-1.2.0rc3.dist-info → aiqtoolkit-1.2.0rc5.dist-info}/WHEEL +0 -0
@@ -1,224 +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 logging
17
- from collections.abc import AsyncGenerator
18
-
19
- from pydantic import Field
20
-
21
- from aiq.builder.builder import Builder
22
- from aiq.builder.framework_enum import LLMFrameworkEnum
23
- from aiq.builder.function_info import FunctionInfo
24
- from aiq.cli.register_workflow import register_function
25
- from aiq.data_models.api_server import AIQChatRequest
26
- from aiq.data_models.component_ref import FunctionRef
27
- from aiq.data_models.component_ref import ITSStrategyRef
28
- from aiq.data_models.function import FunctionBaseConfig
29
- from aiq.experimental.inference_time_scaling.models.its_item import ITSItem
30
- from aiq.experimental.inference_time_scaling.models.stage_enums import PipelineTypeEnum
31
- from aiq.experimental.inference_time_scaling.models.stage_enums import StageTypeEnum
32
-
33
- logger = logging.getLogger(__name__)
34
-
35
-
36
- class PlanSelectExecuteFunctionConfig(FunctionBaseConfig, name="plan_select_execute_function"):
37
- """
38
- Defines an aiqtoolkit function that performs reasoning on the input data.
39
- Output is passed to the next function in the workflow.
40
-
41
- Designed to be used with an InterceptingFunction.
42
- """
43
-
44
- augmented_fn: FunctionRef = Field(description="The name of the function to reason on.")
45
-
46
- planner: ITSStrategyRef = Field(description="The configuration for the planner.")
47
- editor: ITSStrategyRef | None = Field(description="The configuration for the editor.", default=None)
48
- scorer: ITSStrategyRef | None = Field(description="The configuration for the scorer.", default=None)
49
- selector: ITSStrategyRef = Field(description="The configuration for the selector.")
50
-
51
- verbose: bool = Field(default=False, description="Whether to log detailed information.")
52
- agent_context_prompt_template: str = Field(
53
- description="The template for the agent context prompt. This prompt is used to provide context about the agent",
54
- default=("\nThe agent system has the following description:\n"
55
- "{description}\n"
56
- "And has access to the following tools with functionality:\n"
57
- "{tools}\n\n"))
58
-
59
- downstream_template: str = Field(
60
- description=("The template for the downstream prompt. This prompt is used to provide the reasoning output to"
61
- " the executing agent"),
62
- default=("Answer the following question based on message history: {input_text}"
63
- "\n\nHere is a plan for execution that you could use to guide you if you wanted to:"
64
- "\n\n{reasoning_output}"
65
- "\n\nNOTE: Remember to follow your guidance on how to format output, etc."
66
- "\n\n You must respond with the answer to the original question directly to the user."))
67
-
68
-
69
- @register_function(config_type=PlanSelectExecuteFunctionConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN])
70
- async def plan_select_execute_function(config: PlanSelectExecuteFunctionConfig, builder: Builder):
71
- """
72
- Build a ExecutionPlanningFunction from the provided config.
73
-
74
- Args:
75
- config (ExecutionPlanningFunctionConfig): The config for the ExecutionPlanningFunction.
76
- builder (Builder): The Builder instance to use for building the function.
77
-
78
- Returns:
79
- ExecutionPlanningFunction: The built ExecutionPlanningFunction.
80
- """
81
-
82
- try:
83
- from langchain_core.prompts import PromptTemplate
84
- except ImportError:
85
- raise ImportError("langchain-core is not installed. Please install it to use SingleShotMultiPlanPlanner.\n"
86
- "This error can be resolved by installing aiqtoolkit-langchain.")
87
-
88
- # Get the augmented function's description
89
- augmented_function = builder.get_function(config.augmented_fn)
90
-
91
- # For now, we rely on runtime checking for type conversion
92
-
93
- if augmented_function.description and augmented_function.description != "":
94
- augmented_function_desc = augmented_function.description
95
- else:
96
- raise ValueError(f"Function {config.augmented_fn} does not have a description. Cannot augment "
97
- f"function without a description.")
98
-
99
- # Get the function dependencies of the augmented function
100
- function_used_tools = builder.get_function_dependencies(config.augmented_fn).functions
101
- tool_list = "Tool: Description\n"
102
-
103
- for tool in function_used_tools:
104
- tool_impl = builder.get_function(tool)
105
- tool_list += f"- {tool}: {tool_impl.description if hasattr(tool_impl, 'description') else ''}\n"
106
-
107
- # Draft the reasoning prompt for the augmented function
108
- template = PromptTemplate(template=config.agent_context_prompt_template,
109
- input_variables=["description", "tools"],
110
- validate_template=True)
111
-
112
- downstream_template = PromptTemplate(template=config.downstream_template,
113
- input_variables=["input_text", "reasoning_output"],
114
- validate_template=True)
115
-
116
- planner = await builder.get_its_strategy(strategy_name=config.planner,
117
- pipeline_type=PipelineTypeEnum.PLANNING,
118
- stage_type=StageTypeEnum.SEARCH)
119
-
120
- selector = await builder.get_its_strategy(strategy_name=config.selector,
121
- pipeline_type=PipelineTypeEnum.PLANNING,
122
- stage_type=StageTypeEnum.SELECTION)
123
-
124
- if config.editor:
125
- editor = await builder.get_its_strategy(strategy_name=config.editor,
126
- pipeline_type=PipelineTypeEnum.PLANNING,
127
- stage_type=StageTypeEnum.EDITING)
128
- else:
129
- editor = None
130
-
131
- if config.scorer:
132
- scorer = await builder.get_its_strategy(strategy_name=config.scorer,
133
- pipeline_type=PipelineTypeEnum.PLANNING,
134
- stage_type=StageTypeEnum.SCORING)
135
- else:
136
- scorer = None
137
-
138
- async def planning_pipeline(prompt, context):
139
-
140
- plans = await planner.ainvoke([ITSItem()], prompt, context)
141
-
142
- if editor:
143
- plans = await editor.ainvoke(plans, prompt, context)
144
- if scorer:
145
- plans = await scorer.ainvoke(plans, prompt, context)
146
-
147
- selected_plan = (await selector.ainvoke(plans, prompt, context))[0]
148
-
149
- return selected_plan
150
-
151
- streaming_inner_fn = None
152
- single_inner_fn = None
153
-
154
- if augmented_function.has_streaming_output:
155
-
156
- async def streaming_inner(
157
- input_message: AIQChatRequest) -> AsyncGenerator[augmented_function.streaming_output_type]:
158
- """
159
- Perform reasoning on the input text.
160
-
161
- Args:
162
- input_message (AIQChatRequest): The input text to reason on.
163
- """
164
-
165
- input_text = "".join([str(message.model_dump()) + "\n" for message in input_message.messages])
166
-
167
- context_prompt = await template.ainvoke(input={"description": augmented_function_desc, "tools": tool_list})
168
-
169
- context_prompt = context_prompt.to_string()
170
-
171
- # Run the ITS pipeline
172
- planning_item: ITSItem = await planning_pipeline(prompt=input_text, context=context_prompt)
173
-
174
- output = await downstream_template.ainvoke(input={
175
- "input_text": input_text, "reasoning_output": planning_item.plan
176
- })
177
-
178
- output = output.to_string()
179
-
180
- if config.verbose:
181
- logger.info("Reasoning plan and input to agent: \n\n%s", output)
182
-
183
- async for chunk in augmented_function.acall_stream(output):
184
- yield chunk
185
-
186
- streaming_inner_fn = streaming_inner
187
-
188
- if augmented_function.has_single_output:
189
-
190
- async def single_inner(input_message: AIQChatRequest) -> augmented_function.single_output_type:
191
- """
192
- Perform reasoning on the input text.
193
-
194
- Args:
195
- input_message (AIQChatRequest): The input text to reason on.
196
- """
197
-
198
- input_text = "".join([str(message.model_dump()) + "\n" for message in input_message.messages])
199
-
200
- context_prompt = await template.ainvoke(input={"description": augmented_function_desc, "tools": tool_list})
201
-
202
- context_prompt = context_prompt.to_string()
203
-
204
- # Run the ITS pipeline
205
- planning_item: ITSItem = await planning_pipeline(prompt=input_text, context=context_prompt)
206
-
207
- output = await downstream_template.ainvoke(input={
208
- "input_text": input_text, "reasoning_output": planning_item.plan
209
- })
210
-
211
- output = output.to_string()
212
-
213
- if config.verbose:
214
- logger.info("Reasoning plan and input to agent: \n\n%s", output)
215
-
216
- return await augmented_function.acall_invoke(output)
217
-
218
- single_inner_fn = single_inner
219
-
220
- yield FunctionInfo.create(
221
- single_fn=single_inner_fn,
222
- stream_fn=streaming_inner_fn,
223
- description=("Function that runs an ITS execution planner on input and sends plan downstream"),
224
- converters=augmented_function.converter_list)
@@ -1,132 +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 typing
17
-
18
- from pydantic import Field
19
- from pydantic import model_validator
20
-
21
- from aiq.data_models.component_ref import LLMRef
22
- from aiq.data_models.its_strategy import ITSStrategyBaseConfig
23
-
24
-
25
- class LLMAsAJudgeEditorConfig(ITSStrategyBaseConfig, name="llm_as_a_judge_editor"):
26
- """
27
- Configuration for the LLMAsAJudgeEditor.
28
- """
29
- num_feedback: int = Field(default=10,
30
- description="Number of feedback items to generate for each plan during editing. "
31
- "This can help in refining the plans based on feedback.")
32
-
33
- # If strategy is provided, LLM must be
34
- editing_llm: LLMRef | typing.Any | None = Field(
35
- default=None,
36
- description="The LLM to use for editing the plans. This can be a callable or an instance of an LLM client.")
37
-
38
- # If strategy is LLM_AS_A_JUDGE, ensure that the feedback_llm is provided.
39
- feedback_llm: LLMRef | typing.Any | None = Field(default=None,
40
- description="The LLM to use for generating feedback on the plans."
41
- " This can be a callable or an instance of an LLM client.")
42
-
43
- editor_template: str = Field(default=(
44
- "You are an expert at improving execution plans. You will be given a plan and feedback on that plan."
45
- " Your task is to create an improved version of the plan that addresses the feedback "
46
- "while maintaining its strengths.\n\n"
47
- "Here is the context:\n\n"
48
- "{context}\n\n"
49
- "**Input:** \n{original_prompt}\n\n"
50
- "**Original Plan:**\n{plan}\n\n"
51
- "**Feedback on the Plan:**\n{feedback}\n\n"
52
- "Please provide an improved version of the plan that addresses"
53
- " the feedback points. Maintain the same structure and "
54
- "step-by-step format, but enhance the content. Do not include explanations of your changes, just provide the "
55
- "improved plan directly:\n\n"
56
- "Begin the final improve plan with 'EDITED PLAN:'"),
57
- description="The template to use for editing the planning items based on feedback.")
58
-
59
- feedback_template: str = Field(
60
- default=("You are an expert at evaluating execution plans. You will be given a plan and "
61
- "need to provide {num_feedback} "
62
- "specific points of feedback about its strengths and weaknesses.\n\n"
63
- "Your feedback should cover aspects like:\n"
64
- "- Comprehensiveness of the plan\n"
65
- "- Logical flow and sequencing\n"
66
- "- Appropriate use of available tools\n"
67
- "- Potential edge cases or failure points\n"
68
- "- Efficiency and optimization opportunities\n\n"
69
- "Here is the context and plan to evaluate:\n\n"
70
- "{context}\n\n"
71
- "**Objective:** \n{original_prompt}\n\n"
72
- "**Plan to Evaluate:**\n{plan}\n\n"
73
- "Please provide exactly {num_feedback} numbered points of feedback, including "
74
- "both strengths and areas for improvement. Begin the feedback with 'FEEDBACK:' and provide"
75
- "{num_feedback} specific feedback points."),
76
- description="The template to use for generating feedback for each planning item.")
77
-
78
- @model_validator(mode="before")
79
- def validate_strategies(cls, values: dict[str, typing.Any]) -> dict[str, typing.Any]:
80
-
81
- if values.get('editing_llm') is None:
82
- raise ValueError('editing_llm must be provided when editing_strategy is set.')
83
- # If editing strategy is LLM_AS_A_JUDGE, feedback_llm must also be provided
84
- if (values.get('feedback_llm') is None):
85
- raise ValueError('feedback_llm must be provided when editing_strategy is LLM_AS_A_JUDGE.')
86
-
87
- return values
88
-
89
-
90
- class IterativePlanRefinementConfig(ITSStrategyBaseConfig, name="iterative_plan_refinement"):
91
- """Configuration for an 'iterative plan refinement' strategy."""
92
- editor_llm: LLMRef | typing.Any | None = Field(
93
- default=None, description="The LLM to use for generating and refining the plan across multiple iterations.")
94
- num_iterations: int = Field(default=3, description="How many refinement steps to perform.")
95
- refinement_template: str = Field(
96
- default=("You have the current plan:\n{current_plan}\n\n"
97
- "The plan was generated to achieve the following objective:\n{original_prompt}\n\n"
98
- "Using an agent system with the following description:\n{context}\n\n"
99
- "Refine or improve it to achieve the objective better."
100
- "Output the updated plan, beginning with:\nEDITED PLAN:\n"),
101
- description="Prompt used in each iteration to refine the plan.")
102
-
103
- @model_validator(mode="before")
104
- def validate_iterative_strategies(cls, values: dict) -> dict:
105
- if not values.get('editor_llm'):
106
- raise ValueError('planning_llm must be provided for iterative plan refinement.')
107
- if values.get('num_iterations', 0) < 1:
108
- raise ValueError('num_iterations must be >= 1 for iterative plan refinement.')
109
- return values
110
-
111
-
112
- class MotivationAwareSummarizationConfig(ITSStrategyBaseConfig, name="motivation_aware_editing"):
113
- """
114
- Configuration for the MotivationAwareSummarization strategy.
115
- """
116
- editor_llm: LLMRef | typing.Any | None = Field(
117
- default=None,
118
- description="The LLM to use for editing the plans. This can be a callable or an instance of an LLM client.")
119
-
120
- editor_template: str = Field(
121
- default=("You are an expert at summarizing key information from relevant documents based on an input task"
122
- "and motivation. Given a task and motivation, and documents, your task is to create a concise "
123
- "a summarized response to the task and motivation grounded in the documents .\n\n"
124
- "Here is the task:\n\n"
125
- "{task}\n\n"
126
- "Here is the motivation:\n\n"
127
- "{motivation}\n\n"
128
- "and here are the documents:\n\n"
129
- "{output}\n\n"
130
- "Please respond with a concise summary that addresses the task and motivation, in at most one"
131
- "or two sentences. Do not include any other output except the summary. "),
132
- description="The template to use for summarizing documents.")
@@ -1,48 +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 typing
17
-
18
- from pydantic import BaseModel
19
- from pydantic import ConfigDict
20
- from pydantic import Field
21
-
22
-
23
- class ITSItem(BaseModel):
24
- """
25
- Represents an item in the Inference Time Scaling (ITS) functions and pipelines
26
- """
27
- model_config = ConfigDict(extra="allow")
28
-
29
- input: typing.Any | None = Field(default=None,
30
- description="Input to the function or pipeline. "
31
- "This can be a structured tool call, or other info.")
32
- output: typing.Any | None = Field(default=None,
33
- description="Output from the function or pipeline. "
34
- "This can be a structured tool call, or other info.")
35
- plan: typing.Any | None = Field(default=None, description="Search plan for downstream agent(s).")
36
- feedback: str | None = Field(default=None,
37
- description="Feedback "
38
- "provided by feedback steps to improve the plan.")
39
- score: float | None = Field(default=None,
40
- description="Score of the plan based on feedback or other evaluation criteria. "
41
- "This can be used to rank plans.")
42
- metadata: typing.Any | None = Field(default=None,
43
- description="Additional information. This can be"
44
- " a structured tool call, or other info not "
45
- "in the plan.")
46
- name: str | None = Field(default=None,
47
- description="Name of the item or function"
48
- ", used for identification in pipelines.")
@@ -1,112 +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 typing
17
-
18
- from pydantic import Field
19
- from pydantic import model_validator
20
-
21
- from aiq.data_models.component_ref import LLMRef
22
- from aiq.data_models.its_strategy import ITSStrategyBaseConfig
23
-
24
-
25
- class LLMBasedPlanScoringConfig(ITSStrategyBaseConfig, name="llm_based_plan_scoring"):
26
- """
27
- Configuration for LLMBasedScoring.
28
- """
29
- scoring_llm: LLMRef | typing.Any | None = Field(
30
- default=None,
31
- description="The LLM to use for scoring the plans. This can be a callable or an instance of an LLM client.")
32
-
33
- scoring_template: str = Field(
34
- default=("You are an expert reasoning model tasked with scoring the following execution plan based on its"
35
- "quality and relevance to the provided input to an agent system.\n\n"
36
- "The agent system's role is:\n{context}\n\n"
37
- "It has been tasked with achieving the following goal: \n{original_prompt}\n\n"
38
- "The following plan has been generated to achieve this goal:\n\n{plan}\n\n"
39
- "Score the plan on a scale from 1 to 10, where 10 is the best. "
40
- "Return the final score as a floating point number preceded by `FINAL SCORE:` without any "
41
- "other text before or after it\n"),
42
- description="The template to use for scoring the plans.")
43
-
44
- @model_validator(mode="before")
45
- def validate_strategies(cls, values: dict[str, typing.Any]) -> dict[str, typing.Any]:
46
- """
47
- Ensure that the scoring_llm is provided when using LLMBasedScoring.
48
- """
49
- if values.get('scoring_llm') is None:
50
- raise ValueError('scoring_llm must be provided when scorer_type is set to LLM_BASED_SCORING.')
51
-
52
- return values
53
-
54
-
55
- class LLMBasedAgentScoringConfig(ITSStrategyBaseConfig, name="llm_based_agent_scoring"):
56
- """
57
- Configuration for LLMBasedScoring.
58
- """
59
- scoring_llm: LLMRef | typing.Any | None = Field(
60
- default=None,
61
- description="The LLM to use for scoring the plans. This can be a callable or an instance of an LLM client.")
62
-
63
- scoring_template: str = Field(
64
- description="Prompt template to use for scoring the function output",
65
- default=("You are an expert reasoning model tasked with scoring the following "
66
- "result of an agent system based on its input and objective. Judge"
67
- " the quality and relevance of the answer to score it.\n\n"
68
- "The agent system's objective is:\n{objective}\n\n"
69
- "It has been tasked with achieving the following goal: \n{input}\n\n"
70
- "The following output has been generated by the agent:\n\n{output}\n\n"
71
- "Score the result on a scale from 1 to 10, where 10 is the best. "
72
- "Return the final score as a floating point number preceded by `FINAL SCORE:` without any "
73
- "other text before or after it\n"),
74
- )
75
-
76
- @model_validator(mode="before")
77
- def validate_strategies(cls, values: dict[str, typing.Any]) -> dict[str, typing.Any]:
78
- """
79
- Ensure that the scoring_llm is provided when using LLMBasedScoring.
80
- """
81
- if values.get('scoring_llm') is None:
82
- raise ValueError('scoring_llm must be provided when scorer_type is set to LLM_BASED_SCORING.')
83
-
84
- return values
85
-
86
-
87
- class MotivationAwareScoringConfig(ITSStrategyBaseConfig, name="motivation_aware_scoring"):
88
- """
89
- Configuration for a scoring strategy that considers both the original input (task)
90
- and the motivation (from metadata) along with the current output.
91
- """
92
-
93
- scoring_llm: LLMRef | None = Field(
94
- default=None, description="The LLM used to evaluate how well the output addresses the task plus motivation.")
95
-
96
- scoring_template: str = Field(
97
- default=("You are an expert at assessing the quality of an output in relation to its task and motivation.\n"
98
- "Task: {task}\n"
99
- "Motivation: {motivation}\n"
100
- "Output: {output}\n"
101
- "On a scale from 1 to 10 (10 being the best), how well does this output fulfill "
102
- "the original task in the context "
103
- "of the provided motivation? Note that the task might answer one part of a bigger question "
104
- "which should count as a satisfactory response and should not receive a lower score.\n"
105
- "Return the final score as a floating point number preceded by 'FINAL SCORE:'."),
106
- description="The prompt template used to evaluate and score the output.")
107
-
108
- @model_validator(mode="before")
109
- def validate_scoring_llm(cls, values):
110
- if values.get('scoring_llm') is None:
111
- raise ValueError("A scoring_llm must be provided for motivation_aware_scoring.")
112
- return values
@@ -1,120 +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 typing
17
-
18
- from pydantic import Field
19
- from pydantic import model_validator
20
-
21
- from aiq.data_models.component_ref import LLMRef
22
- from aiq.data_models.its_strategy import ITSStrategyBaseConfig
23
-
24
-
25
- class SingleShotMultiPlanConfig(ITSStrategyBaseConfig, name="single_shot_multi_plan"):
26
- num_plans: int = Field(default=4, description="Number of plans to generate.")
27
- max_temperature: float = Field(default=1.0,
28
- description="Maximum temperature to use for sampling when generating plans. "
29
- "This can help control the randomness of the generated plans.")
30
- min_temperature: float = Field(default=0.5,
31
- description="Minimum temperature to use for sampling when generating plans. "
32
- "This can help control the randomness of the generated plans.")
33
- # If strategy is provided, LLM must be
34
- planning_llm: LLMRef | typing.Any | None = Field(
35
- default=None,
36
- description="The LLM to use for planning. This can be a callable or an "
37
- "instance of an LLM client.")
38
-
39
- planning_template: str = Field(
40
- default=("You are an expert reasoning model task with creating a detailed execution plan"
41
- " for a system that has the following information to get the result of a given input:\n\n"
42
- "**System Information:**\n {context}"
43
- "**Input:** \n{prompt}\n\n"
44
- "An example plan could look like this:\n\n"
45
- "1. Call tool A with input X\n"
46
- "2. Call tool B with input Y\n"
47
- "3. Interpret the output of tool A and B\n"
48
- "4. Return the final result"
49
- "\n\nBegin the final plan with PLAN:\n"),
50
- description="The template to use for generating plans.")
51
-
52
- @model_validator(mode="before")
53
- def validate_strategies(cls, values: dict[str, typing.Any]) -> dict[str, typing.Any]:
54
- """
55
- Ensure that the required LLMs are provided based on the selected strategies.
56
- """
57
- # Validate planning strategy: planning_llm must be provided if planning_strategy is set
58
- if values.get('planning_llm') is None:
59
- raise ValueError('planning_llm must be provided when planning_strategy is set.')
60
-
61
- return values
62
-
63
-
64
- class MultiLLMPlanConfig(ITSStrategyBaseConfig, name="multi_llm_plan"):
65
- """Configuration for a 'multi LLM plan generation' strategy."""
66
- llms: list[LLMRef] = Field(
67
- default_factory=list,
68
- description="list of LLMs to use for plan generation. Each LLM can generate one or more plans.")
69
- plans_per_llm: int = Field(default=2, description="Number of plans each LLM should generate.")
70
- max_temperature: float = Field(default=1.0,
71
- description="Maximum temperature to use for sampling when generating plans. "
72
- "This can help control the randomness of the generated plans.")
73
- min_temperature: float = Field(default=0.5,
74
- description="Minimum temperature to use for sampling when generating plans. "
75
- "This can help control the randomness of the generated plans.")
76
- planning_template: str = Field(
77
- default=("You are an expert reasoning model task with creating a detailed execution plan"
78
- " for a system that has the following information to get the result of a given input:\n\n"
79
- "**System Information:**\n {context}"
80
- "**Input:** \n{prompt}\n\n"
81
- "An example plan could look like this:\n\n"
82
- "1. Call tool A with input X\n"
83
- "2. Call tool B with input Y\n"
84
- "3. Interpret the output of tool A and B\n"
85
- "4. Return the final result"
86
- "\n\nBegin the final plan with PLAN:\n"),
87
- description="The template to use for generating plans.")
88
-
89
- @model_validator(mode="before")
90
- def validate_multi_llm_strategies(cls, values: dict) -> dict:
91
- if not values.get('llms'):
92
- raise ValueError('Must provide at least one LLMRef in `llms` for multi-LLM strategy.')
93
- return values
94
-
95
-
96
- class MultiQueryRetrievalSearchConfig(ITSStrategyBaseConfig, name="multi_query_retrieval_search"):
97
- """
98
- Configuration for the MultiQueryRetrievalSearch strategy.
99
- This strategy generates multiple new 'ITSItem's per original item,
100
- each containing a differently phrased or re-focused version of the original task.
101
- """
102
- llms: list[LLMRef] = Field(default_factory=list,
103
- description="list of LLM references to use for generating diverse queries.")
104
-
105
- query_generation_template: str = Field(
106
- default=("You are an expert at re-framing a user's query to encourage new solution paths. "
107
- "Given the task description and an optional motivation, produce a short alternative query "
108
- "that addresses the same task from a different angle. By generating multiple "
109
- "perspectives on the task, your goal is to help "
110
- "the user overcome some of the limitations of distance-based similarity search.\n\n"
111
- "Task: {task}\n"
112
- "Motivation: {motivation}\n\n"
113
- "Output a concise new query statement below. Only output the revised query and nothing else.\n"),
114
- description="Prompt template for rewriting the task from a different perspective.")
115
-
116
- @model_validator(mode="before")
117
- def validate_llms(cls, values):
118
- if not values.get('llms'):
119
- raise ValueError("At least one LLMRef must be provided for multi_query_retrieval_search.")
120
- return values