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

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

Potentially problematic release.


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

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