solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/callbacks.py +1694 -0
- solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
- solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
- solace_agent_mesh/agent/adk/runner.py +353 -0
- solace_agent_mesh/agent/adk/services.py +240 -0
- solace_agent_mesh/agent/adk/setup.py +751 -0
- solace_agent_mesh/agent/adk/stream_parser.py +214 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
- solace_agent_mesh/agent/agent_llm.txt +41 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
- solace_agent_mesh/agent/sac/app.py +640 -0
- solace_agent_mesh/agent/sac/component.py +3388 -0
- solace_agent_mesh/agent/sac/patch_adk.py +111 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
- solace_agent_mesh/agent/testing/__init__.py +3 -0
- solace_agent_mesh/agent/testing/debug_utils.py +135 -0
- solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
- solace_agent_mesh/agent/tools/__init__.py +14 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
- solace_agent_mesh/agent/tools/image_tools.py +1184 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
- solace_agent_mesh/agent/tools/registry.py +36 -0
- solace_agent_mesh/agent/tools/test_tools.py +135 -0
- solace_agent_mesh/agent/tools/tool_definition.py +45 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
- solace_agent_mesh/agent/tools/web_tools.py +381 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
- solace_agent_mesh/agent/utils/config_parser.py +47 -0
- solace_agent_mesh/agent/utils/context_helpers.py +60 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
- solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
- solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
- solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
- solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
- solace_agent_mesh/assets/docs/img/logo.png +0 -0
- solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
- solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -0
- solace_agent_mesh/assets/docs/sitemap.xml +1 -0
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
- solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
- solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
- solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +158 -0
- solace_agent_mesh/cli/main.py +17 -294
- solace_agent_mesh/cli/utils.py +135 -204
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a_protocol.py +564 -0
- solace_agent_mesh/common/agent_registry.py +42 -0
- solace_agent_mesh/common/client/__init__.py +4 -0
- solace_agent_mesh/common/client/card_resolver.py +21 -0
- solace_agent_mesh/common/client/client.py +85 -0
- solace_agent_mesh/common/client/client_llm.txt +133 -0
- solace_agent_mesh/common/common_llm.txt +144 -0
- solace_agent_mesh/common/constants.py +1 -14
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +130 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/registry.py +125 -0
- solace_agent_mesh/common/server/__init__.py +4 -0
- solace_agent_mesh/common/server/server.py +122 -0
- solace_agent_mesh/common/server/server_llm.txt +169 -0
- solace_agent_mesh/common/server/task_manager.py +291 -0
- solace_agent_mesh/common/server/utils.py +28 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +162 -0
- solace_agent_mesh/common/services/identity_service.py +129 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
- solace_agent_mesh/common/services/services_llm.txt +132 -0
- solace_agent_mesh/common/types.py +411 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +55 -0
- solace_agent_mesh/common/utils/embeds/converter.py +452 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
- solace_agent_mesh/common/utils/embeds/types.py +14 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/log_formatters.py +44 -0
- solace_agent_mesh/common/utils/mime_helpers.py +106 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
- solace_agent_mesh/common/utils/utils_llm.txt +67 -0
- solace_agent_mesh/config_portal/backend/common.py +66 -24
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
- solace_agent_mesh/config_portal/backend/server.py +550 -181
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
- solace_agent_mesh/core_a2a/service.py +331 -0
- solace_agent_mesh/evaluation/config_loader.py +657 -0
- solace_agent_mesh/evaluation/evaluator.py +667 -0
- solace_agent_mesh/evaluation/message_organizer.py +568 -0
- solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
- solace_agent_mesh/evaluation/report/chart_section.html +141 -0
- solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
- solace_agent_mesh/evaluation/report/modal.html +59 -0
- solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
- solace_agent_mesh/evaluation/report/modal_script.js +296 -0
- solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
- solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
- solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
- solace_agent_mesh/evaluation/report/templates/header.html +340 -0
- solace_agent_mesh/evaluation/report_data_processor.py +972 -0
- solace_agent_mesh/evaluation/report_generator.py +613 -0
- solace_agent_mesh/evaluation/run.py +613 -0
- solace_agent_mesh/evaluation/subscriber.py +872 -0
- solace_agent_mesh/evaluation/summary_builder.py +775 -0
- solace_agent_mesh/evaluation/test_case_loader.py +714 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +266 -0
- solace_agent_mesh/gateway/base/base_llm.txt +119 -0
- solace_agent_mesh/gateway/base/component.py +1542 -0
- solace_agent_mesh/gateway/base/task_context.py +74 -0
- solace_agent_mesh/gateway/gateway_llm.txt +125 -0
- solace_agent_mesh/gateway/http_sse/app.py +190 -0
- solace_agent_mesh/gateway/http_sse/component.py +1602 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
- solace_agent_mesh/gateway/http_sse/main.py +442 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -0
- solace_agent_mesh/templates/agent_template.yaml +53 -0
- solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
- solace_agent_mesh/templates/gateway_app_template.py +73 -0
- solace_agent_mesh/templates/gateway_component_template.py +400 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
- solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
- solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
- solace_agent_mesh/templates/plugin_custom_template.py +10 -0
- solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
- solace_agent_mesh/templates/plugin_readme_template.md +34 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +66 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +53 -0
- solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
- solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
- solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
- {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
- solace_agent_mesh/agents/base_agent_component.py +0 -256
- solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
- solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
- solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
- solace_agent_mesh/agents/global/actions/create_file.py +0 -70
- solace_agent_mesh/agents/global/actions/error_action.py +0 -45
- solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
- solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
- solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
- solace_agent_mesh/agents/global/global_agent_component.py +0 -38
- solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
- solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
- solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
- solace_agent_mesh/agents/slack/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
- solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
- solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
- solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
- solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
- solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
- solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
- solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
- solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
- solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
- solace_agent_mesh/assets/web-visualizer/index.html +0 -14
- solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
- solace_agent_mesh/cli/commands/add/__init__.py +0 -3
- solace_agent_mesh/cli/commands/add/add.py +0 -88
- solace_agent_mesh/cli/commands/add/agent.py +0 -110
- solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
- solace_agent_mesh/cli/commands/add/gateway.py +0 -374
- solace_agent_mesh/cli/commands/build.py +0 -670
- solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
- solace_agent_mesh/cli/commands/chat/chat.py +0 -361
- solace_agent_mesh/cli/commands/config.py +0 -29
- solace_agent_mesh/cli/commands/init/__init__.py +0 -3
- solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
- solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
- solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
- solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
- solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
- solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
- solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
- solace_agent_mesh/cli/commands/init/init.py +0 -92
- solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
- solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
- solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
- solace_agent_mesh/cli/commands/plugin/add.py +0 -100
- solace_agent_mesh/cli/commands/plugin/build.py +0 -268
- solace_agent_mesh/cli/commands/plugin/create.py +0 -117
- solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
- solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
- solace_agent_mesh/cli/commands/run.py +0 -68
- solace_agent_mesh/cli/commands/visualizer.py +0 -138
- solace_agent_mesh/cli/config.py +0 -85
- solace_agent_mesh/common/action.py +0 -91
- solace_agent_mesh/common/action_list.py +0 -37
- solace_agent_mesh/common/action_response.py +0 -340
- solace_agent_mesh/common/mysql_database.py +0 -40
- solace_agent_mesh/common/postgres_database.py +0 -85
- solace_agent_mesh/common/prompt_templates.py +0 -28
- solace_agent_mesh/common/stimulus_utils.py +0 -152
- solace_agent_mesh/common/time.py +0 -24
- solace_agent_mesh/common/utils.py +0 -712
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
- solace_agent_mesh/configs/agent_global.yaml +0 -74
- solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
- solace_agent_mesh/configs/agent_slack.yaml +0 -64
- solace_agent_mesh/configs/agent_web_request.yaml +0 -75
- solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
- solace_agent_mesh/configs/error_catcher.yaml +0 -56
- solace_agent_mesh/configs/monitor.yaml +0 -0
- solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
- solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
- solace_agent_mesh/configs/orchestrator.yaml +0 -241
- solace_agent_mesh/configs/service_embedding.yaml +0 -81
- solace_agent_mesh/configs/service_llm.yaml +0 -265
- solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
- solace_agent_mesh/gateway/components/gateway_base.py +0 -47
- solace_agent_mesh/gateway/components/gateway_input.py +0 -278
- solace_agent_mesh/gateway/components/gateway_output.py +0 -298
- solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
- solace_agent_mesh/gateway/identity/identity_base.py +0 -10
- solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
- solace_agent_mesh/gateway/identity/no_identity.py +0 -9
- solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
- solace_agent_mesh/monitors/base_monitor_component.py +0 -26
- solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
- solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
- solace_agent_mesh/orchestrator/__init__.py +0 -0
- solace_agent_mesh/orchestrator/action_manager.py +0 -237
- solace_agent_mesh/orchestrator/components/__init__.py +0 -0
- solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
- solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
- solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
- solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
- solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
- solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
- solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
- solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
- solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
- solace_agent_mesh/services/common/__init__.py +0 -4
- solace_agent_mesh/services/common/auto_expiry.py +0 -45
- solace_agent_mesh/services/common/singleton.py +0 -18
- solace_agent_mesh/services/file_service/__init__.py +0 -14
- solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
- solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
- solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
- solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
- solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
- solace_agent_mesh/services/file_service/file_service.py +0 -437
- solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
- solace_agent_mesh/services/file_service/file_transformations.py +0 -141
- solace_agent_mesh/services/file_service/file_utils.py +0 -324
- solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
- solace_agent_mesh/services/history_service/__init__.py +0 -3
- solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
- solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
- solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
- solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
- solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
- solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
- solace_agent_mesh/services/history_service/history_service.py +0 -413
- solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
- solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
- solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
- solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
- solace_agent_mesh/services/middleware_service/__init__.py +0 -0
- solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
- solace_agent_mesh/templates/action.py +0 -38
- solace_agent_mesh/templates/agent.py +0 -29
- solace_agent_mesh/templates/agent.yaml +0 -70
- solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
- solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
- solace_agent_mesh/templates/gateway-flows.yaml +0 -78
- solace_agent_mesh/templates/gateway-header.yaml +0 -16
- solace_agent_mesh/templates/gateway_base.py +0 -15
- solace_agent_mesh/templates/gateway_input.py +0 -98
- solace_agent_mesh/templates/gateway_output.py +0 -71
- solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
- solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
- solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
- solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
- solace_agent_mesh/templates/slack-default-config.yaml +0 -16
- solace_agent_mesh/templates/slack-flows.yaml +0 -81
- solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
- solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
- solace_agent_mesh/templates/web-default-config.yaml +0 -10
- solace_agent_mesh/templates/web-flows.yaml +0 -76
- solace_agent_mesh/tools/__init__.py +0 -0
- solace_agent_mesh/tools/components/__init__.py +0 -0
- solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
- solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
- solace_agent_mesh/tools/config/runtime_config.py +0 -26
- solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
- solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
- solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
- /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
- /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
- {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ADK Tool implementation for delegating tasks to peer A2A agents over Solace.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Any, Dict, Optional, List, Union
|
|
6
|
+
import uuid
|
|
7
|
+
|
|
8
|
+
from google.adk.tools import BaseTool, ToolContext
|
|
9
|
+
from google.genai import types as adk_types
|
|
10
|
+
from solace_ai_connector.common.log import log
|
|
11
|
+
|
|
12
|
+
from ...common.types import (
|
|
13
|
+
Message as A2AMessage,
|
|
14
|
+
TextPart,
|
|
15
|
+
FilePart,
|
|
16
|
+
AgentCard,
|
|
17
|
+
)
|
|
18
|
+
from ...common.constants import DEFAULT_COMMUNICATION_TIMEOUT
|
|
19
|
+
|
|
20
|
+
PEER_TOOL_PREFIX = "peer_"
|
|
21
|
+
CORRELATION_DATA_PREFIX = "a2a_subtask_"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PeerAgentTool(BaseTool):
|
|
25
|
+
"""
|
|
26
|
+
An ADK Tool that represents a discovered peer agent and handles task delegation
|
|
27
|
+
via the A2A protocol over Solace. Uses an asyncio Queue to block and wait for
|
|
28
|
+
the asynchronous response. Handles artifact passthrough from peer responses.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
is_long_running = True
|
|
32
|
+
|
|
33
|
+
def __init__(self, target_agent_name: str, host_component):
|
|
34
|
+
"""
|
|
35
|
+
Initializes the PeerAgentTool.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
target_agent_name: The name of the peer agent this tool represents.
|
|
39
|
+
host_component: A reference to the SamAgentComponent instance.
|
|
40
|
+
"""
|
|
41
|
+
tool_name = f"{PEER_TOOL_PREFIX}{target_agent_name}"
|
|
42
|
+
super().__init__(
|
|
43
|
+
name=tool_name,
|
|
44
|
+
description=f"Delegate tasks to the {target_agent_name} agent.",
|
|
45
|
+
is_long_running=True,
|
|
46
|
+
)
|
|
47
|
+
self.target_agent_name = target_agent_name
|
|
48
|
+
self.host_component = host_component
|
|
49
|
+
self.log_identifier = (
|
|
50
|
+
f"{host_component.log_identifier}[PeerTool:{target_agent_name}]"
|
|
51
|
+
)
|
|
52
|
+
self.sub_task_id: Optional[str] = None
|
|
53
|
+
|
|
54
|
+
def _get_peer_agent_card(self) -> Optional[AgentCard]:
|
|
55
|
+
"""Safely retrieves the AgentCard for the target peer."""
|
|
56
|
+
return self.host_component.peer_agents.get(self.target_agent_name)
|
|
57
|
+
|
|
58
|
+
def _get_declaration(self) -> Optional[adk_types.FunctionDeclaration]:
|
|
59
|
+
"""
|
|
60
|
+
Dynamically generates the FunctionDeclaration based on the peer's AgentCard.
|
|
61
|
+
Returns None if the peer agent is not currently discovered/allowed.
|
|
62
|
+
"""
|
|
63
|
+
agent_card = self._get_peer_agent_card()
|
|
64
|
+
if not agent_card:
|
|
65
|
+
log.warning(
|
|
66
|
+
"%s Peer agent '%s' not found in registry. Tool unavailable.",
|
|
67
|
+
self.log_identifier,
|
|
68
|
+
self.target_agent_name,
|
|
69
|
+
)
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
self.description = (
|
|
73
|
+
agent_card.description
|
|
74
|
+
or f"Interact with the {self.target_agent_name} agent."
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
parameters_schema = adk_types.Schema(
|
|
78
|
+
type=adk_types.Type.OBJECT,
|
|
79
|
+
properties={
|
|
80
|
+
"task_description": adk_types.Schema(
|
|
81
|
+
type=adk_types.Type.STRING,
|
|
82
|
+
description="Detailed description of the task for the peer agent.",
|
|
83
|
+
),
|
|
84
|
+
"user_query": adk_types.Schema(
|
|
85
|
+
type=adk_types.Type.STRING,
|
|
86
|
+
description="The original user query or relevant context.",
|
|
87
|
+
),
|
|
88
|
+
"data_artifacts": adk_types.Schema(
|
|
89
|
+
type=adk_types.Type.ARRAY,
|
|
90
|
+
items=adk_types.Schema(type=adk_types.Type.STRING),
|
|
91
|
+
description="A list of artifact filenames to be sent to the peer agent for context.",
|
|
92
|
+
nullable=True,
|
|
93
|
+
),
|
|
94
|
+
},
|
|
95
|
+
required=["task_description"],
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
log.debug(
|
|
99
|
+
"%s Generated declaration for peer '%s'",
|
|
100
|
+
self.log_identifier,
|
|
101
|
+
self.target_agent_name,
|
|
102
|
+
)
|
|
103
|
+
return adk_types.FunctionDeclaration(
|
|
104
|
+
name=self.name,
|
|
105
|
+
description=self.description,
|
|
106
|
+
parameters=parameters_schema,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
async def _prepare_a2a_parts(
|
|
110
|
+
self, args: Dict[str, Any], tool_context: ToolContext
|
|
111
|
+
) -> List[Union[TextPart, FilePart]]:
|
|
112
|
+
"""
|
|
113
|
+
Prepares the A2A message parts from tool arguments, including text and artifacts.
|
|
114
|
+
"""
|
|
115
|
+
task_description = args.get("task_description", "No description provided.")
|
|
116
|
+
calling_agent_name = self.host_component.agent_name or "Unknown Agent"
|
|
117
|
+
|
|
118
|
+
# Create the multi-agent context message
|
|
119
|
+
context_message = (
|
|
120
|
+
f"You are part of a multi-agent AI platform. The task below is being sent to you by agent '{calling_agent_name}'. "
|
|
121
|
+
f"You must perform this task to the best of your abilities. All artifacts that you create will automatically be "
|
|
122
|
+
f"returned to the calling agent, but you must provide context and description for which artifacts are important "
|
|
123
|
+
f"and how they should be used. Note that the calling agent will not see any of your history - only the text "
|
|
124
|
+
f"that you respond with.\n\n"
|
|
125
|
+
f"Now please execute this task that was given to you:\n\n{task_description}"
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
a2a_message_parts = [TextPart(text=context_message)]
|
|
129
|
+
|
|
130
|
+
artifact_names = args.get("data_artifacts", [])
|
|
131
|
+
if not isinstance(artifact_names, list):
|
|
132
|
+
log.warning(
|
|
133
|
+
"%s 'data_artifacts' argument is not a list, ignoring. Value: %s",
|
|
134
|
+
self.log_identifier,
|
|
135
|
+
artifact_names,
|
|
136
|
+
)
|
|
137
|
+
artifact_names = []
|
|
138
|
+
|
|
139
|
+
if artifact_names:
|
|
140
|
+
log.debug(
|
|
141
|
+
"%s Preparing to include %d artifacts in peer request.",
|
|
142
|
+
self.log_identifier,
|
|
143
|
+
len(artifact_names),
|
|
144
|
+
)
|
|
145
|
+
a2a_context = tool_context.state.get("a2a_context", {})
|
|
146
|
+
for artifact_name in artifact_names:
|
|
147
|
+
try:
|
|
148
|
+
loaded_part = (
|
|
149
|
+
await self.host_component.artifact_service.load_artifact(
|
|
150
|
+
app_name=tool_context._invocation_context.app_name,
|
|
151
|
+
user_id=tool_context._invocation_context.user_id,
|
|
152
|
+
session_id=tool_context._invocation_context.session.id,
|
|
153
|
+
filename=artifact_name,
|
|
154
|
+
version=None,
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
if loaded_part:
|
|
158
|
+
a2a_file_part = await self.host_component._translate_adk_part_to_a2a_filepart(
|
|
159
|
+
loaded_part, artifact_name, a2a_context
|
|
160
|
+
)
|
|
161
|
+
if a2a_file_part:
|
|
162
|
+
a2a_message_parts.append(a2a_file_part)
|
|
163
|
+
log.info(
|
|
164
|
+
"%s Included latest artifact '%s' in peer request.",
|
|
165
|
+
self.log_identifier,
|
|
166
|
+
artifact_name,
|
|
167
|
+
)
|
|
168
|
+
else:
|
|
169
|
+
log.warning(
|
|
170
|
+
"%s Failed to translate loaded artifact '%s' to A2A part. Skipping.",
|
|
171
|
+
self.log_identifier,
|
|
172
|
+
artifact_name,
|
|
173
|
+
)
|
|
174
|
+
else:
|
|
175
|
+
log.warning(
|
|
176
|
+
"%s Could not load artifact '%s' to include in peer request. Skipping.",
|
|
177
|
+
self.log_identifier,
|
|
178
|
+
artifact_name,
|
|
179
|
+
)
|
|
180
|
+
except Exception as e:
|
|
181
|
+
log.exception(
|
|
182
|
+
"%s Error loading artifact '%s' for peer request: %s",
|
|
183
|
+
self.log_identifier,
|
|
184
|
+
artifact_name,
|
|
185
|
+
e,
|
|
186
|
+
)
|
|
187
|
+
return a2a_message_parts
|
|
188
|
+
|
|
189
|
+
async def run_async(
|
|
190
|
+
self, *, args: Dict[str, Any], tool_context: ToolContext
|
|
191
|
+
) -> Any:
|
|
192
|
+
"""
|
|
193
|
+
Handles the delegation of a task to a peer agent in a non-blocking,
|
|
194
|
+
"fire-and-forget" manner suitable for a long-running tool.
|
|
195
|
+
"""
|
|
196
|
+
sub_task_id = f"{CORRELATION_DATA_PREFIX}{uuid.uuid4().hex}"
|
|
197
|
+
log_identifier = f"{self.log_identifier}[SubTask:{sub_task_id}]"
|
|
198
|
+
main_logical_task_id = "unknown_task"
|
|
199
|
+
|
|
200
|
+
try:
|
|
201
|
+
agent_card = self._get_peer_agent_card()
|
|
202
|
+
if not agent_card:
|
|
203
|
+
raise ValueError(
|
|
204
|
+
f"Peer agent '{self.target_agent_name}' not found or unavailable."
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
original_task_context = tool_context.state.get("a2a_context", {})
|
|
208
|
+
main_logical_task_id = original_task_context.get(
|
|
209
|
+
"logical_task_id", "unknown_task"
|
|
210
|
+
)
|
|
211
|
+
original_session_id = tool_context._invocation_context.session.id
|
|
212
|
+
user_id = tool_context._invocation_context.user_id
|
|
213
|
+
user_config = original_task_context.get("a2a_user_config", {})
|
|
214
|
+
|
|
215
|
+
invocation_id = tool_context._invocation_context.invocation_id
|
|
216
|
+
timeout_sec = self.host_component.get_config(
|
|
217
|
+
"inter_agent_communication", {}
|
|
218
|
+
).get("request_timeout_seconds", DEFAULT_COMMUNICATION_TIMEOUT)
|
|
219
|
+
|
|
220
|
+
task_context_obj = None
|
|
221
|
+
with self.host_component.active_tasks_lock:
|
|
222
|
+
task_context_obj = self.host_component.active_tasks.get(
|
|
223
|
+
main_logical_task_id
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
if not task_context_obj:
|
|
227
|
+
raise ValueError(
|
|
228
|
+
f"TaskExecutionContext not found for task '{main_logical_task_id}'"
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
task_context_obj.register_parallel_call_sent(invocation_id)
|
|
232
|
+
log.info(
|
|
233
|
+
"%s Registered parallel call for invocation %s. Current state: %s",
|
|
234
|
+
log_identifier,
|
|
235
|
+
invocation_id,
|
|
236
|
+
task_context_obj.parallel_tool_calls.get(invocation_id),
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
a2a_message_parts = await self._prepare_a2a_parts(args, tool_context)
|
|
240
|
+
a2a_message = A2AMessage(role="user", parts=a2a_message_parts)
|
|
241
|
+
|
|
242
|
+
correlation_data = {
|
|
243
|
+
"adk_function_call_id": tool_context.function_call_id,
|
|
244
|
+
"original_task_context": original_task_context,
|
|
245
|
+
"peer_tool_name": self.name,
|
|
246
|
+
"logical_task_id": main_logical_task_id,
|
|
247
|
+
"invocation_id": invocation_id,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
self.host_component.cache_service.add_data(
|
|
251
|
+
key=sub_task_id,
|
|
252
|
+
value=correlation_data,
|
|
253
|
+
expiry=timeout_sec,
|
|
254
|
+
component=self.host_component,
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
self.host_component.submit_a2a_task(
|
|
258
|
+
target_agent_name=self.target_agent_name,
|
|
259
|
+
a2a_message=a2a_message,
|
|
260
|
+
original_session_id=original_session_id,
|
|
261
|
+
main_logical_task_id=main_logical_task_id,
|
|
262
|
+
user_id=user_id,
|
|
263
|
+
user_config=user_config,
|
|
264
|
+
sub_task_id=sub_task_id,
|
|
265
|
+
function_call_id=tool_context.function_call_id,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
task_context_obj.register_peer_sub_task(
|
|
269
|
+
sub_task_id=sub_task_id, peer_agent_name=self.target_agent_name
|
|
270
|
+
)
|
|
271
|
+
log.info(
|
|
272
|
+
"%s Registered active peer sub-task %s for main task %s.",
|
|
273
|
+
log_identifier,
|
|
274
|
+
sub_task_id,
|
|
275
|
+
main_logical_task_id,
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
log.info(
|
|
279
|
+
"%s Task fired. Returning to unblock ADK framework.",
|
|
280
|
+
log_identifier,
|
|
281
|
+
)
|
|
282
|
+
return None
|
|
283
|
+
|
|
284
|
+
except Exception as e:
|
|
285
|
+
log.exception("%s Error during peer tool execution: %s", log_identifier, e)
|
|
286
|
+
return {
|
|
287
|
+
"status": "error",
|
|
288
|
+
"message": f"Failed to delegate task to peer agent '{self.target_agent_name}': {e}",
|
|
289
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A singleton registry for discovering and holding all BuiltinTool definitions.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Dict, List, Optional
|
|
6
|
+
from .tool_definition import BuiltinTool
|
|
7
|
+
from solace_ai_connector.common.log import log
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class _ToolRegistry:
|
|
11
|
+
def __init__(self):
|
|
12
|
+
self._tools: Dict[str, BuiltinTool] = {}
|
|
13
|
+
|
|
14
|
+
def register(self, tool: BuiltinTool):
|
|
15
|
+
if tool.name in self._tools:
|
|
16
|
+
log.warning("Tool '%s' is already registered. Overwriting.", tool.name)
|
|
17
|
+
self._tools[tool.name] = tool
|
|
18
|
+
|
|
19
|
+
def get_tool_by_name(self, name: str) -> Optional[BuiltinTool]:
|
|
20
|
+
"""Returns a tool by its registered name."""
|
|
21
|
+
return self._tools.get(name)
|
|
22
|
+
|
|
23
|
+
def get_tools_by_category(self, category_name: str) -> List[BuiltinTool]:
|
|
24
|
+
"""Returns a list of all tools belonging to a specific category."""
|
|
25
|
+
return [tool for tool in self._tools.values() if tool.category == category_name]
|
|
26
|
+
|
|
27
|
+
def get_all_tools(self) -> List[BuiltinTool]:
|
|
28
|
+
return list(self._tools.values())
|
|
29
|
+
|
|
30
|
+
def clear(self):
|
|
31
|
+
"""Clears all registered tools. For testing purposes only."""
|
|
32
|
+
self._tools.clear()
|
|
33
|
+
log.debug("Tool registry cleared.")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
tool_registry = _ToolRegistry()
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test-specific ADK Tools.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from typing import Dict, Optional, Any
|
|
7
|
+
|
|
8
|
+
from google.adk.tools import ToolContext
|
|
9
|
+
from solace_ai_connector.common.log import log
|
|
10
|
+
|
|
11
|
+
from google.genai import types as adk_types
|
|
12
|
+
from .tool_definition import BuiltinTool
|
|
13
|
+
from .registry import tool_registry
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
async def time_delay(
|
|
17
|
+
seconds: float,
|
|
18
|
+
tool_context: ToolContext = None,
|
|
19
|
+
tool_config: Optional[Dict[str, Any]] = None,
|
|
20
|
+
) -> Dict[str, any]:
|
|
21
|
+
"""
|
|
22
|
+
Pauses execution for a specified number of seconds.
|
|
23
|
+
Useful for testing timeouts and asynchronous behavior.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
seconds: The duration of the delay in seconds.
|
|
27
|
+
tool_context: The context provided by the ADK framework.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
A dictionary indicating the status and duration of the delay.
|
|
31
|
+
"""
|
|
32
|
+
log_identifier = "[TestTool:time_delay]"
|
|
33
|
+
log.info("%s Requesting delay for %.2f seconds.", log_identifier, seconds)
|
|
34
|
+
|
|
35
|
+
if not tool_context:
|
|
36
|
+
log.warning("%s ToolContext is missing.", log_identifier)
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
if not isinstance(seconds, (int, float)) or seconds < 0:
|
|
40
|
+
log.error(
|
|
41
|
+
"%s Invalid 'seconds' argument: %s. Must be a non-negative number.",
|
|
42
|
+
log_identifier,
|
|
43
|
+
seconds,
|
|
44
|
+
)
|
|
45
|
+
return {
|
|
46
|
+
"status": "error",
|
|
47
|
+
"message": f"Invalid 'seconds' argument: {seconds}. Must be a non-negative number.",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await asyncio.sleep(float(seconds))
|
|
51
|
+
log.info("%s Successfully delayed for %.2f seconds.", log_identifier, seconds)
|
|
52
|
+
return {
|
|
53
|
+
"status": "success",
|
|
54
|
+
"message": f"Delayed for {seconds} seconds.",
|
|
55
|
+
"delayed_seconds": seconds,
|
|
56
|
+
}
|
|
57
|
+
except Exception as e:
|
|
58
|
+
log.exception("%s Error during time_delay: %s", log_identifier, e)
|
|
59
|
+
return {
|
|
60
|
+
"status": "error",
|
|
61
|
+
"message": f"Error during delay: {e}",
|
|
62
|
+
"requested_seconds": seconds,
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
time_delay_tool_def = BuiltinTool(
|
|
67
|
+
name="time_delay",
|
|
68
|
+
implementation=time_delay,
|
|
69
|
+
description="Pauses execution for a specified number of seconds. Useful for testing timeouts and asynchronous behavior.",
|
|
70
|
+
category="test",
|
|
71
|
+
required_scopes=["tool:test:delay"],
|
|
72
|
+
parameters=adk_types.Schema(
|
|
73
|
+
type=adk_types.Type.OBJECT,
|
|
74
|
+
properties={
|
|
75
|
+
"seconds": adk_types.Schema(
|
|
76
|
+
type=adk_types.Type.NUMBER,
|
|
77
|
+
description="The duration of the delay in seconds.",
|
|
78
|
+
),
|
|
79
|
+
},
|
|
80
|
+
required=["seconds"],
|
|
81
|
+
),
|
|
82
|
+
examples=[],
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def always_fail_tool() -> dict:
|
|
87
|
+
"""This tool is designed to always raise an exception for testing error handling."""
|
|
88
|
+
raise ValueError("This tool is designed to fail.")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def dangling_tool_call_test_tool() -> None:
|
|
92
|
+
"""
|
|
93
|
+
This tool is designed to return None, which simulates a silent failure
|
|
94
|
+
where the ADK does not create a function_response, leaving a dangling
|
|
95
|
+
function_call in the history. This is used to test the proactive
|
|
96
|
+
history repair callback ("the suspenders").
|
|
97
|
+
"""
|
|
98
|
+
log.info(
|
|
99
|
+
"[TestTool:dangling_tool_call] Executing and returning None to create a dangling tool call."
|
|
100
|
+
)
|
|
101
|
+
return None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
always_fail_tool_def = BuiltinTool(
|
|
105
|
+
name="always_fail_tool",
|
|
106
|
+
implementation=always_fail_tool,
|
|
107
|
+
description="This tool is designed to always raise an exception for testing error handling.",
|
|
108
|
+
category="test",
|
|
109
|
+
required_scopes=["tool:test:fail"],
|
|
110
|
+
parameters=adk_types.Schema(
|
|
111
|
+
type=adk_types.Type.OBJECT,
|
|
112
|
+
properties={},
|
|
113
|
+
required=[],
|
|
114
|
+
),
|
|
115
|
+
examples=[],
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
dangling_tool_call_test_tool_def = BuiltinTool(
|
|
119
|
+
name="dangling_tool_call_test_tool",
|
|
120
|
+
implementation=dangling_tool_call_test_tool,
|
|
121
|
+
description="A test tool that returns None to create a dangling tool call in the history.",
|
|
122
|
+
category="test",
|
|
123
|
+
required_scopes=["tool:test:dangle"],
|
|
124
|
+
parameters=adk_types.Schema(
|
|
125
|
+
type=adk_types.Type.OBJECT,
|
|
126
|
+
properties={},
|
|
127
|
+
required=[],
|
|
128
|
+
),
|
|
129
|
+
examples=[],
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
tool_registry.register(time_delay_tool_def)
|
|
134
|
+
tool_registry.register(always_fail_tool_def)
|
|
135
|
+
tool_registry.register(dangling_tool_call_test_tool_def)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines the Pydantic model for a self-contained BuiltinTool definition.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Callable, List, Dict, Any, Optional
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
from google.genai import types as adk_types
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class BuiltinTool(BaseModel):
|
|
11
|
+
"""A self-contained, declarative definition for a built-in agent tool."""
|
|
12
|
+
|
|
13
|
+
name: str = Field(..., description="The function name the LLM will call.")
|
|
14
|
+
implementation: Callable = Field(
|
|
15
|
+
..., description="The async Python function that implements the tool."
|
|
16
|
+
)
|
|
17
|
+
description: str = Field(
|
|
18
|
+
...,
|
|
19
|
+
description="High-level description for the LLM to understand the tool's purpose.",
|
|
20
|
+
)
|
|
21
|
+
parameters: adk_types.Schema = Field(
|
|
22
|
+
..., description="The OpenAPI-like schema for the tool's parameters."
|
|
23
|
+
)
|
|
24
|
+
examples: List[Dict[str, Any]] = Field(
|
|
25
|
+
default_factory=list, description="Few-shot examples for the LLM."
|
|
26
|
+
)
|
|
27
|
+
required_scopes: List[str] = Field(
|
|
28
|
+
default_factory=list,
|
|
29
|
+
description="A list of scopes required to execute this tool.",
|
|
30
|
+
)
|
|
31
|
+
category: str = Field(
|
|
32
|
+
default="General",
|
|
33
|
+
description="A category for grouping tools, e.g., 'Artifact', 'Data Analysis'. Used for configuration toggles.",
|
|
34
|
+
)
|
|
35
|
+
initializer: Optional[Callable[[Any, Dict[str, Any]], None]] = Field(
|
|
36
|
+
default=None,
|
|
37
|
+
description="An optional function to initialize the tool or its dependencies.",
|
|
38
|
+
)
|
|
39
|
+
raw_string_args: List[str] = Field(
|
|
40
|
+
default_factory=list,
|
|
41
|
+
description="A list of argument names that should be passed as raw strings without embed pre-resolution.",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
class Config:
|
|
45
|
+
arbitrary_types_allowed = True
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
## Quick Summary
|
|
2
|
+
The `tools` directory contains the complete set of built-in tools available to the agent. It follows a declarative, registry-based pattern where each tool module defines its functions and registers them with a central `tool_registry`. This allows for automatic discovery and dynamic availability of tools based on configuration and agent capabilities. The tools cover a wide range of functionalities including artifact management, audio/image processing, data analysis, web requests, and inter-agent communication.
|
|
3
|
+
|
|
4
|
+
## Files Overview
|
|
5
|
+
- `__init__.py`: Imports all tool modules, triggering their registration with the central registry.
|
|
6
|
+
- `audio_tools.py`: Provides tools for text-to-speech (TTS), multi-speaker TTS, audio concatenation, and transcription.
|
|
7
|
+
- `builtin_artifact_tools.py`: Contains core tools for creating, listing, loading, modifying, and deleting artifacts.
|
|
8
|
+
- `builtin_data_analysis_tools.py`: Offers tools for generating charts from Plotly configurations.
|
|
9
|
+
- `general_agent_tools.py`: Includes general-purpose utilities like file-to-markdown conversion and Mermaid diagram generation.
|
|
10
|
+
- `image_tools.py`: Provides tools for image generation, editing, and vision-based description of images and audio.
|
|
11
|
+
- `peer_agent_tool.py`: Defines the `PeerAgentTool` class for delegating tasks to other agents.
|
|
12
|
+
- `registry.py`: Implements the singleton `tool_registry` for managing all tool definitions.
|
|
13
|
+
- `test_tools.py`: Contains tools specifically for testing agent behavior, such as delays and failures.
|
|
14
|
+
- `tool_definition.py`: Defines the `BuiltinTool` Pydantic model used for declaring tools.
|
|
15
|
+
- `web_tools.py`: Contains a tool for making HTTP requests to external web resources.
|
|
16
|
+
|
|
17
|
+
## Developer API Reference
|
|
18
|
+
|
|
19
|
+
### __init__.py
|
|
20
|
+
**Purpose:** This file ensures that all built-in tool modules are imported when the `tools` package is loaded. This is crucial for the declarative tool registration pattern, as it triggers the `tool_registry.register()` calls within each tool module.
|
|
21
|
+
**Import:** `import src.solace_agent_mesh.agent.tools`
|
|
22
|
+
|
|
23
|
+
**Usage Examples:**
|
|
24
|
+
```python
|
|
25
|
+
# Importing the tools package is sufficient to register all built-in tools.
|
|
26
|
+
import src.solace_agent_mesh.agent.tools
|
|
27
|
+
|
|
28
|
+
# You can then access the registry to see all registered tools.
|
|
29
|
+
from src.solace_agent_mesh.agent.tools.registry import tool_registry
|
|
30
|
+
all_tools = tool_registry.get_all_tools()
|
|
31
|
+
print(f"Registered {len(all_tools)} tools.")
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### audio_tools.py
|
|
35
|
+
**Purpose:** This file provides a collection of tools for audio processing, including text-to-speech (TTS) generation, audio concatenation, and transcription.
|
|
36
|
+
**Import:** `from src.solace_agent_mesh.agent.tools.audio_tools import select_voice, text_to_speech, multi_speaker_text_to_speech, concatenate_audio, transcribe_audio`
|
|
37
|
+
|
|
38
|
+
**Functions:**
|
|
39
|
+
- `select_voice(gender: Optional[str] = None, tone: Optional[str] = None, exclude_voices: Optional[List[str]] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Selects a suitable voice name based on criteria like gender and tone. Use this to get a consistent voice name that can be passed to the `text_to_speech` tool for multiple calls.
|
|
40
|
+
- `text_to_speech(text: str, output_filename: Optional[str] = None, voice_name: Optional[str] = None, gender: Optional[str] = None, tone: Optional[str] = None, language: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Converts text to speech using Gemini TTS API and saves as an MP3 artifact.
|
|
41
|
+
- `multi_speaker_text_to_speech(conversation_text: str, output_filename: Optional[str] = None, speaker_configs: Optional[List[Dict[str, str]]] = None, language: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Converts conversation text with speaker labels to speech using multiple voices.
|
|
42
|
+
- `concatenate_audio(clips_to_join: List[Dict[str, Any]], output_filename: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Combines multiple audio artifacts in a specified order into a single audio file, with optional pauses.
|
|
43
|
+
- `transcribe_audio(audio_filename: str, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Transcribes an audio recording using an OpenAI-compatible audio transcription API.
|
|
44
|
+
|
|
45
|
+
**Constants/Variables:**
|
|
46
|
+
- `ALL_AVAILABLE_VOICES: List[str]` - A list of all available voice names for TTS.
|
|
47
|
+
- `SUPPORTED_LANGUAGES: Dict[str, str]` - A mapping of common language names to their BCP-47 codes.
|
|
48
|
+
- `VOICE_TONE_MAPPING: Dict[str, List[str]]` - A dictionary mapping descriptive tones to lists of voice names.
|
|
49
|
+
- `GENDER_TO_VOICE_MAPPING: Dict[str, List[str]]` - A dictionary mapping genders ('male', 'female', 'neutral') to lists of voice names.
|
|
50
|
+
|
|
51
|
+
**Usage Examples:**
|
|
52
|
+
```python
|
|
53
|
+
# Assume 'tool_context' is a valid ToolContext object.
|
|
54
|
+
|
|
55
|
+
# 1. Generate a simple audio file
|
|
56
|
+
tts_result = await text_to_speech(
|
|
57
|
+
text="Welcome to the developer guide.",
|
|
58
|
+
output_filename="welcome.mp3",
|
|
59
|
+
gender="female",
|
|
60
|
+
tone="friendly",
|
|
61
|
+
language="en-US",
|
|
62
|
+
tool_context=tool_context
|
|
63
|
+
)
|
|
64
|
+
print(tts_result)
|
|
65
|
+
|
|
66
|
+
# 2. Generate a multi-speaker conversation
|
|
67
|
+
convo_result = await multi_speaker_text_to_speech(
|
|
68
|
+
conversation_text="SpeakerA: How are you?\nSpeakerB: I am fine, thank you.",
|
|
69
|
+
speaker_configs=[
|
|
70
|
+
{"name": "SpeakerA", "gender": "male", "tone": "warm"},
|
|
71
|
+
{"name": "SpeakerB", "gender": "female", "tone": "bright"}
|
|
72
|
+
],
|
|
73
|
+
output_filename="dialogue.mp3",
|
|
74
|
+
tool_context=tool_context
|
|
75
|
+
)
|
|
76
|
+
print(convo_result)
|
|
77
|
+
|
|
78
|
+
# 3. Concatenate the generated audio files
|
|
79
|
+
concat_result = await concatenate_audio(
|
|
80
|
+
clips_to_join=[
|
|
81
|
+
{"filename": "welcome.mp3:1", "pause_after_ms": 500},
|
|
82
|
+
{"filename": "dialogue.mp3:1"}
|
|
83
|
+
],
|
|
84
|
+
output_filename="combined_audio.mp3",
|
|
85
|
+
tool_context=tool_context
|
|
86
|
+
)
|
|
87
|
+
print(concat_result)
|
|
88
|
+
|
|
89
|
+
# 4. Transcribe the combined audio
|
|
90
|
+
transcribe_result = await transcribe_audio(
|
|
91
|
+
audio_filename="combined_audio.mp3:1",
|
|
92
|
+
tool_context=tool_context
|
|
93
|
+
)
|
|
94
|
+
print(transcribe_result)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### builtin_artifact_tools.py
|
|
98
|
+
**Purpose:** This file provides the core tools for artifact management, allowing the agent to create, read, list, update, and delete data artifacts within the current session.
|
|
99
|
+
**Import:** `from src.solace_agent_mesh.agent.tools.builtin_artifact_tools import list_artifacts, load_artifact, signal_artifact_for_return, append_to_artifact, apply_embed_and_create_artifact, extract_content_from_artifact, delete_artifact`
|
|
100
|
+
|
|
101
|
+
**Functions:**
|
|
102
|
+
- `list_artifacts(tool_context: ToolContext = None) -> Dict[str, Any]` - Lists all available data artifact filenames and their versions for the current session.
|
|
103
|
+
- `load_artifact(filename: str, version: int, load_metadata_only: bool = False, max_content_length: Optional[int] = None, tool_context: ToolContext = None) -> Dict[str, Any]` - Loads the content or metadata of a specific artifact version.
|
|
104
|
+
- `signal_artifact_for_return(filename: str, version: int, tool_context: ToolContext = None
|