solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.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.

Potentially problematic release.


This version of solace-agent-mesh might be problematic. Click here for more details.

Files changed (521) hide show
  1. solace_agent_mesh/__init__.py +5 -0
  2. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  3. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  4. solace_agent_mesh/agent/adk/callbacks.py +1716 -0
  5. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  6. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  7. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  8. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  9. solace_agent_mesh/agent/adk/runner.py +357 -0
  10. solace_agent_mesh/agent/adk/services.py +240 -0
  11. solace_agent_mesh/agent/adk/setup.py +751 -0
  12. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  13. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  14. solace_agent_mesh/agent/agent_llm.txt +41 -0
  15. solace_agent_mesh/agent/protocol/event_handlers.py +1444 -0
  16. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  17. solace_agent_mesh/agent/sac/app.py +640 -0
  18. solace_agent_mesh/agent/sac/component.py +3496 -0
  19. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  20. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  21. solace_agent_mesh/agent/sac/task_execution_context.py +185 -0
  22. solace_agent_mesh/agent/testing/__init__.py +3 -0
  23. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  24. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  25. solace_agent_mesh/agent/tools/__init__.py +14 -0
  26. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  27. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  28. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +571 -0
  30. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +290 -0
  32. solace_agent_mesh/agent/tools/registry.py +36 -0
  33. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  34. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  35. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  38. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  39. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  40. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  41. solace_agent_mesh/assets/docs/404.html +16 -0
  42. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  43. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  46. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  54. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  55. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  57. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  58. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.a8c5ce5a.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  105. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/f897a61a.f8c53b0f.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js +2 -0
  132. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js.LICENSE.txt +81 -0
  133. solace_agent_mesh/assets/docs/assets/js/runtime~main.d5133813.js +1 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +77 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  165. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  167. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  168. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  170. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  171. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  172. solace_agent_mesh/assets/docs/lunr-index-1754075282978.json +1 -0
  173. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc-1754075282978.json +1 -0
  175. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  176. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  177. solace_agent_mesh/cli/__init__.py +1 -1
  178. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  179. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  181. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  183. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  184. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  185. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  186. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  187. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  188. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  189. solace_agent_mesh/cli/commands/init_cmd/env_step.py +205 -0
  190. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  191. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +407 -0
  192. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  193. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  194. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +139 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  201. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  202. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  203. solace_agent_mesh/cli/main.py +17 -294
  204. solace_agent_mesh/cli/utils.py +135 -204
  205. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-D11Lmy9p.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/assets/main-Gfk3BYn5.js +663 -0
  210. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  211. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  212. solace_agent_mesh/common/__init__.py +1 -0
  213. solace_agent_mesh/common/a2a_protocol.py +564 -0
  214. solace_agent_mesh/common/agent_registry.py +42 -0
  215. solace_agent_mesh/common/client/__init__.py +4 -0
  216. solace_agent_mesh/common/client/card_resolver.py +21 -0
  217. solace_agent_mesh/common/client/client.py +85 -0
  218. solace_agent_mesh/common/client/client_llm.txt +133 -0
  219. solace_agent_mesh/common/common_llm.txt +144 -0
  220. solace_agent_mesh/common/constants.py +1 -14
  221. solace_agent_mesh/common/middleware/__init__.py +12 -0
  222. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  223. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  224. solace_agent_mesh/common/middleware/registry.py +125 -0
  225. solace_agent_mesh/common/server/__init__.py +4 -0
  226. solace_agent_mesh/common/server/server.py +122 -0
  227. solace_agent_mesh/common/server/server_llm.txt +169 -0
  228. solace_agent_mesh/common/server/task_manager.py +291 -0
  229. solace_agent_mesh/common/server/utils.py +28 -0
  230. solace_agent_mesh/common/services/__init__.py +4 -0
  231. solace_agent_mesh/common/services/employee_service.py +162 -0
  232. solace_agent_mesh/common/services/identity_service.py +129 -0
  233. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  234. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  235. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  236. solace_agent_mesh/common/services/services_llm.txt +132 -0
  237. solace_agent_mesh/common/types.py +411 -0
  238. solace_agent_mesh/common/utils/__init__.py +7 -0
  239. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  240. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  241. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  242. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  243. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  244. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  245. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  246. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  247. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  248. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  249. solace_agent_mesh/common/utils/initializer.py +51 -0
  250. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  251. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  252. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  253. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  254. solace_agent_mesh/config_portal/backend/common.py +66 -24
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +164 -0
  258. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  259. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  260. solace_agent_mesh/config_portal/backend/server.py +551 -181
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-_7yox_eh.js +48 -0
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-e5c3acfe.js +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  267. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  268. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  269. solace_agent_mesh/core_a2a/__init__.py +1 -0
  270. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  271. solace_agent_mesh/core_a2a/service.py +331 -0
  272. solace_agent_mesh/evaluation/config_loader.py +657 -0
  273. solace_agent_mesh/evaluation/evaluator.py +667 -0
  274. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  275. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  276. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  277. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  278. solace_agent_mesh/evaluation/report/modal.html +59 -0
  279. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  280. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  281. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  282. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  283. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  284. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  285. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  286. solace_agent_mesh/evaluation/report_generator.py +613 -0
  287. solace_agent_mesh/evaluation/run.py +613 -0
  288. solace_agent_mesh/evaluation/subscriber.py +872 -0
  289. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  290. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  291. solace_agent_mesh/gateway/base/__init__.py +1 -0
  292. solace_agent_mesh/gateway/base/app.py +266 -0
  293. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  294. solace_agent_mesh/gateway/base/component.py +1542 -0
  295. solace_agent_mesh/gateway/base/task_context.py +74 -0
  296. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  297. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  298. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  299. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  300. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  301. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  302. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  303. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  304. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  305. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  306. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  307. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +827 -0
  308. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  309. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  310. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  311. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  312. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  313. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  314. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  315. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  316. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  317. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  318. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  319. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  320. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  321. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  322. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  323. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  324. solace_agent_mesh/llm.txt +228 -0
  325. solace_agent_mesh/llm_detail.txt +2835 -0
  326. solace_agent_mesh/templates/agent_template.yaml +53 -0
  327. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  328. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  329. solace_agent_mesh/templates/gateway_component_template.py +431 -0
  330. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  331. solace_agent_mesh/templates/logging_config_template.ini +64 -0
  332. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  333. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  334. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  335. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  336. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  337. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  338. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  339. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  340. solace_agent_mesh/templates/shared_config.yaml +66 -0
  341. solace_agent_mesh/templates/templates_llm.txt +147 -0
  342. solace_agent_mesh/templates/webui.yaml +53 -0
  343. solace_agent_mesh-1.0.2.dist-info/METADATA +432 -0
  344. solace_agent_mesh-1.0.2.dist-info/RECORD +361 -0
  345. solace_agent_mesh-1.0.2.dist-info/entry_points.txt +3 -0
  346. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/licenses/LICENSE +1 -1
  347. solace_agent_mesh/agents/base_agent_component.py +0 -256
  348. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  349. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  350. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  351. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  352. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  353. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  354. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  355. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  356. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  357. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  358. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  359. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  360. solace_agent_mesh/agents/slack/__init__.py +0 -1
  361. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  362. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  363. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  364. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  365. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  366. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  367. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  368. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  369. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  370. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  371. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  372. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  373. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  374. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  375. solace_agent_mesh/cli/commands/add/add.py +0 -88
  376. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  377. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  378. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  379. solace_agent_mesh/cli/commands/build.py +0 -670
  380. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  382. solace_agent_mesh/cli/commands/config.py +0 -29
  383. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  384. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  385. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  386. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  387. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  388. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  389. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  390. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  391. solace_agent_mesh/cli/commands/init/init.py +0 -92
  392. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  393. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  394. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  395. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  396. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  397. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  398. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  399. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  400. solace_agent_mesh/cli/commands/run.py +0 -68
  401. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  402. solace_agent_mesh/cli/config.py +0 -85
  403. solace_agent_mesh/common/action.py +0 -91
  404. solace_agent_mesh/common/action_list.py +0 -37
  405. solace_agent_mesh/common/action_response.py +0 -340
  406. solace_agent_mesh/common/mysql_database.py +0 -40
  407. solace_agent_mesh/common/postgres_database.py +0 -85
  408. solace_agent_mesh/common/prompt_templates.py +0 -28
  409. solace_agent_mesh/common/stimulus_utils.py +0 -152
  410. solace_agent_mesh/common/time.py +0 -24
  411. solace_agent_mesh/common/utils.py +0 -712
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  414. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  415. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  416. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  417. solace_agent_mesh/configs/agent_global.yaml +0 -74
  418. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  419. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  420. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  421. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  422. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  423. solace_agent_mesh/configs/monitor.yaml +0 -0
  424. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  425. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  426. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  427. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  428. solace_agent_mesh/configs/service_llm.yaml +0 -265
  429. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  430. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  431. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  432. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  433. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  434. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  435. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  436. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  437. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  438. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  439. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  440. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  441. solace_agent_mesh/orchestrator/__init__.py +0 -0
  442. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  443. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  444. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  445. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  446. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  447. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  448. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  449. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  450. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  451. solace_agent_mesh/services/__init__.py +0 -0
  452. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  453. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  454. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  455. solace_agent_mesh/services/common/__init__.py +0 -4
  456. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  457. solace_agent_mesh/services/common/singleton.py +0 -18
  458. solace_agent_mesh/services/file_service/__init__.py +0 -14
  459. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  460. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  461. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  462. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  463. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  464. solace_agent_mesh/services/file_service/file_service.py +0 -437
  465. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  466. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  467. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  468. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  469. solace_agent_mesh/services/history_service/__init__.py +0 -3
  470. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  471. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  472. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  473. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  474. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  475. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  476. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  477. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  478. solace_agent_mesh/services/history_service/history_service.py +0 -413
  479. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  480. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  481. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  482. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  483. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  484. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  485. solace_agent_mesh/templates/action.py +0 -38
  486. solace_agent_mesh/templates/agent.py +0 -29
  487. solace_agent_mesh/templates/agent.yaml +0 -70
  488. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  489. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  490. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  491. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  492. solace_agent_mesh/templates/gateway_base.py +0 -15
  493. solace_agent_mesh/templates/gateway_input.py +0 -98
  494. solace_agent_mesh/templates/gateway_output.py +0 -71
  495. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  496. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  497. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  498. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  499. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  500. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  501. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  502. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  503. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  504. solace_agent_mesh/templates/web-flows.yaml +0 -76
  505. solace_agent_mesh/tools/__init__.py +0 -0
  506. solace_agent_mesh/tools/components/__init__.py +0 -0
  507. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  508. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  509. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  510. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  511. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  512. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  513. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  517. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  518. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  519. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  520. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  521. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,452 @@
1
+ """
2
+ Contains the Central Data Converter and Serializer functions.
3
+ """
4
+
5
+ import json
6
+ import csv
7
+ import io
8
+ import base64
9
+ from typing import Any, Tuple, Optional, List, Dict
10
+ from solace_ai_connector.common.log import log
11
+
12
+ from .types import DataFormat
13
+ from ..mime_helpers import is_text_based_mime_type
14
+
15
+ try:
16
+ import yaml
17
+
18
+ PYYAML_AVAILABLE = True
19
+ except ImportError:
20
+ PYYAML_AVAILABLE = False
21
+
22
+
23
+ def _parse_string_to_list_of_dicts(
24
+ data_string: str, mime_type: Optional[str], log_id: str
25
+ ) -> Tuple[Optional[List[Dict[str, Any]]], Optional[str]]:
26
+ """
27
+ Parses a string into a list of dictionaries based on its MIME type.
28
+ Supports JSON, CSV, and YAML.
29
+
30
+ Args:
31
+ data_string: The string to parse.
32
+ mime_type: The MIME type of the string data.
33
+ log_id: Identifier for logging.
34
+
35
+ Returns:
36
+ A tuple (parsed_data, error_message).
37
+ parsed_data is List[Dict[str, Any]] on success, None on failure.
38
+ error_message is a string on failure, None on success.
39
+ """
40
+ normalized_mime_type = (mime_type or "").lower()
41
+ log.debug(
42
+ "%s Parsing string to LIST_OF_DICTS, MIME: '%s'", log_id, normalized_mime_type
43
+ )
44
+
45
+ try:
46
+ if "json" in normalized_mime_type:
47
+ parsed_json = json.loads(data_string)
48
+ if isinstance(parsed_json, list) and all(
49
+ isinstance(item, dict) for item in parsed_json
50
+ ):
51
+ return parsed_json, None
52
+ elif isinstance(parsed_json, dict):
53
+ return [parsed_json], None
54
+ else:
55
+ return (
56
+ None,
57
+ "Parsed JSON is not a list of dictionaries or a single dictionary.",
58
+ )
59
+ elif "csv" in normalized_mime_type:
60
+ string_io = io.StringIO(data_string)
61
+ reader = csv.DictReader(string_io)
62
+ return list(reader), None
63
+ elif "yaml" in normalized_mime_type or "yml" in normalized_mime_type:
64
+ if not PYYAML_AVAILABLE:
65
+ return None, "YAML parsing skipped: 'PyYAML' not installed."
66
+ parsed_yaml = yaml.safe_load(data_string)
67
+ if isinstance(parsed_yaml, list) and all(
68
+ isinstance(item, dict) for item in parsed_yaml
69
+ ):
70
+ return parsed_yaml, None
71
+ elif isinstance(parsed_yaml, dict):
72
+ return [parsed_yaml], None
73
+ else:
74
+ return (
75
+ None,
76
+ "Parsed YAML is not a list of dictionaries or a single dictionary.",
77
+ )
78
+ else:
79
+ return (
80
+ None,
81
+ f"Unsupported MIME type '{mime_type}' for direct conversion to LIST_OF_DICTS from string.",
82
+ )
83
+ except json.JSONDecodeError:
84
+ return None, "Failed to parse string as JSON"
85
+ except csv.Error:
86
+ return None, "Failed to parse string as CSV (DictReader)"
87
+ except yaml.YAMLError:
88
+ return None, "Failed to parse string as YAML"
89
+ except Exception as e:
90
+ return (
91
+ None,
92
+ f"Unexpected error parsing string to list of dicts (MIME: {mime_type}): {e}",
93
+ )
94
+
95
+
96
+ def convert_data(
97
+ current_data: Any,
98
+ current_format: Optional[DataFormat],
99
+ target_format: DataFormat,
100
+ log_id: str = "[Converter]",
101
+ original_mime_type: Optional[str] = None,
102
+ ) -> Tuple[Any, DataFormat, Optional[str]]:
103
+ """
104
+ Converts data between different internal DataFormat types, using original
105
+ MIME type as context where necessary (e.g., BYTES -> structured).
106
+
107
+ Args:
108
+ current_data: The data to convert.
109
+ current_format: The current DataFormat of the data, or None if unknown/numeric.
110
+ target_format: The desired DataFormat.
111
+ log_id: Identifier for logging.
112
+ original_mime_type: The original MIME type of the data, used as a hint
113
+ for parsing BYTES or STRING into structured formats.
114
+
115
+ Returns:
116
+ A tuple containing:
117
+ - The converted data (or original data if conversion failed).
118
+ - The resulting DataFormat (target_format on success, current_format on failure).
119
+ - An optional error message string if conversion failed.
120
+ """
121
+ current_format_name = current_format.name if current_format else "Unknown/Numeric"
122
+ log.debug(
123
+ "%s Attempting conversion: %s -> %s (Hint: MimeType=%s)",
124
+ log_id,
125
+ current_format_name,
126
+ target_format.name,
127
+ original_mime_type,
128
+ )
129
+
130
+ if current_format == target_format:
131
+ log.debug(
132
+ "%s No conversion needed: %s -> %s",
133
+ log_id,
134
+ current_format_name,
135
+ target_format.name,
136
+ )
137
+ return current_data, current_format, None
138
+
139
+ normalized_mime_type = (original_mime_type or "").lower()
140
+
141
+ try:
142
+ if current_format is None:
143
+ if target_format == DataFormat.STRING:
144
+ try:
145
+ return str(current_data), DataFormat.STRING, None
146
+ except Exception as e:
147
+ return (
148
+ current_data,
149
+ current_format,
150
+ f"Failed to convert unknown/numeric type to string: {e}",
151
+ )
152
+ else:
153
+ return (
154
+ current_data,
155
+ current_format,
156
+ f"Cannot convert from unknown/numeric format to {target_format.name}",
157
+ )
158
+
159
+ elif current_format == DataFormat.BYTES:
160
+ if target_format == DataFormat.STRING:
161
+ if original_mime_type and is_text_based_mime_type(original_mime_type):
162
+ try:
163
+ return current_data.decode("utf-8"), DataFormat.STRING, None
164
+ except UnicodeDecodeError as e:
165
+ return (
166
+ current_data,
167
+ current_format,
168
+ f"Failed to decode bytes (MIME: {original_mime_type}) as UTF-8: {e}",
169
+ )
170
+ else:
171
+ error_msg = f"Cannot convert binary data (MIME: {original_mime_type or 'unknown'}) to a general string. This conversion is only supported for text-based MIME types."
172
+ log.warning("%s %s", log_id, error_msg)
173
+ return current_data, current_format, error_msg
174
+ elif target_format == DataFormat.JSON_OBJECT:
175
+ if not normalized_mime_type.startswith(
176
+ "application/json"
177
+ ) and not normalized_mime_type.startswith("text/json"):
178
+ return (
179
+ current_data,
180
+ current_format,
181
+ f"Cannot convert BYTES to JSON_OBJECT: Original MIME type '{original_mime_type}' is not JSON.",
182
+ )
183
+ try:
184
+ string_data = current_data.decode("utf-8")
185
+ return json.loads(string_data), DataFormat.JSON_OBJECT, None
186
+ except UnicodeDecodeError as e:
187
+ return (
188
+ current_data,
189
+ current_format,
190
+ f"Failed to decode bytes as UTF-8 before JSON parsing: {e}",
191
+ )
192
+ except json.JSONDecodeError as e:
193
+ return (
194
+ current_data,
195
+ current_format,
196
+ f"Failed to parse decoded bytes as JSON: {e}",
197
+ )
198
+ elif target_format == DataFormat.LIST_OF_DICTS:
199
+ if not normalized_mime_type.startswith("text/csv"):
200
+ return (
201
+ current_data,
202
+ current_format,
203
+ f"Cannot convert BYTES to LIST_OF_DICTS: Original MIME type '{original_mime_type}' is not CSV.",
204
+ )
205
+ try:
206
+ string_data = current_data.decode("utf-8")
207
+ string_io = io.StringIO(string_data)
208
+ reader = csv.DictReader(string_io)
209
+ return list(reader), DataFormat.LIST_OF_DICTS, None
210
+ except UnicodeDecodeError as e:
211
+ return (
212
+ current_data,
213
+ current_format,
214
+ f"Failed to decode bytes as UTF-8 before CSV parsing: {e}",
215
+ )
216
+ except csv.Error as e:
217
+ return (
218
+ current_data,
219
+ current_format,
220
+ f"Failed to parse decoded bytes as CSV (DictReader): {e}",
221
+ )
222
+ except Exception as e:
223
+ return (
224
+ current_data,
225
+ current_format,
226
+ f"Unexpected error parsing decoded bytes as CSV: {e}",
227
+ )
228
+
229
+ elif current_format == DataFormat.STRING:
230
+ if target_format == DataFormat.BYTES:
231
+ try:
232
+ return current_data.encode("utf-8"), DataFormat.BYTES, None
233
+ except Exception as e:
234
+ return (
235
+ current_data,
236
+ current_format,
237
+ f"Failed to encode string to UTF-8 bytes: {e}",
238
+ )
239
+ elif target_format == DataFormat.JSON_OBJECT:
240
+ try:
241
+ return json.loads(current_data), DataFormat.JSON_OBJECT, None
242
+ except json.JSONDecodeError:
243
+ return (
244
+ current_data,
245
+ current_format,
246
+ "Failed to parse string as JSON",
247
+ )
248
+ elif target_format == DataFormat.LIST_OF_DICTS:
249
+ parsed_data, error_msg = _parse_string_to_list_of_dicts(
250
+ data_string=current_data,
251
+ mime_type=original_mime_type,
252
+ log_id=log_id,
253
+ )
254
+ if error_msg:
255
+ return current_data, current_format, error_msg
256
+ return parsed_data, DataFormat.LIST_OF_DICTS, None
257
+
258
+ elif current_format == DataFormat.JSON_OBJECT:
259
+ if target_format == DataFormat.STRING:
260
+ try:
261
+ return (
262
+ json.dumps(current_data, separators=(",", ":")),
263
+ DataFormat.STRING,
264
+ None,
265
+ )
266
+ except TypeError as e:
267
+ return (
268
+ current_data,
269
+ current_format,
270
+ f"Failed to serialize JSON object to string: {e}",
271
+ )
272
+ elif target_format == DataFormat.LIST_OF_DICTS:
273
+ if isinstance(current_data, list) and all(
274
+ isinstance(item, dict) for item in current_data
275
+ ):
276
+ return current_data, DataFormat.LIST_OF_DICTS, None
277
+ else:
278
+ return (
279
+ current_data,
280
+ current_format,
281
+ "JSON object is not a list of dictionaries",
282
+ )
283
+
284
+ elif current_format == DataFormat.LIST_OF_DICTS:
285
+ if target_format == DataFormat.STRING:
286
+ try:
287
+ if not current_data:
288
+ return "", DataFormat.STRING, None
289
+ output_io = io.StringIO()
290
+ fieldnames = list(current_data[0].keys())
291
+ writer = csv.DictWriter(output_io, fieldnames=fieldnames)
292
+ writer.writeheader()
293
+ writer.writerows(current_data)
294
+ return output_io.getvalue().strip("\r\n"), DataFormat.STRING, None
295
+ except IndexError:
296
+ return "", DataFormat.STRING, None
297
+ except Exception as e:
298
+ return (
299
+ current_data,
300
+ current_format,
301
+ f"Failed to format list of dicts as CSV string: {e}",
302
+ )
303
+ elif target_format == DataFormat.JSON_OBJECT:
304
+ return current_data, DataFormat.JSON_OBJECT, None
305
+
306
+ error_msg = f"Unsupported conversion requested: {current_format_name} -> {target_format.name}"
307
+ log.warning("%s %s", log_id, error_msg)
308
+ return current_data, current_format, error_msg
309
+
310
+ except Exception as e:
311
+ error_msg = f"Unexpected error during conversion from {current_format_name} to {target_format.name}: {e}"
312
+ log.exception("%s %s", log_id, error_msg)
313
+ return current_data, current_format, error_msg
314
+
315
+
316
+ def serialize_data(
317
+ data: Any,
318
+ data_format: Optional[DataFormat],
319
+ target_string_format: Optional[str],
320
+ original_mime_type: Optional[str],
321
+ log_id: str = "[Serializer]",
322
+ ) -> Tuple[str, Optional[str]]:
323
+ """
324
+ Converts data from its internal DataFormat into the target string representation.
325
+ Handles Python format specifiers for numeric types.
326
+
327
+ Args:
328
+ data: The data to serialize.
329
+ data_format: The current DataFormat of the data, or None if unknown/numeric.
330
+ target_string_format: The desired final string format (e.g., "text", "json", "datauri", or Python format spec like ".2f").
331
+ If None or empty, defaults to "text".
332
+ original_mime_type: The original MIME type of the artifact (needed for datauri).
333
+ log_id: Identifier for logging.
334
+
335
+ Returns:
336
+ A tuple containing:
337
+ - The final serialized string.
338
+ - An optional error message string if serialization failed.
339
+ """
340
+ target_fmt = (target_string_format or "text").strip()
341
+ log.debug(
342
+ "%s Serializing data from %s to format '%s'",
343
+ log_id,
344
+ data_format.name if data_format else "Unknown/Numeric",
345
+ target_fmt,
346
+ )
347
+
348
+ try:
349
+ if isinstance(data, (int, float)) and target_string_format:
350
+ is_format_spec = target_fmt.startswith(".") or any(
351
+ c in target_fmt for c in "defg%"
352
+ )
353
+ if is_format_spec:
354
+ try:
355
+ formatted_string = format(data, target_fmt)
356
+ log.debug(
357
+ "%s Applied Python format specifier '%s' to numeric data.",
358
+ log_id,
359
+ target_fmt,
360
+ )
361
+ return formatted_string, None
362
+ except ValueError as fmt_err:
363
+ err_msg = f"Invalid format specifier '{target_fmt}' for numeric data type {type(data).__name__}: {fmt_err}"
364
+ log.warning("%s %s", log_id, err_msg)
365
+ except Exception as e:
366
+ err_msg = f"Error applying format specifier '{target_fmt}': {e}"
367
+ log.warning("%s %s", log_id, err_msg)
368
+ target_fmt_lower = target_fmt.lower()
369
+
370
+ if target_fmt_lower == "text":
371
+ string_data, _, error = convert_data(
372
+ data, data_format, DataFormat.STRING, log_id, original_mime_type
373
+ )
374
+ if error:
375
+ return f"[Serialization Error: {error}]", error
376
+ return string_data, None
377
+
378
+ elif target_fmt_lower == "json":
379
+ json_obj, _, error = convert_data(
380
+ data, data_format, DataFormat.JSON_OBJECT, log_id, original_mime_type
381
+ )
382
+ if error:
383
+ return f"[Serialization Error: {error}]", error
384
+ try:
385
+ return json.dumps(json_obj, separators=(",", ":")), None
386
+ except TypeError as e:
387
+ err_msg = f"Failed to serialize to JSON string: {e}"
388
+ return f"[Serialization Error: {err_msg}]", err_msg
389
+
390
+ elif target_fmt_lower == "json_pretty":
391
+ json_obj, _, error = convert_data(
392
+ data, data_format, DataFormat.JSON_OBJECT, log_id, original_mime_type
393
+ )
394
+ if error:
395
+ return f"[Serialization Error: {error}]", error
396
+ try:
397
+ return json.dumps(json_obj, indent=2), None
398
+ except TypeError as e:
399
+ err_msg = f"Failed to serialize to pretty JSON string: {e}"
400
+ return f"[Serialization Error: {err_msg}]", err_msg
401
+
402
+ elif target_fmt_lower == "csv":
403
+ list_of_dicts, _, error1 = convert_data(
404
+ data, data_format, DataFormat.LIST_OF_DICTS, log_id, original_mime_type
405
+ )
406
+ if error1:
407
+ return f"[Serialization Error: {error1}]", error1
408
+ csv_string, _, error2 = convert_data(
409
+ list_of_dicts,
410
+ DataFormat.LIST_OF_DICTS,
411
+ DataFormat.STRING,
412
+ log_id,
413
+ "text/csv",
414
+ )
415
+ if error2:
416
+ return f"[Serialization Error: {error2}]", error2
417
+ return csv_string, None
418
+
419
+ elif target_fmt_lower == "datauri":
420
+ byte_data, _, error = convert_data(
421
+ data, data_format, DataFormat.BYTES, log_id, original_mime_type
422
+ )
423
+ if error:
424
+ return f"[Serialization Error: {error}]", error
425
+
426
+ if not original_mime_type:
427
+ err_msg = "Original MIME type required for datauri format"
428
+ return f"[Serialization Error: {err_msg}]", err_msg
429
+ try:
430
+ encoded = base64.b64encode(byte_data).decode("utf-8")
431
+ return f"data:{original_mime_type};base64,{encoded}", None
432
+ except Exception as e:
433
+ err_msg = f"Failed to encode datauri: {e}"
434
+ return f"[Serialization Error: {err_msg}]", err_msg
435
+
436
+ else:
437
+ log.warning(
438
+ "%s Unknown target format '%s'. Defaulting to 'text'.",
439
+ log_id,
440
+ target_fmt,
441
+ )
442
+ string_data, _, error = convert_data(
443
+ data, data_format, DataFormat.STRING, log_id, original_mime_type
444
+ ) # Pass mime type hint
445
+ if error:
446
+ return f"[Serialization Error: {error}]", error
447
+ return string_data, None
448
+
449
+ except Exception as e:
450
+ error_msg = f"Unexpected error during serialization to '{target_fmt}': {e}"
451
+ log.exception("%s %s", log_id, error_msg)
452
+ return f"[Serialization Error: {error_msg}]", error_msg
@@ -0,0 +1,124 @@
1
+ Here is the developer guide for the `embeds` directory.
2
+
3
+ ## Quick Summary
4
+ The `embeds` directory provides a system for finding, parsing, and resolving embedded expressions within strings. These expressions, denoted by `«...»`, can represent dynamic values like mathematical calculations, datetimes, or content from stored artifacts. The system supports multi-step data transformation pipelines on artifact content, recursive embed resolution, and safety features like depth and size limits. It is a core component for dynamic content generation and data processing.
5
+
6
+ ## Files Overview
7
+ - `__init__.py`: Exports the primary public functions and constants for easy access.
8
+ - `constants.py`: Defines the syntax (delimiters, separators), regular expressions, and type classifications for embeds.
9
+ - `converter.py`: Provides functions for converting data between different formats (e.g., bytes, string, JSON) and for serializing data into a final string representation.
10
+ - `evaluators.py`: Contains the specific logic for evaluating simple embed types like `math`, `datetime`, and `uuid`.
11
+ - `modifiers.py`: Implements a library of data transformation functions (e.g., `jsonpath`, `slice_rows`, `grep`) that can be chained together.
12
+ - `resolver.py`: The core engine that orchestrates the entire embed resolution process, including handling modifier chains and recursion.
13
+ - `types.py`: Defines the `DataFormat` enum used to track data types during transformations.
14
+
15
+ ## Developer API Reference
16
+
17
+ ### __init__.py
18
+ **Purpose:** This module serves as the main public entry point for the `embeds` package, exporting the most commonly used functions and constants from the other modules. Developers should typically import from here.
19
+
20
+ **Import:** `from src.solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX`
21
+
22
+ *(Note: Detailed documentation is available under each source file's section.)*
23
+
24
+ **Classes:**
25
+ - None
26
+
27
+ **Functions:**
28
+ - `evaluate_embed(...)`: Evaluates a single, parsed embed expression.
29
+ - `resolve_embeds_in_string(...)`: Resolves embeds in a string for a single pass (non-recursive).
30
+ - `resolve_embeds_recursively_in_string(...)`: Recursively finds and resolves all embeds in a string, respecting depth and size limits.
31
+
32
+ **Constants/Variables:**
33
+ - `EMBED_DELIMITER_OPEN: str`: The opening delimiter for an embed (`«`).
34
+ - `EMBED_DELIMITER_CLOSE: str`: The closing delimiter for an embed (`»`).
35
+ - `EMBED_TYPE_SEPARATOR: str`: The separator between an embed's type and its expression (`:`).
36
+ - `EMBED_FORMAT_SEPARATOR: str`: The separator for an optional format specifier (`|`).
37
+ - `EMBED_CHAIN_DELIMITER: str`: The separator for modifier steps in an `artifact_content` chain (`>>>`).
38
+ - `EMBED_REGEX: re.Pattern`: The compiled regular expression used to find embeds.
39
+ - `EARLY_EMBED_TYPES: Set[str]`: A set of embed types that are resolved in an initial pass.
40
+ - `LATE_EMBED_TYPES: Set[str]`: A set of embed types (like `artifact_content`) resolved in a subsequent pass.
41
+
42
+ ---
43
+ ### constants.py
44
+ **Purpose:** This file defines all the static constants that govern the syntax and classification of embeds. This includes delimiters, separators, the master regular expression for parsing, and sets that categorize embed types for phased resolution.
45
+
46
+ **Import:** `from src.solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX, EARLY_EMBED_TYPES`
47
+
48
+ **Classes:**
49
+ - None
50
+
51
+ **Functions:**
52
+ - None
53
+
54
+ **Constants/Variables:**
55
+ - `EMBED_DELIMITER_OPEN: str`: The character that marks the beginning of an embed (`«`).
56
+ - `EMBED_DELIMITER_CLOSE: str`: The character that marks the end of an embed (`»`).
57
+ - `EMBED_TYPE_SEPARATOR: str`: The character separating the embed type from its expression (`:`).
58
+ - `EMBED_FORMAT_SEPARATOR: str`: The character separating an expression from its optional format specifier (`|`).
59
+ - `EMBED_CHAIN_DELIMITER: str`: The string separating transformation steps in an `artifact_content` embed (`>>>`).
60
+ - `EMBED_REGEX: re.Pattern`: A compiled regular expression to find and capture the `type`, `expression`, and optional `format` from an embed string.
61
+ - `EARLY_EMBED_TYPES: Set[str]`: A set of embed types (`math`, `datetime`, etc.) that are resolved first, as they are generally simple, self-contained, and do not involve recursion.
62
+ - `LATE_EMBED_TYPES: Set[str]`: A set of embed types (`artifact_content`) that are resolved later, as they can be complex, involve I/O, and may contain further embeds that require recursive resolution.
63
+ - `TEXT_CONTAINER_MIME_TYPES: Set[str]`: A set of MIME types that are considered to contain text and can be safely decoded to a string.
64
+
65
+ **Usage Examples:**
66
+ ```python
67
+ import re
68
+ from src.solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX
69
+
70
+ text = "The price is «math:10 * 1.15 | .2f» and the ID is «uuid:new»."
71
+
72
+ for match in EMBED_REGEX.finditer(text):
73
+ embed_type = match.group(1)
74
+ expression = match.group(2)
75
+ format_spec = match.group(3) # This will be None if not present
76
+ print(f"Type: {embed_type}, Expression: '{expression}', Format: '{format_spec}'")
77
+
78
+ # Expected Output:
79
+ # Type: math, Expression: '10 * 1.15 ', Format: ' .2f'
80
+ # Type: uuid, Expression: 'new', Format: 'None'
81
+ ```
82
+
83
+ ---
84
+ ### converter.py
85
+ **Purpose:** This file provides the core logic for data conversion and serialization. It can transform data between different `DataFormat` representations (e.g., `BYTES` to `STRING`, `STRING` to `LIST_OF_DICTS`) and serialize any format into a final string representation (e.g., `json`, `csv`, `datauri`).
86
+
87
+ **Import:** `from src.solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data`
88
+
89
+ **Classes:**
90
+ - None
91
+
92
+ **Functions:**
93
+ - `convert_data(current_data: Any, current_format: Optional[DataFormat], target_format: DataFormat, log_id: str = "[Converter]", original_mime_type: Optional[str] = None) -> Tuple[Any, DataFormat, Optional[str]]`: Converts data from a source format to a target format. It uses `original_mime_type` as a hint for parsing (e.g., knowing that a string is JSON or CSV). Returns a tuple of `(converted_data, resulting_format, error_message)`.
94
+ - `serialize_data(data: Any, data_format: Optional[DataFormat], target_string_format: Optional[str], original_mime_type: Optional[str], log_id: str = "[Serializer]") -> Tuple[str, Optional[str]]`: Serializes data from any `DataFormat` into a final string. `target_string_format` can be a keyword like `"json"`, `"csv"`, `"datauri"`, or a Python format specifier for numbers (e.g., `".2f"`). Returns a tuple of `(serialized_string, error_message)`.
95
+
96
+ **Constants/Variables:**
97
+ - None
98
+
99
+ **Usage Examples:**
100
+ ```python
101
+ from src.solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data
102
+ from src.solace_agent_mesh.common.utils.embeds.types import DataFormat
103
+
104
+ # Example 1: Convert CSV bytes to a list of dictionaries
105
+ csv_bytes = b"id,name\n1,Alice\n2,Bob"
106
+ list_of_dicts, new_format, err = convert_data(
107
+ current_data=csv_bytes,
108
+ current_format=DataFormat.BYTES,
109
+ target_format=DataFormat.LIST_OF_DICTS,
110
+ original_mime_type="text/csv"
111
+ )
112
+ if not err:
113
+ print(f"Converted data: {list_of_dicts}")
114
+ # Converted data: [{'id': '1', 'name': 'Alice'}, {'id': '2', 'name': 'Bob'}]
115
+
116
+ # Example 2: Serialize the list of dictionaries back to a pretty JSON string
117
+ json_string, err = serialize_data(
118
+ data=list_of_dicts,
119
+ data_format=DataFormat.LIST_OF_DICTS,
120
+ target_string_format="json_pretty",
121
+ original_mime_type=None
122
+ )
123
+ if not err:
124
+ print(f"Serialized JSON:\n{json_string}")