solace-agent-mesh 1.3.3__py3-none-any.whl → 1.4.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 (80) hide show
  1. solace_agent_mesh/agent/adk/setup.py +183 -8
  2. solace_agent_mesh/agent/sac/app.py +337 -622
  3. solace_agent_mesh/agent/sac/component.py +47 -1
  4. solace_agent_mesh/agent/tools/dynamic_tool.py +36 -5
  5. solace_agent_mesh/agent/tools/tool_config_types.py +58 -0
  6. solace_agent_mesh/assets/docs/404.html +3 -3
  7. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.508ae8db.js +1 -0
  8. solace_agent_mesh/assets/docs/assets/js/9a09e75d.92de8cf5.js +1 -0
  9. solace_agent_mesh/assets/docs/assets/js/{main.e82b32e6.js → main.1de3da6a.js} +2 -2
  10. solace_agent_mesh/assets/docs/assets/js/{runtime~main.aad1f874.js → runtime~main.3188e049.js} +1 -1
  11. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +3 -3
  12. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +3 -3
  13. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
  14. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html +3 -3
  15. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +3 -3
  16. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +3 -3
  17. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +3 -3
  18. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +3 -3
  19. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +3 -3
  20. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +3 -3
  21. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +3 -3
  22. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +3 -3
  23. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +3 -3
  24. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +3 -3
  25. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +3 -3
  26. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +3 -3
  27. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  28. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +3 -3
  29. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +3 -3
  30. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +3 -3
  31. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +3 -3
  32. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +3 -3
  33. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +3 -3
  34. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html +3 -3
  35. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +3 -3
  36. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +3 -3
  37. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +3 -3
  38. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +3 -3
  39. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +3 -3
  40. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +3 -3
  41. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +3 -3
  42. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +3 -3
  43. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +5 -5
  44. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +3 -3
  45. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-python-tools/index.html +68 -3
  46. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +3 -3
  47. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +3 -3
  48. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +3 -3
  49. solace_agent_mesh/assets/docs/lunr-index-1757991496554.json +1 -0
  50. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  51. solace_agent_mesh/assets/docs/search-doc-1757991496554.json +1 -0
  52. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  53. solace_agent_mesh/cli/__init__.py +1 -1
  54. solace_agent_mesh/cli/commands/run_cmd.py +4 -7
  55. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-CAX9u8a7.js → authCallback-j1LW-wlq.js} +1 -1
  56. solace_agent_mesh/client/webui/frontend/static/assets/{client-DXU9SPI5.js → client-B9p_nFNA.js} +1 -1
  57. solace_agent_mesh/client/webui/frontend/static/assets/main-B9s_V9tJ.css +1 -0
  58. solace_agent_mesh/client/webui/frontend/static/assets/main-Dq4AJNvn.js +339 -0
  59. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-B0BEKoAR.js → vendor-CS5YMf8a.js} +74 -69
  60. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  61. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  62. solace_agent_mesh/common/utils/pydantic_utils.py +56 -0
  63. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +6 -4
  64. solace_agent_mesh/gateway/base/app.py +58 -120
  65. solace_agent_mesh/gateway/http_sse/app.py +99 -150
  66. solace_agent_mesh/gateway/http_sse/component.py +57 -30
  67. solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +87 -0
  68. solace_agent_mesh/gateway/http_sse/sse_manager.py +44 -23
  69. {solace_agent_mesh-1.3.3.dist-info → solace_agent_mesh-1.4.0.dist-info}/METADATA +1 -1
  70. {solace_agent_mesh-1.3.3.dist-info → solace_agent_mesh-1.4.0.dist-info}/RECORD +74 -71
  71. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.3f34bf76.js +0 -1
  72. solace_agent_mesh/assets/docs/assets/js/9a09e75d.5a319fd4.js +0 -1
  73. solace_agent_mesh/assets/docs/lunr-index-1757873594308.json +0 -1
  74. solace_agent_mesh/assets/docs/search-doc-1757873594308.json +0 -1
  75. solace_agent_mesh/client/webui/frontend/static/assets/main-C03yrETa.css +0 -1
  76. solace_agent_mesh/client/webui/frontend/static/assets/main-DjoMeldu.js +0 -339
  77. /solace_agent_mesh/assets/docs/assets/js/{main.e82b32e6.js.LICENSE.txt → main.1de3da6a.js.LICENSE.txt} +0 -0
  78. {solace_agent_mesh-1.3.3.dist-info → solace_agent_mesh-1.4.0.dist-info}/WHEEL +0 -0
  79. {solace_agent_mesh-1.3.3.dist-info → solace_agent_mesh-1.4.0.dist-info}/entry_points.txt +0 -0
  80. {solace_agent_mesh-1.3.3.dist-info → solace_agent_mesh-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -14,7 +14,7 @@ solace_agent_mesh/agent/adk/invocation_monitor.py,sha256=_20-nQXVjGlAEyw9PLFTTvg
14
14
  solace_agent_mesh/agent/adk/mcp_content_processor.py,sha256=8s3ytZ8qrKZCUt_u8aE_EHH1_01yewPoekkllCuz9ME,23850
15
15
  solace_agent_mesh/agent/adk/runner.py,sha256=CFpnWaNwpXBTZATBWDhmw4xJsMaFnjucqGbr0_HmqeE,12977
16
16
  solace_agent_mesh/agent/adk/services.py,sha256=AFp67SD3Rxrd3EuTeSVrEY2a-foe52dcvWIGN9lw8RU,12894
17
- solace_agent_mesh/agent/adk/setup.py,sha256=SMzAo0HwxfcZwWek_OWXtuKtYRYkBKY0Pmrv2HO8izQ,37839
17
+ solace_agent_mesh/agent/adk/setup.py,sha256=6AoDdzjKgDvY4oaeKWw2phdtT3cFniV0tZRkt-mtdJ4,45092
18
18
  solace_agent_mesh/agent/adk/stream_parser.py,sha256=3i5rFN7dDVgjLvK4GG0PKYmxgIdtqKABfM9oTCouSZ0,8278
19
19
  solace_agent_mesh/agent/adk/tool_wrapper.py,sha256=yzkXjE4QtdVtO5edB-c-R_qJgaex9rmCHIswW1ltfxY,6513
20
20
  solace_agent_mesh/agent/adk/artifacts/__init__.py,sha256=vAB8eqGwgPo3nx6YkT93Y7puYRMcqIKMAchBizvdw7Y,62
@@ -27,8 +27,8 @@ solace_agent_mesh/agent/protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
27
27
  solace_agent_mesh/agent/protocol/event_handlers.py,sha256=qLpQoGsB_8ZazrFmGdPmmCDOTjJk6W6Ow8BYK5Z7lYg,72973
28
28
  solace_agent_mesh/agent/protocol/protocol_llm.txt,sha256=3-ojfRlRtmmr6RuiAx_r1ib3LzSaRWjJdDaUpM9mZ5E,3929
29
29
  solace_agent_mesh/agent/sac/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- solace_agent_mesh/agent/sac/app.py,sha256=OlJqD48qdb8dB8EiZQe_0HqK80TVfqc9baQWWC01Phw,32907
31
- solace_agent_mesh/agent/sac/component.py,sha256=tAc2UJkMSJzcVOGecwW5M2BMzZGEXqMlEAJouXMInEs,130085
30
+ solace_agent_mesh/agent/sac/app.py,sha256=tHwkHXJ4GUDSLCj4W3OP5znWPoiHRAEfvcXgfw23f6w,17826
31
+ solace_agent_mesh/agent/sac/component.py,sha256=IZtLMlyETMYxn3U1NEv33m9WKvbiT2M-YxsphbCOS44,131974
32
32
  solace_agent_mesh/agent/sac/patch_adk.py,sha256=LQhPvwpEVeeDVUgZD-p8CTxft-jRv_OadMR-gR1uTXk,4266
33
33
  solace_agent_mesh/agent/sac/sac_llm.txt,sha256=KcnVBK8oBuyguMkrCzG773GOQyPqscGxK7VdK2RYYco,9101
34
34
  solace_agent_mesh/agent/sac/task_execution_context.py,sha256=EpX6IWUtlv9ot9aW4_5bjEctJXd-O5Ozmq-FsJE9MBU,7663
@@ -39,12 +39,13 @@ solace_agent_mesh/agent/tools/__init__.py,sha256=3dURhTS7XdvQW1A5j-_eigcZNjhzog6
39
39
  solace_agent_mesh/agent/tools/audio_tools.py,sha256=LOjfD2tTsYanIbntpysX4gQZ1e8NHqmv_yQ7iHitvyQ,59717
40
40
  solace_agent_mesh/agent/tools/builtin_artifact_tools.py,sha256=4zUqrPlBfIz2N3sAZXzk-ZmUCyRqA3-qmnTm3vaCcx4,77526
41
41
  solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py,sha256=nII4SNDYFt1QaHtXpcoFr3mIg3n1QXTNJfm3VQDD394,8767
42
- solace_agent_mesh/agent/tools/dynamic_tool.py,sha256=Ewec4orBbGDx4JW-WGg5WemGGsYD6oRUmPvvKE3rRzA,12424
42
+ solace_agent_mesh/agent/tools/dynamic_tool.py,sha256=Ule1NtjhBypvs3isdlEKQRJavkukc_sq4x9gQ7_E3XI,13524
43
43
  solace_agent_mesh/agent/tools/general_agent_tools.py,sha256=7ygxOwOMacWv7oMQumbIG4XEn3UwRWTSBDuutZPFKj8,21959
44
44
  solace_agent_mesh/agent/tools/image_tools.py,sha256=sLIO-d4006CqJ-YaGYsE-1sfDTMCfI0foPLHieaaFZg,47968
45
45
  solace_agent_mesh/agent/tools/peer_agent_tool.py,sha256=rCY7D3OKw_oQ6Oc33AkoxBHKFGL3zQwT5NLgUZ4C1cY,12308
46
46
  solace_agent_mesh/agent/tools/registry.py,sha256=A4I1RbvQ0b-AFyH4d_vpdAjE3mtoWV_OrObVW3isZbI,1208
47
47
  solace_agent_mesh/agent/tools/test_tools.py,sha256=Bu5nueLX1YFxUFJC2jeG5y3z_s1B3KwqkRAo4TKl4YI,4217
48
+ solace_agent_mesh/agent/tools/tool_config_types.py,sha256=IeDB0XBJbulFYbOFeU5UUOZlcbt6A6MLby_M6Hzv3tc,1913
48
49
  solace_agent_mesh/agent/tools/tool_definition.py,sha256=QFgKAZy-3GAmAG_q5XG9gduQRr6uF3ZEo-H05PY1C6s,1690
49
50
  solace_agent_mesh/agent/tools/tools_llm.txt,sha256=W-JcxYZ6JQERrRTYRhWZQeOobUN_Dszl93_Y0kwv7mc,13653
50
51
  solace_agent_mesh/agent/tools/web_tools.py,sha256=fS3GwqJmORMx0efrJmU9tij_tqUKG8JlAbaUzYhEaQY,15187
@@ -101,6 +102,7 @@ solace_agent_mesh/common/utils/log_formatters.py,sha256=EV8-ryy9mQgGv8hXipKrdXCu
101
102
  solace_agent_mesh/common/utils/message_utils.py,sha256=MFICU-isggU7LJhev0qCm9n5thlhuc1KZ4mt1tNcKKY,2825
102
103
  solace_agent_mesh/common/utils/mime_helpers.py,sha256=wbX5g4GNodyWdcmMeKc1VxZcHdDhItN4hrZI3-siqlk,4316
103
104
  solace_agent_mesh/common/utils/push_notification_auth.py,sha256=Jp3W2cqNQK6Q27dLGo2bzCOQcwp23TkgkAcb5CckdAo,4622
105
+ solace_agent_mesh/common/utils/pydantic_utils.py,sha256=mXeezpk7VVRNpheu4tVJLT4GI2o-zPBxhpRvEFuS5D8,1956
104
106
  solace_agent_mesh/common/utils/utils_llm.txt,sha256=Sdj3ecsd2mFOZiYEs05fTipvzL7OmPA1zNh-qjxJxqU,14416
105
107
  solace_agent_mesh/common/utils/embeds/__init__.py,sha256=UQsXrRiFmeKSy_gW_tIHGEI3Av8HprvHM7tzhqmOaiA,733
106
108
  solace_agent_mesh/common/utils/embeds/constants.py,sha256=X5bc93SK2Mr9xVEzVfcIA-SkU_zyTfh8zBRq6Rm3gD0,1447
@@ -116,19 +118,20 @@ solace_agent_mesh/core_a2a/service.py,sha256=iVSjhoKWTE3fOEE37SMtDPdDf4i6eh9_6vs
116
118
  solace_agent_mesh/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
119
  solace_agent_mesh/gateway/gateway_llm.txt,sha256=67m_yuRW0VJ4ddldGWwXLx0aiVqK5lZH3RamNX1fATk,14063
118
120
  solace_agent_mesh/gateway/base/__init__.py,sha256=lOpIGp8W2rFNpLxfpk3VKLA-dBqxwtMxMVlhbaCisJY,72
119
- solace_agent_mesh/gateway/base/app.py,sha256=LWIdT9by6Dg3sWCUgmfF36TwMJ04tyYfZHQu-is-5vo,11144
121
+ solace_agent_mesh/gateway/base/app.py,sha256=FtqW5tbHuU51UfHCUR1EwtCraArJ40O9YW9ESJbK1_s,9112
120
122
  solace_agent_mesh/gateway/base/base_llm.txt,sha256=51U3VfwzCfptYxcFIjmNE8Wt07cgFfH3VlEp2kaXBZU,11291
121
123
  solace_agent_mesh/gateway/base/component.py,sha256=chHk4h13XLhOOGjEBIu3b7Ksr_ALcoWw7TUBOj5kofE,55145
122
124
  solace_agent_mesh/gateway/base/task_context.py,sha256=sFRRHyvBij-xms1f_VFc8om8-xIpRZawIctWtdmi6QY,2446
123
125
  solace_agent_mesh/gateway/http_sse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
126
  solace_agent_mesh/gateway/http_sse/alembic.ini,sha256=-LacLcmHWd11GCBfh5pfBcabzOuu712yph3LBENKtoo,4864
125
- solace_agent_mesh/gateway/http_sse/app.py,sha256=5sYWVFgxA1tbjyKRSHw0E84mQ_TemDAWU2g7_IkWCmw,7696
126
- solace_agent_mesh/gateway/http_sse/component.py,sha256=34DundfCU1rtbSR72f0Ki6qGVqR8OvOmj26_d2_ZG14,72671
127
+ solace_agent_mesh/gateway/http_sse/app.py,sha256=d4t1Lt1Gbei0gudubTw9LvWutmXohliX_CUCho6sgVA,6761
128
+ solace_agent_mesh/gateway/http_sse/component.py,sha256=S4sHIZ0iVL4ShwQdflQKvJBlOg78dR6GPsFlDJgJJuo,73864
127
129
  solace_agent_mesh/gateway/http_sse/dependencies.py,sha256=bVPIPKoy98sZcthVLHRmkGwcem5ZVeuGrBuLuaHPnkc,17797
128
130
  solace_agent_mesh/gateway/http_sse/http_sse_llm.txt,sha256=Jx6IJWYFl48LmW-xDuCtjpubs0iPY54bt6bLWF_SNUw,14271
129
131
  solace_agent_mesh/gateway/http_sse/main.py,sha256=Tx1rEcpzuYCh9_a1_ppJSiLQSXXqgFNTGB-MixqZ53w,26972
130
132
  solace_agent_mesh/gateway/http_sse/session_manager.py,sha256=4AReeS6-p-2MqE0AOlBrHSoU-ADC4W7dJ28aVtZbDp0,8538
131
- solace_agent_mesh/gateway/http_sse/sse_manager.py,sha256=c51QIm80Q1G8aOzimk06ZaOH9wv2bl_WREP1GqevLZk,13507
133
+ solace_agent_mesh/gateway/http_sse/sse_event_buffer.py,sha256=GsC-kh2D5Fd3A3SZUU0zeGk74FB8617u-YsYMSNLPCI,3210
134
+ solace_agent_mesh/gateway/http_sse/sse_manager.py,sha256=qCfh9aYwR-nX7Ps8DnumKTmh5bO-QwS4E7AlWjS113o,14638
132
135
  solace_agent_mesh/gateway/http_sse/alembic/env.py,sha256=ZoZB47NxagV8iQ6BaiIQVXwD_qc9JW10NKO3UhC_bj4,2458
133
136
  solace_agent_mesh/gateway/http_sse/alembic/script.py.mako,sha256=84_5EHZF90Ak58GV4R5YUwxvvzsaI6N9LxIHC8X7N1w,703
134
137
  solace_agent_mesh/gateway/http_sse/alembic/versions/b1c2d3e4f5g6_add_database_indexes.py,sha256=HZbxw5PrpneWIwMFteu-LGsoef8GD1F43vLiFfvBTaw,2408
@@ -175,13 +178,13 @@ solace_agent_mesh/gateway/http_sse/shared/__init__.py,sha256=qlCIQimjoNwbRGbhjNZ
175
178
  solace_agent_mesh/gateway/http_sse/shared/auth_utils.py,sha256=F0kpTg5HYadRAEVNSNvnEFpdzkwVqbFMFVr27kywz_k,852
176
179
  solace_agent_mesh/gateway/http_sse/shared/enums.py,sha256=gcU_hApRkWcBy0JykqGXSESGyglLXN3FzkimITmwnnE,802
177
180
  solace_agent_mesh/gateway/http_sse/shared/types.py,sha256=zAojlvovTMvaB4o-U20cY3q2DxZs_xaCtcoYUhCLczg,1075
178
- solace_agent_mesh/cli/__init__.py,sha256=Vi6om3KImlKsS_Wg5CjUgYffoi2zx7T-SRPnnGL0G7M,22
181
+ solace_agent_mesh/cli/__init__.py,sha256=8UhoYEXHs1Oai7BW_ExBmuwWnRI-yMG_u1fQAXMizHQ,22
179
182
  solace_agent_mesh/cli/main.py,sha256=yFbF4ijz7P6nxj26d-mTC8BnK6NKVnfqPh3y4pDBZqo,831
180
183
  solace_agent_mesh/cli/utils.py,sha256=7zntmVuvWbaWEhViSF2uw484-79a5I1XTUt-0eGQWY4,8036
181
184
  solace_agent_mesh/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
185
  solace_agent_mesh/cli/commands/docs_cmd.py,sha256=vNXyKADt8RrKnP7wsLaj7fBaz6SUgXMMItygHrohE_Y,1953
183
186
  solace_agent_mesh/cli/commands/eval_cmd.py,sha256=25EJhddhZbBYcJDTQysX8ZepyWYRf5MmBeiMced7JCg,2748
184
- solace_agent_mesh/cli/commands/run_cmd.py,sha256=cQcjMpdg_B8Yke03wAsaZwVF9Anf9J-V22AlK782SBg,7656
187
+ solace_agent_mesh/cli/commands/run_cmd.py,sha256=vgR6UDaZ_f7H95cr5_8XCh0ifGp2z0E9CZaaJ2xR5lM,7437
185
188
  solace_agent_mesh/cli/commands/add_cmd/__init__.py,sha256=IGTXUx_AcoinYlzlZtQsjiCYbe76ZiLqxAcGc6-uoDE,280
186
189
  solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt,sha256=x-UE5buoIEE_oUJ3opOzW8U33S3XUKCRNKWxNXNVk-c,10212
187
190
  solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py,sha256=qO-gsoIfO5lK8L0mfThtOTp3sV7dGDd7pTcZV78L00s,29631
@@ -242,11 +245,11 @@ solace_agent_mesh/templates/plugin_tools_template.py,sha256=GUVw556CtBYE6sHbpXnF
242
245
  solace_agent_mesh/templates/shared_config.yaml,sha256=_-ytR25HSAfwjN6drkdUQgGeV_om6RSeM4BUCMxQ3vQ,3310
243
246
  solace_agent_mesh/templates/templates_llm.txt,sha256=T3h8CcIowTbyBedlfRk7FZww8_xGmnY5fEqGhhdI3JU,9234
244
247
  solace_agent_mesh/templates/webui.yaml,sha256=Xb6nswsFpMtCnpUDY9sGuO4Q3IhR8x-lDDRtHaySUVo,1782
245
- solace_agent_mesh/assets/docs/404.html,sha256=VLXWmcEXEhcECHYk3quMXQ30UCM6W0gLnV0An6aQUtU,11749
246
- solace_agent_mesh/assets/docs/lunr-index-1757873594308.json,sha256=8Bf4GUjOTANMWTXTq1MvEMbilcPNFHZ3JDY-v4NaWxs,1097571
247
- solace_agent_mesh/assets/docs/lunr-index.json,sha256=8Bf4GUjOTANMWTXTq1MvEMbilcPNFHZ3JDY-v4NaWxs,1097571
248
- solace_agent_mesh/assets/docs/search-doc-1757873594308.json,sha256=skEhG2qAQi8vVt7wJJksC0H4MYGcIVDiEyUa2qDVqiQ,386979
249
- solace_agent_mesh/assets/docs/search-doc.json,sha256=skEhG2qAQi8vVt7wJJksC0H4MYGcIVDiEyUa2qDVqiQ,386979
248
+ solace_agent_mesh/assets/docs/404.html,sha256=savCWgTCeZYBmVTU0-9NDpdYjVMe0dtz2t2S8GiVP2s,11749
249
+ solace_agent_mesh/assets/docs/lunr-index-1757991496554.json,sha256=6-VcR4FTLqYVmGkufSQmSusdSQsdZvS4Q6wMgOcxN2k,1134254
250
+ solace_agent_mesh/assets/docs/lunr-index.json,sha256=6-VcR4FTLqYVmGkufSQmSusdSQsdZvS4Q6wMgOcxN2k,1134254
251
+ solace_agent_mesh/assets/docs/search-doc-1757991496554.json,sha256=2ISpTucLD-yaQyNqOOxpT3RCfhMuc-tRV1OAmj3PtKI,400566
252
+ solace_agent_mesh/assets/docs/search-doc.json,sha256=2ISpTucLD-yaQyNqOOxpT3RCfhMuc-tRV1OAmj3PtKI,400566
250
253
  solace_agent_mesh/assets/docs/sitemap.xml,sha256=MeU4E6b7O7RjK1CdC9W4zjle-yridFsVnyDf2HtnzyY,6830
251
254
  solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css,sha256=gQj16ydMLPiq6y-t8Ovto65hsvPbQX6coyIFOja-2eY,83293
252
255
  solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png,sha256=e6MbZpxlY1xJ8U01zQogm8vWgokQqDfhsyPyNxtuS00,447393
@@ -277,7 +280,7 @@ solace_agent_mesh/assets/docs/assets/js/375.708d48db.js,sha256=tnoRKYgl89ieY_0s8
277
280
  solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js,sha256=LuFdgiur49yMqtwnhUN7ECJ2lPvBaWdDam3OANM5WcM,196
278
281
  solace_agent_mesh/assets/docs/assets/js/3d406171.5560fdf9.js,sha256=YxwcvvCb721_LDB9PpbCH7Ux--7PQ4XxD2wy8oG-7bY,45169
279
282
  solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js,sha256=y3OgeXf-tuJO5M6gJ70aW58HdFE7vZIPX7V4mduXL9c,197
280
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.3f34bf76.js,sha256=nU-fT8o6eGDZz3Iz8msJRv58D0owaKsHKORzcWRuApU,35013
283
+ solace_agent_mesh/assets/docs/assets/js/42b3f8d8.508ae8db.js,sha256=ty9OjkxJut29_RmS1bUOCCV8Lb8fXIhE4a0wBY3pjwk,35218
281
284
  solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js,sha256=JJdBrbL2-8tn2jfAGsO1ezjcM37BAIZnZsNYgc4UoZs,195
282
285
  solace_agent_mesh/assets/docs/assets/js/442a8107.b5c2532a.js,sha256=LivKRCvxmyUQnUGWxy6zaR-knomWdZ38WkVl6mmUFkk,18560
283
286
  solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js,sha256=oUPDT1LqnbeRts2CudqNueI-OQHML5gg9dWEvP6PiE4,25886
@@ -322,7 +325,7 @@ solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js,sha256=Nm7cJgq11XXaYA3W
322
325
  solace_agent_mesh/assets/docs/assets/js/945fb41e.abf2be91.js,sha256=agrUerMLSTW1lY0Jx5FAYQvlzqPeu-UWQ-MX-nly8QE,15060
323
326
  solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js,sha256=Ry0lLDd8HQzYAHmCKcXJ4iQ-9utISMjqcWk_iURtf1A,20576
324
327
  solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js,sha256=-Xm7Yt1AJvEcfoYlQ04O5Douk4bsO4mgo_UJN8TVIUY,100459
325
- solace_agent_mesh/assets/docs/assets/js/9a09e75d.5a319fd4.js,sha256=yoKe1Oioh4nYpaN-3rucbfzmqscT5J23tHwQmLt2x2Y,15453
328
+ solace_agent_mesh/assets/docs/assets/js/9a09e75d.92de8cf5.js,sha256=tZRusy1HbEgsV-VhErB4zpnz0ncfP0lTYhxyLZfA-xc,33827
326
329
  solace_agent_mesh/assets/docs/assets/js/9eff14a2.d62aad71.js,sha256=iR2JsabRjQemymeBxgOq8WQFkWjTQQ7mHjfgN5a2e14,10569
327
330
  solace_agent_mesh/assets/docs/assets/js/a3a92b25.1d029b81.js,sha256=h54GrYlzw7X-lkS8Oc_TnNsFwJ6jkMJkG45xGj9JdSU,5797
328
331
  solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js,sha256=v9wa2Q1Mt7cayLyMjyDTUT8J_kILQ2idmxDhgyBHlpE,756
@@ -343,47 +346,47 @@ solace_agent_mesh/assets/docs/assets/js/cee5d587.f1e1ca86.js,sha256=WHSNG7Q7fO5_
343
346
  solace_agent_mesh/assets/docs/assets/js/f284c35a.cad4dbf2.js,sha256=S02-qr5thbket1SGTTNz9iLgAPAIcuUsa62BCZovze0,21402
344
347
  solace_agent_mesh/assets/docs/assets/js/f897a61a.bc634a3e.js,sha256=6JytHKyBrOGJH33efELGM9KVq6x0tvSbqvvkg53gV2w,17047
345
348
  solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js,sha256=vmq7isB22h2J_2cVIt1h6D2OhwU6wTBEnk1-CNZv9Wk,7314
346
- solace_agent_mesh/assets/docs/assets/js/main.e82b32e6.js,sha256=_mvc8hCqbQlK77dC92CoEhR4QTGXEA5WcopmasQ_ZEg,482726
347
- solace_agent_mesh/assets/docs/assets/js/main.e82b32e6.js.LICENSE.txt,sha256=3Jia5o7yaxOtbxuy9khs-thK96m55yCiPaUA-IkWh0A,2069
348
- solace_agent_mesh/assets/docs/assets/js/runtime~main.aad1f874.js,sha256=qDBLLjxBN90UpRwGYRWd6VVZiD33GJ1aLUWzIaRJJ9Y,6233
349
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html,sha256=PFcX42l92yCc1j9jAyMayAq6u4AiVhkEWEAQPRadROY,27163
350
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html,sha256=SxwbtxfKNt82yHKimM8wDb4bfeyePA6rq8pWsXxYMGU,69622
351
- solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html,sha256=HzZlOrEl4I2bAhZkWFZhO_OovnnxzlkK1muZyAMsiGY,84925
352
- solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html,sha256=3uMh-nag_aU74pKPYinI9bNEv_kFxsZZi0Z2pJYuV8I,87760
353
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html,sha256=jPGkvETyMAsV50KL_EyIh41BxNDlYxzveR1573rKY2M,39841
354
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html,sha256=lM3J-jFm40o3yy0h6N3FpbjvzuSYH3TTemTC0QG1YsI,32769
355
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html,sha256=VOHrxrb_03c6aGus2D4bx-HqR7eso0_HMiJX7XmnQEc,50528
356
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html,sha256=nJ1D0vmqX9JmT5X08cH0u9d9bLRuOfWckoCPYxbTeHg,30147
357
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html,sha256=x2SdgA0wQpQTcCMxHiH58AdEz-QoStTsAq2mPN7Ck6M,23853
358
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html,sha256=bQlCXi21kumZFosOVd2MpDQAMSMAJSMLl1MgkzKlqSk,40029
359
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html,sha256=-S-42FkXt9ZRuvwmrtUsWIz3K-fjaW3jue4N5sZG3ZE,45631
360
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html,sha256=rFCgaKKaAwDL8DbtvvelrMy8alZaXrCFocaD-WtNZiM,42547
361
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html,sha256=pSqaiG_JY8Fr1lPrSWAaNlNNx6qmWhEildjEdxW5et8,26091
362
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html,sha256=4YleY88jhNirMe-zM8vb1cW3SFjA42_pt07krqrCAkY,21734
363
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html,sha256=zRCWxlpqIHc8gCpIOMn8XHnQz4Wo0FRbIIyfQcoZiGE,56647
364
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html,sha256=U_MT1dydYW0BDpK3yZylgXWhHh4MnWdVmyTYuTfTx5k,32597
365
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html,sha256=MnvJ9IZF0_lpVpqvWenMR1WZ9O3BaZSJlfT_bXkf9X4,30497
366
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html,sha256=XYFwllwi_chW6GOB6xsp5CHGoxSPCKT94PqoX7U_8I4,42680
367
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html,sha256=t9-9NtSftLXXIPXwkCXR4EneMUG1iI6HP5bH4KxYS1c,75786
368
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html,sha256=PU8c9iL0J5fEaKH9Ezs35KoOauouGkgBFlWJ_uwl09k,383395
369
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html,sha256=EapTsGzMNIPEBLZMdLdwLIlEN_2iBwopEkJXvOPKeKc,69278
370
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html,sha256=EoBE-Bs_Gp4lU3ARUYvxpMisMC3vQRTTcTUz0Dnt5lQ,65048
371
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html,sha256=H1b0t95OJ-V4UBTrU_Kcz6BEmPUS2WvHQsJWSKGifk0,87666
372
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html,sha256=D2ogV1zRROiTPdHgT1Qg9eI93Qpg95h1NQUh53A3u48,80471
373
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html,sha256=0q_R5_7mGlo-mpFutmQbJsB1vkM5vJr9yMTGoCc3nVI,46767
374
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html,sha256=fqZ5NBcH4etyP19LOVu1fM2PtC3E0gkhnczL7OE2XQQ,49986
375
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html,sha256=nbgmJ6FKraLHFFUL5fwHTeiPvLC2qMZLl0k6UExP9h8,69371
376
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html,sha256=q1QvMn3pOP5XPOC8mMSILvM9xlyAdkd_9i3cnDh0ivg,44846
377
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html,sha256=OM1NVsO-4tNae8kDfk1Rx1PjHqoX7KIEhXUHqCSjQn0,34816
378
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html,sha256=Hh2nQ5Mh8gjWsSh0R__PDo1-mRFE-eun-uHEwuRqvcU,58253
379
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html,sha256=yfAxy-Viw_zK2dk--_6xrq59swI_aeAW2JEn0gfK6CE,37802
380
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html,sha256=arXvzDr3W3jAjGqKWCzWh_7IPR1Pz58ptzHQPunn6jU,50700
381
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html,sha256=aBtdy1-M-nkSkCO27F3by0pVciEtYPMx_gC49BUl1Lk,162910
382
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html,sha256=zwDA99DSsc8WClDSYGJUZ6PjtEG95FO6Z4bre4yP-4Y,402951
383
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-python-tools/index.html,sha256=p1EDHdyEC3dNhbcjMUmUdTVaBkLTrX-OjJUoCSsf04E,84524
384
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html,sha256=M1RKmuJnB3RlRGlmy2zR6sYajPtPsc6LUTvtIfl_t7E,59738
385
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html,sha256=g6lASmrqiO6K0H-F3632QjnkzOecw0yzDX85Ts1vKa8,25835
386
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html,sha256=gJwC6syTsK3nRN9QJVyKafpjt1iPzu-3RwxhhAWsgZE,29857
349
+ solace_agent_mesh/assets/docs/assets/js/main.1de3da6a.js,sha256=qjZEL5-x4EEqzSw6fZ8FKj9fB9qmkRT3RQnkUUvCxLY,482726
350
+ solace_agent_mesh/assets/docs/assets/js/main.1de3da6a.js.LICENSE.txt,sha256=3Jia5o7yaxOtbxuy9khs-thK96m55yCiPaUA-IkWh0A,2069
351
+ solace_agent_mesh/assets/docs/assets/js/runtime~main.3188e049.js,sha256=RWaGi9-e3pI50754idyhrJlrNllzYRvHIhhbzOxtteI,6233
352
+ solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html,sha256=dk4Chf1QJKi9bkkgYp4yP65HrDsFBBRKKrYckN6yQd8,27163
353
+ solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html,sha256=QGddiCHiW8X0axUDe61cldywvGlK-4sY30lMe8pj3jY,69622
354
+ solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html,sha256=4mWl2xiKLAMlGzN6dJx8YTFcBI_zWeNfOv_9lDqs6H0,84925
355
+ solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html,sha256=iji4sYEdITHHFlanN5qkUeUKhJ-bquborB3OLzE-9XU,87760
356
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html,sha256=QfqHyDw6y21oQIsVYleEbHZfuP_z-p9M9ytnavOidQE,39841
357
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html,sha256=fVRBKAXaFAYoqv0NKwurARifuW502Q-1DFTbBRJI6x4,32769
358
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html,sha256=x6Eof1RwhoBTKEg9OwJQZRUiC2XUK2WL2W8sb-FyBMw,50528
359
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html,sha256=-BOmRgeW7Xhr-uRHKxmB6ZyCgDDUD45rX0FHy9gt7dI,30147
360
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html,sha256=W0PSdZV5UbqZnAEEbMxM7ZR3BZ6wyPE1ZY75l7KGCvM,23853
361
+ solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html,sha256=cL4QQVYaBKvOFFjxtEKohvj4QzPs1d-xoJ0zlGjVfCk,40029
362
+ solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html,sha256=1yRaw9PAbehxPgFkVNsadRV410QAwN7UUhVN0u3P_PI,45631
363
+ solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html,sha256=7hat1_6lf6P9gJeigDqT0AnVs0-tWBMWPPm48k8USWE,42547
364
+ solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html,sha256=suBW8DIpkj2o0zFxpoiwVVfPXi2Vt6ByXuJVRWs0Yk4,26091
365
+ solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html,sha256=PlifawUYCYR1LVg-vbI4-PVZ0o-Nf4ynAvO0ynsOr1w,21734
366
+ solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html,sha256=8E1OGZnw6BwEcELydY7JGvQKfu2UGfg5zJILlt7LIgc,56647
367
+ solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html,sha256=BaP0MYRXWdr_zpwty-8lMAqQyHhsGbhI9tCeex0iLX4,32597
368
+ solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html,sha256=KQzPhq4qbX9zcRkQ-qnwBRb7TbrToBCnxy2V8N2R1CI,30497
369
+ solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html,sha256=y6MBfXLafUiep_l6QkdtYMgVe_jxSvVDcrxGuUNp0bw,42680
370
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html,sha256=ghoNsGR5DvsYDCdyGNTAzVbe-6AlUto1OR1CLqnecKI,75786
371
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html,sha256=BxqA2Nu3XFsKT9WaLyZDl2S0sfQPRlbzvDcGA0FZi9Y,383395
372
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html,sha256=_ixJ6PofGYSgzpZ6WNptLBnnhMGPyYVK6P6IPPOJc1k,69278
373
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html,sha256=VBkkAiXMmFB5PA73cL_QZbkAurQ_43sNGOwHs1t9fAg,65048
374
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html,sha256=GMEX76KXa7AUkMOcbj6NJRZOQ6_O4fbruLtMbvBNADg,87666
375
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html,sha256=atPmSGZ3lCapedI7m21UE0E5jmEDb9To04ZSPMtjSI4,80471
376
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html,sha256=y6L1CS_nQu-T4EjxmlxoXcVG4-I2BBOqEkRUoO_nK8w,46767
377
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html,sha256=xiIH5LewjAmtn59DKuRdbDrtpSFRBHCgWi3ukIfJyQ4,49986
378
+ solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html,sha256=nBX0trXDahkSF0Rt6jrdOUeG4mS6DonJ6wchV4fiykY,69371
379
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html,sha256=J_SOrqcacCyVRTuDIRqvBb7SWqJ9CFaRigS7dN5a1Rs,44846
380
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html,sha256=Pg9Xog3nFZY4KpPhXEHWiUf8NDiwxJrUMId5GNzWHWA,34816
381
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html,sha256=cue8qE9zO1Izk2uu7M_cnrFxkePvQOmkfnNPDI9iVT4,58253
382
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html,sha256=VErOIlTnVaPKDiNMKGcQ6NYPr6TKY_9jfbHjmCk0A5Q,37802
383
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html,sha256=-dxa8T4U56i5Swu2xqz7g2qdo288yDyx9ms3kIIBfIg,50700
384
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html,sha256=5XKdU0A81qquIQPoHS9tEvnEAe6TA44q5SedeeARx8o,163552
385
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html,sha256=b0WjN8pSHO_cwUJvo92sfVGV3TRgsXqUbMj0Eh8WE-s,402951
386
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-python-tools/index.html,sha256=lUtQZtieO8fmNQW4uH2N-hkz30oCD-RQXaKNe3RKdNk,175658
387
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html,sha256=EcWltjo9ytOT3ItIs560iE4kYkwSXN3XL6lu0n5PqIU,59738
388
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html,sha256=CedIEs04p-EswiXBOiNSOlA_bXFpioLgyBbmTDb_amg,25835
389
+ solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html,sha256=pPaxaA4Yo3mQvd-nPGB_LKPF37pqMTStDGyo4q4_NtM,29857
387
390
  solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png,sha256=e6MbZpxlY1xJ8U01zQogm8vWgokQqDfhsyPyNxtuS00,447393
388
391
  solace_agent_mesh/assets/docs/img/logo.png,sha256=TdXZ2wnkSkaFrGO-5fy2WcmjGXaGzwE29dM83raxoTg,45439
389
392
  solace_agent_mesh/assets/docs/img/sac-flows.png,sha256=868GgNJGPxn2G6c1Md_0umhg3xuAo7t6HEx8hOKbUJY,21098
@@ -398,7 +401,7 @@ solace_agent_mesh/config_portal/backend/server.py,sha256=gx8KIAopkeAmn4WfseP5z79
398
401
  solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
402
  solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py,sha256=Eqq6lO_glHs-0LghOOHXewg6RecwumhI3zjBKUFGMAQ,787
400
403
  solace_agent_mesh/config_portal/backend/plugin_catalog/models.py,sha256=Fu6EDX3PD1RTX84ucIs2UbtRk0Y0H3Lm3248MlP0jpY,1199
401
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py,sha256=OhETId1ixVJBIL4lYwu4lRELic6BLgX6SJTkWFXKzPw,6686
404
+ solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py,sha256=uIFPKe0rhrPxVITius9qA0CPLqVl9WhYgqy88SPUkNo,6869
402
405
  solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py,sha256=j7yJUEKjgsVs7TvSf8Uf_22bKotlYhocIYhfJhTpQPI,21238
403
406
  solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png,sha256=ugNi5vBxTdFZMW2uWNZYcutyk4z8yw9e5KEL5XDcodU,5894
404
407
  solace_agent_mesh/config_portal/frontend/static/client/favicon.ico,sha256=9z1ZdOqroxsg2-FzV79kTJ69hVqWVkrDlIv2RgmIhR8,15086
@@ -410,16 +413,16 @@ solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js,
410
413
  solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-89db7c30.js,sha256=0TNl4hKVU240O_8gPn1BaH0ZEDUJyiEojjOnrgdouCM,781
411
414
  solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js,sha256=KoDaD7JSrkUDgUbDa0JqaB7mXNCc2fR-T5kKAcH5nho,1799
412
415
  solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css,sha256=HaETPzdva-2CpjK-MmIBI6lipZMiGHmAqLRJiD8s2QE,33607
413
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html,sha256=3ajyFcWxvD3xWbS3ws5DLqgq1dLSauPV6VBy98E_ySw,570
414
- solace_agent_mesh/client/webui/frontend/static/index.html,sha256=4vgV8Y5tPdqqybCLJyZqj18jrgoc2OdfMuyOoP7pQ1g,635
415
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-CAX9u8a7.js,sha256=rfRQ7ntt_kKVD80r_Lov_PURuasCSLeBv5EX8pNrSvM,528
416
- solace_agent_mesh/client/webui/frontend/static/assets/client-DXU9SPI5.js,sha256=dMeFMeQYg87OEejBqjM6xDhqQESFflCxyWTnXmbFr4I,174527
416
+ solace_agent_mesh/client/webui/frontend/static/auth-callback.html,sha256=v5b92bXlZwnieBAb3-lYBAPc7MlRk3z7jjeXHHkOKUA,570
417
+ solace_agent_mesh/client/webui/frontend/static/index.html,sha256=JzdneoREjxk78S6uovfyp5KDWOkz3E6USRRRVjV-eVo,635
418
+ solace_agent_mesh/client/webui/frontend/static/assets/authCallback-j1LW-wlq.js,sha256=VIDe3uws3j2A7_PHUKHwGizPYBmzNqdjumjyTuyBClc,528
419
+ solace_agent_mesh/client/webui/frontend/static/assets/client-B9p_nFNA.js,sha256=6lG8UbVPMnZxsZIprKnq4yRHGZ5Cx8tsyV6dsRox83A,174527
417
420
  solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico,sha256=9z1ZdOqroxsg2-FzV79kTJ69hVqWVkrDlIv2RgmIhR8,15086
418
- solace_agent_mesh/client/webui/frontend/static/assets/main-C03yrETa.css,sha256=8i4G_OLqxxoF2D7-4uCwQVUEMnkH7QcNTmHLeBIeUNo,119785
419
- solace_agent_mesh/client/webui/frontend/static/assets/main-DjoMeldu.js,sha256=6g8rNuOSNnVGvdIpQKo5CNLCYkpHTz0TI7IenLRwZVE,420893
420
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-B0BEKoAR.js,sha256=e8CQistS6OBV4DeTlX098z7pxx7tBpuCTJrRyb7K0s4,340510
421
- solace_agent_mesh-1.3.3.dist-info/METADATA,sha256=jKz6200rUVxz8d5SmAU5B9oJ4FOitSEPliFusJkJQ5g,24785
422
- solace_agent_mesh-1.3.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
423
- solace_agent_mesh-1.3.3.dist-info/entry_points.txt,sha256=5pLVH8d8bd4sxUwBh7VTni8gTTSzTqGfY14zgdQZm1I,106
424
- solace_agent_mesh-1.3.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
425
- solace_agent_mesh-1.3.3.dist-info/RECORD,,
421
+ solace_agent_mesh/client/webui/frontend/static/assets/main-B9s_V9tJ.css,sha256=qDomENelAJXniRwk21juPd0j2PYfIpPtw6P5KPEE7Hk,119720
422
+ solace_agent_mesh/client/webui/frontend/static/assets/main-Dq4AJNvn.js,sha256=yUv4NZH_gV10i0C5deTXxPslV9_JAdZ31cYBwWTS9X4,421093
423
+ solace_agent_mesh/client/webui/frontend/static/assets/vendor-CS5YMf8a.js,sha256=pySecfbg42jjmh23Z4dRsbST36DQM8SCo4X7_o7nhIs,340916
424
+ solace_agent_mesh-1.4.0.dist-info/METADATA,sha256=aKrGAw4gtrNmAccK8UYW4ol2tIAN6XHD_P9QlCVhafg,24785
425
+ solace_agent_mesh-1.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
426
+ solace_agent_mesh-1.4.0.dist-info/entry_points.txt,sha256=5pLVH8d8bd4sxUwBh7VTni8gTTSzTqGfY14zgdQZm1I,106
427
+ solace_agent_mesh-1.4.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
428
+ solace_agent_mesh-1.4.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[3974],{6145:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>g,frontMatter:()=>l,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"documentation/user-guide/create-agents","title":"Create Agents","description":"Introduction","source":"@site/docs/documentation/user-guide/create-agents.md","sourceDirName":"documentation/user-guide","slug":"/documentation/user-guide/create-agents","permalink":"/solace-agent-mesh/docs/documentation/user-guide/create-agents","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/user-guide/create-agents.md","tags":[],"version":"current","sidebarPosition":30,"frontMatter":{"title":"Create Agents","sidebar_position":30},"sidebar":"docSidebar","previous":{"title":"Structure","permalink":"/solace-agent-mesh/docs/documentation/user-guide/structure"},"next":{"title":"Creating Python Tools","permalink":"/solace-agent-mesh/docs/documentation/user-guide/creating-python-tools"}}');var i=t(4848),s=t(8453);const l={title:"Create Agents",sidebar_position:30},r="Creating Agents",a={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Quick Start: Creating Your First Agent",id:"quick-start-creating-your-first-agent",level:2},{value:"CLI Options",id:"cli-options",level:3},{value:"Core Concepts",id:"core-concepts",level:2},{value:"Tools",id:"tools",level:3},{value:"Configuration File",id:"configuration-file",level:3},{value:"Tool Configuration",id:"tool-configuration",level:3},{value:"ToolContext",id:"toolcontext",level:3},{value:"Lifecycle Functions",id:"lifecycle-functions",level:3},{value:"Step-by-Step Guide",id:"step-by-step-guide",level:2},{value:"Step 1: Initialize your Agent",id:"step-1-initialize-your-agent",level:3},{value:"Step 2: The Tool Function",id:"step-2-the-tool-function",level:3},{value:"Step 3: The Agent Configuration",id:"step-3-the-agent-configuration",level:3},{value:"Step 4: The Lifecycle Function",id:"step-4-the-lifecycle-function",level:3},{value:"Advanced Concepts",id:"advanced-concepts",level:2},{value:"Working with Artifacts",id:"working-with-artifacts",level:3},{value:"Using Multiple Tool Configurations",id:"using-multiple-tool-configurations",level:3},{value:"Running Your Agent",id:"running-your-agent",level:2},{value:"Architecture Overview",id:"architecture-overview",level:2},{value:"Best Practices",id:"best-practices",level:2},{value:"Tool Design",id:"tool-design",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Testing",id:"testing",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"creating-agents",children:"Creating Agents"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["For a more comprehensive tutorial example, see the ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/tutorials/custom-agent",children:"Build Your Own Agent"})," guide.\nThis page provides an in-depth theoretical overview of creating agents in Solace Agent Mesh."]})}),"\n",(0,i.jsxs)(n.p,{children:["Solace Agent Mesh is a powerful platform that enables you to create intelligent agents that can communicate with each other and perform complex tasks. At its core, Solace Agent Mesh uses a ",(0,i.jsx)(n.strong,{children:"tool-based architecture"})," where LLM-powered agents are equipped with specific capabilities (tools) that they can use to accomplish user requests."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Before continuing with this tutorial, make sure you are familiar with the basic ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/concepts/agents",children:"agent concept"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"This tutorial guides you through creating your first Solace Agent Mesh agent from scratch. You will learn how to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Define tools as Python functions"}),"\n",(0,i.jsx)(n.li,{children:"Configure an agent using YAML"}),"\n",(0,i.jsx)(n.li,{children:"Set up agent lifecycle functions"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:'By the end of this tutorial, you should have a working "Hello World" agent that demonstrates the fundamental concepts of Solace Agent Mesh agent development.'}),"\n",(0,i.jsx)(n.h2,{id:"quick-start-creating-your-first-agent",children:"Quick Start: Creating Your First Agent"}),"\n",(0,i.jsxs)(n.p,{children:["You can create an agent directly using the Solace Agent Mesh CLI ",(0,i.jsx)(n.code,{children:"sam add agent"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sam add agent my-first-agent\n"})}),"\n",(0,i.jsx)(n.p,{children:"This command:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Launches an interactive setup (or use ",(0,i.jsx)(n.code,{children:"--gui"})," for browser-based configuration)"]}),"\n",(0,i.jsx)(n.li,{children:"Generates the necessary files and configuration"}),"\n",(0,i.jsx)(n.li,{children:"Sets up the basic agent structure"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Note that create agent as plugin is preferred over create agent directly."}),"\n",(0,i.jsx)(n.h3,{id:"cli-options",children:"CLI Options"}),"\n",(0,i.jsx)(n.p,{children:"You can customize the agent creation with provided CLI options."}),"\n",(0,i.jsx)(n.p,{children:"For a complete list of options, run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sam add agent --help\n"})}),"\n",(0,i.jsx)(n.h2,{id:"core-concepts",children:"Core Concepts"}),"\n",(0,i.jsx)(n.p,{children:"Before diving into the implementation, it is important to understand the key concepts that make Solace Agent Mesh agents work:"}),"\n",(0,i.jsx)(n.h3,{id:"tools",children:"Tools"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Tools are the fundamental building blocks of Solace Agent Mesh agents."})," Each tool is implemented as a Python function that performs a specific task. Tools can:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Process text and data"}),"\n",(0,i.jsx)(n.li,{children:"Interact with external APIs"}),"\n",(0,i.jsx)(n.li,{children:"Create and manipulate files"}),"\n",(0,i.jsx)(n.li,{children:"Communicate with other agents"}),"\n",(0,i.jsx)(n.li,{children:"Access databases and services"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The LLM (Large Language Model) orchestrating your agent decides which tools to use based on the user's request and the tool descriptions you provide."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Solace Agent Mesh provides a set of ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/",children:"built-in tools"})," plus support for ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/tutorials/mcp-integration",children:"model context protocol (MCP)"})," servers, which can be configured in the tools list of your agent configuration."]})}),"\n",(0,i.jsx)(n.h3,{id:"configuration-file",children:"Configuration File"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"config.yaml"})," (for plugin template) or ",(0,i.jsx)(n.code,{children:"agent-name.yaml"})," (for agent instances) file is the blueprint of your agent. It defines:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Agent identity"}),": Name, description, and capabilities"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Model configuration"}),": Which LLM to use"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Tools list"}),": Defines which tools the agent can access and how they're configured"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Lifecycle functions"}),": Setup and cleanup procedures"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Framework services"}),": Session management, artifact storage, and so on."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/concepts/agents#agent-card",children:"Agent card"})}),": Metadata describing the agent capabilities, skills and its visibility in the system"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"tool-configuration",children:"Tool Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["Within the ",(0,i.jsx)(n.code,{children:"tools"})," list in your YAML config, each tool can have its own ",(0,i.jsx)(n.code,{children:"tool_config"})," section. This allows you to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Configure the same tool function for different purposes"}),"\n",(0,i.jsx)(n.li,{children:"Pass specific parameters to tool instances"}),"\n",(0,i.jsx)(n.li,{children:"Customize tool behavior per agent"}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsxs)(n.p,{children:['For tools of type "python", you can also use the ',(0,i.jsx)(n.code,{children:"tool_name"})," and ",(0,i.jsx)(n.code,{children:"tool_description"})," to overwrite the function name and description in the tool docstring."]}),(0,i.jsx)(n.p,{children:"This is useful when using a generic tool function for multiple purposes, allowing you to provide a more descriptive name and description for each instance."})]}),"\n",(0,i.jsx)(n.h3,{id:"toolcontext",children:"ToolContext"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"ToolContext"})," object (passed as one of the arguments to your tool function) provides your tools with access to Solace Agent Mesh core services:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Logging"}),": Structured logging for debugging and monitoring"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Artifact Service"}),": File storage and retrieval"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Session Information"}),": Current user and session context"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Agent State"}),": Shared data between tool calls"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"lifecycle-functions",children:"Lifecycle Functions"}),"\n",(0,i.jsx)(n.p,{children:"Lifecycle functions allow you to manage resources that should persist for the agent's lifetime:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"agent_init_function"})}),": Runs when the agent starts (for example, database connections)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"agent_cleanup_function"})}),": Runs when the agent shuts down (for example, closing connections)"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Lifecycle functions are optional but recommended for managing resources effectively."})}),"\n",(0,i.jsx)(n.h2,{id:"step-by-step-guide",children:"Step-by-Step Guide"}),"\n",(0,i.jsx)(n.p,{children:"Create a simple agent that can greet users and demonstrate the core concepts."}),"\n",(0,i.jsxs)(n.p,{children:["You can create an agent either by using the ",(0,i.jsx)(n.code,{children:"sam add agent"})," command or by creating a new plugin of type agent, ",(0,i.jsx)(n.code,{children:"sam plugin create my-hello-agent --type agent"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["For information and recommendations about these options, see ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/concepts/plugins#agent-or-plugin-which-to-use",children:(0,i.jsx)(n.code,{children:"Agent or Plugin: Which To use?"})}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"step-1-initialize-your-agent",children:"Step 1: Initialize your Agent"}),"\n",(0,i.jsxs)(n.p,{children:["In this tutorial, you create a new agent by creating a new plugin of type agent.\nFor an example of custom agents, see ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/tutorials/custom-agent",children:"Build Your Own Agent"})," guide."]}),"\n",(0,i.jsx)(n.p,{children:"Although the directory structure for plugins is slightly different than the one for agents, both require a YAML configuration file, and a python module with the tools and lifecycle functions you want."}),"\n",(0,i.jsx)(n.p,{children:"To create a new agent plugin, run the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sam plugin create my-hello-agent --type agent\n"})}),"\n",(0,i.jsx)(n.p,{children:"And follow the prompts to set up your agent. The prompts create a new directory structure for your agent."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"my-hello-agent/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 my_hello_agent/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 tools.py\n\u2502 \u2514\u2500\u2500 lifecycle.py # This file won't be automatically created\n\u251c\u2500\u2500 config.yaml\n\u251c\u2500\u2500 pyproject.toml\n\u2514\u2500\u2500 README.md\n"})}),"\n",(0,i.jsx)(n.mermaid,{value:"graph TD\n A[my-hello-agent/] --\x3e B[src/]\n A --\x3e C[config.yaml]\n A --\x3e D[pyproject.toml]\n A --\x3e E[README.md]\n \n B --\x3e F[my_hello_agent/]\n F --\x3e G[__init__.py]\n F --\x3e H[tools.py]\n F --\x3e I[lifecycle.py]\n \n style C fill:#b60000,stroke:#333,stroke-width:2px\n style H fill:#b60000,stroke:#333,stroke-width:2px\n style I fill:#007000,stroke:#333,stroke-width:2px"}),"\n",(0,i.jsx)(n.h3,{id:"step-2-the-tool-function",children:"Step 2: The Tool Function"}),"\n",(0,i.jsx)(n.p,{children:"Create your first tool function:\nThe following arguments are provided by the framework:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"tool_context: Solace Agent Mesh framework context"}),"\n",(0,i.jsx)(n.li,{children:"tool_config: Tool-specific configuration (from config.yaml)"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For a complete guide on creating python tools, see our ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/user-guide/creating-python-tools",children:"Creating Python Tools"})})," documentation."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# src/my_hello_agent/tools.py\n"""\nTools for the Hello World agent.\n"""\n\nfrom typing import Any, Dict, Optional\nfrom google.adk.tools import ToolContext\nfrom solace_ai_connector.common.log import log\n\n\nasync def hello_tool(\n name: str,\n tool_context: Optional[ToolContext] = None,\n tool_config: Optional[Dict[str, Any]] = None\n) -> Dict[str, Any]:\n """\n Greets a user with a personalized message.\n \n Args:\n name: The name of the person to greet\n \n Returns:\n A dictionary with the greeting message\n """\n log_identifier = "[HelloTool]"\n log.info(f"{log_identifier} Greeting user: {name}")\n \n # Get configuration from tool_config\n greeting_prefix = "Hello"\n if tool_config:\n greeting_prefix = tool_config.get("greeting_prefix", "Hello")\n \n # Create the greeting message\n greeting_message = f"{greeting_prefix}, {name}! Welcome to Solace Agent Mesh!"\n \n log.info(f"{log_identifier} Generated greeting: {greeting_message}")\n \n return {\n "status": "success",\n "message": greeting_message,\n "greeted_name": name\n }\n\n\nasync def farewell_tool(\n name: str,\n tool_context: Optional[ToolContext] = None,\n tool_config: Optional[Dict[str, Any]] = None\n) -> Dict[str, Any]:\n """\n Says goodbye to a user.\n \n Args:\n name: The name of the person to say goodbye to\n \n Returns:\n A dictionary with the farewell message\n """\n log_identifier = "[FarewellTool]"\n log.info(f"{log_identifier} Saying goodbye to user: {name}")\n \n # Get configuration from tool_config\n farewell_prefix = "Goodbye"\n if tool_config:\n farewell_prefix = tool_config.get("farewell_prefix", "Goodbye")\n \n # Create the farewell message\n farewell_message = f"{farewell_prefix}, {name}! Thanks for using Solace Agent Mesh!"\n \n log.info(f"{log_identifier} Generated farewell: {farewell_message}")\n \n return {\n "status": "success",\n "message": farewell_message,\n "farewell_name": name\n }\n'})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Key Points:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Function Signature"}),": All tool functions should be ",(0,i.jsx)(n.code,{children:"async"})," and accept ",(0,i.jsx)(n.code,{children:"tool_context"})," and ",(0,i.jsx)(n.code,{children:"tool_config"})," parameters"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Return Format"}),": Return a dictionary with at least a ",(0,i.jsx)(n.code,{children:"status"})," field"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Logging"}),": Use the Solace Agent Mesh logger for consistent logging"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configuration"}),": Access tool-specific config via the ",(0,i.jsx)(n.code,{children:"tool_config"})," parameter"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"step-3-the-agent-configuration",children:"Step 3: The Agent Configuration"}),"\n",(0,i.jsx)(n.p,{children:"Create the main configuration file for your agent:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'# ... (additional services and configurations)\n\napps:\n - name: my-hello-agent\n app_module: solace_agent_mesh.agent.sac.app \n broker:\n <<: *broker_connection\n \n # Agent-specific configuration\n app_config:\n # Basic agent identity\n namespace: ${NAMESPACE} \n supports_streaming: true \n agent_name: "HelloAgent"\n display_name: "Hello World Agent"\n \n # LLM model configuration\n model: *general_model \n \n # Agent instructions (system prompt)\n instruction: |\n You are a friendly Hello World agent. Your purpose is to greet users and \n demonstrate the capabilities of Solace Agent Mesh. You can:\n \n 1. Greet users with personalized messages using the hello_tool\n 2. Say goodbye to users using the farewell_tool\n \n Always be polite and helpful. When greeting someone, ask for their name \n if they haven\'t provided it.\n \n # Lifecycle functions\n agent_init_function:\n module: "my_hello_agent.lifecycle" # This should point to your lifecycle python module\n name: "initialize_hello_agent"\n base_path: .\n config:\n startup_message: "Hello Agent is starting up!"\n log_level: "INFO"\n \n agent_cleanup_function:\n module: "my_hello_agent.lifecycle"\n base_path: .\n name: "cleanup_hello_agent"\n \n # Tools configuration\n tools:\n # Hello tool with custom greeting\n - tool_type: python\n component_module: "my_hello_agent.tools"\n component_base_path: .\n function_name: "hello_tool"\n tool_name: "greet_user" # Renaming the tool, must use this name in the agent card\n tool_config:\n greeting_prefix: "Hello there"\n \n # Farewell tool with custom farewell\n - tool_type: python\n component_module: "my_hello_agent.tools"\n component_base_path: .\n function_name: "farewell_tool"\n tool_name: "say_goodbye"\n tool_config:\n farewell_prefix: "See you later"\n \n # Built-in artifact tools for file operations\n - tool_type: builtin-group\n group_name: "artifact_management"\n \n # Agent card (describes the agent\'s capabilities)\n agent_card:\n description: "A friendly Hello World agent that demonstrates Solace Agent Mesh capabilities"\n defaultInputModes: ["text"]\n defaultOutputModes: ["text"]\n skills:\n - id: "greet_user"\n name: "Greet User"\n description: "Greets users with personalized messages"\n - id: "say_goodbye"\n name: "Say Goodbye"\n description: "Says goodbye to users"\n - id: "file_operations"\n name: "File Operations"\n description: "Create, read, and manage files and artifacts"\n \n # Session and artifact services\n session_service: *default_session_service\n artifact_service: *default_artifact_service\n# ... (additional services and configurations)\n'})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Key Sections Explained:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"namespace"})}),": Unique identifier for your agent in the mesh"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"model"})}),": LLM configuration (can be a string or detailed config)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"instruction"})}),": The system prompt that defines your agent's behavior"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"tools"})}),": List of tools your agent can use, with their configurations"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"agent_card"})}),": Metadata describing your agent's capabilities"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"step-4-the-lifecycle-function",children:"Step 4: The Lifecycle Function"}),"\n",(0,i.jsx)(n.p,{children:"Lifecycle functions are completely optional but useful for managing resources. They run when the agent starts and stops."}),"\n",(0,i.jsx)(n.p,{children:"The lifecycle file is not automatically created, so you need to create it manually:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"touch src/my_hello_agent/lifecycle.py\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# src/my_hello_agent/lifecycle.py\n"""\nLifecycle functions for the Hello World agent.\n"""\n\nfrom typing import Any, Dict\nfrom pydantic import BaseModel, Field\nfrom solace_ai_connector.common.log import log\n\n\nclass HelloAgentInitConfig(BaseModel):\n """\n Configuration model for the Hello Agent initialization.\n """\n startup_message: str = Field(description="Message to log on startup")\n log_level: str = Field(default="INFO", description="Logging level for the agent")\n\n\ndef initialize_hello_agent(host_component: Any, init_config: HelloAgentInitConfig):\n """\n Initializes the Hello World agent.\n \n Args:\n host_component: The agent host component\n init_config: Validated initialization configuration\n """\n log_identifier = f"[{host_component.agent_name}:init]"\n log.info(f"{log_identifier} Starting Hello Agent initialization...")\n \n # Log the startup message from config\n log.info(f"{log_identifier} {init_config.startup_message}")\n \n # You could initialize shared resources here, such as:\n # - Database connections\n # - API clients\n # - Caches or shared data structures\n \n # Store any shared state in the agent\n host_component.set_agent_specific_state("initialized_at", "2024-01-01T00:00:00Z")\n host_component.set_agent_specific_state("greeting_count", 0)\n \n log.info(f"{log_identifier} Hello Agent initialization completed successfully")\n\n\ndef cleanup_hello_agent(host_component: Any):\n """\n Cleans up resources when the Hello World agent shuts down.\n \n Args:\n host_component: The agent host component\n """\n log_identifier = f"[{host_component.agent_name}:cleanup]"\n log.info(f"{log_identifier} Starting Hello Agent cleanup...")\n \n # Retrieve any shared state\n greeting_count = host_component.get_agent_specific_state("greeting_count", 0)\n log.info(f"{log_identifier} Agent processed {greeting_count} greetings during its lifetime")\n \n # Clean up resources here, such as:\n # - Closing database connections\n # - Shutting down background tasks\n # - Saving final state\n \n log.info(f"{log_identifier} Hello Agent cleanup completed")\n'})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Key Points:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Pydantic Models"}),": Use Pydantic for configuration validation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Shared State"}),": Store data that persists across tool calls"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Resource Management"}),": Initialize connections in ",(0,i.jsx)(n.code,{children:"init"}),", clean up in ",(0,i.jsx)(n.code,{children:"cleanup"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"advanced-concepts",children:"Advanced Concepts"}),"\n",(0,i.jsx)(n.h3,{id:"working-with-artifacts",children:"Working with Artifacts"}),"\n",(0,i.jsx)(n.p,{children:"You can enhance our hello tool to save greetings to a file using Solace Agent Mesh's artifact service:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'\nfrom datetime import datetime\nfrom solace_agent_mesh.agent.utils.artifact_helpers import save_artifact_with_metadata\n\nasync def hello_tool_with_artifact(\n name: str,\n save_to_file: bool = False,\n tool_context: Optional[ToolContext] = None,\n tool_config: Optional[Dict[str, Any]] = None\n) -> Dict[str, Any]:\n """\n Greets a user and optionally saves the greeting to a file.\n """\n log_identifier = "[HelloToolWithArtifact]"\n \n # Generate greeting (same as before)\n greeting_prefix = tool_config.get("greeting_prefix", "Hello") if tool_config else "Hello"\n greeting_message = f"{greeting_prefix}, {name}! Welcome to Solace Agent Mesh!"\n \n result = {\n "status": "success",\n "message": greeting_message,\n "greeted_name": name\n }\n \n # Save to artifact if requested\n if save_to_file and tool_context:\n try:\n # Prepare content\n timestamp = datetime.now(timezone.utc)\n filename = f"greeting_{name}_{timestamp}.txt"\n content = f"Greeting: {greeting_message}\\nTimestamp: {timestamp}\\n"\n \n # Save artifact\n artifact_service = tool_context._invocation_context.artifact_service\n await save_artifact_with_metadata(\n artifact_service=artifact_service,\n app_name=tool_context._invocation_context.app_name,\n user_id=tool_context._invocation_context.user_id,\n session_id=tool_context._invocation_context.session.id,\n filename=filename,\n content_bytes=content.encode(\'utf-8\'),\n mime_type="application/json",\n metadata_dict={\n "description": "Greeting message",\n "source": "Greeting Agent",\n },\n timestamp=timestamp\n )\n \n result["artifact_saved"] = filename\n log.info(f"{log_identifier} Saved greeting to artifact: {filename}")\n \n except Exception as e:\n log.error(f"{log_identifier} Failed to save artifact: {e}")\n result["artifact_error"] = str(e)\n \n return result\n'})}),"\n",(0,i.jsx)(n.h3,{id:"using-multiple-tool-configurations",children:"Using Multiple Tool Configurations"}),"\n",(0,i.jsx)(n.p,{children:"You can configure the same tool function multiple times with different settings:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'tools:\n # Formal greeting\n - tool_type: python\n component_module: "my_hello_agent.tools"\n function_name: "hello_tool"\n tool_name: "formal_greeting"\n tool_config:\n greeting_prefix: "Good day"\n \n # Casual greeting\n - tool_type: python\n component_module: "my_hello_agent.tools"\n function_name: "hello_tool"\n tool_name: "casual_greeting"\n tool_config:\n greeting_prefix: "Hey there"\n \n # Enthusiastic greeting\n - tool_type: python\n component_module: "my_hello_agent.tools"\n function_name: "hello_tool"\n tool_name: "enthusiastic_greeting"\n tool_config:\n greeting_prefix: "Hello and welcome"\n'})}),"\n",(0,i.jsx)(n.p,{children:"This gives your agent multiple greeting styles to choose from based on the context."}),"\n",(0,i.jsx)(n.h2,{id:"running-your-agent",children:"Running Your Agent"}),"\n",(0,i.jsx)(n.p,{children:"To run a plugin agent, you first need to package and install it as a plugin."}),"\n",(0,i.jsxs)(n.admonition,{title:"Quick Debug",type:"tip",children:[(0,i.jsxs)(n.p,{children:["For debugging or isolated development testing, you can run your agent from the ",(0,i.jsx)(n.code,{children:"src"})," directory directly using the Solace Agent Mesh CLI."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd src\nsam run ../config.yaml\n"})}),(0,i.jsx)(n.p,{children:"Changing to the src directory allows the module path to be set correctly so that Solace Agent Mesh can find your functions without your having to install them in your python environment as a plugin package."})]}),"\n",(0,i.jsxs)(n.p,{children:["To properly instantiate your plugin agent, first build the plugin.\nThe following command will produce a python wheel file under ",(0,i.jsx)(n.code,{children:"dist"})," directory:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sam plugin build\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Check into ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/getting-started/quick-start#create-a-project",children:"your Solace Agent Mesh project directory"}),", and add the plugin wheel with a given name:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"sam plugin add my-first-weather-agent --plugin PATH/TO/weather-agent/dist/weather-agent.whl\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Using the ",(0,i.jsx)(n.code,{children:"sam plugin add"})," command installs your plugin as a python dependency into your python environment.\nThis also means changing the source code without reinstalling the plugin will not reflect the changes."]})}),"\n",(0,i.jsx)(n.p,{children:"Now, you can run the complete Solace Agent Mesh application along with your newly added agent:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"sam run\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively, only run the newly added agent using ",(0,i.jsx)(n.code,{children:"sam run configs/agents/my-first-weather-agent.yaml"})]}),"\n",(0,i.jsx)(n.h2,{id:"architecture-overview",children:"Architecture Overview"}),"\n",(0,i.jsx)(n.p,{children:"Here is how all the pieces fit together:"}),"\n",(0,i.jsx)(n.mermaid,{value:"graph TD\n subgraph Agent Configuration\n direction LR\n A[config.yaml] --\x3e|Defines| B(Agent Properties);\n A --\x3e|Lists & Configures| C(Tools);\n end\n\n subgraph Agent Host\n direction TB\n D[SAM Host] --\x3e|Loads| A;\n D --\x3e|Instantiates| E[Agent];\n E --\x3e|Initializes with| F[Lifecycle Functions];\n end\n\n subgraph Tool Implementation\n direction LR\n G[Python Module tools.py] --\x3e|Contains| H[Tool Functions];\n end\n\n subgraph Execution Flow\n direction TB\n I[User Request] --\x3e J[LLM Orchestrator];\n J --\x3e|Selects Tool| K{ADKToolWrapper};\n K --\x3e|Calls| H;\n H --\x3e|Accesses| L[ToolContext];\n H --\x3e|Uses| M[tool_config];\n H --\x3e|Returns Result| J;\n end\n\n C --\x3e|Wrapped by| K;\n\n style A fill:#b60000,stroke:#faa,stroke-width:2px\n style H fill:#b60000,stroke:#faa,stroke-width:2px\n style F fill:#007000,stroke:#faa,stroke-width:2px"}),"\n",(0,i.jsx)(n.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,i.jsx)(n.h3,{id:"tool-design",children:"Tool Design"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Single Responsibility"}),": Each tool should do one thing well"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Clear Documentation"}),": Write detailed docstrings for your tools"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Error Handling"}),": Always return structured error responses"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Logging"}),": Use consistent logging for debugging and monitoring"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Environment Variables"}),": Use environment variables for sensitive data"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Validation"}),": Use Pydantic models for configuration validation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Documentation"}),": Comment your configuration files thoroughly"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Unit Tests"}),": Test your tool functions independently"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Integration Tests"}),": Test your agent with real Solace Agent Mesh infrastructure"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Mock Dependencies"}),": Mock external services for reliable testing"]}),"\n"]})]})}function g(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var o=t(6540);const i={},s=o.createContext(i);function l(e){const n=o.useContext(s);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(i):e.components||i:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[6719],{1786:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"documentation/user-guide/creating-python-tools","title":"Creating Python Tools","description":"Solace Agent Mesh provides a powerful and unified system for creating custom agent tools using Python. This is the primary way to extend an agent\'s capabilities with your own business logic, integrate with proprietary APIs, or perform specialized data processing.","source":"@site/docs/documentation/user-guide/creating-python-tools.md","sourceDirName":"documentation/user-guide","slug":"/documentation/user-guide/creating-python-tools","permalink":"/solace-agent-mesh/docs/documentation/user-guide/creating-python-tools","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/user-guide/creating-python-tools.md","tags":[],"version":"current","sidebarPosition":35,"frontMatter":{"title":"Creating Python Tools","sidebar_position":35},"sidebar":"docSidebar","previous":{"title":"Create Agents","permalink":"/solace-agent-mesh/docs/documentation/user-guide/create-agents"},"next":{"title":"Create Gateways","permalink":"/solace-agent-mesh/docs/documentation/user-guide/create-gateways"}}');var s=t(4848),r=t(8453);const i={title:"Creating Python Tools",sidebar_position:35},a="Creating Python Tools",l={},c=[{value:"Tool Creation Patterns",id:"tool-creation-patterns",level:2},{value:"Pattern 1: Simple Function-Based Tools",id:"pattern-1-simple-function-based-tools",level:2},{value:"Step 1: Write the Tool Function",id:"step-1-write-the-tool-function",level:3},{value:"Step 2: Configure the Tool",id:"step-2-configure-the-tool",level:3},{value:"Pattern 2: Advanced Single-Class Tools",id:"pattern-2-advanced-single-class-tools",level:2},{value:"Step 1: Create the <code>DynamicTool</code> Class",id:"step-1-create-the-dynamictool-class",level:3},{value:"Step 2: Configure the Tool",id:"step-2-configure-the-tool-1",level:3},{value:"Pattern 3: The Tool Provider Factory",id:"pattern-3-the-tool-provider-factory",level:2},{value:"Step 1: Create the Provider and Tools",id:"step-1-create-the-provider-and-tools",level:3},{value:"Step 2: Configure the Provider",id:"step-2-configure-the-provider",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"creating-python-tools",children:"Creating Python Tools"})}),"\n",(0,s.jsx)(n.p,{children:"Solace Agent Mesh provides a powerful and unified system for creating custom agent tools using Python. This is the primary way to extend an agent's capabilities with your own business logic, integrate with proprietary APIs, or perform specialized data processing."}),"\n",(0,s.jsxs)(n.p,{children:["This guide covers the different patterns for creating custom tools, all of which are configured using the versatile ",(0,s.jsx)(n.code,{children:"tool_type: python"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"tool-creation-patterns",children:"Tool Creation Patterns"}),"\n",(0,s.jsx)(n.p,{children:"There are three primary patterns for creating Python tools, ranging from simple to advanced. You can choose the best pattern for your needs, and even mix and match them within the same project."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Pattern"}),(0,s.jsx)(n.th,{children:"Best For"}),(0,s.jsx)(n.th,{children:"Key Feature"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Function-Based"})}),(0,s.jsx)(n.td,{children:"Simple, self-contained tools with static inputs."}),(0,s.jsx)(n.td,{children:"Quick and easy; uses function signature."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsxs)(n.strong,{children:["Single ",(0,s.jsx)(n.code,{children:"DynamicTool"})," Class"]})}),(0,s.jsx)(n.td,{children:"Tools that require complex logic or a programmatically defined interface."}),(0,s.jsx)(n.td,{children:"Full control over the tool's definition."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.code,{children:"DynamicToolProvider"})," Class"]})}),(0,s.jsx)(n.td,{children:"Generating multiple related tools from a single, configurable source."}),(0,s.jsx)(n.td,{children:"Maximum scalability and code reuse."})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["All three patterns are configured in your agent's YAML file under the ",(0,s.jsx)(n.code,{children:"tools"})," list with ",(0,s.jsx)(n.code,{children:"tool_type: python"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"pattern-1-simple-function-based-tools",children:"Pattern 1: Simple Function-Based Tools"}),"\n",(0,s.jsxs)(n.p,{children:["This is the most straightforward way to create a custom tool. You define a standard Python ",(0,s.jsx)(n.code,{children:"async"})," function, and Solace Agent Mesh automatically introspects its signature and docstring to create the tool definition for the LLM."]}),"\n",(0,s.jsx)(n.h3,{id:"step-1-write-the-tool-function",children:"Step 1: Write the Tool Function"}),"\n",(0,s.jsxs)(n.p,{children:["Create a Python file (e.g., ",(0,s.jsx)(n.code,{children:"src/my_agent/tools.py"}),") and define your tool."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'# src/my_agent/tools.py\nfrom typing import Any, Dict, Optional\nfrom google.adk.tools import ToolContext\n\nasync def greet_user(\n name: str,\n tool_context: Optional[ToolContext] = None,\n tool_config: Optional[Dict[str, Any]] = None\n) -> Dict[str, Any]:\n """\n Greets a user with a personalized message.\n\n Args:\n name: The name of the person to greet.\n\n Returns:\n A dictionary with the greeting message.\n """\n greeting_prefix = "Hello"\n if tool_config:\n greeting_prefix = tool_config.get("greeting_prefix", "Hello")\n\n greeting_message = f"{greeting_prefix}, {name}! Welcome to Solace Agent Mesh!"\n\n return {\n "status": "success",\n "message": greeting_message\n }\n'})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Key Requirements:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The function must be ",(0,s.jsx)(n.code,{children:"async def"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The function's docstring is used as the tool's ",(0,s.jsx)(n.code,{children:"description"})," for the LLM."]}),"\n",(0,s.jsxs)(n.li,{children:["Type hints (",(0,s.jsx)(n.code,{children:"str"}),", ",(0,s.jsx)(n.code,{children:"int"}),", ",(0,s.jsx)(n.code,{children:"bool"}),") are used to generate the parameter schema."]}),"\n",(0,s.jsxs)(n.li,{children:["The function should accept ",(0,s.jsx)(n.code,{children:"tool_context"})," and ",(0,s.jsx)(n.code,{children:"tool_config"})," as optional keyword arguments to receive framework context and YAML configuration."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"step-2-configure-the-tool",children:"Step 2: Configure the Tool"}),"\n",(0,s.jsxs)(n.p,{children:["In your agent's YAML configuration, add a ",(0,s.jsx)(n.code,{children:"tool_type: python"})," block and point it to your function."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'# In your agent\'s app_config:\ntools:\n - tool_type: python\n component_module: "my_agent.tools"\n function_name: "greet_user"\n tool_config:\n greeting_prefix: "Greetings"\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"component_module"}),": The Python module path to your tools file."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"function_name"}),": The exact name of the function to load."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"tool_config"}),": An optional dictionary passed to your tool at runtime."]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"pattern-2-advanced-single-class-tools",children:"Pattern 2: Advanced Single-Class Tools"}),"\n",(0,s.jsxs)(n.p,{children:["For tools that require more complex logic\u2014such as defining their interface programmatically based on configuration\u2014you can use a class that inherits from ",(0,s.jsx)(n.code,{children:"DynamicTool"}),"."]}),"\n",(0,s.jsxs)(n.h3,{id:"step-1-create-the-dynamictool-class",children:["Step 1: Create the ",(0,s.jsx)(n.code,{children:"DynamicTool"})," Class"]}),"\n",(0,s.jsxs)(n.p,{children:["Instead of a function, define a class that implements the ",(0,s.jsx)(n.code,{children:"DynamicTool"})," abstract base class."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'# src/my_agent/tools.py\nfrom typing import Optional, Dict, Any\nfrom google.genai import types as adk_types\nfrom solace_agent_mesh.agent.tools.dynamic_tool import DynamicTool\n\nclass WeatherTool(DynamicTool):\n """A dynamic tool that fetches current weather information."""\n\n @property\n def tool_name(self) -> str:\n return "get_current_weather"\n\n @property\n def tool_description(self) -> str:\n return "Get the current weather for a specified location."\n\n @property\n def parameters_schema(self) -> adk_types.Schema:\n # Programmatically define the tool\'s parameters\n return adk_types.Schema(\n type=adk_types.Type.OBJECT,\n properties={\n "location": adk_types.Schema(type=adk_types.Type.STRING, description="The city and state/country."),\n "units": adk_types.Schema(type=adk_types.Type.STRING, enum=["celsius", "fahrenheit"], nullable=True),\n },\n required=["location"],\n )\n\n async def _run_async_impl(self, args: Dict[str, Any], **kwargs) -> Dict[str, Any]:\n location = args["location"]\n # Access config via self.tool_config\n api_key = self.tool_config.get("api_key")\n if not api_key:\n return {"status": "error", "message": "API key not configured"}\n # ... implementation to call weather API ...\n return {"status": "success", "weather": "Sunny"}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"step-2-configure-the-tool-1",children:"Step 2: Configure the Tool"}),"\n",(0,s.jsxs)(n.p,{children:["The YAML configuration is very similar. You can either specify the ",(0,s.jsx)(n.code,{children:"class_name"})," or let Solace Agent Mesh auto-discover it if it's the only ",(0,s.jsx)(n.code,{children:"DynamicTool"})," in the module."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"# In your agent's app_config:\ntools:\n - tool_type: python\n component_module: \"my_agent.tools\"\n # class_name: WeatherTool # Optional if it's the only one\n tool_config:\n api_key: ${WEATHER_API_KEY}\n"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"pattern-3-the-tool-provider-factory",children:"Pattern 3: The Tool Provider Factory"}),"\n",(0,s.jsx)(n.p,{children:"This is the most powerful pattern, designed for generating multiple, related tools from a single module and configuration block. It's perfect for creating toolsets based on external schemas, database tables, or other dynamic sources."}),"\n",(0,s.jsx)(n.h3,{id:"step-1-create-the-provider-and-tools",children:"Step 1: Create the Provider and Tools"}),"\n",(0,s.jsxs)(n.p,{children:["In your tools module, you define your ",(0,s.jsx)(n.code,{children:"DynamicTool"})," classes as before, but you also create a ",(0,s.jsx)(n.strong,{children:"provider"})," class that inherits from ",(0,s.jsx)(n.code,{children:"DynamicToolProvider"}),". This provider acts as a factory."]}),"\n",(0,s.jsxs)(n.p,{children:["You can also use the ",(0,s.jsx)(n.code,{children:"@register_tool"})," decorator on simple functions to have them automatically included by the provider."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'# src/my_agent/database_tools.py\nfrom typing import Optional, Dict, Any, List\nfrom google.genai import types as adk_types\nfrom solace_agent_mesh.agent.tools.dynamic_tool import DynamicTool, DynamicToolProvider\n\n# --- Tool Implementations ---\nclass DatabaseQueryTool(DynamicTool):\n # ... (implementation as in previous examples) ...\n pass\n\nclass DatabaseSchemaTool(DynamicTool):\n # ... (implementation as in previous examples) ...\n pass\n\n# --- Tool Provider Implementation ---\nclass DatabaseToolProvider(DynamicToolProvider):\n """A factory that creates all database-related tools."""\n\n # Use a decorator for a simple, function-based tool\n\n def create_tools(self, tool_config: Optional[dict] = None) -> List[DynamicTool]:\n """\n Generates a list of all database tools, passing the shared\n configuration to each one.\n """\n # 1. Create tools from any decorated functions in this module\n tools = self._create_tools_from_decorators(tool_config)\n\n # 2. Programmatically create and add more complex tools\n if tool_config and tool_config.get("connection_string"):\n tools.append(DatabaseQueryTool(tool_config=tool_config))\n tools.append(DatabaseSchemaTool(tool_config=tool_config))\n\n return tools\n\n# NOTE that you must use the decorator outside of any class with the provider\'s class name.\n@DatabaseToolProvider.register_tool\nasync def get_database_server_version(tool_config: dict, **kwargs) -> dict:\n """Returns the version of the connected PostgreSQL server."""\n # ... implementation ...\n return {"version": "PostgreSQL 15.3"}\n\n'})}),"\n",(0,s.jsx)(n.h3,{id:"step-2-configure-the-provider",children:"Step 2: Configure the Provider"}),"\n",(0,s.jsxs)(n.p,{children:["You only need a single YAML block. Solace Agent Mesh will automatically detect the ",(0,s.jsx)(n.code,{children:"DynamicToolProvider"})," and use it to load all the tools it generates."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'# In your agent\'s app_config:\ntools:\n # This single block loads get_database_server_version,\n # execute_database_query, and get_database_schema.\n - tool_type: python\n component_module: "my_agent.database_tools"\n tool_config:\n connection_string: ${DB_CONNECTION_STRING}\n max_rows: 1000\n'})}),"\n",(0,s.jsx)(n.p,{children:"This approach is incredibly scalable, as one configuration entry can bootstrap an entire suite of dynamically generated tools."})]})}function h(e={}){const{wrapper:n}={...(0,r.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:()=>a});var o=t(6540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);