solace-agent-mesh 1.11.2__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.
Files changed (624) hide show
  1. solace_agent_mesh/__init__.py +0 -0
  2. solace_agent_mesh/agent/__init__.py +0 -0
  3. solace_agent_mesh/agent/adk/__init__.py +0 -0
  4. solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
  5. solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
  6. solace_agent_mesh/agent/adk/alembic/README +74 -0
  7. solace_agent_mesh/agent/adk/alembic/env.py +77 -0
  8. solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
  9. solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
  10. solace_agent_mesh/agent/adk/alembic.ini +112 -0
  11. solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
  12. solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
  13. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
  14. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
  15. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
  16. solace_agent_mesh/agent/adk/callbacks.py +2318 -0
  17. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
  18. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
  19. solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
  20. solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
  21. solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
  22. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
  23. solace_agent_mesh/agent/adk/runner.py +390 -0
  24. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  25. solace_agent_mesh/agent/adk/services.py +468 -0
  26. solace_agent_mesh/agent/adk/setup.py +1325 -0
  27. solace_agent_mesh/agent/adk/stream_parser.py +415 -0
  28. solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
  29. solace_agent_mesh/agent/agent_llm.txt +369 -0
  30. solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
  31. solace_agent_mesh/agent/protocol/__init__.py +0 -0
  32. solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
  33. solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
  34. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
  35. solace_agent_mesh/agent/proxies/__init__.py +0 -0
  36. solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
  37. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
  38. solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
  39. solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
  40. solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
  41. solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
  42. solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
  43. solace_agent_mesh/agent/proxies/base/app.py +100 -0
  44. solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
  45. solace_agent_mesh/agent/proxies/base/component.py +816 -0
  46. solace_agent_mesh/agent/proxies/base/config.py +85 -0
  47. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
  48. solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
  49. solace_agent_mesh/agent/sac/__init__.py +0 -0
  50. solace_agent_mesh/agent/sac/app.py +595 -0
  51. solace_agent_mesh/agent/sac/component.py +3668 -0
  52. solace_agent_mesh/agent/sac/patch_adk.py +103 -0
  53. solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
  54. solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
  55. solace_agent_mesh/agent/sac/task_execution_context.py +415 -0
  56. solace_agent_mesh/agent/testing/__init__.py +3 -0
  57. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  58. solace_agent_mesh/agent/testing/testing_llm.txt +58 -0
  59. solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
  60. solace_agent_mesh/agent/tools/__init__.py +16 -0
  61. solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
  62. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
  63. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
  64. solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
  65. solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
  66. solace_agent_mesh/agent/tools/image_tools.py +1185 -0
  67. solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
  68. solace_agent_mesh/agent/tools/registry.py +38 -0
  69. solace_agent_mesh/agent/tools/test_tools.py +136 -0
  70. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  71. solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
  72. solace_agent_mesh/agent/tools/tool_definition.py +53 -0
  73. solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
  74. solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
  75. solace_agent_mesh/agent/tools/web_tools.py +392 -0
  76. solace_agent_mesh/agent/utils/__init__.py +0 -0
  77. solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
  78. solace_agent_mesh/agent/utils/config_parser.py +49 -0
  79. solace_agent_mesh/agent/utils/context_helpers.py +77 -0
  80. solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
  81. solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
  82. solace_agent_mesh/assets/docs/404.html +16 -0
  83. solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.css +1 -0
  84. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  85. solace_agent_mesh/assets/docs/assets/images/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
  86. solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  95. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  96. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  101. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
  102. solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
  104. solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/509e993c.a1fbf45a.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
  132. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  133. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  134. solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
  135. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  136. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
  137. solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +1 -0
  138. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  139. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  140. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  141. solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
  142. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  143. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
  144. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  145. solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
  146. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  147. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  148. solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
  149. solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
  150. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  151. solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
  152. solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
  153. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  154. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  155. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
  156. solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
  157. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  158. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  159. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  160. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  161. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  162. solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js +2 -0
  163. solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js.LICENSE.txt +61 -0
  164. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  165. solace_agent_mesh/assets/docs/assets/js/8731.6c1dbf0c.js +1 -0
  166. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  167. solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
  168. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  169. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  170. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  171. solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
  172. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  173. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  174. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  175. solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +1 -0
  176. solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
  177. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  178. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  179. solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
  180. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  181. solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
  182. solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
  183. solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
  184. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  185. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  186. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  187. solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
  188. solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
  189. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
  190. solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
  191. solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
  192. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
  193. solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
  194. solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
  195. solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
  196. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
  197. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  198. solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
  199. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
  200. solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
  201. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
  202. solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
  203. solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
  204. solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
  205. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
  206. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
  207. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
  208. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
  209. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
  210. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
  211. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
  212. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
  213. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
  214. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
  215. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
  216. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
  217. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  218. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
  219. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  220. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
  221. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
  222. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
  223. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
  224. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +85 -0
  225. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
  226. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  227. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +144 -0
  228. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
  229. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
  230. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
  231. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
  232. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
  233. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
  234. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
  235. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
  236. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
  237. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
  238. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
  239. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
  240. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
  241. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
  242. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
  243. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  244. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
  245. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
  246. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
  247. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
  248. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  249. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +247 -0
  250. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
  251. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +184 -0
  252. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
  253. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
  254. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
  255. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
  256. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
  257. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
  258. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +78 -0
  259. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
  260. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
  261. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
  262. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
  263. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
  264. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
  265. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
  266. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -0
  267. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  268. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  269. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  270. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  271. solace_agent_mesh/assets/docs/img/sam-enterprise-credentials.png +0 -0
  272. solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
  273. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  274. solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
  275. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  276. solace_agent_mesh/assets/docs/search-doc-1765810064709.json +1 -0
  277. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  278. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  279. solace_agent_mesh/cli/__init__.py +1 -0
  280. solace_agent_mesh/cli/commands/__init__.py +0 -0
  281. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  282. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  283. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +729 -0
  284. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  285. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +102 -0
  286. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
  287. solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
  288. solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
  289. solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
  290. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  291. solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
  292. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  293. solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
  294. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  295. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -0
  296. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  297. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +119 -0
  298. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
  299. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
  300. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
  301. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  302. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
  303. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
  304. solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
  305. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  306. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  307. solace_agent_mesh/cli/commands/run_cmd.py +215 -0
  308. solace_agent_mesh/cli/main.py +52 -0
  309. solace_agent_mesh/cli/utils.py +262 -0
  310. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
  311. solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
  312. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  313. solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
  314. solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
  315. solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
  316. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
  317. solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
  318. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  319. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  320. solace_agent_mesh/common/__init__.py +1 -0
  321. solace_agent_mesh/common/a2a/__init__.py +241 -0
  322. solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
  323. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
  324. solace_agent_mesh/common/a2a/artifact.py +368 -0
  325. solace_agent_mesh/common/a2a/events.py +213 -0
  326. solace_agent_mesh/common/a2a/message.py +375 -0
  327. solace_agent_mesh/common/a2a/protocol.py +689 -0
  328. solace_agent_mesh/common/a2a/task.py +127 -0
  329. solace_agent_mesh/common/a2a/translation.py +655 -0
  330. solace_agent_mesh/common/a2a/types.py +55 -0
  331. solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
  332. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
  333. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
  334. solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
  335. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
  336. solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
  337. solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
  338. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
  339. solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
  340. solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
  341. solace_agent_mesh/common/agent_registry.py +122 -0
  342. solace_agent_mesh/common/common_llm.txt +230 -0
  343. solace_agent_mesh/common/common_llm_detail.txt +2562 -0
  344. solace_agent_mesh/common/constants.py +6 -0
  345. solace_agent_mesh/common/data_parts.py +150 -0
  346. solace_agent_mesh/common/exceptions.py +49 -0
  347. solace_agent_mesh/common/middleware/__init__.py +12 -0
  348. solace_agent_mesh/common/middleware/config_resolver.py +132 -0
  349. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  350. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
  351. solace_agent_mesh/common/middleware/registry.py +127 -0
  352. solace_agent_mesh/common/oauth/__init__.py +17 -0
  353. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  354. solace_agent_mesh/common/oauth/utils.py +50 -0
  355. solace_agent_mesh/common/sac/__init__.py +0 -0
  356. solace_agent_mesh/common/sac/sac_llm.txt +71 -0
  357. solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
  358. solace_agent_mesh/common/sac/sam_component_base.py +730 -0
  359. solace_agent_mesh/common/sam_events/__init__.py +9 -0
  360. solace_agent_mesh/common/sam_events/event_service.py +208 -0
  361. solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
  362. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
  363. solace_agent_mesh/common/services/__init__.py +4 -0
  364. solace_agent_mesh/common/services/employee_service.py +164 -0
  365. solace_agent_mesh/common/services/identity_service.py +134 -0
  366. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  367. solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
  368. solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
  369. solace_agent_mesh/common/services/services_llm.txt +368 -0
  370. solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
  371. solace_agent_mesh/common/utils/__init__.py +7 -0
  372. solace_agent_mesh/common/utils/artifact_utils.py +31 -0
  373. solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
  374. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  375. solace_agent_mesh/common/utils/embeds/constants.py +56 -0
  376. solace_agent_mesh/common/utils/embeds/converter.py +447 -0
  377. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
  378. solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
  379. solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
  380. solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
  381. solace_agent_mesh/common/utils/embeds/types.py +23 -0
  382. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  383. solace_agent_mesh/common/utils/initializer.py +52 -0
  384. solace_agent_mesh/common/utils/log_formatters.py +64 -0
  385. solace_agent_mesh/common/utils/message_utils.py +80 -0
  386. solace_agent_mesh/common/utils/mime_helpers.py +172 -0
  387. solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
  388. solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
  389. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  390. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  391. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  392. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  393. solace_agent_mesh/common/utils/type_utils.py +28 -0
  394. solace_agent_mesh/common/utils/utils_llm.txt +335 -0
  395. solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
  396. solace_agent_mesh/config_portal/__init__.py +0 -0
  397. solace_agent_mesh/config_portal/backend/__init__.py +0 -0
  398. solace_agent_mesh/config_portal/backend/common.py +77 -0
  399. solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
  400. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  401. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  402. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
  403. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  404. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  405. solace_agent_mesh/config_portal/backend/server.py +644 -0
  406. solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
  407. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
  408. solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
  414. solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
  415. solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
  416. solace_agent_mesh/core_a2a/__init__.py +1 -0
  417. solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
  418. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
  419. solace_agent_mesh/core_a2a/service.py +307 -0
  420. solace_agent_mesh/evaluation/__init__.py +0 -0
  421. solace_agent_mesh/evaluation/evaluator.py +691 -0
  422. solace_agent_mesh/evaluation/message_organizer.py +553 -0
  423. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  424. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  425. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  426. solace_agent_mesh/evaluation/report/modal.html +59 -0
  427. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  428. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  429. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  430. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  431. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  432. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  433. solace_agent_mesh/evaluation/report_data_processor.py +970 -0
  434. solace_agent_mesh/evaluation/report_generator.py +607 -0
  435. solace_agent_mesh/evaluation/run.py +954 -0
  436. solace_agent_mesh/evaluation/shared/__init__.py +92 -0
  437. solace_agent_mesh/evaluation/shared/constants.py +47 -0
  438. solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
  439. solace_agent_mesh/evaluation/shared/helpers.py +35 -0
  440. solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
  441. solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
  442. solace_agent_mesh/evaluation/subscriber.py +776 -0
  443. solace_agent_mesh/evaluation/summary_builder.py +880 -0
  444. solace_agent_mesh/gateway/__init__.py +0 -0
  445. solace_agent_mesh/gateway/adapter/__init__.py +1 -0
  446. solace_agent_mesh/gateway/adapter/base.py +143 -0
  447. solace_agent_mesh/gateway/adapter/types.py +221 -0
  448. solace_agent_mesh/gateway/base/__init__.py +1 -0
  449. solace_agent_mesh/gateway/base/app.py +345 -0
  450. solace_agent_mesh/gateway/base/base_llm.txt +226 -0
  451. solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
  452. solace_agent_mesh/gateway/base/component.py +2030 -0
  453. solace_agent_mesh/gateway/base/task_context.py +75 -0
  454. solace_agent_mesh/gateway/gateway_llm.txt +369 -0
  455. solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
  456. solace_agent_mesh/gateway/generic/__init__.py +1 -0
  457. solace_agent_mesh/gateway/generic/app.py +50 -0
  458. solace_agent_mesh/gateway/generic/component.py +727 -0
  459. solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
  460. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
  461. solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
  462. solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
  463. solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
  464. solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
  465. solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
  466. solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
  467. solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
  468. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
  469. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
  470. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
  471. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
  472. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  473. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  474. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  475. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  476. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
  477. solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
  478. solace_agent_mesh/gateway/http_sse/app.py +351 -0
  479. solace_agent_mesh/gateway/http_sse/component.py +2360 -0
  480. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  481. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
  482. solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
  483. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
  484. solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
  485. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
  486. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
  487. solace_agent_mesh/gateway/http_sse/main.py +789 -0
  488. solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
  489. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
  490. solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
  491. solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
  492. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
  493. solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
  494. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
  495. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
  496. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +66 -0
  497. solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
  498. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
  499. solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
  500. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
  501. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
  502. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
  503. solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
  504. solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
  505. solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
  506. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
  507. solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
  508. solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
  509. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  510. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
  511. solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
  512. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
  513. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
  514. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
  515. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +308 -0
  516. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
  517. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
  518. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  519. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
  520. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
  521. solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
  522. solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
  523. solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
  524. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
  525. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  526. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  527. solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +15 -0
  528. solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
  529. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +133 -0
  530. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
  531. solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
  532. solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
  533. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
  534. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
  535. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
  536. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
  537. solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
  538. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  539. solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
  540. solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
  541. solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
  542. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
  543. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
  544. solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
  545. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  546. solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
  547. solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
  548. solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
  549. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  550. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
  551. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  552. solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
  553. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  554. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  555. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
  556. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
  557. solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
  558. solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
  559. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  560. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
  561. solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
  562. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
  563. solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
  564. solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
  565. solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
  566. solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
  567. solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
  568. solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
  569. solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
  570. solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
  571. solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
  572. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
  573. solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
  574. solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
  575. solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
  576. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
  577. solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
  578. solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
  579. solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
  580. solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
  581. solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
  582. solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
  583. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  584. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
  585. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
  586. solace_agent_mesh/llm.txt +228 -0
  587. solace_agent_mesh/llm_detail.txt +2835 -0
  588. solace_agent_mesh/services/__init__.py +0 -0
  589. solace_agent_mesh/services/platform/__init__.py +18 -0
  590. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  591. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  592. solace_agent_mesh/services/platform/alembic.ini +109 -0
  593. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  594. solace_agent_mesh/services/platform/api/dependencies.py +147 -0
  595. solace_agent_mesh/services/platform/api/main.py +280 -0
  596. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  597. solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
  598. solace_agent_mesh/services/platform/app.py +114 -0
  599. solace_agent_mesh/services/platform/component.py +235 -0
  600. solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
  601. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
  602. solace_agent_mesh/templates/agent_template.yaml +53 -0
  603. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  604. solace_agent_mesh/templates/gateway_app_template.py +75 -0
  605. solace_agent_mesh/templates/gateway_component_template.py +484 -0
  606. solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
  607. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  608. solace_agent_mesh/templates/main_orchestrator.yaml +66 -0
  609. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  610. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  611. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  612. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +60 -0
  613. solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
  614. solace_agent_mesh/templates/plugin_readme_template.md +12 -0
  615. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  616. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  617. solace_agent_mesh/templates/shared_config.yaml +112 -0
  618. solace_agent_mesh/templates/templates_llm.txt +147 -0
  619. solace_agent_mesh/templates/webui.yaml +177 -0
  620. solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
  621. solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
  622. solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
  623. solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
  624. solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,655 @@
1
+ """
2
+ Helpers for translating between A2A protocol objects and other domains,
3
+ such as the Google ADK.
4
+ """
5
+
6
+ import logging
7
+ from typing import Any, Dict, List, Optional, Tuple, Union, TYPE_CHECKING
8
+ import json
9
+ import base64
10
+ import uuid
11
+ from datetime import datetime, timezone
12
+ from urllib.parse import urlparse, parse_qs
13
+ from google.genai import types as adk_types
14
+ from google.adk.events import Event as ADKEvent
15
+
16
+ from a2a.types import (
17
+ Message as A2AMessage,
18
+ TextPart,
19
+ FilePart,
20
+ FileWithBytes,
21
+ FileWithUri,
22
+ DataPart,
23
+ JSONRPCResponse,
24
+ InternalError,
25
+ )
26
+
27
+ from .. import a2a
28
+ from ...agent.utils.context_helpers import get_original_session_id
29
+
30
+ log = logging.getLogger(__name__)
31
+
32
+ if TYPE_CHECKING:
33
+ from google.adk.artifacts import BaseArtifactService
34
+ from ...agent.sac.component import SamAgentComponent
35
+
36
+
37
+ A2A_LLM_STREAM_CHUNKS_PROCESSED_KEY = "temp:llm_stream_chunks_processed"
38
+ A2A_STATUS_SIGNAL_STORAGE_KEY = "temp:a2a_status_signals_collected"
39
+
40
+
41
+ async def _prepare_a2a_filepart_for_adk(
42
+ part: FilePart,
43
+ component: "SamAgentComponent",
44
+ user_id: str,
45
+ session_id: str,
46
+ ) -> Optional[adk_types.Part]:
47
+ """
48
+ Prepares an incoming A2A FilePart for the ADK by converting it into a
49
+ textual summary of its metadata.
50
+
51
+ - If the part has bytes, it saves it to the artifact store first.
52
+ - If the part has a URI, it loads metadata from the store.
53
+ - It then formats this information into a text string for the LLM.
54
+ """
55
+ from ...agent.utils.artifact_helpers import (
56
+ save_artifact_with_metadata,
57
+ load_artifact_content_or_metadata,
58
+ format_metadata_for_llm,
59
+ )
60
+
61
+ log_id = f"{component.log_identifier}[PrepareFilePartForADK]"
62
+ app_name = component.get_config("agent_name")
63
+ artifact_service = component.artifact_service
64
+
65
+ if not artifact_service:
66
+ log.error(
67
+ "%s Artifact service is not configured. Cannot process FilePart.", log_id
68
+ )
69
+ return adk_types.Part(
70
+ text="[System Note: File part ignored due to missing artifact service.]"
71
+ )
72
+
73
+ filename = None
74
+ version = None
75
+ mime_type = None
76
+
77
+ try:
78
+ if isinstance(part.file, FileWithBytes):
79
+ log.debug("%s FilePart contains bytes. Saving to artifact store.", log_id)
80
+ filename = part.file.name or f"upload-{uuid.uuid4().hex}"
81
+ mime_type = part.file.mime_type or "application/octet-stream"
82
+ content_bytes = base64.b64decode(part.file.bytes)
83
+
84
+ save_result = await save_artifact_with_metadata(
85
+ artifact_service=artifact_service,
86
+ app_name=app_name,
87
+ user_id=user_id,
88
+ session_id=session_id,
89
+ filename=filename,
90
+ content_bytes=content_bytes,
91
+ mime_type=mime_type,
92
+ metadata_dict={"source": "a2a_filepart_upload"},
93
+ timestamp=datetime.now(timezone.utc),
94
+ )
95
+ if save_result["status"] == "success":
96
+ version = save_result["data_version"]
97
+ log.info(
98
+ "%s Saved incoming file '%s' as version %d.",
99
+ log_id,
100
+ filename,
101
+ version,
102
+ )
103
+ else:
104
+ raise IOError(
105
+ f"Failed to save artifact and its metadata: {save_result['message']}"
106
+ )
107
+
108
+ elif isinstance(part.file, FileWithUri):
109
+ log.debug("%s FilePart contains URI. Loading metadata.", log_id)
110
+ uri = part.file.uri
111
+ parsed_uri = urlparse(uri)
112
+ path_parts = parsed_uri.path.strip("/").split("/")
113
+ if len(path_parts) < 3:
114
+ raise ValueError(f"Invalid artifact URI format: {uri}")
115
+ filename = path_parts[-1]
116
+ version_str = parse_qs(parsed_uri.query).get("version", [None])[0]
117
+ version = int(version_str) if version_str else None
118
+ mime_type = part.file.mime_type
119
+
120
+ else:
121
+ raise TypeError("FilePart contains neither bytes nor a valid URI.")
122
+
123
+ # At this point, we must have filename and version to proceed
124
+ if filename is None or version is None:
125
+ raise ValueError("Could not determine filename and version for artifact.")
126
+
127
+ # Fetch metadata only.
128
+ load_result = await load_artifact_content_or_metadata(
129
+ artifact_service=artifact_service,
130
+ app_name=app_name,
131
+ user_id=user_id,
132
+ session_id=get_original_session_id(session_id),
133
+ filename=filename,
134
+ version=version,
135
+ load_metadata_only=True,
136
+ )
137
+
138
+ if load_result["status"] != "success":
139
+ raise RuntimeError(f"Failed to load metadata: {load_result['message']}")
140
+
141
+ metadata_dict = load_result.get("metadata", {})
142
+ metadata_dict["filename"] = filename
143
+ metadata_dict["version"] = version
144
+
145
+ # Format the final text for the LLM
146
+ formatted_summary = format_metadata_for_llm(metadata_dict)
147
+ final_text = (
148
+ "The user has provided the following file as context for your task. "
149
+ "Use the information contained within its metadata to complete your objective. "
150
+ "You can access the full content using your tools if necessary.\n\n"
151
+ f"{formatted_summary}"
152
+ )
153
+ return adk_types.Part(text=final_text)
154
+
155
+ except Exception as e:
156
+ log.exception("%s Error processing FilePart for ADK: %s", log_id, e)
157
+ failed_filename = filename or (part.file.name if part.file else "unknown file")
158
+ return adk_types.Part(
159
+ text=f"[System Note: The file '{failed_filename}' could not be processed. Error: {e}]"
160
+ )
161
+
162
+
163
+ async def translate_a2a_to_adk_content(
164
+ a2a_message: A2AMessage,
165
+ component: "SamAgentComponent",
166
+ user_id: str,
167
+ session_id: str,
168
+ ) -> adk_types.Content:
169
+ """
170
+ Translates an A2A Message object to ADK Content.
171
+ FileParts are converted to textual metadata summaries.
172
+ """
173
+ adk_parts: List[adk_types.Part] = []
174
+ unwrapped_parts = a2a.get_parts_from_message(a2a_message)
175
+ log_identifier = component.log_identifier
176
+
177
+ for part in unwrapped_parts:
178
+ try:
179
+ if isinstance(part, TextPart):
180
+ adk_parts.append(adk_types.Part(text=a2a.get_text_from_text_part(part)))
181
+ elif isinstance(part, FilePart):
182
+ adk_part = await _prepare_a2a_filepart_for_adk(
183
+ part, component, user_id, session_id
184
+ )
185
+ if adk_part:
186
+ adk_parts.append(adk_part)
187
+ elif isinstance(part, DataPart):
188
+ try:
189
+ data_str = json.dumps(a2a.get_data_from_data_part(part), indent=2)
190
+ adk_parts.append(
191
+ adk_types.Part(text=f"Received data:\n```json\n{data_str}\n```")
192
+ )
193
+ except Exception as e:
194
+ log.warning(
195
+ "%s Could not serialize DataPart for ADK: %s",
196
+ log_identifier,
197
+ e,
198
+ )
199
+ adk_parts.append(
200
+ adk_types.Part(text="Received unserializable structured data.")
201
+ )
202
+ else:
203
+ log.warning(
204
+ "%s Unsupported A2A part type: %s", log_identifier, type(part)
205
+ )
206
+ except Exception as e:
207
+ log.exception("%s Error translating A2A part: %s", log_identifier, e)
208
+ adk_parts.append(adk_types.Part(text="[Error processing received part]"))
209
+
210
+ adk_role = "user" if a2a_message.role == "user" else "model"
211
+ return adk_types.Content(role=adk_role, parts=adk_parts)
212
+
213
+
214
+ def translate_adk_function_response_to_a2a_parts(
215
+ adk_part: adk_types.Part,
216
+ ) -> List[a2a.ContentPart]:
217
+ """
218
+ Translates an ADK Part containing a function_response into a list of A2A Parts.
219
+ - If the response is a dict, it becomes a DataPart.
220
+ - Otherwise, it becomes a TextPart.
221
+ """
222
+ if not adk_part.function_response:
223
+ return []
224
+
225
+ a2a_parts: List[a2a.ContentPart] = []
226
+ try:
227
+ response_data = adk_part.function_response.response
228
+ tool_name = adk_part.function_response.name
229
+ if isinstance(response_data, dict):
230
+ a2a_parts.append(
231
+ a2a.create_data_part(
232
+ data=response_data,
233
+ metadata={"tool_name": tool_name},
234
+ )
235
+ )
236
+ else:
237
+ a2a_parts.append(
238
+ a2a.create_text_part(
239
+ text=f"Tool {tool_name} result: {str(response_data)}"
240
+ )
241
+ )
242
+ except Exception:
243
+ # Ensure tool_name is available even if accessing .response fails
244
+ tool_name = "unknown_tool"
245
+ if hasattr(adk_part.function_response, "name"):
246
+ tool_name = adk_part.function_response.name
247
+ a2a_parts.append(
248
+ a2a.create_text_part(text=f"[Tool {tool_name} result omitted]")
249
+ )
250
+ return a2a_parts
251
+
252
+
253
+ def _extract_text_from_parts(parts: List[a2a.ContentPart]) -> str:
254
+ """
255
+ Extracts and combines text/file info from a list of A2A parts
256
+ into a single string for display or logging.
257
+
258
+ Note: This function intentionally ignores DataPart types.
259
+ """
260
+ output_parts = []
261
+ for part in parts:
262
+ if isinstance(part, TextPart):
263
+ output_parts.append(a2a.get_text_from_text_part(part))
264
+ elif isinstance(part, DataPart):
265
+ log.debug("Skipping DataPart in _extract_text_from_parts")
266
+ continue
267
+ elif isinstance(part, FilePart):
268
+ file = a2a.get_file_from_file_part(part)
269
+ file_info = "File: '%s' (%s)" % (
270
+ a2a.get_filename_from_file_part(part) or "unknown",
271
+ a2a.get_mimetype_from_file_part(part) or "unknown",
272
+ )
273
+ if isinstance(file, FileWithUri) and a2a.get_uri_from_file_part(part):
274
+ file_info += " URI: %s" % a2a.get_uri_from_file_part(part)
275
+ elif isinstance(file, FileWithBytes) and a2a.get_bytes_from_file_part(part):
276
+ try:
277
+ size = len(base64.b64decode(a2a.get_bytes_from_file_part(part)))
278
+ file_info += " (Size: %d bytes)" % size
279
+ except Exception:
280
+ file_info += " (Encoded Bytes)"
281
+ output_parts.append(file_info)
282
+ else:
283
+ if isinstance(part, dict):
284
+ part_type = part.get("type")
285
+ if part_type == "text":
286
+ output_parts.append(part.get("text", "[Missing text content]"))
287
+ elif part_type == "data":
288
+ log.debug("Skipping DataPart (dict) in _extract_text_from_parts")
289
+ continue
290
+ elif part_type == "file":
291
+ file_content = part.get("file", {})
292
+ file_info = "File: '%s' (%s)" % (
293
+ file_content.get("name", "unknown"),
294
+ file_content.get("mime_type", "unknown"),
295
+ )
296
+ if file_content.get("uri"):
297
+ file_info += " URI: %s" % file_content["uri"]
298
+ elif file_content.get("bytes"):
299
+ try:
300
+ size = len(base64.b64decode(file_content["bytes"]))
301
+ file_info += " (Size: %d bytes)" % size
302
+ except Exception:
303
+ file_info += " (Encoded Bytes)"
304
+ output_parts.append(file_info)
305
+ else:
306
+ output_parts.append(
307
+ "[Unsupported part type in dict: %s]" % part_type
308
+ )
309
+ else:
310
+ output_parts.append("[Unsupported part type: %s]" % type(part))
311
+
312
+ return "\n".join(output_parts)
313
+
314
+
315
+ def format_adk_event_as_a2a(
316
+ adk_event: ADKEvent,
317
+ a2a_context: Dict,
318
+ log_identifier: str,
319
+ ) -> Tuple[Optional[JSONRPCResponse], List[Tuple[int, Any]]]:
320
+ """
321
+ Translates an intermediate ADK Event (containing content or errors during the run)
322
+ into an A2A JSON-RPC message payload (TaskStatusUpdateEvent or InternalError).
323
+ Also extracts any "a2a_status_signals_collected" from the event's state_delta.
324
+ Returns None if the event should not result in an intermediate A2A message (e.g., empty, non-streaming final).
325
+ Artifact updates are handled separately by the calling component.
326
+
327
+ Note: This function preserves DataPart from function responses.
328
+ """
329
+ jsonrpc_request_id = a2a_context.get("jsonrpc_request_id")
330
+ logical_task_id = a2a_context.get("logical_task_id")
331
+ is_streaming = a2a_context.get("is_streaming", False)
332
+
333
+ if adk_event.error_code or adk_event.error_message:
334
+ error_msg = f"Agent error during execution: {adk_event.error_message or adk_event.error_code}"
335
+ log.error("%s ADK Event contains error: %s", log_identifier, error_msg)
336
+ a2a_error = InternalError(
337
+ message=error_msg,
338
+ data={
339
+ "adk_error_code": adk_event.error_code,
340
+ "taskId": logical_task_id,
341
+ },
342
+ )
343
+ return JSONRPCResponse(id=jsonrpc_request_id, error=a2a_error), []
344
+
345
+ signals_to_forward: List[Tuple[int, Any]] = []
346
+ is_final_adk_event = (
347
+ # We have a different definition of final for ADK events:
348
+ # For now, the only long running tool IDs are peer agent tasks, which we
349
+ # need to wait for before considering the event final.
350
+ adk_event.is_final_response()
351
+ and (
352
+ not hasattr(adk_event, "long_running_tool_ids")
353
+ or not adk_event.long_running_tool_ids
354
+ )
355
+ )
356
+
357
+ unwrapped_a2a_parts: List[a2a.ContentPart] = []
358
+ if adk_event.content and adk_event.content.parts:
359
+ for part in adk_event.content.parts:
360
+ try:
361
+ if part.text:
362
+ unwrapped_a2a_parts.append(a2a.create_text_part(text=part.text))
363
+ elif part.inline_data:
364
+ log.debug(
365
+ "%s Skipping ADK inline_data part in status update translation.",
366
+ log_identifier,
367
+ )
368
+ elif part.function_call or part.function_response:
369
+ log.debug(
370
+ "%s Skipping ADK function call part in A2A translation.",
371
+ log_identifier,
372
+ )
373
+ else:
374
+ log.warning(
375
+ "%s Skipping unknown ADK part type during A2A translation: %s",
376
+ log_identifier,
377
+ part,
378
+ )
379
+ except Exception as e:
380
+ log.exception("%s Error translating ADK part: %s", log_identifier, e)
381
+ unwrapped_a2a_parts.append(
382
+ a2a.create_text_part(text="[Error processing agent output part]")
383
+ )
384
+
385
+ if is_final_adk_event and not is_streaming:
386
+ if not unwrapped_a2a_parts:
387
+ log.debug(
388
+ "%s Skipping non-streaming final ADK event %s with no content in format_adk_event_as_a2a.",
389
+ log_identifier,
390
+ adk_event.id,
391
+ )
392
+ return None, signals_to_forward
393
+ else:
394
+ log.debug(
395
+ "%s Processing non-streaming final ADK event %s with content in format_adk_event_as_a2a.",
396
+ log_identifier,
397
+ adk_event.id,
398
+ )
399
+
400
+ should_send_status = (is_streaming and bool(unwrapped_a2a_parts)) or (
401
+ is_final_adk_event and bool(unwrapped_a2a_parts)
402
+ )
403
+
404
+ if not should_send_status:
405
+ log.debug(
406
+ "%s ADK event %s resulted in no intermediate A2A status update to send. Skipping.",
407
+ log_identifier,
408
+ adk_event.id,
409
+ )
410
+ return None, signals_to_forward
411
+
412
+ a2a_message = a2a.create_agent_parts_message(
413
+ parts=unwrapped_a2a_parts,
414
+ message_id=uuid.uuid4().hex,
415
+ )
416
+ is_final_update_for_this_event = is_final_adk_event
417
+
418
+ host_agent_name = a2a_context.get("host_agent_name", "unknown_agent")
419
+ event_metadata = {"agent_name": host_agent_name}
420
+
421
+ intermediate_result_obj = a2a.create_status_update(
422
+ task_id=logical_task_id,
423
+ context_id=a2a_context.get("contextId"),
424
+ message=a2a_message,
425
+ is_final=is_final_update_for_this_event,
426
+ metadata=event_metadata,
427
+ )
428
+ log.debug(
429
+ "%s Formatting intermediate A2A response (TaskStatusUpdateEvent, final=%s) for Task ID %s",
430
+ log_identifier,
431
+ is_final_update_for_this_event,
432
+ logical_task_id,
433
+ )
434
+ json_rpc_response_obj = JSONRPCResponse(
435
+ id=jsonrpc_request_id, result=intermediate_result_obj
436
+ )
437
+ return json_rpc_response_obj, signals_to_forward
438
+
439
+
440
+ async def format_and_route_adk_event(
441
+ adk_event: ADKEvent,
442
+ a2a_context: Dict,
443
+ component,
444
+ ) -> Tuple[Optional[Dict], Optional[str], Optional[Dict], List[Tuple[int, Any]]]:
445
+ """
446
+ Formats an intermediate ADK event (content or error) to an A2A payload dict,
447
+ and determines the target status topic.
448
+ Returns (None, None, []) if no intermediate message should be sent.
449
+ Signal extraction from state_delta is REMOVED as it's handled upstream by SamAgentComponent.
450
+ Final responses and artifact updates are handled elsewhere.
451
+ """
452
+ signals_found: List[Tuple[int, Any]] = []
453
+ try:
454
+ a2a_response_obj, _ = format_adk_event_as_a2a(
455
+ adk_event, a2a_context, component.log_identifier
456
+ )
457
+
458
+ if not a2a_response_obj:
459
+ return None, None, None, []
460
+
461
+ a2a_payload = a2a_response_obj.model_dump(exclude_none=True)
462
+ target_topic = None
463
+ logical_task_id = a2a_context.get("logical_task_id")
464
+ peer_status_topic = a2a_context.get("statusTopic")
465
+ namespace = component.get_config("namespace")
466
+
467
+ if peer_status_topic:
468
+ target_topic = peer_status_topic
469
+ log.debug(
470
+ "%s Determined status update topic (to peer delegator): %s",
471
+ component.log_identifier,
472
+ target_topic,
473
+ )
474
+ else:
475
+ gateway_id = component.get_gateway_id()
476
+ target_topic = a2a.get_gateway_status_topic(
477
+ namespace, gateway_id, logical_task_id
478
+ )
479
+ log.debug(
480
+ "%s Determined status update topic (to gateway): %s",
481
+ component.log_identifier,
482
+ target_topic,
483
+ )
484
+
485
+ user_properties = {}
486
+ if a2a_context.get("a2a_user_config"):
487
+ user_properties["a2aUserConfig"] = a2a_context["a2a_user_config"]
488
+
489
+ return a2a_payload, target_topic, user_properties, signals_found
490
+
491
+ except Exception as e:
492
+ log.exception(
493
+ "%s Error formatting or routing intermediate ADK event %s: %s",
494
+ component.log_identifier,
495
+ adk_event.id,
496
+ e,
497
+ )
498
+ try:
499
+ jsonrpc_request_id = a2a_context.get("jsonrpc_request_id")
500
+ logical_task_id = a2a_context.get("logical_task_id")
501
+ namespace = component.get_config("namespace")
502
+ gateway_id = component.get_gateway_id()
503
+ peer_reply_topic = a2a_context.get("replyToTopic")
504
+
505
+ error_response = JSONRPCResponse(
506
+ id=jsonrpc_request_id,
507
+ error=InternalError(
508
+ message=f"Error processing agent event: {e}",
509
+ data={"taskId": logical_task_id},
510
+ ),
511
+ )
512
+ if peer_reply_topic:
513
+ target_topic = peer_reply_topic
514
+ else:
515
+ target_topic = a2a.get_gateway_response_topic(
516
+ namespace, gateway_id, logical_task_id
517
+ )
518
+ user_properties = {}
519
+ if a2a_context.get("a2a_user_config"):
520
+ user_properties["a2aUserConfig"] = a2a_context["a2a_user_config"]
521
+
522
+ return (
523
+ error_response.model_dump(exclude_none=True),
524
+ target_topic,
525
+ user_properties,
526
+ [],
527
+ )
528
+ except Exception as inner_e:
529
+ log.error(
530
+ "%s Failed to generate error response after formatting error: %s",
531
+ component.log_identifier,
532
+ inner_e,
533
+ )
534
+ return None, None, None, []
535
+
536
+
537
+ async def translate_adk_part_to_a2a_filepart(
538
+ adk_part: adk_types.Part,
539
+ filename: str,
540
+ a2a_context: Dict,
541
+ artifact_service: "BaseArtifactService",
542
+ artifact_handling_mode: str,
543
+ adk_app_name: str,
544
+ log_identifier: str,
545
+ version: Optional[int] = None,
546
+ ) -> Optional[FilePart]:
547
+ """
548
+ Translates a loaded ADK Part (with inline_data) to an A2A FilePart
549
+ based on the configured artifact_handling_mode.
550
+ If version is not provided, it will be resolved to the latest.
551
+ """
552
+ from ...common.utils.artifact_utils import get_latest_artifact_version
553
+ from a2a.types import FilePart, FileWithBytes, FileWithUri
554
+
555
+ if artifact_handling_mode == "ignore":
556
+ log.debug(
557
+ "%s Artifact handling mode is 'ignore'. Skipping translation for '%s'.",
558
+ log_identifier,
559
+ filename,
560
+ )
561
+ return None
562
+
563
+ if not adk_part or not adk_part.inline_data:
564
+ log.warning(
565
+ "%s Cannot translate artifact '%s': ADK Part is missing or has no inline_data.",
566
+ log_identifier,
567
+ filename,
568
+ )
569
+ return None
570
+
571
+ resolved_version = version
572
+ if resolved_version is None:
573
+ try:
574
+ resolved_version = await get_latest_artifact_version(
575
+ artifact_service=artifact_service,
576
+ app_name=adk_app_name,
577
+ user_id=a2a_context.get("user_id"),
578
+ session_id=a2a_context.get("session_id"),
579
+ filename=filename,
580
+ )
581
+ if resolved_version is None:
582
+ log.error(
583
+ "%s Could not resolve latest version for artifact '%s'.",
584
+ log_identifier,
585
+ filename,
586
+ )
587
+ return None
588
+ except Exception as e:
589
+ log.exception(
590
+ "%s Failed to resolve latest version for artifact '%s': %s",
591
+ log_identifier,
592
+ filename,
593
+ e,
594
+ )
595
+ return None
596
+
597
+ mime_type = adk_part.inline_data.mime_type
598
+ data_bytes = adk_part.inline_data.data
599
+ file_content: Optional[Union[FileWithBytes, FileWithUri]] = None
600
+
601
+ try:
602
+ if artifact_handling_mode == "embed":
603
+ encoded_bytes = base64.b64encode(data_bytes).decode("utf-8")
604
+ file_content = FileWithBytes(
605
+ name=filename, mime_type=mime_type, bytes=encoded_bytes
606
+ )
607
+ log.debug(
608
+ "%s Embedding artifact '%s' (size: %d bytes) for A2A message.",
609
+ log_identifier,
610
+ filename,
611
+ len(data_bytes),
612
+ )
613
+
614
+ elif artifact_handling_mode == "reference":
615
+ user_id = a2a_context.get("user_id")
616
+ original_session_id = a2a_context.get("session_id")
617
+
618
+ if not all([adk_app_name, user_id, original_session_id]):
619
+ log.error(
620
+ "%s Cannot create artifact reference URI: missing context (app_name, user_id, or session_id).",
621
+ log_identifier,
622
+ )
623
+ return None
624
+
625
+ artifact_uri = f"artifact://{adk_app_name}/{user_id}/{original_session_id}/{filename}?version={resolved_version}"
626
+
627
+ log.info(
628
+ "%s Creating reference URI for artifact: %s",
629
+ log_identifier,
630
+ artifact_uri,
631
+ )
632
+ file_content = FileWithUri(
633
+ name=filename, mime_type=mime_type, uri=artifact_uri
634
+ )
635
+
636
+ if file_content:
637
+ return FilePart(file=file_content)
638
+ else:
639
+ log.warning(
640
+ "%s No FileContent created for artifact '%s' despite mode '%s'.",
641
+ log_identifier,
642
+ filename,
643
+ artifact_handling_mode,
644
+ )
645
+ return None
646
+
647
+ except Exception as e:
648
+ log.exception(
649
+ "%s Error translating artifact '%s' to A2A FilePart (mode: %s): %s",
650
+ log_identifier,
651
+ filename,
652
+ artifact_handling_mode,
653
+ e,
654
+ )
655
+ return None