solace-agent-mesh 0.2.4__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 -181
  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.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -256
  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-a-zJ6rLx.js +0 -46
  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-44c41103.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.4.dist-info/METADATA +0 -176
  508. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.4.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.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,569 @@
1
+ """
2
+ Collection of Python tools that can be configured for general purpose agents.
3
+ """
4
+
5
+ import asyncio
6
+ import inspect
7
+ import json
8
+ import os
9
+ import tempfile
10
+ import uuid
11
+ from datetime import datetime, timezone
12
+ from typing import Any, Dict, Optional, Tuple
13
+ from playwright.async_api import async_playwright
14
+
15
+ from google.adk.tools import ToolContext
16
+ from solace_ai_connector.common.log import log
17
+
18
+ from markitdown import MarkItDown, UnsupportedFormatException
19
+ from mermaid_cli import render_mermaid
20
+
21
+ from ...agent.utils.artifact_helpers import (
22
+ ensure_correct_extension,
23
+ save_artifact_with_metadata,
24
+ METADATA_SUFFIX,
25
+ DEFAULT_SCHEMA_MAX_KEYS,
26
+ )
27
+ from ...agent.utils.context_helpers import get_original_session_id
28
+
29
+ from google.genai import types as adk_types
30
+ from .tool_definition import BuiltinTool
31
+ from .registry import tool_registry
32
+
33
+
34
+ def _simple_truncate_text(text: str, max_bytes: int = 2048) -> Tuple[str, bool]:
35
+ """Truncates text to a maximum number of bytes for preview."""
36
+ truncated = False
37
+ preview_text = text
38
+ if not isinstance(text, str):
39
+ return "", False
40
+ if len(text.encode("utf-8")) > max_bytes:
41
+ encoded = text.encode("utf-8")
42
+ preview_text = encoded[:max_bytes].decode("utf-8", errors="ignore") + "..."
43
+ truncated = True
44
+ return preview_text, truncated
45
+
46
+
47
+ async def convert_file_to_markdown(
48
+ input_filename: str,
49
+ tool_context: ToolContext = None,
50
+ tool_config: Optional[Dict[str, Any]] = None,
51
+ ) -> Dict[str, Any]:
52
+ """
53
+ Converts an input file artifact to Markdown using the MarkItDown library.
54
+ The supported input types are those supported by MarkItDown (e.g., PDF, DOCX, XLSX, HTML, CSV, PPTX, ZIP).
55
+ The output is a new Markdown artifact.
56
+
57
+ Args:
58
+ input_filename: The filename (and optional :version) of the input artifact.
59
+ tool_context: The context provided by the ADK framework.
60
+ tool_config: Optional dictionary for tool-specific configuration (unused by this tool).
61
+
62
+ Returns:
63
+ A dictionary with status, output artifact details, and a preview of the result.
64
+ """
65
+ if not tool_context:
66
+ return {"status": "error", "message": "ToolContext is missing."}
67
+
68
+ log_identifier = f"[GeneralTool:convert_to_markdown:{input_filename}]"
69
+ log.info("%s Processing request.", log_identifier)
70
+
71
+ temp_input_file = None
72
+ original_input_basename = "unknown_input"
73
+
74
+ try:
75
+ inv_context = tool_context._invocation_context
76
+ app_name = inv_context.app_name
77
+ user_id = inv_context.user_id
78
+ session_id = get_original_session_id(inv_context)
79
+ artifact_service = inv_context.artifact_service
80
+ if not artifact_service:
81
+ raise ValueError("ArtifactService is not available in the context.")
82
+
83
+ parts = input_filename.split(":", 1)
84
+ filename_base_for_load = parts[0]
85
+ version_str = parts[1] if len(parts) > 1 else None
86
+ version_to_load = int(version_str) if version_str else None
87
+
88
+ if version_to_load is None:
89
+ list_versions_method = getattr(artifact_service, "list_versions")
90
+ if inspect.iscoroutinefunction(list_versions_method):
91
+ versions = await list_versions_method(
92
+ app_name=app_name,
93
+ user_id=user_id,
94
+ session_id=session_id,
95
+ filename=filename_base_for_load,
96
+ )
97
+ else:
98
+ versions = await asyncio.to_thread(
99
+ list_versions_method,
100
+ app_name=app_name,
101
+ user_id=user_id,
102
+ session_id=session_id,
103
+ filename=filename_base_for_load,
104
+ )
105
+ if not versions:
106
+ raise FileNotFoundError(
107
+ f"Artifact '{filename_base_for_load}' not found."
108
+ )
109
+ version_to_load = max(versions)
110
+ log.debug(
111
+ "%s Using latest version for input: %d", log_identifier, version_to_load
112
+ )
113
+
114
+ metadata_filename_to_load = f"{filename_base_for_load}{METADATA_SUFFIX}"
115
+ try:
116
+ load_meta_method = getattr(artifact_service, "load_artifact")
117
+ if inspect.iscoroutinefunction(load_meta_method):
118
+ metadata_part = await load_meta_method(
119
+ app_name=app_name,
120
+ user_id=user_id,
121
+ session_id=session_id,
122
+ filename=metadata_filename_to_load,
123
+ version=version_to_load,
124
+ )
125
+ else:
126
+ metadata_part = await asyncio.to_thread(
127
+ load_meta_method,
128
+ app_name=app_name,
129
+ user_id=user_id,
130
+ session_id=session_id,
131
+ filename=metadata_filename_to_load,
132
+ version=version_to_load,
133
+ )
134
+ if not metadata_part or not metadata_part.inline_data:
135
+ raise FileNotFoundError(
136
+ f"Metadata for '{filename_base_for_load}' v{version_to_load} not found."
137
+ )
138
+ input_metadata = json.loads(metadata_part.inline_data.data.decode("utf-8"))
139
+ original_input_filename_from_meta = input_metadata.get(
140
+ "filename", filename_base_for_load
141
+ )
142
+ original_input_basename, original_input_ext = os.path.splitext(
143
+ original_input_filename_from_meta
144
+ )
145
+ except Exception as meta_err:
146
+ log.warning(
147
+ "%s Could not load metadata for '%s' v%s: %s. Using input filename for naming.",
148
+ log_identifier,
149
+ filename_base_for_load,
150
+ version_to_load,
151
+ meta_err,
152
+ )
153
+ original_input_basename, original_input_ext = os.path.splitext(
154
+ filename_base_for_load
155
+ )
156
+
157
+ load_artifact_method = getattr(artifact_service, "load_artifact")
158
+ if inspect.iscoroutinefunction(load_artifact_method):
159
+ input_artifact_part = await load_artifact_method(
160
+ app_name=app_name,
161
+ user_id=user_id,
162
+ session_id=session_id,
163
+ filename=filename_base_for_load,
164
+ version=version_to_load,
165
+ )
166
+ else:
167
+ input_artifact_part = await asyncio.to_thread(
168
+ load_artifact_method,
169
+ app_name=app_name,
170
+ user_id=user_id,
171
+ session_id=session_id,
172
+ filename=filename_base_for_load,
173
+ version=version_to_load,
174
+ )
175
+
176
+ if not input_artifact_part or not input_artifact_part.inline_data:
177
+ raise FileNotFoundError(
178
+ f"Content for artifact '{filename_base_for_load}' v{version_to_load} not found."
179
+ )
180
+ input_bytes = input_artifact_part.inline_data.data
181
+
182
+ temp_suffix = original_input_ext if original_input_ext else None
183
+ temp_input_file = tempfile.NamedTemporaryFile(delete=False, suffix=temp_suffix)
184
+ temp_input_file.write(input_bytes)
185
+ temp_input_file.close()
186
+ log.debug(
187
+ "%s Input artifact content written to temporary file: %s",
188
+ log_identifier,
189
+ temp_input_file.name,
190
+ )
191
+
192
+ md_converter = MarkItDown()
193
+ log.debug(
194
+ "%s Calling MarkItDown.convert() on %s",
195
+ log_identifier,
196
+ temp_input_file.name,
197
+ )
198
+ conversion_result = await asyncio.to_thread(
199
+ md_converter.convert, temp_input_file.name
200
+ )
201
+
202
+ markdown_text_content = (
203
+ conversion_result.text_content
204
+ if conversion_result and conversion_result.text_content
205
+ else ""
206
+ )
207
+ if not markdown_text_content:
208
+ log.warning(
209
+ "%s MarkItDown conversion resulted in empty content for %s.",
210
+ log_identifier,
211
+ input_filename,
212
+ )
213
+
214
+ markdown_content_bytes = markdown_text_content.encode("utf-8")
215
+
216
+ output_filename = f"{original_input_basename}_converted.md"
217
+ output_mime_type = "text/markdown"
218
+
219
+ host_component = getattr(inv_context.agent, "host_component", None)
220
+ schema_max_keys = DEFAULT_SCHEMA_MAX_KEYS
221
+
222
+ save_metadata_dict = {
223
+ "description": f"Markdown conversion of '{original_input_basename}{original_input_ext}'",
224
+ "source_artifact": input_filename,
225
+ "source_artifact_version": version_to_load,
226
+ "conversion_tool": "MarkItDown",
227
+ }
228
+ save_result = await save_artifact_with_metadata(
229
+ artifact_service=artifact_service,
230
+ app_name=app_name,
231
+ user_id=user_id,
232
+ session_id=session_id,
233
+ filename=output_filename,
234
+ content_bytes=markdown_content_bytes,
235
+ mime_type=output_mime_type,
236
+ metadata_dict=save_metadata_dict,
237
+ timestamp=datetime.now(timezone.utc),
238
+ schema_max_keys=schema_max_keys,
239
+ tool_context=tool_context,
240
+ )
241
+ if save_result["status"] == "error":
242
+ raise IOError(
243
+ f"Failed to save Markdown artifact: {save_result.get('message', 'Unknown error')}"
244
+ )
245
+
246
+ preview_data, truncated = _simple_truncate_text(markdown_text_content)
247
+ preview_message = f"File converted to Markdown successfully. Full result saved as '{output_filename}' v{save_result['data_version']}."
248
+ if truncated:
249
+ preview_message += f" Preview shows first portion."
250
+
251
+ return {
252
+ "status": "success",
253
+ "message": preview_message,
254
+ "output_filename": output_filename,
255
+ "output_version": save_result["data_version"],
256
+ "result_preview": preview_data,
257
+ "result_truncated": truncated,
258
+ }
259
+
260
+ except FileNotFoundError as e:
261
+ log.warning("%s File not found error: %s", log_identifier, e)
262
+ return {"status": "error", "message": str(e)}
263
+ except UnsupportedFormatException as e:
264
+ log.warning("%s MarkItDown unsupported format: %s", log_identifier, e)
265
+ return {
266
+ "status": "error",
267
+ "message": f"Unsupported file format for MarkItDown: {e}",
268
+ }
269
+ except ValueError as e:
270
+ log.warning("%s Value error: %s", log_identifier, e)
271
+ return {"status": "error", "message": str(e)}
272
+ except Exception as e:
273
+ log.exception(
274
+ "%s Unexpected error in convert_file_to_markdown: %s", log_identifier, e
275
+ )
276
+ return {"status": "error", "message": f"An unexpected error occurred: {e}"}
277
+ finally:
278
+ if (
279
+ temp_input_file
280
+ and temp_input_file.name
281
+ and os.path.exists(temp_input_file.name)
282
+ ):
283
+ try:
284
+ os.remove(temp_input_file.name)
285
+ log.debug(
286
+ "%s Removed temporary input file: %s",
287
+ log_identifier,
288
+ temp_input_file.name,
289
+ )
290
+ except OSError as e_remove:
291
+ log.error(
292
+ "%s Failed to remove temporary input file %s: %s",
293
+ log_identifier,
294
+ temp_input_file.name,
295
+ e_remove,
296
+ )
297
+
298
+ async def _convert_svg_to_png_with_playwright(svg_data: str, scale: int = 2) -> bytes:
299
+ """
300
+ Converts SVG data to a PNG image using Playwright.
301
+
302
+ Args:
303
+ svg_data (str): The SVG data to be converted.
304
+ scale (int, optional): The scale factor for the PNG image. Defaults to 2.
305
+
306
+ Returns:
307
+ bytes: The PNG image data as a byte array.
308
+
309
+ Raises:
310
+ ValueError: If the SVG bounding box cannot be determined.
311
+
312
+ """
313
+ async with async_playwright() as p:
314
+ browser = await p.chromium.launch()
315
+ context = await browser.new_context(device_scale_factor=scale)
316
+ page = await context.new_page()
317
+
318
+ html_content = f"""
319
+ <html>
320
+ <body style="margin: 0; padding: 0; background: white;">
321
+ <div id="container">{svg_data}</div>
322
+ </body>
323
+ </html>
324
+ """
325
+ await page.set_content(html_content, wait_until="load")
326
+ await page.wait_for_timeout(50)
327
+
328
+ svg = page.locator("svg")
329
+ box = await svg.bounding_box()
330
+ if not box:
331
+ raise ValueError("Could not determine SVG bounding box.")
332
+
333
+ width = int(box["width"])
334
+ height = int(box["height"])
335
+
336
+ await page.set_viewport_size({"width": width, "height": height})
337
+
338
+ image_data = await svg.screenshot(type="png")
339
+
340
+ await browser.close()
341
+ return image_data
342
+
343
+ async def mermaid_diagram_generator(
344
+ mermaid_syntax: str,
345
+ output_filename: Optional[str] = None,
346
+ tool_context: ToolContext = None,
347
+ tool_config: Optional[Dict[str, Any]] = None,
348
+ ) -> Dict[str, Any]:
349
+ """
350
+ Generates a PNG image from Mermaid diagram syntax and saves it as an artifact.
351
+ The diagram must be detailed.
352
+
353
+ Args:
354
+ mermaid_syntax: The Mermaid diagram syntax (string).
355
+ output_filename: Optional desired name for the output PNG file.
356
+ If not provided, a unique name will be generated.
357
+ tool_context: The context provided by the ADK framework.
358
+ tool_config: Optional dictionary for tool-specific configuration (unused by this tool).
359
+
360
+ Returns:
361
+ A dictionary with status, output artifact details, and a preview message.
362
+ """
363
+ if not tool_context:
364
+ return {"status": "error", "message": "ToolContext is missing."}
365
+
366
+ log_identifier = f"[GeneralTool:mermaid_diagram_generator]"
367
+ if output_filename:
368
+ log_identifier += f":{output_filename}"
369
+ log.info("%s Processing request.", log_identifier)
370
+
371
+ try:
372
+ inv_context = tool_context._invocation_context
373
+ app_name = inv_context.app_name
374
+ user_id = inv_context.user_id
375
+ session_id = get_original_session_id(inv_context)
376
+ artifact_service = inv_context.artifact_service
377
+
378
+ if not artifact_service:
379
+ raise ValueError("ArtifactService is not available in the context.")
380
+
381
+ log.debug(
382
+ "%s Calling render_mermaid for syntax: %s",
383
+ log_identifier,
384
+ mermaid_syntax[:100] + "...",
385
+ )
386
+ title, desc, svg_image_data = await render_mermaid(
387
+ mermaid_syntax, output_format="svg", background_color="white"
388
+ )
389
+
390
+ if not svg_image_data:
391
+ log.error(
392
+ "%s Failed to render Mermaid diagram. No image data returned.",
393
+ log_identifier,
394
+ )
395
+ return {
396
+ "status": "error",
397
+ "message": "Failed to render Mermaid diagram. No image data returned.",
398
+ }
399
+ try:
400
+ image_data = await _convert_svg_to_png_with_playwright(svg_image_data.decode("utf-8"))
401
+ except Exception as e:
402
+ log.error(
403
+ "%s Failed to convert SVG to PNG with Playwright: %s",
404
+ log_identifier,
405
+ e,
406
+ )
407
+ return {
408
+ "status": "error",
409
+ "message": f"Failed to convert SVG to PNG: {e}",
410
+ }
411
+
412
+ log.debug(
413
+ "%s Mermaid diagram rendered successfully, image_data length: %d bytes",
414
+ log_identifier,
415
+ len(image_data),
416
+ )
417
+
418
+ if output_filename:
419
+ final_output_filename = ensure_correct_extension(output_filename, "png")
420
+ else:
421
+ final_output_filename = f"mermaid_diagram_{uuid.uuid4()}.png"
422
+
423
+ log.debug(
424
+ "%s Determined final output filename: %s",
425
+ log_identifier,
426
+ final_output_filename,
427
+ )
428
+
429
+ output_mime_type = "image/png"
430
+ schema_max_keys = DEFAULT_SCHEMA_MAX_KEYS
431
+
432
+ save_metadata_dict = {
433
+ "description": f"PNG image generated from Mermaid syntax. Original requested filename: {output_filename if output_filename else 'N/A'}",
434
+ "source_format": "mermaid_syntax",
435
+ "generation_tool": "mermaid_diagram_generator (mermaid-cli)",
436
+ "mermaid_title": title if title else "N/A",
437
+ "mermaid_description": desc if desc else "N/A",
438
+ }
439
+
440
+ save_result = await save_artifact_with_metadata(
441
+ artifact_service=artifact_service,
442
+ app_name=app_name,
443
+ user_id=user_id,
444
+ session_id=session_id,
445
+ filename=final_output_filename,
446
+ content_bytes=image_data,
447
+ mime_type=output_mime_type,
448
+ metadata_dict=save_metadata_dict,
449
+ timestamp=datetime.now(timezone.utc),
450
+ schema_max_keys=schema_max_keys,
451
+ tool_context=tool_context,
452
+ )
453
+
454
+ if save_result["status"] == "error":
455
+ log.error(
456
+ "%s Failed to save PNG artifact: %s",
457
+ log_identifier,
458
+ save_result.get("message", "Unknown error"),
459
+ )
460
+ raise IOError(
461
+ f"Failed to save PNG artifact: {save_result.get('message', 'Unknown error')}"
462
+ )
463
+
464
+ log.info(
465
+ "%s PNG artifact saved successfully: %s v%d",
466
+ log_identifier,
467
+ final_output_filename,
468
+ save_result["data_version"],
469
+ )
470
+
471
+ preview_message = f"Mermaid diagram rendered and saved as artifact '{final_output_filename}' v{save_result['data_version']}."
472
+
473
+ return {
474
+ "status": "success",
475
+ "message": preview_message,
476
+ "output_filename": final_output_filename,
477
+ "output_version": save_result["data_version"],
478
+ "result_preview": f"Artifact '{final_output_filename}' (v{save_result['data_version']}) created successfully.",
479
+ }
480
+
481
+ except ValueError as e:
482
+ log.warning(
483
+ "%s Value error in mermaid_diagram_generator: %s", log_identifier, e
484
+ )
485
+ return {"status": "error", "message": str(e)}
486
+ except IOError as e:
487
+ log.warning("%s IO error in mermaid_diagram_generator: %s", log_identifier, e)
488
+ return {"status": "error", "message": str(e)}
489
+ except Exception as e:
490
+ log.exception(
491
+ "%s Unexpected error in mermaid_diagram_generator: %s", log_identifier, e
492
+ )
493
+ return {"status": "error", "message": f"An unexpected error occurred: {e}"}
494
+
495
+
496
+ async def _continue_generation() -> Dict[str, Any]:
497
+ """
498
+ Internal tool to signal the LLM to continue a response that was interrupted.
499
+ This tool is not intended to be called directly by the LLM.
500
+ """
501
+ return {
502
+ "status": "continue",
503
+ "message": "You were interrupted due to a token limit. Please review your last output and continue *exactly where you left off with no other commentary*. \nTake care with newlines. If the last output did not finish with a newline, should the next character be a newline? This is especially important for files like csv or yaml files, where a missing newline will break the parser. \nFrom the user's point of view, this continuation needs to be seamless. This function (_continue_generation()) is an internal function that you must not call - it is just here to facilitate providing this message to you.\nIn the unlikely case you have nothing additional to output, then just return nothing.",
504
+ }
505
+
506
+
507
+ # --- Tool Definitions ---
508
+
509
+ _continue_generation_tool_def = BuiltinTool(
510
+ name="_continue_generation",
511
+ implementation=_continue_generation,
512
+ description="INTERNAL TOOL. This tool is used by the system to continue a response that was interrupted. You MUST NOT call this tool directly.",
513
+ category="internal",
514
+ required_scopes=[],
515
+ parameters=adk_types.Schema(
516
+ type=adk_types.Type.OBJECT,
517
+ properties={},
518
+ required=[],
519
+ ),
520
+ examples=[],
521
+ )
522
+
523
+ convert_file_to_markdown_tool_def = BuiltinTool(
524
+ name="convert_file_to_markdown",
525
+ implementation=convert_file_to_markdown,
526
+ description="Converts an input file artifact to Markdown using the MarkItDown library. The supported input types are those supported by MarkItDown (e.g., PDF, DOCX, XLSX, HTML, CSV, PPTX, ZIP). The output is a new Markdown artifact.",
527
+ category="general",
528
+ required_scopes=["tool:general:convert_file"],
529
+ parameters=adk_types.Schema(
530
+ type=adk_types.Type.OBJECT,
531
+ properties={
532
+ "input_filename": adk_types.Schema(
533
+ type=adk_types.Type.STRING,
534
+ description="The filename (and optional :version) of the input artifact.",
535
+ ),
536
+ },
537
+ required=["input_filename"],
538
+ ),
539
+ examples=[],
540
+ )
541
+
542
+ mermaid_diagram_generator_tool_def = BuiltinTool(
543
+ name="mermaid_diagram_generator",
544
+ implementation=mermaid_diagram_generator,
545
+ description="Generates a PNG image from Mermaid diagram syntax and saves it as an artifact.",
546
+ category="general",
547
+ required_scopes=["tool:general:mermaid"],
548
+ parameters=adk_types.Schema(
549
+ type=adk_types.Type.OBJECT,
550
+ properties={
551
+ "mermaid_syntax": adk_types.Schema(
552
+ type=adk_types.Type.STRING,
553
+ description="The Mermaid diagram syntax (string).",
554
+ ),
555
+ "output_filename": adk_types.Schema(
556
+ type=adk_types.Type.STRING,
557
+ description="Optional desired name for the output PNG file. If not provided, a unique name will be generated.",
558
+ nullable=True,
559
+ ),
560
+ },
561
+ required=["mermaid_syntax"],
562
+ ),
563
+ examples=[],
564
+ )
565
+
566
+
567
+ tool_registry.register(_continue_generation_tool_def)
568
+ tool_registry.register(convert_file_to_markdown_tool_def)
569
+ tool_registry.register(mermaid_diagram_generator_tool_def)