aiqtoolkit 1.1.0rc5__py3-none-any.whl → 1.2.0__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 (319) hide show
  1. aiqtoolkit-1.2.0.dist-info/METADATA +29 -0
  2. aiqtoolkit-1.2.0.dist-info/RECORD +4 -0
  3. {aiqtoolkit-1.1.0rc5.dist-info → aiqtoolkit-1.2.0.dist-info}/WHEEL +1 -1
  4. aiqtoolkit-1.2.0.dist-info/top_level.txt +1 -0
  5. aiq/agent/__init__.py +0 -0
  6. aiq/agent/base.py +0 -76
  7. aiq/agent/dual_node.py +0 -67
  8. aiq/agent/react_agent/__init__.py +0 -0
  9. aiq/agent/react_agent/agent.py +0 -322
  10. aiq/agent/react_agent/output_parser.py +0 -104
  11. aiq/agent/react_agent/prompt.py +0 -46
  12. aiq/agent/react_agent/register.py +0 -148
  13. aiq/agent/reasoning_agent/__init__.py +0 -0
  14. aiq/agent/reasoning_agent/reasoning_agent.py +0 -224
  15. aiq/agent/register.py +0 -23
  16. aiq/agent/rewoo_agent/__init__.py +0 -0
  17. aiq/agent/rewoo_agent/agent.py +0 -410
  18. aiq/agent/rewoo_agent/prompt.py +0 -108
  19. aiq/agent/rewoo_agent/register.py +0 -158
  20. aiq/agent/tool_calling_agent/__init__.py +0 -0
  21. aiq/agent/tool_calling_agent/agent.py +0 -123
  22. aiq/agent/tool_calling_agent/register.py +0 -105
  23. aiq/builder/__init__.py +0 -0
  24. aiq/builder/builder.py +0 -223
  25. aiq/builder/component_utils.py +0 -303
  26. aiq/builder/context.py +0 -227
  27. aiq/builder/embedder.py +0 -24
  28. aiq/builder/eval_builder.py +0 -120
  29. aiq/builder/evaluator.py +0 -29
  30. aiq/builder/framework_enum.py +0 -24
  31. aiq/builder/front_end.py +0 -73
  32. aiq/builder/function.py +0 -297
  33. aiq/builder/function_base.py +0 -376
  34. aiq/builder/function_info.py +0 -627
  35. aiq/builder/intermediate_step_manager.py +0 -135
  36. aiq/builder/llm.py +0 -25
  37. aiq/builder/retriever.py +0 -25
  38. aiq/builder/user_interaction_manager.py +0 -71
  39. aiq/builder/workflow.py +0 -143
  40. aiq/builder/workflow_builder.py +0 -757
  41. aiq/cli/__init__.py +0 -14
  42. aiq/cli/cli_utils/__init__.py +0 -0
  43. aiq/cli/cli_utils/config_override.py +0 -231
  44. aiq/cli/cli_utils/validation.py +0 -37
  45. aiq/cli/commands/__init__.py +0 -0
  46. aiq/cli/commands/configure/__init__.py +0 -0
  47. aiq/cli/commands/configure/channel/__init__.py +0 -0
  48. aiq/cli/commands/configure/channel/add.py +0 -28
  49. aiq/cli/commands/configure/channel/channel.py +0 -36
  50. aiq/cli/commands/configure/channel/remove.py +0 -30
  51. aiq/cli/commands/configure/channel/update.py +0 -30
  52. aiq/cli/commands/configure/configure.py +0 -33
  53. aiq/cli/commands/evaluate.py +0 -139
  54. aiq/cli/commands/info/__init__.py +0 -14
  55. aiq/cli/commands/info/info.py +0 -39
  56. aiq/cli/commands/info/list_channels.py +0 -32
  57. aiq/cli/commands/info/list_components.py +0 -129
  58. aiq/cli/commands/info/list_mcp.py +0 -126
  59. aiq/cli/commands/registry/__init__.py +0 -14
  60. aiq/cli/commands/registry/publish.py +0 -88
  61. aiq/cli/commands/registry/pull.py +0 -118
  62. aiq/cli/commands/registry/registry.py +0 -38
  63. aiq/cli/commands/registry/remove.py +0 -108
  64. aiq/cli/commands/registry/search.py +0 -155
  65. aiq/cli/commands/start.py +0 -250
  66. aiq/cli/commands/uninstall.py +0 -83
  67. aiq/cli/commands/validate.py +0 -47
  68. aiq/cli/commands/workflow/__init__.py +0 -14
  69. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  70. aiq/cli/commands/workflow/templates/config.yml.j2 +0 -16
  71. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +0 -22
  72. aiq/cli/commands/workflow/templates/register.py.j2 +0 -5
  73. aiq/cli/commands/workflow/templates/workflow.py.j2 +0 -36
  74. aiq/cli/commands/workflow/workflow.py +0 -37
  75. aiq/cli/commands/workflow/workflow_commands.py +0 -313
  76. aiq/cli/entrypoint.py +0 -133
  77. aiq/cli/main.py +0 -44
  78. aiq/cli/register_workflow.py +0 -408
  79. aiq/cli/type_registry.py +0 -879
  80. aiq/data_models/__init__.py +0 -14
  81. aiq/data_models/api_server.py +0 -588
  82. aiq/data_models/common.py +0 -143
  83. aiq/data_models/component.py +0 -46
  84. aiq/data_models/component_ref.py +0 -135
  85. aiq/data_models/config.py +0 -349
  86. aiq/data_models/dataset_handler.py +0 -122
  87. aiq/data_models/discovery_metadata.py +0 -286
  88. aiq/data_models/embedder.py +0 -26
  89. aiq/data_models/evaluate.py +0 -104
  90. aiq/data_models/evaluator.py +0 -26
  91. aiq/data_models/front_end.py +0 -26
  92. aiq/data_models/function.py +0 -30
  93. aiq/data_models/function_dependencies.py +0 -64
  94. aiq/data_models/interactive.py +0 -237
  95. aiq/data_models/intermediate_step.py +0 -269
  96. aiq/data_models/invocation_node.py +0 -38
  97. aiq/data_models/llm.py +0 -26
  98. aiq/data_models/logging.py +0 -26
  99. aiq/data_models/memory.py +0 -26
  100. aiq/data_models/profiler.py +0 -53
  101. aiq/data_models/registry_handler.py +0 -26
  102. aiq/data_models/retriever.py +0 -30
  103. aiq/data_models/step_adaptor.py +0 -64
  104. aiq/data_models/streaming.py +0 -33
  105. aiq/data_models/swe_bench_model.py +0 -54
  106. aiq/data_models/telemetry_exporter.py +0 -26
  107. aiq/embedder/__init__.py +0 -0
  108. aiq/embedder/langchain_client.py +0 -41
  109. aiq/embedder/nim_embedder.py +0 -58
  110. aiq/embedder/openai_embedder.py +0 -42
  111. aiq/embedder/register.py +0 -24
  112. aiq/eval/__init__.py +0 -14
  113. aiq/eval/config.py +0 -42
  114. aiq/eval/dataset_handler/__init__.py +0 -0
  115. aiq/eval/dataset_handler/dataset_downloader.py +0 -106
  116. aiq/eval/dataset_handler/dataset_filter.py +0 -52
  117. aiq/eval/dataset_handler/dataset_handler.py +0 -169
  118. aiq/eval/evaluate.py +0 -325
  119. aiq/eval/evaluator/__init__.py +0 -14
  120. aiq/eval/evaluator/evaluator_model.py +0 -44
  121. aiq/eval/intermediate_step_adapter.py +0 -93
  122. aiq/eval/rag_evaluator/__init__.py +0 -0
  123. aiq/eval/rag_evaluator/evaluate.py +0 -138
  124. aiq/eval/rag_evaluator/register.py +0 -138
  125. aiq/eval/register.py +0 -23
  126. aiq/eval/remote_workflow.py +0 -128
  127. aiq/eval/runtime_event_subscriber.py +0 -52
  128. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  129. aiq/eval/swe_bench_evaluator/evaluate.py +0 -215
  130. aiq/eval/swe_bench_evaluator/register.py +0 -36
  131. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  132. aiq/eval/trajectory_evaluator/evaluate.py +0 -118
  133. aiq/eval/trajectory_evaluator/register.py +0 -40
  134. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  135. aiq/eval/tunable_rag_evaluator/evaluate.py +0 -263
  136. aiq/eval/tunable_rag_evaluator/register.py +0 -50
  137. aiq/eval/utils/__init__.py +0 -0
  138. aiq/eval/utils/output_uploader.py +0 -131
  139. aiq/eval/utils/tqdm_position_registry.py +0 -40
  140. aiq/front_ends/__init__.py +0 -14
  141. aiq/front_ends/console/__init__.py +0 -14
  142. aiq/front_ends/console/console_front_end_config.py +0 -32
  143. aiq/front_ends/console/console_front_end_plugin.py +0 -107
  144. aiq/front_ends/console/register.py +0 -25
  145. aiq/front_ends/cron/__init__.py +0 -14
  146. aiq/front_ends/fastapi/__init__.py +0 -14
  147. aiq/front_ends/fastapi/fastapi_front_end_config.py +0 -150
  148. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +0 -103
  149. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +0 -607
  150. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +0 -80
  151. aiq/front_ends/fastapi/job_store.py +0 -161
  152. aiq/front_ends/fastapi/main.py +0 -70
  153. aiq/front_ends/fastapi/message_handler.py +0 -279
  154. aiq/front_ends/fastapi/message_validator.py +0 -345
  155. aiq/front_ends/fastapi/register.py +0 -25
  156. aiq/front_ends/fastapi/response_helpers.py +0 -195
  157. aiq/front_ends/fastapi/step_adaptor.py +0 -320
  158. aiq/front_ends/fastapi/websocket.py +0 -148
  159. aiq/front_ends/mcp/__init__.py +0 -14
  160. aiq/front_ends/mcp/mcp_front_end_config.py +0 -32
  161. aiq/front_ends/mcp/mcp_front_end_plugin.py +0 -93
  162. aiq/front_ends/mcp/register.py +0 -27
  163. aiq/front_ends/mcp/tool_converter.py +0 -242
  164. aiq/front_ends/register.py +0 -22
  165. aiq/front_ends/simple_base/__init__.py +0 -14
  166. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +0 -52
  167. aiq/llm/__init__.py +0 -0
  168. aiq/llm/nim_llm.py +0 -45
  169. aiq/llm/openai_llm.py +0 -45
  170. aiq/llm/register.py +0 -22
  171. aiq/llm/utils/__init__.py +0 -14
  172. aiq/llm/utils/env_config_value.py +0 -94
  173. aiq/llm/utils/error.py +0 -17
  174. aiq/memory/__init__.py +0 -20
  175. aiq/memory/interfaces.py +0 -183
  176. aiq/memory/models.py +0 -112
  177. aiq/meta/module_to_distro.json +0 -3
  178. aiq/meta/pypi.md +0 -58
  179. aiq/observability/__init__.py +0 -0
  180. aiq/observability/async_otel_listener.py +0 -429
  181. aiq/observability/register.py +0 -99
  182. aiq/plugins/.namespace +0 -1
  183. aiq/profiler/__init__.py +0 -0
  184. aiq/profiler/callbacks/__init__.py +0 -0
  185. aiq/profiler/callbacks/agno_callback_handler.py +0 -295
  186. aiq/profiler/callbacks/base_callback_class.py +0 -20
  187. aiq/profiler/callbacks/langchain_callback_handler.py +0 -278
  188. aiq/profiler/callbacks/llama_index_callback_handler.py +0 -205
  189. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +0 -238
  190. aiq/profiler/callbacks/token_usage_base_model.py +0 -27
  191. aiq/profiler/data_frame_row.py +0 -51
  192. aiq/profiler/decorators/__init__.py +0 -0
  193. aiq/profiler/decorators/framework_wrapper.py +0 -131
  194. aiq/profiler/decorators/function_tracking.py +0 -254
  195. aiq/profiler/forecasting/__init__.py +0 -0
  196. aiq/profiler/forecasting/config.py +0 -18
  197. aiq/profiler/forecasting/model_trainer.py +0 -75
  198. aiq/profiler/forecasting/models/__init__.py +0 -22
  199. aiq/profiler/forecasting/models/forecasting_base_model.py +0 -40
  200. aiq/profiler/forecasting/models/linear_model.py +0 -196
  201. aiq/profiler/forecasting/models/random_forest_regressor.py +0 -268
  202. aiq/profiler/inference_metrics_model.py +0 -25
  203. aiq/profiler/inference_optimization/__init__.py +0 -0
  204. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  205. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +0 -452
  206. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +0 -258
  207. aiq/profiler/inference_optimization/data_models.py +0 -386
  208. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  209. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +0 -468
  210. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +0 -405
  211. aiq/profiler/inference_optimization/llm_metrics.py +0 -212
  212. aiq/profiler/inference_optimization/prompt_caching.py +0 -163
  213. aiq/profiler/inference_optimization/token_uniqueness.py +0 -107
  214. aiq/profiler/inference_optimization/workflow_runtimes.py +0 -72
  215. aiq/profiler/intermediate_property_adapter.py +0 -102
  216. aiq/profiler/profile_runner.py +0 -433
  217. aiq/profiler/utils.py +0 -184
  218. aiq/registry_handlers/__init__.py +0 -0
  219. aiq/registry_handlers/local/__init__.py +0 -0
  220. aiq/registry_handlers/local/local_handler.py +0 -176
  221. aiq/registry_handlers/local/register_local.py +0 -37
  222. aiq/registry_handlers/metadata_factory.py +0 -60
  223. aiq/registry_handlers/package_utils.py +0 -198
  224. aiq/registry_handlers/pypi/__init__.py +0 -0
  225. aiq/registry_handlers/pypi/pypi_handler.py +0 -251
  226. aiq/registry_handlers/pypi/register_pypi.py +0 -40
  227. aiq/registry_handlers/register.py +0 -21
  228. aiq/registry_handlers/registry_handler_base.py +0 -157
  229. aiq/registry_handlers/rest/__init__.py +0 -0
  230. aiq/registry_handlers/rest/register_rest.py +0 -56
  231. aiq/registry_handlers/rest/rest_handler.py +0 -237
  232. aiq/registry_handlers/schemas/__init__.py +0 -0
  233. aiq/registry_handlers/schemas/headers.py +0 -42
  234. aiq/registry_handlers/schemas/package.py +0 -68
  235. aiq/registry_handlers/schemas/publish.py +0 -63
  236. aiq/registry_handlers/schemas/pull.py +0 -82
  237. aiq/registry_handlers/schemas/remove.py +0 -36
  238. aiq/registry_handlers/schemas/search.py +0 -91
  239. aiq/registry_handlers/schemas/status.py +0 -47
  240. aiq/retriever/__init__.py +0 -0
  241. aiq/retriever/interface.py +0 -37
  242. aiq/retriever/milvus/__init__.py +0 -14
  243. aiq/retriever/milvus/register.py +0 -81
  244. aiq/retriever/milvus/retriever.py +0 -228
  245. aiq/retriever/models.py +0 -74
  246. aiq/retriever/nemo_retriever/__init__.py +0 -14
  247. aiq/retriever/nemo_retriever/register.py +0 -60
  248. aiq/retriever/nemo_retriever/retriever.py +0 -190
  249. aiq/retriever/register.py +0 -22
  250. aiq/runtime/__init__.py +0 -14
  251. aiq/runtime/loader.py +0 -188
  252. aiq/runtime/runner.py +0 -176
  253. aiq/runtime/session.py +0 -140
  254. aiq/runtime/user_metadata.py +0 -131
  255. aiq/settings/__init__.py +0 -0
  256. aiq/settings/global_settings.py +0 -318
  257. aiq/test/.namespace +0 -1
  258. aiq/tool/__init__.py +0 -0
  259. aiq/tool/code_execution/__init__.py +0 -0
  260. aiq/tool/code_execution/code_sandbox.py +0 -188
  261. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +0 -60
  262. aiq/tool/code_execution/local_sandbox/__init__.py +0 -13
  263. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +0 -83
  264. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +0 -4
  265. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +0 -25
  266. aiq/tool/code_execution/register.py +0 -70
  267. aiq/tool/code_execution/utils.py +0 -100
  268. aiq/tool/datetime_tools.py +0 -42
  269. aiq/tool/document_search.py +0 -141
  270. aiq/tool/github_tools/__init__.py +0 -0
  271. aiq/tool/github_tools/create_github_commit.py +0 -133
  272. aiq/tool/github_tools/create_github_issue.py +0 -87
  273. aiq/tool/github_tools/create_github_pr.py +0 -106
  274. aiq/tool/github_tools/get_github_file.py +0 -106
  275. aiq/tool/github_tools/get_github_issue.py +0 -166
  276. aiq/tool/github_tools/get_github_pr.py +0 -256
  277. aiq/tool/github_tools/update_github_issue.py +0 -100
  278. aiq/tool/mcp/__init__.py +0 -14
  279. aiq/tool/mcp/mcp_client.py +0 -220
  280. aiq/tool/mcp/mcp_tool.py +0 -95
  281. aiq/tool/memory_tools/__init__.py +0 -0
  282. aiq/tool/memory_tools/add_memory_tool.py +0 -79
  283. aiq/tool/memory_tools/delete_memory_tool.py +0 -67
  284. aiq/tool/memory_tools/get_memory_tool.py +0 -72
  285. aiq/tool/nvidia_rag.py +0 -95
  286. aiq/tool/register.py +0 -37
  287. aiq/tool/retriever.py +0 -89
  288. aiq/tool/server_tools.py +0 -63
  289. aiq/utils/__init__.py +0 -0
  290. aiq/utils/data_models/__init__.py +0 -0
  291. aiq/utils/data_models/schema_validator.py +0 -58
  292. aiq/utils/debugging_utils.py +0 -43
  293. aiq/utils/exception_handlers/__init__.py +0 -0
  294. aiq/utils/exception_handlers/schemas.py +0 -114
  295. aiq/utils/io/__init__.py +0 -0
  296. aiq/utils/io/yaml_tools.py +0 -119
  297. aiq/utils/metadata_utils.py +0 -74
  298. aiq/utils/optional_imports.py +0 -142
  299. aiq/utils/producer_consumer_queue.py +0 -178
  300. aiq/utils/reactive/__init__.py +0 -0
  301. aiq/utils/reactive/base/__init__.py +0 -0
  302. aiq/utils/reactive/base/observable_base.py +0 -65
  303. aiq/utils/reactive/base/observer_base.py +0 -55
  304. aiq/utils/reactive/base/subject_base.py +0 -79
  305. aiq/utils/reactive/observable.py +0 -59
  306. aiq/utils/reactive/observer.py +0 -76
  307. aiq/utils/reactive/subject.py +0 -131
  308. aiq/utils/reactive/subscription.py +0 -49
  309. aiq/utils/settings/__init__.py +0 -0
  310. aiq/utils/settings/global_settings.py +0 -197
  311. aiq/utils/type_converter.py +0 -232
  312. aiq/utils/type_utils.py +0 -397
  313. aiq/utils/url_utils.py +0 -27
  314. aiqtoolkit-1.1.0rc5.dist-info/METADATA +0 -331
  315. aiqtoolkit-1.1.0rc5.dist-info/RECORD +0 -316
  316. aiqtoolkit-1.1.0rc5.dist-info/entry_points.txt +0 -17
  317. aiqtoolkit-1.1.0rc5.dist-info/licenses/LICENSE-3rd-party.txt +0 -3686
  318. aiqtoolkit-1.1.0rc5.dist-info/licenses/LICENSE.md +0 -201
  319. aiqtoolkit-1.1.0rc5.dist-info/top_level.txt +0 -1
@@ -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.