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,793 @@
1
+ """
2
+ Defines modifier implementation functions and their contracts.
3
+ """
4
+
5
+ import logging
6
+ import re
7
+ from typing import Any, Callable, Dict, Optional, Tuple, List
8
+
9
+ from .constants import EARLY_EMBED_TYPES, LATE_EMBED_TYPES
10
+
11
+ log = logging.getLogger(__name__)
12
+
13
+ from jsonpath_ng.ext import parse as jsonpath_parse
14
+ import pystache
15
+
16
+ from google.adk.artifacts import BaseArtifactService
17
+
18
+ from .types import DataFormat, ResolutionMode
19
+
20
+
21
+ def _apply_jsonpath(
22
+ current_data: Any, expression: str, mime_type: Optional[str], log_id: str
23
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
24
+ """
25
+ Applies a JSONPath expression to parsed JSON data.
26
+
27
+ Args:
28
+ current_data: The input data (expected to be dict or list).
29
+ expression: The JSONPath expression string.
30
+ mime_type: The original mime type (passed through).
31
+ log_id: Identifier for logging.
32
+
33
+ Returns:
34
+ Tuple: (result_data, original_mime_type, error_string)
35
+ result_data is typically a list of matched values.
36
+ """
37
+ if not isinstance(current_data, (dict, list)):
38
+ return (
39
+ current_data,
40
+ mime_type,
41
+ f"Input data for 'jsonpath' must be a JSON object or list, got {type(current_data).__name__}.",
42
+ )
43
+
44
+ try:
45
+ jsonpath_expr = jsonpath_parse(expression)
46
+ matches = [match.value for match in jsonpath_expr.find(current_data)]
47
+ return matches, mime_type, None
48
+ except Exception as e:
49
+ return (
50
+ current_data,
51
+ mime_type,
52
+ f"Error applying JSONPath expression '{expression}': {e}",
53
+ )
54
+
55
+
56
+ def _apply_select_cols(
57
+ current_data: List[Dict], cols_str: str, mime_type: Optional[str], log_id: str
58
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
59
+ """
60
+ Selects specific columns from data represented as a list of dictionaries.
61
+
62
+ Args:
63
+ current_data: The input data (expected List[Dict]).
64
+ cols_str: Comma-separated string of column names to keep.
65
+ mime_type: The original mime type (passed through).
66
+ log_id: Identifier for logging.
67
+
68
+ Returns:
69
+ Tuple: (result_data, original_mime_type, error_string)
70
+ result_data is List[Dict] containing only selected columns.
71
+ """
72
+ if not isinstance(current_data, list) or (
73
+ current_data and not isinstance(current_data[0], dict)
74
+ ):
75
+ return (
76
+ current_data,
77
+ mime_type,
78
+ f"Input data for 'select_cols' must be a list of dictionaries, got {type(current_data).__name__}.",
79
+ )
80
+
81
+ if not current_data:
82
+ return [], mime_type, None
83
+
84
+ try:
85
+ header = list(current_data[0].keys())
86
+ target_cols = [col.strip() for col in cols_str.split(",")]
87
+ output_list = []
88
+
89
+ for target_col in target_cols:
90
+ if target_col not in header:
91
+ return (
92
+ current_data,
93
+ mime_type,
94
+ f"Column '{target_col}' not found in data keys: {header}",
95
+ )
96
+
97
+ for row_dict in current_data:
98
+ new_row = {col: row_dict.get(col) for col in target_cols}
99
+ output_list.append(new_row)
100
+
101
+ return output_list, mime_type, None
102
+
103
+ except Exception as e:
104
+ return current_data, mime_type, f"Error selecting columns '{cols_str}': {e}"
105
+
106
+
107
+ def _apply_filter_rows_eq(
108
+ current_data: List[Dict], filter_spec: str, mime_type: Optional[str], log_id: str
109
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
110
+ """
111
+ Filters a list of dictionaries based on a column's value equality.
112
+
113
+ Args:
114
+ current_data: The input data (expected List[Dict]).
115
+ filter_spec: String in the format 'column_name:value'.
116
+ mime_type: The original mime type (passed through).
117
+ log_id: Identifier for logging.
118
+
119
+ Returns:
120
+ Tuple: (result_data, original_mime_type, error_string)
121
+ result_data is List[Dict] containing only filtered rows.
122
+ """
123
+ if not isinstance(current_data, list) or (
124
+ current_data and not isinstance(current_data[0], dict)
125
+ ):
126
+ return (
127
+ current_data,
128
+ mime_type,
129
+ f"Input data for 'filter_rows_eq' must be a list of dictionaries, got {type(current_data).__name__}.",
130
+ )
131
+
132
+ if not current_data:
133
+ return [], mime_type, None
134
+
135
+ try:
136
+ parts = filter_spec.split(":", 1)
137
+ if len(parts) != 2:
138
+ return (
139
+ current_data,
140
+ mime_type,
141
+ f"Invalid filter format '{filter_spec}'. Expected 'column_name:value'.",
142
+ )
143
+ col_name, filter_value = parts[0].strip(), parts[1].strip()
144
+
145
+ header = list(current_data[0].keys())
146
+ if col_name not in header:
147
+ return (
148
+ current_data,
149
+ mime_type,
150
+ f"Filter column '{col_name}' not found in data keys: {header}",
151
+ )
152
+
153
+ output_list = [
154
+ row for row in current_data if str(row.get(col_name)) == filter_value
155
+ ]
156
+
157
+ return output_list, mime_type, None
158
+
159
+ except Exception as e:
160
+ return current_data, mime_type, f"Error filtering rows by '{filter_spec}': {e}"
161
+
162
+
163
+ def _apply_slice_rows(
164
+ current_data: List[Dict], slice_spec: str, mime_type: Optional[str], log_id: str
165
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
166
+ """
167
+ Selects a slice of rows from a list of dictionaries.
168
+
169
+ Args:
170
+ current_data: The input data (expected List[Dict]).
171
+ slice_spec: String in Python slice format 'start:end'.
172
+ mime_type: The original mime type (passed through).
173
+ log_id: Identifier for logging.
174
+
175
+ Returns:
176
+ Tuple: (result_data, original_mime_type, error_string)
177
+ result_data is List[Dict] containing the sliced rows.
178
+ """
179
+ if not isinstance(current_data, list):
180
+ return (
181
+ current_data,
182
+ mime_type,
183
+ f"Input data for 'slice_rows' must be a list, got {type(current_data).__name__}.",
184
+ )
185
+
186
+ try:
187
+ start_str, end_str = None, None
188
+ if ":" in slice_spec:
189
+ parts = slice_spec.split(":", 1)
190
+ start_str, end_str = parts[0].strip(), parts[1].strip()
191
+ else:
192
+ return (
193
+ current_data,
194
+ mime_type,
195
+ f"Invalid slice format '{slice_spec}'. Expected 'start:end'.",
196
+ )
197
+
198
+ start = int(start_str) if start_str else 0
199
+ end = int(end_str) if end_str else None
200
+
201
+ sliced_data = current_data[start:end]
202
+
203
+ return sliced_data, mime_type, None
204
+
205
+ except (ValueError, TypeError) as e:
206
+ return current_data, mime_type, f"Invalid slice indices in '{slice_spec}': {e}"
207
+ except Exception as e:
208
+ return current_data, mime_type, f"Error slicing rows '{slice_spec}': {e}"
209
+
210
+
211
+ def _apply_slice_lines(
212
+ current_data: str, slice_spec: str, mime_type: Optional[str], log_id: str
213
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
214
+ """
215
+ Selects a slice of lines from text data.
216
+
217
+ Args:
218
+ current_data: The input data (expected str).
219
+ slice_spec: String in Python slice format 'start:end'.
220
+ mime_type: The original mime type (passed through).
221
+ log_id: Identifier for logging.
222
+
223
+ Returns:
224
+ Tuple: (result_data, original_mime_type, error_string)
225
+ result_data is str containing the sliced lines.
226
+ """
227
+ if not isinstance(current_data, str):
228
+ return (
229
+ current_data,
230
+ mime_type,
231
+ f"Input data for 'slice_lines' must be a string, got {type(current_data).__name__}.",
232
+ )
233
+
234
+ try:
235
+ start_str, end_str = None, None
236
+ if ":" in slice_spec:
237
+ parts = slice_spec.split(":", 1)
238
+ start_str, end_str = parts[0].strip(), parts[1].strip()
239
+ else:
240
+ return (
241
+ current_data,
242
+ mime_type,
243
+ f"Invalid slice format '{slice_spec}'. Expected 'start:end'.",
244
+ )
245
+
246
+ start = int(start_str) if start_str else 0
247
+ end = int(end_str) if end_str else None
248
+
249
+ lines = current_data.splitlines(keepends=True)
250
+ sliced_lines = lines[start:end]
251
+
252
+ return "".join(sliced_lines), mime_type, None
253
+
254
+ except (ValueError, TypeError) as e:
255
+ return current_data, mime_type, f"Invalid slice indices in '{slice_spec}': {e}"
256
+ except Exception as e:
257
+ return current_data, mime_type, f"Error slicing text lines '{slice_spec}': {e}"
258
+
259
+
260
+ def _apply_grep(
261
+ current_data: str, pattern: str, mime_type: Optional[str], log_id: str
262
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
263
+ """
264
+ Filters lines matching a regex pattern from text data.
265
+
266
+ Args:
267
+ current_data: The input data (expected str).
268
+ pattern: The regex pattern string.
269
+ mime_type: The original mime type (passed through).
270
+ log_id: Identifier for logging.
271
+
272
+ Returns:
273
+ Tuple: (result_data, original_mime_type, error_string)
274
+ result_data is str containing only matching lines.
275
+ """
276
+ if not isinstance(current_data, str):
277
+ return (
278
+ current_data,
279
+ mime_type,
280
+ f"Input data for 'grep' must be a string, got {type(current_data).__name__}.",
281
+ )
282
+
283
+ try:
284
+ regex = re.compile(pattern)
285
+ lines = current_data.splitlines(keepends=True)
286
+ filtered_lines = [line for line in lines if regex.search(line)]
287
+ return "".join(filtered_lines), mime_type, None
288
+ except re.error as e:
289
+ return current_data, mime_type, f"Invalid regex pattern '{pattern}': {e}"
290
+ except Exception as e:
291
+ return current_data, mime_type, f"Error applying grep pattern '{pattern}': {e}"
292
+
293
+
294
+ def _apply_head(
295
+ current_data: str, n_str: str, mime_type: Optional[str], log_id: str
296
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
297
+ """
298
+ Returns the first N lines of text data.
299
+
300
+ Args:
301
+ current_data: The input data (expected str).
302
+ n_str: String representing the number of lines (N).
303
+ mime_type: The original mime type (passed through).
304
+ log_id: Identifier for logging.
305
+
306
+ Returns:
307
+ Tuple: (result_data, original_mime_type, error_string)
308
+ result_data is str containing the first N lines.
309
+ """
310
+ if not isinstance(current_data, str):
311
+ return (
312
+ current_data,
313
+ mime_type,
314
+ f"Input data for 'head' must be a string, got {type(current_data).__name__}.",
315
+ )
316
+
317
+ try:
318
+ n = int(n_str.strip())
319
+ if n < 0:
320
+ return current_data, mime_type, "Head count N cannot be negative."
321
+
322
+ lines = current_data.splitlines(keepends=True)
323
+ head_lines = lines[:n]
324
+ return "".join(head_lines), mime_type, None
325
+ except (ValueError, TypeError) as e:
326
+ return current_data, mime_type, f"Invalid head count N '{n_str}': {e}"
327
+ except Exception as e:
328
+ return current_data, mime_type, f"Error applying head '{n_str}': {e}"
329
+
330
+
331
+ def _apply_tail(
332
+ current_data: str, n_str: str, mime_type: Optional[str], log_id: str
333
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
334
+ """
335
+ Returns the last N lines of text data.
336
+
337
+ Args:
338
+ current_data: The input data (expected str).
339
+ n_str: String representing the number of lines (N).
340
+ mime_type: The original mime type (passed through).
341
+ log_id: Identifier for logging.
342
+
343
+ Returns:
344
+ Tuple: (result_data, original_mime_type, error_string)
345
+ result_data is str containing the last N lines.
346
+ """
347
+ if not isinstance(current_data, str):
348
+ return (
349
+ current_data,
350
+ mime_type,
351
+ f"Input data for 'tail' must be a string, got {type(current_data).__name__}.",
352
+ )
353
+
354
+ try:
355
+ n = int(n_str.strip())
356
+ if n < 0:
357
+ return current_data, mime_type, "Tail count N cannot be negative."
358
+ if n == 0:
359
+ return "", mime_type, None
360
+
361
+ lines = current_data.splitlines(keepends=True)
362
+ tail_lines = lines[-n:]
363
+ return "".join(tail_lines), mime_type, None
364
+ except (ValueError, TypeError) as e:
365
+ return current_data, mime_type, f"Invalid tail count N '{n_str}': {e}"
366
+ except Exception as e:
367
+ return current_data, mime_type, f"Error applying tail '{n_str}': {e}"
368
+
369
+
370
+ def _apply_select_fields(
371
+ current_data: List[Dict], fields_str: str, mime_type: Optional[str], log_id: str
372
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
373
+ """
374
+ Selects specific fields from a list of dictionaries.
375
+
376
+ Args:
377
+ current_data: The input data (expected List[Dict]).
378
+ fields_str: Comma-separated string of field names to keep.
379
+ mime_type: The original mime type (passed through).
380
+ log_id: Identifier for logging.
381
+
382
+ Returns:
383
+ Tuple: (result_data, original_mime_type, error_string)
384
+ result_data is List[Dict] containing only selected fields.
385
+ """
386
+ if not isinstance(current_data, list) or (
387
+ current_data and not isinstance(current_data[0], dict)
388
+ ):
389
+ return (
390
+ current_data,
391
+ mime_type,
392
+ f"Input data for 'select_fields' must be a list of dictionaries, got {type(current_data).__name__}.",
393
+ )
394
+
395
+ target_fields = [field.strip() for field in fields_str.split(",")]
396
+ if not target_fields:
397
+ return current_data, mime_type, "No fields specified for 'select_fields'."
398
+
399
+ output_list = []
400
+ try:
401
+ for item in current_data:
402
+ if isinstance(item, dict):
403
+ new_item = {
404
+ field: item.get(field) for field in target_fields if field in item
405
+ }
406
+ output_list.append(new_item)
407
+ else:
408
+ log.warning(
409
+ "%s Skipping non-dictionary item in list during select_fields.",
410
+ log_id,
411
+ )
412
+ continue
413
+ return output_list, mime_type, None
414
+ except Exception as e:
415
+ return current_data, mime_type, f"Error selecting fields '{fields_str}': {e}"
416
+
417
+
418
+ async def _apply_template(
419
+ current_data: Any,
420
+ template_spec: str,
421
+ mime_type: Optional[str],
422
+ log_id: str,
423
+ context: Any,
424
+ ) -> Tuple[Any, Optional[str], Optional[str]]:
425
+ """
426
+ Applies a Mustache template loaded from an artifact to the input data.
427
+ This version first renders the template, then resolves embeds on the result.
428
+
429
+ Args:
430
+ current_data: The input data (expected dict, list, or str).
431
+ template_spec: String 'template_filename[:version]'.
432
+ mime_type: The original mime type (passed through).
433
+ log_id: Identifier for logging.
434
+ context: The Gateway context dictionary containing artifact_service and session_context.
435
+
436
+ Returns:
437
+ Tuple: (result_data, original_mime_type, error_string)
438
+ result_data is the rendered and resolved string.
439
+ """
440
+ from .resolver import resolve_embeds_recursively_in_string, evaluate_embed
441
+
442
+ if not isinstance(current_data, (dict, list, str)):
443
+ return (
444
+ current_data,
445
+ mime_type,
446
+ f"Input data for 'apply_to_template' must be dict, list, or string, got {type(current_data).__name__}.",
447
+ )
448
+
449
+ parts = template_spec.strip().split(":", 1)
450
+ template_filename = parts[0]
451
+ template_version_str = parts[1] if len(parts) > 1 else None
452
+ template_version = None
453
+
454
+ if not template_filename:
455
+ return current_data, mime_type, "Template filename cannot be empty."
456
+
457
+ if not isinstance(context, dict):
458
+ return current_data, mime_type, "Invalid context for template loading."
459
+ artifact_service: Optional[BaseArtifactService] = context.get("artifact_service")
460
+ session_context = context.get("session_context")
461
+ if not artifact_service or not session_context:
462
+ return (
463
+ current_data,
464
+ mime_type,
465
+ "ArtifactService or session context not available for template loading.",
466
+ )
467
+
468
+ app_name = session_context.get("app_name")
469
+ user_id = session_context.get("user_id")
470
+ session_id = session_context.get("session_id")
471
+ if not all([app_name, user_id, session_id]):
472
+ return (
473
+ current_data,
474
+ mime_type,
475
+ "Missing required session identifiers in context for template loading.",
476
+ )
477
+
478
+ try:
479
+ if template_version_str:
480
+ template_version = int(template_version_str)
481
+ else:
482
+ versions = await artifact_service.list_versions(
483
+ app_name=app_name,
484
+ user_id=user_id,
485
+ session_id=session_id,
486
+ filename=template_filename,
487
+ )
488
+ if not versions:
489
+ return (
490
+ current_data,
491
+ mime_type,
492
+ f"Template artifact '{template_filename}' (latest) not found.",
493
+ )
494
+ template_version = max(versions)
495
+
496
+ template_part = await artifact_service.load_artifact(
497
+ app_name=app_name,
498
+ user_id=user_id,
499
+ session_id=session_id,
500
+ filename=template_filename,
501
+ version=template_version,
502
+ )
503
+
504
+ if not template_part or not template_part.inline_data:
505
+ return (
506
+ current_data,
507
+ mime_type,
508
+ f"Template artifact '{template_filename}' v{template_version} not found or empty.",
509
+ )
510
+
511
+ template_bytes = template_part.inline_data.data
512
+ try:
513
+ raw_template_string = template_bytes.decode("utf-8")
514
+ except UnicodeDecodeError:
515
+ return (
516
+ current_data,
517
+ mime_type,
518
+ f"Cannot render non-UTF-8 decodable binary template '{template_filename}' v{template_version}.",
519
+ )
520
+
521
+ except FileNotFoundError:
522
+ return (
523
+ current_data,
524
+ mime_type,
525
+ f"Template artifact '{template_filename}' v{template_version_str or 'latest'} not found.",
526
+ )
527
+ except ValueError as e:
528
+ return (
529
+ current_data,
530
+ mime_type,
531
+ f"Invalid version specified for template: '{template_version_str}' or other value error: {e}",
532
+ )
533
+ except Exception as e:
534
+ return (
535
+ current_data,
536
+ mime_type,
537
+ f"Error loading template artifact '{template_filename}' v{template_version_str or 'latest'}: {e}",
538
+ )
539
+
540
+ try:
541
+ log.info(
542
+ "%s [apply_to_template] Preparing render context. Input data type: %s, Original MIME: %s",
543
+ log_id,
544
+ type(current_data).__name__,
545
+ mime_type,
546
+ )
547
+ render_context: Dict[str, Any]
548
+
549
+ if isinstance(current_data, list):
550
+ if mime_type and "csv" in mime_type.lower():
551
+ log.info(
552
+ "%s [apply_to_template] Input is a list and original MIME is CSV. Structuring context with 'headers' and 'data_rows'.",
553
+ log_id,
554
+ )
555
+ if not current_data:
556
+ render_context = {"headers": [], "data_rows": []}
557
+ else:
558
+ if all(isinstance(item, dict) for item in current_data):
559
+ headers = list(current_data[0].keys()) if current_data else []
560
+ data_rows = [list(row.values()) for row in current_data]
561
+ render_context = {"headers": headers, "data_rows": data_rows}
562
+ else:
563
+ log.warning(
564
+ "%s [apply_to_template] Input is list from CSV, but items are not all dictionaries. Falling back to 'items' context.",
565
+ log_id,
566
+ )
567
+ render_context = {"items": current_data}
568
+ else:
569
+ log.info(
570
+ "%s [apply_to_template] Input is a list (from JSON/YAML). Data available under 'items' key.",
571
+ log_id,
572
+ )
573
+ render_context = {"items": current_data}
574
+ elif isinstance(current_data, dict):
575
+ render_context = current_data
576
+ log.info(
577
+ "%s [apply_to_template] Input is dict. Keys directly available in template.",
578
+ log_id,
579
+ )
580
+ elif isinstance(current_data, str):
581
+ render_context = {"text": current_data}
582
+ log.info(
583
+ "%s [apply_to_template] Input is string. Data available under 'text' key.",
584
+ log_id,
585
+ )
586
+ else:
587
+ log.warning(
588
+ "%s [apply_to_template] Input is unexpected type %s. Converting to string and placing under 'value' key.",
589
+ log_id,
590
+ type(current_data).__name__,
591
+ )
592
+ render_context = {"value": str(current_data)}
593
+
594
+ log.info(
595
+ "%s [apply_to_template] Render context keys: %s",
596
+ log_id,
597
+ list(render_context.keys()),
598
+ )
599
+ if "items" in render_context and isinstance(render_context["items"], list):
600
+ log.info(
601
+ "%s [apply_to_template] Render context 'items' length: %d",
602
+ log_id,
603
+ len(render_context["items"]),
604
+ )
605
+
606
+ intermediate_rendered_string = pystache.render(
607
+ raw_template_string, render_context
608
+ )
609
+ log.debug(
610
+ "%s [apply_to_template] Intermediate rendered string: %s",
611
+ log_id,
612
+ intermediate_rendered_string[:200] + "...",
613
+ )
614
+
615
+ except Exception as e:
616
+ return (
617
+ current_data,
618
+ mime_type,
619
+ f"Error preparing context or rendering template '{template_filename}' v{template_version}: {e}",
620
+ )
621
+
622
+ try:
623
+ log.debug(
624
+ "%s [apply_to_template] Resolving embeds on rendered template output.",
625
+ log_id,
626
+ )
627
+ resolver_config = context.get("config", {})
628
+ if not resolver_config:
629
+ log.warning(
630
+ "%s 'config' not found in context for template embed resolution. Using defaults.",
631
+ log_id,
632
+ )
633
+
634
+ final_rendered_string = await resolve_embeds_recursively_in_string(
635
+ text=intermediate_rendered_string,
636
+ context=context,
637
+ resolver_func=evaluate_embed,
638
+ types_to_resolve=EARLY_EMBED_TYPES.union(LATE_EMBED_TYPES),
639
+ resolution_mode=ResolutionMode.RECURSIVE_ARTIFACT_CONTENT,
640
+ log_identifier=f"{log_id}[TemplateEmbeds]",
641
+ config=resolver_config,
642
+ max_depth=resolver_config.get("gateway_recursive_embed_depth", 12),
643
+ current_depth=0,
644
+ visited_artifacts=set(),
645
+ accumulated_size=0,
646
+ max_total_size=resolver_config.get(
647
+ "gateway_max_artifact_resolve_size_bytes", -1
648
+ ),
649
+ )
650
+ log.debug(
651
+ "%s [apply_to_template] Final rendered string after embed resolution: %s",
652
+ log_id,
653
+ final_rendered_string[:200] + "...",
654
+ )
655
+ except Exception as recurse_err:
656
+ log.exception(
657
+ "%s Error during recursive resolution of rendered template: %s",
658
+ log_id,
659
+ recurse_err,
660
+ )
661
+ return (
662
+ current_data,
663
+ mime_type,
664
+ f"Error resolving embeds within rendered template: {recurse_err}",
665
+ )
666
+
667
+ return final_rendered_string, mime_type, None
668
+
669
+
670
+ MODIFIER_IMPLEMENTATIONS: Dict[
671
+ str, Callable[..., Tuple[Any, Optional[str], Optional[str]]]
672
+ ] = {
673
+ "jsonpath": _apply_jsonpath,
674
+ "select_cols": _apply_select_cols,
675
+ "filter_rows_eq": _apply_filter_rows_eq,
676
+ "slice_rows": _apply_slice_rows,
677
+ "slice_lines": _apply_slice_lines,
678
+ "grep": _apply_grep,
679
+ "head": _apply_head,
680
+ "tail": _apply_tail,
681
+ "select_fields": _apply_select_fields,
682
+ "apply_to_template": _apply_template,
683
+ }
684
+
685
+ MODIFIER_DEFINITIONS: Dict[str, Dict[str, Any]] = {
686
+ "jsonpath": {
687
+ "function": _apply_jsonpath,
688
+ "accepts": [DataFormat.JSON_OBJECT],
689
+ "produces": DataFormat.JSON_OBJECT,
690
+ },
691
+ "select_cols": {
692
+ "function": _apply_select_cols,
693
+ "accepts": [DataFormat.LIST_OF_DICTS],
694
+ "produces": DataFormat.LIST_OF_DICTS,
695
+ },
696
+ "filter_rows_eq": {
697
+ "function": _apply_filter_rows_eq,
698
+ "accepts": [DataFormat.LIST_OF_DICTS],
699
+ "produces": DataFormat.LIST_OF_DICTS,
700
+ },
701
+ "slice_rows": {
702
+ "function": _apply_slice_rows,
703
+ "accepts": [DataFormat.LIST_OF_DICTS],
704
+ "produces": DataFormat.LIST_OF_DICTS,
705
+ },
706
+ "slice_lines": {
707
+ "function": _apply_slice_lines,
708
+ "accepts": [DataFormat.STRING],
709
+ "produces": DataFormat.STRING,
710
+ },
711
+ "grep": {
712
+ "function": _apply_grep,
713
+ "accepts": [DataFormat.STRING],
714
+ "produces": DataFormat.STRING,
715
+ },
716
+ "head": {
717
+ "function": _apply_head,
718
+ "accepts": [DataFormat.STRING],
719
+ "produces": DataFormat.STRING,
720
+ },
721
+ "tail": {
722
+ "function": _apply_tail,
723
+ "accepts": [DataFormat.STRING],
724
+ "produces": DataFormat.STRING,
725
+ },
726
+ "select_fields": {
727
+ "function": _apply_select_fields,
728
+ "accepts": [DataFormat.LIST_OF_DICTS],
729
+ "produces": DataFormat.LIST_OF_DICTS,
730
+ },
731
+ "apply_to_template": {
732
+ "function": _apply_template,
733
+ "accepts": [
734
+ DataFormat.JSON_OBJECT,
735
+ DataFormat.LIST_OF_DICTS,
736
+ DataFormat.STRING,
737
+ ],
738
+ "produces": DataFormat.STRING,
739
+ },
740
+ }
741
+
742
+
743
+ def _parse_modifier_chain(
744
+ expression: str,
745
+ ) -> Tuple[str, List[Tuple[str, str]], Optional[str]]:
746
+ """
747
+ Parses the expression part of an artifact_content embed.
748
+
749
+ Separates the artifact specifier, modifier chain, and final format specifier.
750
+
751
+ Args:
752
+ expression: The full expression string after 'artifact_content:'.
753
+
754
+ Returns:
755
+ A tuple containing:
756
+ - artifact_spec (str): The filename and optional version (e.g., "data.csv:1").
757
+ - modifiers (List[Tuple[str, str]]): A list of (prefix, value) tuples for modifiers.
758
+ - output_format (Optional[str]): The final output format string (e.g., "text", "json").
759
+ Returns None if the format step is missing or invalid.
760
+ """
761
+ from .constants import EMBED_CHAIN_DELIMITER
762
+
763
+ parts = expression.split(EMBED_CHAIN_DELIMITER)
764
+ if not parts:
765
+ return expression, [], None
766
+
767
+ artifact_spec = parts[0].strip()
768
+ modifiers = []
769
+ output_format = None
770
+
771
+ for i in range(1, len(parts)):
772
+ part = parts[i].strip()
773
+ if not part:
774
+ continue
775
+
776
+ if i == len(parts) - 1:
777
+ format_match = re.match(r"format:(.*)", part, re.DOTALL)
778
+ if format_match:
779
+ output_format = format_match.group(1).strip()
780
+ continue
781
+
782
+ modifier_parts = part.split(":", 1)
783
+ if len(modifier_parts) == 2:
784
+ prefix = modifier_parts[0].strip()
785
+ value = modifier_parts[1].strip()
786
+ if prefix and value:
787
+ modifiers.append((prefix, value))
788
+ else:
789
+ log.warning("Ignoring invalid modifier step format: '%s'", part)
790
+ else:
791
+ log.warning("Ignoring invalid modifier step format: '%s'", part)
792
+
793
+ return artifact_spec, modifiers, output_format