solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.1__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 (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -181
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -256
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  508. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.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
-