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,967 @@
1
+ """
2
+ Contains the main embed resolution functions, including the chain executor.
3
+ """
4
+
5
+ import logging
6
+ import asyncio
7
+ import json
8
+ import uuid
9
+ from typing import Any, Callable, Dict, Optional, Set, Tuple, List, Union
10
+ from .constants import (
11
+ EMBED_REGEX,
12
+ EMBED_DELIMITER_OPEN,
13
+ EMBED_DELIMITER_CLOSE,
14
+ EARLY_EMBED_TYPES,
15
+ LATE_EMBED_TYPES,
16
+ )
17
+ from .evaluators import EMBED_EVALUATORS, _evaluate_artifact_content_embed
18
+ from .modifiers import MODIFIER_DEFINITIONS, _parse_modifier_chain
19
+ from .converter import (
20
+ convert_data,
21
+ serialize_data,
22
+ _parse_string_to_list_of_dicts,
23
+ )
24
+ from .types import DataFormat, ResolutionMode
25
+ from ..mime_helpers import is_text_based_mime_type
26
+
27
+ log = logging.getLogger(__name__)
28
+
29
+ import yaml
30
+
31
+
32
+ def _log_data_state(
33
+ log_id: str,
34
+ step: str,
35
+ data: Any,
36
+ data_format: Optional[DataFormat],
37
+ mime_type: Optional[str],
38
+ ):
39
+ """Logs the state of the data at a specific step."""
40
+ data_type = type(data).__name__
41
+ data_size = "N/A"
42
+ data_preview = "N/A"
43
+
44
+ if isinstance(data, (bytes, str, list)):
45
+ data_size = str(len(data))
46
+ elif isinstance(data, dict):
47
+ data_size = f"{len(data)} keys"
48
+
49
+ if isinstance(data, bytes):
50
+ try:
51
+ data_preview = data[:100].decode("utf-8", errors="replace") + (
52
+ "..." if len(data) > 100 else ""
53
+ )
54
+ except Exception:
55
+ data_preview = f"Bytes[{len(data)}]"
56
+ elif isinstance(data, str):
57
+ data_preview = data[:100] + ("..." if len(data) > 100 else "")
58
+ elif isinstance(data, list):
59
+ data_preview = f"List[{len(data)} items]"
60
+ if data and isinstance(data[0], dict):
61
+ data_preview += f" (First item keys: {list(data[0].keys())[:5]}{'...' if len(data[0].keys()) > 5 else ''})"
62
+ elif isinstance(data, dict):
63
+ data_preview = f"Dict[{len(data)} keys: {list(data.keys())[:5]}{'...' if len(data.keys()) > 5 else ''}]"
64
+ else:
65
+ data_preview = str(data)[:100] + ("..." if len(str(data)) > 100 else "")
66
+
67
+ log.info(
68
+ "%s [%s] Format: %s, MimeType: %s, Type: %s, Size: %s, Preview: '%s'",
69
+ log_id,
70
+ step,
71
+ data_format.name if data_format else "None",
72
+ mime_type,
73
+ data_type,
74
+ data_size,
75
+ data_preview,
76
+ )
77
+
78
+
79
+ async def _evaluate_artifact_content_embed_with_chain(
80
+ artifact_spec_from_directive: str,
81
+ modifiers_from_directive: List[Tuple[str, str]],
82
+ output_format_from_directive: Optional[str],
83
+ context: Any,
84
+ log_identifier: str,
85
+ resolution_mode: "ResolutionMode",
86
+ config: Optional[Dict] = None,
87
+ current_depth: int = 0,
88
+ visited_artifacts: Optional[Set[Tuple[str, int]]] = None,
89
+ ) -> Union[Tuple[str, Optional[str], int], Tuple[None, str, Any]]:
90
+ """
91
+ Loads artifact content, recursively resolves its internal embeds if text-based,
92
+ applies a chain of modifiers, and serializes the final result.
93
+ """
94
+ log.info(
95
+ "%s [Depth:%d] Starting chain execution for artifact directive: %s",
96
+ log_identifier,
97
+ current_depth,
98
+ artifact_spec_from_directive,
99
+ )
100
+ visited_artifacts = visited_artifacts or set()
101
+ parsed_artifact_spec = artifact_spec_from_directive
102
+
103
+ loaded_content_bytes, original_mime_type, load_error = (
104
+ await _evaluate_artifact_content_embed(
105
+ parsed_artifact_spec, context, log_identifier, config
106
+ )
107
+ )
108
+
109
+ if load_error:
110
+ log.warning(
111
+ "%s [Depth:%d] Error loading initial artifact '%s': %s",
112
+ log_identifier,
113
+ current_depth,
114
+ parsed_artifact_spec,
115
+ load_error,
116
+ )
117
+ err_str = f"[Error loading artifact '{parsed_artifact_spec}': {load_error}]"
118
+ return err_str, load_error, len(err_str.encode("utf-8"))
119
+
120
+ if loaded_content_bytes is None:
121
+ err_msg = f"Internal error - Artifact load for '{parsed_artifact_spec}' returned None content without error."
122
+ log.error("%s %s", log_identifier, err_msg)
123
+ return f"[Error: {err_msg}]", err_msg, 0
124
+
125
+ current_data: Any = loaded_content_bytes
126
+ current_format: DataFormat = DataFormat.BYTES
127
+ _log_data_state(
128
+ log_identifier,
129
+ f"[Depth:{current_depth}] Initial Load",
130
+ current_data,
131
+ current_format,
132
+ original_mime_type,
133
+ )
134
+ if is_text_based_mime_type(original_mime_type):
135
+ try:
136
+ decoded_content = loaded_content_bytes.decode("utf-8")
137
+ log.debug(
138
+ "%s [Depth:%d] Artifact '%s' is text-based (%s). Attempting recursive embed resolution.",
139
+ log_identifier,
140
+ current_depth,
141
+ parsed_artifact_spec,
142
+ original_mime_type,
143
+ )
144
+ spec_parts = parsed_artifact_spec.split(":", 1)
145
+ filename_for_key = spec_parts[0]
146
+ version_str_for_key = spec_parts[1] if len(spec_parts) > 1 else None
147
+ try:
148
+ version_for_key = (
149
+ int(version_str_for_key) if version_str_for_key else -1
150
+ )
151
+ except ValueError:
152
+ log.warning(
153
+ "%s Could not parse version from '%s' for visited_artifacts key. Loop detection might be affected.",
154
+ log_identifier,
155
+ parsed_artifact_spec,
156
+ )
157
+ version_for_key = -1
158
+
159
+ artifact_key = (filename_for_key, version_for_key)
160
+ new_visited_artifacts = visited_artifacts.copy()
161
+ new_visited_artifacts.add(artifact_key)
162
+
163
+ resolved_string_content = await resolve_embeds_recursively_in_string(
164
+ text=decoded_content,
165
+ context=context,
166
+ resolver_func=evaluate_embed,
167
+ types_to_resolve=EARLY_EMBED_TYPES.union(LATE_EMBED_TYPES),
168
+ resolution_mode=ResolutionMode.RECURSIVE_ARTIFACT_CONTENT,
169
+ log_identifier=log_identifier,
170
+ config=config,
171
+ max_depth=config.get("gateway_recursive_embed_depth", 12),
172
+ current_depth=current_depth + 1,
173
+ visited_artifacts=new_visited_artifacts,
174
+ accumulated_size=0,
175
+ max_total_size=config.get(
176
+ "gateway_max_artifact_resolve_size_bytes", -1
177
+ ),
178
+ )
179
+ current_data = resolved_string_content
180
+ current_format = DataFormat.STRING
181
+ _log_data_state(
182
+ log_identifier,
183
+ f"[Depth:{current_depth}] After Recursive Resolution (including templates)",
184
+ current_data,
185
+ current_format,
186
+ original_mime_type,
187
+ )
188
+
189
+ except UnicodeDecodeError as ude:
190
+ err_msg = f"Failed to decode text-based artifact '{parsed_artifact_spec}' for recursion: {ude}"
191
+ log.warning("%s %s", log_identifier, err_msg)
192
+ return f"[Error: {err_msg}]", err_msg, 0
193
+ except Exception as recurse_err:
194
+ err_msg = f"Error during recursive resolution of '{parsed_artifact_spec}': {recurse_err}"
195
+ log.exception("%s %s", log_identifier, err_msg)
196
+ return f"[Error: {err_msg}]", err_msg, 0
197
+ else:
198
+ log.debug(
199
+ "%s [Depth:%d] Artifact '%s' is not text-based (%s). Passing raw bytes to modifier chain.",
200
+ log_identifier,
201
+ current_depth,
202
+ parsed_artifact_spec,
203
+ original_mime_type,
204
+ )
205
+
206
+ if current_format == DataFormat.STRING and original_mime_type:
207
+ normalized_mime_type = original_mime_type.lower()
208
+ log.debug(
209
+ "%s [Depth:%d] Pre-parsing string content with MIME type: %s",
210
+ log_identifier,
211
+ current_depth,
212
+ normalized_mime_type,
213
+ )
214
+ if "json" in normalized_mime_type:
215
+ try:
216
+ current_data = json.loads(current_data)
217
+ current_format = DataFormat.JSON_OBJECT
218
+ log.info(
219
+ "%s [Depth:%d] Pre-parsed string as JSON_OBJECT.",
220
+ log_identifier,
221
+ current_depth,
222
+ )
223
+ except json.JSONDecodeError:
224
+ log.warning(
225
+ "%s [Depth:%d] Failed to pre-parse as JSON despite MIME type '%s'. Content will be treated as STRING.",
226
+ log_identifier,
227
+ current_depth,
228
+ original_mime_type,
229
+ )
230
+ elif "yaml" in normalized_mime_type or "yml" in normalized_mime_type:
231
+ try:
232
+ current_data = yaml.safe_load(current_data)
233
+ current_format = DataFormat.JSON_OBJECT
234
+ log.info(
235
+ "%s [Depth:%d] Pre-parsed string as YAML (now JSON_OBJECT).",
236
+ log_identifier,
237
+ current_depth,
238
+ )
239
+ except yaml.YAMLError:
240
+ log.warning(
241
+ "%s [Depth:%d] Failed to pre-parse as YAML despite MIME type '%s'. Content will be treated as STRING.",
242
+ log_identifier,
243
+ current_depth,
244
+ original_mime_type,
245
+ )
246
+ elif "csv" in normalized_mime_type:
247
+ parsed_data, error_msg = _parse_string_to_list_of_dicts(
248
+ current_data, original_mime_type, log_identifier
249
+ )
250
+ if error_msg is None and parsed_data is not None:
251
+ current_data = parsed_data
252
+ current_format = DataFormat.LIST_OF_DICTS
253
+ log.info(
254
+ "%s [Depth:%d] Pre-parsed string as LIST_OF_DICTS from CSV.",
255
+ log_identifier,
256
+ current_depth,
257
+ )
258
+ else:
259
+ log.warning(
260
+ "%s [Depth:%d] Failed to pre-parse as CSV despite MIME type '%s': %s. Content will be treated as STRING.",
261
+ log_identifier,
262
+ current_depth,
263
+ original_mime_type,
264
+ error_msg,
265
+ )
266
+
267
+ _log_data_state(
268
+ log_identifier,
269
+ f"[Depth:{current_depth}] After Pre-parsing",
270
+ current_data,
271
+ current_format,
272
+ original_mime_type,
273
+ )
274
+
275
+ modifier_index = 0
276
+ for prefix, value in modifiers_from_directive:
277
+ modifier_index += 1
278
+ modifier_step_id = f"Modifier {modifier_index} ({prefix})"
279
+
280
+ modifier_def = MODIFIER_DEFINITIONS.get(prefix)
281
+ if not modifier_def:
282
+ err_msg = f"Unknown modifier prefix: '{prefix}'"
283
+ log.warning("%s %s", log_identifier, err_msg)
284
+ return f"[Error: {err_msg}]", err_msg, 0
285
+
286
+ modifier_func = modifier_def["function"]
287
+ accepts_formats: List[DataFormat] = modifier_def["accepts"]
288
+ produces_format: DataFormat = modifier_def["produces"]
289
+
290
+ log.info(
291
+ "%s [Depth:%d][%s] Applying modifier: %s:%s (Accepts: %s, Produces: %s)",
292
+ log_identifier,
293
+ current_depth,
294
+ modifier_step_id,
295
+ prefix,
296
+ value[:50] + "...",
297
+ [f.name for f in accepts_formats],
298
+ produces_format.name,
299
+ )
300
+
301
+ if current_format not in accepts_formats:
302
+ target_format_for_modifier = accepts_formats[0]
303
+ log.info(
304
+ "%s [Depth:%d][%s] Current format %s not accepted by %s. Converting to %s...",
305
+ log_identifier,
306
+ current_depth,
307
+ modifier_step_id,
308
+ current_format.name,
309
+ prefix,
310
+ target_format_for_modifier.name,
311
+ )
312
+ _log_data_state(
313
+ log_identifier,
314
+ f"[Depth:{current_depth}] {modifier_step_id} - Before Conversion",
315
+ current_data,
316
+ current_format,
317
+ original_mime_type,
318
+ )
319
+ converted_data, new_format, convert_error = convert_data(
320
+ current_data,
321
+ current_format,
322
+ target_format_for_modifier,
323
+ log_identifier,
324
+ original_mime_type,
325
+ )
326
+ if convert_error:
327
+ err_msg = (
328
+ f"Failed to convert data for modifier '{prefix}': {convert_error}"
329
+ )
330
+ log.warning("%s %s", log_identifier, err_msg)
331
+ return f"[Error: {err_msg}]", err_msg, 0
332
+ current_data = converted_data
333
+ current_format = new_format
334
+ log.info(
335
+ "%s [Depth:%d][%s] Conversion successful. New format: %s",
336
+ log_identifier,
337
+ current_depth,
338
+ modifier_step_id,
339
+ current_format.name,
340
+ )
341
+ _log_data_state(
342
+ log_identifier,
343
+ f"[Depth:{current_depth}] {modifier_step_id} - After Conversion",
344
+ current_data,
345
+ current_format,
346
+ original_mime_type,
347
+ )
348
+
349
+ try:
350
+ _log_data_state(
351
+ log_identifier,
352
+ f"[Depth:{current_depth}] {modifier_step_id} - Before Execution",
353
+ current_data,
354
+ current_format,
355
+ original_mime_type,
356
+ )
357
+ if prefix == "apply_to_template":
358
+ result_data, _, exec_error = await modifier_func(
359
+ current_data, value, original_mime_type, log_identifier, context
360
+ )
361
+ else:
362
+ if asyncio.iscoroutinefunction(modifier_func):
363
+ result_data, _, exec_error = await modifier_func(
364
+ current_data, value, original_mime_type, log_identifier
365
+ )
366
+ else:
367
+ result_data, _, exec_error = modifier_func(
368
+ current_data, value, original_mime_type, log_identifier
369
+ )
370
+
371
+ if exec_error:
372
+ err_msg = f"Error applying modifier '{prefix}': {exec_error}"
373
+ log.warning("%s %s", log_identifier, err_msg)
374
+ return f"[Error: {err_msg}]", err_msg, 0
375
+
376
+ current_data = result_data
377
+ current_format = produces_format
378
+ log.info(
379
+ "%s [Depth:%d][%s] Modifier '%s' executed. Result format: %s",
380
+ log_identifier,
381
+ current_depth,
382
+ modifier_step_id,
383
+ prefix,
384
+ current_format.name,
385
+ )
386
+ _log_data_state(
387
+ log_identifier,
388
+ f"[Depth:{current_depth}] {modifier_step_id} - After Execution",
389
+ current_data,
390
+ current_format,
391
+ original_mime_type,
392
+ )
393
+ if current_data is None or (
394
+ isinstance(current_data, (list, str, bytes)) and not current_data
395
+ ):
396
+ log.info(
397
+ "%s [Depth:%d][%s] Modifier '%s' resulted in empty data.",
398
+ log_identifier,
399
+ current_depth,
400
+ modifier_step_id,
401
+ prefix,
402
+ )
403
+
404
+ except Exception as mod_err:
405
+ log.exception(
406
+ "%s [Depth:%d][%s] Unexpected error executing modifier '%s': %s",
407
+ log_identifier,
408
+ current_depth,
409
+ modifier_step_id,
410
+ prefix,
411
+ mod_err,
412
+ )
413
+ err_msg = f"Unexpected error in modifier '{prefix}': {mod_err}"
414
+ return f"[Error: {err_msg}]", err_msg, 0
415
+
416
+ if (
417
+ current_format == DataFormat.BYTES
418
+ and resolution_mode == ResolutionMode.A2A_MESSAGE_TO_USER
419
+ ):
420
+ log.info(
421
+ "%s [Depth:%d] Result is binary data in A2A_MESSAGE_TO_USER mode. Signaling for inline binary content.",
422
+ log_identifier,
423
+ current_depth,
424
+ )
425
+ filename_for_signal = artifact_spec_from_directive.split(":", 1)[0]
426
+ return (
427
+ None,
428
+ "SIGNAL_INLINE_BINARY_CONTENT",
429
+ {
430
+ "bytes": current_data,
431
+ "mime_type": original_mime_type,
432
+ "name": filename_for_signal,
433
+ },
434
+ )
435
+
436
+ target_string_format = output_format_from_directive
437
+ if target_string_format is None:
438
+ log.warning(
439
+ "%s [Depth:%d] Missing final 'format:' step in chain. Defaulting to 'text'.",
440
+ log_identifier,
441
+ current_depth,
442
+ )
443
+ target_string_format = "text"
444
+
445
+ log.info(
446
+ "%s [Depth:%d] [Final Serialization] Serializing final data (Format: %s) to target string format '%s'",
447
+ log_identifier,
448
+ current_depth,
449
+ current_format.name,
450
+ target_string_format,
451
+ )
452
+ _log_data_state(
453
+ log_identifier,
454
+ f"[Depth:{current_depth}] Before Serialization",
455
+ current_data,
456
+ current_format,
457
+ original_mime_type,
458
+ )
459
+
460
+ final_serialized_string, serialize_error = serialize_data(
461
+ data=current_data,
462
+ data_format=current_format,
463
+ target_string_format=target_string_format,
464
+ original_mime_type=original_mime_type,
465
+ log_id=log_identifier,
466
+ )
467
+
468
+ if serialize_error:
469
+ log.warning("%s [Depth:%d] %s", log_identifier, current_depth, serialize_error)
470
+ return (
471
+ final_serialized_string,
472
+ serialize_error,
473
+ len(final_serialized_string.encode("utf-8")),
474
+ )
475
+
476
+ final_size = len(final_serialized_string.encode("utf-8"))
477
+ log.info(
478
+ "%s [Depth:%d] Chain execution completed successfully. Final size: %d bytes.",
479
+ log_identifier,
480
+ current_depth,
481
+ final_size,
482
+ )
483
+ log.info(
484
+ "%s [Depth:%d] [Final Serialization] Result: '%s...'",
485
+ log_identifier,
486
+ current_depth,
487
+ final_serialized_string[:100]
488
+ + ("..." if len(final_serialized_string) > 100 else ""),
489
+ )
490
+ return final_serialized_string, None, final_size
491
+
492
+
493
+ async def resolve_embeds_in_string(
494
+ text: str,
495
+ context: Any,
496
+ resolver_func: Callable[
497
+ ..., Union[Tuple[str, Optional[str], int], Tuple[None, str, Any]]
498
+ ],
499
+ types_to_resolve: Set[str],
500
+ resolution_mode: "ResolutionMode",
501
+ log_identifier: str = "[EmbedUtil]",
502
+ config: Optional[Dict[str, Any]] = None,
503
+ ) -> Tuple[str, int, List[Tuple[int, Any, str]]]:
504
+ """
505
+ Resolves specified embed types within a string using a provided resolver function.
506
+ This is the TOP-LEVEL resolver called by gateways. It handles signals and buffering.
507
+ It does NOT perform recursion itself but calls `evaluate_embed` which might trigger recursion.
508
+
509
+ Processes the string iteratively, resolving one embed at a time.
510
+ Includes buffering logic: stops processing if a partial embed delimiter is found
511
+ at the end, returning the processed part and the index where processing stopped.
512
+ Can now return special signals from the resolver function.
513
+
514
+ Args:
515
+ text: The input string potentially containing embeds.
516
+ context: The context object passed to the resolver function (now a Dict).
517
+ resolver_func: The function to call for evaluating each embed.
518
+ Signature: (type, expression, format, context, log_id, config, ...) -> Any
519
+ Can return a string for replacement, or a tuple like (None, "SIGNAL_TYPE", data)
520
+ to indicate a signal instead of text replacement.
521
+ types_to_resolve: A set of embed types (strings) to resolve in this pass.
522
+ log_identifier: Identifier for logging.
523
+ config: Optional configuration dictionary passed to the resolver.
524
+
525
+ Returns:
526
+ A tuple containing:
527
+ - The string with specified embeds resolved (or removed if signaled).
528
+ - The index in the *original* string representing the end of the
529
+ successfully processed portion (useful for buffering). This will be
530
+ len(text) if the whole string was processed.
531
+ - A list of signals encountered during resolution, as tuples (index, signal_data).
532
+ The index corresponds to the start index of the embed directive in the original string.
533
+ """
534
+ resolved_parts = []
535
+ signals_found: List[Tuple[int, Any, str]] = []
536
+ last_end = 0
537
+ original_length = len(text)
538
+
539
+ log.debug(
540
+ "%s Checking for embeds in text: '%s'", log_identifier, text[:200] + "..."
541
+ )
542
+
543
+ for match in EMBED_REGEX.finditer(text):
544
+ start, end = match.span()
545
+ embed_type = match.group(1)
546
+ expression = match.group(2)
547
+ format_spec = match.group(3)
548
+
549
+ resolved_parts.append(text[last_end:start])
550
+
551
+ if embed_type in types_to_resolve:
552
+ log.info(
553
+ "%s Found embed type '%s' to resolve: expr='%s', fmt='%s'",
554
+ log_identifier,
555
+ embed_type,
556
+ expression,
557
+ format_spec,
558
+ )
559
+ resolved_value = await resolver_func(
560
+ embed_type,
561
+ expression,
562
+ format_spec,
563
+ context,
564
+ log_identifier,
565
+ resolution_mode,
566
+ config,
567
+ )
568
+
569
+ if (
570
+ isinstance(resolved_value, tuple)
571
+ and len(resolved_value) == 3
572
+ and resolved_value[0] is None
573
+ and isinstance(resolved_value[1], str)
574
+ ):
575
+ signal_type = resolved_value[1]
576
+ log.info(
577
+ "%s Received signal '%s' from resolver for embed at index %d.",
578
+ log_identifier,
579
+ signal_type,
580
+ start,
581
+ )
582
+ placeholder = f"__EMBED_SIGNAL_{uuid.uuid4().hex}__"
583
+ resolved_parts.append(placeholder)
584
+ signals_found.append(
585
+ (
586
+ start,
587
+ resolved_value,
588
+ placeholder,
589
+ )
590
+ )
591
+ elif (
592
+ isinstance(resolved_value, tuple)
593
+ and len(resolved_value) == 3
594
+ and isinstance(resolved_value[0], str)
595
+ and isinstance(resolved_value[2], int)
596
+ ):
597
+ text_content, error_message, _ = resolved_value
598
+ if error_message:
599
+ log.warning(
600
+ "%s Embed resolution for '%s:%s' resulted in error: %s. Using error string as content.",
601
+ log_identifier,
602
+ embed_type,
603
+ expression,
604
+ error_message,
605
+ )
606
+ resolved_parts.append(text_content)
607
+ else:
608
+ log.warning(
609
+ "%s Resolver for type '%s' returned unexpected structure %s. Treating as error string.",
610
+ log_identifier,
611
+ embed_type,
612
+ type(resolved_value),
613
+ )
614
+
615
+ else:
616
+ log.debug(
617
+ "%s Skipping embed type '%s' (not in types_to_resolve)",
618
+ log_identifier,
619
+ embed_type,
620
+ )
621
+ resolved_parts.append(match.group(0))
622
+
623
+ last_end = end
624
+
625
+ remaining_text = text[last_end:]
626
+ resolved_parts.append(remaining_text)
627
+
628
+ potential_partial_embed = False
629
+ partial_embed_start_index = -1
630
+
631
+ last_open_delimiter_index = remaining_text.rfind(EMBED_DELIMITER_OPEN)
632
+
633
+ if last_open_delimiter_index != -1:
634
+ closing_delimiter_index = remaining_text.find(
635
+ EMBED_DELIMITER_CLOSE, last_open_delimiter_index
636
+ )
637
+ if closing_delimiter_index == -1:
638
+ potential_partial_embed = True
639
+ partial_embed_start_index = last_open_delimiter_index
640
+ log.debug(
641
+ "%s Potential unclosed embed detected starting at index %d within remaining text: '%s...'",
642
+ log_identifier,
643
+ partial_embed_start_index,
644
+ remaining_text[
645
+ partial_embed_start_index : partial_embed_start_index + 10
646
+ ],
647
+ )
648
+
649
+ if potential_partial_embed:
650
+ processed_until_index = last_end + partial_embed_start_index
651
+ final_text = (
652
+ "".join(resolved_parts[:-1]) + remaining_text[:partial_embed_start_index]
653
+ )
654
+ log.debug(
655
+ "%s Returning processed text up to index %d due to potential partial embed.",
656
+ log_identifier,
657
+ processed_until_index,
658
+ )
659
+ else:
660
+ final_text = "".join(resolved_parts)
661
+ processed_until_index = original_length
662
+ log.debug(
663
+ "%s Returning fully processed text (length %d).",
664
+ log_identifier,
665
+ len(final_text),
666
+ )
667
+
668
+ # If resolving late embeds, also resolve template blocks
669
+ # Templates are considered late embeds since they need artifact service access
670
+ if LATE_EMBED_TYPES.intersection(types_to_resolve):
671
+ try:
672
+ from ..templates import resolve_template_blocks_in_string
673
+
674
+ artifact_service = context.get("artifact_service")
675
+ session_context = context.get("session_context")
676
+
677
+ if artifact_service and session_context:
678
+ log.debug(
679
+ "%s Resolving template blocks after late embed resolution.",
680
+ log_identifier,
681
+ )
682
+ final_text = await resolve_template_blocks_in_string(
683
+ text=final_text,
684
+ artifact_service=artifact_service,
685
+ session_context=session_context,
686
+ log_identifier=f"{log_identifier}[TemplateResolve]",
687
+ )
688
+ except Exception as template_err:
689
+ log.warning(
690
+ "%s Failed to resolve template blocks: %s",
691
+ log_identifier,
692
+ template_err,
693
+ )
694
+ # Continue with final_text as-is
695
+
696
+ return final_text, processed_until_index, signals_found
697
+
698
+
699
+ async def resolve_embeds_recursively_in_string(
700
+ text: str,
701
+ context: Any,
702
+ resolver_func: Callable[..., Tuple[str, Optional[str], int]],
703
+ types_to_resolve: Set[str],
704
+ resolution_mode: "ResolutionMode",
705
+ log_identifier: str,
706
+ config: Optional[Dict],
707
+ max_depth: int,
708
+ current_depth: int = 0,
709
+ visited_artifacts: Optional[Set[Tuple[str, int]]] = None,
710
+ accumulated_size: int = 0,
711
+ max_total_size: int = -1,
712
+ ) -> str:
713
+ """
714
+ Recursively resolves specified embed types within a string, respecting depth,
715
+ loop detection (via visited_artifacts passed down), and accumulated size limits.
716
+ """
717
+ if current_depth >= max_depth:
718
+ log.warning(
719
+ "%s Max embed recursion depth (%d) reached for current processing string.",
720
+ log_identifier,
721
+ max_depth,
722
+ )
723
+ return "[Error: Max embed depth exceeded]"
724
+
725
+ visited_artifacts = visited_artifacts or set()
726
+ resolved_parts = []
727
+ last_end = 0
728
+
729
+ for match in EMBED_REGEX.finditer(text):
730
+ start, end = match.span()
731
+ embed_type = match.group(1)
732
+ expression = match.group(2)
733
+ format_spec = match.group(3)
734
+
735
+ resolved_parts.append(text[last_end:start])
736
+
737
+ if embed_type not in types_to_resolve:
738
+ resolved_parts.append(match.group(0))
739
+ last_end = end
740
+ continue
741
+
742
+ log.debug(
743
+ "%s [Depth:%d] Found embed '%s' to resolve: expr='%s', fmt='%s'",
744
+ log_identifier,
745
+ current_depth,
746
+ embed_type,
747
+ expression,
748
+ format_spec,
749
+ )
750
+
751
+ resolved_value = await resolver_func(
752
+ embed_type,
753
+ expression,
754
+ format_spec,
755
+ context,
756
+ log_identifier,
757
+ resolution_mode,
758
+ config,
759
+ current_depth,
760
+ visited_artifacts,
761
+ )
762
+
763
+ if (
764
+ isinstance(resolved_value, tuple)
765
+ and len(resolved_value) == 3
766
+ and isinstance(resolved_value[0], str)
767
+ and isinstance(resolved_value[2], int)
768
+ ):
769
+ resolved_string_for_embed, error_msg_from_chain, size_of_this_embed = (
770
+ resolved_value
771
+ )
772
+ else:
773
+ log.error(
774
+ "%s [Depth:%d] Recursive call to resolver for '%s:%s' returned unexpected signal or format. Treating as error.",
775
+ log_identifier,
776
+ current_depth,
777
+ embed_type,
778
+ expression,
779
+ )
780
+ error_msg_from_chain = "Recursive resolution returned unexpected signal."
781
+ resolved_string_for_embed = f"[Error: {error_msg_from_chain}]"
782
+ size_of_this_embed = len(resolved_string_for_embed.encode("utf-8"))
783
+
784
+ if error_msg_from_chain:
785
+ log.warning(
786
+ "%s [Depth:%d] Embed '%s:%s' resulted in error from chain: %s",
787
+ log_identifier,
788
+ current_depth,
789
+ embed_type,
790
+ expression,
791
+ error_msg_from_chain,
792
+ )
793
+ resolved_parts.append(resolved_string_for_embed)
794
+ else:
795
+ if (
796
+ max_total_size >= 0
797
+ and accumulated_size + size_of_this_embed > max_total_size
798
+ ):
799
+ error_str = f"[Error: Embedding '{expression}' exceeds total size limit for parent content ({accumulated_size + size_of_this_embed} > {max_total_size})]"
800
+ log.warning("%s %s", log_identifier, error_str)
801
+ resolved_parts.append(error_str)
802
+ else:
803
+ resolved_parts.append(resolved_string_for_embed)
804
+ accumulated_size += size_of_this_embed
805
+ log.debug(
806
+ "%s [Depth:%d] Appended resolved embed (size: %d). Current accumulated_size: %d",
807
+ log_identifier,
808
+ current_depth,
809
+ size_of_this_embed,
810
+ accumulated_size,
811
+ )
812
+
813
+ last_end = end
814
+
815
+ resolved_parts.append(text[last_end:])
816
+ result_text = "".join(resolved_parts)
817
+
818
+ # If resolving late embeds, also resolve template blocks
819
+ # Templates are considered late embeds since they need artifact service access
820
+ if LATE_EMBED_TYPES.intersection(types_to_resolve):
821
+ try:
822
+ from ..templates import resolve_template_blocks_in_string
823
+
824
+ artifact_service = context.get("artifact_service")
825
+ session_context = context.get("session_context")
826
+
827
+ if artifact_service and session_context:
828
+ log.debug(
829
+ "%s [Depth:%d] Resolving template blocks after late embed resolution.",
830
+ log_identifier,
831
+ current_depth,
832
+ )
833
+ result_text = await resolve_template_blocks_in_string(
834
+ text=result_text,
835
+ artifact_service=artifact_service,
836
+ session_context=session_context,
837
+ log_identifier=f"{log_identifier}[TemplateResolve]",
838
+ )
839
+ except Exception as template_err:
840
+ log.warning(
841
+ "%s [Depth:%d] Failed to resolve template blocks: %s",
842
+ log_identifier,
843
+ current_depth,
844
+ template_err,
845
+ )
846
+ # Continue with result_text as-is
847
+
848
+ return result_text
849
+
850
+
851
+ async def evaluate_embed(
852
+ embed_type: str,
853
+ expression: str,
854
+ format_spec: Optional[str],
855
+ context: Dict[str, Any],
856
+ log_identifier: str,
857
+ resolution_mode: "ResolutionMode",
858
+ config: Optional[Dict] = None,
859
+ current_depth: int = 0,
860
+ visited_artifacts: Optional[Set[Tuple[str, int]]] = None,
861
+ ) -> Union[Tuple[str, Optional[str], int], Tuple[None, str, Any]]:
862
+ """
863
+ Evaluates a single embed directive.
864
+ For 'artifact_content', it handles the modifier chain and potential internal recursion.
865
+ For other types, it evaluates directly and returns a 3-tuple (text, error, size).
866
+ For 'status_update', it returns a signal tuple (None, "SIGNAL_STATUS_UPDATE", data).
867
+
868
+ Args:
869
+ embed_type: The type of the embed.
870
+ expression: The expression part of the embed.
871
+ format_spec: The optional format specifier.
872
+ context: The dictionary-based context (containing artifact_service, session_context, config).
873
+ log_identifier: Identifier for logging.
874
+ config: Optional configuration dictionary (now part of context or passed if needed by evaluators).
875
+ current_depth: Current recursion depth (for artifact_content).
876
+ visited_artifacts: Set of visited artifacts (for artifact_content).
877
+
878
+ Returns:
879
+ A 3-tuple (text_content, error_message, size) or a signal tuple (None, signal_type, data).
880
+ """
881
+ log.debug(
882
+ "%s Evaluating embed: type='%s', expr='%s', fmt='%s'",
883
+ log_identifier,
884
+ embed_type,
885
+ expression[:50] + "...",
886
+ format_spec,
887
+ )
888
+
889
+ if embed_type == "status_update":
890
+ status_text = expression.strip()
891
+ log.info("%s Detected 'status_update' embed. Signaling.", log_identifier)
892
+ return (None, "SIGNAL_STATUS_UPDATE", status_text)
893
+
894
+ elif embed_type == "artifact_return":
895
+ if resolution_mode == ResolutionMode.A2A_MESSAGE_TO_USER:
896
+ parts = expression.strip().split(":", 1)
897
+ filename = parts[0]
898
+ version = parts[1] if len(parts) > 1 else "latest"
899
+ log.info("%s Detected 'artifact_return' embed. Signaling.", log_identifier)
900
+ return (
901
+ None,
902
+ "SIGNAL_ARTIFACT_RETURN",
903
+ {"filename": filename, "version": version},
904
+ )
905
+ else:
906
+ log.warning(
907
+ "%s Ignoring 'artifact_return' embed in unsupported context: %s",
908
+ log_identifier,
909
+ resolution_mode.name,
910
+ )
911
+ original_embed_text = f"«{embed_type}:{expression}»"
912
+ return original_embed_text, None, len(original_embed_text.encode("utf-8"))
913
+
914
+ elif embed_type == "artifact_content":
915
+ artifact_spec, modifiers, output_format = _parse_modifier_chain(expression)
916
+ if output_format is None and format_spec is not None:
917
+ log.warning(
918
+ "%s Using format specifier '| %s' for artifact_content as chain format step was missing.",
919
+ log_identifier,
920
+ format_spec,
921
+ )
922
+ output_format = format_spec
923
+
924
+ result = await _evaluate_artifact_content_embed_with_chain(
925
+ artifact_spec_from_directive=artifact_spec,
926
+ modifiers_from_directive=modifiers,
927
+ output_format_from_directive=output_format,
928
+ context=context,
929
+ log_identifier=log_identifier,
930
+ resolution_mode=resolution_mode,
931
+ config=config,
932
+ current_depth=current_depth,
933
+ visited_artifacts=visited_artifacts or set(),
934
+ )
935
+ return result
936
+
937
+ else:
938
+ evaluator = EMBED_EVALUATORS.get(embed_type)
939
+ if not evaluator:
940
+ err_msg = f"Unknown embed type: '{embed_type}'"
941
+ log.warning("%s %s", log_identifier, err_msg)
942
+ err_str = f"[Error: {err_msg}]"
943
+ return err_str, err_msg, len(err_str.encode("utf-8"))
944
+
945
+ try:
946
+ if asyncio.iscoroutinefunction(evaluator):
947
+ str_value, eval_error, size = await evaluator(
948
+ expression, context, log_identifier, format_spec
949
+ )
950
+ else:
951
+ str_value, eval_error, size = evaluator(
952
+ expression, context, log_identifier, format_spec
953
+ )
954
+
955
+ return str_value, eval_error, size
956
+
957
+ except Exception as e:
958
+ log.exception(
959
+ "%s Unexpected error evaluating %s embed '%s': %s",
960
+ log_identifier,
961
+ embed_type,
962
+ expression,
963
+ e,
964
+ )
965
+ err_msg = f"Unexpected evaluation error: {e}"
966
+ err_str = f"[Error: {err_msg}]"
967
+ return err_str, err_msg, len(err_str.encode("utf-8"))