solace-agent-mesh 1.7.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 (447) 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/artifacts/filesystem_artifact_service.py +164 -0
  7. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
  8. solace_agent_mesh/agent/adk/callbacks.py +752 -127
  9. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +99 -7
  10. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
  11. solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
  12. solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
  13. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
  14. solace_agent_mesh/agent/adk/runner.py +66 -8
  15. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  16. solace_agent_mesh/agent/adk/services.py +41 -1
  17. solace_agent_mesh/agent/adk/setup.py +220 -32
  18. solace_agent_mesh/agent/adk/stream_parser.py +229 -40
  19. solace_agent_mesh/agent/protocol/event_handlers.py +219 -33
  20. solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
  21. solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
  22. solace_agent_mesh/agent/proxies/base/component.py +188 -22
  23. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
  24. solace_agent_mesh/agent/sac/app.py +37 -12
  25. solace_agent_mesh/agent/sac/component.py +322 -52
  26. solace_agent_mesh/agent/sac/patch_adk.py +8 -16
  27. solace_agent_mesh/agent/sac/task_execution_context.py +90 -0
  28. solace_agent_mesh/agent/tools/__init__.py +3 -0
  29. solace_agent_mesh/agent/tools/audio_tools.py +3 -3
  30. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +698 -24
  31. solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
  32. solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
  33. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  34. solace_agent_mesh/agent/tools/tool_config_types.py +54 -2
  35. solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +125 -17
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +243 -5
  38. solace_agent_mesh/agent/utils/context_helpers.py +17 -0
  39. solace_agent_mesh/assets/docs/404.html +6 -6
  40. solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
  41. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
  43. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  45. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  46. solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
  47. solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
  56. solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
  87. solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
  88. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
  89. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
  90. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
  91. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
  92. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +75 -75
  93. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
  94. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
  95. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
  96. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
  97. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
  98. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
  99. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
  100. solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
  102. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +98 -112
  103. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  104. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
  105. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  106. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -28
  107. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -29
  108. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
  109. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
  110. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
  111. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +67 -53
  112. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -17
  113. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
  115. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +87 -87
  116. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
  117. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
  118. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
  119. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
  120. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
  121. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
  122. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
  123. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
  124. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
  125. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
  126. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
  127. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
  128. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
  129. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
  130. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  131. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +50 -23
  132. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +29 -24
  133. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +21 -21
  134. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
  135. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +96 -66
  137. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +181 -181
  138. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +75 -75
  139. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +27 -27
  140. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
  141. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -38
  142. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +135 -114
  146. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +37 -37
  147. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
  148. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
  149. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
  150. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
  151. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +112 -112
  152. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +28 -28
  153. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
  154. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
  155. solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
  156. solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
  157. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  158. solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
  159. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  160. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  161. solace_agent_mesh/cli/__init__.py +1 -1
  162. solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
  163. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
  164. solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
  165. solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
  166. solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
  167. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
  168. solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
  169. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
  170. solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
  171. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
  172. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
  173. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
  174. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
  175. solace_agent_mesh/cli/commands/run_cmd.py +64 -49
  176. solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
  177. solace_agent_mesh/cli/main.py +15 -0
  178. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-tcIFZLis.js → authCallback-KnKMP_vb.js} +1 -1
  179. solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
  180. solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
  181. solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
  182. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CINwxvwV.js → vendor-CGk8Suyh.js} +189 -94
  183. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  184. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  185. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  186. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  187. solace_agent_mesh/common/a2a/types.py +1 -1
  188. solace_agent_mesh/common/agent_registry.py +38 -11
  189. solace_agent_mesh/common/data_parts.py +124 -0
  190. solace_agent_mesh/common/error_handlers.py +83 -0
  191. solace_agent_mesh/common/exceptions.py +24 -0
  192. solace_agent_mesh/common/oauth/__init__.py +17 -0
  193. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  194. solace_agent_mesh/common/oauth/utils.py +50 -0
  195. solace_agent_mesh/common/rag_dto.py +156 -0
  196. solace_agent_mesh/common/sac/sam_component_base.py +73 -1
  197. solace_agent_mesh/common/sam_events/event_service.py +2 -2
  198. solace_agent_mesh/common/utils/embeds/converter.py +1 -8
  199. solace_agent_mesh/common/utils/embeds/modifiers.py +2 -27
  200. solace_agent_mesh/common/utils/embeds/resolver.py +94 -25
  201. solace_agent_mesh/common/utils/embeds/types.py +1 -0
  202. solace_agent_mesh/common/utils/log_formatters.py +20 -0
  203. solace_agent_mesh/common/utils/mime_helpers.py +12 -5
  204. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  205. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  206. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  207. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  208. solace_agent_mesh/config_portal/backend/common.py +12 -0
  209. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
  210. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
  211. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
  212. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
  213. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
  214. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
  215. solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
  216. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  217. solace_agent_mesh/core_a2a/service.py +3 -2
  218. solace_agent_mesh/gateway/adapter/base.py +28 -1
  219. solace_agent_mesh/gateway/adapter/types.py +9 -0
  220. solace_agent_mesh/gateway/base/app.py +10 -0
  221. solace_agent_mesh/gateway/base/auth_interface.py +103 -0
  222. solace_agent_mesh/gateway/base/component.py +451 -10
  223. solace_agent_mesh/gateway/generic/component.py +274 -30
  224. solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
  225. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +2 -43
  226. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +2 -2
  227. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  228. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  229. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  230. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  231. solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
  232. solace_agent_mesh/gateway/http_sse/app.py +23 -6
  233. solace_agent_mesh/gateway/http_sse/component.py +158 -73
  234. solace_agent_mesh/gateway/http_sse/dependencies.py +50 -57
  235. solace_agent_mesh/gateway/http_sse/main.py +58 -482
  236. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
  237. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
  238. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
  239. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +3 -2
  240. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
  241. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
  242. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
  243. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +5 -0
  244. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  245. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +1 -1
  246. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
  247. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
  248. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
  249. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +12 -107
  250. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
  251. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
  252. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +113 -7
  253. solace_agent_mesh/gateway/http_sse/routers/auth.py +69 -132
  254. solace_agent_mesh/gateway/http_sse/routers/config.py +235 -10
  255. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  256. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  257. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +1 -1
  258. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
  259. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +1 -0
  260. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +3 -2
  261. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  262. solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
  263. solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
  264. solace_agent_mesh/gateway/http_sse/routers/projects.py +250 -24
  265. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
  266. solace_agent_mesh/gateway/http_sse/routers/sessions.py +14 -5
  267. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  268. solace_agent_mesh/gateway/http_sse/routers/sse.py +117 -4
  269. solace_agent_mesh/gateway/http_sse/routers/tasks.py +509 -149
  270. solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
  271. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  272. solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
  273. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  274. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  275. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
  276. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
  277. solace_agent_mesh/gateway/http_sse/services/project_service.py +539 -12
  278. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  279. solace_agent_mesh/gateway/http_sse/services/session_service.py +198 -21
  280. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
  281. solace_agent_mesh/gateway/http_sse/sse_manager.py +280 -169
  282. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  283. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
  284. solace_agent_mesh/services/__init__.py +0 -0
  285. solace_agent_mesh/services/platform/__init__.py +29 -0
  286. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  287. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  288. solace_agent_mesh/services/platform/alembic.ini +109 -0
  289. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  290. solace_agent_mesh/services/platform/api/dependencies.py +154 -0
  291. solace_agent_mesh/services/platform/api/main.py +314 -0
  292. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  293. solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
  294. solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
  295. solace_agent_mesh/services/platform/app.py +215 -0
  296. solace_agent_mesh/services/platform/component.py +777 -0
  297. solace_agent_mesh/shared/__init__.py +14 -0
  298. solace_agent_mesh/shared/api/__init__.py +42 -0
  299. solace_agent_mesh/shared/auth/__init__.py +26 -0
  300. solace_agent_mesh/shared/auth/dependencies.py +204 -0
  301. solace_agent_mesh/shared/auth/middleware.py +347 -0
  302. solace_agent_mesh/shared/database/__init__.py +20 -0
  303. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
  304. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
  305. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
  306. solace_agent_mesh/shared/exceptions/__init__.py +36 -0
  307. solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +1 -1
  308. solace_agent_mesh/shared/utils/__init__.py +21 -0
  309. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  310. solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
  311. solace_agent_mesh/templates/platform.yaml +49 -0
  312. solace_agent_mesh/templates/plugin_readme_template.md +3 -25
  313. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  314. solace_agent_mesh/templates/proxy_template.yaml +62 -0
  315. solace_agent_mesh/templates/webui.yaml +148 -6
  316. solace_agent_mesh/tools/web_search/__init__.py +18 -0
  317. solace_agent_mesh/tools/web_search/base.py +84 -0
  318. solace_agent_mesh/tools/web_search/google_search.py +247 -0
  319. solace_agent_mesh/tools/web_search/models.py +99 -0
  320. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +29 -8
  321. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/RECORD +334 -313
  322. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
  323. solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
  324. solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
  325. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
  326. solace_agent_mesh/agent/adk/models/models_llm.txt +0 -189
  327. solace_agent_mesh/agent/agent_llm.txt +0 -369
  328. solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
  329. solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
  330. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
  331. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +0 -190
  332. solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
  333. solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
  334. solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
  335. solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
  336. solace_agent_mesh/agent/testing/testing_llm.txt +0 -58
  337. solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
  338. solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
  339. solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
  340. solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
  341. solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
  342. solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +0 -1
  343. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
  344. solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +0 -1
  345. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
  346. solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +0 -1
  347. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
  348. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
  349. solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +0 -1
  350. solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +0 -1
  351. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
  352. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
  353. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +0 -1
  354. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
  355. solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +0 -1
  356. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
  357. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
  358. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
  359. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
  360. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
  361. solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +0 -1
  362. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
  363. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
  364. solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
  365. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
  366. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +0 -1
  367. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
  368. solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +0 -1
  369. solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +0 -1
  370. solace_agent_mesh/assets/docs/assets/js/e6f9706b.045d0fa1.js +0 -1
  371. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
  372. solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +0 -1
  373. solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +0 -2
  374. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +0 -1
  375. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +0 -47
  376. solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +0 -1
  377. solace_agent_mesh/assets/docs/search-doc-1762283454666.json +0 -1
  378. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
  379. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
  380. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
  381. solace_agent_mesh/client/webui/frontend/static/assets/client-CRYdKo2Q.js +0 -25
  382. solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +0 -1
  383. solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +0 -353
  384. solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
  385. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
  386. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
  387. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
  388. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
  389. solace_agent_mesh/common/common_llm.txt +0 -230
  390. solace_agent_mesh/common/common_llm_detail.txt +0 -2562
  391. solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
  392. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
  393. solace_agent_mesh/common/sac/sac_llm.txt +0 -71
  394. solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
  395. solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
  396. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
  397. solace_agent_mesh/common/services/providers/providers_llm.txt +0 -81
  398. solace_agent_mesh/common/services/services_llm.txt +0 -368
  399. solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
  400. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
  401. solace_agent_mesh/common/utils/utils_llm.txt +0 -335
  402. solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
  403. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
  404. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
  405. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
  406. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
  407. solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
  408. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
  409. solace_agent_mesh/gateway/base/base_llm.txt +0 -226
  410. solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
  411. solace_agent_mesh/gateway/gateway_llm.txt +0 -369
  412. solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
  413. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
  414. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +0 -92
  415. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
  416. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
  417. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
  418. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
  419. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -221
  420. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
  421. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
  422. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
  423. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
  424. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
  425. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
  426. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
  427. solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
  428. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
  429. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
  430. solace_agent_mesh/llm.txt +0 -228
  431. solace_agent_mesh/llm_detail.txt +0 -2835
  432. solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
  433. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
  434. solace_agent_mesh/templates/logging_config_template.ini +0 -45
  435. solace_agent_mesh/templates/templates_llm.txt +0 -147
  436. /solace_agent_mesh/assets/docs/assets/js/{main.f213fe0c.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
  437. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
  438. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
  439. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
  440. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
  441. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
  442. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
  443. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
  444. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
  445. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
  446. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
  447. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,283 +0,0 @@
1
- # DEVELOPER GUIDE: proxies
2
-
3
- ## Quick Summary
4
- The `proxies` directory provides a framework for creating proxy applications that enable the Solace Agent Mesh to communicate with downstream agents using various protocols. It consists of protocol-agnostic base classes in the `base/` subdirectory that handle common functionality like message routing, agent discovery, and task management, plus concrete implementations like `a2a/` for A2A-over-HTTPS protocol support.
5
-
6
- ## Files and Subdirectories Overview
7
- - **Direct files:**
8
- - `__init__.py` - Empty package initialization file
9
- - **Subdirectories:**
10
- - `base/` - Abstract base classes for proxy applications and components with common functionality
11
- - `a2a/` - Concrete implementation for proxying A2A-over-HTTPS agents with authentication support
12
-
13
- ## Developer API Reference
14
-
15
- ### Direct Files
16
-
17
- #### __init__.py
18
- **Purpose:** Package initialization (empty file)
19
- **Import:** `from solace_agent_mesh.agent.proxies import *`
20
-
21
- No public API - this is an empty initialization file.
22
-
23
- ### Subdirectory APIs
24
-
25
- #### base/
26
- **Purpose:** Provides abstract base classes and configuration models for building proxy applications
27
- **Key Exports:** BaseProxyApp, BaseProxyComponent, BaseProxyAppConfig, ProxyTaskContext
28
- **Import Examples:**
29
- ```python
30
- from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp
31
- from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
32
- from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig, ProxiedAgentConfig
33
- from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext
34
- ```
35
-
36
- #### a2a/
37
- **Purpose:** Concrete implementation for proxying A2A-over-HTTPS agents with OAuth 2.0 and static authentication
38
- **Key Exports:** A2AProxyApp, A2AProxyComponent, A2AProxyAppConfig, OAuth2TokenCache
39
- **Import Examples:**
40
- ```python
41
- from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
42
- from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
43
- from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig, AuthenticationConfig
44
- from solace_agent_mesh.agent.proxies.a2a.oauth_token_cache import OAuth2TokenCache
45
- ```
46
-
47
- ## Complete Usage Guide
48
-
49
- ### 1. Creating a Custom Proxy Implementation
50
-
51
- To create a new proxy for a different protocol, extend the base classes:
52
-
53
- ```python
54
- from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp
55
- from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
56
- from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig
57
- from a2a.types import AgentCard, A2ARequest
58
- from typing import Optional
59
-
60
- # Custom configuration (extend BaseProxyAppConfig)
61
- class MyProxyAppConfig(BaseProxyAppConfig):
62
- custom_setting: str = "default_value"
63
-
64
- # Custom component implementation
65
- class MyProxyComponent(BaseProxyComponent):
66
- async def _fetch_agent_card(self, agent_config: dict) -> Optional[AgentCard]:
67
- # Implement protocol-specific agent discovery
68
- url = agent_config.get("url")
69
- # Make HTTP request to get agent capabilities
70
- # Return AgentCard with agent information
71
- pass
72
-
73
- async def _forward_request(self, task_context, request: A2ARequest, agent_name: str):
74
- # Implement protocol-specific request forwarding
75
- # Forward request to downstream agent
76
- # Handle response and publish back to Solace
77
- pass
78
-
79
- # Custom app class
80
- class MyProxyApp(BaseProxyApp):
81
- def _get_component_class(self):
82
- return MyProxyComponent
83
- ```
84
-
85
- ### 2. Using the A2A Proxy Implementation
86
-
87
- The most common use case is using the built-in A2A proxy:
88
-
89
- ```python
90
- from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
91
- from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig, AuthenticationConfig
92
-
93
- # Configuration with OAuth 2.0 authentication
94
- app_info = {
95
- "app_config": {
96
- "namespace": "myorg/production",
97
- "proxied_agents": [
98
- {
99
- "name": "external-agent",
100
- "url": "https://external-agent.example.com",
101
- "request_timeout_seconds": 120,
102
- "authentication": {
103
- "type": "oauth2_client_credentials",
104
- "token_url": "https://auth.example.com/oauth/token",
105
- "client_id": "my-client-id",
106
- "client_secret": "my-client-secret",
107
- "scope": "agent:read agent:write",
108
- "token_cache_duration_seconds": 3300
109
- }
110
- },
111
- {
112
- "name": "api-key-agent",
113
- "url": "https://api-agent.example.com",
114
- "authentication": {
115
- "type": "static_bearer",
116
- "token": "my-api-key"
117
- }
118
- }
119
- ],
120
- "artifact_service": {
121
- "type": "gcs",
122
- "bucket_name": "my-artifacts-bucket",
123
- "artifact_scope": "namespace"
124
- },
125
- "discovery_interval_seconds": 30,
126
- "default_request_timeout_seconds": 300
127
- }
128
- }
129
-
130
- # Create and run the proxy app
131
- app = A2AProxyApp(app_info)
132
- # App automatically handles Solace subscriptions and agent discovery
133
- ```
134
-
135
- ### 3. Working with Authentication
136
-
137
- The A2A proxy supports multiple authentication methods:
138
-
139
- ```python
140
- from solace_agent_mesh.agent.proxies.a2a.config import AuthenticationConfig
141
-
142
- # OAuth 2.0 Client Credentials
143
- oauth_auth = AuthenticationConfig(
144
- type="oauth2_client_credentials",
145
- token_url="https://auth.provider.com/token",
146
- client_id="client123",
147
- client_secret="secret456",
148
- scope="read write",
149
- token_cache_duration_seconds=3300 # Cache for 55 minutes
150
- )
151
-
152
- # Static Bearer Token
153
- bearer_auth = AuthenticationConfig(
154
- type="static_bearer",
155
- token="Bearer abc123xyz"
156
- )
157
-
158
- # Static API Key
159
- apikey_auth = AuthenticationConfig(
160
- type="static_apikey",
161
- token="api-key-value"
162
- )
163
- ```
164
-
165
- ### 4. Managing OAuth Token Cache
166
-
167
- For OAuth 2.0 authentication, tokens are automatically cached:
168
-
169
- ```python
170
- from solace_agent_mesh.agent.proxies.a2a.oauth_token_cache import OAuth2TokenCache
171
- from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
172
-
173
- # Access the component to manage cache
174
- component = A2AProxyComponent(proxied_agents_config=config)
175
-
176
- # Clear all cached tokens (useful for testing or credential rotation)
177
- component.clear_client_cache()
178
-
179
- # Direct cache usage (advanced)
180
- cache = OAuth2TokenCache()
181
- await cache.set("agent-name", "access_token", 3600)
182
- token = await cache.get("agent-name")
183
- await cache.invalidate("agent-name")
184
- ```
185
-
186
- ### 5. Task Context and Lifecycle Management
187
-
188
- The proxy framework automatically manages task contexts:
189
-
190
- ```python
191
- from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext
192
-
193
- # Task contexts are created automatically when requests arrive
194
- # They contain A2A protocol information and task state
195
- task_context = ProxyTaskContext(
196
- task_id="unique-task-id",
197
- a2a_context={
198
- "jsonrpc_request_id": "req-123",
199
- "logical_task_id": "task-456",
200
- "session_id": "session-789",
201
- "user_id": "user123",
202
- "status_topic": "status/myorg/production/external-agent",
203
- "reply_to_topic": "reply/myorg/production/external-agent",
204
- "is_streaming": False
205
- }
206
- )
207
-
208
- # Access task information in custom components
209
- print(f"Handling task: {task_context.task_id}")
210
- print(f"User: {task_context.a2a_context['user_id']}")
211
- ```
212
-
213
- ### 6. Configuration Validation
214
-
215
- All proxy configurations use Pydantic for validation:
216
-
217
- ```python
218
- from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig
219
- from pydantic import ValidationError
220
-
221
- try:
222
- config = A2AProxyAppConfig.model_validate({
223
- "namespace": "myorg/dev",
224
- "proxied_agents": [
225
- {
226
- "name": "test-agent",
227
- "url": "https://agent.example.com",
228
- "authentication": {
229
- "type": "oauth2_client_credentials",
230
- "token_url": "https://auth.example.com/token",
231
- "client_id": "client123"
232
- # Missing client_secret - will cause validation error
233
- }
234
- }
235
- ]
236
- })
237
- except ValidationError as e:
238
- print(f"Configuration error: {e}")
239
- ```
240
-
241
- ### 7. Integration Patterns
242
-
243
- Common patterns for integrating proxies into larger applications:
244
-
245
- ```python
246
- # Pattern 1: Direct instantiation
247
- from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
248
-
249
- app = A2AProxyApp(app_info)
250
- # App handles its own lifecycle
251
-
252
- # Pattern 2: Component access for advanced control
253
- from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
254
-
255
- component = A2AProxyComponent(
256
- proxied_agents_config=config["proxied_agents"],
257
- namespace=config["namespace"],
258
- # ... other broker settings
259
- )
260
-
261
- # Manual lifecycle management
262
- await component.run()
263
- # ... application logic
264
- await component.cleanup()
265
-
266
- # Pattern 3: Custom proxy with base classes
267
- class CustomProtocolProxy(BaseProxyComponent):
268
- def __init__(self, **kwargs):
269
- super().__init__(**kwargs)
270
- self.custom_clients = {}
271
-
272
- async def _fetch_agent_card(self, agent_config):
273
- # Custom discovery logic
274
- pass
275
-
276
- async def _forward_request(self, task_context, request, agent_name):
277
- # Custom forwarding logic
278
- pass
279
- ```
280
-
281
- This comprehensive guide covers all the main use cases for the proxies directory, from using the built-in A2A proxy to creating custom proxy implementations for new protocols.
282
-
283
- # content_hash: 2f19070457fccc3f5c8f680f44788fb63495f9ea3b3da7d71ddb5a52f8f5b0f6
@@ -1,189 +0,0 @@
1
- # DEVELOPER GUIDE for the directory: sac
2
-
3
- ## Quick Summary
4
- The `sac` (Solace AI Connector) directory provides the core implementation for hosting a Google ADK (Agent Development Kit) agent within the Solace AI Connector framework. It acts as a bridge, enabling ADK agents to communicate using the A2A (Agent-to-Agent) protocol over Solace messaging. This allows for the creation of distributed, collaborative agent systems where agents can delegate tasks, share information, and work together to solve complex problems.
5
-
6
- ## Files Overview
7
- - `__init__.py` - Empty package marker file
8
- - `app.py` - Custom SAC App class that automatically configures Solace subscriptions and broker settings for A2A communication
9
- - `component.py` - Main SAC Component that hosts the ADK agent, manages its lifecycle, and handles all A2A protocol messaging
10
- - `patch_adk.py` - Runtime patches for the Google ADK library to enhance or correct its behavior
11
- - `task_execution_context.py` - State management class that encapsulates all runtime information for a single, in-flight A2A task
12
-
13
- ## Developer API Reference
14
-
15
- ### app.py
16
- **Purpose:** Provides a custom SAC App class that simplifies the configuration of an A2A agent
17
- **Import:** `from solace_agent_mesh.agent.sac.app import SamAgentApp`
18
-
19
- **Classes:**
20
- - `SamAgentApp(app_info: Dict[str, Any], **kwargs)` - Custom App class for SAM Agent Host with namespace prefixing and automatic subscription generation
21
- - `app_schema: Dict` - Class attribute defining comprehensive configuration schema for agent host validation
22
-
23
- **Constants/Variables:**
24
- - `info: Dict[str, str]` - Metadata dictionary about the SamAgentApp class for SAC framework discovery
25
-
26
- **Usage Examples:**
27
- ```python
28
- # SamAgentApp is typically instantiated by the SAC framework from YAML config
29
- # Example agent-config.yaml:
30
- # app:
31
- # class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
32
- # app_config:
33
- # namespace: "my-org/production"
34
- # agent_name: "customer-support-agent"
35
- # model: "gemini-1.5-pro-latest"
36
- # tools:
37
- # - tool_type: "builtin"
38
- # tool_name: "file_search"
39
- # agent_card:
40
- # description: "An agent that can answer questions about customer accounts."
41
- # agent_card_publishing:
42
- # interval_seconds: 60
43
- # session_service:
44
- # type: "memory"
45
- ```
46
-
47
- ### component.py
48
- **Purpose:** Core component that hosts a Google ADK agent and bridges communication to A2A protocol
49
- **Import:** `from solace_agent_mesh.agent.sac.component import SamAgentComponent`
50
-
51
- **Classes:**
52
- - `SamAgentComponent(**kwargs)` - Solace AI Connector component that hosts a Google ADK agent
53
- - `process_event(event: Event) -> None` - Main entry point for all SAC framework events
54
- - `handle_timer_event(timer_data: Dict[str, Any]) -> None` - Handles scheduled timer events for agent card publishing
55
- - `handle_cache_expiry_event(cache_data: Dict[str, Any]) -> None` - Handles cache expiry events for peer agent timeouts
56
- - `finalize_task_success(a2a_context: Dict) -> None` - Async method to finalize successful task completion
57
- - `finalize_task_canceled(a2a_context: Dict) -> None` - Finalizes task as CANCELED
58
- - `finalize_task_error(exception: Exception, a2a_context: Dict) -> None` - Async method to finalize failed tasks
59
- - `cleanup() -> None` - Cleans up resources on component shutdown
60
- - `set_agent_specific_state(key: str, value: Any) -> None` - Sets key-value pair in agent state dictionary
61
- - `get_agent_specific_state(key: str, default: Optional[Any] = None) -> Any` - Retrieves value from agent state
62
- - `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns dedicated asyncio event loop
63
- - `set_agent_system_instruction_string(instruction_string: str) -> None` - Sets static system prompt injection
64
- - `set_agent_system_instruction_callback(callback_function: Callable) -> None` - Sets dynamic system prompt callback
65
- - `get_gateway_id() -> str` - Returns unique identifier for agent host instance
66
- - `submit_a2a_task(target_agent_name: str, a2a_message: A2AMessage, user_id: str, user_config: Dict[str, Any], sub_task_id: str) -> str` - Submits task to peer agent
67
- - `get_agent_context() -> Dict[str, Any]` - Returns agent context for middleware interactions
68
-
69
- **Constants/Variables:**
70
- - `info: Dict` - Metadata dictionary for SAC framework
71
- - `CORRELATION_DATA_PREFIX: str` - Prefix for cache keys when tracking peer requests
72
- - `HOST_COMPONENT_VERSION: str` - Version string of the host component
73
-
74
- **Usage Examples:**
75
- ```python
76
- # Custom initialization function example
77
- from solace_agent_mesh.agent.sac.component import SamAgentComponent
78
-
79
- def initialize_my_agent(host_component: SamAgentComponent, config: dict):
80
- """Custom initialization function for the agent."""
81
- # Store database connection in agent state
82
- db_connection = create_database_connection(config.get('db_url'))
83
- host_component.set_agent_specific_state('db_connection', db_connection)
84
-
85
- # Set custom system instruction
86
- host_component.set_agent_system_instruction_string(
87
- "You are a specialized customer service agent with access to our database."
88
- )
89
-
90
- # Tool accessing agent state
91
- def my_custom_tool(host_component: SamAgentComponent, query: str) -> str:
92
- """Tool that uses stored database connection."""
93
- db_connection = host_component.get_agent_specific_state('db_connection')
94
- if db_connection:
95
- return db_connection.execute_query(query)
96
- return "Database not available"
97
-
98
- # Scheduling async work from synchronous code
99
- def schedule_background_task(host_component: SamAgentComponent):
100
- """Schedule async work on the component's event loop."""
101
- loop = host_component.get_async_loop()
102
- if loop:
103
- asyncio.run_coroutine_threadsafe(my_async_task(), loop)
104
- ```
105
-
106
- ### patch_adk.py
107
- **Purpose:** Contains runtime patches for the Google ADK library to enhance behavior
108
- **Import:** `from solace_agent_mesh.agent.sac.patch_adk import patch_adk`
109
-
110
- **Functions:**
111
- - `patch_adk() -> None` - Applies all necessary patches to the ADK library
112
-
113
- **Usage Examples:**
114
- ```python
115
- from solace_agent_mesh.agent.sac.patch_adk import patch_adk
116
-
117
- # Apply patches before using ADK
118
- patch_adk()
119
- ```
120
-
121
- ### task_execution_context.py
122
- **Purpose:** State management class for single, in-flight agent tasks
123
- **Import:** `from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext`
124
-
125
- **Classes:**
126
- - `TaskExecutionContext(task_id: str, a2a_context: Dict[str, Any])` - Encapsulates runtime state for a single agent task
127
- - `cancel() -> None` - Signals that the task should be cancelled
128
- - `is_cancelled() -> bool` - Checks if cancellation event has been set
129
- - `append_to_streaming_buffer(text: str) -> None` - Appends text to streaming buffer
130
- - `flush_streaming_buffer() -> str` - Returns and clears streaming buffer content
131
- - `get_streaming_buffer_content() -> str` - Returns buffer content without clearing
132
- - `append_to_run_based_buffer(text: str) -> None` - Appends text to run-based response buffer
133
- - `register_peer_sub_task(sub_task_id: str, correlation_data: Dict[str, Any]) -> None` - Adds peer sub-task tracking
134
- - `claim_sub_task_completion(sub_task_id: str) -> Optional[Dict[str, Any]]` - Atomically retrieves and removes sub-task data
135
- - `register_parallel_call_sent(invocation_id: str) -> None` - Registers new parallel tool call
136
- - `handle_peer_timeout(sub_task_id: str, correlation_data: Dict, timeout_sec: int, invocation_id: str) -> bool` - Handles peer timeout
137
- - `record_parallel_result(result: Dict, invocation_id: str) -> bool` - Records parallel tool call result
138
- - `clear_parallel_invocation_state(invocation_id: str) -> None` - Removes completed invocation state
139
- - `register_produced_artifact(filename: str, version: int) -> None` - Tracks newly created artifacts
140
- - `add_artifact_signal(signal: Dict[str, Any]) -> None` - Adds artifact return signal
141
- - `get_and_clear_artifact_signals() -> List[Dict[str, Any]]` - Retrieves and clears artifact signals
142
- - `set_event_loop(loop: asyncio.AbstractEventLoop) -> None` - Stores event loop reference
143
- - `get_event_loop() -> Optional[asyncio.AbstractEventLoop]` - Retrieves stored event loop
144
- - `record_token_usage(input_tokens: int, output_tokens: int, model: str, source: str = "agent", tool_name: Optional[str] = None, cached_input_tokens: int = 0) -> None` - Records token usage for LLM calls
145
- - `get_token_usage_summary() -> Dict[str, Any]` - Returns summary of all token usage for the task
146
-
147
- **Usage Examples:**
148
- ```python
149
- from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
150
-
151
- # Create task context
152
- a2a_context = {
153
- "logical_task_id": "task-123",
154
- "user_id": "user-456",
155
- "session_id": "session-789"
156
- }
157
- task_context = TaskExecutionContext("task-123", a2a_context)
158
-
159
- # Use streaming buffer
160
- task_context.append_to_streaming_buffer("Hello ")
161
- task_context.append_to_streaming_buffer("world!")
162
- content = task_context.flush_streaming_buffer() # Returns "Hello world!"
163
-
164
- # Track peer sub-tasks
165
- correlation_data = {
166
- "peer_agent_name": "math-agent",
167
- "adk_function_call_id": "call-123"
168
- }
169
- task_context.register_peer_sub_task("sub-task-456", correlation_data)
170
-
171
- # Handle completion
172
- completed_data = task_context.claim_sub_task_completion("sub-task-456")
173
- if completed_data:
174
- print(f"Sub-task completed: {completed_data}")
175
-
176
- # Track token usage
177
- task_context.record_token_usage(
178
- input_tokens=100,
179
- output_tokens=50,
180
- model="gemini-1.5-pro",
181
- source="agent"
182
- )
183
-
184
- # Get usage summary
185
- usage = task_context.get_token_usage_summary()
186
- print(f"Total tokens used: {usage['total_tokens']}")
187
- ```
188
-
189
- # content_hash: c80bf39278c35fcb73e1df4421b631aabbdb4ba330e8be028fb8a29e097c3fad
@@ -1,200 +0,0 @@
1
- # LLM Summary Detail File
2
-
3
- This file is a concatenation of all individual *llm.txt files found in the 'sac' directory tree. Each section below corresponds to a specific directory's summary file.
4
-
5
- ================================================================================
6
-
7
- ## Section 1: solace_agent_mesh/agent/sac/sac_llm.txt
8
-
9
- **Source file:** `solace_agent_mesh/agent/sac/sac_llm.txt`
10
-
11
- # DEVELOPER GUIDE for the directory: sac
12
-
13
- ## Quick Summary
14
- The `sac` (Solace AI Connector) directory provides the core implementation for hosting a Google ADK (Agent Development Kit) agent within the Solace AI Connector framework. It acts as a bridge, enabling ADK agents to communicate using the A2A (Agent-to-Agent) protocol over Solace messaging. This allows for the creation of distributed, collaborative agent systems where agents can delegate tasks, share information, and work together to solve complex problems.
15
-
16
- ## Files Overview
17
- - `__init__.py` - Empty package marker file
18
- - `app.py` - Custom SAC App class that automatically configures Solace subscriptions and broker settings for A2A communication
19
- - `component.py` - Main SAC Component that hosts the ADK agent, manages its lifecycle, and handles all A2A protocol messaging
20
- - `patch_adk.py` - Runtime patches for the Google ADK library to enhance or correct its behavior
21
- - `task_execution_context.py` - State management class that encapsulates all runtime information for a single, in-flight A2A task
22
-
23
- ## Developer API Reference
24
-
25
- ### app.py
26
- **Purpose:** Provides a custom SAC App class that simplifies the configuration of an A2A agent
27
- **Import:** `from solace_agent_mesh.agent.sac.app import SamAgentApp`
28
-
29
- **Classes:**
30
- - `SamAgentApp(app_info: Dict[str, Any], **kwargs)` - Custom App class for SAM Agent Host with namespace prefixing and automatic subscription generation
31
- - `app_schema: Dict` - Class attribute defining comprehensive configuration schema for agent host validation
32
-
33
- **Constants/Variables:**
34
- - `info: Dict[str, str]` - Metadata dictionary about the SamAgentApp class for SAC framework discovery
35
-
36
- **Usage Examples:**
37
- ```python
38
- # SamAgentApp is typically instantiated by the SAC framework from YAML config
39
- # Example agent-config.yaml:
40
- # app:
41
- # class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
42
- # app_config:
43
- # namespace: "my-org/production"
44
- # agent_name: "customer-support-agent"
45
- # model: "gemini-1.5-pro-latest"
46
- # tools:
47
- # - tool_type: "builtin"
48
- # tool_name: "file_search"
49
- # agent_card:
50
- # description: "An agent that can answer questions about customer accounts."
51
- # agent_card_publishing:
52
- # interval_seconds: 60
53
- # session_service:
54
- # type: "memory"
55
- ```
56
-
57
- ### component.py
58
- **Purpose:** Core component that hosts a Google ADK agent and bridges communication to A2A protocol
59
- **Import:** `from solace_agent_mesh.agent.sac.component import SamAgentComponent`
60
-
61
- **Classes:**
62
- - `SamAgentComponent(**kwargs)` - Solace AI Connector component that hosts a Google ADK agent
63
- - `process_event(event: Event) -> None` - Main entry point for all SAC framework events
64
- - `handle_timer_event(timer_data: Dict[str, Any]) -> None` - Handles scheduled timer events for agent card publishing
65
- - `handle_cache_expiry_event(cache_data: Dict[str, Any]) -> None` - Handles cache expiry events for peer agent timeouts
66
- - `finalize_task_success(a2a_context: Dict) -> None` - Async method to finalize successful task completion
67
- - `finalize_task_canceled(a2a_context: Dict) -> None` - Finalizes task as CANCELED
68
- - `finalize_task_error(exception: Exception, a2a_context: Dict) -> None` - Async method to finalize failed tasks
69
- - `cleanup() -> None` - Cleans up resources on component shutdown
70
- - `set_agent_specific_state(key: str, value: Any) -> None` - Sets key-value pair in agent state dictionary
71
- - `get_agent_specific_state(key: str, default: Optional[Any] = None) -> Any` - Retrieves value from agent state
72
- - `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns dedicated asyncio event loop
73
- - `set_agent_system_instruction_string(instruction_string: str) -> None` - Sets static system prompt injection
74
- - `set_agent_system_instruction_callback(callback_function: Callable) -> None` - Sets dynamic system prompt callback
75
- - `get_gateway_id() -> str` - Returns unique identifier for agent host instance
76
- - `submit_a2a_task(target_agent_name: str, a2a_message: A2AMessage, user_id: str, user_config: Dict[str, Any], sub_task_id: str) -> str` - Submits task to peer agent
77
- - `get_agent_context() -> Dict[str, Any]` - Returns agent context for middleware interactions
78
-
79
- **Constants/Variables:**
80
- - `info: Dict` - Metadata dictionary for SAC framework
81
- - `CORRELATION_DATA_PREFIX: str` - Prefix for cache keys when tracking peer requests
82
- - `HOST_COMPONENT_VERSION: str` - Version string of the host component
83
-
84
- **Usage Examples:**
85
- ```python
86
- # Custom initialization function example
87
- from solace_agent_mesh.agent.sac.component import SamAgentComponent
88
-
89
- def initialize_my_agent(host_component: SamAgentComponent, config: dict):
90
- """Custom initialization function for the agent."""
91
- # Store database connection in agent state
92
- db_connection = create_database_connection(config.get('db_url'))
93
- host_component.set_agent_specific_state('db_connection', db_connection)
94
-
95
- # Set custom system instruction
96
- host_component.set_agent_system_instruction_string(
97
- "You are a specialized customer service agent with access to our database."
98
- )
99
-
100
- # Tool accessing agent state
101
- def my_custom_tool(host_component: SamAgentComponent, query: str) -> str:
102
- """Tool that uses stored database connection."""
103
- db_connection = host_component.get_agent_specific_state('db_connection')
104
- if db_connection:
105
- return db_connection.execute_query(query)
106
- return "Database not available"
107
-
108
- # Scheduling async work from synchronous code
109
- def schedule_background_task(host_component: SamAgentComponent):
110
- """Schedule async work on the component's event loop."""
111
- loop = host_component.get_async_loop()
112
- if loop:
113
- asyncio.run_coroutine_threadsafe(my_async_task(), loop)
114
- ```
115
-
116
- ### patch_adk.py
117
- **Purpose:** Contains runtime patches for the Google ADK library to enhance behavior
118
- **Import:** `from solace_agent_mesh.agent.sac.patch_adk import patch_adk`
119
-
120
- **Functions:**
121
- - `patch_adk() -> None` - Applies all necessary patches to the ADK library
122
-
123
- **Usage Examples:**
124
- ```python
125
- from solace_agent_mesh.agent.sac.patch_adk import patch_adk
126
-
127
- # Apply patches before using ADK
128
- patch_adk()
129
- ```
130
-
131
- ### task_execution_context.py
132
- **Purpose:** State management class for single, in-flight agent tasks
133
- **Import:** `from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext`
134
-
135
- **Classes:**
136
- - `TaskExecutionContext(task_id: str, a2a_context: Dict[str, Any])` - Encapsulates runtime state for a single agent task
137
- - `cancel() -> None` - Signals that the task should be cancelled
138
- - `is_cancelled() -> bool` - Checks if cancellation event has been set
139
- - `append_to_streaming_buffer(text: str) -> None` - Appends text to streaming buffer
140
- - `flush_streaming_buffer() -> str` - Returns and clears streaming buffer content
141
- - `get_streaming_buffer_content() -> str` - Returns buffer content without clearing
142
- - `append_to_run_based_buffer(text: str) -> None` - Appends text to run-based response buffer
143
- - `register_peer_sub_task(sub_task_id: str, correlation_data: Dict[str, Any]) -> None` - Adds peer sub-task tracking
144
- - `claim_sub_task_completion(sub_task_id: str) -> Optional[Dict[str, Any]]` - Atomically retrieves and removes sub-task data
145
- - `register_parallel_call_sent(invocation_id: str) -> None` - Registers new parallel tool call
146
- - `handle_peer_timeout(sub_task_id: str, correlation_data: Dict, timeout_sec: int, invocation_id: str) -> bool` - Handles peer timeout
147
- - `record_parallel_result(result: Dict, invocation_id: str) -> bool` - Records parallel tool call result
148
- - `clear_parallel_invocation_state(invocation_id: str) -> None` - Removes completed invocation state
149
- - `register_produced_artifact(filename: str, version: int) -> None` - Tracks newly created artifacts
150
- - `add_artifact_signal(signal: Dict[str, Any]) -> None` - Adds artifact return signal
151
- - `get_and_clear_artifact_signals() -> List[Dict[str, Any]]` - Retrieves and clears artifact signals
152
- - `set_event_loop(loop: asyncio.AbstractEventLoop) -> None` - Stores event loop reference
153
- - `get_event_loop() -> Optional[asyncio.AbstractEventLoop]` - Retrieves stored event loop
154
- - `record_token_usage(input_tokens: int, output_tokens: int, model: str, source: str = "agent", tool_name: Optional[str] = None, cached_input_tokens: int = 0) -> None` - Records token usage for LLM calls
155
- - `get_token_usage_summary() -> Dict[str, Any]` - Returns summary of all token usage for the task
156
-
157
- **Usage Examples:**
158
- ```python
159
- from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
160
-
161
- # Create task context
162
- a2a_context = {
163
- "logical_task_id": "task-123",
164
- "user_id": "user-456",
165
- "session_id": "session-789"
166
- }
167
- task_context = TaskExecutionContext("task-123", a2a_context)
168
-
169
- # Use streaming buffer
170
- task_context.append_to_streaming_buffer("Hello ")
171
- task_context.append_to_streaming_buffer("world!")
172
- content = task_context.flush_streaming_buffer() # Returns "Hello world!"
173
-
174
- # Track peer sub-tasks
175
- correlation_data = {
176
- "peer_agent_name": "math-agent",
177
- "adk_function_call_id": "call-123"
178
- }
179
- task_context.register_peer_sub_task("sub-task-456", correlation_data)
180
-
181
- # Handle completion
182
- completed_data = task_context.claim_sub_task_completion("sub-task-456")
183
- if completed_data:
184
- print(f"Sub-task completed: {completed_data}")
185
-
186
- # Track token usage
187
- task_context.record_token_usage(
188
- input_tokens=100,
189
- output_tokens=50,
190
- model="gemini-1.5-pro",
191
- source="agent"
192
- )
193
-
194
- # Get usage summary
195
- usage = task_context.get_token_usage_summary()
196
- print(f"Total tokens used: {usage['total_tokens']}")
197
- ```
198
-
199
- ================================================================================
200
-