solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (521) hide show
  1. solace_agent_mesh/__init__.py +5 -0
  2. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  3. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  4. solace_agent_mesh/agent/adk/callbacks.py +1716 -0
  5. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  6. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  7. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  8. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  9. solace_agent_mesh/agent/adk/runner.py +357 -0
  10. solace_agent_mesh/agent/adk/services.py +240 -0
  11. solace_agent_mesh/agent/adk/setup.py +751 -0
  12. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  13. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  14. solace_agent_mesh/agent/agent_llm.txt +41 -0
  15. solace_agent_mesh/agent/protocol/event_handlers.py +1444 -0
  16. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  17. solace_agent_mesh/agent/sac/app.py +640 -0
  18. solace_agent_mesh/agent/sac/component.py +3496 -0
  19. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  20. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  21. solace_agent_mesh/agent/sac/task_execution_context.py +185 -0
  22. solace_agent_mesh/agent/testing/__init__.py +3 -0
  23. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  24. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  25. solace_agent_mesh/agent/tools/__init__.py +14 -0
  26. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  27. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  28. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +571 -0
  30. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +290 -0
  32. solace_agent_mesh/agent/tools/registry.py +36 -0
  33. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  34. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  35. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  38. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  39. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  40. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  41. solace_agent_mesh/assets/docs/404.html +16 -0
  42. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  43. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  46. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  54. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  55. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  57. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  58. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.a8c5ce5a.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  105. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/f897a61a.f8c53b0f.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js +2 -0
  132. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js.LICENSE.txt +81 -0
  133. solace_agent_mesh/assets/docs/assets/js/runtime~main.d5133813.js +1 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +77 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  165. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  167. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  168. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  170. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  171. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  172. solace_agent_mesh/assets/docs/lunr-index-1754075282978.json +1 -0
  173. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc-1754075282978.json +1 -0
  175. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  176. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  177. solace_agent_mesh/cli/__init__.py +1 -1
  178. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  179. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  181. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  183. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  184. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  185. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  186. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  187. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  188. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  189. solace_agent_mesh/cli/commands/init_cmd/env_step.py +205 -0
  190. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  191. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +407 -0
  192. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  193. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  194. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +139 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  201. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  202. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  203. solace_agent_mesh/cli/main.py +17 -294
  204. solace_agent_mesh/cli/utils.py +135 -204
  205. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-D11Lmy9p.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/assets/main-Gfk3BYn5.js +663 -0
  210. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  211. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  212. solace_agent_mesh/common/__init__.py +1 -0
  213. solace_agent_mesh/common/a2a_protocol.py +564 -0
  214. solace_agent_mesh/common/agent_registry.py +42 -0
  215. solace_agent_mesh/common/client/__init__.py +4 -0
  216. solace_agent_mesh/common/client/card_resolver.py +21 -0
  217. solace_agent_mesh/common/client/client.py +85 -0
  218. solace_agent_mesh/common/client/client_llm.txt +133 -0
  219. solace_agent_mesh/common/common_llm.txt +144 -0
  220. solace_agent_mesh/common/constants.py +1 -14
  221. solace_agent_mesh/common/middleware/__init__.py +12 -0
  222. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  223. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  224. solace_agent_mesh/common/middleware/registry.py +125 -0
  225. solace_agent_mesh/common/server/__init__.py +4 -0
  226. solace_agent_mesh/common/server/server.py +122 -0
  227. solace_agent_mesh/common/server/server_llm.txt +169 -0
  228. solace_agent_mesh/common/server/task_manager.py +291 -0
  229. solace_agent_mesh/common/server/utils.py +28 -0
  230. solace_agent_mesh/common/services/__init__.py +4 -0
  231. solace_agent_mesh/common/services/employee_service.py +162 -0
  232. solace_agent_mesh/common/services/identity_service.py +129 -0
  233. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  234. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  235. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  236. solace_agent_mesh/common/services/services_llm.txt +132 -0
  237. solace_agent_mesh/common/types.py +411 -0
  238. solace_agent_mesh/common/utils/__init__.py +7 -0
  239. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  240. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  241. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  242. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  243. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  244. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  245. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  246. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  247. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  248. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  249. solace_agent_mesh/common/utils/initializer.py +51 -0
  250. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  251. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  252. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  253. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  254. solace_agent_mesh/config_portal/backend/common.py +66 -24
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +164 -0
  258. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  259. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  260. solace_agent_mesh/config_portal/backend/server.py +551 -181
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-_7yox_eh.js +48 -0
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-e5c3acfe.js +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  267. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  268. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  269. solace_agent_mesh/core_a2a/__init__.py +1 -0
  270. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  271. solace_agent_mesh/core_a2a/service.py +331 -0
  272. solace_agent_mesh/evaluation/config_loader.py +657 -0
  273. solace_agent_mesh/evaluation/evaluator.py +667 -0
  274. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  275. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  276. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  277. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  278. solace_agent_mesh/evaluation/report/modal.html +59 -0
  279. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  280. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  281. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  282. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  283. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  284. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  285. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  286. solace_agent_mesh/evaluation/report_generator.py +613 -0
  287. solace_agent_mesh/evaluation/run.py +613 -0
  288. solace_agent_mesh/evaluation/subscriber.py +872 -0
  289. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  290. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  291. solace_agent_mesh/gateway/base/__init__.py +1 -0
  292. solace_agent_mesh/gateway/base/app.py +266 -0
  293. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  294. solace_agent_mesh/gateway/base/component.py +1542 -0
  295. solace_agent_mesh/gateway/base/task_context.py +74 -0
  296. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  297. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  298. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  299. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  300. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  301. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  302. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  303. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  304. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  305. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  306. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  307. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +827 -0
  308. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  309. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  310. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  311. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  312. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  313. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  314. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  315. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  316. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  317. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  318. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  319. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  320. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  321. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  322. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  323. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  324. solace_agent_mesh/llm.txt +228 -0
  325. solace_agent_mesh/llm_detail.txt +2835 -0
  326. solace_agent_mesh/templates/agent_template.yaml +53 -0
  327. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  328. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  329. solace_agent_mesh/templates/gateway_component_template.py +431 -0
  330. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  331. solace_agent_mesh/templates/logging_config_template.ini +64 -0
  332. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  333. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  334. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  335. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  336. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  337. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  338. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  339. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  340. solace_agent_mesh/templates/shared_config.yaml +66 -0
  341. solace_agent_mesh/templates/templates_llm.txt +147 -0
  342. solace_agent_mesh/templates/webui.yaml +53 -0
  343. solace_agent_mesh-1.0.2.dist-info/METADATA +432 -0
  344. solace_agent_mesh-1.0.2.dist-info/RECORD +361 -0
  345. solace_agent_mesh-1.0.2.dist-info/entry_points.txt +3 -0
  346. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/licenses/LICENSE +1 -1
  347. solace_agent_mesh/agents/base_agent_component.py +0 -256
  348. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  349. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  350. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  351. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  352. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  353. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  354. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  355. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  356. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  357. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  358. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  359. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  360. solace_agent_mesh/agents/slack/__init__.py +0 -1
  361. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  362. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  363. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  364. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  365. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  366. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  367. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  368. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  369. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  370. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  371. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  372. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  373. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  374. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  375. solace_agent_mesh/cli/commands/add/add.py +0 -88
  376. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  377. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  378. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  379. solace_agent_mesh/cli/commands/build.py +0 -670
  380. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  382. solace_agent_mesh/cli/commands/config.py +0 -29
  383. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  384. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  385. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  386. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  387. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  388. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  389. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  390. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  391. solace_agent_mesh/cli/commands/init/init.py +0 -92
  392. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  393. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  394. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  395. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  396. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  397. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  398. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  399. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  400. solace_agent_mesh/cli/commands/run.py +0 -68
  401. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  402. solace_agent_mesh/cli/config.py +0 -85
  403. solace_agent_mesh/common/action.py +0 -91
  404. solace_agent_mesh/common/action_list.py +0 -37
  405. solace_agent_mesh/common/action_response.py +0 -340
  406. solace_agent_mesh/common/mysql_database.py +0 -40
  407. solace_agent_mesh/common/postgres_database.py +0 -85
  408. solace_agent_mesh/common/prompt_templates.py +0 -28
  409. solace_agent_mesh/common/stimulus_utils.py +0 -152
  410. solace_agent_mesh/common/time.py +0 -24
  411. solace_agent_mesh/common/utils.py +0 -712
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  414. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  415. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  416. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  417. solace_agent_mesh/configs/agent_global.yaml +0 -74
  418. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  419. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  420. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  421. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  422. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  423. solace_agent_mesh/configs/monitor.yaml +0 -0
  424. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  425. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  426. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  427. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  428. solace_agent_mesh/configs/service_llm.yaml +0 -265
  429. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  430. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  431. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  432. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  433. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  434. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  435. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  436. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  437. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  438. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  439. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  440. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  441. solace_agent_mesh/orchestrator/__init__.py +0 -0
  442. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  443. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  444. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  445. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  446. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  447. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  448. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  449. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  450. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  451. solace_agent_mesh/services/__init__.py +0 -0
  452. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  453. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  454. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  455. solace_agent_mesh/services/common/__init__.py +0 -4
  456. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  457. solace_agent_mesh/services/common/singleton.py +0 -18
  458. solace_agent_mesh/services/file_service/__init__.py +0 -14
  459. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  460. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  461. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  462. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  463. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  464. solace_agent_mesh/services/file_service/file_service.py +0 -437
  465. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  466. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  467. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  468. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  469. solace_agent_mesh/services/history_service/__init__.py +0 -3
  470. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  471. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  472. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  473. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  474. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  475. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  476. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  477. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  478. solace_agent_mesh/services/history_service/history_service.py +0 -413
  479. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  480. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  481. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  482. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  483. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  484. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  485. solace_agent_mesh/templates/action.py +0 -38
  486. solace_agent_mesh/templates/agent.py +0 -29
  487. solace_agent_mesh/templates/agent.yaml +0 -70
  488. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  489. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  490. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  491. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  492. solace_agent_mesh/templates/gateway_base.py +0 -15
  493. solace_agent_mesh/templates/gateway_input.py +0 -98
  494. solace_agent_mesh/templates/gateway_output.py +0 -71
  495. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  496. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  497. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  498. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  499. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  500. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  501. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  502. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  503. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  504. solace_agent_mesh/templates/web-flows.yaml +0 -76
  505. solace_agent_mesh/tools/__init__.py +0 -0
  506. solace_agent_mesh/tools/components/__init__.py +0 -0
  507. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  508. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  509. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  510. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  511. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  512. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  513. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  517. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  518. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  519. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  520. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  521. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,291 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Union, AsyncIterable, List
3
+ import asyncio
4
+ from solace_ai_connector.common.log import log
5
+ from ...common.types import (
6
+ Task,
7
+ JSONRPCResponse,
8
+ TaskIdParams,
9
+ TaskQueryParams,
10
+ GetTaskRequest,
11
+ TaskNotFoundError,
12
+ SendTaskRequest,
13
+ CancelTaskRequest,
14
+ TaskNotCancelableError,
15
+ SetTaskPushNotificationRequest,
16
+ GetTaskPushNotificationRequest,
17
+ GetTaskResponse,
18
+ CancelTaskResponse,
19
+ SendTaskResponse,
20
+ SetTaskPushNotificationResponse,
21
+ GetTaskPushNotificationResponse,
22
+ TaskSendParams,
23
+ TaskStatus,
24
+ TaskState,
25
+ TaskResubscriptionRequest,
26
+ SendTaskStreamingRequest,
27
+ SendTaskStreamingResponse,
28
+ Artifact,
29
+ PushNotificationConfig,
30
+ TaskStatusUpdateEvent,
31
+ JSONRPCError,
32
+ TaskPushNotificationConfig,
33
+ InternalError,
34
+ )
35
+ from ...common.server.utils import (
36
+ new_not_implemented_error,
37
+ )
38
+
39
+
40
+ class TaskManager(ABC):
41
+ @abstractmethod
42
+ async def on_get_task(self, request: GetTaskRequest) -> GetTaskResponse:
43
+ pass
44
+
45
+ @abstractmethod
46
+ async def on_cancel_task(self, request: CancelTaskRequest) -> CancelTaskResponse:
47
+ pass
48
+
49
+ @abstractmethod
50
+ async def on_send_task(self, request: SendTaskRequest) -> SendTaskResponse:
51
+ pass
52
+
53
+ @abstractmethod
54
+ async def on_send_task_subscribe(
55
+ self, request: SendTaskStreamingRequest
56
+ ) -> Union[AsyncIterable[SendTaskStreamingResponse], JSONRPCResponse]:
57
+ pass
58
+
59
+ @abstractmethod
60
+ async def on_set_task_push_notification(
61
+ self, request: SetTaskPushNotificationRequest
62
+ ) -> SetTaskPushNotificationResponse:
63
+ pass
64
+
65
+ @abstractmethod
66
+ async def on_get_task_push_notification(
67
+ self, request: GetTaskPushNotificationRequest
68
+ ) -> GetTaskPushNotificationResponse:
69
+ pass
70
+
71
+ @abstractmethod
72
+ async def on_resubscribe_to_task(
73
+ self, request: TaskResubscriptionRequest
74
+ ) -> Union[AsyncIterable[SendTaskResponse], JSONRPCResponse]:
75
+ pass
76
+
77
+
78
+ class InMemoryTaskManager(TaskManager):
79
+ def __init__(self):
80
+ self.tasks: dict[str, Task] = {}
81
+ self.push_notification_infos: dict[str, PushNotificationConfig] = {}
82
+ self.lock = asyncio.Lock()
83
+ self.task_sse_subscribers: dict[str, List[asyncio.Queue]] = {}
84
+ self.subscriber_lock = asyncio.Lock()
85
+
86
+ async def on_get_task(self, request: GetTaskRequest) -> GetTaskResponse:
87
+ log.info("Getting task %s", request.params.id)
88
+ task_query_params: TaskQueryParams = request.params
89
+
90
+ async with self.lock:
91
+ task = self.tasks.get(task_query_params.id)
92
+ if task is None:
93
+ return GetTaskResponse(id=request.id, error=TaskNotFoundError())
94
+
95
+ task_result = self.append_task_history(
96
+ task, task_query_params.historyLength
97
+ )
98
+
99
+ return GetTaskResponse(id=request.id, result=task_result)
100
+
101
+ async def on_cancel_task(self, request: CancelTaskRequest) -> CancelTaskResponse:
102
+ log.info("Cancelling task %s", request.params.id)
103
+ task_id_params: TaskIdParams = request.params
104
+
105
+ async with self.lock:
106
+ task = self.tasks.get(task_id_params.id)
107
+ if task is None:
108
+ return CancelTaskResponse(id=request.id, error=TaskNotFoundError())
109
+
110
+ return CancelTaskResponse(id=request.id, error=TaskNotCancelableError())
111
+
112
+ @abstractmethod
113
+ async def on_send_task(self, request: SendTaskRequest) -> SendTaskResponse:
114
+ pass
115
+
116
+ @abstractmethod
117
+ async def on_send_task_subscribe(
118
+ self, request: SendTaskStreamingRequest
119
+ ) -> Union[AsyncIterable[SendTaskStreamingResponse], JSONRPCResponse]:
120
+ pass
121
+
122
+ async def set_push_notification_info(
123
+ self, task_id: str, notification_config: PushNotificationConfig
124
+ ):
125
+ async with self.lock:
126
+ task = self.tasks.get(task_id)
127
+ if task is None:
128
+ raise ValueError("Task not found for %s" % task_id)
129
+
130
+ self.push_notification_infos[task_id] = notification_config
131
+
132
+ return
133
+
134
+ async def get_push_notification_info(self, task_id: str) -> PushNotificationConfig:
135
+ async with self.lock:
136
+ task = self.tasks.get(task_id)
137
+ if task is None:
138
+ raise ValueError("Task not found for %s" % task_id)
139
+
140
+ return self.push_notification_infos[task_id]
141
+
142
+ return
143
+
144
+ async def has_push_notification_info(self, task_id: str) -> bool:
145
+ async with self.lock:
146
+ return task_id in self.push_notification_infos
147
+
148
+ async def on_set_task_push_notification(
149
+ self, request: SetTaskPushNotificationRequest
150
+ ) -> SetTaskPushNotificationResponse:
151
+ log.info("Setting task push notification %s", request.params.id)
152
+ task_notification_params: TaskPushNotificationConfig = request.params
153
+
154
+ try:
155
+ await self.set_push_notification_info(
156
+ task_notification_params.id,
157
+ task_notification_params.pushNotificationConfig,
158
+ )
159
+ except Exception as e:
160
+ log.error(
161
+ "Error while setting push notification info: %s", e, exc_info=True
162
+ )
163
+ return JSONRPCResponse(
164
+ id=request.id,
165
+ error=InternalError(
166
+ message="An error occurred while setting push notification info"
167
+ ),
168
+ )
169
+
170
+ return SetTaskPushNotificationResponse(
171
+ id=request.id, result=task_notification_params
172
+ )
173
+
174
+ async def on_get_task_push_notification(
175
+ self, request: GetTaskPushNotificationRequest
176
+ ) -> GetTaskPushNotificationResponse:
177
+ log.info("Getting task push notification %s", request.params.id)
178
+ task_params: TaskIdParams = request.params
179
+
180
+ try:
181
+ notification_info = await self.get_push_notification_info(task_params.id)
182
+ except Exception as e:
183
+ log.error(
184
+ "Error while getting push notification info: %s", e, exc_info=True
185
+ )
186
+ return GetTaskPushNotificationResponse(
187
+ id=request.id,
188
+ error=InternalError(
189
+ message="An error occurred while getting push notification info"
190
+ ),
191
+ )
192
+
193
+ return GetTaskPushNotificationResponse(
194
+ id=request.id,
195
+ result=TaskPushNotificationConfig(
196
+ id=task_params.id, pushNotificationConfig=notification_info
197
+ ),
198
+ )
199
+
200
+ async def upsert_task(self, task_send_params: TaskSendParams) -> Task:
201
+ log.info("Upserting task %s", task_send_params.id)
202
+ async with self.lock:
203
+ task = self.tasks.get(task_send_params.id)
204
+ if task is None:
205
+ task = Task(
206
+ id=task_send_params.id,
207
+ sessionId=task_send_params.sessionId,
208
+ messages=[task_send_params.message],
209
+ status=TaskStatus(state=TaskState.SUBMITTED),
210
+ history=[task_send_params.message],
211
+ )
212
+ self.tasks[task_send_params.id] = task
213
+ else:
214
+ task.history.append(task_send_params.message)
215
+
216
+ return task
217
+
218
+ async def on_resubscribe_to_task(
219
+ self, request: TaskResubscriptionRequest
220
+ ) -> Union[AsyncIterable[SendTaskStreamingResponse], JSONRPCResponse]:
221
+ return new_not_implemented_error(request.id)
222
+
223
+ async def update_store(
224
+ self, task_id: str, status: TaskStatus, artifacts: list[Artifact]
225
+ ) -> Task:
226
+ async with self.lock:
227
+ try:
228
+ task = self.tasks[task_id]
229
+ except KeyError:
230
+ log.error("Task %s not found for updating the task", task_id)
231
+ raise ValueError("Task %s not found" % task_id)
232
+
233
+ task.status = status
234
+
235
+ if status.message is not None:
236
+ task.history.append(status.message)
237
+
238
+ if artifacts is not None:
239
+ if task.artifacts is None:
240
+ task.artifacts = []
241
+ task.artifacts.extend(artifacts)
242
+
243
+ return task
244
+
245
+ def append_task_history(self, task: Task, historyLength: int | None):
246
+ new_task = task.model_copy()
247
+ if historyLength is not None and historyLength > 0:
248
+ new_task.history = new_task.history[-historyLength:]
249
+ else:
250
+ new_task.history = []
251
+
252
+ return new_task
253
+
254
+ async def setup_sse_consumer(self, task_id: str, is_resubscribe: bool = False):
255
+ async with self.subscriber_lock:
256
+ if task_id not in self.task_sse_subscribers:
257
+ if is_resubscribe:
258
+ raise ValueError("Task not found for resubscription")
259
+ else:
260
+ self.task_sse_subscribers[task_id] = []
261
+
262
+ sse_event_queue = asyncio.Queue(maxsize=0) # <=0 is unlimited
263
+ self.task_sse_subscribers[task_id].append(sse_event_queue)
264
+ return sse_event_queue
265
+
266
+ async def enqueue_events_for_sse(self, task_id, task_update_event):
267
+ async with self.subscriber_lock:
268
+ if task_id not in self.task_sse_subscribers:
269
+ return
270
+
271
+ current_subscribers = self.task_sse_subscribers[task_id]
272
+ for subscriber in current_subscribers:
273
+ await subscriber.put(task_update_event)
274
+
275
+ async def dequeue_events_for_sse(
276
+ self, request_id, task_id, sse_event_queue: asyncio.Queue
277
+ ) -> AsyncIterable[SendTaskStreamingResponse] | JSONRPCResponse:
278
+ try:
279
+ while True:
280
+ event = await sse_event_queue.get()
281
+ if isinstance(event, JSONRPCError):
282
+ yield SendTaskStreamingResponse(id=request_id, error=event)
283
+ break
284
+
285
+ yield SendTaskStreamingResponse(id=request_id, result=event)
286
+ if isinstance(event, TaskStatusUpdateEvent) and event.final:
287
+ break
288
+ finally:
289
+ async with self.subscriber_lock:
290
+ if task_id in self.task_sse_subscribers:
291
+ self.task_sse_subscribers[task_id].remove(sse_event_queue)
@@ -0,0 +1,28 @@
1
+ from ...common.types import (
2
+ JSONRPCResponse,
3
+ ContentTypeNotSupportedError,
4
+ UnsupportedOperationError,
5
+ )
6
+ from typing import List
7
+
8
+
9
+ def are_modalities_compatible(
10
+ server_output_modes: List[str], client_output_modes: List[str]
11
+ ):
12
+ """Modalities are compatible if they are both non-empty
13
+ and there is at least one common element."""
14
+ if client_output_modes is None or len(client_output_modes) == 0:
15
+ return True
16
+
17
+ if server_output_modes is None or len(server_output_modes) == 0:
18
+ return True
19
+
20
+ return any(x in server_output_modes for x in client_output_modes)
21
+
22
+
23
+ def new_incompatible_types_error(request_id):
24
+ return JSONRPCResponse(id=request_id, error=ContentTypeNotSupportedError())
25
+
26
+
27
+ def new_not_implemented_error(request_id):
28
+ return JSONRPCResponse(id=request_id, error=UnsupportedOperationError())
@@ -0,0 +1,4 @@
1
+ """
2
+ This package contains shared, reusable services for the Solace AI Connector,
3
+ such as the IdentityService.
4
+ """
@@ -0,0 +1,162 @@
1
+ """
2
+ Defines the abstract base class and factory for creating Employee Service providers.
3
+ """
4
+
5
+ import importlib
6
+ from abc import ABC, abstractmethod
7
+ from typing import Any, Dict, List, Optional
8
+ import importlib.metadata as metadata
9
+
10
+ from solace_ai_connector.common.log import log
11
+ from ..utils.in_memory_cache import InMemoryCache
12
+ import pandas as pd
13
+
14
+
15
+ class BaseEmployeeService(ABC):
16
+ """
17
+ Abstract base class for Employee Service providers.
18
+
19
+ This class defines a "thin provider" contract. Implementations should focus
20
+ solely on fetching data from a source system (like an HR platform) and
21
+ mapping it to the canonical format. All complex business logic, such as
22
+ building organizational charts or calculating availability schedules, should
23
+ be handled by the tools that consume this service.
24
+
25
+ Canonical Employee Schema
26
+ This schema defines the standard fields that all EmployeeService providers should aim to return.
27
+ - id (string): A unique, stable, and lowercase identifier for the employee (e.g., email, GUID).
28
+ - displayName (string): The employee's full name for display purposes.
29
+ - workEmail (string): The employee's primary work email address.
30
+ - jobTitle (string): The employee's official job title.
31
+ - department (string): The department the employee belongs to.
32
+ - location (string): The physical or regional location of the employee.
33
+ - supervisorId (string): The unique id of the employee's direct manager.
34
+ - hireDate (string): The date the employee was hired (ISO 8601: YYYY-MM-DD).
35
+ - mobilePhone (string): The employee's mobile phone number (optional).
36
+
37
+ """
38
+
39
+ def __init__(self, config: Dict[str, Any]):
40
+ """
41
+ Initializes the service with its specific configuration block.
42
+
43
+ Args:
44
+ config: The dictionary of configuration parameters for this provider.
45
+ """
46
+ self.config = config
47
+ self.log_identifier = f"[{self.__class__.__name__}]"
48
+ self.cache_ttl = config.get("cache_ttl_seconds", 3600)
49
+ self.cache = InMemoryCache() if self.cache_ttl > 0 else None
50
+ log.info(
51
+ "%s Initialized. Cache TTL: %d seconds.",
52
+ self.log_identifier,
53
+ self.cache_ttl,
54
+ )
55
+
56
+ @abstractmethod
57
+ async def get_employee_dataframe(self) -> pd.DataFrame:
58
+ """Returns the entire employee directory as a pandas DataFrame."""
59
+ pass
60
+
61
+ @abstractmethod
62
+ async def get_employee_profile(self, employee_id: str) -> Optional[Dict[str, Any]]:
63
+ """Fetches the profile for a single employee."""
64
+ pass
65
+
66
+ @abstractmethod
67
+ async def get_time_off_data(self, employee_id: str) -> List[Dict[str, Any]]:
68
+ """
69
+ Retrieves a list of raw time-off entries for an employee.
70
+
71
+ The tool consuming this data is responsible for interpreting it.
72
+ Each dictionary in the list MUST contain the following keys:
73
+ - 'start' (str): The start date of the leave (YYYY-MM-DD).
74
+ - 'end' (str): The end date of the leave (YYYY-MM-DD).
75
+ - 'type' (str): The category of leave (e.g., 'Vacation', 'Sick', 'Holiday').
76
+ - 'amount' (str): The amount of time taken, must be one of 'full_day' or 'half_day'.
77
+
78
+ Example:
79
+ [
80
+ {'start': '2025-07-04', 'end': '2025-07-04', 'type': 'Holiday', 'amount': 'full_day'},
81
+ {'start': '2025-08-15', 'end': '2025-08-15', 'type': 'Vacation', 'amount': 'full_day'}
82
+ ]
83
+
84
+ Args:
85
+ employee_id: The unique identifier for the employee.
86
+
87
+ Returns:
88
+ A list of dictionaries, each representing a time-off entry.
89
+ """
90
+ pass
91
+
92
+ @abstractmethod
93
+ async def get_employee_profile_picture(self, employee_id: str) -> Optional[str]:
94
+ """
95
+ Fetches an employee's profile picture and returns it as a data URI.
96
+
97
+ Args:
98
+ employee_id: The unique identifier for the employee.
99
+
100
+ Returns:
101
+ A string containing the data URI (e.g., 'data:image/jpeg;base64,...')
102
+ or None if not available.
103
+ """
104
+ pass
105
+
106
+
107
+ def create_employee_service(
108
+ config: Optional[Dict[str, Any]],
109
+ ) -> Optional[BaseEmployeeService]:
110
+ """
111
+ Factory function to create an instance of an Employee Service provider
112
+ based on the provided configuration.
113
+ """
114
+ if not config:
115
+ log.info(
116
+ "[EmployeeFactory] No 'employee_service' configuration found. Skipping creation."
117
+ )
118
+ return None
119
+
120
+ provider_type = config.get("type")
121
+ if not provider_type:
122
+ raise ValueError("Employee service config must contain a 'type' key.")
123
+
124
+ log.info(
125
+ f"[EmployeeFactory] Attempting to create employee service of type: {provider_type}"
126
+ )
127
+
128
+ try:
129
+ entry_points = metadata.entry_points(group="solace_agent_mesh.plugins")
130
+ provider_info_entry = next(
131
+ (ep for ep in entry_points if ep.name == provider_type), None
132
+ )
133
+
134
+ if not provider_info_entry:
135
+ raise ValueError(
136
+ f"No plugin provider found for type '{provider_type}' under the 'solace_agent_mesh.plugins' entry point."
137
+ )
138
+
139
+ provider_info = provider_info_entry.load()
140
+ class_path = provider_info.get("class_path")
141
+ if not class_path:
142
+ raise ValueError(
143
+ f"Plugin '{provider_type}' is missing 'class_path' in its info dictionary."
144
+ )
145
+
146
+ module_path, class_name = class_path.rsplit(".", 1)
147
+ module = importlib.import_module(module_path)
148
+ provider_class = getattr(module, class_name)
149
+
150
+ if not issubclass(provider_class, BaseEmployeeService):
151
+ raise TypeError(
152
+ f"Provider class '{class_path}' does not inherit from BaseEmployeeService."
153
+ )
154
+
155
+ log.info(f"Successfully loaded employee provider plugin: {provider_type}")
156
+ return provider_class(config)
157
+ except (ImportError, AttributeError, TypeError, ValueError) as e:
158
+ log.exception(
159
+ f"[EmployeeFactory] Failed to load employee provider plugin '{provider_type}'. "
160
+ "Ensure the plugin is installed and the entry point is correct."
161
+ )
162
+ raise ValueError(f"Could not load employee provider plugin: {e}") from e
@@ -0,0 +1,129 @@
1
+ """
2
+ Defines the abstract base class and factory for creating Identity Service providers.
3
+ """
4
+
5
+ import importlib
6
+ from abc import ABC, abstractmethod
7
+ from typing import Any, Dict, List, Optional
8
+ import importlib.metadata as metadata
9
+
10
+ from solace_ai_connector.common.log import log
11
+ from ...common.utils.in_memory_cache import InMemoryCache
12
+
13
+
14
+ class BaseIdentityService(ABC):
15
+ """Abstract base class for all Identity Service providers."""
16
+
17
+ def __init__(self, config: Dict[str, Any]):
18
+ """
19
+ Initializes the service with its specific configuration block.
20
+
21
+ Args:
22
+ config: The dictionary of configuration parameters for this provider.
23
+ """
24
+ self.config = config
25
+ self.log_identifier = f"[{self.__class__.__name__}]"
26
+ self.cache_ttl = config.get("cache_ttl_seconds", 3600)
27
+ self.cache = InMemoryCache() if self.cache_ttl > 0 else None
28
+ log.info(
29
+ "%s Initialized. Cache TTL: %d seconds.",
30
+ self.log_identifier,
31
+ self.cache_ttl,
32
+ )
33
+
34
+ @abstractmethod
35
+ async def get_user_profile(
36
+ self, auth_claims: Dict[str, Any]
37
+ ) -> Optional[Dict[str, Any]]:
38
+ """
39
+ Fetches additional profile details for an already authenticated user.
40
+
41
+ Args:
42
+ auth_claims: A dictionary of claims from the primary authentication
43
+ system (e.g., decoded JWT, session data). It's guaranteed
44
+ to contain at least a primary user identifier.
45
+
46
+ Returns:
47
+ A dictionary containing additional user details (e.g., title, manager)
48
+ or None if the user is not found in this identity system.
49
+ """
50
+ pass
51
+
52
+ @abstractmethod
53
+ async def search_users(self, query: str, limit: int = 10) -> List[Dict[str, Any]]:
54
+ """
55
+ Searches for users based on a query string for autocomplete.
56
+
57
+ Args:
58
+ query: The partial name or email to search for.
59
+ limit: The maximum number of results to return.
60
+
61
+ Returns:
62
+ A list of dictionaries, each containing basic user info
63
+ (e.g., id, name, email, title).
64
+ """
65
+ pass
66
+
67
+
68
+ def create_identity_service(
69
+ config: Optional[Dict[str, Any]],
70
+ ) -> Optional[BaseIdentityService]:
71
+ """
72
+ Factory function to create an instance of an Identity Service provider
73
+ based on the provided configuration.
74
+ """
75
+ if not config:
76
+ log.info(
77
+ "[IdentityFactory] No 'identity_service' configuration found. Skipping creation."
78
+ )
79
+ return None
80
+
81
+ provider_type = config.get("type")
82
+ if not provider_type:
83
+ raise ValueError("Identity service config must contain a 'type' key.")
84
+
85
+ log.info(
86
+ f"[IdentityFactory] Attempting to create identity service of type: {provider_type}"
87
+ )
88
+
89
+ if provider_type == "local_file":
90
+ from .providers.local_file_identity_service import LocalFileIdentityService
91
+
92
+ return LocalFileIdentityService(config)
93
+
94
+ else:
95
+ try:
96
+ entry_points = metadata.entry_points(group="solace_agent_mesh.plugins")
97
+ provider_info_entry = next(
98
+ (ep for ep in entry_points if ep.name == provider_type), None
99
+ )
100
+
101
+ if not provider_info_entry:
102
+ raise ValueError(
103
+ f"No plugin provider found for type '{provider_type}' under the 'solace_agent_mesh.plugins' entry point."
104
+ )
105
+
106
+ provider_info = provider_info_entry.load()
107
+ class_path = provider_info.get("class_path")
108
+ if not class_path:
109
+ raise ValueError(
110
+ f"Plugin '{provider_type}' is missing 'class_path' in its info dictionary."
111
+ )
112
+
113
+ module_path, class_name = class_path.rsplit(".", 1)
114
+ module = importlib.import_module(module_path)
115
+ provider_class = getattr(module, class_name)
116
+
117
+ if not issubclass(provider_class, BaseIdentityService):
118
+ raise TypeError(
119
+ f"Provider class '{class_path}' does not inherit from BaseIdentityService."
120
+ )
121
+
122
+ log.info(f"Successfully loaded identity provider plugin: {provider_type}")
123
+ return provider_class(config)
124
+ except (ImportError, AttributeError, TypeError, ValueError) as e:
125
+ log.exception(
126
+ f"[IdentityFactory] Failed to load identity provider plugin '{provider_type}'. "
127
+ "Ensure the plugin is installed and the entry point is correct."
128
+ )
129
+ raise ValueError(f"Could not load identity provider plugin: {e}") from e
@@ -0,0 +1,4 @@
1
+ """
2
+ This package contains concrete implementations (providers) for the services
3
+ defined in the parent 'services' package.
4
+ """