solace-agent-mesh 1.6.1__py3-none-any.whl → 1.13.2__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (481) hide show
  1. solace_agent_mesh/agent/adk/alembic/README +74 -0
  2. solace_agent_mesh/agent/adk/alembic/env.py +77 -0
  3. solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
  4. solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
  5. solace_agent_mesh/agent/adk/alembic.ini +112 -0
  6. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  7. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
  8. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
  9. solace_agent_mesh/agent/adk/callbacks.py +852 -109
  10. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
  11. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
  12. solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
  13. solace_agent_mesh/agent/adk/models/lite_llm.py +77 -21
  14. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
  15. solace_agent_mesh/agent/adk/runner.py +85 -20
  16. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  17. solace_agent_mesh/agent/adk/services.py +94 -18
  18. solace_agent_mesh/agent/adk/setup.py +281 -65
  19. solace_agent_mesh/agent/adk/stream_parser.py +231 -37
  20. solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
  21. solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
  22. solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
  23. solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
  24. solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
  25. solace_agent_mesh/agent/proxies/base/app.py +3 -2
  26. solace_agent_mesh/agent/proxies/base/component.py +188 -22
  27. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
  28. solace_agent_mesh/agent/sac/app.py +91 -3
  29. solace_agent_mesh/agent/sac/component.py +591 -157
  30. solace_agent_mesh/agent/sac/patch_adk.py +8 -16
  31. solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
  32. solace_agent_mesh/agent/tools/__init__.py +3 -0
  33. solace_agent_mesh/agent/tools/audio_tools.py +3 -3
  34. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +710 -171
  35. solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
  36. solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
  37. solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
  38. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  39. solace_agent_mesh/agent/tools/tool_config_types.py +57 -2
  40. solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
  41. solace_agent_mesh/agent/tools/web_tools.py +125 -17
  42. solace_agent_mesh/agent/utils/artifact_helpers.py +248 -6
  43. solace_agent_mesh/agent/utils/context_helpers.py +17 -0
  44. solace_agent_mesh/assets/docs/404.html +6 -6
  45. solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
  46. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  51. solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
  52. solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
  62. solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
  105. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
  106. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
  107. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
  108. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
  109. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +82 -68
  110. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
  111. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
  112. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
  113. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
  114. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
  115. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
  116. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
  117. solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
  118. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
  119. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
  120. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  121. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
  122. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  123. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -49
  124. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
  125. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
  126. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
  127. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
  128. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +90 -0
  129. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
  130. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  131. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
  132. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +162 -171
  133. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
  134. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
  135. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
  136. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
  137. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
  138. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
  139. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
  140. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
  141. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
  142. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
  143. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
  144. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
  145. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
  146. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
  147. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +23 -19
  151. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
  152. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +112 -87
  154. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +87 -64
  156. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
  158. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
  159. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
  160. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
  161. solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +311 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
  164. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
  165. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
  166. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
  167. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
  168. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
  169. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
  170. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
  171. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
  172. solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
  173. solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
  174. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  175. solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
  176. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  177. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  178. solace_agent_mesh/cli/__init__.py +1 -1
  179. solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
  181. solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
  182. solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
  183. solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
  184. solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
  185. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
  186. solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
  187. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
  188. solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
  189. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
  190. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
  191. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
  192. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
  193. solace_agent_mesh/cli/commands/run_cmd.py +64 -49
  194. solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
  195. solace_agent_mesh/cli/main.py +15 -0
  196. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-KnKMP_vb.js} +1 -1
  197. solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
  198. solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
  199. solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
  200. solace_agent_mesh/client/webui/frontend/static/assets/vendor-CGk8Suyh.js +565 -0
  201. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  202. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  203. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  204. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  205. solace_agent_mesh/common/a2a/events.py +2 -1
  206. solace_agent_mesh/common/a2a/protocol.py +5 -0
  207. solace_agent_mesh/common/a2a/types.py +2 -1
  208. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
  209. solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
  210. solace_agent_mesh/common/agent_registry.py +38 -11
  211. solace_agent_mesh/common/data_parts.py +144 -4
  212. solace_agent_mesh/common/error_handlers.py +83 -0
  213. solace_agent_mesh/common/exceptions.py +24 -0
  214. solace_agent_mesh/common/oauth/__init__.py +17 -0
  215. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  216. solace_agent_mesh/common/oauth/utils.py +50 -0
  217. solace_agent_mesh/common/rag_dto.py +156 -0
  218. solace_agent_mesh/common/sac/sam_component_base.py +97 -19
  219. solace_agent_mesh/common/sam_events/event_service.py +2 -2
  220. solace_agent_mesh/common/services/employee_service.py +1 -1
  221. solace_agent_mesh/common/utils/embeds/constants.py +1 -0
  222. solace_agent_mesh/common/utils/embeds/converter.py +1 -8
  223. solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
  224. solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
  225. solace_agent_mesh/common/utils/embeds/types.py +9 -0
  226. solace_agent_mesh/common/utils/log_formatters.py +20 -0
  227. solace_agent_mesh/common/utils/mime_helpers.py +12 -5
  228. solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
  229. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  230. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  231. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  232. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  233. solace_agent_mesh/config_portal/backend/common.py +12 -0
  234. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
  235. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
  236. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
  237. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
  238. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
  239. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
  240. solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
  241. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  242. solace_agent_mesh/core_a2a/service.py +3 -2
  243. solace_agent_mesh/gateway/adapter/__init__.py +1 -0
  244. solace_agent_mesh/gateway/adapter/base.py +170 -0
  245. solace_agent_mesh/gateway/adapter/types.py +230 -0
  246. solace_agent_mesh/gateway/base/app.py +39 -2
  247. solace_agent_mesh/gateway/base/auth_interface.py +103 -0
  248. solace_agent_mesh/gateway/base/component.py +1027 -151
  249. solace_agent_mesh/gateway/generic/__init__.py +1 -0
  250. solace_agent_mesh/gateway/generic/app.py +50 -0
  251. solace_agent_mesh/gateway/generic/component.py +894 -0
  252. solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
  253. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
  254. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
  255. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
  256. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
  257. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  258. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  259. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  260. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  261. solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
  262. solace_agent_mesh/gateway/http_sse/app.py +40 -11
  263. solace_agent_mesh/gateway/http_sse/component.py +285 -160
  264. solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
  265. solace_agent_mesh/gateway/http_sse/main.py +68 -450
  266. solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
  267. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
  268. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
  269. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
  270. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +26 -3
  271. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
  272. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
  273. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
  274. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -0
  275. solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
  276. solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
  277. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  278. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +8 -2
  279. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
  280. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
  281. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
  282. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
  283. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
  284. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
  285. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +256 -58
  286. solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
  287. solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
  288. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  289. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  290. solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
  291. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -1
  292. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
  293. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
  294. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
  295. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  296. solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
  297. solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
  298. solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
  299. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
  300. solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
  301. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  302. solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
  303. solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
  304. solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
  305. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  306. solace_agent_mesh/gateway/http_sse/routers/visualization.py +92 -9
  307. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  308. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  309. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
  310. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
  311. solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
  312. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  313. solace_agent_mesh/gateway/http_sse/services/session_service.py +361 -12
  314. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
  315. solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
  316. solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
  317. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  318. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
  319. solace_agent_mesh/services/__init__.py +0 -0
  320. solace_agent_mesh/services/platform/__init__.py +29 -0
  321. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  322. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  323. solace_agent_mesh/services/platform/alembic.ini +109 -0
  324. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  325. solace_agent_mesh/services/platform/api/dependencies.py +154 -0
  326. solace_agent_mesh/services/platform/api/main.py +314 -0
  327. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  328. solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
  329. solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
  330. solace_agent_mesh/services/platform/app.py +215 -0
  331. solace_agent_mesh/services/platform/component.py +777 -0
  332. solace_agent_mesh/shared/__init__.py +14 -0
  333. solace_agent_mesh/shared/api/__init__.py +42 -0
  334. solace_agent_mesh/shared/auth/__init__.py +26 -0
  335. solace_agent_mesh/shared/auth/dependencies.py +204 -0
  336. solace_agent_mesh/shared/auth/middleware.py +347 -0
  337. solace_agent_mesh/shared/database/__init__.py +20 -0
  338. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
  339. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
  340. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
  341. solace_agent_mesh/shared/exceptions/__init__.py +36 -0
  342. solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +19 -5
  343. solace_agent_mesh/shared/utils/__init__.py +21 -0
  344. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  345. solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
  346. solace_agent_mesh/templates/platform.yaml +49 -0
  347. solace_agent_mesh/templates/plugin_readme_template.md +3 -25
  348. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  349. solace_agent_mesh/templates/proxy_template.yaml +62 -0
  350. solace_agent_mesh/templates/webui.yaml +148 -6
  351. solace_agent_mesh/tools/web_search/__init__.py +18 -0
  352. solace_agent_mesh/tools/web_search/base.py +84 -0
  353. solace_agent_mesh/tools/web_search/google_search.py +247 -0
  354. solace_agent_mesh/tools/web_search/models.py +99 -0
  355. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
  356. solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
  357. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
  358. solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
  359. solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
  360. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
  361. solace_agent_mesh/agent/adk/models/models_llm.txt +0 -142
  362. solace_agent_mesh/agent/agent_llm.txt +0 -378
  363. solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
  364. solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
  365. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
  366. solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
  367. solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
  368. solace_agent_mesh/agent/testing/testing_llm.txt +0 -57
  369. solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
  370. solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
  371. solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
  372. solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
  373. solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
  374. solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
  375. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
  376. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
  377. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
  378. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
  379. solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
  380. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
  381. solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
  382. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
  383. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
  384. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
  385. solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
  386. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
  387. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
  388. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
  389. solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
  390. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
  391. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
  392. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
  393. solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
  394. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
  395. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
  396. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +0 -1
  397. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
  398. solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
  399. solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
  400. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
  401. solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
  402. solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
  403. solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
  404. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
  405. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
  406. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
  407. solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
  408. solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
  409. solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
  410. solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
  411. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
  412. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
  413. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
  414. solace_agent_mesh/client/webui/frontend/static/assets/client-CaY59VuC.js +0 -25
  415. solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
  416. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
  417. solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
  418. solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
  419. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
  420. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
  421. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
  422. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
  423. solace_agent_mesh/common/common_llm.txt +0 -251
  424. solace_agent_mesh/common/common_llm_detail.txt +0 -2562
  425. solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
  426. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
  427. solace_agent_mesh/common/sac/sac_llm.txt +0 -71
  428. solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
  429. solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
  430. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
  431. solace_agent_mesh/common/services/providers/providers_llm.txt +0 -80
  432. solace_agent_mesh/common/services/services_llm.txt +0 -363
  433. solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
  434. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
  435. solace_agent_mesh/common/utils/utils_llm.txt +0 -336
  436. solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
  437. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
  438. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
  439. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
  440. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
  441. solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
  442. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
  443. solace_agent_mesh/gateway/base/base_llm.txt +0 -224
  444. solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
  445. solace_agent_mesh/gateway/gateway_llm.txt +0 -373
  446. solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
  447. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
  448. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
  449. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
  450. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
  451. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
  452. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -263
  453. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
  454. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
  455. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
  456. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
  457. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
  458. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
  459. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
  460. solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
  461. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
  462. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
  463. solace_agent_mesh/llm.txt +0 -228
  464. solace_agent_mesh/llm_detail.txt +0 -2835
  465. solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
  466. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
  467. solace_agent_mesh/templates/logging_config_template.ini +0 -45
  468. solace_agent_mesh/templates/templates_llm.txt +0 -147
  469. solace_agent_mesh-1.6.1.dist-info/RECORD +0 -525
  470. /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
  471. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
  472. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
  473. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
  474. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
  475. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
  476. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
  477. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
  478. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
  479. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
  480. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
  481. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,171 +0,0 @@
1
- # DEVELOPER GUIDE: artifacts
2
-
3
- ## Quick Summary
4
- The artifacts directory provides ADK ArtifactService implementations for the Solace Agent Mesh. It includes filesystem and S3-compatible storage backends for managing artifacts with versioning, user namespacing, and session-based organization.
5
-
6
- ## Files Overview
7
- - `__init__.py` - Package initialization for artifact service implementations
8
- - `filesystem_artifact_service.py` - Local filesystem-based artifact storage implementation
9
- - `s3_artifact_service.py` - Amazon S3 compatible storage implementation for artifacts
10
-
11
- ## Developer API Reference
12
-
13
- ### filesystem_artifact_service.py
14
- **Purpose:** Provides local filesystem storage for artifacts with structured directory organization and metadata management.
15
-
16
- **Import:** `from solace_agent_mesh.agent.adk.artifacts.filesystem_artifact_service import FilesystemArtifactService`
17
-
18
- **Classes:**
19
- - `FilesystemArtifactService(base_path: str)` - Filesystem-based artifact service implementation
20
- - `save_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, artifact: adk_types.Part) -> int` - Saves an artifact and returns version number
21
- - `load_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, version: int | None = None) -> adk_types.Part | None` - Loads an artifact by version (latest if None)
22
- - `list_artifact_keys(*, app_name: str, user_id: str, session_id: str) -> list[str]` - Lists all artifact filenames for a scope
23
- - `delete_artifact(*, app_name: str, user_id: str, session_id: str, filename: str) -> None` - Deletes all versions of an artifact
24
- - `list_versions(*, app_name: str, user_id: str, session_id: str, filename: str) -> list[int]` - Lists all version numbers for an artifact
25
- - `base_path: str` - Root directory for artifact storage
26
-
27
- **Constants/Variables:**
28
- - `METADATA_FILE_SUFFIX: str` - File suffix for metadata files (".meta")
29
-
30
- **Usage Examples:**
31
- ```python
32
- from solace_agent_mesh.agent.adk.artifacts.filesystem_artifact_service import FilesystemArtifactService
33
- from google.genai import types as adk_types
34
-
35
- # Initialize the service
36
- artifact_service = FilesystemArtifactService(base_path="/path/to/artifacts")
37
-
38
- # Save an artifact
39
- artifact_data = b"Hello, World!"
40
- artifact_part = adk_types.Part.from_bytes(data=artifact_data, mime_type="text/plain")
41
- version = await artifact_service.save_artifact(
42
- app_name="my_app",
43
- user_id="user123",
44
- session_id="session456",
45
- filename="greeting.txt",
46
- artifact=artifact_part
47
- )
48
-
49
- # Load the latest version
50
- loaded_artifact = await artifact_service.load_artifact(
51
- app_name="my_app",
52
- user_id="user123",
53
- session_id="session456",
54
- filename="greeting.txt"
55
- )
56
-
57
- # Load a specific version
58
- specific_version = await artifact_service.load_artifact(
59
- app_name="my_app",
60
- user_id="user123",
61
- session_id="session456",
62
- filename="greeting.txt",
63
- version=1
64
- )
65
-
66
- # List all artifacts
67
- artifact_keys = await artifact_service.list_artifact_keys(
68
- app_name="my_app",
69
- user_id="user123",
70
- session_id="session456"
71
- )
72
-
73
- # List versions of an artifact
74
- versions = await artifact_service.list_versions(
75
- app_name="my_app",
76
- user_id="user123",
77
- session_id="session456",
78
- filename="greeting.txt"
79
- )
80
-
81
- # Delete an artifact
82
- await artifact_service.delete_artifact(
83
- app_name="my_app",
84
- user_id="user123",
85
- session_id="session456",
86
- filename="greeting.txt"
87
- )
88
- ```
89
-
90
- ### s3_artifact_service.py
91
- **Purpose:** Provides S3-compatible storage for artifacts with structured key organization and AWS integration.
92
-
93
- **Import:** `from solace_agent_mesh.agent.adk.artifacts.s3_artifact_service import S3ArtifactService`
94
-
95
- **Classes:**
96
- - `S3ArtifactService(bucket_name: str, s3_client: BaseClient | None = None, **kwargs)` - S3-based artifact service implementation
97
- - `save_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, artifact: adk_types.Part) -> int` - Saves an artifact to S3 and returns version number
98
- - `load_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, version: int | None = None) -> adk_types.Part | None` - Loads an artifact from S3 by version (latest if None)
99
- - `list_artifact_keys(*, app_name: str, user_id: str, session_id: str) -> list[str]` - Lists all artifact filenames for a scope
100
- - `delete_artifact(*, app_name: str, user_id: str, session_id: str, filename: str) -> None` - Deletes all versions of an artifact from S3
101
- - `list_versions(*, app_name: str, user_id: str, session_id: str, filename: str) -> list[int]` - Lists all version numbers for an artifact
102
- - `bucket_name: str` - S3 bucket name for storage
103
- - `s3: BaseClient` - Boto3 S3 client instance
104
-
105
- **Usage Examples:**
106
- ```python
107
- from solace_agent_mesh.agent.adk.artifacts.s3_artifact_service import S3ArtifactService
108
- from google.genai import types as adk_types
109
- import boto3
110
-
111
- # Initialize with default credentials
112
- artifact_service = S3ArtifactService(bucket_name="my-artifacts-bucket")
113
-
114
- # Initialize with custom S3 client
115
- s3_client = boto3.client(
116
- 's3',
117
- endpoint_url='https://minio.example.com',
118
- aws_access_key_id='access_key',
119
- aws_secret_access_key='secret_key'
120
- )
121
- artifact_service = S3ArtifactService(
122
- bucket_name="my-artifacts-bucket",
123
- s3_client=s3_client
124
- )
125
-
126
- # Save an artifact
127
- artifact_data = b"Hello, S3!"
128
- artifact_part = adk_types.Part.from_bytes(data=artifact_data, mime_type="text/plain")
129
- version = await artifact_service.save_artifact(
130
- app_name="my_app",
131
- user_id="user123",
132
- session_id="session456",
133
- filename="greeting.txt",
134
- artifact=artifact_part
135
- )
136
-
137
- # Load the latest version
138
- loaded_artifact = await artifact_service.load_artifact(
139
- app_name="my_app",
140
- user_id="user123",
141
- session_id="session456",
142
- filename="greeting.txt"
143
- )
144
-
145
- # Save user-scoped artifact (persists across sessions)
146
- user_artifact = adk_types.Part.from_bytes(data=b"User data", mime_type="text/plain")
147
- await artifact_service.save_artifact(
148
- app_name="my_app",
149
- user_id="user123",
150
- session_id="session456",
151
- filename="user:profile.json", # user: prefix for user-scoped storage
152
- artifact=user_artifact
153
- )
154
-
155
- # List all artifacts (includes both session and user-scoped)
156
- artifact_keys = await artifact_service.list_artifact_keys(
157
- app_name="my_app",
158
- user_id="user123",
159
- session_id="session456"
160
- )
161
-
162
- # Delete an artifact
163
- await artifact_service.delete_artifact(
164
- app_name="my_app",
165
- user_id="user123",
166
- session_id="session456",
167
- filename="greeting.txt"
168
- )
169
- ```
170
-
171
- # content_hash: c4df3504afaa30b614cafc8cda2c977b18d0036faabaaec82b2f7a9bc5b082f6
@@ -1,142 +0,0 @@
1
- # DEVELOPER GUIDE for models directory
2
-
3
- ## Quick Summary
4
- This directory contains concrete implementations of the `BaseLlm` interface, providing wrappers for various Large Language Model APIs. These classes translate the ADK's standard `LlmRequest` into provider-specific formats and parse responses back into standard `LlmResponse` objects.
5
-
6
- ## Files Overview
7
- - `lite_llm.py` - LLM client using the `litellm` library to support hundreds of models from different providers
8
-
9
- ## Developer API Reference
10
-
11
- ### lite_llm.py
12
- **Purpose:** Provides the `LiteLlm` class, a `BaseLlm` implementation that interfaces with hundreds of LLM models through the `litellm` library. Supports models from OpenAI, Anthropic, Vertex AI, and many other providers by simply changing the model string.
13
-
14
- **Import:** `from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm`
15
-
16
- **Classes:**
17
- - `LiteLlm(model: str, **kwargs)` - Wrapper around `litellm` supporting any model it recognizes
18
- - `generate_content_async(llm_request: LlmRequest, stream: bool = False) -> AsyncGenerator[LlmResponse, None]` - Generates content asynchronously with optional streaming
19
- - `supported_models() -> list[str]` - Returns list of supported models (empty for LiteLlm due to dynamic model support)
20
- - `model: str` - The name of the LiteLlm model
21
- - `llm_client: LiteLLMClient` - The LLM client instance used for API calls
22
-
23
- - `LiteLLMClient()` - Internal client providing completion methods for better testability
24
- - `acompletion(model, messages, tools, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]` - Asynchronous completion call
25
- - `completion(model, messages, tools, stream=False, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]` - Synchronous completion call
26
-
27
- - `FunctionChunk(BaseModel)` - Represents a function call chunk in streaming responses
28
- - `id: Optional[str]` - Function call ID
29
- - `name: Optional[str]` - Function name
30
- - `args: Optional[str]` - Function arguments as JSON string
31
- - `index: Optional[int]` - Index of the function call
32
-
33
- - `TextChunk(BaseModel)` - Represents a text chunk in streaming responses
34
- - `text: str` - The text content
35
-
36
- - `UsageMetadataChunk(BaseModel)` - Represents token usage information
37
- - `prompt_tokens: int` - Number of tokens in the prompt
38
- - `completion_tokens: int` - Number of tokens in the completion
39
- - `total_tokens: int` - Total number of tokens used
40
-
41
- **Functions:**
42
- - `_content_to_message_param(content: types.Content) -> Union[Message, list[Message]]` - Converts ADK Content to litellm Message format
43
- - `_get_content(parts: Iterable[types.Part]) -> Union[OpenAIMessageContent, str]` - Converts parts to litellm content format
44
- - `_function_declaration_to_tool_param(function_declaration: types.FunctionDeclaration) -> dict` - Converts function declarations to OpenAPI spec format
45
- - `_model_response_to_generate_content_response(response: ModelResponse) -> LlmResponse` - Converts litellm response to LlmResponse
46
-
47
- **Usage Examples:**
48
- ```python
49
- import asyncio
50
- import os
51
- from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
52
- from solace_agent_mesh.agent.adk.models.llm_request import LlmRequest, LlmConfig
53
- from google.genai.types import Content, Part
54
-
55
- # Set environment variables for your chosen provider
56
- # For OpenAI:
57
- # os.environ["OPENAI_API_KEY"] = "your-api-key"
58
- # For Vertex AI:
59
- # os.environ["VERTEXAI_PROJECT"] = "your-project-id"
60
- # os.environ["VERTEXAI_LOCATION"] = "your-location"
61
-
62
- async def main():
63
- # Initialize LiteLlm with a specific model
64
- llm = LiteLlm(
65
- model="gpt-4-turbo",
66
- temperature=0.7,
67
- max_completion_tokens=150
68
- )
69
-
70
- # Create a request
71
- request = LlmRequest(
72
- contents=[
73
- Content(
74
- role="user",
75
- parts=[Part.from_text("Explain quantum computing in simple terms")]
76
- )
77
- ],
78
- config=LlmConfig(
79
- temperature=0.5,
80
- max_output_tokens=200
81
- )
82
- )
83
-
84
- # Non-streaming generation
85
- print("=== Non-streaming ===")
86
- async for response in llm.generate_content_async(request, stream=False):
87
- print(f"Response: {response.text}")
88
- if response.usage_metadata:
89
- print(f"Tokens used: {response.usage_metadata.total_token_count}")
90
-
91
- # Streaming generation
92
- print("\n=== Streaming ===")
93
- async for response in llm.generate_content_async(request, stream=True):
94
- if response.text:
95
- print(response.text, end="", flush=True)
96
- if response.usage_metadata:
97
- print(f"\nTotal tokens: {response.usage_metadata.total_token_count}")
98
-
99
- # Example with function calling
100
- async def function_calling_example():
101
- from google.genai.types import FunctionDeclaration, Schema, Type, Tool
102
-
103
- # Define a function for the LLM to call
104
- get_weather_func = FunctionDeclaration(
105
- name="get_weather",
106
- description="Get current weather for a location",
107
- parameters=Schema(
108
- type=Type.OBJECT,
109
- properties={
110
- "location": Schema(type=Type.STRING, description="City name"),
111
- "unit": Schema(type=Type.STRING, description="Temperature unit")
112
- },
113
- required=["location"]
114
- )
115
- )
116
-
117
- llm = LiteLlm(model="gpt-4-turbo")
118
-
119
- request = LlmRequest(
120
- contents=[
121
- Content(
122
- role="user",
123
- parts=[Part.from_text("What's the weather like in Tokyo?")]
124
- )
125
- ],
126
- config=LlmConfig(
127
- tools=[Tool(function_declarations=[get_weather_func])]
128
- )
129
- )
130
-
131
- async for response in llm.generate_content_async(request):
132
- if response.function_calls:
133
- for func_call in response.function_calls:
134
- print(f"Function called: {func_call.name}")
135
- print(f"Arguments: {func_call.args}")
136
-
137
- if __name__ == "__main__":
138
- asyncio.run(main())
139
- # asyncio.run(function_calling_example())
140
- ```
141
-
142
- # content_hash: 97abaea0097e0d6fe18f1d747ed54ced092c0a96829dc5be8448b087ac5f7c20
@@ -1,378 +0,0 @@
1
- # DEVELOPER GUIDE for agent directory
2
-
3
- ## Quick Summary
4
- The `agent` directory provides a comprehensive framework for hosting Google ADK (Agent Development Kit) agents within the Solace AI Connector ecosystem. It bridges ADK agents with the A2A (Agent-to-Agent) protocol over Solace messaging, enabling distributed agent communication, task delegation, and rich tool functionality.
5
-
6
- The architecture is modular, consisting of several key components:
7
- - **`sac/` (Solace AI Connector):** The main entry point, providing the `SamAgentApp` and `SamAgentComponent` to host the agent and manage its lifecycle and communication over the Solace event mesh.
8
- - **`adk/` (Agent Development Kit):** The core integration layer with Google's ADK. It defines the custom `AppLlmAgent`, manages asynchronous task execution, and provides a rich set of callbacks to augment agent behavior.
9
- - **`tools/`:** A comprehensive and extensible library of tools available to the agent, covering data analysis, artifact management, web requests, multimedia processing, and inter-agent communication.
10
- - **`protocol/`:** The underlying implementation of the A2A (Agent-to-Agent) communication protocol, handling message routing and event processing.
11
- - **`utils/`:** A collection of helper modules for common tasks like artifact management, configuration parsing, and context handling.
12
- - **`testing/`:** Utilities to aid in debugging and testing custom agent implementations.
13
-
14
- These components work together to create a robust environment where an ADK agent can be configured with specific instructions and tools, communicate with other agents, and execute complex tasks in a distributed, event-driven manner.
15
-
16
- ## Files and Subdirectories Overview
17
- - **Direct files:**
18
- - `__init__.py`: Standard Python package initializer that marks the `agent` directory as a Python package
19
- - `agent_llm.txt`: Documentation file containing comprehensive developer guide content
20
- - **Subdirectories:**
21
- - `adk/`: Provides the core integration layer with Google's ADK, including custom agents, services, and callbacks
22
- - `protocol/`: Implements the A2A protocol event handlers for message routing and agent communication
23
- - `sac/`: Contains the Solace AI Connector app and component implementations for hosting ADK agents
24
- - `testing/`: Provides utilities for testing the A2A framework and debugging agent behavior
25
- - `tools/`: A comprehensive, registry-based tool library for AI agents
26
- - `utils/`: Contains helper utilities for configuration, context handling, and artifact management
27
-
28
- ## Developer API Reference
29
-
30
- ### Direct Files
31
-
32
- #### __init__.py
33
- **Purpose:** Standard Python package initializer. It allows the `agent` directory to be treated as a package.
34
- **Import:** `import solace_agent_mesh.agent`
35
-
36
- **Classes/Functions/Constants:** [None - empty file]
37
-
38
- #### agent_llm.txt
39
- **Purpose:** Documentation file containing comprehensive developer guide content
40
- **Import:** Not applicable - this is a documentation file, not a code module
41
-
42
- **Classes/Functions/Constants:** [None - documentation file]
43
-
44
- ### Subdirectory APIs
45
-
46
- #### adk/
47
- **Purpose:** Provides the core integration layer between the Solace AI Connector and Google's ADK
48
- **Key Exports:** `AppLlmAgent`, `initialize_adk_agent`, `initialize_adk_runner`, `load_adk_tools`, `FilesystemArtifactService`, `LiteLlm`
49
- **Import Examples:**
50
- ```python
51
- from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
52
- from solace_agent_mesh.agent.adk.app_llm_agent import AppLlmAgent
53
- from solace_agent_mesh.agent.adk.filesystem_artifact_service import FilesystemArtifactService
54
- from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
55
- from solace_agent_mesh.agent.adk.services import initialize_session_service, initialize_artifact_service
56
- ```
57
-
58
- #### protocol/
59
- **Purpose:** Implements the core logic for Agent-to-Agent (A2A) communication protocol
60
- **Key Exports:** `process_event`, `handle_a2a_request`, `handle_agent_card_message`, `publish_agent_card`
61
- **Import Examples:**
62
- ```python
63
- from solace_agent_mesh.agent.protocol.event_handlers import process_event, publish_agent_card
64
- ```
65
-
66
- #### sac/
67
- **Purpose:** Provides the Solace AI Connector app and component implementations for hosting ADK agents
68
- **Key Exports:** `SamAgentApp`, `SamAgentComponent`, `TaskExecutionContext`
69
- **Import Examples:**
70
- ```python
71
- from solace_agent_mesh.agent.sac.app import SamAgentApp
72
- from solace_agent_mesh.agent.sac.component import SamAgentComponent
73
- from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
74
- ```
75
-
76
- #### testing/
77
- **Purpose:** Provides utilities for testing the A2A framework and debugging agent behavior
78
- **Key Exports:** `pretty_print_event_history`
79
- **Import Examples:**
80
- ```python
81
- from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
82
- ```
83
-
84
- #### tools/
85
- **Purpose:** A comprehensive, registry-based tool library for AI agents
86
- **Key Exports:** `tool_registry`, `BuiltinTool`, `PeerAgentTool`, and various tool functions
87
- **Import Examples:**
88
- ```python
89
- from solace_agent_mesh.agent.tools.registry import tool_registry
90
- from solace_agent_mesh.agent.tools.peer_agent_tool import PeerAgentTool
91
- from solace_agent_mesh.agent.tools.audio_tools import text_to_speech
92
- from solace_agent_mesh.agent.tools.builtin_artifact_tools import list_artifacts, load_artifact
93
- ```
94
-
95
- #### utils/
96
- **Purpose:** Contains helper utilities for configuration, context handling, and artifact management
97
- **Key Exports:** `save_artifact_with_metadata`, `load_artifact_content_or_metadata`, `resolve_instruction_provider`
98
- **Import Examples:**
99
- ```python
100
- from solace_agent_mesh.agent.utils.artifact_helpers import save_artifact_with_metadata, load_artifact_content_or_metadata
101
- from solace_agent_mesh.agent.utils.config_parser import resolve_instruction_provider
102
- from solace_agent_mesh.agent.utils.context_helpers import get_session_from_callback_context
103
- ```
104
-
105
- ## Complete Usage Guide
106
-
107
- ### 1. Basic Agent Setup and Configuration
108
-
109
- ```python
110
- # Import the main SAC components
111
- from solace_agent_mesh.agent.sac.app import SamAgentApp
112
- from solace_agent_mesh.agent.sac.component import SamAgentComponent
113
-
114
- # The agent is typically configured via YAML and instantiated by the SAC framework
115
- # Example agent-config.yaml:
116
- """
117
- app:
118
- class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
119
- app_config:
120
- namespace: "my-org/production"
121
- agent_name: "customer-support-agent"
122
- model: "gemini-1.5-pro-latest"
123
- tools:
124
- - tool_type: "builtin"
125
- tool_name: "text_to_speech"
126
- - tool_type: "builtin"
127
- tool_name: "list_artifacts"
128
- agent_card:
129
- description: "An agent that can answer questions about customer accounts."
130
- session_service:
131
- type: "memory"
132
- artifact_service:
133
- type: "filesystem"
134
- base_path: "/tmp/artifacts"
135
- """
136
- ```
137
-
138
- ### 2. Working with ADK Components
139
-
140
- ```python
141
- from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
142
- from solace_agent_mesh.agent.adk.services import initialize_session_service, initialize_artifact_service
143
- from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
144
-
145
- async def setup_adk_agent(component):
146
- # Initialize services
147
- session_service = initialize_session_service(component)
148
- artifact_service = initialize_artifact_service(component)
149
-
150
- # Load tools
151
- loaded_tools, builtin_tools = await load_adk_tools(component)
152
-
153
- # Initialize agent with LLM
154
- agent = initialize_adk_agent(component, loaded_tools, builtin_tools)
155
-
156
- # Initialize runner
157
- runner = initialize_adk_runner(component)
158
-
159
- return agent, runner
160
- ```
161
-
162
- ### 3. Custom Tool Development
163
-
164
- ```python
165
- from solace_agent_mesh.agent.tools.registry import tool_registry
166
- from solace_agent_mesh.agent.tools.tool_definition import BuiltinTool
167
- from google.adk.tools import ToolContext
168
-
169
- # Define a custom tool function
170
- async def my_custom_tool(
171
- query: str,
172
- tool_context: ToolContext = None,
173
- tool_config: dict = None
174
- ) -> dict:
175
- """A custom tool that processes queries."""
176
- # Access the host component
177
- host_component = tool_context._invocation_context.agent.host_component
178
-
179
- # Use agent state
180
- db_connection = host_component.get_agent_specific_state('db_connection')
181
-
182
- # Process the query
183
- result = await process_query(query, db_connection)
184
-
185
- return {"result": result, "status": "success"}
186
-
187
- # Register the tool
188
- custom_tool = BuiltinTool(
189
- name="my_custom_tool",
190
- description="Processes custom queries",
191
- function=my_custom_tool,
192
- category="custom"
193
- )
194
- tool_registry.register(custom_tool)
195
- ```
196
-
197
- ### 4. Artifact Management
198
-
199
- ```python
200
- from solace_agent_mesh.agent.utils.artifact_helpers import (
201
- save_artifact_with_metadata,
202
- load_artifact_content_or_metadata,
203
- get_artifact_info_list
204
- )
205
- from datetime import datetime, timezone
206
-
207
- async def artifact_operations(component, artifact_service):
208
- # Save an artifact with metadata
209
- content = b"Hello, world!"
210
- result = await save_artifact_with_metadata(
211
- artifact_service=artifact_service,
212
- app_name=component.get_config()["app_name"],
213
- user_id="user123",
214
- session_id="session456",
215
- filename="greeting.txt",
216
- content_bytes=content,
217
- mime_type="text/plain",
218
- metadata_dict={"source": "custom_tool", "description": "A greeting"},
219
- timestamp=datetime.now(timezone.utc)
220
- )
221
-
222
- # Load the artifact
223
- loaded = await load_artifact_content_or_metadata(
224
- artifact_service=artifact_service,
225
- app_name=component.get_config()["app_name"],
226
- user_id="user123",
227
- session_id="session456",
228
- filename="greeting.txt",
229
- version="latest"
230
- )
231
-
232
- # List all artifacts
233
- artifacts = await get_artifact_info_list(
234
- artifact_service=artifact_service,
235
- app_name=component.get_config()["app_name"],
236
- user_id="user123",
237
- session_id="session456"
238
- )
239
-
240
- return artifacts
241
- ```
242
-
243
- ### 5. Inter-Agent Communication
244
-
245
- ```python
246
- from solace_agent_mesh.agent.tools.peer_agent_tool import PeerAgentTool
247
-
248
- # Create a peer agent tool (typically done automatically by the framework)
249
- peer_tool = PeerAgentTool("data_analyst_agent", host_component)
250
-
251
- # The LLM can then use this tool to delegate tasks:
252
- # "Please use the data_analyst_agent to analyze the sales data in report.csv"
253
-
254
- # The framework handles the A2A protocol communication automatically
255
- ```
256
-
257
- ### 6. Audio and Multimedia Tools
258
-
259
- ```python
260
- from solace_agent_mesh.agent.tools.audio_tools import text_to_speech, multi_speaker_text_to_speech
261
- from solace_agent_mesh.agent.tools.image_tools import create_image_from_description, describe_image
262
-
263
- async def multimedia_example(tool_context):
264
- # Generate speech from text
265
- tts_result = await text_to_speech(
266
- text="Welcome to our service!",
267
- output_filename="welcome.mp3",
268
- gender="female",
269
- tone="friendly",
270
- tool_context=tool_context
271
- )
272
-
273
- # Create a multi-speaker conversation
274
- conversation_result = await multi_speaker_text_to_speech(
275
- conversation_text="Alice: Hello there!\nBob: Hi Alice, how are you?",
276
- speaker_configs=[
277
- {"name": "Alice", "gender": "female", "tone": "bright"},
278
- {"name": "Bob", "gender": "male", "tone": "warm"}
279
- ],
280
- tool_context=tool_context
281
- )
282
-
283
- # Generate an image
284
- image_result = await create_image_from_description(
285
- image_description="A futuristic cityscape at sunset",
286
- output_filename="cityscape.png",
287
- tool_context=tool_context
288
- )
289
-
290
- return tts_result, conversation_result, image_result
291
- ```
292
-
293
- ### 7. Testing and Debugging
294
-
295
- ```python
296
- from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
297
- from solace_agent_mesh.agent.adk.invocation_monitor import InvocationMonitor
298
-
299
- # Debug event history in tests
300
- def test_agent_behavior():
301
- event_history = [
302
- {"result": {"status": {"state": "EXECUTING"}}},
303
- {"result": {"status": {"state": "COMPLETED"}}}
304
- ]
305
-
306
- # Print formatted event history for debugging
307
- pretty_print_event_history(event_history)
308
-
309
- # Monitor agent invocations
310
- monitor = InvocationMonitor()
311
- monitor.log_message_event("incoming", "agent/request", {"task": "analyze data"})
312
- ```
313
-
314
- ### 8. Configuration and Context Handling
315
-
316
- ```python
317
- from solace_agent_mesh.agent.utils.config_parser import resolve_instruction_provider
318
- from solace_agent_mesh.agent.utils.context_helpers import get_session_from_callback_context
319
-
320
- # Resolve dynamic instructions
321
- def setup_agent_instructions(component):
322
- # Static instruction
323
- static_instruction = resolve_instruction_provider(
324
- component,
325
- "You are a helpful customer service agent."
326
- )
327
-
328
- # Dynamic instruction function
329
- def dynamic_instruction(context):
330
- return f"You are assisting user {context.user_id} in session {context.session_id}"
331
-
332
- dynamic_provider = resolve_instruction_provider(component, dynamic_instruction)
333
-
334
- return static_instruction, dynamic_provider
335
-
336
- # Safe context extraction in tools
337
- def my_tool_with_context(tool_context):
338
- session = get_session_from_callback_context(tool_context)
339
- original_session_id = get_original_session_id(tool_context._invocation_context)
340
-
341
- return {"session_id": original_session_id, "session_data": session}
342
- ```
343
-
344
- ### 9. Complete Agent Implementation Example
345
-
346
- ```python
347
- from solace_agent_mesh.agent.sac.app import SamAgentApp
348
- from solace_agent_mesh.agent.sac.component import SamAgentComponent
349
- from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
350
- from solace_agent_mesh.agent.tools.registry import tool_registry
351
- from solace_agent_mesh.agent.tools.tool_definition import BuiltinTool
352
-
353
- # Custom initialization function
354
- def initialize_my_agent(host_component: SamAgentComponent, config: dict):
355
- """Custom initialization function for the agent."""
356
- # Store custom state
357
- host_component.set_agent_specific_state('custom_data', config.get('custom_data'))
358
-
359
- # Set dynamic system instruction
360
- def dynamic_instruction(context):
361
- return f"You are a specialized agent for user {context.user_id}"
362
-
363
- host_component.set_agent_system_instruction_callback(dynamic_instruction)
364
-
365
- # Custom tool
366
- async def my_business_tool(
367
- query: str,
368
- tool_context = None,
369
- tool_config: dict = None
370
- ) -> dict:
371
- """Custom business logic tool."""
372
- host_component = tool_context._invocation_context.agent.host_component
373
- custom_data = host_component.get_agent_specific_state('custom_data')
374
-
375
- # Process business logic
376
- result =
377
-
378
- # content_hash: 596f8253b415eaca3335f7660837dee9a090b3cab0b6e0a4daf92ca9a16d0123