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
@@ -0,0 +1,53 @@
1
+ # Solace Agent Mesh Agent Configuration
2
+
3
+ log:
4
+ stdout_log_level: INFO
5
+ log_file_level: DEBUG
6
+ log_file: a2a_agent.log
7
+
8
+ !include ../shared_config.yaml
9
+
10
+ apps:
11
+ - name: "__AGENT_NAME____app"
12
+ app_base_path: .
13
+ app_module: solace_agent_mesh.agent.sac.app
14
+ broker:
15
+ <<: *broker_connection
16
+
17
+ app_config:
18
+ namespace: "__NAMESPACE__"
19
+ supports_streaming: __SUPPORTS_STREAMING__
20
+ agent_name: "__AGENT_NAME__"
21
+ display_name: "__AGENT_NAME__ Agent"
22
+ model: __MODEL_ALIAS__
23
+
24
+ instruction: |
25
+ __INSTRUCTION__
26
+
27
+ tools: __TOOLS_CONFIG__
28
+
29
+ session_service: __SESSION_SERVICE__
30
+ artifact_service: __ARTIFACT_SERVICE__
31
+
32
+ artifact_handling_mode: "__ARTIFACT_HANDLING_MODE__"
33
+ enable_embed_resolution: __ENABLE_EMBED_RESOLUTION__
34
+ enable_artifact_content_instruction: __ENABLE_ARTIFACT_CONTENT_INSTRUCTION__
35
+ data_tools_config: *default_data_tools_config
36
+
37
+ # Agent Card Definition
38
+ agent_card:
39
+ description: |
40
+ __AGENT_CARD_DESCRIPTION__
41
+ defaultInputModes: __DEFAULT_INPUT_MODES__
42
+ defaultOutputModes: __DEFAULT_OUTPUT_MODES__
43
+ skills: __AGENT_CARD_SKILLS__
44
+
45
+ # Discovery & Communication
46
+ agent_card_publishing:
47
+ interval_seconds: __AGENT_CARD_PUBLISHING_INTERVAL__
48
+ agent_discovery:
49
+ enabled: __AGENT_DISCOVERY_ENABLED__
50
+ inter_agent_communication:
51
+ allow_list: __INTER_AGENT_COMMUNICATION_ALLOW_LIST__
52
+ deny_list: __INTER_AGENT_COMMUNICATION_DENY_LIST__
53
+ request_timeout_seconds: __INTER_AGENT_COMMUNICATION_TIMEOUT__
@@ -0,0 +1,54 @@
1
+ # Solace AI Connector Configuration for Evaluation Backend
2
+
3
+ log:
4
+ stdout_log_level: INFO
5
+ log_file_level: DEBUG
6
+ log_file: eval_backend.log
7
+
8
+ # Shared SAM config
9
+ !include ./shared_config.yaml
10
+
11
+ apps:
12
+ - name: a2a_eval_backend_app
13
+ app_base_path: .
14
+ app_module: sam_rest_gateway.app
15
+
16
+ broker:
17
+ <<: *broker_connection
18
+
19
+ app_config:
20
+ namespace: ${NAMESPACE}
21
+ session_secret_key: ${SESSION_SECRET_KEY, please_change_me_in_production}
22
+
23
+ artifact_service:
24
+ type: "filesystem"
25
+ base_path: "/tmp/samv2"
26
+ artifact_scope: namespace
27
+
28
+ enforce_authentication: false
29
+ default_user_identity: "eval-user"
30
+ sync_mode_timeout_seconds: 300
31
+ rest_api_server_host: ${REST_API_HOST, 0.0.0.0}
32
+ rest_api_server_port: ${REST_API_PORT, 8080}
33
+ cors_allowed_origins:
34
+ - "http://localhost:3000"
35
+ - "http://127.0.0.1:3000"
36
+
37
+ enable_embed_resolution: ${ENABLE_EMBED_RESOLUTION, true}
38
+ gateway_artifact_content_limit_bytes: ${GATEWAY_ARTIFACT_LIMIT_BYTES, 10000000}
39
+
40
+ system_purpose: >
41
+ The system is an AI Chatbot with agentic capabilities.
42
+ It will use the agents available to provide information,
43
+ reasoning and general assistance for the users in this system.
44
+ **Always return useful artifacts and files that you create to the user.**
45
+ Provide a status update before each tool call.
46
+ Your external name is Agent Mesh.
47
+
48
+ response_format: >
49
+ Responses should be clear, concise, and professionally toned.
50
+ Format responses to the user in Markdown using appropriate formatting.
51
+
52
+ frontend_welcome_message: ${FRONTEND_WELCOME_MESSAGE, ""}
53
+ frontend_bot_name: ${FRONTEND_BOT_NAME, "Solace Agent Mesh"}
54
+ frontend_collect_feedback: ${FRONTEND_COLLECT_FEEDBACK, false}
@@ -0,0 +1,73 @@
1
+ """
2
+ Solace Agent Mesh App class for the __GATEWAY_NAME_PASCAL_CASE__ Gateway.
3
+ """
4
+
5
+ from typing import Any, Dict, List, Type
6
+
7
+ from solace_ai_connector.common.log import log
8
+ from solace_agent_mesh.gateway.base.app import BaseGatewayApp
9
+ from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
10
+
11
+ from .component import __GATEWAY_NAME_PASCAL_CASE__GatewayComponent
12
+
13
+ info = {
14
+ "class_name": "__GATEWAY_NAME_PASCAL_CASE__GatewayApp",
15
+ "description": "Custom App class for the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.",
16
+ }
17
+
18
+ class __GATEWAY_NAME_PASCAL_CASE__GatewayApp(BaseGatewayApp):
19
+ """
20
+ App class for the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.
21
+ - Extends BaseGatewayApp for common gateway functionalities.
22
+ - Defines __GATEWAY_NAME_PASCAL_CASE__-specific configuration parameters below.
23
+ """
24
+
25
+ # Define __GATEWAY_NAME_PASCAL_CASE__-specific parameters
26
+ # This list will be automatically merged with BaseGatewayApp's schema.
27
+ # These parameters will be configurable in the yaml config file
28
+ # under the 'app_config' section.
29
+ SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
30
+ # --- Example Required Parameter ---
31
+ # {
32
+ # "name": "api_endpoint_url",
33
+ # "required": True,
34
+ # "type": "string",
35
+ # "description": "The API endpoint URL for the __GATEWAY_NAME_SNAKE_CASE__ service.",
36
+ # },
37
+ # --- Example Optional Parameter with Default ---
38
+ # {
39
+ # "name": "connection_timeout_seconds",
40
+ # "required": False,
41
+ # "type": "integer",
42
+ # "default": 30,
43
+ # "description": "Timeout in seconds for connecting to the __GATEWAY_NAME_SNAKE_CASE__ service.",
44
+ # },
45
+ # --- Example List Parameter ---
46
+ # {
47
+ # "name": "processing_rules",
48
+ # "required": False,
49
+ # "type": "list",
50
+ # "default": [],
51
+ # "description": "List of processing rules for the gateway.",
52
+ # "items": { # Schema for each item in the list
53
+ # "type": "object",
54
+ # "properties": {
55
+ # "rule_name": {"type": "string", "required": True},
56
+ # "action_type": {"type": "string", "enum": ["process", "ignore"]},
57
+ # # ... other rule-specific schema fields
58
+ # }
59
+ # }
60
+ # }
61
+ ]
62
+
63
+ def __init__(self, app_info: Dict[str, Any], **kwargs):
64
+ log_prefix = app_info.get("name", "__GATEWAY_NAME_PASCAL_CASE__GatewayApp")
65
+ log.debug("[%s] Initializing __GATEWAY_NAME_PASCAL_CASE__GatewayApp...", log_prefix)
66
+ super().__init__(app_info=app_info, **kwargs)
67
+ log.debug("[%s] __GATEWAY_NAME_PASCAL_CASE__GatewayApp initialization complete.", self.name)
68
+
69
+ def _get_gateway_component_class(self) -> Type[BaseGatewayComponent]:
70
+ """
71
+ Returns the specific gateway component class for this app.
72
+ """
73
+ return __GATEWAY_NAME_PASCAL_CASE__GatewayComponent
@@ -0,0 +1,400 @@
1
+ """
2
+ Solace Agent Mesh Component class for the __GATEWAY_NAME_PASCAL_CASE__ Gateway.
3
+ """
4
+
5
+ import asyncio # If needed for async operations with external system
6
+ from typing import Any, Dict, List, Optional, Tuple, Union
7
+
8
+ from solace_ai_connector.common.log import log
9
+ from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
10
+ from solace_agent_mesh.common.types import (
11
+ Part as A2APart,
12
+ TextPart,
13
+ FilePart, # If handling files
14
+ DataPart, # If handling structured data
15
+ Task,
16
+ TaskStatusUpdateEvent,
17
+ TaskArtifactUpdateEvent,
18
+ JSONRPCError,
19
+ FileContent, # Added for FilePart example
20
+ )
21
+ # from solace_agent_mesh.core_a2a.service import CoreA2AService # If direct interaction needed
22
+
23
+ info = {
24
+ "class_name": "__GATEWAY_NAME_PASCAL_CASE__GatewayComponent",
25
+ "description": (
26
+ "Implements the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway, inheriting from BaseGatewayComponent. "
27
+ "Handles communication between the __GATEWAY_NAME_SNAKE_CASE__ system and the A2A agent ecosystem."
28
+ ),
29
+ "config_parameters": [], # Defined by __GATEWAY_NAME_PASCAL_CASE__GatewayApp
30
+ "input_schema": {
31
+ "type": "object",
32
+ "description": "Not typically used directly by GDK; component reacts to external events or A2A control messages.",
33
+ },
34
+ "output_schema": {
35
+ "type": "object",
36
+ "description": "Not typically used directly by GDK; component publishes results to external system or A2A.",
37
+ },
38
+ }
39
+
40
+ class __GATEWAY_NAME_PASCAL_CASE__GatewayComponent(BaseGatewayComponent):
41
+ """
42
+ Solace Agent Mesh Component implementing the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.
43
+ """
44
+
45
+ def __init__(self, **kwargs: Any):
46
+ super().__init__(**kwargs)
47
+ log.info(
48
+ "%s Initializing __GATEWAY_NAME_PASCAL_CASE__ Gateway Component (Post-Base)...",
49
+ self.log_identifier,
50
+ )
51
+
52
+ # --- Retrieve Gateway-Specific Configurations ---
53
+ # Example: self.api_endpoint_url = self.get_config("api_endpoint_url")
54
+ # Example: self.connection_timeout = self.get_config("connection_timeout_seconds")
55
+ # Example: self.processing_rules = self.get_config("processing_rules")
56
+
57
+ # --- Initialize External System Client/SDK ---
58
+ # Example: self.external_client = SomeApiClient(api_key=self.service_api_key, endpoint=self.api_endpoint_url)
59
+ # Ensure any client initialization is robust and handles potential errors.
60
+
61
+ log.info(
62
+ "%s __GATEWAY_NAME_PASCAL_CASE__ Gateway Component initialization complete.",
63
+ self.log_identifier,
64
+ )
65
+
66
+ def _start_listener(self) -> None:
67
+ """
68
+ GDK Hook: Start listening for events/requests from the external __GATEWAY_NAME_SNAKE_CASE__ system.
69
+ This method is called by BaseGatewayComponent.run() within self.async_loop.
70
+ - For polling: Start a polling loop (e.g., in a new thread or asyncio task).
71
+ - For webhooks: If embedding a server (like FastAPI in WebhookGateway), start it here.
72
+ - For SDKs with callbacks: Register your callbacks here.
73
+ """
74
+ log_id_prefix = f"{self.log_identifier}[StartListener]"
75
+ log.info("%s Starting listener for __GATEWAY_NAME_SNAKE_CASE__ system...", log_id_prefix)
76
+
77
+ # Example for a polling mechanism (adapt as needed):
78
+ # if self.async_loop and self.async_loop.is_running():
79
+ # self.async_loop.create_task(self._poll_external_system())
80
+ # else:
81
+ # log.error("%s Async loop not available or not running. Cannot start polling.", log_id_prefix)
82
+ # self.stop_signal.set() # Signal component to stop if listener cannot start
83
+
84
+ # If your external system uses an SDK that runs its own event loop or requires
85
+ # a blocking call to start, manage that appropriately (e.g., in a separate thread
86
+ # that communicates back to the async_loop via asyncio.run_coroutine_threadsafe).
87
+
88
+ log.info("%s __GATEWAY_NAME_SNAKE_CASE__ listener startup initiated.", log_id_prefix)
89
+
90
+ # async def _poll_external_system(self): # Example polling loop
91
+ # log_id_prefix = f"{self.log_identifier}[PollLoop]"
92
+ # log.info("%s Starting __GATEWAY_NAME_SNAKE_CASE__ polling loop...", log_id_prefix)
93
+ # while not self.stop_signal.is_set():
94
+ # try:
95
+ # # new_events = await self.external_client.get_new_events() # Or sync equivalent
96
+ # # for event_data in new_events:
97
+ # # # Process each event: authenticate, translate, submit A2A task
98
+ # # # This often involves calling other GDK methods or internal helpers
99
+ # # authenticated_user = await self._authenticate_external_user(event_data)
100
+ # # if authenticated_user:
101
+ # # target_agent, parts, context = await self._translate_external_input(event_data, authenticated_user)
102
+ # # if target_agent and parts:
103
+ # # await self.submit_a2a_task(target_agent, parts, context, authenticated_user)
104
+ # # await asyncio.sleep(self.get_config("polling_interval_seconds", 60))
105
+ # pass # Placeholder
106
+ # except asyncio.CancelledError:
107
+ # log.info("%s Polling loop cancelled.", log_id_prefix)
108
+ # break
109
+ # except Exception as e:
110
+ # log.exception("%s Error in polling loop: %s", log_id_prefix, e)
111
+ # await asyncio.sleep(60) # Wait before retrying on error
112
+ # log.info("%s __GATEWAY_NAME_SNAKE_CASE__ polling loop stopped.", log_id_prefix)
113
+
114
+
115
+ def _stop_listener(self) -> None:
116
+ """
117
+ GDK Hook: Stop listening for events/requests and clean up resources.
118
+ This method is called by BaseGatewayComponent.cleanup().
119
+ - For polling: Signal the polling loop to stop.
120
+ - For webhooks: Gracefully shut down the embedded server.
121
+ - For SDKs: Unregister callbacks, close connections.
122
+ """
123
+ log_id_prefix = f"{self.log_identifier}[StopListener]"
124
+ log.info("%s Stopping listener for __GATEWAY_NAME_SNAKE_CASE__ system...", log_id_prefix)
125
+
126
+ # self.stop_signal is already set by BaseGatewayComponent before calling this.
127
+ # Ensure your _start_listener logic (e.g., polling loop) respects self.stop_signal.
128
+
129
+ # Example: If you started a thread for a blocking SDK client:
130
+ # if hasattr(self, "sdk_thread") and self.sdk_thread.is_alive():
131
+ # # Signal SDK to shutdown if possible, then join thread
132
+ # # self.external_client.shutdown()
133
+ # self.sdk_thread.join(timeout=10)
134
+
135
+ # Example: If an asyncio task was created for polling:
136
+ # if hasattr(self, "polling_task") and not self.polling_task.done():
137
+ # self.polling_task.cancel()
138
+ # # Optionally await it if _stop_listener can be async, or manage in cleanup
139
+
140
+ log.info("%s __GATEWAY_NAME_SNAKE_CASE__ listener shutdown initiated.", log_id_prefix)
141
+
142
+
143
+ async def _authenticate_external_user(
144
+ self, external_event_data: Any # Type hint with actual external event data type
145
+ ) -> Optional[str]:
146
+ """
147
+ GDK Hook: Authenticates the user or system from the external event data.
148
+ - Implement logic based on your gateway's authentication mechanism (e.g., API key, token, signature).
149
+ - Use configurations retrieved in __init__ (e.g., self.service_api_key).
150
+ - Return a unique user/system identifier (string) on success, or None on failure.
151
+ This identifier will be used for A2A authorization (scope checking).
152
+ """
153
+ log_id_prefix = f"{self.log_identifier}[AuthenticateUser]"
154
+ # log.debug("%s Authenticating external event: %s", log_id_prefix, external_event_data)
155
+
156
+ # --- Implement Authentication Logic Here ---
157
+ # Example: Check an API key from headers or payload
158
+ # provided_key = external_event_data.get("headers", {}).get("X-API-Key")
159
+ # if provided_key and provided_key == self.service_api_key:
160
+ # user_identity = external_event_data.get("user_id_field", "default_system_user")
161
+ # log.info("%s Authentication successful for user: %s", log_id_prefix, user_identity)
162
+ # return user_identity
163
+ # else:
164
+ # log.warning("%s Authentication failed: API key mismatch or missing.", log_id_prefix)
165
+ # return None
166
+
167
+ # If no authentication is needed for this gateway:
168
+ # return "anonymous___GATEWAY_NAME_SNAKE_CASE___user"
169
+
170
+ log.warning("%s _authenticate_external_user not fully implemented.", log_id_prefix)
171
+ return "placeholder_user_identity" # Replace with actual logic
172
+
173
+
174
+ async def _translate_external_input(
175
+ self, external_event_data: Any, authenticated_user_identity: str
176
+ ) -> Tuple[Optional[str], List[A2APart], Dict[str, Any]]:
177
+ """
178
+ GDK Hook: Translates the incoming external event/request into an A2A task.
179
+ - `external_event_data`: The raw data from the external system.
180
+ - `authenticated_user_identity`: The identity returned by _authenticate_external_user.
181
+
182
+ Returns a tuple:
183
+ - `target_agent_name` (str | None): Name of the A2A agent to route the task to. None if translation fails.
184
+ - `a2a_parts` (List[A2APart]): List of A2A Parts (TextPart, FilePart, DataPart) for the task.
185
+ - `external_request_context` (Dict[str, Any]): Dictionary to store any context needed later
186
+ (e.g., for _send_final_response_to_external, like original request ID, reply-to address).
187
+ """
188
+ log_id_prefix = f"{self.log_identifier}[TranslateInput]"
189
+ # log.debug("%s Translating external event: %s", log_id_prefix, external_event_data)
190
+
191
+ a2a_parts: List[A2APart] = []
192
+ target_agent_name: Optional[str] = None # Determine this based on event data or config
193
+ external_request_context: Dict[str, Any] = {
194
+ "user_id_for_a2a": authenticated_user_identity,
195
+ "app_name_for_artifacts": self.gateway_id, # For artifact service context
196
+ "user_id_for_artifacts": authenticated_user_identity,
197
+ "a2a_session_id": f"__GATEWAY_NAME_SNAKE_CASE__-session-{self.generate_uuid()}", # Example session ID
198
+ # Add any other relevant context from external_event_data needed for response handling
199
+ # "original_request_id": external_event_data.get("id"),
200
+ }
201
+
202
+ # --- Implement Translation Logic Here ---
203
+ # 1. Determine Target Agent:
204
+ # - Statically from config: target_agent_name = self.get_config("default_target_agent")
205
+ # - Dynamically from event_data: target_agent_name = external_event_data.get("target_agent_field")
206
+ # - Based on processing_rules:
207
+ # for rule in self.processing_rules:
208
+ # if rule.matches(external_event_data):
209
+ # target_agent_name = rule.get_agent_name()
210
+ # break
211
+ target_agent_name = "OrchestratorAgent" # Placeholder
212
+
213
+ # 2. Construct A2A Parts:
214
+ # - Extract text:
215
+ # text_content = external_event_data.get("message_text", "")
216
+ # if text_content:
217
+ # a2a_parts.append(TextPart(text=text_content))
218
+ # - Handle files (if any): Download, save to artifact service, create FilePart with URI.
219
+ # (Requires self.shared_artifact_service to be configured and available)
220
+ # # if "file_url" in external_event_data and self.shared_artifact_service:
221
+ # # file_bytes = await download_file(external_event_data["file_url"])
222
+ # # file_name = external_event_data.get("file_name", "attachment.dat")
223
+ # # mime_type = external_event_data.get("mime_type", "application/octet-stream")
224
+ # # artifact_uri = await self.save_to_artifact_service(
225
+ # # file_bytes, file_name, mime_type,
226
+ # # authenticated_user_identity, external_request_context["a2a_session_id"]
227
+ # # )
228
+ # # if artifact_uri:
229
+ # # a2a_parts.append(FilePart(file=FileContent(name=file_name, mimeType=mime_type, uri=artifact_uri)))
230
+ # - Handle structured data:
231
+ # # structured_data = external_event_data.get("data_payload")
232
+ # # if structured_data:
233
+ # # a2a_parts.append(DataPart(data=structured_data, metadata={"source": "__GATEWAY_NAME_SNAKE_CASE__"}))
234
+
235
+ # Example: Simple text passthrough
236
+ raw_text = str(external_event_data.get("text_input_field", "Default text from __GATEWAY_NAME_SNAKE_CASE__"))
237
+ a2a_parts.append(TextPart(text=raw_text))
238
+
239
+ if not target_agent_name:
240
+ log.error("%s Could not determine target_agent_name.", log_id_prefix)
241
+ return None, [], {} # Indicate translation failure
242
+
243
+ if not a2a_parts:
244
+ log.warning("%s No A2A parts created from external event. Task might be empty.", log_id_prefix)
245
+ # Depending on requirements, you might want to return None, [], {} here too.
246
+
247
+ log.info("%s Translation complete. Target: %s, Parts: %d", log_id_prefix, target_agent_name, len(a2a_parts))
248
+ return target_agent_name, a2a_parts, external_request_context
249
+
250
+
251
+ async def _send_final_response_to_external(
252
+ self, external_request_context: Dict[str, Any], task_data: Task
253
+ ) -> None:
254
+ """
255
+ GDK Hook: Sends the final A2A Task result back to the external __GATEWAY_NAME_SNAKE_CASE__ system.
256
+ - `external_request_context`: The context dictionary returned by _translate_external_input.
257
+ - `task_data`: The final A2A Task object (contains status, results, etc.).
258
+ """
259
+ log_id_prefix = f"{self.log_identifier}[SendFinalResponse]"
260
+ # log.debug("%s Sending final response for task %s. Context: %s", log_id_prefix, task_data.id, external_request_context)
261
+
262
+ # --- Implement Logic to Send Response to External System ---
263
+ # 1. Extract relevant information from task_data:
264
+ # - task_data.status.state (e.g., TaskState.COMPLETED, TaskState.FAILED)
265
+ # - task_data.status.message.parts (usually TextPart for final agent response)
266
+ # - task_data.artifacts (if agent produced artifacts)
267
+
268
+ # 2. Format the response according to the external system's requirements.
269
+ # response_text = "Task completed."
270
+ # if task_data.status and task_data.status.message and task_data.status.message.parts:
271
+ # for part in task_data.status.message.parts:
272
+ # if isinstance(part, TextPart):
273
+ # response_text = part.text
274
+ # break
275
+ # if task_data.status and task_data.status.state == TaskState.FAILED:
276
+ # response_text = f"Task failed: {response_text}"
277
+
278
+ # 3. Use information from external_request_context to send the response
279
+ # (e.g., reply-to address, original request ID).
280
+ # # original_request_id = external_request_context.get("original_request_id")
281
+ # # await self.external_client.send_reply(original_request_id, response_text)
282
+
283
+ log.warning("%s _send_final_response_to_external not fully implemented for task %s.", log_id_prefix, task_data.id)
284
+
285
+
286
+ async def _send_error_to_external(
287
+ self, external_request_context: Dict[str, Any], error_data: JSONRPCError
288
+ ) -> None:
289
+ """
290
+ GDK Hook: Sends an A2A error back to the external __GATEWAY_NAME_SNAKE_CASE__ system.
291
+ This is called if an error occurs within the A2A GDK processing (e.g., task submission failure,
292
+ authorization failure after initial authentication).
293
+ - `external_request_context`: Context from _translate_external_input.
294
+ - `error_data`: A JSONRPCError object.
295
+ """
296
+ log_id_prefix = f"{self.log_identifier}[SendError]"
297
+ # log.warning("%s Sending error to external system. Error: %s. Context: %s", log_id_prefix, error_data.message, external_request_context)
298
+
299
+ # --- Implement Logic to Send Error to External System ---
300
+ # error_message_to_send = f"A2A Error: {error_data.message} (Code: {error_data.code})"
301
+ # # original_request_id = external_request_context.get("original_request_id")
302
+ # # await self.external_client.send_error_reply(original_request_id, error_message_to_send)
303
+
304
+ log.warning("%s _send_error_to_external not fully implemented. Error: %s", log_id_prefix, error_data.message)
305
+
306
+
307
+ async def _send_update_to_external(
308
+ self,
309
+ external_request_context: Dict[str, Any],
310
+ event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
311
+ is_final_chunk_of_update: bool,
312
+ ) -> None:
313
+ """
314
+ GDK Hook: Sends intermediate A2A task updates (status or artifacts) to the external system.
315
+ - This is optional. If your gateway doesn't support streaming intermediate updates,
316
+ - you can leave this method as a no-op (just log).
317
+ - `is_final_chunk_of_update`: True if this is the last part of a streamed TextPart from TaskStatusUpdateEvent.
318
+ """
319
+ log_id_prefix = f"{self.log_identifier}[SendUpdate]"
320
+ # task_id = event_data.id
321
+ # log.debug("%s Received A2A update for task %s. Type: %s. FinalChunk: %s",
322
+ # log_id_prefix, task_id, type(event_data).__name__, is_final_chunk_of_update)
323
+
324
+ # --- Implement Logic to Send Intermediate Update (if supported) ---
325
+ # if isinstance(event_data, TaskStatusUpdateEvent):
326
+ # if event_data.status and event_data.status.message and event_data.status.message.parts:
327
+ # for part in event_data.status.message.parts:
328
+ # if isinstance(part, TextPart):
329
+ # # Send part.text to external system
330
+ # pass
331
+ # elif isinstance(part, DataPart) and part.data.get("a2a_signal_type") == "agent_status_message":
332
+ # # Send agent status signal text part.data.get("text")
333
+ # pass
334
+ # elif isinstance(event_data, TaskArtifactUpdateEvent):
335
+ # # Handle artifact updates (e.g., notify external system of new artifact URI)
336
+ # pass
337
+
338
+ # Default: Log that this gateway does not handle intermediate updates.
339
+ # log.debug("%s __GATEWAY_NAME_PASCAL_CASE__ Gateway does not process intermediate updates. Update for task %s ignored.",
340
+ # log_id_prefix, task_id)
341
+ pass # No-op by default
342
+
343
+ # --- Optional: Helper methods for your gateway ---
344
+ def generate_uuid(self) -> str: # Made this a method of the class
345
+ import uuid
346
+ return str(uuid.uuid4())
347
+
348
+ # async def save_to_artifact_service(self, content_bytes: bytes, filename: str, mime_type: str, user_id: str, session_id: str) -> Optional[str]:
349
+ # """Helper to save content to the shared artifact service."""
350
+ # if not self.shared_artifact_service:
351
+ # log.error("%s Artifact service not available. Cannot save file: %s", self.log_identifier, filename)
352
+ # return None
353
+ # try:
354
+ # from src.solace_agent_mesh.agent.utils.artifact_helpers import save_artifact_with_metadata # Adjust import
355
+ # from datetime import datetime, timezone
356
+
357
+ # save_result = await save_artifact_with_metadata(
358
+ # artifact_service=self.shared_artifact_service,
359
+ # app_name=self.gateway_id, # from BaseGatewayComponent
360
+ # user_id=user_id,
361
+ # session_id=session_id,
362
+ # filename=filename,
363
+ # content_bytes=content_bytes,
364
+ # mime_type=mime_type,
365
+ # metadata_dict={
366
+ # "source": "__GATEWAY_NAME_SNAKE_CASE___upload",
367
+ # "original_filename": filename,
368
+ # "upload_timestamp_utc": datetime.now(timezone.utc).isoformat(),
369
+ # },
370
+ # timestamp=datetime.now(timezone.utc)
371
+ # )
372
+ # if save_result["status"] in ["success", "partial_success"]:
373
+ # data_version = save_result.get("data_version", 0)
374
+ # artifact_uri = f"artifact://{self.gateway_id}/{user_id}/{session_id}/{filename}?version={data_version}"
375
+ # log.info("%s Saved artifact: %s", self.log_identifier, artifact_uri)
376
+ # return artifact_uri
377
+ # else:
378
+ # log.error("%s Failed to save artifact %s: %s", self.log_identifier, filename, save_result.get("message"))
379
+ # return None
380
+ # except Exception as e:
381
+ # log.exception("%s Error saving artifact %s: %s", self.log_identifier, filename, e)
382
+ # return None
383
+
384
+ def cleanup(self):
385
+ """
386
+ GDK Hook: Called before the component is fully stopped.
387
+ Perform any final cleanup specific to this component beyond _stop_listener.
388
+ """
389
+ log.info(
390
+ "%s Cleaning up __GATEWAY_NAME_PASCAL_CASE__ Gateway Component (Pre-Base)...",
391
+ self.log_identifier,
392
+ )
393
+ # Example: Close any persistent connections not handled in _stop_listener
394
+ # if hasattr(self, "persistent_connection") and self.persistent_connection.is_open():
395
+ # self.persistent_connection.close()
396
+ super().cleanup() # Important to call super().cleanup()
397
+ log.info(
398
+ "%s __GATEWAY_NAME_PASCAL_CASE__ Gateway Component cleanup finished.",
399
+ self.log_identifier,
400
+ )
@@ -0,0 +1,43 @@
1
+ # Solace Agent Mesh: __GATEWAY_NAME_SNAKE_CASE__ Gateway Configuration
2
+
3
+ log:
4
+ stdout_log_level: INFO
5
+ log_file_level: DEBUG
6
+ log_file: "__GATEWAY_NAME_SNAKE_CASE___gateway.log"
7
+
8
+ !include ../shared_config.yaml
9
+
10
+ apps:
11
+ - name: __GATEWAY_NAME_SNAKE_CASE___gateway_app
12
+ app_base_path: .
13
+ app_module: src.__GATEWAY_NAME_SNAKE_CASE__.app
14
+
15
+ broker:
16
+ <<: *broker_connection
17
+
18
+ app_config:
19
+ namespace: __APP_CONFIG_NAMESPACE__
20
+ gateway_id: __GATEWAY_ID__
21
+
22
+ artifact_service: __ARTIFACT_SERVICE__
23
+
24
+ authorization_service:
25
+ type: "none" # Or "default_rbac"
26
+ # role_definitions_path: "config/auth/roles.yaml"
27
+ # user_assignments_path: "config/auth/users.yaml"
28
+
29
+ system_purpose: >
30
+ __SYSTEM_PURPOSE__
31
+
32
+ response_format: >
33
+ __RESPONSE_FORMAT__
34
+
35
+
36
+ # enable_embed_resolution: true # Default is true
37
+ # gateway_artifact_content_limit_bytes: 10485760 # 10MB
38
+ # gateway_recursive_embed_depth: 3
39
+
40
+ # --- __GATEWAY_NAME_PASCAL_CASE__ Specific Parameters (Define schema in src/__GATEWAY_NAME_SNAKE_CASE__/app.py) ---
41
+ # example_parameter: "default_value"
42
+ # api_key: "${__GATEWAY_NAME_UPPER_CASE__}_API_KEY"
43
+ # endpoint_url: "https://api.example.com/__GATEWAY_NAME_SNAKE_CASE__"