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

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

Potentially problematic release.


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

Files changed (521) hide show
  1. solace_agent_mesh/__init__.py +5 -0
  2. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  3. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  4. solace_agent_mesh/agent/adk/callbacks.py +1716 -0
  5. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  6. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  7. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  8. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  9. solace_agent_mesh/agent/adk/runner.py +357 -0
  10. solace_agent_mesh/agent/adk/services.py +240 -0
  11. solace_agent_mesh/agent/adk/setup.py +751 -0
  12. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  13. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  14. solace_agent_mesh/agent/agent_llm.txt +41 -0
  15. solace_agent_mesh/agent/protocol/event_handlers.py +1444 -0
  16. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  17. solace_agent_mesh/agent/sac/app.py +640 -0
  18. solace_agent_mesh/agent/sac/component.py +3496 -0
  19. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  20. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  21. solace_agent_mesh/agent/sac/task_execution_context.py +185 -0
  22. solace_agent_mesh/agent/testing/__init__.py +3 -0
  23. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  24. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  25. solace_agent_mesh/agent/tools/__init__.py +14 -0
  26. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  27. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  28. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +571 -0
  30. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +290 -0
  32. solace_agent_mesh/agent/tools/registry.py +36 -0
  33. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  34. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  35. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  38. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  39. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  40. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  41. solace_agent_mesh/assets/docs/404.html +16 -0
  42. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  43. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  46. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  54. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  55. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  57. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  58. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.a8c5ce5a.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  105. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/f897a61a.f8c53b0f.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js +2 -0
  132. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js.LICENSE.txt +81 -0
  133. solace_agent_mesh/assets/docs/assets/js/runtime~main.d5133813.js +1 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +77 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  165. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  167. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  168. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  170. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  171. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  172. solace_agent_mesh/assets/docs/lunr-index-1754075282978.json +1 -0
  173. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc-1754075282978.json +1 -0
  175. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  176. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  177. solace_agent_mesh/cli/__init__.py +1 -1
  178. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  179. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  181. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  183. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  184. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  185. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  186. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  187. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  188. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  189. solace_agent_mesh/cli/commands/init_cmd/env_step.py +205 -0
  190. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  191. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +407 -0
  192. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  193. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  194. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +139 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  201. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  202. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  203. solace_agent_mesh/cli/main.py +17 -294
  204. solace_agent_mesh/cli/utils.py +135 -204
  205. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-D11Lmy9p.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/assets/main-Gfk3BYn5.js +663 -0
  210. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  211. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  212. solace_agent_mesh/common/__init__.py +1 -0
  213. solace_agent_mesh/common/a2a_protocol.py +564 -0
  214. solace_agent_mesh/common/agent_registry.py +42 -0
  215. solace_agent_mesh/common/client/__init__.py +4 -0
  216. solace_agent_mesh/common/client/card_resolver.py +21 -0
  217. solace_agent_mesh/common/client/client.py +85 -0
  218. solace_agent_mesh/common/client/client_llm.txt +133 -0
  219. solace_agent_mesh/common/common_llm.txt +144 -0
  220. solace_agent_mesh/common/constants.py +1 -14
  221. solace_agent_mesh/common/middleware/__init__.py +12 -0
  222. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  223. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  224. solace_agent_mesh/common/middleware/registry.py +125 -0
  225. solace_agent_mesh/common/server/__init__.py +4 -0
  226. solace_agent_mesh/common/server/server.py +122 -0
  227. solace_agent_mesh/common/server/server_llm.txt +169 -0
  228. solace_agent_mesh/common/server/task_manager.py +291 -0
  229. solace_agent_mesh/common/server/utils.py +28 -0
  230. solace_agent_mesh/common/services/__init__.py +4 -0
  231. solace_agent_mesh/common/services/employee_service.py +162 -0
  232. solace_agent_mesh/common/services/identity_service.py +129 -0
  233. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  234. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  235. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  236. solace_agent_mesh/common/services/services_llm.txt +132 -0
  237. solace_agent_mesh/common/types.py +411 -0
  238. solace_agent_mesh/common/utils/__init__.py +7 -0
  239. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  240. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  241. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  242. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  243. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  244. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  245. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  246. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  247. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  248. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  249. solace_agent_mesh/common/utils/initializer.py +51 -0
  250. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  251. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  252. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  253. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  254. solace_agent_mesh/config_portal/backend/common.py +66 -24
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +164 -0
  258. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  259. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  260. solace_agent_mesh/config_portal/backend/server.py +551 -181
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-_7yox_eh.js +48 -0
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-e5c3acfe.js +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  267. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  268. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  269. solace_agent_mesh/core_a2a/__init__.py +1 -0
  270. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  271. solace_agent_mesh/core_a2a/service.py +331 -0
  272. solace_agent_mesh/evaluation/config_loader.py +657 -0
  273. solace_agent_mesh/evaluation/evaluator.py +667 -0
  274. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  275. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  276. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  277. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  278. solace_agent_mesh/evaluation/report/modal.html +59 -0
  279. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  280. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  281. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  282. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  283. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  284. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  285. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  286. solace_agent_mesh/evaluation/report_generator.py +613 -0
  287. solace_agent_mesh/evaluation/run.py +613 -0
  288. solace_agent_mesh/evaluation/subscriber.py +872 -0
  289. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  290. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  291. solace_agent_mesh/gateway/base/__init__.py +1 -0
  292. solace_agent_mesh/gateway/base/app.py +266 -0
  293. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  294. solace_agent_mesh/gateway/base/component.py +1542 -0
  295. solace_agent_mesh/gateway/base/task_context.py +74 -0
  296. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  297. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  298. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  299. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  300. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  301. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  302. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  303. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  304. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  305. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  306. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  307. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +827 -0
  308. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  309. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  310. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  311. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  312. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  313. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  314. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  315. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  316. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  317. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  318. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  319. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  320. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  321. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  322. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  323. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  324. solace_agent_mesh/llm.txt +228 -0
  325. solace_agent_mesh/llm_detail.txt +2835 -0
  326. solace_agent_mesh/templates/agent_template.yaml +53 -0
  327. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  328. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  329. solace_agent_mesh/templates/gateway_component_template.py +431 -0
  330. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  331. solace_agent_mesh/templates/logging_config_template.ini +64 -0
  332. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  333. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  334. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  335. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  336. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  337. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  338. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  339. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  340. solace_agent_mesh/templates/shared_config.yaml +66 -0
  341. solace_agent_mesh/templates/templates_llm.txt +147 -0
  342. solace_agent_mesh/templates/webui.yaml +53 -0
  343. solace_agent_mesh-1.0.2.dist-info/METADATA +432 -0
  344. solace_agent_mesh-1.0.2.dist-info/RECORD +361 -0
  345. solace_agent_mesh-1.0.2.dist-info/entry_points.txt +3 -0
  346. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/licenses/LICENSE +1 -1
  347. solace_agent_mesh/agents/base_agent_component.py +0 -256
  348. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  349. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  350. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  351. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  352. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  353. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  354. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  355. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  356. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  357. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  358. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  359. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  360. solace_agent_mesh/agents/slack/__init__.py +0 -1
  361. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  362. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  363. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  364. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  365. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  366. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  367. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  368. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  369. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  370. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  371. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  372. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  373. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  374. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  375. solace_agent_mesh/cli/commands/add/add.py +0 -88
  376. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  377. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  378. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  379. solace_agent_mesh/cli/commands/build.py +0 -670
  380. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  382. solace_agent_mesh/cli/commands/config.py +0 -29
  383. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  384. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  385. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  386. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  387. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  388. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  389. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  390. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  391. solace_agent_mesh/cli/commands/init/init.py +0 -92
  392. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  393. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  394. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  395. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  396. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  397. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  398. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  399. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  400. solace_agent_mesh/cli/commands/run.py +0 -68
  401. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  402. solace_agent_mesh/cli/config.py +0 -85
  403. solace_agent_mesh/common/action.py +0 -91
  404. solace_agent_mesh/common/action_list.py +0 -37
  405. solace_agent_mesh/common/action_response.py +0 -340
  406. solace_agent_mesh/common/mysql_database.py +0 -40
  407. solace_agent_mesh/common/postgres_database.py +0 -85
  408. solace_agent_mesh/common/prompt_templates.py +0 -28
  409. solace_agent_mesh/common/stimulus_utils.py +0 -152
  410. solace_agent_mesh/common/time.py +0 -24
  411. solace_agent_mesh/common/utils.py +0 -712
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  414. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  415. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  416. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  417. solace_agent_mesh/configs/agent_global.yaml +0 -74
  418. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  419. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  420. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  421. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  422. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  423. solace_agent_mesh/configs/monitor.yaml +0 -0
  424. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  425. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  426. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  427. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  428. solace_agent_mesh/configs/service_llm.yaml +0 -265
  429. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  430. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  431. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  432. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  433. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  434. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  435. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  436. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  437. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  438. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  439. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  440. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  441. solace_agent_mesh/orchestrator/__init__.py +0 -0
  442. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  443. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  444. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  445. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  446. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  447. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  448. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  449. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  450. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  451. solace_agent_mesh/services/__init__.py +0 -0
  452. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  453. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  454. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  455. solace_agent_mesh/services/common/__init__.py +0 -4
  456. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  457. solace_agent_mesh/services/common/singleton.py +0 -18
  458. solace_agent_mesh/services/file_service/__init__.py +0 -14
  459. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  460. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  461. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  462. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  463. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  464. solace_agent_mesh/services/file_service/file_service.py +0 -437
  465. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  466. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  467. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  468. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  469. solace_agent_mesh/services/history_service/__init__.py +0 -3
  470. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  471. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  472. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  473. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  474. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  475. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  476. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  477. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  478. solace_agent_mesh/services/history_service/history_service.py +0 -413
  479. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  480. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  481. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  482. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  483. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  484. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  485. solace_agent_mesh/templates/action.py +0 -38
  486. solace_agent_mesh/templates/agent.py +0 -29
  487. solace_agent_mesh/templates/agent.yaml +0 -70
  488. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  489. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  490. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  491. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  492. solace_agent_mesh/templates/gateway_base.py +0 -15
  493. solace_agent_mesh/templates/gateway_input.py +0 -98
  494. solace_agent_mesh/templates/gateway_output.py +0 -71
  495. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  496. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  497. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  498. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  499. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  500. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  501. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  502. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  503. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  504. solace_agent_mesh/templates/web-flows.yaml +0 -76
  505. solace_agent_mesh/tools/__init__.py +0 -0
  506. solace_agent_mesh/tools/components/__init__.py +0 -0
  507. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  508. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  509. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  510. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  511. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  512. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  513. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  517. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  518. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  519. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  520. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  521. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/WHEEL +0 -0
@@ -1,106 +0,0 @@
1
- import os
2
- import json
3
-
4
- from .file_manager_base import FileManagerBase
5
- from ..file_service_constants import FS_PROTOCOL
6
-
7
- DEFAULT_DIRECTORY = f"/tmp/{FS_PROTOCOL}"
8
-
9
-
10
- class VolumeFileManager(FileManagerBase):
11
-
12
- def __init__(self, config, ttl):
13
- self.config = config
14
- self.ttl = ttl
15
- self.shared_volume_directory = config.get("directory", DEFAULT_DIRECTORY)
16
- if not os.path.exists(self.shared_volume_directory):
17
- os.makedirs(self.shared_volume_directory)
18
-
19
- def _save_metadata(self, file_path: str, metadata: dict):
20
- metadata_path = self._get_metadata_name(file_path)
21
- with open(metadata_path, "w", encoding="utf-8") as metadata_file:
22
- json.dump(metadata, metadata_file, indent=4)
23
-
24
- def upload_from_buffer(self, buffer: bytes, file_name: str, **kwargs) -> dict:
25
- file_signature = self._generate_file_signature(file_name)
26
- file_path = os.path.join(self.shared_volume_directory, file_signature)
27
-
28
- metadata = self._create_metadata(file_signature, file_name, buffer, kwargs)
29
-
30
- with open(file_path, "wb") as file:
31
- file.write(buffer)
32
-
33
- self._save_metadata(file_path, metadata)
34
-
35
- return metadata
36
-
37
- def upload_from_file(self, file_path: str, **kwargs) -> dict:
38
- if not os.path.isfile(file_path):
39
- raise FileNotFoundError(f"The file {file_path} does not exist.")
40
-
41
- file_name = os.path.basename(file_path)
42
-
43
- with open(file_path, "rb") as source_file:
44
- buffer = source_file.read()
45
-
46
- return self.upload_from_buffer(buffer, file_name, **kwargs)
47
-
48
- def download_to_buffer(self, file_name: str) -> bytes:
49
- file_path = os.path.join(self.shared_volume_directory, file_name)
50
- if not os.path.exists(file_path):
51
- raise FileNotFoundError(
52
- f"The file at {file_name} does not exist in the shared volume."
53
- )
54
-
55
- with open(file_path, "rb") as file:
56
- buffer = file.read()
57
-
58
- return buffer
59
-
60
- def download_to_file(self, file_name: str, destination_path: str):
61
- buffer = self.download_to_buffer(file_name)
62
- with open(destination_path, "wb") as destination_file:
63
- destination_file.write(buffer)
64
-
65
- def get_metadata(self, file_name: str) -> dict:
66
- metadata_name = self._get_metadata_name(file_name)
67
- metadata_path = os.path.join(self.shared_volume_directory, metadata_name)
68
-
69
- if not os.path.exists(metadata_path):
70
- raise FileNotFoundError(
71
- f"The metadata for the file at {file_name} does not exist."
72
- )
73
-
74
- with open(metadata_path, "r", encoding="utf-8") as metadata_file:
75
- metadata = json.load(metadata_file)
76
-
77
- return metadata
78
-
79
- def delete_by_name(self, file_name: str):
80
- file_path = os.path.join(self.shared_volume_directory, file_name)
81
- metadata_path = self._get_metadata_name(file_path)
82
-
83
- # Delete the main file
84
- if os.path.exists(file_path):
85
- os.remove(file_path)
86
- os.remove(metadata_path)
87
- else:
88
- raise FileNotFoundError(
89
- f"The file at {file_name} does not exist in the shared volume."
90
- )
91
-
92
- def update_file_expiration(self, file_signature, expiration_timestamp):
93
- metadata = self.get_metadata(file_signature)
94
- metadata["expiration_timestamp"] = expiration_timestamp
95
- file_path = os.path.join(self.shared_volume_directory, file_signature)
96
- self._save_metadata(file_path, metadata)
97
-
98
- def list_all_metadata(self) -> list:
99
- all_metadata = []
100
- for file_name in os.listdir(self.shared_volume_directory):
101
- if file_name.endswith(".metadata"):
102
- metadata_path = os.path.join(self.shared_volume_directory, file_name)
103
- with open(metadata_path, "r", encoding="utf-8") as metadata_file:
104
- metadata = json.load(metadata_file)
105
- all_metadata.append(metadata)
106
- return all_metadata
@@ -1,437 +0,0 @@
1
- import importlib
2
- import time
3
- import json
4
- import re
5
- from urllib.parse import urlencode, urlparse, urlunparse, parse_qsl
6
-
7
- from solace_ai_connector.common.log import log
8
-
9
- from ...common.time import ONE_DAY, TEN_MINUTES
10
- from ..common import AutoExpiry, AutoExpirySingletonMeta
11
- from .file_manager.bucket_file_manager import BucketFileManager
12
- from .file_manager.volume_file_manager import VolumeFileManager
13
- from .file_manager.memory_file_manager import MemoryFileManager
14
- from .file_manager.file_manager_base import FileManagerBase
15
- from .file_service_constants import FS_PROTOCOL, INDENT_SIZE, DEFAULT_FILE_MANAGER, BLOCK_IGNORE_KEYS, BLOCK_TAG_KEYS, FS_URL_REGEX
16
- from .file_transformations import apply_file_transformations
17
- from .file_utils import starts_with_fs_url
18
- from ...tools.config.runtime_config import get_service_config
19
-
20
- FILE_MANAGERS = {
21
- "bucket": BucketFileManager,
22
- "volume": VolumeFileManager,
23
- "memory": MemoryFileManager,
24
- }
25
-
26
-
27
- class FileServicePermissionError(Exception):
28
- pass
29
-
30
-
31
- # FileService class - Manages file storage and retrieval
32
- class FileService(AutoExpiry, metaclass=AutoExpirySingletonMeta):
33
- file_manager: FileManagerBase
34
-
35
- def __init__(self, config=None, identifier=None) -> None:
36
- self.identifier = identifier
37
- self._expiry_thread = None
38
- config = config or get_service_config("file_service")
39
- self.service_type = config.get("type", DEFAULT_FILE_MANAGER)
40
- self.max_time_to_live = config.get("max_time_to_live", ONE_DAY)
41
- self.expiration_check_interval = config.get(
42
- "expiration_check_interval", TEN_MINUTES
43
- )
44
-
45
- if self.service_type not in config.get("config", {}):
46
- raise ValueError(
47
- f"Missing configuration for file service type: {self.service_type}"
48
- )
49
- self.service_config = config.get("config").get(self.service_type)
50
-
51
- if self.service_type not in FILE_MANAGERS and not self.service_config.get(
52
- "module_path"
53
- ):
54
- raise ValueError(
55
- f"Unsupported file service type: {self.service_type}. No module_path provided."
56
- )
57
-
58
- if self.service_type in FILE_MANAGERS:
59
- # Load built-in history provider
60
- self.file_manager = FILE_MANAGERS[self.service_type](
61
- self.service_config, self.max_time_to_live
62
- )
63
- else:
64
- try:
65
- # Load the provider from the module path
66
- module_name = self.service_type
67
- module_path = self.service_config.get("module_path")
68
- module = importlib.import_module(module_path, package=__package__)
69
- manager_class = getattr(module, module_name)
70
- if not issubclass(manager_class, FileManagerBase):
71
- raise ValueError(
72
- f"Provided class {manager_class} does not inherit from FileManagerBase"
73
- )
74
- self.file_manager = manager_class(
75
- self.service_config, self.max_time_to_live
76
- )
77
- except Exception as e:
78
- raise ImportError("Unable to load component: " + str(e)) from e
79
-
80
- # Start the background thread for auto-expiry
81
- self._start_auto_expiry_thread(self.expiration_check_interval)
82
-
83
- def _delete_expired_items(self):
84
- """Checks all files and deletes those that have exceeded max_time_to_live."""
85
- all_files_metadata = self.file_manager.list_all_metadata()
86
- current_time = time.time()
87
- for metadata in all_files_metadata:
88
- current_time = time.time()
89
- expiration_timestamp = metadata["expiration_timestamp"]
90
-
91
- if current_time > expiration_timestamp:
92
- try:
93
- filename, _ = self.get_parsed_url(metadata["url"])
94
- self.file_manager.delete_by_name(filename)
95
- log.info(
96
- f"Deleted expired file: {metadata['url']} {current_time} > {expiration_timestamp}"
97
- )
98
- except FileNotFoundError:
99
- log.warning(f"File not found: {metadata['url']}")
100
- except Exception as e:
101
- log.error(
102
- f"Failed to delete expired file: {metadata['url']} with error: {e}"
103
- )
104
-
105
- def _validate_file_url(self, file_url: str):
106
- if not starts_with_fs_url(file_url):
107
- raise ValueError(
108
- f"Invalid URL format. URL must start with '{FS_PROTOCOL}://'"
109
- )
110
-
111
- def list_all_metadata(self, session_id: str):
112
- all_files_metadata = self.file_manager.list_all_metadata()
113
- return [
114
- metadata
115
- for metadata in all_files_metadata
116
- if metadata.get("session_id") == session_id
117
- ]
118
-
119
-
120
- def validate_access_permission(
121
- self, filename: str, session_id: str, return_metadata=False
122
- ):
123
- if not session_id:
124
- raise ValueError("Invalid session ID used for accessing file")
125
- metadata = self.file_manager.get_metadata(filename)
126
- if metadata.get("session_id") != session_id:
127
- raise FileServicePermissionError(f"Access denied to file: {filename}")
128
- current_time = time.time()
129
- if current_time > metadata.get("expiration_timestamp"):
130
- raise FileServicePermissionError(f"File has expired: {filename}")
131
- if return_metadata:
132
- return metadata
133
-
134
- def get_parsed_url(self, file_url: str):
135
- self._validate_file_url(file_url)
136
-
137
- if file_url.startswith("<url>") and file_url.endswith("</url>"):
138
- file_url = file_url[5:-6].strip()
139
-
140
- # Parse the URL into its components
141
- url_parts = urlparse(file_url)
142
-
143
- filename = url_parts[1]
144
-
145
- # Get the query parameters
146
- query = dict(parse_qsl(url_parts[4]))
147
- return filename, query
148
-
149
- def upload_from_buffer(
150
- self,
151
- buffer: bytes,
152
- file_name: str,
153
- session_id: str,
154
- **kwargs,
155
- ) -> dict:
156
- """
157
- Upload a file from a buffer.
158
- kwargs are added to metadata
159
- kwargs are over-written by default metadata if they have the same key.
160
- The official support kwargs are:
161
- - schema_yaml: str
162
- - shape: str
163
- - data_source: str
164
- """
165
- if type(buffer) == str:
166
- buffer = buffer.encode("utf-8")
167
- elif type(buffer) != bytes:
168
- raise ValueError("Invalid buffer type. Expected bytes or string.")
169
-
170
- return self.file_manager.upload_from_buffer(
171
- buffer,
172
- file_name,
173
- session_id=session_id,
174
- **kwargs,
175
- )
176
-
177
- def upload_from_file(self, file_path: str, session_id: str, **kwargs) -> dict:
178
- """
179
- Upload a file from a file path.
180
- kwargs are added to metadata
181
- kwargs are over-written by default metadata if they have the same key.
182
- The official support kwargs are:
183
- - schema_yaml: str
184
- - shape: str
185
- - data_source: str
186
- """
187
- return self.file_manager.upload_from_file(
188
- file_path, session_id=session_id, **kwargs
189
- )
190
-
191
- def get_metadata(self, file_url: str) -> dict:
192
- """
193
- Get metadata from a file URL.
194
- """
195
- filename, _ = self.get_parsed_url(file_url)
196
- return self.file_manager.get_metadata(filename)
197
-
198
- def download_to_buffer(self, file_url: str, session_id: str) -> bytes:
199
- """
200
- Download a file to a buffer.
201
- """
202
- filename, _ = self.get_parsed_url(file_url)
203
- self.validate_access_permission(filename, session_id)
204
- return self.file_manager.download_to_buffer(filename)
205
-
206
- def download_to_file(self, file_url: str, destination_path: str, session_id: str):
207
- """
208
- Download a file to a destination path.
209
- """
210
- filename, _ = self.get_parsed_url(file_url)
211
- self.validate_access_permission(filename, session_id)
212
- return self.file_manager.download_to_file(filename, destination_path)
213
-
214
- def delete_by_url(self, file_url: str):
215
- """
216
- Delete a file by URL.
217
- """
218
- filename, _ = self.get_parsed_url(file_url)
219
- return self.file_manager.delete_by_name(filename)
220
-
221
- def update_file_expiration(self, file_url: str, expiration_timestamp: float):
222
- """
223
- Update the expiration timestamp for a file.
224
- """
225
- filename, _ = self.get_parsed_url(file_url)
226
- return self.file_manager.update_file_expiration(filename, expiration_timestamp)
227
-
228
- def get_file_block_by_url(self, file_url: str) -> str:
229
- """
230
- Get file block LLM by URL in a format understandable by the LLM.
231
- """
232
- metadata = self.get_metadata(file_url)
233
- return self.get_file_block_by_metadata(metadata)
234
-
235
- @staticmethod
236
- def get_file_block_by_metadata(metadata: dict, tag_prefix: str = "") -> str:
237
- """
238
- Get file block LLM by metadata in a format understandable by the LLM.
239
- """
240
- block = ""
241
- head = f"<{tag_prefix}file "
242
- tail = f"\n</{tag_prefix}file>"
243
- body = ""
244
- tags = ""
245
-
246
- def indent(text: str, size=INDENT_SIZE) -> str:
247
- space = " " * size
248
- return space + f"\n{space}".join(text.split("\n")).strip()
249
-
250
- for key, value in metadata.items():
251
- if key in BLOCK_IGNORE_KEYS or key in BLOCK_TAG_KEYS or value is None:
252
- continue
253
- tags += f'{key}="{value}" '
254
-
255
- if "url" in metadata and metadata["url"]:
256
- if metadata["url"].startswith(FS_PROTOCOL):
257
- body += f'<url>\n{indent(metadata["url"])}\n</url>\n'
258
- else:
259
- tags += f'url="{metadata["url"]}" '
260
-
261
- for key in BLOCK_TAG_KEYS:
262
- if key in metadata and metadata[key] is not None:
263
- tag = key.replace("_", "-")
264
- body += f"<{tag}>\n{indent(metadata[key])}\n</{tag}>\n"
265
-
266
- if body:
267
- block = head + tags + ">\n" + indent(body) + tail
268
- else:
269
- block = head + tags + "/>"
270
-
271
- return block
272
-
273
- def resolve_url(self, file_url, session_id: str, return_extra=False) -> bytes | str:
274
- """
275
- Resolve a URL to its actual file URL and applies the necessary transformations (from query parameters)
276
-
277
- Parameters:
278
- - file_url (str): The URL to resolve.
279
- - return_extra (bool): Whether to return original file content and metadata along with the resolved URL.
280
-
281
- Returns:
282
- - bytes|str: The resolved file content. Applies query transformations if any.
283
- """
284
- filename, queries = self.get_parsed_url(file_url)
285
- file_metadata = self.validate_access_permission(
286
- filename, session_id, return_metadata=True
287
- )
288
- file_bytes = self.file_manager.download_to_buffer(filename)
289
- if return_extra:
290
- return (
291
- apply_file_transformations(file_bytes, file_metadata, queries),
292
- file_bytes,
293
- file_metadata,
294
- )
295
- return apply_file_transformations(file_bytes, file_metadata, queries)
296
-
297
- def resolve_all_resolvable_urls(
298
- self, text: str, session_id: str, forceResolve=False
299
- ) -> str:
300
- """
301
- Resolve all resolvable URLs in a text
302
-
303
- Parameters:
304
- - text (str): The text to resolve URLs in.
305
- - forceResolve (bool): Whether to force resolve all URLs (if false, only URLs with 'resolve' query parameter set to True will be resolved).
306
- """
307
- cache = {}
308
-
309
- if not session_id:
310
- raise ValueError("Invalid session ID used for resolving URLs")
311
-
312
- def replace_url(match):
313
- raw_url = match.group()
314
- url = FileService._clean_url(raw_url)
315
- try:
316
- filename, queries = self.get_parsed_url(url)
317
-
318
- resolvable = queries.get("resolve", False)
319
- resolvable = (
320
- resolvable
321
- if isinstance(resolvable, bool)
322
- else resolvable.lower() == "true"
323
- )
324
- if not resolvable and not forceResolve:
325
- return raw_url
326
-
327
- if filename in cache:
328
- metadata = cache[filename][0]
329
- file_bytes = cache[filename][1]
330
- else:
331
- metadata = self.validate_access_permission(
332
- filename, session_id, return_metadata=True
333
- )
334
- file_bytes = self.file_manager.download_to_buffer(filename)
335
- cache[filename] = (metadata, file_bytes)
336
-
337
- response = apply_file_transformations(file_bytes, metadata, queries)
338
- # Convert type to string
339
- if type(response) == bytes:
340
- response = response.decode("utf-8", "ignore")
341
- elif type(response) == str:
342
- pass
343
- else:
344
- response = json.dumps(response)
345
- # If initial URl was in quotes, return the response in quotes
346
- if raw_url.startswith('"') or raw_url.startswith("'"):
347
- response = f"{raw_url[0]}{response}"
348
-
349
- if raw_url.endswith('"') or raw_url.endswith("'"):
350
- response = f"{response}{raw_url[-1]}"
351
- elif raw_url.endswith("',") or raw_url.endswith('",'):
352
- response = f"{response}{''.join(raw_url[-2:])}"
353
- # If initial URL ends with a comma, return the response with a comma
354
- elif raw_url.endswith(","):
355
- response = f"{response},"
356
- return response
357
- except FileServicePermissionError as e:
358
- raise e
359
- except Exception as e:
360
- log.error(f"Failed to resolve URL: {raw_url} with error: {e}")
361
- raise e
362
-
363
- return re.sub(FS_URL_REGEX, replace_url, text)
364
-
365
- @staticmethod
366
- def get_urls_from_text(text: str) -> list:
367
- """
368
- Get all file URLs from a file block or text
369
- """
370
- urls = []
371
-
372
- def append_url(match):
373
- raw_url = match.group()
374
- url = FileService._clean_url(raw_url)
375
- urls.append(url)
376
- return raw_url
377
-
378
- re.sub(FS_URL_REGEX, append_url, text)
379
- return urls
380
-
381
- @staticmethod
382
- def _clean_url(url: str) -> str:
383
- """
384
- Clean up a URL by removing any extra characters
385
- """
386
- url = url.strip()
387
- if url.endswith(","):
388
- url = url[:-1]
389
- if url.startswith('"') or url.startswith("'"):
390
- url = url[1:]
391
- if url.startswith("<url>"):
392
- url = url[5:-6].strip()
393
- if url.endswith('"') or url.endswith("'") or url.endswith(","):
394
- url = url[:-1]
395
- if url.endswith(")"):
396
- open_parenthesis_count = url.count("(")
397
- close_parenthesis_count = url.count(")")
398
- if close_parenthesis_count > open_parenthesis_count:
399
- url = url[:-1]
400
- return url
401
-
402
- @staticmethod
403
- def get_query_params_from_url(url: str) -> dict:
404
- """
405
- Get query parameters from a URL
406
- """
407
- # Parse the URL into its components
408
- url_parts = urlparse(url)
409
-
410
- # Get the query parameters
411
- query = dict(parse_qsl(url_parts[4]))
412
- return query
413
-
414
- @staticmethod
415
- def add_query_params_to_url(url, params):
416
- """
417
- Add query parameters to a URL
418
- """
419
- # Parse the URL into its components
420
- url_parts = list(urlparse(url))
421
-
422
- # Get existing query parameters and update them with the new params
423
- query = dict(parse_qsl(url_parts[4]))
424
- query.update(params)
425
-
426
- queries = {}
427
- for key, value in query.items():
428
- if type(value) == str:
429
- queries[key] = value
430
- else:
431
- queries[key] = json.dumps(value)
432
-
433
- # Encode updated query parameters back into the URL
434
- url_parts[4] = urlencode(queries)
435
-
436
- # Rebuild the URL with the updated query string
437
- return urlunparse(url_parts)
@@ -1,54 +0,0 @@
1
- FS_PROTOCOL = "amfs"
2
- """
3
- mesh file service protocol.
4
- """
5
-
6
- META_FILE_EXTENSION = ".metadata"
7
- """
8
- Extension for metadata files.
9
- """
10
-
11
- INDENT_SIZE = 2
12
- """
13
- Indent size for XML representation.
14
- """
15
-
16
- DEFAULT_FILE_MANAGER = "volume"
17
- """
18
- Default file manager to use.
19
- """
20
-
21
-
22
- BLOCK_IGNORE_KEYS = [
23
- "session_id",
24
- "upload_timestamp",
25
- "url",
26
- ]
27
- """
28
- Keys to ignore from metadata file attribute while generating file block.
29
- """
30
-
31
- BLOCK_TAG_KEYS = [
32
- "data",
33
- "schema-yaml",
34
- "schema_yaml",
35
- "shape",
36
- "data-source",
37
- "data_source",
38
- ]
39
- """
40
- Keys to be treated as tags in the file block, and not file attributes.
41
- """
42
-
43
- FS_URL_REGEX = r"""<url>\s*({protocol}:\/\/.+?)\s*<\/url>|{protocol}:\/\/[^\s\?]+(\s|$)|{protocol}:\/\/[^\n\?]+\?.*?(?=\n|$|>)|\"({protocol}:\/\/[^\"]+?)(\"|\n)|'({protocol}:\/\/[^']+?)('|\n)""".format(
44
- protocol=FS_PROTOCOL
45
- )
46
- """
47
- Regex pattern to match FS URLs in a text. \n
48
- Matches if: \n
49
- - Starts with <url> ends with </url>
50
- - Starts with FS_PROTOCOL:// has no ? and ends with space or newline or end of string \n
51
- - Starts with FS_PROTOCOL:// has ? and ends with space or newline or end of string \n
52
- - Starts with "FS_PROTOCOL:// ends with " or newline \n
53
- - Starts with 'FS_PROTOCOL:// ends with ' or newline \n
54
- """