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
@@ -1,66 +0,0 @@
1
- """
2
- MongoDB-based history provider for storing session data.
3
- """
4
- from .base_history_provider import BaseHistoryProvider
5
-
6
- class MongoDBHistoryProvider(BaseHistoryProvider):
7
- """
8
- A MongoDB-based history provider for storing session data.
9
- """
10
- def __init__(self, config=None):
11
- super().__init__(config)
12
-
13
- try:
14
- from pymongo import MongoClient
15
- except ImportError:
16
- raise ImportError("Please install the pymongo package to use the MongoDBHistoryProvider.\n\t$ pip install pymongo")
17
-
18
- if not self.config.get("mongodb_uri"):
19
- raise ValueError("Missing required configuration for MongoDBHistoryProvider, Missing 'mongodb_uri' in 'store_config'.")
20
-
21
-
22
- self.client = MongoClient(self.config.get("mongodb_uri"))
23
- self.db = self.client[self.config.get("mongodb_db", "history_db")]
24
- self.collection = self.db[self.config.get("mongodb_collection", "sessions")]
25
-
26
- def _get_key(self, session_id):
27
- """
28
- Generate a document identifier for a session.
29
-
30
- :param session_id: The session identifier.
31
- :return: The session ID as the primary key.
32
- """
33
- return {"_id": session_id}
34
-
35
- def store_session(self, session_id: str, data: dict):
36
- """
37
- Store the session metadata.
38
-
39
- :param session_id: The session identifier.
40
- :param data: The session data to be stored.
41
- """
42
- self.collection.update_one(self._get_key(session_id), {"$set": {"data": data}}, upsert=True)
43
-
44
- def get_session(self, session_id: str)->dict:
45
- """
46
- Retrieve the session.
47
-
48
- :param session_id: The session identifier.
49
- :return: The session metadata as a dictionary.
50
- """
51
- document = self.collection.find_one(self._get_key(session_id))
52
- return document.get("data") if document else {}
53
-
54
- def get_all_sessions(self) -> list[str]:
55
- """
56
- Retrieve all session identifiers.
57
- """
58
- return [doc["_id"] for doc in self.collection.find({}, {"_id": 1})]
59
-
60
- def delete_session(self, session_id: str):
61
- """
62
- Delete the session.
63
-
64
- :param session_id: The session identifier.
65
- """
66
- self.collection.delete_one(self._get_key(session_id))
@@ -1,66 +0,0 @@
1
- """
2
- A history provider that stores history in Redis.
3
- """
4
- import json
5
- from .base_history_provider import BaseHistoryProvider
6
-
7
- class RedisHistoryProvider(BaseHistoryProvider):
8
- """
9
- A history provider that stores history in Redis.
10
- """
11
- def __init__(self, config=None):
12
- super().__init__(config)
13
- try:
14
- import redis
15
- except ImportError:
16
- raise ImportError("Please install the redis package to use the RedisHistoryProvider.\n\t$ pip install redis")
17
-
18
- self.redis_client = redis.Redis(
19
- host=self.config.get("redis_host", "localhost"),
20
- port=self.config.get("redis_port", 6379),
21
- db=self.config.get("redis_db", 0),
22
- decode_responses=True # Ensures string output
23
- )
24
-
25
- def _get_key(self, session_id):
26
- """
27
- Generate a Redis key with a specific prefix for a session.
28
-
29
- :param session_id: The session identifier.
30
- :return: A formatted Redis key string.
31
- """
32
- return f"sessions:{session_id}:history"
33
-
34
- def store_session(self, session_id: str, data: dict):
35
- """
36
- Store the session metadata.
37
-
38
- :param session_id: The session identifier.
39
- :param data: The session data to be stored.
40
- """
41
- self.redis_client.set(self._get_key(session_id), json.dumps(data))
42
-
43
- def get_session(self, session_id: str)->dict:
44
- """
45
- Retrieve the session.
46
-
47
- :param session_id: The session identifier.
48
- :return: The session metadata as a dictionary.
49
- """
50
- data = self.redis_client.get(self._get_key(session_id))
51
- return json.loads(data) if data else {}
52
-
53
- def get_all_sessions(self) -> list[str]:
54
- """
55
- Retrieve all session identifiers.
56
- """
57
- keys = self.redis_client.keys("sessions:*:history")
58
- return [key.split(":")[1] for key in keys]
59
-
60
- def delete_session(self, session_id: str):
61
- """
62
- Delete the session.
63
-
64
- :param session_id: The session identifier.
65
- """
66
- self.redis_client.delete(self._get_key(session_id))
@@ -1,93 +0,0 @@
1
- import json
2
-
3
- from .base_history_provider import BaseHistoryProvider
4
- from ....common.postgres_database import PostgreSQLDatabase
5
- from ....common.mysql_database import MySQLDatabase
6
-
7
-
8
- class DatabaseFactory:
9
- """
10
- Factory class to create database instances.
11
- """
12
- DATABASE_PROVIDERS = {
13
- "postgres": PostgreSQLDatabase,
14
- "mysql": MySQLDatabase,
15
- }
16
-
17
- @staticmethod
18
- def get_database(db_type, **kwargs):
19
- if db_type not in DatabaseFactory.DATABASE_PROVIDERS:
20
- raise ValueError(f"Unsupported database type: {db_type}")
21
- return DatabaseFactory.DATABASE_PROVIDERS[db_type](**kwargs)
22
-
23
- class SQLHistoryProvider(BaseHistoryProvider):
24
- """
25
- A history provider that stores session history in a SQL database.
26
- """
27
- def __init__(self, config=None):
28
- super().__init__(config)
29
- self.db_type = self.config.get("db_type", "postgres")
30
- self.table_name = self.config.get("table_name", "session_history")
31
- self.db = DatabaseFactory.get_database(
32
- self.db_type,
33
- host=self.config.get("sql_host"),
34
- user=self.config.get("sql_user"),
35
- password=self.config.get("sql_password"),
36
- database=self.config.get("sql_database"),
37
- )
38
- self._ensure_table_exists()
39
-
40
- def _ensure_table_exists(self):
41
- """
42
- Ensures the required table exists in the database.
43
- """
44
- query = f"""
45
- CREATE TABLE IF NOT EXISTS {self.table_name} (
46
- session_id TEXT PRIMARY KEY,
47
- data JSON
48
- )
49
- """
50
- self.db.execute(query)
51
-
52
- def store_session(self, session_id: str, data: dict):
53
- """
54
- Store or update session metadata.
55
- """
56
- query = f"""
57
- INSERT INTO {self.table_name} (session_id, data)
58
- VALUES (%s, %s)
59
- ON CONFLICT (session_id) DO UPDATE
60
- SET data = EXCLUDED.data
61
- """ if self.db_type == "postgres" else f"""
62
- INSERT INTO {self.table_name} (session_id, data)
63
- VALUES (%s, %s)
64
- ON DUPLICATE KEY UPDATE data = VALUES(data)
65
- """
66
- self.db.execute(query, (session_id, json.dumps(data)))
67
-
68
- def get_session(self, session_id: str) -> dict:
69
- """
70
- Retrieve a session by ID.
71
- """
72
- query = f"SELECT data FROM {self.table_name} WHERE session_id = %s"
73
- cursor = self.db.execute(query, (session_id,))
74
- row = cursor.fetchone()
75
- if not row or not row.get("data"):
76
- return {}
77
- data = row["data"] if isinstance(row["data"], dict) else json.loads(row["data"])
78
- return data
79
-
80
- def get_all_sessions(self) -> list[str]:
81
- """
82
- Retrieve all session identifiers.
83
- """
84
- query = f"SELECT session_id FROM {self.table_name}"
85
- cursor = self.db.execute(query)
86
- return [row["session_id"] for row in cursor.fetchall()]
87
-
88
- def delete_session(self, session_id: str):
89
- """
90
- Delete a session by ID. Since session_id is a PRIMARY KEY, only one row will be deleted.
91
- """
92
- query = f"DELETE FROM {self.table_name} WHERE session_id = %s"
93
- self.db.execute(query, (session_id,))
@@ -1,413 +0,0 @@
1
- import time
2
- import importlib
3
- import threading
4
- from typing import Union, Tuple
5
-
6
- from solace_ai_connector.common.log import log
7
-
8
- from ...common.time import ONE_HOUR, FIVE_MINUTES, ONE_DAY
9
- from ...common.constants import HISTORY_MEMORY_ROLE, HISTORY_ACTION_ROLE, HISTORY_USER_ROLE, HISTORY_ASSISTANT_ROLE
10
- from ..common import AutoExpiry, AutoExpirySingletonMeta
11
- from .history_providers.index import HistoryProviderFactory
12
- from .history_providers.base_history_provider import BaseHistoryProvider
13
- from .long_term_memory.long_term_memory import LongTermMemory
14
-
15
- DEFAULT_PROVIDER = "memory"
16
-
17
- DEFAULT_MAX_TURNS = 40
18
- DEFAULT_MAX_CHARACTERS = 50_000
19
- DEFAULT_SUMMARY_TIME_TO_LIVE = ONE_DAY * 5
20
-
21
- DEFAULT_HISTORY_POLICY = {
22
- "max_turns": DEFAULT_MAX_TURNS,
23
- "max_characters": DEFAULT_MAX_CHARACTERS,
24
- "enforce_alternate_message_roles": True,
25
- }
26
-
27
-
28
- # HistoryService class - Manages history storage and retrieval
29
- class HistoryService(AutoExpiry, metaclass=AutoExpirySingletonMeta):
30
- history_provider: BaseHistoryProvider
31
- long_term_memory_store: BaseHistoryProvider
32
- long_term_memory_service: LongTermMemory
33
-
34
- def __init__(self, config={}, identifier=None):
35
- """
36
- Initialize the history service.
37
- """
38
- self.identifier = identifier
39
- self.config = config
40
- self.time_to_live = self.config.get("time_to_live", ONE_HOUR)
41
- self.use_long_term_memory = self.config.get("enable_long_term_memory", False)
42
- self.expiration_check_interval = self.config.get(
43
- "expiration_check_interval", FIVE_MINUTES
44
- )
45
-
46
- self.history_policy = {
47
- **DEFAULT_HISTORY_POLICY,
48
- **self.config.get("history_policy", {}),
49
- }
50
-
51
- self.history_provider = self._get_history_provider(
52
- self.config.get("type", DEFAULT_PROVIDER),
53
- self.config.get("module_path"),
54
- self.history_policy
55
- )
56
-
57
- if self.use_long_term_memory:
58
- # Setting up the long-term memory service
59
- self.long_term_memory_config = self.config.get("long_term_memory_config", {})
60
- if not self.long_term_memory_config.get("llm_config"):
61
- raise ValueError("Missing required configuration for Long-Term Memory provider, Missing 'model' or 'api_key' in 'history_policy.long_term_memory_config.llm_config'.")
62
- self.long_term_memory_service = LongTermMemory(self.long_term_memory_config.get("llm_config"))
63
-
64
- # Setting up the long-term memory store
65
- store_config = self.long_term_memory_config.get("store_config", {})
66
- self.long_term_memory_store = self._get_history_provider(
67
- store_config.get("type", DEFAULT_PROVIDER),
68
- store_config.get("module_path"),
69
- store_config
70
- )
71
-
72
- # Start the background thread for auto-expiry
73
- self._start_auto_expiry_thread(self.expiration_check_interval)
74
-
75
- def _get_history_provider(self, provider_type:str, module_path:str="", config:dict={}):
76
- """
77
- Get the history provider based on the provider type.
78
- """
79
- if HistoryProviderFactory.has_provider(provider_type):
80
- return HistoryProviderFactory.get_provider_class(provider_type)(config)
81
- else:
82
- if not module_path:
83
- raise ValueError(
84
- f"Unsupported history provider type: {provider_type}. No module_path provided."
85
- )
86
- try:
87
- module_name = self.provider_type
88
- module = importlib.import_module(module_path, package=__package__)
89
- history_class = getattr(module, module_name)
90
- if not issubclass(history_class, BaseHistoryProvider):
91
- raise ValueError(
92
- f"History provider class {history_class} does not inherit from BaseHistoryProvider"
93
- )
94
- return history_class(config)
95
- except Exception as e:
96
- raise ImportError("Unable to load component: " + str(e)) from e
97
-
98
- def _delete_expired_items(self):
99
- """Checks all history entries and deletes those that have exceeded max_time_to_live."""
100
- current_time = time.time()
101
- sessions = self.history_provider.get_all_sessions()
102
- for session_id in sessions:
103
- session = self.history_provider.get_session(session_id)
104
- if not session:
105
- continue
106
- elapsed_time = current_time - session["last_active_time"]
107
- if elapsed_time > self.time_to_live:
108
- self.clear_history(session_id)
109
- log.debug("History for session %s has expired", session_id)
110
-
111
- def _get_empty_history_entry(self):
112
- """
113
- Get an empty history entry.
114
- """
115
- return {
116
- "history": [],
117
- "files": [],
118
- "summary": "",
119
- "last_active_time": time.time(),
120
- "num_characters": 0,
121
- "num_turns": 0,
122
- }
123
-
124
-
125
- def _merge_assistant_with_actions(self, assistant_message:str, history:list) -> Tuple[str, list]:
126
- """
127
- Merge assistant message with the actions called to generate the response.
128
- """
129
- actions_called = []
130
- # Looping reversely to get the most recent action
131
- index = len(history)
132
- for entry in reversed(history):
133
- if entry["role"] == HISTORY_ACTION_ROLE:
134
- actions_called.append(entry["content"])
135
- index -= 1
136
- else:
137
- break
138
- if actions_called:
139
- actions_called_str = ""
140
- for action_called in reversed(actions_called):
141
- actions_called_str += (
142
- f"\n - Agent: {action_called.get('agent_name')}"
143
- f"\n Action: {action_called.get('action_name')}"
144
- f"\n Action Parameters: {action_called.get('action_params')}"
145
- )
146
-
147
- actions_called_prompt = (
148
- "<message_metadata>\n"
149
- "[Following actions were called to generate this response:]"
150
- f"{actions_called_str}"
151
- "\n</message_metadata>\n\n"
152
- )
153
- assistant_message = f"{actions_called_prompt}{assistant_message}"
154
-
155
- return assistant_message, history[:index]
156
-
157
- def _filter_actions(self, history:list) -> list:
158
- """
159
- Filter out action entries from the history.
160
- """
161
- return [entry for entry in history if entry["role"] != HISTORY_ACTION_ROLE]
162
-
163
- def store_history(self, session_id: str, role: str, content: Union[str, dict], other_history_props: dict = {}):
164
- """
165
- Store a new entry in the history.
166
-
167
- :param session_id: The session identifier.
168
- :param role: The role of the entry to be stored in the history.
169
- :param content: The content of the entry to be stored in the history.
170
- :param other_history_props: Other history properties such as user identifier.
171
- """
172
- if not content:
173
- return
174
-
175
- user_identity = other_history_props.get("identity", session_id)
176
-
177
- history = self.history_provider.get_session(session_id).copy()
178
- if not history:
179
- history = self._get_empty_history_entry()
180
-
181
- if role == HISTORY_ASSISTANT_ROLE:
182
- content, history["history"] = self._merge_assistant_with_actions(content, history["history"])
183
- elif role == HISTORY_USER_ROLE:
184
- history["history"] = self._filter_actions(history["history"])
185
-
186
- if (
187
- self.history_policy.get("enforce_alternate_message_roles")
188
- and history["num_turns"] > 0
189
- # Check if the last entry was by the same role
190
- and history["history"]
191
- and history["history"][-1]["role"] == role
192
- ):
193
- # Append to last entry
194
- history["history"][-1]["content"] += "\n\n" + content
195
- else:
196
- # Add the new entry
197
- history["history"].append(
198
- {"role": role, "content": content}
199
- )
200
- # Update the number of turns
201
- history["num_turns"] += 1
202
-
203
- # Update the length
204
- history["num_characters"] += len(str(content))
205
- # Update the last active time
206
- history["last_active_time"] = time.time()
207
-
208
- # Extract memory from the last 2 messages if use long term memory is enabled
209
- if self.use_long_term_memory and role == HISTORY_USER_ROLE and len(history["history"]) > 2:
210
- recent_messages = history["history"][-3:-1].copy()
211
- def background_task():
212
- memory = self.long_term_memory_service.extract_memory_from_chat(recent_messages)
213
-
214
- if memory and (memory.get("facts") or memory.get("instructions") or memory.get("update_notes")):
215
- old_memory = self.long_term_memory_store.get_session(user_identity).get("memory", {})
216
- updated_memory = self.long_term_memory_service.update_user_memory(old_memory, memory)
217
- self.long_term_memory_store.update_session(user_identity, {
218
- "memory": updated_memory
219
- })
220
-
221
- threading.Thread(target=background_task).start()
222
-
223
- # Check if active session history requires truncation
224
- if ((self.history_policy.get("max_characters") and (history["num_characters"] > self.history_policy.get("max_characters")))
225
- or history["num_turns"] > self.history_policy.get("max_turns")):
226
-
227
- cut_off_index = 0
228
- if history["num_turns"] > self.history_policy.get("max_turns"):
229
- cut_off_index = max(0, int(self.history_policy.get("max_turns") * 0.5)) # 40% of max_turns
230
-
231
- if self.history_policy.get("max_characters") and (history["num_characters"] > self.history_policy.get("max_characters")):
232
- index = 0
233
- characters = 0
234
- while characters < self.history_policy.get("max_characters") and index < len(history["history"]) - 1:
235
- characters += len(str(history["history"][index]["content"]))
236
- index += 1
237
- cut_off_index = max(cut_off_index, index)
238
-
239
- cut_off_index = min(cut_off_index, len(history["history"])) # Ensure cut_off_index is within bounds
240
-
241
- if self.use_long_term_memory:
242
- cut_of_history = history["history"][:cut_off_index].copy()
243
- def background_summary_task():
244
- summary = self.long_term_memory_service.summarize_chat(cut_of_history)
245
- updated_summary = self.long_term_memory_service.update_summary(history["summary"], summary)
246
-
247
- fetched_history = self.history_provider.get_session(session_id).copy()
248
- if fetched_history:
249
- fetched_history["summary"] = updated_summary
250
- self.history_provider.store_session(session_id, fetched_history)
251
-
252
- threading.Thread(target=background_summary_task).start()
253
-
254
- history["history"] = history["history"][cut_off_index:]
255
- history["num_characters"] = sum(len(str(entry["content"])) for entry in history["history"])
256
- history["num_turns"] = len(history["history"])
257
- history["last_active_time"] = time.time()
258
-
259
- # Update the session history
260
- return self.history_provider.store_session(session_id, history)
261
-
262
-
263
- def get_history(self, session_id:str, other_history_props: dict = {}) -> list:
264
- """
265
- Retrieve the entire history.
266
-
267
- :param session_id: The session identifier.
268
- :param other_history_props: Other history properties such as user identifier.
269
- :return: The complete history.
270
- """
271
- history = self.history_provider.get_session(session_id)
272
- messages = history.get("history", [])
273
-
274
- if self.use_long_term_memory:
275
- user_identity = other_history_props.get("identity", session_id)
276
- stored_memory = self.long_term_memory_store.get_session(user_identity)
277
- if stored_memory:
278
- long_term_memory = self.long_term_memory_service.retrieve_user_memory(stored_memory.get("memory", {}), history.get("summary", ""))
279
- if long_term_memory:
280
- return [
281
- {
282
- "role": HISTORY_MEMORY_ROLE,
283
- "content": long_term_memory
284
- },
285
- *messages
286
- ]
287
-
288
- return messages
289
-
290
- def store_actions(self, session_id:str, actions:list):
291
- """
292
- Store an action in the history.
293
-
294
- :param session_id: The session identifier.
295
- :param actions: The actions to be stored in the history.
296
- """
297
- if not actions:
298
- return
299
-
300
- history = self.history_provider.get_session(session_id).copy()
301
- if not history:
302
- history = self._get_empty_history_entry()
303
-
304
- for action in actions:
305
- history["history"].append(
306
- {"role": HISTORY_ACTION_ROLE, "content": action}
307
- )
308
-
309
- history["last_active_time"] = time.time()
310
-
311
- return self.history_provider.store_session(session_id, history)
312
-
313
-
314
- def store_file(self, session_id:str, file:dict):
315
- """
316
- Store a file in the history.
317
-
318
- :param session_id: The session identifier.
319
- :param file: The file to be stored in the history.
320
- """
321
- if not file:
322
- return
323
-
324
- history = self.history_provider.get_session(session_id).copy()
325
- if not history:
326
- history = self._get_empty_history_entry()
327
-
328
- # Check duplicate
329
- for f in history["files"]:
330
- if f.get("url") and f.get("url") == file.get("url"):
331
- return
332
-
333
- history["files"].append(file)
334
- history["last_active_time"] = time.time()
335
-
336
- return self.history_provider.store_session(session_id, history)
337
-
338
- def get_files(self, session_id:str) -> list:
339
- """
340
- Retrieve the files for a session.
341
-
342
- :param session_id: The session identifier.
343
- :return: The files for the session.
344
- """
345
- history = self.history_provider.get_session(session_id)
346
- if not history:
347
- return []
348
-
349
- files = []
350
- current_time = time.time()
351
- all_files = history["files"].copy()
352
-
353
- for file in all_files:
354
- expiration_timestamp = file.get("expiration_timestamp")
355
- if expiration_timestamp and current_time > expiration_timestamp:
356
- history["files"].remove(file)
357
- continue
358
- files.append(file)
359
-
360
- self.history_provider.store_session(session_id, history)
361
- return files
362
-
363
-
364
- def clear_history(self, session_id:str, keep_levels=0, clear_files=True):
365
- """
366
- Clear the history and files, optionally keeping a specified number of recent entries.
367
-
368
- :param session_id: The session identifier.
369
- :param keep_levels: Number of most recent history entries to keep. Default is 0 (clear all).
370
- :param other_history_props: Other history properties such as user identifier.
371
- :param clear_files: Whether to clear associated files. Default is True.
372
- """
373
-
374
- history = self.history_provider.get_session(session_id).copy()
375
- if not history:
376
- return
377
-
378
- if history.get("history") or (clear_files and history.get("files")):
379
- cut_off_index = max(0, len(history["history"]) - keep_levels)
380
- cut_off_history = history["history"][:cut_off_index]
381
-
382
- if self.use_long_term_memory and cut_off_history:
383
- def background_task():
384
- summary = self.long_term_memory_service.summarize_chat(cut_off_history)
385
- updated_summary = self.long_term_memory_service.update_summary(history["summary"], summary)
386
-
387
- fetched_history = self.history_provider.get_session(session_id).copy()
388
- if fetched_history:
389
- fetched_history["summary"] = updated_summary
390
- self.history_provider.store_session(session_id, fetched_history)
391
- threading.Thread(target=background_task).start()
392
-
393
- history["history"] = [] if keep_levels <= 0 else history["history"][-keep_levels:]
394
- history["num_turns"] = keep_levels
395
- history["num_characters"] = sum(len(str(entry["content"])) for entry in history["history"])
396
- history["last_active_time"] = time.time()
397
-
398
- if clear_files:
399
- history["files"] = []
400
-
401
- return self.history_provider.store_session(session_id, history)
402
-
403
- # Summaries get cleared at a longer expiry time
404
- elif self.use_long_term_memory and history.get("summary"):
405
- elapsed_time = time.time() - history["last_active_time"]
406
- summary_ttl = self.long_term_memory_config.get("summary_time_to_live", DEFAULT_SUMMARY_TIME_TO_LIVE)
407
- if elapsed_time > summary_ttl:
408
- return self.history_provider.delete_session(session_id)
409
-
410
- # Delete the session if it has no chat history, files or summary
411
- else:
412
- return self.history_provider.delete_session(session_id)
413
-