solace-agent-mesh 1.5.0__py3-none-any.whl → 1.6.0__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 (326) hide show
  1. solace_agent_mesh/agent/adk/callbacks.py +14 -17
  2. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +3 -1
  3. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +2 -1
  4. solace_agent_mesh/agent/adk/mcp_content_processor.py +2 -1
  5. solace_agent_mesh/agent/adk/models/lite_llm.py +123 -8
  6. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +245 -0
  7. solace_agent_mesh/agent/adk/runner.py +3 -1
  8. solace_agent_mesh/agent/adk/services.py +4 -1
  9. solace_agent_mesh/agent/adk/setup.py +3 -1
  10. solace_agent_mesh/agent/adk/tool_wrapper.py +2 -2
  11. solace_agent_mesh/agent/protocol/event_handlers.py +42 -2
  12. solace_agent_mesh/agent/proxies/__init__.py +0 -0
  13. solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
  14. solace_agent_mesh/agent/proxies/a2a/app.py +55 -0
  15. solace_agent_mesh/agent/proxies/a2a/component.py +1115 -0
  16. solace_agent_mesh/agent/proxies/a2a/config.py +140 -0
  17. solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
  18. solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
  19. solace_agent_mesh/agent/proxies/base/app.py +99 -0
  20. solace_agent_mesh/agent/proxies/base/component.py +619 -0
  21. solace_agent_mesh/agent/proxies/base/config.py +85 -0
  22. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +17 -0
  23. solace_agent_mesh/agent/sac/app.py +12 -4
  24. solace_agent_mesh/agent/sac/component.py +164 -9
  25. solace_agent_mesh/agent/tools/audio_tools.py +127 -9
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +3 -1
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +3 -1
  28. solace_agent_mesh/agent/tools/dynamic_tool.py +2 -1
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +2 -1
  30. solace_agent_mesh/agent/tools/image_tools.py +2 -1
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +2 -1
  32. solace_agent_mesh/agent/tools/registry.py +3 -1
  33. solace_agent_mesh/agent/tools/test_tools.py +2 -1
  34. solace_agent_mesh/agent/tools/web_tools.py +12 -6
  35. solace_agent_mesh/agent/utils/artifact_helpers.py +144 -4
  36. solace_agent_mesh/agent/utils/config_parser.py +3 -1
  37. solace_agent_mesh/assets/docs/404.html +3 -3
  38. solace_agent_mesh/assets/docs/assets/js/{b7006a3a.73a79653.js → 032c2d61.f3d37824.js} +1 -1
  39. solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
  40. solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +1 -0
  41. solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/{2334.622a6395.js → 2334.1cf50a20.js} +1 -1
  43. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
  45. solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/{3624.b524e433.js → 3624.0eaa1fd0.js} +1 -1
  47. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/509e993c.4c7a1a6d.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js → 8591.5d015485.js} +2 -2
  68. solace_agent_mesh/assets/docs/assets/js/{8731.49e930c2.js → 8731.6c1dbf0c.js} +1 -1
  69. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/e3d9abda.2b916f9e.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/main.20feee82.js +2 -0
  91. solace_agent_mesh/assets/docs/assets/js/runtime~main.0d198646.js +1 -0
  92. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
  93. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/artifact-management/index.html +7 -7
  94. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/audio-tools/index.html +7 -7
  95. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/data-analysis-tools/index.html +8 -8
  96. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/embeds/index.html +6 -6
  97. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/index.html +11 -11
  98. solace_agent_mesh/assets/docs/docs/documentation/{concepts → components}/cli/index.html +25 -25
  99. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +91 -0
  100. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
  102. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
  103. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +262 -0
  104. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +104 -0
  105. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +85 -0
  106. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
  107. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +59 -0
  108. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-agents/index.html +113 -152
  109. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-gateways/index.html +10 -10
  110. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/creating-python-tools/index.html +12 -12
  111. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
  112. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
  113. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
  115. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/bedrock-agents/index.html +25 -25
  116. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/custom-agent/index.html +13 -13
  117. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/event-mesh-gateway/index.html +12 -12
  118. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mcp-integration/index.html +10 -10
  119. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mongodb-integration/index.html +13 -13
  120. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rag-integration/index.html +13 -13
  121. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rest-gateway/index.html +10 -10
  122. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
  123. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/sql-database/index.html +14 -14
  124. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +33 -0
  125. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +83 -0
  126. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +222 -0
  127. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +161 -0
  128. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
  129. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +53 -0
  130. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +35 -100
  131. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
  132. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +81 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +76 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/{Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html → migrations/a2a-upgrade/a2a-technical-migration-map/index.html} +10 -11
  139. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  140. solace_agent_mesh/assets/docs/lunr-index-1761165361160.json +1 -0
  141. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  142. solace_agent_mesh/assets/docs/search-doc-1761165361160.json +1 -0
  143. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  144. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  145. solace_agent_mesh/cli/__init__.py +1 -1
  146. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +2 -69
  147. solace_agent_mesh/cli/commands/eval_cmd.py +11 -49
  148. solace_agent_mesh/cli/commands/init_cmd/__init__.py +0 -5
  149. solace_agent_mesh/cli/commands/init_cmd/env_step.py +10 -12
  150. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +9 -61
  151. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +9 -49
  152. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +1 -2
  153. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-DwrxZE0E.js → authCallback-BTf6dqwp.js} +1 -1
  154. solace_agent_mesh/client/webui/frontend/static/assets/{client-DarGQzyw.js → client-CaY59VuC.js} +1 -1
  155. solace_agent_mesh/client/webui/frontend/static/assets/main-BGTaW0uv.js +342 -0
  156. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +1 -0
  157. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BKIeiHj_.js → vendor-BEmvJSYz.js} +1 -1
  158. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  159. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  160. solace_agent_mesh/common/a2a/__init__.py +24 -0
  161. solace_agent_mesh/common/a2a/artifact.py +41 -1
  162. solace_agent_mesh/common/a2a/events.py +29 -0
  163. solace_agent_mesh/common/a2a/message.py +68 -0
  164. solace_agent_mesh/common/a2a/protocol.py +76 -3
  165. solace_agent_mesh/common/a2a/translation.py +3 -1
  166. solace_agent_mesh/common/agent_registry.py +83 -3
  167. solace_agent_mesh/common/constants.py +3 -1
  168. solace_agent_mesh/common/middleware/config_resolver.py +3 -1
  169. solace_agent_mesh/common/middleware/registry.py +3 -1
  170. solace_agent_mesh/common/sac/sam_component_base.py +2 -1
  171. solace_agent_mesh/common/sam_events/event_service.py +3 -2
  172. solace_agent_mesh/common/services/employee_service.py +3 -1
  173. solace_agent_mesh/common/services/identity_service.py +2 -1
  174. solace_agent_mesh/common/services/providers/local_file_identity_service.py +2 -1
  175. solace_agent_mesh/common/utils/artifact_utils.py +3 -1
  176. solace_agent_mesh/common/utils/asyncio_macos_fix.py +3 -1
  177. solace_agent_mesh/common/utils/embeds/converter.py +3 -1
  178. solace_agent_mesh/common/utils/embeds/evaluators.py +2 -1
  179. solace_agent_mesh/common/utils/embeds/modifiers.py +3 -2
  180. solace_agent_mesh/common/utils/embeds/resolver.py +2 -1
  181. solace_agent_mesh/common/utils/initializer.py +3 -1
  182. solace_agent_mesh/common/utils/message_utils.py +2 -1
  183. solace_agent_mesh/common/utils/push_notification_auth.py +3 -2
  184. solace_agent_mesh/common/utils/pydantic_utils.py +12 -0
  185. solace_agent_mesh/config_portal/backend/common.py +1 -1
  186. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +98 -0
  187. solace_agent_mesh/config_portal/frontend/static/client/assets/{manifest-44d62be6.js → manifest-61038fc6.js} +1 -1
  188. solace_agent_mesh/config_portal/frontend/static/client/index.html +1 -1
  189. solace_agent_mesh/core_a2a/service.py +2 -2
  190. solace_agent_mesh/evaluation/evaluator.py +128 -104
  191. solace_agent_mesh/evaluation/message_organizer.py +116 -110
  192. solace_agent_mesh/evaluation/report_data_processor.py +84 -86
  193. solace_agent_mesh/evaluation/report_generator.py +73 -79
  194. solace_agent_mesh/evaluation/run.py +421 -235
  195. solace_agent_mesh/evaluation/shared/__init__.py +92 -0
  196. solace_agent_mesh/evaluation/shared/constants.py +47 -0
  197. solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
  198. solace_agent_mesh/evaluation/shared/helpers.py +35 -0
  199. solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
  200. solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
  201. solace_agent_mesh/evaluation/subscriber.py +111 -232
  202. solace_agent_mesh/evaluation/summary_builder.py +227 -117
  203. solace_agent_mesh/gateway/base/app.py +3 -2
  204. solace_agent_mesh/gateway/base/component.py +11 -2
  205. solace_agent_mesh/gateway/base/task_context.py +2 -1
  206. solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
  207. solace_agent_mesh/gateway/http_sse/app.py +2 -1
  208. solace_agent_mesh/gateway/http_sse/component.py +102 -3
  209. solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +3 -2
  210. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +3 -1
  211. solace_agent_mesh/gateway/http_sse/dependencies.py +7 -5
  212. solace_agent_mesh/gateway/http_sse/main.py +5 -2
  213. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +12 -13
  214. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +15 -18
  215. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +25 -18
  216. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +30 -26
  217. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +35 -44
  218. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +7 -5
  219. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +97 -205
  220. solace_agent_mesh/gateway/http_sse/routers/auth.py +3 -1
  221. solace_agent_mesh/gateway/http_sse/routers/config.py +3 -2
  222. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +4 -3
  223. solace_agent_mesh/gateway/http_sse/routers/people.py +3 -1
  224. solace_agent_mesh/gateway/http_sse/routers/sessions.py +5 -3
  225. solace_agent_mesh/gateway/http_sse/routers/sse.py +3 -2
  226. solace_agent_mesh/gateway/http_sse/routers/tasks.py +35 -42
  227. solace_agent_mesh/gateway/http_sse/routers/users.py +3 -1
  228. solace_agent_mesh/gateway/http_sse/routers/visualization.py +19 -12
  229. solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +3 -1
  230. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +6 -5
  231. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +53 -44
  232. solace_agent_mesh/gateway/http_sse/services/people_service.py +2 -2
  233. solace_agent_mesh/gateway/http_sse/services/session_service.py +23 -21
  234. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +10 -9
  235. solace_agent_mesh/gateway/http_sse/services/task_service.py +3 -2
  236. solace_agent_mesh/gateway/http_sse/session_manager.py +2 -1
  237. solace_agent_mesh/gateway/http_sse/shared/base_repository.py +45 -71
  238. solace_agent_mesh/gateway/http_sse/shared/types.py +0 -18
  239. solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +2 -1
  240. solace_agent_mesh/gateway/http_sse/sse_manager.py +2 -2
  241. solace_agent_mesh/templates/gateway_app_template.py +4 -2
  242. solace_agent_mesh/templates/gateway_component_template.py +3 -1
  243. solace_agent_mesh/templates/gateway_config_template.yaml +0 -5
  244. solace_agent_mesh/templates/logging_config_template.ini +27 -46
  245. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +0 -3
  246. solace_agent_mesh/templates/plugin_tools_template.py +2 -2
  247. solace_agent_mesh/templates/shared_config.yaml +40 -0
  248. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/METADATA +47 -21
  249. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/RECORD +254 -225
  250. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  251. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  252. solace_agent_mesh/assets/docs/assets/js/04989206.a248f00c.js +0 -1
  253. solace_agent_mesh/assets/docs/assets/js/0e682baa.d54b8668.js +0 -1
  254. solace_agent_mesh/assets/docs/assets/js/1023fc19.8a8a9309.js +0 -1
  255. solace_agent_mesh/assets/docs/assets/js/1523c6b4.2645ef68.js +0 -1
  256. solace_agent_mesh/assets/docs/assets/js/166ab619.e27886d9.js +0 -1
  257. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.e056b7e0.js +0 -1
  258. solace_agent_mesh/assets/docs/assets/js/21ceee5f.3bf39250.js +0 -1
  259. solace_agent_mesh/assets/docs/assets/js/2a9cab12.2afaee76.js +0 -1
  260. solace_agent_mesh/assets/docs/assets/js/332e10b5.f7629851.js +0 -1
  261. solace_agent_mesh/assets/docs/assets/js/3d406171.5560fdf9.js +0 -1
  262. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.508ae8db.js +0 -1
  263. solace_agent_mesh/assets/docs/assets/js/442a8107.b5c2532a.js +0 -1
  264. solace_agent_mesh/assets/docs/assets/js/453a82a6.3c6bb61d.js +0 -1
  265. solace_agent_mesh/assets/docs/assets/js/483cef9a.bf9398af.js +0 -1
  266. solace_agent_mesh/assets/docs/assets/js/4c2787c2.c1290a40.js +0 -1
  267. solace_agent_mesh/assets/docs/assets/js/55f47984.bcd00a86.js +0 -1
  268. solace_agent_mesh/assets/docs/assets/js/5b4258a4.fdfd2325.js +0 -1
  269. solace_agent_mesh/assets/docs/assets/js/664b740a.ba305a89.js +0 -1
  270. solace_agent_mesh/assets/docs/assets/js/75384d09.c19e8b51.js +0 -1
  271. solace_agent_mesh/assets/docs/assets/js/768e31b0.9abcdc48.js +0 -1
  272. solace_agent_mesh/assets/docs/assets/js/85387663.be2bc838.js +0 -1
  273. solace_agent_mesh/assets/docs/assets/js/945fb41e.16e00776.js +0 -1
  274. solace_agent_mesh/assets/docs/assets/js/9a09e75d.92de8cf5.js +0 -1
  275. solace_agent_mesh/assets/docs/assets/js/9eff14a2.d62aad71.js +0 -1
  276. solace_agent_mesh/assets/docs/assets/js/a12a4955.25fbed32.js +0 -1
  277. solace_agent_mesh/assets/docs/assets/js/a3a92b25.af35e313.js +0 -1
  278. solace_agent_mesh/assets/docs/assets/js/aba87c2f.4ddf32f2.js +0 -1
  279. solace_agent_mesh/assets/docs/assets/js/ae0e903d.5fe5203f.js +0 -1
  280. solace_agent_mesh/assets/docs/assets/js/ae4415af.16cc58d3.js +0 -1
  281. solace_agent_mesh/assets/docs/assets/js/bac0be12.17de4316.js +0 -1
  282. solace_agent_mesh/assets/docs/assets/js/c2c06897.87cb1f47.js +0 -1
  283. solace_agent_mesh/assets/docs/assets/js/c835a94d.ce21f0bf.js +0 -1
  284. solace_agent_mesh/assets/docs/assets/js/cc969b05.feef7dcc.js +0 -1
  285. solace_agent_mesh/assets/docs/assets/js/cd3d4052.a19e7d78.js +0 -1
  286. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +0 -1
  287. solace_agent_mesh/assets/docs/assets/js/cee5d587.47904f5e.js +0 -1
  288. solace_agent_mesh/assets/docs/assets/js/d6a81ee7.829198f1.js +0 -1
  289. solace_agent_mesh/assets/docs/assets/js/f284c35a.ed8dd236.js +0 -1
  290. solace_agent_mesh/assets/docs/assets/js/f897a61a.126663fe.js +0 -1
  291. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.e144b16c.js +0 -1
  292. solace_agent_mesh/assets/docs/assets/js/main.0c149855.js +0 -2
  293. solace_agent_mesh/assets/docs/assets/js/runtime~main.c66557e4.js +0 -1
  294. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +0 -46
  295. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/rbac-setup-guilde/index.html +0 -201
  296. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +0 -29
  297. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +0 -105
  298. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +0 -144
  299. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +0 -91
  300. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +0 -91
  301. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +0 -55
  302. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +0 -111
  303. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +0 -77
  304. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +0 -48
  305. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +0 -54
  306. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +0 -45
  307. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +0 -74
  308. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/litellm_models/index.html +0 -49
  309. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +0 -76
  310. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +0 -73
  311. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +0 -72
  312. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +0 -54
  313. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +0 -69
  314. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +0 -59
  315. solace_agent_mesh/assets/docs/lunr-index-1760032255022.json +0 -1
  316. solace_agent_mesh/assets/docs/search-doc-1760032255022.json +0 -1
  317. solace_agent_mesh/client/webui/frontend/static/assets/main-CZbpmwfA.css +0 -1
  318. solace_agent_mesh/client/webui/frontend/static/assets/main-C__uuUkB.js +0 -339
  319. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-BNuqpWDc.js +0 -98
  320. solace_agent_mesh/evaluation/config_loader.py +0 -657
  321. solace_agent_mesh/evaluation/test_case_loader.py +0 -714
  322. /solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js.LICENSE.txt → 8591.5d015485.js.LICENSE.txt} +0 -0
  323. /solace_agent_mesh/assets/docs/assets/js/{main.0c149855.js.LICENSE.txt → main.20feee82.js.LICENSE.txt} +0 -0
  324. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/WHEEL +0 -0
  325. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/entry_points.txt +0 -0
  326. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,6 +4,7 @@ Dynamic tools allow for programmatic definition of tool names, descriptions,
4
4
  and parameter schemas, offering more flexibility than standard Python tools.
5
5
  """
6
6
 
7
+ import logging
7
8
  from abc import ABC, abstractmethod
8
9
  from typing import (
9
10
  Optional,
@@ -23,7 +24,6 @@ import inspect
23
24
  from pydantic import BaseModel
24
25
  from google.adk.tools import BaseTool, ToolContext
25
26
  from google.genai import types as adk_types
26
- from solace_ai_connector.common.log import log
27
27
 
28
28
  from solace_agent_mesh.agent.utils.context_helpers import get_original_session_id
29
29
 
@@ -35,6 +35,7 @@ from ...common.utils.embeds import (
35
35
  EMBED_DELIMITER_OPEN,
36
36
  )
37
37
 
38
+ log = logging.getLogger(__name__)
38
39
 
39
40
  if TYPE_CHECKING:
40
41
  from ..sac.component import SamAgentComponent
@@ -2,6 +2,7 @@
2
2
  Collection of Python tools that can be configured for general purpose agents.
3
3
  """
4
4
 
5
+ import logging
5
6
  import asyncio
6
7
  import inspect
7
8
  import json
@@ -13,7 +14,6 @@ from typing import Any, Dict, Optional, Tuple
13
14
  from playwright.async_api import async_playwright
14
15
 
15
16
  from google.adk.tools import ToolContext
16
- from solace_ai_connector.common.log import log
17
17
 
18
18
  from markitdown import MarkItDown, UnsupportedFormatException
19
19
  from mermaid_cli import render_mermaid
@@ -30,6 +30,7 @@ from google.genai import types as adk_types
30
30
  from .tool_definition import BuiltinTool
31
31
  from .registry import tool_registry
32
32
 
33
+ log = logging.getLogger(__name__)
33
34
 
34
35
  def _simple_truncate_text(text: str, max_bytes: int = 2048) -> Tuple[str, bool]:
35
36
  """Truncates text to a maximum number of bytes for preview."""
@@ -3,6 +3,7 @@ Collection of Python tools for image generation, manipulation, and multimodal co
3
3
  Includes tools for image description and audio description using vision and audio APIs.
4
4
  """
5
5
 
6
+ import logging
6
7
  import asyncio
7
8
  import base64
8
9
  import inspect
@@ -14,7 +15,6 @@ from typing import Any, Dict, Optional
14
15
 
15
16
  import httpx
16
17
  from google.adk.tools import ToolContext
17
- from solace_ai_connector.common.log import log
18
18
 
19
19
  from ..utils.artifact_helpers import (
20
20
  save_artifact_with_metadata,
@@ -26,6 +26,7 @@ from google.genai import types as adk_types
26
26
  from .tool_definition import BuiltinTool
27
27
  from .registry import tool_registry
28
28
 
29
+ log = logging.getLogger(__name__)
29
30
 
30
31
  async def create_image_from_description(
31
32
  image_description: str,
@@ -2,13 +2,13 @@
2
2
  ADK Tool implementation for delegating tasks to peer A2A agents over Solace.
3
3
  """
4
4
 
5
+ import logging
5
6
  from typing import Any, Dict, Optional, List, Union
6
7
  import uuid
7
8
 
8
9
  from google.adk.tools import BaseTool, ToolContext
9
10
  from google.genai import types as adk_types
10
11
  from pydantic import BaseModel, Field
11
- from solace_ai_connector.common.log import log
12
12
 
13
13
  from ...common.a2a.types import ContentPart
14
14
  from a2a.types import (
@@ -18,6 +18,7 @@ from ...common import a2a
18
18
  from ...common.constants import DEFAULT_COMMUNICATION_TIMEOUT
19
19
  from ...common.exceptions import MessageSizeExceededError
20
20
 
21
+ log = logging.getLogger(__name__)
21
22
 
22
23
  class ArtifactIdentifier(BaseModel):
23
24
  """Identifies a specific version of an artifact."""
@@ -2,9 +2,11 @@
2
2
  A singleton registry for discovering and holding all BuiltinTool definitions.
3
3
  """
4
4
 
5
+ import logging
5
6
  from typing import Dict, List, Optional
6
7
  from .tool_definition import BuiltinTool
7
- from solace_ai_connector.common.log import log
8
+
9
+ log = logging.getLogger(__name__)
8
10
 
9
11
 
10
12
  class _ToolRegistry:
@@ -2,16 +2,17 @@
2
2
  Test-specific ADK Tools.
3
3
  """
4
4
 
5
+ import logging
5
6
  import asyncio
6
7
  from typing import Dict, Optional, Any
7
8
 
8
9
  from google.adk.tools import ToolContext
9
- from solace_ai_connector.common.log import log
10
10
 
11
11
  from google.genai import types as adk_types
12
12
  from .tool_definition import BuiltinTool
13
13
  from .registry import tool_registry
14
14
 
15
+ log = logging.getLogger(__name__)
15
16
 
16
17
  async def time_delay(
17
18
  seconds: float,
@@ -2,6 +2,7 @@
2
2
  Collection of Python tools for web-related tasks, such as making HTTP requests.
3
3
  """
4
4
 
5
+ import logging
5
6
  import json
6
7
  import uuid
7
8
  from datetime import datetime, timezone
@@ -15,7 +16,6 @@ from markdownify import markdownify as md
15
16
  from bs4 import BeautifulSoup
16
17
 
17
18
  from google.adk.tools import ToolContext
18
- from solace_ai_connector.common.log import log
19
19
 
20
20
  from ...agent.utils.artifact_helpers import (
21
21
  save_artifact_with_metadata,
@@ -27,6 +27,7 @@ from google.genai import types as adk_types
27
27
  from .tool_definition import BuiltinTool
28
28
  from .registry import tool_registry
29
29
 
30
+ log = logging.getLogger(__name__)
30
31
 
31
32
  CATEGORY_NAME = "Web Access"
32
33
  CATEGORY_DESCRIPTION = "Access the web to find information to complete user requests."
@@ -91,7 +92,12 @@ async def web_request(
91
92
  log.error(f"{log_identifier} ToolContext is missing.")
92
93
  return {"status": "error", "message": "ToolContext is missing."}
93
94
 
94
- if not _is_safe_url(url):
95
+ # Check if loopback URLs are allowed (for testing)
96
+ allow_loopback = False
97
+ if tool_config:
98
+ allow_loopback = tool_config.get("allow_loopback", False)
99
+
100
+ if not allow_loopback and not _is_safe_url(url):
95
101
  log.error(f"{log_identifier} URL is not safe to request: {url}")
96
102
  return {"status": "error", "message": "URL is not safe to request."}
97
103
 
@@ -149,10 +155,9 @@ async def web_request(
149
155
  )
150
156
 
151
157
  response_content_bytes = response.content
152
- response_headers = dict(response.headers)
153
158
  response_status_code = response.status_code
154
159
  original_content_type = (
155
- response_headers.get("content-type", "application/octet-stream")
160
+ response.headers.get("content-type", "application/octet-stream")
156
161
  .split(";")[0]
157
162
  .strip()
158
163
  )
@@ -237,7 +242,7 @@ async def web_request(
237
242
  {k: v for k, v in headers.items() if k.lower() != "authorization"}
238
243
  ),
239
244
  "response_status_code": response_status_code,
240
- "response_headers": json.dumps(response_headers),
245
+ "response_headers": json.dumps(dict(response.headers)),
241
246
  "original_content_type": original_content_type,
242
247
  "processed_content_type": processed_content_type,
243
248
  "timestamp": datetime.now(timezone.utc).isoformat(),
@@ -284,7 +289,8 @@ async def web_request(
284
289
  return {
285
290
  "status": "success",
286
291
  "message": f"Successfully fetched content from {url} (status: {response_status_code}). "
287
- f"Saved as artifact '{final_artifact_filename}' v{save_result['data_version']}.",
292
+ f"Saved as artifact '{final_artifact_filename}' v{save_result['data_version']}. "
293
+ f"Analyze the content of '{final_artifact_filename}' before providing a final answer to the user.",
288
294
  "output_filename": final_artifact_filename,
289
295
  "output_version": save_result["data_version"],
290
296
  "response_status_code": response_status_code,
@@ -2,6 +2,7 @@
2
2
  Helper functions for artifact management, including metadata handling and schema inference.
3
3
  """
4
4
 
5
+ import logging
5
6
  import base64
6
7
  import binascii
7
8
  import json
@@ -16,16 +17,20 @@ from typing import Any, Dict, Optional, Tuple, List, Union, TYPE_CHECKING
16
17
  from urllib.parse import urlparse, parse_qs, urlunparse, urlencode
17
18
  from google.adk.artifacts import BaseArtifactService
18
19
  from google.genai import types as adk_types
19
- from solace_ai_connector.common.log import log
20
20
  from ...common.a2a.types import ArtifactInfo
21
21
  from ...common.utils.mime_helpers import is_text_based_mime_type, is_text_based_file
22
- from ...common.constants import TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY, TEXT_ARTIFACT_CONTEXT_DEFAULT_LENGTH
22
+ from ...common.constants import (
23
+ TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY,
24
+ TEXT_ARTIFACT_CONTEXT_DEFAULT_LENGTH,
25
+ )
23
26
  from ...agent.utils.context_helpers import get_original_session_id
24
27
 
25
28
  if TYPE_CHECKING:
26
29
  from google.adk.tools import ToolContext
27
30
  from ...agent.sac.component import SamAgentComponent
28
31
 
32
+ log = logging.getLogger(__name__)
33
+
29
34
  METADATA_SUFFIX = ".metadata.json"
30
35
  DEFAULT_SCHEMA_MAX_KEYS = 20
31
36
 
@@ -88,7 +93,11 @@ def ensure_correct_extension(filename_from_llm: str, desired_extension: str) ->
88
93
 
89
94
 
90
95
  def format_artifact_uri(
91
- app_name: str, user_id: str, session_id: str, filename: str, version: Union[int, str]
96
+ app_name: str,
97
+ user_id: str,
98
+ session_id: str,
99
+ filename: str,
100
+ version: Union[int, str],
92
101
  ) -> str:
93
102
  """Formats the components into a standard artifact:// URI."""
94
103
  path = f"/{user_id}/{session_id}/{filename}"
@@ -381,6 +390,134 @@ async def save_artifact_with_metadata(
381
390
  }
382
391
 
383
392
 
393
+ async def process_artifact_upload(
394
+ artifact_service: BaseArtifactService,
395
+ component: Any,
396
+ user_id: str,
397
+ session_id: str,
398
+ filename: str,
399
+ content_bytes: bytes,
400
+ mime_type: str,
401
+ metadata_json: Optional[str] = None,
402
+ log_prefix: str = "[ArtifactUpload]",
403
+ ) -> Dict[str, Any]:
404
+ """
405
+ Common logic for processing artifact uploads.
406
+
407
+ Handles filename validation, metadata parsing, artifact storage, and URI generation.
408
+
409
+ Args:
410
+ artifact_service: The artifact service instance to use for storage.
411
+ component: The component instance (agent or gateway) for configuration.
412
+ user_id: The user ID associated with the artifact.
413
+ session_id: The session ID associated with the artifact.
414
+ filename: The name of the artifact file.
415
+ content_bytes: The raw bytes of the artifact content.
416
+ mime_type: The MIME type of the artifact.
417
+ metadata_json: Optional JSON string containing artifact metadata.
418
+ log_prefix: Prefix for log messages.
419
+
420
+ Returns:
421
+ Dict with keys:
422
+ - status: "success" or "error"
423
+ - artifact_uri: The URI of the stored artifact (on success)
424
+ - version: The version number of the stored artifact (on success)
425
+ - message: Status message
426
+ - error: Error details (on error)
427
+ """
428
+ log.debug("%s Processing artifact upload for '%s'", log_prefix, filename)
429
+
430
+ # Validate filename
431
+ if not is_filename_safe(filename):
432
+ error_msg = f"Invalid filename: '{filename}'. Filename must not contain path separators or traversal sequences."
433
+ log.warning("%s %s", log_prefix, error_msg)
434
+ return {"status": "error", "message": error_msg, "error": "invalid_filename"}
435
+
436
+ # Validate content
437
+ if not content_bytes:
438
+ error_msg = "Uploaded file cannot be empty."
439
+ log.warning("%s %s", log_prefix, error_msg)
440
+ return {"status": "error", "message": error_msg, "error": "empty_file"}
441
+
442
+ # Parse metadata JSON if provided
443
+ metadata_dict = {}
444
+ if metadata_json and metadata_json.strip():
445
+ try:
446
+ metadata_dict = json.loads(metadata_json.strip())
447
+ if not isinstance(metadata_dict, dict):
448
+ log.warning(
449
+ "%s Metadata JSON did not parse to a dictionary. Ignoring.",
450
+ log_prefix,
451
+ )
452
+ metadata_dict = {}
453
+ except json.JSONDecodeError as json_err:
454
+ log.warning(
455
+ "%s Failed to parse metadata_json: %s. Proceeding without it.",
456
+ log_prefix,
457
+ json_err,
458
+ )
459
+ metadata_dict = {}
460
+
461
+ # Get app_name from component configuration
462
+ app_name = component.get_config("name", "A2A_WebUI_App")
463
+ current_timestamp = datetime.now(timezone.utc)
464
+
465
+ # Save artifact with metadata
466
+ try:
467
+ save_result = await save_artifact_with_metadata(
468
+ artifact_service=artifact_service,
469
+ app_name=app_name,
470
+ user_id=user_id,
471
+ session_id=session_id,
472
+ filename=filename,
473
+ content_bytes=content_bytes,
474
+ mime_type=mime_type,
475
+ metadata_dict=metadata_dict,
476
+ timestamp=current_timestamp,
477
+ schema_max_keys=component.get_config(
478
+ "schema_max_keys", DEFAULT_SCHEMA_MAX_KEYS
479
+ ),
480
+ )
481
+
482
+ if save_result["status"] == "success":
483
+ saved_version = save_result.get("data_version")
484
+ artifact_uri = format_artifact_uri(
485
+ app_name=app_name,
486
+ user_id=user_id,
487
+ session_id=session_id,
488
+ filename=filename,
489
+ version=saved_version,
490
+ )
491
+
492
+ log.info(
493
+ "%s Artifact '%s' uploaded successfully. URI: %s, Version: %s",
494
+ log_prefix,
495
+ filename,
496
+ artifact_uri,
497
+ saved_version,
498
+ )
499
+
500
+ return {
501
+ "status": "success",
502
+ "artifact_uri": artifact_uri,
503
+ "version": saved_version,
504
+ "message": save_result.get(
505
+ "message", "Artifact uploaded successfully."
506
+ ),
507
+ "data_version": saved_version,
508
+ "metadata_version": save_result.get("metadata_version"),
509
+ }
510
+ else:
511
+ error_msg = save_result.get("message", "Failed to save artifact.")
512
+ log.error("%s %s", log_prefix, error_msg)
513
+ return {"status": "error", "message": error_msg, "error": "save_failed"}
514
+
515
+ except Exception as e:
516
+ error_msg = f"Unexpected error storing artifact: {str(e)}"
517
+ log.exception("%s %s", log_prefix, error_msg)
518
+ return {"status": "error", "message": error_msg, "error": "unexpected_error"}
519
+
520
+
384
521
  def format_metadata_for_llm(metadata: Dict[str, Any]) -> str:
385
522
  """Formats loaded metadata into an LLM-friendly text block."""
386
523
  lines = []
@@ -992,7 +1129,10 @@ async def load_artifact_content_or_metadata(
992
1129
  if len(content_str) > max_content_length:
993
1130
  truncated_content = content_str[:max_content_length] + "..."
994
1131
 
995
- if max_content_length < TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY:
1132
+ if (
1133
+ max_content_length
1134
+ < TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY
1135
+ ):
996
1136
  message_to_llm = f"""This artifact content has been truncated to {max_content_length} characters.
997
1137
  The artifact is larger ({len(content_str)} characters).
998
1138
  Please request again with larger max size up to {TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY} for the full artifact."""
@@ -2,10 +2,12 @@
2
2
  Parses and validates configuration for the SamAgentComponent and its App.
3
3
  """
4
4
 
5
+ import logging
5
6
  from typing import Any, Union, Callable
6
- from solace_ai_connector.common.log import log
7
7
  from google.adk.agents.readonly_context import ReadonlyContext
8
8
 
9
+ log = logging.getLogger(__name__)
10
+
9
11
  InstructionProvider = Callable[[ReadonlyContext], str]
10
12
 
11
13
 
@@ -4,13 +4,13 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.8.1">
6
6
  <title data-rh="true">Page Not Found | Solace Agent Mesh</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" name="twitter:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" property="og:url" content="https://solacelabs.github.io/solace-agent-mesh/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Solace Agent Mesh"><link data-rh="true" rel="icon" href="/solace-agent-mesh/img/logo.png"><link data-rh="true" rel="canonical" href="https://solacelabs.github.io/solace-agent-mesh/404.html"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="x-default"><link rel="stylesheet" href="/solace-agent-mesh/assets/css/styles.906a1503.css">
7
- <script src="/solace-agent-mesh/assets/js/runtime~main.c66557e4.js" defer="defer"></script>
8
- <script src="/solace-agent-mesh/assets/js/main.0c149855.js" defer="defer"></script>
7
+ <script src="/solace-agent-mesh/assets/js/runtime~main.0d198646.js" defer="defer"></script>
8
+ <script src="/solace-agent-mesh/assets/js/main.20feee82.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
12
12
  <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
13
  </defs></svg>
14
- <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started/introduction"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/introduction">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started/introduction">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.5.0</div></div></div></footer></div>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.6.0</div></div></div></footer></div>
15
15
  </body>
16
16
  </html>
@@ -1 +1 @@
1
- "use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[5449],{9733:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"documentation/user-guide/builtin-tools/artifact-management","title":"Artifact Management Tools","description":"This guide details how agents utilize built-in tools to manage file artifacts and their associated metadata. The system employs an explicit, metadata-aware methodology wherein the agent maintains full control over the lifecycle of artifacts, including their creation, listing, loading, and return.","source":"@site/docs/documentation/user-guide/builtin-tools/artifact-management.md","sourceDirName":"documentation/user-guide/builtin-tools","slug":"/documentation/user-guide/builtin-tools/artifact-management","permalink":"/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/artifact-management","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/user-guide/builtin-tools/artifact-management.md","tags":[],"version":"current","sidebarPosition":10,"frontMatter":{"title":"Artifact Management Tools","sidebar_position":10},"sidebar":"docSidebar","previous":{"title":"Configuring Built-in Tools","permalink":"/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/"},"next":{"title":"Data Analysis Tools","permalink":"/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/data-analysis-tools"}}');var a=n(4848),s=n(8453);const r={title:"Artifact Management Tools",sidebar_position:10},o="Artifact Management Tools",l={},c=[{value:"The Metadata-Aware Workflow",id:"the-metadata-aware-workflow",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Enabling the Tools",id:"enabling-the-tools",level:3},{value:"Configuring Artifact Return Behavior",id:"configuring-artifact-return-behavior",level:3},{value:"Tool Reference",id:"tool-reference",level:2},{value:"<code>create_artifact</code>",id:"create_artifact",level:3},{value:"<code>list_artifacts</code>",id:"list_artifacts",level:3},{value:"<code>load_artifact</code>",id:"load_artifact",level:3},{value:"<code>signal_artifact_for_return</code>",id:"signal_artifact_for_return",level:3},{value:"Key Concepts",id:"key-concepts",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"artifact-management-tools",children:"Artifact Management Tools"})}),"\n",(0,a.jsx)(t.p,{children:"This guide details how agents utilize built-in tools to manage file artifacts and their associated metadata. The system employs an explicit, metadata-aware methodology wherein the agent maintains full control over the lifecycle of artifacts, including their creation, listing, loading, and return."}),"\n",(0,a.jsx)(t.h2,{id:"the-metadata-aware-workflow",children:"The Metadata-Aware Workflow"}),"\n",(0,a.jsx)(t.p,{children:"Rather than automatically bundling all created artifacts in the final response, the agent follows a structured workflow:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Create & Describe"}),": The agent invokes the ",(0,a.jsx)(t.code,{children:"create_artifact"})," tool to persist a file. Rich metadata, such as descriptions, sources, and inferred schemas, is stored alongside the artifact."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Inject & Inform"}),": This metadata is automatically injected into the conversation history, providing the agent with immediate context regarding the new file."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"List & Discover"}),": The agent can call ",(0,a.jsx)(t.code,{children:"list_artifacts"})," at any point to retrieve a summary of all available artifacts and their associated metadata."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Load & Analyze"}),": The agent can use ",(0,a.jsx)(t.code,{children:"load_artifact"})," to read the content of a text-based artifact or inspect the detailed metadata of any artifact (for example, to ascertain the schema of a CSV file)."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Return on Request"}),": To transmit an artifact to the user or a calling application, the agent must explicitly invoke ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"}),". Artifacts are not returned automatically."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsxs)(t.p,{children:["The file management tools are encapsulated within the ",(0,a.jsx)(t.code,{children:"artifact_management"})," tool group."]}),"\n",(0,a.jsx)(t.h3,{id:"enabling-the-tools",children:"Enabling the Tools"}),"\n",(0,a.jsxs)(t.p,{children:["Enable the tool group within the agent's ",(0,a.jsx)(t.code,{children:"app_config.yml"}),":"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:'# In your agent\'s app_config:\ntools:\n - tool_type: builtin-group\n group_name: "artifact_management"\n'})}),"\n",(0,a.jsx)(t.h3,{id:"configuring-artifact-return-behavior",children:"Configuring Artifact Return Behavior"}),"\n",(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.code,{children:"artifact_handling_mode"})," setting in your ",(0,a.jsx)(t.code,{children:"app_config"})," dictates the behavior when ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})," is called:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ignore"})," (Default): The request is logged, but no artifact is transmitted."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"embed"}),": The artifact content is base64-encoded and embedded within the ",(0,a.jsx)(t.code,{children:"TaskArtifactUpdateEvent"})," payload. This is suitable for smaller files."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"reference"}),": A URI pointing to the artifact is sent in the event payload. This approach requires a separate service to host the file at the specified URI."]}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:'# In your agent\'s app_config:\nartifact_handling_mode: "reference"\n'})}),"\n",(0,a.jsx)(t.h2,{id:"tool-reference",children:"Tool Reference"}),"\n",(0,a.jsx)(t.h3,{id:"create_artifact",children:(0,a.jsx)(t.code,{children:"create_artifact"})}),"\n",(0,a.jsx)(t.p,{children:"Creates a new file artifact and its corresponding metadata."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"}),' (str): The designated name for the artifact (for example, "report.pdf").']}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"content"})," (str): The file content. For binary file types (for example, images, PDFs), this content ",(0,a.jsx)(t.strong,{children:"must be base64-encoded"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"mime_type"}),' (str): The standard MIME type of the content (for example, "text/plain", "image/png").']}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"metadata"})," (dict, optional): A dictionary containing custom metadata (for example, ",(0,a.jsx)(t.code,{children:'{"description": "Monthly sales data"}'}),")."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A dictionary confirming the successful persistence of the artifact."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Key Feature"}),": Upon successful execution of this tool, a summary of the artifact's metadata is ",(0,a.jsx)(t.strong,{children:"automatically injected into the conversation history"}),", informing the agent of the new file's context."]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"list_artifacts",children:(0,a.jsx)(t.code,{children:"list_artifacts"})}),"\n",(0,a.jsx)(t.p,{children:"Lists all available artifacts within the current session."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),": None."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A list of file objects, each containing the ",(0,a.jsx)(t.code,{children:"filename"}),", available ",(0,a.jsx)(t.code,{children:"versions"}),", and a ",(0,a.jsx)(t.code,{children:"metadata_summary"})," for the latest version."]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"load_artifact",children:(0,a.jsx)(t.code,{children:"load_artifact"})}),"\n",(0,a.jsx)(t.p,{children:"Loads the content or detailed metadata of a specific version of an artifact."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"})," (str): The name of the artifact to be loaded."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"version"})," (int): The specific version number of the artifact to load."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"load_metadata_only"})," (bool, optional): If ",(0,a.jsx)(t.code,{children:"True"}),", the tool returns the complete, detailed metadata dictionary instead of the artifact's content. This is useful for inspecting schemas or other metadata fields."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["If ",(0,a.jsx)(t.code,{children:"load_metadata_only=False"}),": The artifact's content (for text-based files) or a basic information dictionary (for binary files)."]}),"\n",(0,a.jsxs)(t.li,{children:["If ",(0,a.jsx)(t.code,{children:"load_metadata_only=True"}),": The complete metadata dictionary for the specified artifact version."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"signal_artifact_for_return",children:(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})}),"\n",(0,a.jsx)(t.p,{children:"Instructs the system to transmit a specific artifact version to the caller."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"})," (str): The name of the artifact to be returned."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"version"})," (int): The specific version number of the artifact to return."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A dictionary confirming that the request has been received."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Note"}),": This tool functions as a signal. The actual transmission of the artifact is handled by the system in accordance with the configured ",(0,a.jsx)(t.code,{children:"artifact_handling_mode"}),"."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"key-concepts",children:"Key Concepts"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Explicit Control"}),": Agents possess full, explicit control over the entire artifact lifecycle."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Metadata-Driven Context"}),": The automatic injection and summarization of metadata are fundamental to providing agents with situational awareness."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Signaled Return"}),": Artifacts are transmitted to the user only upon an explicit request from the agent via the ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})," tool."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Synergy with Embeds"}),": These tools can be used in conjunction with ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/embeds",children:"Dynamic Embeds"}),", such as ",(0,a.jsx)(t.code,{children:"\xabartifact_meta:report.csv\xbb"}),", for more efficient file handling."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>o});var i=n(6540);const a={},s=i.createContext(a);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]);
1
+ "use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[8408],{9083:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"documentation/components/builtin-tools/artifact-management","title":"Artifact Management Tools","description":"This guide details how agents utilize built-in tools to manage file artifacts and their associated metadata. The system employs an explicit, metadata-aware methodology wherein the agent maintains full control over the lifecycle of artifacts, including their creation, listing, loading, and return.","source":"@site/docs/documentation/components/builtin-tools/artifact-management.md","sourceDirName":"documentation/components/builtin-tools","slug":"/documentation/components/builtin-tools/artifact-management","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/artifact-management","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/components/builtin-tools/artifact-management.md","tags":[],"version":"current","sidebarPosition":10,"frontMatter":{"title":"Artifact Management Tools","sidebar_position":10},"sidebar":"docSidebar","previous":{"title":"Configuring Built-in Tools","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/"},"next":{"title":"Data Analysis Tools","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/data-analysis-tools"}}');var a=n(4848),s=n(8453);const r={title:"Artifact Management Tools",sidebar_position:10},o="Artifact Management Tools",c={},l=[{value:"The Metadata-Aware Workflow",id:"the-metadata-aware-workflow",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Enabling the Tools",id:"enabling-the-tools",level:3},{value:"Configuring Artifact Return Behavior",id:"configuring-artifact-return-behavior",level:3},{value:"Tool Reference",id:"tool-reference",level:2},{value:"<code>create_artifact</code>",id:"create_artifact",level:3},{value:"<code>list_artifacts</code>",id:"list_artifacts",level:3},{value:"<code>load_artifact</code>",id:"load_artifact",level:3},{value:"<code>signal_artifact_for_return</code>",id:"signal_artifact_for_return",level:3},{value:"Key Concepts",id:"key-concepts",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"artifact-management-tools",children:"Artifact Management Tools"})}),"\n",(0,a.jsx)(t.p,{children:"This guide details how agents utilize built-in tools to manage file artifacts and their associated metadata. The system employs an explicit, metadata-aware methodology wherein the agent maintains full control over the lifecycle of artifacts, including their creation, listing, loading, and return."}),"\n",(0,a.jsx)(t.h2,{id:"the-metadata-aware-workflow",children:"The Metadata-Aware Workflow"}),"\n",(0,a.jsx)(t.p,{children:"Rather than automatically bundling all created artifacts in the final response, the agent follows a structured workflow:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Create & Describe"}),": The agent invokes the ",(0,a.jsx)(t.code,{children:"create_artifact"})," tool to persist a file. Rich metadata, such as descriptions, sources, and inferred schemas, is stored alongside the artifact."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Inject & Inform"}),": This metadata is automatically injected into the conversation history, providing the agent with immediate context regarding the new file."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"List & Discover"}),": The agent can call ",(0,a.jsx)(t.code,{children:"list_artifacts"})," at any point to retrieve a summary of all available artifacts and their associated metadata."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Load & Analyze"}),": The agent can use ",(0,a.jsx)(t.code,{children:"load_artifact"})," to read the content of a text-based artifact or inspect the detailed metadata of any artifact (for example, to ascertain the schema of a CSV file)."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Return on Request"}),": To transmit an artifact to the user or a calling application, the agent must explicitly invoke ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"}),". Artifacts are not returned automatically."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsxs)(t.p,{children:["The file management tools are encapsulated within the ",(0,a.jsx)(t.code,{children:"artifact_management"})," tool group."]}),"\n",(0,a.jsx)(t.h3,{id:"enabling-the-tools",children:"Enabling the Tools"}),"\n",(0,a.jsxs)(t.p,{children:["Enable the tool group within the agent's ",(0,a.jsx)(t.code,{children:"app_config.yml"}),":"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:'# In your agent\'s app_config:\ntools:\n - tool_type: builtin-group\n group_name: "artifact_management"\n'})}),"\n",(0,a.jsx)(t.h3,{id:"configuring-artifact-return-behavior",children:"Configuring Artifact Return Behavior"}),"\n",(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.code,{children:"artifact_handling_mode"})," setting in your ",(0,a.jsx)(t.code,{children:"app_config"})," dictates the behavior when ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})," is called:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ignore"})," (Default): The request is logged, but no artifact is transmitted."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"embed"}),": The artifact content is base64-encoded and embedded within the ",(0,a.jsx)(t.code,{children:"TaskArtifactUpdateEvent"})," payload. This is suitable for smaller files."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"reference"}),": A URI pointing to the artifact is sent in the event payload. This approach requires a separate service to host the file at the specified URI."]}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:'# In your agent\'s app_config:\nartifact_handling_mode: "reference"\n'})}),"\n",(0,a.jsx)(t.h2,{id:"tool-reference",children:"Tool Reference"}),"\n",(0,a.jsx)(t.h3,{id:"create_artifact",children:(0,a.jsx)(t.code,{children:"create_artifact"})}),"\n",(0,a.jsx)(t.p,{children:"Creates a new file artifact and its corresponding metadata."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"}),' (str): The designated name for the artifact (for example, "report.pdf").']}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"content"})," (str): The file content. For binary file types (for example, images, PDFs), this content ",(0,a.jsx)(t.strong,{children:"must be base64-encoded"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"mime_type"}),' (str): The standard MIME type of the content (for example, "text/plain", "image/png").']}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"metadata"})," (dict, optional): A dictionary containing custom metadata (for example, ",(0,a.jsx)(t.code,{children:'{"description": "Monthly sales data"}'}),")."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A dictionary confirming the successful persistence of the artifact."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Key Feature"}),": Upon successful execution of this tool, a summary of the artifact's metadata is ",(0,a.jsx)(t.strong,{children:"automatically injected into the conversation history"}),", informing the agent of the new file's context."]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"list_artifacts",children:(0,a.jsx)(t.code,{children:"list_artifacts"})}),"\n",(0,a.jsx)(t.p,{children:"Lists all available artifacts within the current session."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),": None."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A list of file objects, each containing the ",(0,a.jsx)(t.code,{children:"filename"}),", available ",(0,a.jsx)(t.code,{children:"versions"}),", and a ",(0,a.jsx)(t.code,{children:"metadata_summary"})," for the latest version."]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"load_artifact",children:(0,a.jsx)(t.code,{children:"load_artifact"})}),"\n",(0,a.jsx)(t.p,{children:"Loads the content or detailed metadata of a specific version of an artifact."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"})," (str): The name of the artifact to be loaded."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"version"})," (int): The specific version number of the artifact to load."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"load_metadata_only"})," (bool, optional): If ",(0,a.jsx)(t.code,{children:"True"}),", the tool returns the complete, detailed metadata dictionary instead of the artifact's content. This is useful for inspecting schemas or other metadata fields."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["If ",(0,a.jsx)(t.code,{children:"load_metadata_only=False"}),": The artifact's content (for text-based files) or a basic information dictionary (for binary files)."]}),"\n",(0,a.jsxs)(t.li,{children:["If ",(0,a.jsx)(t.code,{children:"load_metadata_only=True"}),": The complete metadata dictionary for the specified artifact version."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"signal_artifact_for_return",children:(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})}),"\n",(0,a.jsx)(t.p,{children:"Instructs the system to transmit a specific artifact version to the caller."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parameters"}),":","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"filename"})," (str): The name of the artifact to be returned."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"version"})," (int): The specific version number of the artifact to return."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Returns"}),": A dictionary confirming that the request has been received."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Note"}),": This tool functions as a signal. The actual transmission of the artifact is handled by the system in accordance with the configured ",(0,a.jsx)(t.code,{children:"artifact_handling_mode"}),"."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"key-concepts",children:"Key Concepts"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Explicit Control"}),": Agents possess full, explicit control over the entire artifact lifecycle."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Metadata-Driven Context"}),": The automatic injection and summarization of metadata are fundamental to providing agents with situational awareness."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Signaled Return"}),": Artifacts are transmitted to the user only upon an explicit request from the agent via the ",(0,a.jsx)(t.code,{children:"signal_artifact_for_return"})," tool."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Synergy with Embeds"}),": These tools can be used in conjunction with ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/builtin-tools/embeds",children:"Dynamic Embeds"}),", such as ",(0,a.jsx)(t.code,{children:"\xabartifact_meta:report.csv\xbb"}),", for more efficient file handling."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>o});var i=n(6540);const a={},s=i.createContext(a);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[5703],{1141:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"documentation/developing/tutorials/mongodb-integration","title":"MongoDB Integration","description":"This tutorial sets up a MongoDB agent in Agent Mesh, which allows the Agent Mesh agent to answer natural language queries about a Mongo database. The agent translates user questions into MongoDB aggregation pipelines and executes them against your database.","source":"@site/docs/documentation/developing/tutorials/mongodb-integration.md","sourceDirName":"documentation/developing/tutorials","slug":"/documentation/developing/tutorials/mongodb-integration","permalink":"/solace-agent-mesh/docs/documentation/developing/tutorials/mongodb-integration","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/developing/tutorials/mongodb-integration.md","tags":[],"version":"current","sidebarPosition":50,"frontMatter":{"title":"MongoDB Integration","sidebar_position":50},"sidebar":"docSidebar","previous":{"title":"SQL Database Integration","permalink":"/solace-agent-mesh/docs/documentation/developing/tutorials/sql-database"},"next":{"title":"Slack Integration","permalink":"/solace-agent-mesh/docs/documentation/developing/tutorials/slack-integration"}}');var s=t(4848),a=t(8453);const i={title:"MongoDB Integration",sidebar_position:50},r="MongoDB Integration",l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Adding the MongoDB Plugin",id:"adding-the-mongodb-plugin",level:2},{value:"Setting Up Your MongoDB Database",id:"setting-up-your-mongodb-database",level:4},{value:"Example Document Structure",id:"example-document-structure",level:4},{value:"Configuring the Agent",id:"configuring-the-agent",level:2},{value:"Setting the Environment Variables",id:"setting-the-environment-variables",level:4},{value:"MongoDB Connection Options",id:"mongodb-connection-options",level:4},{value:"Running the Agent",id:"running-the-agent",level:2},{value:"Interacting with the Database",id:"interacting-with-the-database",level:2},{value:"Advanced Configuration",id:"advanced-configuration",level:2},{value:"Customizing the Agent Card",id:"customizing-the-agent-card",level:2},{value:"Key Agent Card Elements",id:"key-agent-card-elements",level:3},{value:"Example of a Well-Configured Agent Card",id:"example-of-a-well-configured-agent-card",level:3},{value:"MongoDB Query Features",id:"mongodb-query-features",level:2},{value:"Aggregation Queries",id:"aggregation-queries",level:3},{value:"Filtering and Search",id:"filtering-and-search",level:3},{value:"Complex Analytics",id:"complex-analytics",level:3},{value:"Output Formats",id:"output-formats",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Common Issues and Solutions",id:"common-issues-and-solutions",level:3},{value:"Connection Errors",id:"connection-errors",level:4},{value:"Authentication Errors",id:"authentication-errors",level:4},{value:"Query Errors",id:"query-errors",level:4},{value:"Schema Detection Issues",id:"schema-detection-issues",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"mongodb-integration",children:"MongoDB Integration"})}),"\n",(0,s.jsx)(n.p,{children:"This tutorial sets up a MongoDB agent in Agent Mesh, which allows the Agent Mesh agent to answer natural language queries about a Mongo database. The agent translates user questions into MongoDB aggregation pipelines and executes them against your database."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"Before starting this tutorial, ensure that you have installed and configured Agent Mesh:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/installation",children:"Installed Agent Mesh and the Agent Mesh CLI"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/run-project",children:"Created a new Agent Mesh project"})}),"\n",(0,s.jsx)(n.li,{children:"Access to a MongoDB database (local or remote)"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"adding-the-mongodb-plugin",children:"Adding the MongoDB Plugin"}),"\n",(0,s.jsx)(n.p,{children:"Add the MongoDB plugin to your Agent Mesh project:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"sam plugin add coffee-shop-mongo --plugin sam-mongodb\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can use any name for your agent, in this tutorial we use ",(0,s.jsx)(n.code,{children:"coffee-shop-mongo"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This command:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Installs the ",(0,s.jsx)(n.code,{children:"sam-mongodb"})," plugin"]}),"\n",(0,s.jsxs)(n.li,{children:["Creates a new agent configuration file at ",(0,s.jsx)(n.code,{children:"configs/agents/coffee-shop-mongo.yaml"})]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"setting-up-your-mongodb-database",children:"Setting Up Your MongoDB Database"}),"\n",(0,s.jsx)(n.p,{children:"This tutorial assumes you have a MongoDB database with a collection containing coffee shop data. You can use any MongoDB database, but here is an example structure for a coffee shop:"}),"\n",(0,s.jsx)(n.h4,{id:"example-document-structure",children:"Example Document Structure"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "_id": "64a1b2c3d4e5f6789012345",\n "order_id": "ORD-2024-001",\n "customer": {\n "name": "John Doe",\n "email": "john.doe@example.com",\n "phone": "+1-555-0123"\n },\n "items": [\n {\n "product": "Espresso",\n "quantity": 2,\n "price": 3.50,\n "category": "Coffee"\n },\n {\n "product": "Croissant",\n "quantity": 1,\n "price": 2.75,\n "category": "Pastry"\n }\n ],\n "total_amount": 9.75,\n "order_date": "2024-01-15T10:30:00Z",\n "status": "completed",\n "payment_method": "credit_card",\n "location": "Downtown Store"\n}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"configuring-the-agent",children:"Configuring the Agent"}),"\n",(0,s.jsxs)(n.p,{children:["Open the ",(0,s.jsx)(n.code,{children:"configs/agents/coffee-shop-mongo.yaml"})," file and modify the ",(0,s.jsx)(n.code,{children:"agent_init_function.config"})," section to connect to your MongoDB database."]}),"\n",(0,s.jsx)(n.p,{children:"Here is what you need to modify in the configuration file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'# Find the agent_init_function section and update the config:\nagent_init_function:\n module: "sam_mongodb.lifecycle"\n name: "initialize_mongo_agent"\n config:\n db_host: "${COFFEE_SHOP_MONGO_MONGO_HOST}"\n db_port: ${COFFEE_SHOP_MONGO_MONGO_PORT}\n db_user: "${COFFEE_SHOP_MONGO_MONGO_USER}"\n db_password: "${COFFEE_SHOP_MONGO_MONGO_PASSWORD}"\n db_name: "${COFFEE_SHOP_MONGO_MONGO_DB}"\n database_collection: "${COFFEE_SHOP_MONGO_MONGO_COLLECTION}"\n database_purpose: "${COFFEE_SHOP_MONGO_DB_PURPOSE}"\n data_description: "${COFFEE_SHOP_MONGO_DB_DESCRIPTION}"\n auto_detect_schema: true\n max_inline_results: 10\n'})}),"\n",(0,s.jsx)(n.h4,{id:"setting-the-environment-variables",children:"Setting the Environment Variables"}),"\n",(0,s.jsxs)(n.p,{children:["The MongoDB agent requires several environment variables. Create or update your ",(0,s.jsx)(n.code,{children:".env"})," file with the following variables:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# MongoDB Connection Settings\nCOFFEE_SHOP_MONGO_MONGO_HOST=localhost\nCOFFEE_SHOP_MONGO_MONGO_PORT=27017\nCOFFEE_SHOP_MONGO_MONGO_USER=your_username\nCOFFEE_SHOP_MONGO_MONGO_PASSWORD=your_password\nCOFFEE_SHOP_MONGO_MONGO_DB=coffee_shop\nCOFFEE_SHOP_MONGO_MONGO_COLLECTION=orders\n\n# Database Description\nCOFFEE_SHOP_MONGO_DB_PURPOSE="Coffee shop order management database"\nCOFFEE_SHOP_MONGO_DB_DESCRIPTION="Contains customer orders, product information, sales data, and transaction history for a coffee shop business."\n\n# Optional Settings\nAUTO_DETECT_SCHEMA=true\nMAX_INLINE_RESULTS=10\n'})}),"\n",(0,s.jsx)(n.h4,{id:"mongodb-connection-options",children:"MongoDB Connection Options"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Local MongoDB"}),": Use ",(0,s.jsx)(n.code,{children:"localhost"})," as the host and default port ",(0,s.jsx)(n.code,{children:"27017"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"MongoDB Atlas"}),": Use your Atlas connection string format"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Authentication"}),": Provide username and password if your MongoDB requires authentication"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"No Authentication"}),": Leave username and password empty for local development databases"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"running-the-agent",children:"Running the Agent"}),"\n",(0,s.jsx)(n.p,{children:"Now you can start your MongoDB agent:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"sam run configs/agents/coffee-shop-mongo.yaml\n"})}),"\n",(0,s.jsx)(n.p,{children:"The agent:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Connects to the A2A control plane"}),"\n",(0,s.jsx)(n.li,{children:"Initializes the MongoDB connection"}),"\n",(0,s.jsx)(n.li,{children:"Detects the database schema automatically"}),"\n",(0,s.jsx)(n.li,{children:"Registers its capabilities with the agent discovery system"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"interacting-with-the-database",children:"Interacting with the Database"}),"\n",(0,s.jsxs)(n.p,{children:["After your MongoDB agent is running, you can interact with the database through any gateway in your Agent Mesh project (such as the Web UI gateway at ",(0,s.jsx)(n.code,{children:"http://localhost:8000"}),")."]}),"\n",(0,s.jsx)(n.p,{children:"You can ask natural language questions about your MongoDB database, such as:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"How many orders were placed today?"'}),"\n",(0,s.jsx)(n.li,{children:'"What are the most popular coffee products?"'}),"\n",(0,s.jsx)(n.li,{children:'"Show me all orders from customers in New York"'}),"\n",(0,s.jsx)(n.li,{children:'"What\'s the average order value this month?"'}),"\n",(0,s.jsx)(n.li,{children:'"Find all incomplete orders"'}),"\n",(0,s.jsx)(n.li,{children:'"Group orders by payment method and show totals"'}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Try creating reports by asking questions such as:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"Create a sales report for the last 7 days"'}),"\n",(0,s.jsx)(n.li,{children:'"Generate a summary of customer preferences"'}),"\n",(0,s.jsx)(n.li,{children:'"Show me the top 10 customers by total spending"'}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The MongoDB agent converts your natural language questions into MongoDB aggregation pipelines, executes them against the database, and returns the results. For large result sets, the agent automatically saves the results as artifacts that you can download."}),"\n",(0,s.jsx)(n.h2,{id:"advanced-configuration",children:"Advanced Configuration"}),"\n",(0,s.jsx)(n.p,{children:"The MongoDB plugin supports many advanced configuration options. Here is a complete example based on the plugin structure:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'log:\n stdout_log_level: INFO\n log_file_level: DEBUG\n log_file: coffee-shop-mongo.log\n\n!include ../shared_config.yaml\n\napps:\n - name: coffee-shop-mongo-app\n app_module: solace_agent_mesh.agent.sac.app \n broker:\n <<: *broker_connection\n\n app_config:\n namespace: ${NAMESPACE}\n agent_name: "CoffeeShopMongo"\n display_name: "Coffee Shop MongoDB Agent"\n supports_streaming: false\n model: *general_model\n\n instruction: |\n You are an expert MongoDB assistant for the coffee shop database.\n Your primary goal is to translate user questions into accurate MongoDB aggregation pipelines.\n When asked to query the database, generate the pipeline and call the query tool.\n If the tool returns an error, analyze the error message and the original pipeline,\n then try to correct the pipeline and call the tool again.\n Always provide clear explanations of the results you find.\n\n # Agent initialization with database setup\n agent_init_function:\n module: "sam_mongodb.lifecycle"\n name: "initialize_mongo_agent"\n config:\n db_host: "${COFFEE_SHOP_MONGO_MONGO_HOST}"\n db_port: ${COFFEE_SHOP_MONGO_MONGO_PORT}\n db_user: "${COFFEE_SHOP_MONGO_MONGO_USER}"\n db_password: "${COFFEE_SHOP_MONGO_MONGO_PASSWORD}"\n db_name: "${COFFEE_SHOP_MONGO_MONGO_DB}"\n database_collection: "${COFFEE_SHOP_MONGO_MONGO_COLLECTION}"\n database_purpose: "${COFFEE_SHOP_MONGO_DB_PURPOSE}"\n data_description: "${COFFEE_SHOP_MONGO_DB_DESCRIPTION}"\n auto_detect_schema: true\n max_inline_results: 10\n\n agent_cleanup_function:\n module: "sam_mongodb.lifecycle"\n name: "cleanup_mongo_agent_resources"\n\n # MongoDB query tool\n tools:\n - tool_type: builtin-group\n group_name: "artifact_management"\n - tool_type: builtin-group\n group_name: "data_analysis"\n - tool_type: python\n component_module: "sam_mongodb.search_query"\n function_name: "mongo_query"\n tool_config:\n collection: "${COFFEE_SHOP_MONGO_MONGO_COLLECTION}"\n\n session_service: *default_session_service\n artifact_service: *default_artifact_service\n\n # Artifact handling\n artifact_handling_mode: "reference"\n enable_embed_resolution: true\n enable_artifact_content_instruction: true\n\n # Agent capabilities - This is what other agents see during discovery\n agent_card:\n description: "Coffee Shop MongoDB Agent - Access to comprehensive coffee shop order data including customer information, product details, sales transactions, and order history. Can answer questions about sales analytics, customer behavior, product performance, and business metrics."\n defaultInputModes: ["text"]\n defaultOutputModes: ["text", "file"]\n skills:\n - id: "mongo_query"\n name: "Coffee Shop MongoDB Query"\n description: "Queries coffee shop MongoDB database containing customer orders, product catalog, payment transactions, and order history using aggregation pipelines."\n\n # A2A Protocol settings\n agent_card_publishing: { interval_seconds: 30 }\n agent_discovery: { enabled: true }\n inter_agent_communication:\n allow_list: ["*"]\n request_timeout_seconds: 60\n'})}),"\n",(0,s.jsx)(n.h2,{id:"customizing-the-agent-card",children:"Customizing the Agent Card"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"agent_card"})," section is crucial as it defines how other agents in your Agent Mesh ecosystem discover and understand this MongoDB agent's capabilities. When other agents use agent discovery, they can see this information to decide whether to delegate tasks to your database agent."]}),"\n",(0,s.jsx)(n.h3,{id:"key-agent-card-elements",children:"Key Agent Card Elements"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Description"}),": Clearly describe what data the agent has access to and what types of questions it can answer"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Skills"}),": List specific capabilities with concrete examples that show the scope of data available"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Data Context"}),": Mention the business domain, data types, and scope of information available"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"example-of-a-well-configured-agent-card",children:"Example of a Well-Configured Agent Card"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'agent_card:\n description: "Coffee Shop MongoDB Agent - Access to comprehensive coffee shop order data including customer information, product details, sales transactions, and order history. Can answer questions about sales analytics, customer behavior, product performance, and business metrics."\n defaultInputModes: ["text"]\n defaultOutputModes: ["text", "file"]\n skills:\n - id: "mongo_query"\n name: "Coffee Shop MongoDB Query"\n description: "Queries coffee shop MongoDB database containing customer orders, product catalog, payment transactions, and order history using aggregation pipelines."\n'})}),"\n",(0,s.jsx)(n.p,{children:"This detailed information helps other agents understand:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"What business domain this agent covers (coffee shop operations)"}),"\n",(0,s.jsx)(n.li,{children:"What types of data are available (orders, customers, products, payments)"}),"\n",(0,s.jsx)(n.li,{children:"What kinds of questions can be answered (analytics, behavior, performance, metrics)"}),"\n",(0,s.jsx)(n.li,{children:"Specific examples of queries that work well with MongoDB aggregation pipelines"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"When configuring your own MongoDB agent, customize the description and examples to match your specific data structure and use cases."}),"\n",(0,s.jsx)(n.h2,{id:"mongodb-query-features",children:"MongoDB Query Features"}),"\n",(0,s.jsx)(n.p,{children:"The MongoDB agent supports various types of queries through natural language:"}),"\n",(0,s.jsx)(n.h3,{id:"aggregation-queries",children:"Aggregation Queries"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"Show me the top 5 products by sales volume"'}),"\n",(0,s.jsx)(n.li,{children:'"Calculate the average order value by customer segment"'}),"\n",(0,s.jsx)(n.li,{children:'"Group orders by month and show revenue trends"'}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"filtering-and-search",children:"Filtering and Search"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"Find all orders placed in the last 24 hours"'}),"\n",(0,s.jsx)(n.li,{children:'"Show me orders with a total amount greater than $50"'}),"\n",(0,s.jsx)(n.li,{children:'"Find customers who ordered espresso drinks"'}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"complex-analytics",children:"Complex Analytics"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"What\'s the conversion rate from browsing to purchase?"'}),"\n",(0,s.jsx)(n.li,{children:'"Show me the busiest hours of the day"'}),"\n",(0,s.jsx)(n.li,{children:'"Calculate customer lifetime value"'}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"output-formats",children:"Output Formats"}),"\n",(0,s.jsx)(n.p,{children:"The agent supports multiple output formats:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"JSON"}),": Default format, good for structured data"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"YAML"}),": Human-readable format"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"CSV"}),": Suitable for spreadsheet import"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Markdown"}),": Formatted for documentation"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:'You can specify the format in your query: "Show me today\'s sales in CSV format"'}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(n.h3,{id:"common-issues-and-solutions",children:"Common Issues and Solutions"}),"\n",(0,s.jsx)(n.h4,{id:"connection-errors",children:"Connection Errors"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Issue"}),': "Unable to connect to MongoDB" errors\n',(0,s.jsx)(n.strong,{children:"Solution"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Verify your MongoDB server is running"}),"\n",(0,s.jsx)(n.li,{children:"Check connection parameters (host, port, credentials)"}),"\n",(0,s.jsx)(n.li,{children:"Ensure network connectivity and firewall settings"}),"\n",(0,s.jsx)(n.li,{children:"Test connection using MongoDB client tools"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"authentication-errors",children:"Authentication Errors"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Issue"}),': "Authentication failed" errors\n',(0,s.jsx)(n.strong,{children:"Solution"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Verify username and password are correct"}),"\n",(0,s.jsx)(n.li,{children:"Check that the user has appropriate database permissions"}),"\n",(0,s.jsx)(n.li,{children:"Ensure the authentication database is correct"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"query-errors",children:"Query Errors"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Issue"}),': "Invalid aggregation pipeline" errors\n',(0,s.jsx)(n.strong,{children:"Solution"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The agent automatically retries with corrected pipelines"}),"\n",(0,s.jsx)(n.li,{children:"Check that your natural language query is clear and specific"}),"\n",(0,s.jsx)(n.li,{children:"Verify that referenced fields exist in your collection"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"schema-detection-issues",children:"Schema Detection Issues"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Issue"}),": Agent does not understand your data structure\n",(0,s.jsx)(n.strong,{children:"Solution"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Ensure ",(0,s.jsx)(n.code,{children:"auto_detect_schema"})," is set to ",(0,s.jsx)(n.code,{children:"true"})]}),"\n",(0,s.jsxs)(n.li,{children:["Provide detailed ",(0,s.jsx)(n.code,{children:"data_description"})," in your configuration"]}),"\n",(0,s.jsx)(n.li,{children:"Check that your collection has representative sample documents"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>r});var o=t(6540);const s={},a=o.createContext(s);function i(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]);