solace-agent-mesh 0.2.3__py3-none-any.whl → 1.0.1__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 solace-agent-mesh might be problematic. Click here for more details.

Files changed (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -140
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -226
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DMmCawWe.js +0 -42
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-dd988f05.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.3.dist-info/METADATA +0 -172
  508. solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.3.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,289 @@
1
+ """
2
+ ADK Tool implementation for delegating tasks to peer A2A agents over Solace.
3
+ """
4
+
5
+ from typing import Any, Dict, Optional, List, Union
6
+ import uuid
7
+
8
+ from google.adk.tools import BaseTool, ToolContext
9
+ from google.genai import types as adk_types
10
+ from solace_ai_connector.common.log import log
11
+
12
+ from ...common.types import (
13
+ Message as A2AMessage,
14
+ TextPart,
15
+ FilePart,
16
+ AgentCard,
17
+ )
18
+ from ...common.constants import DEFAULT_COMMUNICATION_TIMEOUT
19
+
20
+ PEER_TOOL_PREFIX = "peer_"
21
+ CORRELATION_DATA_PREFIX = "a2a_subtask_"
22
+
23
+
24
+ class PeerAgentTool(BaseTool):
25
+ """
26
+ An ADK Tool that represents a discovered peer agent and handles task delegation
27
+ via the A2A protocol over Solace. Uses an asyncio Queue to block and wait for
28
+ the asynchronous response. Handles artifact passthrough from peer responses.
29
+ """
30
+
31
+ is_long_running = True
32
+
33
+ def __init__(self, target_agent_name: str, host_component):
34
+ """
35
+ Initializes the PeerAgentTool.
36
+
37
+ Args:
38
+ target_agent_name: The name of the peer agent this tool represents.
39
+ host_component: A reference to the SamAgentComponent instance.
40
+ """
41
+ tool_name = f"{PEER_TOOL_PREFIX}{target_agent_name}"
42
+ super().__init__(
43
+ name=tool_name,
44
+ description=f"Delegate tasks to the {target_agent_name} agent.",
45
+ is_long_running=True,
46
+ )
47
+ self.target_agent_name = target_agent_name
48
+ self.host_component = host_component
49
+ self.log_identifier = (
50
+ f"{host_component.log_identifier}[PeerTool:{target_agent_name}]"
51
+ )
52
+ self.sub_task_id: Optional[str] = None
53
+
54
+ def _get_peer_agent_card(self) -> Optional[AgentCard]:
55
+ """Safely retrieves the AgentCard for the target peer."""
56
+ return self.host_component.peer_agents.get(self.target_agent_name)
57
+
58
+ def _get_declaration(self) -> Optional[adk_types.FunctionDeclaration]:
59
+ """
60
+ Dynamically generates the FunctionDeclaration based on the peer's AgentCard.
61
+ Returns None if the peer agent is not currently discovered/allowed.
62
+ """
63
+ agent_card = self._get_peer_agent_card()
64
+ if not agent_card:
65
+ log.warning(
66
+ "%s Peer agent '%s' not found in registry. Tool unavailable.",
67
+ self.log_identifier,
68
+ self.target_agent_name,
69
+ )
70
+ return None
71
+
72
+ self.description = (
73
+ agent_card.description
74
+ or f"Interact with the {self.target_agent_name} agent."
75
+ )
76
+
77
+ parameters_schema = adk_types.Schema(
78
+ type=adk_types.Type.OBJECT,
79
+ properties={
80
+ "task_description": adk_types.Schema(
81
+ type=adk_types.Type.STRING,
82
+ description="Detailed description of the task for the peer agent.",
83
+ ),
84
+ "user_query": adk_types.Schema(
85
+ type=adk_types.Type.STRING,
86
+ description="The original user query or relevant context.",
87
+ ),
88
+ "data_artifacts": adk_types.Schema(
89
+ type=adk_types.Type.ARRAY,
90
+ items=adk_types.Schema(type=adk_types.Type.STRING),
91
+ description="A list of artifact filenames to be sent to the peer agent for context.",
92
+ nullable=True,
93
+ ),
94
+ },
95
+ required=["task_description"],
96
+ )
97
+
98
+ log.debug(
99
+ "%s Generated declaration for peer '%s'",
100
+ self.log_identifier,
101
+ self.target_agent_name,
102
+ )
103
+ return adk_types.FunctionDeclaration(
104
+ name=self.name,
105
+ description=self.description,
106
+ parameters=parameters_schema,
107
+ )
108
+
109
+ async def _prepare_a2a_parts(
110
+ self, args: Dict[str, Any], tool_context: ToolContext
111
+ ) -> List[Union[TextPart, FilePart]]:
112
+ """
113
+ Prepares the A2A message parts from tool arguments, including text and artifacts.
114
+ """
115
+ task_description = args.get("task_description", "No description provided.")
116
+ calling_agent_name = self.host_component.agent_name or "Unknown Agent"
117
+
118
+ # Create the multi-agent context message
119
+ context_message = (
120
+ f"You are part of a multi-agent AI platform. The task below is being sent to you by agent '{calling_agent_name}'. "
121
+ f"You must perform this task to the best of your abilities. All artifacts that you create will automatically be "
122
+ f"returned to the calling agent, but you must provide context and description for which artifacts are important "
123
+ f"and how they should be used. Note that the calling agent will not see any of your history - only the text "
124
+ f"that you respond with.\n\n"
125
+ f"Now please execute this task that was given to you:\n\n{task_description}"
126
+ )
127
+
128
+ a2a_message_parts = [TextPart(text=context_message)]
129
+
130
+ artifact_names = args.get("data_artifacts", [])
131
+ if not isinstance(artifact_names, list):
132
+ log.warning(
133
+ "%s 'data_artifacts' argument is not a list, ignoring. Value: %s",
134
+ self.log_identifier,
135
+ artifact_names,
136
+ )
137
+ artifact_names = []
138
+
139
+ if artifact_names:
140
+ log.debug(
141
+ "%s Preparing to include %d artifacts in peer request.",
142
+ self.log_identifier,
143
+ len(artifact_names),
144
+ )
145
+ a2a_context = tool_context.state.get("a2a_context", {})
146
+ for artifact_name in artifact_names:
147
+ try:
148
+ loaded_part = (
149
+ await self.host_component.artifact_service.load_artifact(
150
+ app_name=tool_context._invocation_context.app_name,
151
+ user_id=tool_context._invocation_context.user_id,
152
+ session_id=tool_context._invocation_context.session.id,
153
+ filename=artifact_name,
154
+ version=None,
155
+ )
156
+ )
157
+ if loaded_part:
158
+ a2a_file_part = await self.host_component._translate_adk_part_to_a2a_filepart(
159
+ loaded_part, artifact_name, a2a_context
160
+ )
161
+ if a2a_file_part:
162
+ a2a_message_parts.append(a2a_file_part)
163
+ log.info(
164
+ "%s Included latest artifact '%s' in peer request.",
165
+ self.log_identifier,
166
+ artifact_name,
167
+ )
168
+ else:
169
+ log.warning(
170
+ "%s Failed to translate loaded artifact '%s' to A2A part. Skipping.",
171
+ self.log_identifier,
172
+ artifact_name,
173
+ )
174
+ else:
175
+ log.warning(
176
+ "%s Could not load artifact '%s' to include in peer request. Skipping.",
177
+ self.log_identifier,
178
+ artifact_name,
179
+ )
180
+ except Exception as e:
181
+ log.exception(
182
+ "%s Error loading artifact '%s' for peer request: %s",
183
+ self.log_identifier,
184
+ artifact_name,
185
+ e,
186
+ )
187
+ return a2a_message_parts
188
+
189
+ async def run_async(
190
+ self, *, args: Dict[str, Any], tool_context: ToolContext
191
+ ) -> Any:
192
+ """
193
+ Handles the delegation of a task to a peer agent in a non-blocking,
194
+ "fire-and-forget" manner suitable for a long-running tool.
195
+ """
196
+ sub_task_id = f"{CORRELATION_DATA_PREFIX}{uuid.uuid4().hex}"
197
+ log_identifier = f"{self.log_identifier}[SubTask:{sub_task_id}]"
198
+ main_logical_task_id = "unknown_task"
199
+
200
+ try:
201
+ agent_card = self._get_peer_agent_card()
202
+ if not agent_card:
203
+ raise ValueError(
204
+ f"Peer agent '{self.target_agent_name}' not found or unavailable."
205
+ )
206
+
207
+ original_task_context = tool_context.state.get("a2a_context", {})
208
+ main_logical_task_id = original_task_context.get(
209
+ "logical_task_id", "unknown_task"
210
+ )
211
+ original_session_id = tool_context._invocation_context.session.id
212
+ user_id = tool_context._invocation_context.user_id
213
+ user_config = original_task_context.get("a2a_user_config", {})
214
+
215
+ invocation_id = tool_context._invocation_context.invocation_id
216
+ timeout_sec = self.host_component.get_config(
217
+ "inter_agent_communication", {}
218
+ ).get("request_timeout_seconds", DEFAULT_COMMUNICATION_TIMEOUT)
219
+
220
+ task_context_obj = None
221
+ with self.host_component.active_tasks_lock:
222
+ task_context_obj = self.host_component.active_tasks.get(
223
+ main_logical_task_id
224
+ )
225
+
226
+ if not task_context_obj:
227
+ raise ValueError(
228
+ f"TaskExecutionContext not found for task '{main_logical_task_id}'"
229
+ )
230
+
231
+ task_context_obj.register_parallel_call_sent(invocation_id)
232
+ log.info(
233
+ "%s Registered parallel call for invocation %s. Current state: %s",
234
+ log_identifier,
235
+ invocation_id,
236
+ task_context_obj.parallel_tool_calls.get(invocation_id),
237
+ )
238
+
239
+ a2a_message_parts = await self._prepare_a2a_parts(args, tool_context)
240
+ a2a_message = A2AMessage(role="user", parts=a2a_message_parts)
241
+
242
+ correlation_data = {
243
+ "adk_function_call_id": tool_context.function_call_id,
244
+ "original_task_context": original_task_context,
245
+ "peer_tool_name": self.name,
246
+ "logical_task_id": main_logical_task_id,
247
+ "invocation_id": invocation_id,
248
+ }
249
+
250
+ self.host_component.cache_service.add_data(
251
+ key=sub_task_id,
252
+ value=correlation_data,
253
+ expiry=timeout_sec,
254
+ component=self.host_component,
255
+ )
256
+
257
+ self.host_component.submit_a2a_task(
258
+ target_agent_name=self.target_agent_name,
259
+ a2a_message=a2a_message,
260
+ original_session_id=original_session_id,
261
+ main_logical_task_id=main_logical_task_id,
262
+ user_id=user_id,
263
+ user_config=user_config,
264
+ sub_task_id=sub_task_id,
265
+ function_call_id=tool_context.function_call_id,
266
+ )
267
+
268
+ task_context_obj.register_peer_sub_task(
269
+ sub_task_id=sub_task_id, peer_agent_name=self.target_agent_name
270
+ )
271
+ log.info(
272
+ "%s Registered active peer sub-task %s for main task %s.",
273
+ log_identifier,
274
+ sub_task_id,
275
+ main_logical_task_id,
276
+ )
277
+
278
+ log.info(
279
+ "%s Task fired. Returning to unblock ADK framework.",
280
+ log_identifier,
281
+ )
282
+ return None
283
+
284
+ except Exception as e:
285
+ log.exception("%s Error during peer tool execution: %s", log_identifier, e)
286
+ return {
287
+ "status": "error",
288
+ "message": f"Failed to delegate task to peer agent '{self.target_agent_name}': {e}",
289
+ }
@@ -0,0 +1,36 @@
1
+ """
2
+ A singleton registry for discovering and holding all BuiltinTool definitions.
3
+ """
4
+
5
+ from typing import Dict, List, Optional
6
+ from .tool_definition import BuiltinTool
7
+ from solace_ai_connector.common.log import log
8
+
9
+
10
+ class _ToolRegistry:
11
+ def __init__(self):
12
+ self._tools: Dict[str, BuiltinTool] = {}
13
+
14
+ def register(self, tool: BuiltinTool):
15
+ if tool.name in self._tools:
16
+ log.warning("Tool '%s' is already registered. Overwriting.", tool.name)
17
+ self._tools[tool.name] = tool
18
+
19
+ def get_tool_by_name(self, name: str) -> Optional[BuiltinTool]:
20
+ """Returns a tool by its registered name."""
21
+ return self._tools.get(name)
22
+
23
+ def get_tools_by_category(self, category_name: str) -> List[BuiltinTool]:
24
+ """Returns a list of all tools belonging to a specific category."""
25
+ return [tool for tool in self._tools.values() if tool.category == category_name]
26
+
27
+ def get_all_tools(self) -> List[BuiltinTool]:
28
+ return list(self._tools.values())
29
+
30
+ def clear(self):
31
+ """Clears all registered tools. For testing purposes only."""
32
+ self._tools.clear()
33
+ log.debug("Tool registry cleared.")
34
+
35
+
36
+ tool_registry = _ToolRegistry()
@@ -0,0 +1,135 @@
1
+ """
2
+ Test-specific ADK Tools.
3
+ """
4
+
5
+ import asyncio
6
+ from typing import Dict, Optional, Any
7
+
8
+ from google.adk.tools import ToolContext
9
+ from solace_ai_connector.common.log import log
10
+
11
+ from google.genai import types as adk_types
12
+ from .tool_definition import BuiltinTool
13
+ from .registry import tool_registry
14
+
15
+
16
+ async def time_delay(
17
+ seconds: float,
18
+ tool_context: ToolContext = None,
19
+ tool_config: Optional[Dict[str, Any]] = None,
20
+ ) -> Dict[str, any]:
21
+ """
22
+ Pauses execution for a specified number of seconds.
23
+ Useful for testing timeouts and asynchronous behavior.
24
+
25
+ Args:
26
+ seconds: The duration of the delay in seconds.
27
+ tool_context: The context provided by the ADK framework.
28
+
29
+ Returns:
30
+ A dictionary indicating the status and duration of the delay.
31
+ """
32
+ log_identifier = "[TestTool:time_delay]"
33
+ log.info("%s Requesting delay for %.2f seconds.", log_identifier, seconds)
34
+
35
+ if not tool_context:
36
+ log.warning("%s ToolContext is missing.", log_identifier)
37
+
38
+ try:
39
+ if not isinstance(seconds, (int, float)) or seconds < 0:
40
+ log.error(
41
+ "%s Invalid 'seconds' argument: %s. Must be a non-negative number.",
42
+ log_identifier,
43
+ seconds,
44
+ )
45
+ return {
46
+ "status": "error",
47
+ "message": f"Invalid 'seconds' argument: {seconds}. Must be a non-negative number.",
48
+ }
49
+
50
+ await asyncio.sleep(float(seconds))
51
+ log.info("%s Successfully delayed for %.2f seconds.", log_identifier, seconds)
52
+ return {
53
+ "status": "success",
54
+ "message": f"Delayed for {seconds} seconds.",
55
+ "delayed_seconds": seconds,
56
+ }
57
+ except Exception as e:
58
+ log.exception("%s Error during time_delay: %s", log_identifier, e)
59
+ return {
60
+ "status": "error",
61
+ "message": f"Error during delay: {e}",
62
+ "requested_seconds": seconds,
63
+ }
64
+
65
+
66
+ time_delay_tool_def = BuiltinTool(
67
+ name="time_delay",
68
+ implementation=time_delay,
69
+ description="Pauses execution for a specified number of seconds. Useful for testing timeouts and asynchronous behavior.",
70
+ category="test",
71
+ required_scopes=["tool:test:delay"],
72
+ parameters=adk_types.Schema(
73
+ type=adk_types.Type.OBJECT,
74
+ properties={
75
+ "seconds": adk_types.Schema(
76
+ type=adk_types.Type.NUMBER,
77
+ description="The duration of the delay in seconds.",
78
+ ),
79
+ },
80
+ required=["seconds"],
81
+ ),
82
+ examples=[],
83
+ )
84
+
85
+
86
+ def always_fail_tool() -> dict:
87
+ """This tool is designed to always raise an exception for testing error handling."""
88
+ raise ValueError("This tool is designed to fail.")
89
+
90
+
91
+ def dangling_tool_call_test_tool() -> None:
92
+ """
93
+ This tool is designed to return None, which simulates a silent failure
94
+ where the ADK does not create a function_response, leaving a dangling
95
+ function_call in the history. This is used to test the proactive
96
+ history repair callback ("the suspenders").
97
+ """
98
+ log.info(
99
+ "[TestTool:dangling_tool_call] Executing and returning None to create a dangling tool call."
100
+ )
101
+ return None
102
+
103
+
104
+ always_fail_tool_def = BuiltinTool(
105
+ name="always_fail_tool",
106
+ implementation=always_fail_tool,
107
+ description="This tool is designed to always raise an exception for testing error handling.",
108
+ category="test",
109
+ required_scopes=["tool:test:fail"],
110
+ parameters=adk_types.Schema(
111
+ type=adk_types.Type.OBJECT,
112
+ properties={},
113
+ required=[],
114
+ ),
115
+ examples=[],
116
+ )
117
+
118
+ dangling_tool_call_test_tool_def = BuiltinTool(
119
+ name="dangling_tool_call_test_tool",
120
+ implementation=dangling_tool_call_test_tool,
121
+ description="A test tool that returns None to create a dangling tool call in the history.",
122
+ category="test",
123
+ required_scopes=["tool:test:dangle"],
124
+ parameters=adk_types.Schema(
125
+ type=adk_types.Type.OBJECT,
126
+ properties={},
127
+ required=[],
128
+ ),
129
+ examples=[],
130
+ )
131
+
132
+
133
+ tool_registry.register(time_delay_tool_def)
134
+ tool_registry.register(always_fail_tool_def)
135
+ tool_registry.register(dangling_tool_call_test_tool_def)
@@ -0,0 +1,45 @@
1
+ """
2
+ Defines the Pydantic model for a self-contained BuiltinTool definition.
3
+ """
4
+
5
+ from typing import Callable, List, Dict, Any, Optional
6
+ from pydantic import BaseModel, Field
7
+ from google.genai import types as adk_types
8
+
9
+
10
+ class BuiltinTool(BaseModel):
11
+ """A self-contained, declarative definition for a built-in agent tool."""
12
+
13
+ name: str = Field(..., description="The function name the LLM will call.")
14
+ implementation: Callable = Field(
15
+ ..., description="The async Python function that implements the tool."
16
+ )
17
+ description: str = Field(
18
+ ...,
19
+ description="High-level description for the LLM to understand the tool's purpose.",
20
+ )
21
+ parameters: adk_types.Schema = Field(
22
+ ..., description="The OpenAPI-like schema for the tool's parameters."
23
+ )
24
+ examples: List[Dict[str, Any]] = Field(
25
+ default_factory=list, description="Few-shot examples for the LLM."
26
+ )
27
+ required_scopes: List[str] = Field(
28
+ default_factory=list,
29
+ description="A list of scopes required to execute this tool.",
30
+ )
31
+ category: str = Field(
32
+ default="General",
33
+ description="A category for grouping tools, e.g., 'Artifact', 'Data Analysis'. Used for configuration toggles.",
34
+ )
35
+ initializer: Optional[Callable[[Any, Dict[str, Any]], None]] = Field(
36
+ default=None,
37
+ description="An optional function to initialize the tool or its dependencies.",
38
+ )
39
+ raw_string_args: List[str] = Field(
40
+ default_factory=list,
41
+ description="A list of argument names that should be passed as raw strings without embed pre-resolution.",
42
+ )
43
+
44
+ class Config:
45
+ arbitrary_types_allowed = True
@@ -0,0 +1,104 @@
1
+ ## Quick Summary
2
+ The `tools` directory contains the complete set of built-in tools available to the agent. It follows a declarative, registry-based pattern where each tool module defines its functions and registers them with a central `tool_registry`. This allows for automatic discovery and dynamic availability of tools based on configuration and agent capabilities. The tools cover a wide range of functionalities including artifact management, audio/image processing, data analysis, web requests, and inter-agent communication.
3
+
4
+ ## Files Overview
5
+ - `__init__.py`: Imports all tool modules, triggering their registration with the central registry.
6
+ - `audio_tools.py`: Provides tools for text-to-speech (TTS), multi-speaker TTS, audio concatenation, and transcription.
7
+ - `builtin_artifact_tools.py`: Contains core tools for creating, listing, loading, modifying, and deleting artifacts.
8
+ - `builtin_data_analysis_tools.py`: Offers tools for generating charts from Plotly configurations.
9
+ - `general_agent_tools.py`: Includes general-purpose utilities like file-to-markdown conversion and Mermaid diagram generation.
10
+ - `image_tools.py`: Provides tools for image generation, editing, and vision-based description of images and audio.
11
+ - `peer_agent_tool.py`: Defines the `PeerAgentTool` class for delegating tasks to other agents.
12
+ - `registry.py`: Implements the singleton `tool_registry` for managing all tool definitions.
13
+ - `test_tools.py`: Contains tools specifically for testing agent behavior, such as delays and failures.
14
+ - `tool_definition.py`: Defines the `BuiltinTool` Pydantic model used for declaring tools.
15
+ - `web_tools.py`: Contains a tool for making HTTP requests to external web resources.
16
+
17
+ ## Developer API Reference
18
+
19
+ ### __init__.py
20
+ **Purpose:** This file ensures that all built-in tool modules are imported when the `tools` package is loaded. This is crucial for the declarative tool registration pattern, as it triggers the `tool_registry.register()` calls within each tool module.
21
+ **Import:** `import src.solace_agent_mesh.agent.tools`
22
+
23
+ **Usage Examples:**
24
+ ```python
25
+ # Importing the tools package is sufficient to register all built-in tools.
26
+ import src.solace_agent_mesh.agent.tools
27
+
28
+ # You can then access the registry to see all registered tools.
29
+ from src.solace_agent_mesh.agent.tools.registry import tool_registry
30
+ all_tools = tool_registry.get_all_tools()
31
+ print(f"Registered {len(all_tools)} tools.")
32
+ ```
33
+
34
+ ### audio_tools.py
35
+ **Purpose:** This file provides a collection of tools for audio processing, including text-to-speech (TTS) generation, audio concatenation, and transcription.
36
+ **Import:** `from src.solace_agent_mesh.agent.tools.audio_tools import select_voice, text_to_speech, multi_speaker_text_to_speech, concatenate_audio, transcribe_audio`
37
+
38
+ **Functions:**
39
+ - `select_voice(gender: Optional[str] = None, tone: Optional[str] = None, exclude_voices: Optional[List[str]] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Selects a suitable voice name based on criteria like gender and tone. Use this to get a consistent voice name that can be passed to the `text_to_speech` tool for multiple calls.
40
+ - `text_to_speech(text: str, output_filename: Optional[str] = None, voice_name: Optional[str] = None, gender: Optional[str] = None, tone: Optional[str] = None, language: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Converts text to speech using Gemini TTS API and saves as an MP3 artifact.
41
+ - `multi_speaker_text_to_speech(conversation_text: str, output_filename: Optional[str] = None, speaker_configs: Optional[List[Dict[str, str]]] = None, language: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Converts conversation text with speaker labels to speech using multiple voices.
42
+ - `concatenate_audio(clips_to_join: List[Dict[str, Any]], output_filename: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Combines multiple audio artifacts in a specified order into a single audio file, with optional pauses.
43
+ - `transcribe_audio(audio_filename: str, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Transcribes an audio recording using an OpenAI-compatible audio transcription API.
44
+
45
+ **Constants/Variables:**
46
+ - `ALL_AVAILABLE_VOICES: List[str]` - A list of all available voice names for TTS.
47
+ - `SUPPORTED_LANGUAGES: Dict[str, str]` - A mapping of common language names to their BCP-47 codes.
48
+ - `VOICE_TONE_MAPPING: Dict[str, List[str]]` - A dictionary mapping descriptive tones to lists of voice names.
49
+ - `GENDER_TO_VOICE_MAPPING: Dict[str, List[str]]` - A dictionary mapping genders ('male', 'female', 'neutral') to lists of voice names.
50
+
51
+ **Usage Examples:**
52
+ ```python
53
+ # Assume 'tool_context' is a valid ToolContext object.
54
+
55
+ # 1. Generate a simple audio file
56
+ tts_result = await text_to_speech(
57
+ text="Welcome to the developer guide.",
58
+ output_filename="welcome.mp3",
59
+ gender="female",
60
+ tone="friendly",
61
+ language="en-US",
62
+ tool_context=tool_context
63
+ )
64
+ print(tts_result)
65
+
66
+ # 2. Generate a multi-speaker conversation
67
+ convo_result = await multi_speaker_text_to_speech(
68
+ conversation_text="SpeakerA: How are you?\nSpeakerB: I am fine, thank you.",
69
+ speaker_configs=[
70
+ {"name": "SpeakerA", "gender": "male", "tone": "warm"},
71
+ {"name": "SpeakerB", "gender": "female", "tone": "bright"}
72
+ ],
73
+ output_filename="dialogue.mp3",
74
+ tool_context=tool_context
75
+ )
76
+ print(convo_result)
77
+
78
+ # 3. Concatenate the generated audio files
79
+ concat_result = await concatenate_audio(
80
+ clips_to_join=[
81
+ {"filename": "welcome.mp3:1", "pause_after_ms": 500},
82
+ {"filename": "dialogue.mp3:1"}
83
+ ],
84
+ output_filename="combined_audio.mp3",
85
+ tool_context=tool_context
86
+ )
87
+ print(concat_result)
88
+
89
+ # 4. Transcribe the combined audio
90
+ transcribe_result = await transcribe_audio(
91
+ audio_filename="combined_audio.mp3:1",
92
+ tool_context=tool_context
93
+ )
94
+ print(transcribe_result)
95
+ ```
96
+
97
+ ### builtin_artifact_tools.py
98
+ **Purpose:** This file provides the core tools for artifact management, allowing the agent to create, read, list, update, and delete data artifacts within the current session.
99
+ **Import:** `from src.solace_agent_mesh.agent.tools.builtin_artifact_tools import list_artifacts, load_artifact, signal_artifact_for_return, append_to_artifact, apply_embed_and_create_artifact, extract_content_from_artifact, delete_artifact`
100
+
101
+ **Functions:**
102
+ - `list_artifacts(tool_context: ToolContext = None) -> Dict[str, Any]` - Lists all available data artifact filenames and their versions for the current session.
103
+ - `load_artifact(filename: str, version: int, load_metadata_only: bool = False, max_content_length: Optional[int] = None, tool_context: ToolContext = None) -> Dict[str, Any]` - Loads the content or metadata of a specific artifact version.
104
+ - `signal_artifact_for_return(filename: str, version: int, tool_context: ToolContext = None