solace-agent-mesh 1.11.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- solace_agent_mesh/__init__.py +0 -0
- solace_agent_mesh/agent/__init__.py +0 -0
- solace_agent_mesh/agent/adk/__init__.py +0 -0
- solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
- solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
- solace_agent_mesh/agent/adk/callbacks.py +2318 -0
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
- solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
- solace_agent_mesh/agent/adk/runner.py +390 -0
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +468 -0
- solace_agent_mesh/agent/adk/setup.py +1325 -0
- solace_agent_mesh/agent/adk/stream_parser.py +415 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
- solace_agent_mesh/agent/agent_llm.txt +369 -0
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/__init__.py +0 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
- solace_agent_mesh/agent/proxies/__init__.py +0 -0
- solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
- solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
- solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
- solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
- solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/base/app.py +100 -0
- solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
- solace_agent_mesh/agent/proxies/base/component.py +816 -0
- solace_agent_mesh/agent/proxies/base/config.py +85 -0
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
- solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
- solace_agent_mesh/agent/sac/__init__.py +0 -0
- solace_agent_mesh/agent/sac/app.py +595 -0
- solace_agent_mesh/agent/sac/component.py +3668 -0
- solace_agent_mesh/agent/sac/patch_adk.py +103 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +415 -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 +58 -0
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
- solace_agent_mesh/agent/tools/__init__.py +16 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
- solace_agent_mesh/agent/tools/image_tools.py +1185 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
- solace_agent_mesh/agent/tools/registry.py +38 -0
- solace_agent_mesh/agent/tools/test_tools.py +136 -0
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
- solace_agent_mesh/agent/tools/tool_definition.py +53 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
- solace_agent_mesh/agent/tools/web_tools.py +392 -0
- solace_agent_mesh/agent/utils/__init__.py +0 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
- solace_agent_mesh/agent/utils/config_parser.py +49 -0
- solace_agent_mesh/agent/utils/context_helpers.py +77 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.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/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.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/15ba94aa.92fea363.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.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/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
- solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.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/3a6c6137.f5940cfa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.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/509e993c.a1fbf45a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.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/5c2bd65f.90a87880.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.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/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.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/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.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/8024126c.fa0e7186.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.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.5d015485.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.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.6c1dbf0c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.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/9bb13469.b2333011.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +144 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +247 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +184 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -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/sam-enterprise-credentials.png +0 -0
- solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1765810064709.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 -0
- solace_agent_mesh/cli/commands/__init__.py +0 -0
- 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 +729 -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 +102 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -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 +119 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
- solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +215 -0
- solace_agent_mesh/cli/main.py +52 -0
- solace_agent_mesh/cli/utils.py +262 -0
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a/__init__.py +241 -0
- solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
- solace_agent_mesh/common/a2a/artifact.py +368 -0
- solace_agent_mesh/common/a2a/events.py +213 -0
- solace_agent_mesh/common/a2a/message.py +375 -0
- solace_agent_mesh/common/a2a/protocol.py +689 -0
- solace_agent_mesh/common/a2a/task.py +127 -0
- solace_agent_mesh/common/a2a/translation.py +655 -0
- solace_agent_mesh/common/a2a/types.py +55 -0
- solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
- solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
- solace_agent_mesh/common/agent_registry.py +122 -0
- solace_agent_mesh/common/common_llm.txt +230 -0
- solace_agent_mesh/common/common_llm_detail.txt +2562 -0
- solace_agent_mesh/common/constants.py +6 -0
- solace_agent_mesh/common/data_parts.py +150 -0
- solace_agent_mesh/common/exceptions.py +49 -0
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +132 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
- solace_agent_mesh/common/middleware/registry.py +127 -0
- solace_agent_mesh/common/oauth/__init__.py +17 -0
- solace_agent_mesh/common/oauth/oauth_client.py +408 -0
- solace_agent_mesh/common/oauth/utils.py +50 -0
- solace_agent_mesh/common/sac/__init__.py +0 -0
- solace_agent_mesh/common/sac/sac_llm.txt +71 -0
- solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
- solace_agent_mesh/common/sac/sam_component_base.py +730 -0
- solace_agent_mesh/common/sam_events/__init__.py +9 -0
- solace_agent_mesh/common/sam_events/event_service.py +208 -0
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +164 -0
- solace_agent_mesh/common/services/identity_service.py +134 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
- solace_agent_mesh/common/services/services_llm.txt +368 -0
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/artifact_utils.py +31 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +56 -0
- solace_agent_mesh/common/utils/embeds/converter.py +447 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
- solace_agent_mesh/common/utils/embeds/types.py +23 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/initializer.py +52 -0
- solace_agent_mesh/common/utils/log_formatters.py +64 -0
- solace_agent_mesh/common/utils/message_utils.py +80 -0
- solace_agent_mesh/common/utils/mime_helpers.py +172 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
- solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
- solace_agent_mesh/common/utils/rbac_utils.py +69 -0
- solace_agent_mesh/common/utils/templates/__init__.py +8 -0
- solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
- solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
- solace_agent_mesh/common/utils/type_utils.py +28 -0
- solace_agent_mesh/common/utils/utils_llm.txt +335 -0
- solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
- solace_agent_mesh/config_portal/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/common.py +77 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
- solace_agent_mesh/config_portal/backend/server.py +644 -0
- solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
- solace_agent_mesh/core_a2a/service.py +307 -0
- solace_agent_mesh/evaluation/__init__.py +0 -0
- solace_agent_mesh/evaluation/evaluator.py +691 -0
- solace_agent_mesh/evaluation/message_organizer.py +553 -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 +970 -0
- solace_agent_mesh/evaluation/report_generator.py +607 -0
- solace_agent_mesh/evaluation/run.py +954 -0
- solace_agent_mesh/evaluation/shared/__init__.py +92 -0
- solace_agent_mesh/evaluation/shared/constants.py +47 -0
- solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
- solace_agent_mesh/evaluation/shared/helpers.py +35 -0
- solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
- solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
- solace_agent_mesh/evaluation/subscriber.py +776 -0
- solace_agent_mesh/evaluation/summary_builder.py +880 -0
- solace_agent_mesh/gateway/__init__.py +0 -0
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +143 -0
- solace_agent_mesh/gateway/adapter/types.py +221 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +345 -0
- solace_agent_mesh/gateway/base/base_llm.txt +226 -0
- solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
- solace_agent_mesh/gateway/base/component.py +2030 -0
- solace_agent_mesh/gateway/base/task_context.py +75 -0
- solace_agent_mesh/gateway/gateway_llm.txt +369 -0
- solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +727 -0
- solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
- solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
- solace_agent_mesh/gateway/http_sse/app.py +351 -0
- solace_agent_mesh/gateway/http_sse/component.py +2360 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
- solace_agent_mesh/gateway/http_sse/main.py +789 -0
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +66 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
- solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
- solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +308 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +15 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +133 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
- solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
- solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
- solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
- solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
- solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
- solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
- solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
- solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
- solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
- solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
- solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
- solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
- solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
- solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
- solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
- solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -0
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +18 -0
- solace_agent_mesh/services/platform/alembic/env.py +85 -0
- solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
- solace_agent_mesh/services/platform/alembic.ini +109 -0
- solace_agent_mesh/services/platform/api/__init__.py +3 -0
- solace_agent_mesh/services/platform/api/dependencies.py +147 -0
- solace_agent_mesh/services/platform/api/main.py +280 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
- solace_agent_mesh/services/platform/app.py +114 -0
- solace_agent_mesh/services/platform/component.py +235 -0
- solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -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 +75 -0
- solace_agent_mesh/templates/gateway_component_template.py +484 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +66 -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 +60 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
- solace_agent_mesh/templates/plugin_readme_template.md +12 -0
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +112 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +177 -0
- solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
- solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
- solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
- solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
- solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Built-in ADK Tools for Data Analysis (SQL, JQ, Plotly).
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import json
|
|
7
|
+
from typing import Any, Dict, Tuple, Optional, Literal
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
import yaml
|
|
12
|
+
|
|
13
|
+
PYYAML_AVAILABLE = True
|
|
14
|
+
except ImportError:
|
|
15
|
+
PYYAML_AVAILABLE = False
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import plotly.io as pio
|
|
19
|
+
import plotly.graph_objects as go
|
|
20
|
+
|
|
21
|
+
PLOTLY_AVAILABLE = True
|
|
22
|
+
try:
|
|
23
|
+
import kaleido
|
|
24
|
+
|
|
25
|
+
KALEIDO_AVAILABLE = True
|
|
26
|
+
except ImportError:
|
|
27
|
+
KALEIDO_AVAILABLE = False
|
|
28
|
+
except ImportError:
|
|
29
|
+
PLOTLY_AVAILABLE = False
|
|
30
|
+
KALEIDO_AVAILABLE = False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
from google.adk.tools import ToolContext
|
|
34
|
+
from google.genai import types as adk_types
|
|
35
|
+
|
|
36
|
+
from ...agent.utils.artifact_helpers import (
|
|
37
|
+
ensure_correct_extension,
|
|
38
|
+
save_artifact_with_metadata,
|
|
39
|
+
DEFAULT_SCHEMA_MAX_KEYS,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
from ...agent.utils.context_helpers import get_original_session_id
|
|
43
|
+
|
|
44
|
+
from .tool_definition import BuiltinTool
|
|
45
|
+
from .registry import tool_registry
|
|
46
|
+
|
|
47
|
+
log = logging.getLogger(__name__)
|
|
48
|
+
|
|
49
|
+
CATEGORY_NAME = "Data Analysis"
|
|
50
|
+
CATEGORY_DESCRIPTION = "Create static chart images from data in JSON or YAML format."
|
|
51
|
+
|
|
52
|
+
async def create_chart_from_plotly_config(
|
|
53
|
+
config_content: str,
|
|
54
|
+
config_format: Literal["json", "yaml"],
|
|
55
|
+
output_filename: str,
|
|
56
|
+
output_format: Optional[str] = "png",
|
|
57
|
+
tool_context: ToolContext = None,
|
|
58
|
+
) -> Dict[str, Any]:
|
|
59
|
+
"""
|
|
60
|
+
Generates a static chart image from a Plotly configuration provided as a string.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
config_content: The Plotly configuration (JSON or YAML) as a string.
|
|
64
|
+
config_format: The format of the config_content ('json' or 'yaml').
|
|
65
|
+
output_filename: The desired filename for the output image artifact.
|
|
66
|
+
output_format: The desired image format ('png', 'jpg', 'svg', 'pdf', etc.). Default 'png'.
|
|
67
|
+
tool_context: The context provided by the ADK framework.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
A dictionary with status and output artifact details.
|
|
71
|
+
"""
|
|
72
|
+
if not tool_context:
|
|
73
|
+
return {"status": "error", "message": "ToolContext is missing."}
|
|
74
|
+
if not PLOTLY_AVAILABLE:
|
|
75
|
+
return {
|
|
76
|
+
"status": "error",
|
|
77
|
+
"message": "The plotly library is required for chart generation but it is not installed.",
|
|
78
|
+
}
|
|
79
|
+
if not KALEIDO_AVAILABLE:
|
|
80
|
+
return {
|
|
81
|
+
"status": "error",
|
|
82
|
+
"message": "The kaleido library is required for chart generation but it is not installed.",
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
log_identifier = f"[DataTool:create_chart:{output_filename}]"
|
|
86
|
+
log.info(
|
|
87
|
+
"%s Processing request to create chart '%s' from %s config.",
|
|
88
|
+
log_identifier,
|
|
89
|
+
output_filename,
|
|
90
|
+
config_format,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
plotly_config_dict: Dict
|
|
95
|
+
if config_format == "json":
|
|
96
|
+
try:
|
|
97
|
+
plotly_config_dict = json.loads(config_content)
|
|
98
|
+
except json.JSONDecodeError as parse_err:
|
|
99
|
+
raise ValueError(
|
|
100
|
+
f"Failed to parse Plotly config as JSON: {parse_err}"
|
|
101
|
+
) from parse_err
|
|
102
|
+
elif config_format == "yaml":
|
|
103
|
+
try:
|
|
104
|
+
plotly_config_dict = yaml.safe_load(config_content)
|
|
105
|
+
if not isinstance(plotly_config_dict, dict):
|
|
106
|
+
raise ValueError("YAML content did not parse into a dictionary.")
|
|
107
|
+
except yaml.YAMLError as parse_err:
|
|
108
|
+
raise ValueError(
|
|
109
|
+
f"Failed to parse Plotly config as YAML: {parse_err}"
|
|
110
|
+
) from parse_err
|
|
111
|
+
else:
|
|
112
|
+
raise ValueError(
|
|
113
|
+
f"Invalid config_format: {config_format}. Expected 'json' or 'yaml'."
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
fig = go.Figure(plotly_config_dict)
|
|
118
|
+
except Exception as fig_err:
|
|
119
|
+
raise ValueError(
|
|
120
|
+
f"Failed to create Plotly figure from config: {fig_err}"
|
|
121
|
+
) from fig_err
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
image_bytes = pio.to_image(fig, format=output_format, engine="kaleido")
|
|
125
|
+
log.info(
|
|
126
|
+
"%s Successfully generated %s image bytes using Kaleido.",
|
|
127
|
+
log_identifier,
|
|
128
|
+
output_format,
|
|
129
|
+
)
|
|
130
|
+
except Exception as img_err:
|
|
131
|
+
raise ValueError(
|
|
132
|
+
f"Failed to generate {output_format} image using Plotly/Kaleido: {img_err}. Ensure 'kaleido' package is installed and functional."
|
|
133
|
+
) from img_err
|
|
134
|
+
|
|
135
|
+
mime_map = {
|
|
136
|
+
"png": "image/png",
|
|
137
|
+
"jpg": "image/jpeg",
|
|
138
|
+
"jpeg": "image/jpeg",
|
|
139
|
+
"webp": "image/webp",
|
|
140
|
+
"svg": "image/svg+xml",
|
|
141
|
+
"pdf": "application/pdf",
|
|
142
|
+
"eps": "application/postscript",
|
|
143
|
+
}
|
|
144
|
+
output_mime_type = mime_map.get(output_format.lower(), f"image/{output_format}")
|
|
145
|
+
|
|
146
|
+
inv_context = tool_context._invocation_context
|
|
147
|
+
artifact_service = inv_context.artifact_service
|
|
148
|
+
if not artifact_service:
|
|
149
|
+
raise ValueError("ArtifactService is not available in the context.")
|
|
150
|
+
host_component = getattr(inv_context.agent, "host_component", None)
|
|
151
|
+
schema_max_keys = (
|
|
152
|
+
host_component.get_config("schema_max_keys", DEFAULT_SCHEMA_MAX_KEYS)
|
|
153
|
+
if host_component
|
|
154
|
+
else DEFAULT_SCHEMA_MAX_KEYS
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
final_output_filename = ensure_correct_extension(output_filename, output_format)
|
|
158
|
+
|
|
159
|
+
save_metadata_dict = {
|
|
160
|
+
"description": f"Chart generated from Plotly config ({config_format})",
|
|
161
|
+
"source_format": config_format,
|
|
162
|
+
}
|
|
163
|
+
save_result = await save_artifact_with_metadata(
|
|
164
|
+
artifact_service=artifact_service,
|
|
165
|
+
app_name=inv_context.app_name,
|
|
166
|
+
user_id=inv_context.user_id,
|
|
167
|
+
session_id=get_original_session_id(inv_context),
|
|
168
|
+
filename=final_output_filename,
|
|
169
|
+
content_bytes=image_bytes,
|
|
170
|
+
mime_type=output_mime_type,
|
|
171
|
+
metadata_dict=save_metadata_dict,
|
|
172
|
+
timestamp=datetime.now(timezone.utc),
|
|
173
|
+
schema_max_keys=schema_max_keys,
|
|
174
|
+
tool_context=tool_context,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
if save_result["status"] == "error":
|
|
178
|
+
raise IOError(
|
|
179
|
+
f"Failed to save chart image artifact: {save_result.get('message', 'Unknown error')}"
|
|
180
|
+
)
|
|
181
|
+
log.info(
|
|
182
|
+
"%s Successfully created chart artifact '%s' v%d.",
|
|
183
|
+
log_identifier,
|
|
184
|
+
final_output_filename,
|
|
185
|
+
save_result["data_version"],
|
|
186
|
+
)
|
|
187
|
+
return {
|
|
188
|
+
"status": "success",
|
|
189
|
+
"message": f"Chart image '{final_output_filename}' v{save_result['data_version']} created successfully.",
|
|
190
|
+
"output_filename": final_output_filename,
|
|
191
|
+
"output_version": save_result["data_version"],
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
except ValueError as e:
|
|
195
|
+
log.warning("%s Value error: %s", log_identifier, e)
|
|
196
|
+
return {"status": "error", "message": str(e)}
|
|
197
|
+
except ImportError as e:
|
|
198
|
+
log.warning("%s Missing library error: %s", log_identifier, e)
|
|
199
|
+
return {"status": "error", "message": str(e)}
|
|
200
|
+
except Exception as e:
|
|
201
|
+
log.exception(
|
|
202
|
+
"%s Unexpected error in create_chart_from_plotly_config: %s",
|
|
203
|
+
log_identifier,
|
|
204
|
+
e,
|
|
205
|
+
)
|
|
206
|
+
return {"status": "error", "message": f"An unexpected error occurred: {e}"}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
create_chart_from_plotly_config_tool_def = BuiltinTool(
|
|
210
|
+
name="create_chart_from_plotly_config",
|
|
211
|
+
implementation=create_chart_from_plotly_config,
|
|
212
|
+
description="Generates a static chart image (PNG, JPG, SVG, PDF) from a Plotly configuration provided directly as a JSON or YAML string in `config_content`. Specify the format of the string in `config_format` and the desired output filename and image format.",
|
|
213
|
+
category="data_analysis",
|
|
214
|
+
category_name=CATEGORY_NAME,
|
|
215
|
+
category_description=CATEGORY_DESCRIPTION,
|
|
216
|
+
required_scopes=["tool:data:chart"],
|
|
217
|
+
parameters=adk_types.Schema(
|
|
218
|
+
type=adk_types.Type.OBJECT,
|
|
219
|
+
properties={
|
|
220
|
+
"config_content": adk_types.Schema(
|
|
221
|
+
type=adk_types.Type.STRING,
|
|
222
|
+
description="The Plotly configuration (JSON or YAML) as a string.",
|
|
223
|
+
),
|
|
224
|
+
"config_format": adk_types.Schema(
|
|
225
|
+
type=adk_types.Type.STRING,
|
|
226
|
+
description="The format of the config_content ('json' or 'yaml').",
|
|
227
|
+
enum=["json", "yaml"],
|
|
228
|
+
),
|
|
229
|
+
"output_filename": adk_types.Schema(
|
|
230
|
+
type=adk_types.Type.STRING,
|
|
231
|
+
description="The desired filename for the output image artifact.",
|
|
232
|
+
),
|
|
233
|
+
"output_format": adk_types.Schema(
|
|
234
|
+
type=adk_types.Type.STRING,
|
|
235
|
+
description="The desired image format ('png', 'jpg', 'svg', 'pdf', etc.). Defaults to 'png'.",
|
|
236
|
+
nullable=True,
|
|
237
|
+
),
|
|
238
|
+
},
|
|
239
|
+
required=["config_content", "config_format", "output_filename"],
|
|
240
|
+
),
|
|
241
|
+
examples=[],
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
tool_registry.register(create_chart_from_plotly_config_tool_def)
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines the base classes and helpers for "dynamic" tools.
|
|
3
|
+
Dynamic tools allow for programmatic definition of tool names, descriptions,
|
|
4
|
+
and parameter schemas, offering more flexibility than standard Python tools.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from typing import (
|
|
10
|
+
Optional,
|
|
11
|
+
List,
|
|
12
|
+
Callable,
|
|
13
|
+
Dict,
|
|
14
|
+
Any,
|
|
15
|
+
get_origin,
|
|
16
|
+
get_args,
|
|
17
|
+
Union,
|
|
18
|
+
Literal,
|
|
19
|
+
TYPE_CHECKING,
|
|
20
|
+
Type,
|
|
21
|
+
)
|
|
22
|
+
import inspect
|
|
23
|
+
|
|
24
|
+
from pydantic import BaseModel
|
|
25
|
+
from google.adk.tools import BaseTool, ToolContext
|
|
26
|
+
from google.genai import types as adk_types
|
|
27
|
+
|
|
28
|
+
from solace_agent_mesh.agent.utils.context_helpers import get_original_session_id
|
|
29
|
+
|
|
30
|
+
from ...common.utils.embeds import (
|
|
31
|
+
resolve_embeds_in_string,
|
|
32
|
+
evaluate_embed,
|
|
33
|
+
EARLY_EMBED_TYPES,
|
|
34
|
+
LATE_EMBED_TYPES,
|
|
35
|
+
EMBED_DELIMITER_OPEN,
|
|
36
|
+
)
|
|
37
|
+
from ...common.utils.embeds.types import ResolutionMode
|
|
38
|
+
|
|
39
|
+
log = logging.getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
if TYPE_CHECKING:
|
|
42
|
+
from ..sac.component import SamAgentComponent
|
|
43
|
+
from .tool_config_types import AnyToolConfig
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# --- Base Class for Programmatic Tools ---
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DynamicTool(BaseTool, ABC):
|
|
50
|
+
"""
|
|
51
|
+
Base class for dynamic tools that can define their own function names,
|
|
52
|
+
descriptions, and parameter schemas programmatically.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
config_model: Optional[Type[BaseModel]] = None
|
|
56
|
+
|
|
57
|
+
def __init__(self, tool_config: Optional[Union[dict, BaseModel]] = None):
|
|
58
|
+
# Initialize with placeholder values, will be overridden by properties
|
|
59
|
+
super().__init__(
|
|
60
|
+
name="dynamic_tool_placeholder", description="dynamic_tool_placeholder"
|
|
61
|
+
)
|
|
62
|
+
self.tool_config = tool_config or {}
|
|
63
|
+
|
|
64
|
+
async def init(
|
|
65
|
+
self, component: "SamAgentComponent", tool_config: "AnyToolConfig"
|
|
66
|
+
) -> None:
|
|
67
|
+
"""
|
|
68
|
+
(Optional) Asynchronously initializes resources for the tool.
|
|
69
|
+
This method is called once when the agent starts up.
|
|
70
|
+
The `component` provides access to agent-wide state, and `tool_config`
|
|
71
|
+
is the validated Pydantic model instance if `config_model` is defined.
|
|
72
|
+
"""
|
|
73
|
+
pass
|
|
74
|
+
|
|
75
|
+
async def cleanup(
|
|
76
|
+
self, component: "SamAgentComponent", tool_config: "AnyToolConfig"
|
|
77
|
+
) -> None:
|
|
78
|
+
"""
|
|
79
|
+
(Optional) Asynchronously cleans up resources used by the tool.
|
|
80
|
+
This method is called once when the agent is shutting down.
|
|
81
|
+
"""
|
|
82
|
+
pass
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
@abstractmethod
|
|
86
|
+
def tool_name(self) -> str:
|
|
87
|
+
"""Return the function name that the LLM will call."""
|
|
88
|
+
pass
|
|
89
|
+
|
|
90
|
+
@property
|
|
91
|
+
@abstractmethod
|
|
92
|
+
def tool_description(self) -> str:
|
|
93
|
+
"""Return the description of what this tool does."""
|
|
94
|
+
pass
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
@abstractmethod
|
|
98
|
+
def parameters_schema(self) -> adk_types.Schema:
|
|
99
|
+
"""Return the ADK Schema defining the tool's parameters."""
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def raw_string_args(self) -> List[str]:
|
|
104
|
+
"""
|
|
105
|
+
Return a list of argument names that should not have embeds resolved.
|
|
106
|
+
Subclasses can override this property.
|
|
107
|
+
"""
|
|
108
|
+
return []
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def resolution_type(self) -> Literal["early", "all"]:
|
|
112
|
+
"""
|
|
113
|
+
Determines which embeds to resolve. 'early' resolves simple embeds like
|
|
114
|
+
math and uuid. 'all' also resolves 'artifact_content'.
|
|
115
|
+
Defaults to 'early'.
|
|
116
|
+
"""
|
|
117
|
+
return "early"
|
|
118
|
+
|
|
119
|
+
def _get_declaration(self) -> Optional[Any]:
|
|
120
|
+
"""
|
|
121
|
+
Generate the FunctionDeclaration for this dynamic tool.
|
|
122
|
+
This follows the same pattern as PeerAgentTool and MCP tools.
|
|
123
|
+
"""
|
|
124
|
+
# Update the tool name to match what the module defines
|
|
125
|
+
self.name = self.tool_name
|
|
126
|
+
|
|
127
|
+
return adk_types.FunctionDeclaration(
|
|
128
|
+
name=self.tool_name,
|
|
129
|
+
description=self.tool_description,
|
|
130
|
+
parameters=self.parameters_schema,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
async def run_async(
|
|
134
|
+
self, *, args: Dict[str, Any], tool_context: ToolContext
|
|
135
|
+
) -> Dict[str, Any]:
|
|
136
|
+
"""
|
|
137
|
+
Asynchronously runs the tool with the given arguments.
|
|
138
|
+
This method resolves embeds in arguments and then delegates the call
|
|
139
|
+
to the abstract _run_async_impl.
|
|
140
|
+
"""
|
|
141
|
+
log_identifier = f"[DynamicTool:{self.tool_name}]"
|
|
142
|
+
resolved_kwargs = args.copy()
|
|
143
|
+
|
|
144
|
+
types_to_resolve = EARLY_EMBED_TYPES
|
|
145
|
+
if self.resolution_type == "all":
|
|
146
|
+
types_to_resolve = EARLY_EMBED_TYPES.union(LATE_EMBED_TYPES)
|
|
147
|
+
|
|
148
|
+
# Unlike ADKToolWrapper, DynamicTools receive all args in a single dict.
|
|
149
|
+
# We iterate through this dict to resolve embeds.
|
|
150
|
+
for key, value in args.items():
|
|
151
|
+
if key in self.raw_string_args and isinstance(value, str):
|
|
152
|
+
log.debug(
|
|
153
|
+
"%s Skipping embed resolution for raw string kwarg '%s'",
|
|
154
|
+
log_identifier,
|
|
155
|
+
key,
|
|
156
|
+
)
|
|
157
|
+
elif isinstance(value, str) and EMBED_DELIMITER_OPEN in value:
|
|
158
|
+
log.debug("%s Resolving embeds for kwarg '%s'", log_identifier, key)
|
|
159
|
+
# Create the resolution context
|
|
160
|
+
if hasattr(tool_context, "_invocation_context"):
|
|
161
|
+
# Use the invocation context if available
|
|
162
|
+
invocation_context = tool_context._invocation_context
|
|
163
|
+
else:
|
|
164
|
+
# Error if no invocation context is found
|
|
165
|
+
raise RuntimeError(
|
|
166
|
+
f"{log_identifier} No invocation context found in ToolContext. Cannot resolve embeds."
|
|
167
|
+
)
|
|
168
|
+
session_context = invocation_context.session
|
|
169
|
+
if not session_context:
|
|
170
|
+
raise RuntimeError(
|
|
171
|
+
f"{log_identifier} No session context found in invocation context. Cannot resolve embeds."
|
|
172
|
+
)
|
|
173
|
+
resolution_context = {
|
|
174
|
+
"artifact_service": invocation_context.artifact_service,
|
|
175
|
+
"session_context": {
|
|
176
|
+
"session_id": get_original_session_id(invocation_context),
|
|
177
|
+
"user_id": session_context.user_id,
|
|
178
|
+
"app_name": session_context.app_name,
|
|
179
|
+
},
|
|
180
|
+
}
|
|
181
|
+
resolved_value, _, _ = await resolve_embeds_in_string(
|
|
182
|
+
text=value,
|
|
183
|
+
context=resolution_context,
|
|
184
|
+
resolver_func=evaluate_embed,
|
|
185
|
+
types_to_resolve=types_to_resolve,
|
|
186
|
+
resolution_mode=ResolutionMode.TOOL_PARAMETER,
|
|
187
|
+
log_identifier=log_identifier,
|
|
188
|
+
config=self.tool_config,
|
|
189
|
+
)
|
|
190
|
+
resolved_kwargs[key] = resolved_value
|
|
191
|
+
|
|
192
|
+
return await self._run_async_impl(
|
|
193
|
+
args=resolved_kwargs, tool_context=tool_context, credential=None
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
@abstractmethod
|
|
197
|
+
async def _run_async_impl(
|
|
198
|
+
self, args: dict, tool_context: ToolContext, credential: Optional[str] = None
|
|
199
|
+
) -> dict:
|
|
200
|
+
"""
|
|
201
|
+
Implement the actual tool logic.
|
|
202
|
+
Must return a dictionary response.
|
|
203
|
+
"""
|
|
204
|
+
pass
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
# --- Internal Adapter for Function-Based Tools ---
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _get_schema_from_signature(func: Callable) -> adk_types.Schema:
|
|
211
|
+
"""
|
|
212
|
+
Introspects a function's signature and generates an ADK Schema for its parameters.
|
|
213
|
+
"""
|
|
214
|
+
sig = inspect.signature(func)
|
|
215
|
+
properties = {}
|
|
216
|
+
required = []
|
|
217
|
+
|
|
218
|
+
type_map = {
|
|
219
|
+
str: adk_types.Type.STRING,
|
|
220
|
+
int: adk_types.Type.INTEGER,
|
|
221
|
+
float: adk_types.Type.NUMBER,
|
|
222
|
+
bool: adk_types.Type.BOOLEAN,
|
|
223
|
+
list: adk_types.Type.ARRAY,
|
|
224
|
+
dict: adk_types.Type.OBJECT,
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
for param in sig.parameters.values():
|
|
228
|
+
if param.name in ("tool_context", "tool_config", "kwargs", "self", "cls"):
|
|
229
|
+
continue
|
|
230
|
+
|
|
231
|
+
param_type = param.annotation
|
|
232
|
+
is_optional = False
|
|
233
|
+
|
|
234
|
+
# Handle Optional[T] which is Union[T, None]
|
|
235
|
+
origin = get_origin(param_type)
|
|
236
|
+
args = get_args(param_type)
|
|
237
|
+
if origin is Union and type(None) in args:
|
|
238
|
+
is_optional = True
|
|
239
|
+
# Get the actual type from Union[T, None]
|
|
240
|
+
param_type = next((t for t in args if t is not type(None)), Any)
|
|
241
|
+
|
|
242
|
+
adk_type = type_map.get(param_type)
|
|
243
|
+
if not adk_type:
|
|
244
|
+
# Default to string if type is not supported or specified (e.g., Any)
|
|
245
|
+
adk_type = adk_types.Type.STRING
|
|
246
|
+
|
|
247
|
+
properties[param.name] = adk_types.Schema(type=adk_type, nullable=is_optional)
|
|
248
|
+
|
|
249
|
+
if param.default is inspect.Parameter.empty and not is_optional:
|
|
250
|
+
required.append(param.name)
|
|
251
|
+
|
|
252
|
+
return adk_types.Schema(
|
|
253
|
+
type=adk_types.Type.OBJECT,
|
|
254
|
+
properties=properties,
|
|
255
|
+
required=required,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class _FunctionAsDynamicTool(DynamicTool):
|
|
260
|
+
"""
|
|
261
|
+
Internal adapter to wrap a standard Python function as a DynamicTool.
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
def __init__(
|
|
265
|
+
self,
|
|
266
|
+
func: Callable,
|
|
267
|
+
tool_config: Optional[Union[dict, BaseModel]] = None,
|
|
268
|
+
provider_instance: Optional[Any] = None,
|
|
269
|
+
):
|
|
270
|
+
super().__init__(tool_config=tool_config)
|
|
271
|
+
self._func = func
|
|
272
|
+
self._provider_instance = provider_instance
|
|
273
|
+
self._schema = _get_schema_from_signature(func)
|
|
274
|
+
|
|
275
|
+
# Check if the function is an instance method that needs `self`
|
|
276
|
+
self._is_instance_method = False
|
|
277
|
+
sig = inspect.signature(self._func)
|
|
278
|
+
if sig.parameters:
|
|
279
|
+
first_param = next(iter(sig.parameters.values()))
|
|
280
|
+
if first_param.name == "self":
|
|
281
|
+
self._is_instance_method = True
|
|
282
|
+
|
|
283
|
+
@property
|
|
284
|
+
def tool_name(self) -> str:
|
|
285
|
+
return self._func.__name__
|
|
286
|
+
|
|
287
|
+
@property
|
|
288
|
+
def tool_description(self) -> str:
|
|
289
|
+
return inspect.getdoc(self._func) or ""
|
|
290
|
+
|
|
291
|
+
@property
|
|
292
|
+
def parameters_schema(self) -> adk_types.Schema:
|
|
293
|
+
return self._schema
|
|
294
|
+
|
|
295
|
+
async def _run_async_impl(
|
|
296
|
+
self,
|
|
297
|
+
args: dict,
|
|
298
|
+
tool_context: ToolContext,
|
|
299
|
+
credential: Optional[str] = None,
|
|
300
|
+
) -> dict:
|
|
301
|
+
# Inject tool_context and tool_config if the function expects them
|
|
302
|
+
sig = inspect.signature(self._func)
|
|
303
|
+
if "tool_context" in sig.parameters:
|
|
304
|
+
args["tool_context"] = tool_context
|
|
305
|
+
if "tool_config" in sig.parameters:
|
|
306
|
+
args["tool_config"] = self.tool_config
|
|
307
|
+
|
|
308
|
+
if self._provider_instance and self._is_instance_method:
|
|
309
|
+
# It's an instance method, call it on the provider instance
|
|
310
|
+
return await self._func(self._provider_instance, **args)
|
|
311
|
+
else:
|
|
312
|
+
# It's a static method or a standalone function
|
|
313
|
+
return await self._func(**args)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
# --- Base Class for Tool Providers ---
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class DynamicToolProvider(ABC):
|
|
320
|
+
"""
|
|
321
|
+
Base class for dynamic tool providers that can generate a list of tools
|
|
322
|
+
programmatically from a single configuration block.
|
|
323
|
+
"""
|
|
324
|
+
|
|
325
|
+
config_model: Optional[Type[BaseModel]] = None
|
|
326
|
+
_decorated_tools: List[Callable] = []
|
|
327
|
+
|
|
328
|
+
@classmethod
|
|
329
|
+
def register_tool(cls, func: Callable) -> Callable:
|
|
330
|
+
"""
|
|
331
|
+
A decorator to register a standard async function as a tool.
|
|
332
|
+
The decorated function's signature and docstring will be used to
|
|
333
|
+
create the tool definition.
|
|
334
|
+
"""
|
|
335
|
+
# This check is crucial. It runs for each decorated method.
|
|
336
|
+
# If the current class `cls` is using the list from the base class
|
|
337
|
+
# `DynamicToolProvider`, it creates a new, empty list just for `cls`.
|
|
338
|
+
# On subsequent decorator calls for the same `cls`, this condition will
|
|
339
|
+
# be false, and it will append to the existing list.
|
|
340
|
+
if (
|
|
341
|
+
not hasattr(cls, "_decorated_tools")
|
|
342
|
+
or cls._decorated_tools is DynamicToolProvider._decorated_tools
|
|
343
|
+
):
|
|
344
|
+
cls._decorated_tools = []
|
|
345
|
+
|
|
346
|
+
cls._decorated_tools.append(func)
|
|
347
|
+
return func
|
|
348
|
+
|
|
349
|
+
def _create_tools_from_decorators(
|
|
350
|
+
self, tool_config: Optional[Union[dict, BaseModel]] = None
|
|
351
|
+
) -> List[DynamicTool]:
|
|
352
|
+
"""
|
|
353
|
+
Internal helper to convert decorated functions into DynamicTool instances.
|
|
354
|
+
"""
|
|
355
|
+
tools = []
|
|
356
|
+
for func in self._decorated_tools:
|
|
357
|
+
adapter = _FunctionAsDynamicTool(func, tool_config, provider_instance=self)
|
|
358
|
+
tools.append(adapter)
|
|
359
|
+
return tools
|
|
360
|
+
|
|
361
|
+
def get_all_tools_for_framework(
|
|
362
|
+
self, tool_config: Optional[Union[dict, BaseModel]] = None
|
|
363
|
+
) -> List[DynamicTool]:
|
|
364
|
+
"""
|
|
365
|
+
Framework-internal method that automatically combines decorated tools with custom tools.
|
|
366
|
+
This is called by the ADK setup code, not by users.
|
|
367
|
+
|
|
368
|
+
Args:
|
|
369
|
+
tool_config: The configuration dictionary from the agent's YAML file.
|
|
370
|
+
|
|
371
|
+
Returns:
|
|
372
|
+
A list of all DynamicTool objects (decorated + custom).
|
|
373
|
+
"""
|
|
374
|
+
# Get tools from decorators automatically
|
|
375
|
+
decorated_tools = self._create_tools_from_decorators(tool_config)
|
|
376
|
+
|
|
377
|
+
# Get custom tools from the user's implementation
|
|
378
|
+
custom_tools = self.create_tools(tool_config)
|
|
379
|
+
|
|
380
|
+
return decorated_tools + custom_tools
|
|
381
|
+
|
|
382
|
+
@abstractmethod
|
|
383
|
+
def create_tools(self, tool_config: Optional[Union[dict, BaseModel]] = None) -> List[DynamicTool]:
|
|
384
|
+
"""
|
|
385
|
+
Generate and return a list of custom DynamicTool instances.
|
|
386
|
+
|
|
387
|
+
Note: Tools registered with the @register_tool decorator are automatically
|
|
388
|
+
included by the framework - you don't need to handle them here.
|
|
389
|
+
|
|
390
|
+
Args:
|
|
391
|
+
tool_config: The configuration dictionary from the agent's YAML file.
|
|
392
|
+
|
|
393
|
+
Returns:
|
|
394
|
+
A list of custom DynamicTool objects (decorated tools are added automatically).
|
|
395
|
+
"""
|
|
396
|
+
pass
|