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

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

Potentially problematic release.


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

Files changed (441) hide show
  1. aiqtoolkit-1.2.0rc5.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2.0rc5.dist-info/RECORD +4 -0
  3. aiqtoolkit-1.2.0rc5.dist-info/top_level.txt +1 -0
  4. aiq/agent/__init__.py +0 -0
  5. aiq/agent/base.py +0 -239
  6. aiq/agent/dual_node.py +0 -67
  7. aiq/agent/react_agent/__init__.py +0 -0
  8. aiq/agent/react_agent/agent.py +0 -355
  9. aiq/agent/react_agent/output_parser.py +0 -104
  10. aiq/agent/react_agent/prompt.py +0 -41
  11. aiq/agent/react_agent/register.py +0 -149
  12. aiq/agent/reasoning_agent/__init__.py +0 -0
  13. aiq/agent/reasoning_agent/reasoning_agent.py +0 -225
  14. aiq/agent/register.py +0 -23
  15. aiq/agent/rewoo_agent/__init__.py +0 -0
  16. aiq/agent/rewoo_agent/agent.py +0 -411
  17. aiq/agent/rewoo_agent/prompt.py +0 -108
  18. aiq/agent/rewoo_agent/register.py +0 -158
  19. aiq/agent/tool_calling_agent/__init__.py +0 -0
  20. aiq/agent/tool_calling_agent/agent.py +0 -119
  21. aiq/agent/tool_calling_agent/register.py +0 -106
  22. aiq/authentication/__init__.py +0 -14
  23. aiq/authentication/api_key/__init__.py +0 -14
  24. aiq/authentication/api_key/api_key_auth_provider.py +0 -96
  25. aiq/authentication/api_key/api_key_auth_provider_config.py +0 -124
  26. aiq/authentication/api_key/register.py +0 -26
  27. aiq/authentication/exceptions/__init__.py +0 -14
  28. aiq/authentication/exceptions/api_key_exceptions.py +0 -38
  29. aiq/authentication/exceptions/auth_code_grant_exceptions.py +0 -86
  30. aiq/authentication/exceptions/call_back_exceptions.py +0 -38
  31. aiq/authentication/exceptions/request_exceptions.py +0 -54
  32. aiq/authentication/http_basic_auth/__init__.py +0 -0
  33. aiq/authentication/http_basic_auth/http_basic_auth_provider.py +0 -81
  34. aiq/authentication/http_basic_auth/register.py +0 -30
  35. aiq/authentication/interfaces.py +0 -93
  36. aiq/authentication/oauth2/__init__.py +0 -14
  37. aiq/authentication/oauth2/oauth2_auth_code_flow_provider.py +0 -107
  38. aiq/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +0 -39
  39. aiq/authentication/oauth2/register.py +0 -25
  40. aiq/authentication/register.py +0 -21
  41. aiq/builder/__init__.py +0 -0
  42. aiq/builder/builder.py +0 -285
  43. aiq/builder/component_utils.py +0 -316
  44. aiq/builder/context.py +0 -264
  45. aiq/builder/embedder.py +0 -24
  46. aiq/builder/eval_builder.py +0 -161
  47. aiq/builder/evaluator.py +0 -29
  48. aiq/builder/framework_enum.py +0 -24
  49. aiq/builder/front_end.py +0 -73
  50. aiq/builder/function.py +0 -344
  51. aiq/builder/function_base.py +0 -380
  52. aiq/builder/function_info.py +0 -627
  53. aiq/builder/intermediate_step_manager.py +0 -174
  54. aiq/builder/llm.py +0 -25
  55. aiq/builder/retriever.py +0 -25
  56. aiq/builder/user_interaction_manager.py +0 -74
  57. aiq/builder/workflow.py +0 -148
  58. aiq/builder/workflow_builder.py +0 -1117
  59. aiq/cli/__init__.py +0 -14
  60. aiq/cli/cli_utils/__init__.py +0 -0
  61. aiq/cli/cli_utils/config_override.py +0 -231
  62. aiq/cli/cli_utils/validation.py +0 -37
  63. aiq/cli/commands/__init__.py +0 -0
  64. aiq/cli/commands/configure/__init__.py +0 -0
  65. aiq/cli/commands/configure/channel/__init__.py +0 -0
  66. aiq/cli/commands/configure/channel/add.py +0 -28
  67. aiq/cli/commands/configure/channel/channel.py +0 -36
  68. aiq/cli/commands/configure/channel/remove.py +0 -30
  69. aiq/cli/commands/configure/channel/update.py +0 -30
  70. aiq/cli/commands/configure/configure.py +0 -33
  71. aiq/cli/commands/evaluate.py +0 -139
  72. aiq/cli/commands/info/__init__.py +0 -14
  73. aiq/cli/commands/info/info.py +0 -39
  74. aiq/cli/commands/info/list_channels.py +0 -32
  75. aiq/cli/commands/info/list_components.py +0 -129
  76. aiq/cli/commands/info/list_mcp.py +0 -213
  77. aiq/cli/commands/registry/__init__.py +0 -14
  78. aiq/cli/commands/registry/publish.py +0 -88
  79. aiq/cli/commands/registry/pull.py +0 -118
  80. aiq/cli/commands/registry/registry.py +0 -38
  81. aiq/cli/commands/registry/remove.py +0 -108
  82. aiq/cli/commands/registry/search.py +0 -155
  83. aiq/cli/commands/sizing/__init__.py +0 -14
  84. aiq/cli/commands/sizing/calc.py +0 -297
  85. aiq/cli/commands/sizing/sizing.py +0 -27
  86. aiq/cli/commands/start.py +0 -246
  87. aiq/cli/commands/uninstall.py +0 -81
  88. aiq/cli/commands/validate.py +0 -47
  89. aiq/cli/commands/workflow/__init__.py +0 -14
  90. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  91. aiq/cli/commands/workflow/templates/config.yml.j2 +0 -16
  92. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +0 -22
  93. aiq/cli/commands/workflow/templates/register.py.j2 +0 -5
  94. aiq/cli/commands/workflow/templates/workflow.py.j2 +0 -36
  95. aiq/cli/commands/workflow/workflow.py +0 -37
  96. aiq/cli/commands/workflow/workflow_commands.py +0 -313
  97. aiq/cli/entrypoint.py +0 -135
  98. aiq/cli/main.py +0 -44
  99. aiq/cli/register_workflow.py +0 -488
  100. aiq/cli/type_registry.py +0 -1000
  101. aiq/data_models/__init__.py +0 -14
  102. aiq/data_models/api_server.py +0 -694
  103. aiq/data_models/authentication.py +0 -231
  104. aiq/data_models/common.py +0 -171
  105. aiq/data_models/component.py +0 -54
  106. aiq/data_models/component_ref.py +0 -168
  107. aiq/data_models/config.py +0 -406
  108. aiq/data_models/dataset_handler.py +0 -123
  109. aiq/data_models/discovery_metadata.py +0 -335
  110. aiq/data_models/embedder.py +0 -27
  111. aiq/data_models/evaluate.py +0 -127
  112. aiq/data_models/evaluator.py +0 -26
  113. aiq/data_models/front_end.py +0 -26
  114. aiq/data_models/function.py +0 -30
  115. aiq/data_models/function_dependencies.py +0 -72
  116. aiq/data_models/interactive.py +0 -246
  117. aiq/data_models/intermediate_step.py +0 -302
  118. aiq/data_models/invocation_node.py +0 -38
  119. aiq/data_models/its_strategy.py +0 -30
  120. aiq/data_models/llm.py +0 -27
  121. aiq/data_models/logging.py +0 -26
  122. aiq/data_models/memory.py +0 -27
  123. aiq/data_models/object_store.py +0 -44
  124. aiq/data_models/profiler.py +0 -54
  125. aiq/data_models/registry_handler.py +0 -26
  126. aiq/data_models/retriever.py +0 -30
  127. aiq/data_models/retry_mixin.py +0 -35
  128. aiq/data_models/span.py +0 -187
  129. aiq/data_models/step_adaptor.py +0 -64
  130. aiq/data_models/streaming.py +0 -33
  131. aiq/data_models/swe_bench_model.py +0 -54
  132. aiq/data_models/telemetry_exporter.py +0 -26
  133. aiq/embedder/__init__.py +0 -0
  134. aiq/embedder/langchain_client.py +0 -41
  135. aiq/embedder/nim_embedder.py +0 -59
  136. aiq/embedder/openai_embedder.py +0 -43
  137. aiq/embedder/register.py +0 -24
  138. aiq/eval/__init__.py +0 -14
  139. aiq/eval/config.py +0 -60
  140. aiq/eval/dataset_handler/__init__.py +0 -0
  141. aiq/eval/dataset_handler/dataset_downloader.py +0 -106
  142. aiq/eval/dataset_handler/dataset_filter.py +0 -52
  143. aiq/eval/dataset_handler/dataset_handler.py +0 -254
  144. aiq/eval/evaluate.py +0 -506
  145. aiq/eval/evaluator/__init__.py +0 -14
  146. aiq/eval/evaluator/base_evaluator.py +0 -73
  147. aiq/eval/evaluator/evaluator_model.py +0 -45
  148. aiq/eval/intermediate_step_adapter.py +0 -99
  149. aiq/eval/rag_evaluator/__init__.py +0 -0
  150. aiq/eval/rag_evaluator/evaluate.py +0 -178
  151. aiq/eval/rag_evaluator/register.py +0 -143
  152. aiq/eval/register.py +0 -23
  153. aiq/eval/remote_workflow.py +0 -133
  154. aiq/eval/runners/__init__.py +0 -14
  155. aiq/eval/runners/config.py +0 -39
  156. aiq/eval/runners/multi_eval_runner.py +0 -54
  157. aiq/eval/runtime_event_subscriber.py +0 -52
  158. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  159. aiq/eval/swe_bench_evaluator/evaluate.py +0 -215
  160. aiq/eval/swe_bench_evaluator/register.py +0 -36
  161. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  162. aiq/eval/trajectory_evaluator/evaluate.py +0 -75
  163. aiq/eval/trajectory_evaluator/register.py +0 -40
  164. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  165. aiq/eval/tunable_rag_evaluator/evaluate.py +0 -245
  166. aiq/eval/tunable_rag_evaluator/register.py +0 -52
  167. aiq/eval/usage_stats.py +0 -41
  168. aiq/eval/utils/__init__.py +0 -0
  169. aiq/eval/utils/output_uploader.py +0 -140
  170. aiq/eval/utils/tqdm_position_registry.py +0 -40
  171. aiq/eval/utils/weave_eval.py +0 -184
  172. aiq/experimental/__init__.py +0 -0
  173. aiq/experimental/decorators/__init__.py +0 -0
  174. aiq/experimental/decorators/experimental_warning_decorator.py +0 -130
  175. aiq/experimental/inference_time_scaling/__init__.py +0 -0
  176. aiq/experimental/inference_time_scaling/editing/__init__.py +0 -0
  177. aiq/experimental/inference_time_scaling/editing/iterative_plan_refinement_editor.py +0 -147
  178. aiq/experimental/inference_time_scaling/editing/llm_as_a_judge_editor.py +0 -204
  179. aiq/experimental/inference_time_scaling/editing/motivation_aware_summarization.py +0 -107
  180. aiq/experimental/inference_time_scaling/functions/__init__.py +0 -0
  181. aiq/experimental/inference_time_scaling/functions/execute_score_select_function.py +0 -105
  182. aiq/experimental/inference_time_scaling/functions/its_tool_orchestration_function.py +0 -205
  183. aiq/experimental/inference_time_scaling/functions/its_tool_wrapper_function.py +0 -146
  184. aiq/experimental/inference_time_scaling/functions/plan_select_execute_function.py +0 -224
  185. aiq/experimental/inference_time_scaling/models/__init__.py +0 -0
  186. aiq/experimental/inference_time_scaling/models/editor_config.py +0 -132
  187. aiq/experimental/inference_time_scaling/models/its_item.py +0 -48
  188. aiq/experimental/inference_time_scaling/models/scoring_config.py +0 -112
  189. aiq/experimental/inference_time_scaling/models/search_config.py +0 -120
  190. aiq/experimental/inference_time_scaling/models/selection_config.py +0 -154
  191. aiq/experimental/inference_time_scaling/models/stage_enums.py +0 -43
  192. aiq/experimental/inference_time_scaling/models/strategy_base.py +0 -66
  193. aiq/experimental/inference_time_scaling/models/tool_use_config.py +0 -41
  194. aiq/experimental/inference_time_scaling/register.py +0 -36
  195. aiq/experimental/inference_time_scaling/scoring/__init__.py +0 -0
  196. aiq/experimental/inference_time_scaling/scoring/llm_based_agent_scorer.py +0 -168
  197. aiq/experimental/inference_time_scaling/scoring/llm_based_plan_scorer.py +0 -168
  198. aiq/experimental/inference_time_scaling/scoring/motivation_aware_scorer.py +0 -111
  199. aiq/experimental/inference_time_scaling/search/__init__.py +0 -0
  200. aiq/experimental/inference_time_scaling/search/multi_llm_planner.py +0 -128
  201. aiq/experimental/inference_time_scaling/search/multi_query_retrieval_search.py +0 -122
  202. aiq/experimental/inference_time_scaling/search/single_shot_multi_plan_planner.py +0 -128
  203. aiq/experimental/inference_time_scaling/selection/__init__.py +0 -0
  204. aiq/experimental/inference_time_scaling/selection/best_of_n_selector.py +0 -63
  205. aiq/experimental/inference_time_scaling/selection/llm_based_agent_output_selector.py +0 -131
  206. aiq/experimental/inference_time_scaling/selection/llm_based_output_merging_selector.py +0 -159
  207. aiq/experimental/inference_time_scaling/selection/llm_based_plan_selector.py +0 -128
  208. aiq/experimental/inference_time_scaling/selection/threshold_selector.py +0 -58
  209. aiq/front_ends/__init__.py +0 -14
  210. aiq/front_ends/console/__init__.py +0 -14
  211. aiq/front_ends/console/authentication_flow_handler.py +0 -233
  212. aiq/front_ends/console/console_front_end_config.py +0 -32
  213. aiq/front_ends/console/console_front_end_plugin.py +0 -96
  214. aiq/front_ends/console/register.py +0 -25
  215. aiq/front_ends/cron/__init__.py +0 -14
  216. aiq/front_ends/fastapi/__init__.py +0 -14
  217. aiq/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
  218. aiq/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +0 -27
  219. aiq/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +0 -107
  220. aiq/front_ends/fastapi/fastapi_front_end_config.py +0 -234
  221. aiq/front_ends/fastapi/fastapi_front_end_controller.py +0 -68
  222. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +0 -116
  223. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +0 -1092
  224. aiq/front_ends/fastapi/html_snippets/__init__.py +0 -14
  225. aiq/front_ends/fastapi/html_snippets/auth_code_grant_success.py +0 -35
  226. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +0 -80
  227. aiq/front_ends/fastapi/job_store.py +0 -183
  228. aiq/front_ends/fastapi/main.py +0 -72
  229. aiq/front_ends/fastapi/message_handler.py +0 -298
  230. aiq/front_ends/fastapi/message_validator.py +0 -345
  231. aiq/front_ends/fastapi/register.py +0 -25
  232. aiq/front_ends/fastapi/response_helpers.py +0 -195
  233. aiq/front_ends/fastapi/step_adaptor.py +0 -321
  234. aiq/front_ends/mcp/__init__.py +0 -14
  235. aiq/front_ends/mcp/mcp_front_end_config.py +0 -32
  236. aiq/front_ends/mcp/mcp_front_end_plugin.py +0 -93
  237. aiq/front_ends/mcp/register.py +0 -27
  238. aiq/front_ends/mcp/tool_converter.py +0 -242
  239. aiq/front_ends/register.py +0 -22
  240. aiq/front_ends/simple_base/__init__.py +0 -14
  241. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +0 -54
  242. aiq/llm/__init__.py +0 -0
  243. aiq/llm/aws_bedrock_llm.py +0 -57
  244. aiq/llm/nim_llm.py +0 -46
  245. aiq/llm/openai_llm.py +0 -46
  246. aiq/llm/register.py +0 -23
  247. aiq/llm/utils/__init__.py +0 -14
  248. aiq/llm/utils/env_config_value.py +0 -94
  249. aiq/llm/utils/error.py +0 -17
  250. aiq/memory/__init__.py +0 -20
  251. aiq/memory/interfaces.py +0 -183
  252. aiq/memory/models.py +0 -112
  253. aiq/meta/module_to_distro.json +0 -3
  254. aiq/meta/pypi.md +0 -58
  255. aiq/object_store/__init__.py +0 -20
  256. aiq/object_store/in_memory_object_store.py +0 -76
  257. aiq/object_store/interfaces.py +0 -84
  258. aiq/object_store/models.py +0 -36
  259. aiq/object_store/register.py +0 -20
  260. aiq/observability/__init__.py +0 -14
  261. aiq/observability/exporter/__init__.py +0 -14
  262. aiq/observability/exporter/base_exporter.py +0 -449
  263. aiq/observability/exporter/exporter.py +0 -78
  264. aiq/observability/exporter/file_exporter.py +0 -33
  265. aiq/observability/exporter/processing_exporter.py +0 -322
  266. aiq/observability/exporter/raw_exporter.py +0 -52
  267. aiq/observability/exporter/span_exporter.py +0 -265
  268. aiq/observability/exporter_manager.py +0 -335
  269. aiq/observability/mixin/__init__.py +0 -14
  270. aiq/observability/mixin/batch_config_mixin.py +0 -26
  271. aiq/observability/mixin/collector_config_mixin.py +0 -23
  272. aiq/observability/mixin/file_mixin.py +0 -288
  273. aiq/observability/mixin/file_mode.py +0 -23
  274. aiq/observability/mixin/resource_conflict_mixin.py +0 -134
  275. aiq/observability/mixin/serialize_mixin.py +0 -61
  276. aiq/observability/mixin/type_introspection_mixin.py +0 -183
  277. aiq/observability/processor/__init__.py +0 -14
  278. aiq/observability/processor/batching_processor.py +0 -309
  279. aiq/observability/processor/callback_processor.py +0 -42
  280. aiq/observability/processor/intermediate_step_serializer.py +0 -28
  281. aiq/observability/processor/processor.py +0 -71
  282. aiq/observability/register.py +0 -96
  283. aiq/observability/utils/__init__.py +0 -14
  284. aiq/observability/utils/dict_utils.py +0 -236
  285. aiq/observability/utils/time_utils.py +0 -31
  286. aiq/plugins/.namespace +0 -1
  287. aiq/profiler/__init__.py +0 -0
  288. aiq/profiler/calc/__init__.py +0 -14
  289. aiq/profiler/calc/calc_runner.py +0 -627
  290. aiq/profiler/calc/calculations.py +0 -288
  291. aiq/profiler/calc/data_models.py +0 -188
  292. aiq/profiler/calc/plot.py +0 -345
  293. aiq/profiler/callbacks/__init__.py +0 -0
  294. aiq/profiler/callbacks/agno_callback_handler.py +0 -295
  295. aiq/profiler/callbacks/base_callback_class.py +0 -20
  296. aiq/profiler/callbacks/langchain_callback_handler.py +0 -290
  297. aiq/profiler/callbacks/llama_index_callback_handler.py +0 -205
  298. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +0 -238
  299. aiq/profiler/callbacks/token_usage_base_model.py +0 -27
  300. aiq/profiler/data_frame_row.py +0 -51
  301. aiq/profiler/data_models.py +0 -24
  302. aiq/profiler/decorators/__init__.py +0 -0
  303. aiq/profiler/decorators/framework_wrapper.py +0 -131
  304. aiq/profiler/decorators/function_tracking.py +0 -254
  305. aiq/profiler/forecasting/__init__.py +0 -0
  306. aiq/profiler/forecasting/config.py +0 -18
  307. aiq/profiler/forecasting/model_trainer.py +0 -75
  308. aiq/profiler/forecasting/models/__init__.py +0 -22
  309. aiq/profiler/forecasting/models/forecasting_base_model.py +0 -40
  310. aiq/profiler/forecasting/models/linear_model.py +0 -196
  311. aiq/profiler/forecasting/models/random_forest_regressor.py +0 -268
  312. aiq/profiler/inference_metrics_model.py +0 -28
  313. aiq/profiler/inference_optimization/__init__.py +0 -0
  314. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  315. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +0 -460
  316. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +0 -258
  317. aiq/profiler/inference_optimization/data_models.py +0 -386
  318. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  319. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +0 -468
  320. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +0 -405
  321. aiq/profiler/inference_optimization/llm_metrics.py +0 -212
  322. aiq/profiler/inference_optimization/prompt_caching.py +0 -163
  323. aiq/profiler/inference_optimization/token_uniqueness.py +0 -107
  324. aiq/profiler/inference_optimization/workflow_runtimes.py +0 -72
  325. aiq/profiler/intermediate_property_adapter.py +0 -102
  326. aiq/profiler/profile_runner.py +0 -473
  327. aiq/profiler/utils.py +0 -184
  328. aiq/registry_handlers/__init__.py +0 -0
  329. aiq/registry_handlers/local/__init__.py +0 -0
  330. aiq/registry_handlers/local/local_handler.py +0 -176
  331. aiq/registry_handlers/local/register_local.py +0 -37
  332. aiq/registry_handlers/metadata_factory.py +0 -60
  333. aiq/registry_handlers/package_utils.py +0 -567
  334. aiq/registry_handlers/pypi/__init__.py +0 -0
  335. aiq/registry_handlers/pypi/pypi_handler.py +0 -251
  336. aiq/registry_handlers/pypi/register_pypi.py +0 -40
  337. aiq/registry_handlers/register.py +0 -21
  338. aiq/registry_handlers/registry_handler_base.py +0 -157
  339. aiq/registry_handlers/rest/__init__.py +0 -0
  340. aiq/registry_handlers/rest/register_rest.py +0 -56
  341. aiq/registry_handlers/rest/rest_handler.py +0 -237
  342. aiq/registry_handlers/schemas/__init__.py +0 -0
  343. aiq/registry_handlers/schemas/headers.py +0 -42
  344. aiq/registry_handlers/schemas/package.py +0 -68
  345. aiq/registry_handlers/schemas/publish.py +0 -63
  346. aiq/registry_handlers/schemas/pull.py +0 -82
  347. aiq/registry_handlers/schemas/remove.py +0 -36
  348. aiq/registry_handlers/schemas/search.py +0 -91
  349. aiq/registry_handlers/schemas/status.py +0 -47
  350. aiq/retriever/__init__.py +0 -0
  351. aiq/retriever/interface.py +0 -37
  352. aiq/retriever/milvus/__init__.py +0 -14
  353. aiq/retriever/milvus/register.py +0 -81
  354. aiq/retriever/milvus/retriever.py +0 -228
  355. aiq/retriever/models.py +0 -74
  356. aiq/retriever/nemo_retriever/__init__.py +0 -14
  357. aiq/retriever/nemo_retriever/register.py +0 -60
  358. aiq/retriever/nemo_retriever/retriever.py +0 -190
  359. aiq/retriever/register.py +0 -22
  360. aiq/runtime/__init__.py +0 -14
  361. aiq/runtime/loader.py +0 -215
  362. aiq/runtime/runner.py +0 -190
  363. aiq/runtime/session.py +0 -158
  364. aiq/runtime/user_metadata.py +0 -130
  365. aiq/settings/__init__.py +0 -0
  366. aiq/settings/global_settings.py +0 -318
  367. aiq/test/.namespace +0 -1
  368. aiq/tool/__init__.py +0 -0
  369. aiq/tool/chat_completion.py +0 -74
  370. aiq/tool/code_execution/README.md +0 -151
  371. aiq/tool/code_execution/__init__.py +0 -0
  372. aiq/tool/code_execution/code_sandbox.py +0 -267
  373. aiq/tool/code_execution/local_sandbox/.gitignore +0 -1
  374. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +0 -60
  375. aiq/tool/code_execution/local_sandbox/__init__.py +0 -13
  376. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +0 -198
  377. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +0 -6
  378. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +0 -50
  379. aiq/tool/code_execution/register.py +0 -74
  380. aiq/tool/code_execution/test_code_execution_sandbox.py +0 -414
  381. aiq/tool/code_execution/utils.py +0 -100
  382. aiq/tool/datetime_tools.py +0 -42
  383. aiq/tool/document_search.py +0 -141
  384. aiq/tool/github_tools/__init__.py +0 -0
  385. aiq/tool/github_tools/create_github_commit.py +0 -133
  386. aiq/tool/github_tools/create_github_issue.py +0 -87
  387. aiq/tool/github_tools/create_github_pr.py +0 -106
  388. aiq/tool/github_tools/get_github_file.py +0 -106
  389. aiq/tool/github_tools/get_github_issue.py +0 -166
  390. aiq/tool/github_tools/get_github_pr.py +0 -256
  391. aiq/tool/github_tools/update_github_issue.py +0 -100
  392. aiq/tool/mcp/__init__.py +0 -14
  393. aiq/tool/mcp/exceptions.py +0 -142
  394. aiq/tool/mcp/mcp_client.py +0 -255
  395. aiq/tool/mcp/mcp_tool.py +0 -96
  396. aiq/tool/memory_tools/__init__.py +0 -0
  397. aiq/tool/memory_tools/add_memory_tool.py +0 -79
  398. aiq/tool/memory_tools/delete_memory_tool.py +0 -67
  399. aiq/tool/memory_tools/get_memory_tool.py +0 -72
  400. aiq/tool/nvidia_rag.py +0 -95
  401. aiq/tool/register.py +0 -38
  402. aiq/tool/retriever.py +0 -89
  403. aiq/tool/server_tools.py +0 -66
  404. aiq/utils/__init__.py +0 -0
  405. aiq/utils/data_models/__init__.py +0 -0
  406. aiq/utils/data_models/schema_validator.py +0 -58
  407. aiq/utils/debugging_utils.py +0 -43
  408. aiq/utils/dump_distro_mapping.py +0 -32
  409. aiq/utils/exception_handlers/__init__.py +0 -0
  410. aiq/utils/exception_handlers/automatic_retries.py +0 -289
  411. aiq/utils/exception_handlers/mcp.py +0 -211
  412. aiq/utils/exception_handlers/schemas.py +0 -114
  413. aiq/utils/io/__init__.py +0 -0
  414. aiq/utils/io/model_processing.py +0 -28
  415. aiq/utils/io/yaml_tools.py +0 -119
  416. aiq/utils/log_utils.py +0 -37
  417. aiq/utils/metadata_utils.py +0 -74
  418. aiq/utils/optional_imports.py +0 -142
  419. aiq/utils/producer_consumer_queue.py +0 -178
  420. aiq/utils/reactive/__init__.py +0 -0
  421. aiq/utils/reactive/base/__init__.py +0 -0
  422. aiq/utils/reactive/base/observable_base.py +0 -65
  423. aiq/utils/reactive/base/observer_base.py +0 -55
  424. aiq/utils/reactive/base/subject_base.py +0 -79
  425. aiq/utils/reactive/observable.py +0 -59
  426. aiq/utils/reactive/observer.py +0 -76
  427. aiq/utils/reactive/subject.py +0 -131
  428. aiq/utils/reactive/subscription.py +0 -49
  429. aiq/utils/settings/__init__.py +0 -0
  430. aiq/utils/settings/global_settings.py +0 -197
  431. aiq/utils/string_utils.py +0 -38
  432. aiq/utils/type_converter.py +0 -290
  433. aiq/utils/type_utils.py +0 -484
  434. aiq/utils/url_utils.py +0 -27
  435. aiqtoolkit-1.2.0rc4.dist-info/METADATA +0 -363
  436. aiqtoolkit-1.2.0rc4.dist-info/RECORD +0 -438
  437. aiqtoolkit-1.2.0rc4.dist-info/entry_points.txt +0 -20
  438. aiqtoolkit-1.2.0rc4.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  439. aiqtoolkit-1.2.0rc4.dist-info/licenses/LICENSE.md +0 -201
  440. aiqtoolkit-1.2.0rc4.dist-info/top_level.txt +0 -1
  441. {aiqtoolkit-1.2.0rc4.dist-info → aiqtoolkit-1.2.0rc5.dist-info}/WHEEL +0 -0
@@ -1,166 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from datetime import datetime
17
- from typing import Literal
18
-
19
- from pydantic import BaseModel
20
- from pydantic import Field
21
- from pydantic import field_validator
22
-
23
- from aiq.builder.builder import Builder
24
- from aiq.builder.function_info import FunctionInfo
25
- from aiq.cli.register_workflow import register_function
26
- from aiq.data_models.function import FunctionBaseConfig
27
-
28
-
29
- class GithubListIssueModel(BaseModel):
30
- state: Literal["open", "closed", "all"] | None = Field('open', description="Issue state used in issue query filter")
31
- assignee: str | None = Field("*", description="Assignee name used in issue query filter")
32
- creator: str | None = Field(None, description="Creator name used in issue query filter")
33
- mentioned: str | None = Field(None, description="Name of person mentioned in issue")
34
- labels: list[str] | None = Field(None, description="A list of labels that are assigned to the issue")
35
- since: str | None = Field(None, description="Only show results that were last updated after the given time.")
36
-
37
- @classmethod
38
- @field_validator('since', mode='before')
39
- def validate_since(cls, v):
40
- if v is None:
41
- return v
42
- try:
43
- # Parse the string to a datetime object
44
- parsed_date = datetime.strptime(v, "%Y-%m-%dT%H:%M:%SZ")
45
- # Return the formatted string
46
- return parsed_date.isoformat() + 'Z'
47
- except ValueError as e:
48
- raise ValueError("since must be in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ") from e
49
-
50
-
51
- class GithubListIssueModelList(BaseModel):
52
- filter_params: GithubListIssueModel = Field(description=("A list of query params when fetching issues "
53
- "each of type GithubListIssueModel"))
54
-
55
-
56
- class GithubListIssueToolConfig(FunctionBaseConfig, name="github_list_issues_tool"):
57
- """
58
- Configuration for the GitHub List Issues Tool.
59
- """
60
- repo_name: str = Field(description="The repository name in the format 'owner/repo'")
61
- timeout: int = Field(default=300, description="The timeout configuration to use when sending requests.")
62
-
63
-
64
- @register_function(config_type=GithubListIssueToolConfig)
65
- async def list_github_issue_async(config: GithubListIssueToolConfig, builder: Builder):
66
- """
67
- Lists GitHub Issues based on various filter parameters
68
-
69
- """
70
- import json
71
- import os
72
-
73
- import httpx
74
-
75
- github_pat = os.getenv("GITHUB_PAT")
76
- if not github_pat:
77
- raise ValueError("GITHUB_PAT environment variable must be set")
78
-
79
- url = f"https://api.github.com/repos/{config.repo_name}/issues"
80
-
81
- # define the headers for the payload request
82
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
83
-
84
- async def _github_list_issues(filter_params) -> dict:
85
- async with httpx.AsyncClient(timeout=config.timeout) as client:
86
-
87
- filter_params = filter_params.dict(exclude_unset=True)
88
-
89
- # filter out None values that are explictly set in the request body.
90
- filter_params = {k: v for k, v in filter_params.items() if v is not None}
91
-
92
- response = await client.request("GET", url, params=filter_params, headers=headers)
93
-
94
- # Raise an exception for HTTP errors
95
- response.raise_for_status()
96
-
97
- # Parse and return the response JSON
98
- try:
99
- result = response.json()
100
-
101
- except ValueError as e:
102
- raise ValueError("The API response is not valid JSON.") from e
103
-
104
- return json.dumps(result)
105
-
106
- yield FunctionInfo.from_fn(_github_list_issues,
107
- description=(f"Lists GitHub issues based on filter "
108
- f"params in the repo named {config.repo_name}"),
109
- input_schema=GithubListIssueModelList)
110
-
111
-
112
- class GithubGetIssueModel(BaseModel):
113
- issue_number: str = Field(description="The issue number that needs to be fetched")
114
-
115
-
116
- class GithubGetIssueToolConfig(FunctionBaseConfig, name="github_get_issue_tool"):
117
- """
118
- Tool that fetches a particular issue in a GitHub repository asynchronously.
119
- """
120
- repo_name: str = "The repository name in the format 'owner/repo'"
121
- timeout: int = 300
122
-
123
-
124
- @register_function(config_type=GithubGetIssueToolConfig)
125
- async def get_github_issue_async(config: GithubGetIssueToolConfig, builder: Builder):
126
- """
127
- Fetches a particular issue in a GitHub repository asynchronously.
128
-
129
- """
130
- import json
131
- import os
132
-
133
- import httpx
134
-
135
- github_pat = os.getenv("GITHUB_PAT")
136
- if not github_pat:
137
- raise ValueError("GITHUB_PAT environment variable must be set")
138
-
139
- url = f"https://api.github.com/repos/{config.repo_name}/issues"
140
-
141
- # define the headers for the payload request
142
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
143
-
144
- async def _github_get_issue(issue_number) -> list:
145
- async with httpx.AsyncClient(timeout=config.timeout) as client:
146
- # update the url with the issue number that needs to be updated
147
- issue_url = os.path.join(url, issue_number)
148
-
149
- response = await client.request("GET", issue_url, headers=headers)
150
-
151
- # Raise an exception for HTTP errors
152
- response.raise_for_status()
153
-
154
- # Parse and return the response JSON
155
- try:
156
- result = response.json()
157
-
158
- except ValueError as e:
159
- raise ValueError("The API response is not valid JSON.") from e
160
-
161
- return json.dumps(result)
162
-
163
- yield FunctionInfo.from_fn(_github_get_issue,
164
- description=(f"Fetches a particular GitHub issue "
165
- f"in the repo named {config.repo_name}"),
166
- input_schema=GithubGetIssueModel)
@@ -1,256 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from typing import Literal
17
-
18
- from pydantic import BaseModel
19
- from pydantic import Field
20
-
21
- from aiq.builder.builder import Builder
22
- from aiq.builder.function_info import FunctionInfo
23
- from aiq.cli.register_workflow import register_function
24
- from aiq.data_models.function import FunctionBaseConfig
25
-
26
-
27
- class GithubListPullsModel(BaseModel):
28
- state: Literal["open", "closed", "all"] | None = Field('open', description="Issue state used in issue query filter")
29
- head: str | None = Field(None, description="Filters pulls by head user or head organization and branch name")
30
- base: str | None = Field(None, description="Filters pull by branch name")
31
-
32
-
33
- class GithubListPullsModelList(BaseModel):
34
- filter_params: GithubListPullsModel = Field(description=("A list of query params when fetching pull requests "
35
- "each of type GithubListPRModel"))
36
-
37
-
38
- class GithubListPullsToolConfig(FunctionBaseConfig, name="github_list_pulls_tool"):
39
- """
40
- Tool that lists GitHub Pull Requests based on various filter parameters
41
- """
42
- repo_name: str = Field(description="The repository name in the format 'owner/repo'")
43
- timeout: int = Field(default=300, description="The timeout configuration to use when sending requests.")
44
-
45
-
46
- @register_function(config_type=GithubListPullsToolConfig)
47
- async def list_github_pulls_async(config: GithubListPullsToolConfig, builder: Builder):
48
- """
49
- Lists GitHub Pull Requests based on various filter parameters
50
-
51
- """
52
- import json
53
- import os
54
-
55
- import httpx
56
-
57
- github_pat = os.getenv("GITHUB_PAT")
58
- if not github_pat:
59
- raise ValueError("GITHUB_PAT environment variable must be set")
60
-
61
- url = f"https://api.github.com/repos/{config.repo_name}/pulls"
62
-
63
- # define the headers for the payload request
64
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
65
-
66
- async def _github_list_pulls(filter_params) -> dict:
67
- async with httpx.AsyncClient(timeout=config.timeout) as client:
68
-
69
- filter_params = filter_params.dict(exclude_unset=True)
70
-
71
- # filter out None values that are explictly set in the request body.
72
- filter_params = {k: v for k, v in filter_params.items() if v is not None}
73
-
74
- response = await client.request("GET", url, params=filter_params, headers=headers)
75
-
76
- # Raise an exception for HTTP errors
77
- response.raise_for_status()
78
-
79
- # Parse and return the response JSON
80
- try:
81
- result = response.json()
82
-
83
- except ValueError as e:
84
- raise ValueError("The API response is not valid JSON.") from e
85
-
86
- return json.dumps(result)
87
-
88
- yield FunctionInfo.from_fn(_github_list_pulls,
89
- description=(f"Lists GitHub PRs based on filter params "
90
- f"in the repo named {config.repo_name}"),
91
- input_schema=GithubListPullsModelList)
92
-
93
-
94
- class GithubGetPullModel(BaseModel):
95
- pull_number: str = Field(description="The number of the pull request that needs to be fetched")
96
-
97
-
98
- class GithubGetPullToolConfig(FunctionBaseConfig, name="github_get_pull_tool"):
99
- """
100
- Tool that fetches a particular pull request in a GitHub repository asynchronously.
101
- """
102
- repo_name: str = "The repository name in the format 'owner/repo'"
103
- timeout: int = 300
104
-
105
-
106
- @register_function(config_type=GithubGetPullToolConfig)
107
- async def get_github_pull_async(config: GithubGetPullToolConfig, builder: Builder):
108
- """
109
- Fetches a particular pull request in a GitHub repository asynchronously.
110
-
111
- """
112
- import json
113
- import os
114
-
115
- import httpx
116
-
117
- github_pat = os.getenv("GITHUB_PAT")
118
- if not github_pat:
119
- raise ValueError("GITHUB_PAT environment variable must be set")
120
-
121
- url = f"https://api.github.com/repos/{config.repo_name}/pulls"
122
-
123
- # define the headers for the payload request
124
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
125
-
126
- async def _github_get_pull(pull_number) -> list:
127
- async with httpx.AsyncClient(timeout=config.timeout) as client:
128
- # update the url with the pull number that needs to be updated
129
- pull_url = os.path.join(url, pull_number)
130
-
131
- response = await client.request("GET", pull_url, headers=headers)
132
-
133
- # Raise an exception for HTTP errors
134
- response.raise_for_status()
135
-
136
- # Parse and return the response JSON
137
- try:
138
- result = response.json()
139
-
140
- except ValueError as e:
141
- raise ValueError("The API response is not valid JSON.") from e
142
-
143
- return json.dumps(result)
144
-
145
- yield FunctionInfo.from_fn(_github_get_pull,
146
- description=(f"Fetches a particular GitHub pull request "
147
- f"in the repo named {config.repo_name}"),
148
- input_schema=GithubGetPullModel)
149
-
150
-
151
- class GithubGetPullCommitsToolConfig(FunctionBaseConfig, name="github_get_pull_commits_tool"):
152
- """
153
- Configuration for the GitHub Get Pull Commits Tool.
154
- """
155
- repo_name: str = "The repository name in the format 'owner/repo'"
156
- timeout: int = 300
157
-
158
-
159
- @register_function(config_type=GithubGetPullCommitsToolConfig)
160
- async def get_github_pull_commits_async(config: GithubGetPullCommitsToolConfig, builder: Builder):
161
- """
162
- Fetches the commits associated with a particular pull request in a GitHub repository asynchronously.
163
-
164
- """
165
- import json
166
- import os
167
-
168
- import httpx
169
-
170
- github_pat = os.getenv("GITHUB_PAT")
171
- if not github_pat:
172
- raise ValueError("GITHUB_PAT environment variable must be set")
173
-
174
- url = f"https://api.github.com/repos/{config.repo_name}/pulls"
175
-
176
- # define the headers for the payload request
177
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
178
-
179
- async def _github_get_pull(pull_number) -> list:
180
- async with httpx.AsyncClient(timeout=config.timeout) as client:
181
- # update the url with the pull number that needs to be updated
182
- pull_url = os.path.join(url, pull_number)
183
- pull_commits_url = os.path.join(pull_url, "commits")
184
-
185
- response = await client.request("GET", pull_commits_url, headers=headers)
186
-
187
- # Raise an exception for HTTP errors
188
- response.raise_for_status()
189
-
190
- # Parse and return the response JSON
191
- try:
192
- result = response.json()
193
-
194
- except ValueError as e:
195
- raise ValueError("The API response is not valid JSON.") from e
196
-
197
- return json.dumps(result)
198
-
199
- yield FunctionInfo.from_fn(_github_get_pull,
200
- description=("Fetches the commits for a particular GitHub pull request "
201
- f" in the repo named {config.repo_name}"),
202
- input_schema=GithubGetPullModel)
203
-
204
-
205
- class GithubGetPullFilesToolConfig(FunctionBaseConfig, name="github_get_pull_files_tool"):
206
- """
207
- Configuration for the GitHub Get Pull Files Tool.
208
- """
209
- repo_name: str = "The repository name in the format 'owner/repo'"
210
- timeout: int = 300
211
-
212
-
213
- @register_function(config_type=GithubGetPullFilesToolConfig)
214
- async def get_github_pull_files_async(config: GithubGetPullFilesToolConfig, builder: Builder):
215
- """
216
- Fetches the files associated with a particular pull request in a GitHub repository asynchronously.
217
-
218
- """
219
- import json
220
- import os
221
-
222
- import httpx
223
-
224
- github_pat = os.getenv("GITHUB_PAT")
225
- if not github_pat:
226
- raise ValueError("GITHUB_PAT environment variable must be set")
227
-
228
- url = f"https://api.github.com/repos/{config.repo_name}/pulls"
229
-
230
- # define the headers for the payload request
231
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
232
-
233
- async def _github_get_pull(pull_number) -> list:
234
- async with httpx.AsyncClient(timeout=config.timeout) as client:
235
- # update the url with the pull number that needs to be updated
236
- pull_url = os.path.join(url, pull_number)
237
- pull_files_url = os.path.join(pull_url, "files")
238
-
239
- response = await client.request("GET", pull_files_url, headers=headers)
240
-
241
- # Raise an exception for HTTP errors
242
- response.raise_for_status()
243
-
244
- # Parse and return the response JSON
245
- try:
246
- result = response.json()
247
-
248
- except ValueError as e:
249
- raise ValueError("The API response is not valid JSON.") from e
250
-
251
- return json.dumps(result)
252
-
253
- yield FunctionInfo.from_fn(_github_get_pull,
254
- description=("Fetches the files for a particular GitHub pull request "
255
- f" in the repo named {config.repo_name}"),
256
- input_schema=GithubGetPullModel)
@@ -1,100 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from typing import Literal
17
-
18
- from pydantic import BaseModel
19
- from pydantic import Field
20
-
21
- from aiq.builder.builder import Builder
22
- from aiq.builder.function_info import FunctionInfo
23
- from aiq.cli.register_workflow import register_function
24
- from aiq.data_models.function import FunctionBaseConfig
25
-
26
-
27
- class GithubUpdateIssueModel(BaseModel):
28
- issue_number: str = Field(description="The issue number that will be updated")
29
- title: str | None = Field(None, description="The title of the GitHub Issue")
30
- body: str | None = Field(None, description="The body of the GitHub Issue")
31
- state: Literal["open", "closed"] | None = Field(None, description="The new state of the issue")
32
-
33
- state_reason: Literal["completed", "not_planned", "reopened", None] | None = Field(
34
- None, description="The reason for changing the state of the issue")
35
-
36
- labels: list[str] | None = Field(None, description="A list of labels to assign to the issue")
37
- assignees: list[str] | None = Field(None, description="A list of assignees to assign to the issue")
38
-
39
-
40
- class GithubUpdateIssueModelList(BaseModel):
41
- issues: list[GithubUpdateIssueModel] = Field(description=("A list of GitHub issues each "
42
- "of type GithubUpdateIssueModel"))
43
-
44
-
45
- class GithubUpdateIssueToolConfig(FunctionBaseConfig, name="github_update_issue_tool"):
46
- """
47
- Tool that updates an issue in a GitHub repository asynchronously.
48
- """
49
- repo_name: str = "The repository name in the format 'owner/repo'"
50
- timeout: int = 300
51
-
52
-
53
- @register_function(config_type=GithubUpdateIssueToolConfig)
54
- async def update_github_issue_async(config: GithubUpdateIssueToolConfig, builder: Builder):
55
- """
56
- Updates an issue in a GitHub repository asynchronously.
57
- """
58
- import json
59
- import os
60
-
61
- import httpx
62
-
63
- github_pat = os.getenv("GITHUB_PAT")
64
- if not github_pat:
65
- raise ValueError("GITHUB_PAT environment variable must be set")
66
-
67
- url = f"https://api.github.com/repos/{config.repo_name}/issues"
68
-
69
- # define the headers for the payload request
70
- headers = {"Authorization": f"Bearer {github_pat}", "Accept": "application/vnd.github+json"}
71
-
72
- async def _github_update_issue(issues) -> list:
73
- results = []
74
- async with httpx.AsyncClient(timeout=config.timeout) as client:
75
- for issue in issues:
76
- payload = issue.dict(exclude_unset=True)
77
-
78
- # update the url with the issue number that needs to be updated
79
- issue_number = payload.pop("issue_number")
80
- issue_url = os.path.join(url, issue_number)
81
-
82
- response = await client.request("PATCH", issue_url, json=payload, headers=headers)
83
-
84
- # Raise an exception for HTTP errors
85
- response.raise_for_status()
86
-
87
- # Parse and return the response JSON
88
- try:
89
- result = response.json()
90
- results.append(result)
91
-
92
- except ValueError as e:
93
- raise ValueError("The API response is not valid JSON.") from e
94
-
95
- return json.dumps(results)
96
-
97
- yield FunctionInfo.from_fn(_github_update_issue,
98
- description=(f"Updates a GitHub issue in the "
99
- f"repo named {config.repo_name}"),
100
- input_schema=GithubUpdateIssueModelList)
aiq/tool/mcp/__init__.py DELETED
@@ -1,14 +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.
@@ -1,142 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
- # SPDX-License-Identifier: Apache-2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from enum import Enum
17
-
18
-
19
- class MCPErrorCategory(str, Enum):
20
- """Categories of MCP errors for structured handling."""
21
- CONNECTION = "connection"
22
- TIMEOUT = "timeout"
23
- SSL = "ssl"
24
- AUTHENTICATION = "authentication"
25
- TOOL_NOT_FOUND = "tool_not_found"
26
- PROTOCOL = "protocol"
27
- UNKNOWN = "unknown"
28
-
29
-
30
- class MCPError(Exception):
31
- """Base exception for MCP-related errors."""
32
-
33
- def __init__(self,
34
- message: str,
35
- url: str,
36
- category: MCPErrorCategory = MCPErrorCategory.UNKNOWN,
37
- suggestions: list[str] | None = None,
38
- original_exception: Exception | None = None):
39
- super().__init__(message)
40
- self.url = url
41
- self.category = category
42
- self.suggestions = suggestions or []
43
- self.original_exception = original_exception
44
-
45
-
46
- class MCPConnectionError(MCPError):
47
- """Exception for MCP connection failures."""
48
-
49
- def __init__(self, url: str, original_exception: Exception | None = None):
50
- super().__init__(f"Unable to connect to MCP server at {url}",
51
- url=url,
52
- category=MCPErrorCategory.CONNECTION,
53
- suggestions=[
54
- "Please ensure the MCP server is running and accessible",
55
- "Check if the URL and port are correct"
56
- ],
57
- original_exception=original_exception)
58
-
59
-
60
- class MCPTimeoutError(MCPError):
61
- """Exception for MCP timeout errors."""
62
-
63
- def __init__(self, url: str, original_exception: Exception | None = None):
64
- super().__init__(f"Connection timed out to MCP server at {url}",
65
- url=url,
66
- category=MCPErrorCategory.TIMEOUT,
67
- suggestions=[
68
- "The server may be overloaded or network is slow",
69
- "Try again in a moment or check network connectivity"
70
- ],
71
- original_exception=original_exception)
72
-
73
-
74
- class MCPSSLError(MCPError):
75
- """Exception for MCP SSL/TLS errors."""
76
-
77
- def __init__(self, url: str, original_exception: Exception | None = None):
78
- super().__init__(f"SSL/TLS error connecting to {url}",
79
- url=url,
80
- category=MCPErrorCategory.SSL,
81
- suggestions=[
82
- "Check if the server requires HTTPS or has valid certificates",
83
- "Try using HTTP instead of HTTPS if appropriate"
84
- ],
85
- original_exception=original_exception)
86
-
87
-
88
- class MCPRequestError(MCPError):
89
- """Exception for MCP request errors."""
90
-
91
- def __init__(self, url: str, original_exception: Exception | None = None):
92
- message = f"Request failed to MCP server at {url}"
93
- if original_exception:
94
- message += f": {original_exception}"
95
-
96
- super().__init__(message,
97
- url=url,
98
- category=MCPErrorCategory.PROTOCOL,
99
- suggestions=["Check the server URL format and network settings"],
100
- original_exception=original_exception)
101
-
102
-
103
- class MCPToolNotFoundError(MCPError):
104
- """Exception for when a specific MCP tool is not found."""
105
-
106
- def __init__(self, tool_name: str, url: str, original_exception: Exception | None = None):
107
- super().__init__(f"Tool '{tool_name}' not available at {url}",
108
- url=url,
109
- category=MCPErrorCategory.TOOL_NOT_FOUND,
110
- suggestions=[
111
- "Use 'aiq info mcp --detail' to see available tools",
112
- "Check that the tool name is spelled correctly"
113
- ],
114
- original_exception=original_exception)
115
-
116
-
117
- class MCPAuthenticationError(MCPError):
118
- """Exception for MCP authentication failures."""
119
-
120
- def __init__(self, url: str, original_exception: Exception | None = None):
121
- super().__init__(f"Authentication failed when connecting to MCP server at {url}",
122
- url=url,
123
- category=MCPErrorCategory.AUTHENTICATION,
124
- suggestions=[
125
- "Check if the server requires authentication credentials",
126
- "Verify that your credentials are correct and not expired"
127
- ],
128
- original_exception=original_exception)
129
-
130
-
131
- class MCPProtocolError(MCPError):
132
- """Exception for MCP protocol-related errors."""
133
-
134
- def __init__(self, url: str, message: str = "Protocol error", original_exception: Exception | None = None):
135
- super().__init__(f"{message} (MCP server at {url})",
136
- url=url,
137
- category=MCPErrorCategory.PROTOCOL,
138
- suggestions=[
139
- "Check that the MCP server is running and accessible at this URL",
140
- "Verify the server supports the expected MCP protocol version"
141
- ],
142
- original_exception=original_exception)