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,275 @@
|
|
|
1
|
+
# LLM Summary Detail File
|
|
2
|
+
|
|
3
|
+
This file is a concatenation of all individual *llm.txt files found in the 'tools' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
+
|
|
5
|
+
================================================================================
|
|
6
|
+
|
|
7
|
+
## Section 1: solace_agent_mesh/agent/tools/tools_llm.txt
|
|
8
|
+
|
|
9
|
+
**Source file:** `solace_agent_mesh/agent/tools/tools_llm.txt`
|
|
10
|
+
|
|
11
|
+
# DEVELOPER GUIDE: tools
|
|
12
|
+
|
|
13
|
+
## Quick Summary
|
|
14
|
+
The `tools` directory contains the complete tool system for the Solace Agent Mesh, providing built-in tools for artifact management, data analysis, audio/image processing, web interactions, and dynamic tool creation. It includes a registry system for tool discovery and management, with support for declarative YAML-based configurations and multiple tool types including built-in, custom Python, and MCP tools.
|
|
15
|
+
|
|
16
|
+
## Files Overview
|
|
17
|
+
- `__init__.py` - Ensures all built-in tool modules are imported for declarative registration
|
|
18
|
+
- `audio_tools.py` - Audio processing tools including TTS, transcription, and audio manipulation
|
|
19
|
+
- `builtin_artifact_tools.py` - Core artifact management tools for CRUD operations and content processing
|
|
20
|
+
- `builtin_data_analysis_tools.py` - Data analysis tools for creating charts from Plotly configurations
|
|
21
|
+
- `dynamic_tool.py` - Base classes for creating dynamic, programmatically-defined tools
|
|
22
|
+
- `general_agent_tools.py` - General-purpose tools for file conversion and diagram generation
|
|
23
|
+
- `image_tools.py` - Image generation, editing, and multimodal content analysis tools
|
|
24
|
+
- `peer_agent_tool.py` - Tool for delegating tasks to peer agents over Solace messaging
|
|
25
|
+
- `registry.py` - Singleton registry for tool discovery and management
|
|
26
|
+
- `test_tools.py` - Testing utilities for timeouts and error handling
|
|
27
|
+
- `tool_config_types.py` - Pydantic models for YAML-based tool configurations
|
|
28
|
+
- `tool_definition.py` - Base tool definition classes and structures
|
|
29
|
+
- `web_tools.py` - Web scraping and content extraction tools
|
|
30
|
+
|
|
31
|
+
## Developer API Reference
|
|
32
|
+
|
|
33
|
+
### __init__.py
|
|
34
|
+
**Purpose:** Triggers tool registration by importing all tool modules
|
|
35
|
+
**Import:** `from solace_agent_mesh.agent.tools import *`
|
|
36
|
+
|
|
37
|
+
No public classes or functions - this is an initialization module.
|
|
38
|
+
|
|
39
|
+
### audio_tools.py
|
|
40
|
+
**Purpose:** Provides comprehensive audio processing capabilities
|
|
41
|
+
**Import:** `from solace_agent_mesh.agent.tools.audio_tools import select_voice, text_to_speech, multi_speaker_text_to_speech, concatenate_audio, transcribe_audio`
|
|
42
|
+
|
|
43
|
+
**Functions:**
|
|
44
|
+
- `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 based on gender and tone criteria
|
|
45
|
+
- `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
|
|
46
|
+
- `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]` - Creates multi-speaker audio from conversation text
|
|
47
|
+
- `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 clips with custom pause durations
|
|
48
|
+
- `transcribe_audio(audio_filename: str, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Transcribes audio using OpenAI-compatible API
|
|
49
|
+
|
|
50
|
+
**Constants/Variables:**
|
|
51
|
+
- `VOICE_TONE_MAPPING: Dict[str, List[str]]` - Maps tone preferences to available voices
|
|
52
|
+
- `GENDER_TO_VOICE_MAPPING: Dict[str, List[str]]` - Maps gender preferences to available voices
|
|
53
|
+
- `ALL_AVAILABLE_VOICES: List[str]` - Complete list of available voice names
|
|
54
|
+
- `SUPPORTED_LANGUAGES: Dict[str, str]` - Maps language names to BCP-47 codes
|
|
55
|
+
|
|
56
|
+
**Usage Examples:**
|
|
57
|
+
```python
|
|
58
|
+
# Basic text-to-speech
|
|
59
|
+
result = await text_to_speech(
|
|
60
|
+
text="Hello, world!",
|
|
61
|
+
voice_name="Kore",
|
|
62
|
+
tool_context=context
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Multi-speaker conversation
|
|
66
|
+
conversation = "Speaker1: Hello there!\nSpeaker2: Hi, how are you?"
|
|
67
|
+
result = await multi_speaker_text_to_speech(
|
|
68
|
+
conversation_text=conversation,
|
|
69
|
+
speaker_configs=[
|
|
70
|
+
{"name": "Speaker1", "gender": "female", "tone": "friendly"},
|
|
71
|
+
{"name": "Speaker2", "gender": "male", "tone": "casual"}
|
|
72
|
+
],
|
|
73
|
+
tool_context=context
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### builtin_artifact_tools.py
|
|
78
|
+
**Purpose:** Core artifact management and content processing tools
|
|
79
|
+
**Import:** `from solace_agent_mesh.agent.tools.builtin_artifact_tools import list_artifacts, load_artifact, apply_embed_and_create_artifact, extract_content_from_artifact, append_to_artifact, delete_artifact`
|
|
80
|
+
|
|
81
|
+
**Functions:**
|
|
82
|
+
- `list_artifacts(tool_context: ToolContext = None) -> Dict[str, Any]` - Lists all available artifacts with metadata summaries
|
|
83
|
+
- `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 artifact content or metadata
|
|
84
|
+
- `apply_embed_and_create_artifact(output_filename: str, embed_directive: str, output_metadata: Optional[Dict[str, Any]] = None, tool_context: ToolContext = None) -> Dict[str, Any]` - Resolves embed directives and creates new artifacts
|
|
85
|
+
- `extract_content_from_artifact(filename: str, extraction_goal: str, version: Optional[str] = "latest", output_filename_base: Optional[str] = None, tool_context: ToolContext = None) -> Dict[str, Any]` - Uses LLM to extract/transform artifact content
|
|
86
|
+
- `append_to_artifact(filename: str, content_chunk: str, mime_type: str, tool_context: ToolContext = None) -> Dict[str, Any]` - Appends content to existing artifacts
|
|
87
|
+
- `delete_artifact(filename: str, version: Optional[int] = None, tool_context: ToolContext = None) -> Dict[str, Any]` - Deletes artifact versions
|
|
88
|
+
|
|
89
|
+
**Note:** To return artifacts to users, use the `«artifact_return:filename[:version]»` embed in your response text instead of a tool call. This is more efficient and provides a better user experience.
|
|
90
|
+
|
|
91
|
+
**Usage Examples:**
|
|
92
|
+
```python
|
|
93
|
+
# List all artifacts
|
|
94
|
+
artifacts = await list_artifacts(tool_context=context)
|
|
95
|
+
|
|
96
|
+
# Load specific artifact version
|
|
97
|
+
content = await load_artifact(
|
|
98
|
+
filename="data.csv",
|
|
99
|
+
version=1,
|
|
100
|
+
tool_context=context
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Extract content using LLM
|
|
104
|
+
result = await extract_content_from_artifact(
|
|
105
|
+
filename="report.pdf",
|
|
106
|
+
extraction_goal="Extract all financial figures and create a summary table",
|
|
107
|
+
tool_context=context
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### builtin_data_analysis_tools.py
|
|
112
|
+
**Purpose:** Data analysis and visualization tools
|
|
113
|
+
**Import:** `from solace_agent_mesh.agent.tools.builtin_data_analysis_tools import create_chart_from_plotly_config`
|
|
114
|
+
|
|
115
|
+
**Functions:**
|
|
116
|
+
- `create_chart_from_plotly_config(config_content: str, config_format: Literal["json", "yaml"], output_filename: str, output_format: Optional[str] = "png", tool_context: ToolContext = None) -> Dict[str, Any]` - Generates static chart images from Plotly configurations
|
|
117
|
+
|
|
118
|
+
**Usage Examples:**
|
|
119
|
+
```python
|
|
120
|
+
# Create chart from JSON config
|
|
121
|
+
plotly_config = '{"data": [{"x": [1,2,3], "y": [4,5,6], "type": "scatter"}]}'
|
|
122
|
+
result = await create_chart_from_plotly_config(
|
|
123
|
+
config_content=plotly_config,
|
|
124
|
+
config_format="json",
|
|
125
|
+
output_filename="my_chart.png",
|
|
126
|
+
tool_context=context
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### dynamic_tool.py
|
|
131
|
+
**Purpose:** Base classes for creating dynamic, programmatically-defined tools
|
|
132
|
+
**Import:** `from solace_agent_mesh.agent.tools.dynamic_tool import DynamicTool, DynamicToolProvider`
|
|
133
|
+
|
|
134
|
+
**Classes:**
|
|
135
|
+
- `DynamicTool(tool_config: Optional[Union[dict, BaseModel]] = None)` - Base class for dynamic tools with programmatic definitions
|
|
136
|
+
- `tool_name: str` - Property returning the function name for LLM calls
|
|
137
|
+
- `tool_description: str` - Property returning tool description
|
|
138
|
+
- `parameters_schema: adk_types.Schema` - Property returning parameter schema
|
|
139
|
+
- `raw_string_args: List[str]` - Property listing args that skip embed resolution
|
|
140
|
+
- `resolution_type: Literal["early", "all"]` - Property determining embed resolution scope
|
|
141
|
+
- `run_async(*, args: Dict[str, Any], tool_context: ToolContext) -> Dict[str, Any]` - Executes the tool with embed resolution
|
|
142
|
+
- `_run_async_impl(args: dict, tool_context: ToolContext, credential: Optional[str] = None) -> dict` - Abstract method for tool implementation
|
|
143
|
+
|
|
144
|
+
- `DynamicToolProvider()` - Base class for tool providers that generate multiple tools
|
|
145
|
+
- `register_tool(func: Callable) -> Callable` - Class method decorator for registering functions as tools
|
|
146
|
+
- `create_tools(tool_config: Optional[Union[dict, BaseModel]] = None) -> List[DynamicTool]` - Abstract method for creating custom tools
|
|
147
|
+
- `get_all_tools_for_framework(tool_config: Optional[Union[dict, BaseModel]] = None) -> List[DynamicTool]` - Framework method combining decorated and custom tools
|
|
148
|
+
|
|
149
|
+
**Usage Examples:**
|
|
150
|
+
```python
|
|
151
|
+
# Create a custom dynamic tool
|
|
152
|
+
class MyCustomTool(DynamicTool):
|
|
153
|
+
@property
|
|
154
|
+
def tool_name(self) -> str:
|
|
155
|
+
return "my_custom_tool"
|
|
156
|
+
|
|
157
|
+
@property
|
|
158
|
+
def tool_description(self) -> str:
|
|
159
|
+
return "Does something custom"
|
|
160
|
+
|
|
161
|
+
@property
|
|
162
|
+
def parameters_schema(self) -> adk_types.Schema:
|
|
163
|
+
return adk_types.Schema(
|
|
164
|
+
type=adk_types.Type.OBJECT,
|
|
165
|
+
properties={
|
|
166
|
+
"input": adk_types.Schema(type=adk_types.Type.STRING)
|
|
167
|
+
},
|
|
168
|
+
required=["input"]
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
async def _run_async_impl(self, args: dict, tool_context: ToolContext, credential: Optional[str] = None) -> dict:
|
|
172
|
+
return {"result": f"Processed: {args['input']}"}
|
|
173
|
+
|
|
174
|
+
# Create a tool provider with decorated methods
|
|
175
|
+
class MyToolProvider(DynamicToolProvider):
|
|
176
|
+
@DynamicToolProvider.register_tool
|
|
177
|
+
async def my_decorated_tool(self, param1: str, tool_context: ToolContext) -> dict:
|
|
178
|
+
"""This tool does something useful."""
|
|
179
|
+
return {"status": "success", "input": param1}
|
|
180
|
+
|
|
181
|
+
def create_tools(self, tool_config: Optional[Union[dict, BaseModel]] = None) -> List[DynamicTool]:
|
|
182
|
+
return [MyCustomTool(tool_config)]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### general_agent_tools.py
|
|
186
|
+
**Purpose:** General-purpose utility tools for file conversion and diagram generation
|
|
187
|
+
**Import:** `from solace_agent_mesh.agent.tools.general_agent_tools import convert_file_to_markdown, mermaid_diagram_generator`
|
|
188
|
+
|
|
189
|
+
**Functions:**
|
|
190
|
+
- `convert_file_to_markdown(input_filename: str, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Converts files to Markdown using MarkItDown library
|
|
191
|
+
- `mermaid_diagram_generator(mermaid_syntax: str, output_filename: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Generates PNG images from Mermaid diagram syntax
|
|
192
|
+
|
|
193
|
+
**Usage Examples:**
|
|
194
|
+
```python
|
|
195
|
+
# Convert PDF to Markdown
|
|
196
|
+
result = await convert_file_to_markdown(
|
|
197
|
+
input_filename="document.pdf",
|
|
198
|
+
tool_context=context
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
# Generate Mermaid diagram
|
|
202
|
+
mermaid_code = """
|
|
203
|
+
graph TD
|
|
204
|
+
A[Start] --> B[Process]
|
|
205
|
+
B --> C[End]
|
|
206
|
+
"""
|
|
207
|
+
result = await mermaid_diagram_generator(
|
|
208
|
+
mermaid_syntax=mermaid_code,
|
|
209
|
+
output_filename="flowchart.png",
|
|
210
|
+
tool_context=context
|
|
211
|
+
)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### image_tools.py
|
|
215
|
+
**Purpose:** Image generation, editing, and multimodal content analysis
|
|
216
|
+
**Import:** `from solace_agent_mesh.agent.tools.image_tools import create_image_from_description, describe_image, describe_audio, edit_image_with_gemini`
|
|
217
|
+
|
|
218
|
+
**Functions:**
|
|
219
|
+
- `create_image_from_description(image_description: str, output_filename: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Generates images from text descriptions
|
|
220
|
+
- `describe_image(image_filename: str, prompt: str = "What is in this image?", tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Describes images using vision APIs
|
|
221
|
+
- `describe_audio(audio_filename: str, prompt: str = "What is in this recording?", tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Describes audio using multimodal APIs
|
|
222
|
+
- `edit_image_with_gemini(image_filename: str, edit_prompt: str, output_filename: Optional[str] = None, tool_context: ToolContext = None, tool_config: Optional[Dict[str, Any]] = None) -> Dict[str, Any]` - Edits images using Gemini 2.0 Flash
|
|
223
|
+
|
|
224
|
+
**Usage Examples:**
|
|
225
|
+
```python
|
|
226
|
+
# Generate image from description
|
|
227
|
+
result = await create_image_from_description(
|
|
228
|
+
image_description="A sunset over mountains with a lake in the foreground",
|
|
229
|
+
output_filename="sunset.png",
|
|
230
|
+
tool_context=context
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
# Describe an existing image
|
|
234
|
+
result = await describe_image(
|
|
235
|
+
image_filename="photo.jpg",
|
|
236
|
+
prompt="What objects are visible in this image?",
|
|
237
|
+
tool_context=context
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
# Edit an image
|
|
241
|
+
result = await edit_image_with_gemini(
|
|
242
|
+
image_filename="original.jpg",
|
|
243
|
+
edit_prompt="Add a rainbow in the sky",
|
|
244
|
+
tool_context=context
|
|
245
|
+
)
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### peer_agent_tool.py
|
|
249
|
+
**Purpose:** Enables task delegation to peer agents over Solace messaging
|
|
250
|
+
**Import:** `from solace_agent_mesh.agent.tools.peer_agent_tool import PeerAgentTool`
|
|
251
|
+
|
|
252
|
+
**Classes:**
|
|
253
|
+
- `PeerAgentTool(target_agent_name: str, host_component)` - Tool for delegating tasks to peer agents
|
|
254
|
+
- `target_agent_name: str` - Name of the peer agent
|
|
255
|
+
- `host_component` - Reference to the SamAgentComponent
|
|
256
|
+
- `is_long_running: bool` - Always True for async delegation
|
|
257
|
+
- `run_async(*, args: Dict[str, Any], tool_context: ToolContext) -> Any` - Delegates task to peer agent
|
|
258
|
+
|
|
259
|
+
**Usage Examples:**
|
|
260
|
+
```python
|
|
261
|
+
# Create peer agent tool (typically done by framework)
|
|
262
|
+
peer_tool = PeerAgentTool("data_analyst_agent", host_component)
|
|
263
|
+
|
|
264
|
+
# Tool is called by LLM with these parameters:
|
|
265
|
+
# {
|
|
266
|
+
# "task_description": "Analyze the sales data and create a summary report",
|
|
267
|
+
# "user_query": "What were our top performing products last quarter?",
|
|
268
|
+
# "artifacts": [{"filename": "sales_data.csv", "version": "latest"}]
|
|
269
|
+
# }
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### registry.py
|
|
273
|
+
|
|
274
|
+
================================================================================
|
|
275
|
+
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Collection of Python tools for web-related tasks, such as making HTTP requests.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import json
|
|
7
|
+
import uuid
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
|
+
from typing import Any, Dict, Optional
|
|
10
|
+
import ipaddress
|
|
11
|
+
from urllib.parse import urlparse
|
|
12
|
+
import socket
|
|
13
|
+
|
|
14
|
+
import httpx
|
|
15
|
+
from markdownify import markdownify as md
|
|
16
|
+
from bs4 import BeautifulSoup
|
|
17
|
+
|
|
18
|
+
from google.adk.tools import ToolContext
|
|
19
|
+
|
|
20
|
+
from ...agent.utils.artifact_helpers import (
|
|
21
|
+
save_artifact_with_metadata,
|
|
22
|
+
DEFAULT_SCHEMA_MAX_KEYS,
|
|
23
|
+
)
|
|
24
|
+
from ...agent.utils.context_helpers import get_original_session_id
|
|
25
|
+
|
|
26
|
+
from google.genai import types as adk_types
|
|
27
|
+
from .tool_definition import BuiltinTool
|
|
28
|
+
from .registry import tool_registry
|
|
29
|
+
|
|
30
|
+
log = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
CATEGORY_NAME = "Web Access"
|
|
33
|
+
CATEGORY_DESCRIPTION = "Access the web to find information to complete user requests."
|
|
34
|
+
|
|
35
|
+
def _is_safe_url(url: str) -> bool:
|
|
36
|
+
"""
|
|
37
|
+
Checks if a URL is safe to request by resolving its hostname and checking
|
|
38
|
+
if the IP address is in a private, reserved, or loopback range.
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
parsed_url = urlparse(url)
|
|
42
|
+
hostname = parsed_url.hostname
|
|
43
|
+
if not hostname:
|
|
44
|
+
log.warning(f"URL has no hostname: {url}")
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
ip_str = socket.gethostbyname(hostname)
|
|
49
|
+
ip = ipaddress.ip_address(ip_str)
|
|
50
|
+
except socket.gaierror:
|
|
51
|
+
log.warning(f"Could not resolve hostname: {hostname}")
|
|
52
|
+
return False
|
|
53
|
+
|
|
54
|
+
if ip.is_private or ip.is_reserved or ip.is_loopback:
|
|
55
|
+
log.warning(f"URL {url} resolved to a blocked IP: {ip}")
|
|
56
|
+
return False
|
|
57
|
+
|
|
58
|
+
return True
|
|
59
|
+
|
|
60
|
+
except Exception as e:
|
|
61
|
+
log.error(f"Error during URL safety check for {url}: {e}", exc_info=True)
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
async def web_request(
|
|
66
|
+
url: str,
|
|
67
|
+
method: str = "GET",
|
|
68
|
+
headers: Optional[Dict[str, str]] = None,
|
|
69
|
+
body: Optional[str] = None,
|
|
70
|
+
output_artifact_filename: Optional[str] = None,
|
|
71
|
+
tool_context: ToolContext = None,
|
|
72
|
+
tool_config: Optional[Dict[str, Any]] = None,
|
|
73
|
+
) -> Dict[str, Any]:
|
|
74
|
+
"""
|
|
75
|
+
Makes an HTTP request to the specified URL, processes the content (e.g., HTML to Markdown),
|
|
76
|
+
and saves the result as an artifact.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
url: The URL to fetch.
|
|
80
|
+
method: HTTP method (e.g., "GET", "POST"). Defaults to "GET".
|
|
81
|
+
headers: Optional dictionary of request headers.
|
|
82
|
+
body: Optional request body string for methods like POST/PUT. If sending JSON, this should be a valid JSON string.
|
|
83
|
+
output_artifact_filename: Optional. Desired filename for the output artifact.
|
|
84
|
+
tool_context: The context provided by the ADK framework.
|
|
85
|
+
tool_config: Optional. Configuration passed by the ADK, generally not used by this simplified tool.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
A dictionary with status, message, and artifact details if successful.
|
|
89
|
+
"""
|
|
90
|
+
log_identifier = f"[WebTools:web_request:{method}:{url}]"
|
|
91
|
+
if not tool_context:
|
|
92
|
+
log.error(f"{log_identifier} ToolContext is missing.")
|
|
93
|
+
return {"status": "error", "message": "ToolContext is missing."}
|
|
94
|
+
|
|
95
|
+
# Check if loopback URLs are allowed (for testing)
|
|
96
|
+
allow_loopback = False
|
|
97
|
+
if tool_config:
|
|
98
|
+
allow_loopback = tool_config.get("allow_loopback", False)
|
|
99
|
+
|
|
100
|
+
if not allow_loopback and not _is_safe_url(url):
|
|
101
|
+
log.error(f"{log_identifier} URL is not safe to request: {url}")
|
|
102
|
+
return {"status": "error", "message": "URL is not safe to request."}
|
|
103
|
+
|
|
104
|
+
if headers is None:
|
|
105
|
+
headers = {}
|
|
106
|
+
|
|
107
|
+
if not any(h.lower() == "user-agent" for h in headers):
|
|
108
|
+
headers["User-Agent"] = (
|
|
109
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
inv_context = tool_context._invocation_context
|
|
114
|
+
if not inv_context:
|
|
115
|
+
raise ValueError("InvocationContext is not available.")
|
|
116
|
+
|
|
117
|
+
app_name = getattr(inv_context, "app_name", None)
|
|
118
|
+
user_id = getattr(inv_context, "user_id", None)
|
|
119
|
+
session_id = get_original_session_id(inv_context)
|
|
120
|
+
artifact_service = getattr(inv_context, "artifact_service", None)
|
|
121
|
+
|
|
122
|
+
if not all([app_name, user_id, session_id, artifact_service]):
|
|
123
|
+
missing_parts = [
|
|
124
|
+
part
|
|
125
|
+
for part, val in [
|
|
126
|
+
("app_name", app_name),
|
|
127
|
+
("user_id", user_id),
|
|
128
|
+
("session_id", session_id),
|
|
129
|
+
("artifact_service", artifact_service),
|
|
130
|
+
]
|
|
131
|
+
if not val
|
|
132
|
+
]
|
|
133
|
+
raise ValueError(
|
|
134
|
+
f"Missing required context parts: {', '.join(missing_parts)}"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
log.info(f"{log_identifier} Processing request for session {session_id}.")
|
|
138
|
+
|
|
139
|
+
request_body_bytes = None
|
|
140
|
+
if body:
|
|
141
|
+
request_body_bytes = body.encode("utf-8")
|
|
142
|
+
|
|
143
|
+
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
144
|
+
log.debug(
|
|
145
|
+
f"{log_identifier} Making {method} request to {url} with headers: {headers}"
|
|
146
|
+
)
|
|
147
|
+
response = await client.request(
|
|
148
|
+
method=method.upper(),
|
|
149
|
+
url=url,
|
|
150
|
+
headers=headers,
|
|
151
|
+
content=request_body_bytes,
|
|
152
|
+
)
|
|
153
|
+
log.debug(
|
|
154
|
+
f"{log_identifier} Received response with status code: {response.status_code}"
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
response_content_bytes = response.content
|
|
158
|
+
response_status_code = response.status_code
|
|
159
|
+
original_content_type = (
|
|
160
|
+
response.headers.get("content-type", "application/octet-stream")
|
|
161
|
+
.split(";")[0]
|
|
162
|
+
.strip()
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
final_content_to_save_str = ""
|
|
166
|
+
final_content_to_save_bytes = response_content_bytes
|
|
167
|
+
processed_content_type = original_content_type
|
|
168
|
+
|
|
169
|
+
if response_status_code < 400:
|
|
170
|
+
if original_content_type.startswith("text/html"):
|
|
171
|
+
soup = BeautifulSoup(response_content_bytes, "html.parser")
|
|
172
|
+
|
|
173
|
+
# Remove images before conversion
|
|
174
|
+
for img in soup.find_all('img'):
|
|
175
|
+
img.decompose()
|
|
176
|
+
|
|
177
|
+
final_content_to_save_str = md(str(soup), heading_style="ATX")
|
|
178
|
+
final_content_to_save_bytes = final_content_to_save_str.encode("utf-8")
|
|
179
|
+
processed_content_type = "text/markdown"
|
|
180
|
+
log.debug(f"{log_identifier} Converted HTML to Markdown.")
|
|
181
|
+
elif original_content_type.startswith("text/") or original_content_type in [
|
|
182
|
+
"application/json",
|
|
183
|
+
"application/xml",
|
|
184
|
+
"application/javascript",
|
|
185
|
+
]:
|
|
186
|
+
try:
|
|
187
|
+
final_content_to_save_str = response_content_bytes.decode("utf-8")
|
|
188
|
+
log.debug(
|
|
189
|
+
f"{log_identifier} Decoded text-based content: {original_content_type}"
|
|
190
|
+
)
|
|
191
|
+
except UnicodeDecodeError:
|
|
192
|
+
log.warning(
|
|
193
|
+
f"{log_identifier} Could not decode content as UTF-8. Original type: {original_content_type}. Saving raw bytes."
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
else:
|
|
197
|
+
log.warning(
|
|
198
|
+
f"{log_identifier} HTTP request returned status {response_status_code}. Saving raw response content."
|
|
199
|
+
)
|
|
200
|
+
if original_content_type.startswith("text/") or original_content_type in [
|
|
201
|
+
"application/json",
|
|
202
|
+
"application/xml",
|
|
203
|
+
"application/javascript",
|
|
204
|
+
]:
|
|
205
|
+
try:
|
|
206
|
+
final_content_to_save_str = response_content_bytes.decode(
|
|
207
|
+
"utf-8", errors="replace"
|
|
208
|
+
)
|
|
209
|
+
except Exception:
|
|
210
|
+
final_content_to_save_str = "[Binary or undecodable content]"
|
|
211
|
+
|
|
212
|
+
file_extension = ".bin"
|
|
213
|
+
if processed_content_type == "text/markdown":
|
|
214
|
+
file_extension = ".md"
|
|
215
|
+
elif processed_content_type == "application/json":
|
|
216
|
+
file_extension = ".json"
|
|
217
|
+
elif processed_content_type == "application/xml":
|
|
218
|
+
file_extension = ".xml"
|
|
219
|
+
elif processed_content_type.startswith("text/"):
|
|
220
|
+
file_extension = ".txt"
|
|
221
|
+
elif processed_content_type == "image/jpeg":
|
|
222
|
+
file_extension = ".jpg"
|
|
223
|
+
elif processed_content_type == "image/png":
|
|
224
|
+
file_extension = ".png"
|
|
225
|
+
elif processed_content_type == "image/gif":
|
|
226
|
+
file_extension = ".gif"
|
|
227
|
+
elif processed_content_type == "application/pdf":
|
|
228
|
+
file_extension = ".pdf"
|
|
229
|
+
|
|
230
|
+
if output_artifact_filename:
|
|
231
|
+
if "." not in output_artifact_filename.split("/")[-1]:
|
|
232
|
+
final_artifact_filename = f"{output_artifact_filename}{file_extension}"
|
|
233
|
+
else:
|
|
234
|
+
final_artifact_filename = output_artifact_filename
|
|
235
|
+
else:
|
|
236
|
+
final_artifact_filename = f"web_content_{uuid.uuid4()}{file_extension}"
|
|
237
|
+
|
|
238
|
+
metadata_dict = {
|
|
239
|
+
"url": url,
|
|
240
|
+
"method": method.upper(),
|
|
241
|
+
"request_headers": json.dumps(
|
|
242
|
+
{k: v for k, v in headers.items() if k.lower() != "authorization"}
|
|
243
|
+
),
|
|
244
|
+
"response_status_code": response_status_code,
|
|
245
|
+
"response_headers": json.dumps(dict(response.headers)),
|
|
246
|
+
"original_content_type": original_content_type,
|
|
247
|
+
"processed_content_type": processed_content_type,
|
|
248
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
log.info(
|
|
252
|
+
f"{log_identifier} Saving artifact '{final_artifact_filename}' with mime_type '{processed_content_type}'."
|
|
253
|
+
)
|
|
254
|
+
save_result = await save_artifact_with_metadata(
|
|
255
|
+
artifact_service=artifact_service,
|
|
256
|
+
app_name=app_name,
|
|
257
|
+
user_id=user_id,
|
|
258
|
+
session_id=session_id,
|
|
259
|
+
filename=final_artifact_filename,
|
|
260
|
+
content_bytes=final_content_to_save_bytes,
|
|
261
|
+
mime_type=processed_content_type,
|
|
262
|
+
metadata_dict=metadata_dict,
|
|
263
|
+
timestamp=datetime.now(timezone.utc),
|
|
264
|
+
schema_max_keys=DEFAULT_SCHEMA_MAX_KEYS,
|
|
265
|
+
tool_context=tool_context,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
if save_result.get("status") == "error":
|
|
269
|
+
raise IOError(
|
|
270
|
+
f"Failed to save web content artifact: {save_result.get('message', 'Unknown error')}"
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
log.info(
|
|
274
|
+
f"{log_identifier} Artifact '{final_artifact_filename}' v{save_result['data_version']} saved successfully."
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
preview_text = f"Content from {url} (status: {response_status_code}) saved as '{final_artifact_filename}' v{save_result['data_version']}."
|
|
278
|
+
if final_content_to_save_str:
|
|
279
|
+
preview_text += (
|
|
280
|
+
f"\nPreview (first 200 chars): {final_content_to_save_str[:200]}"
|
|
281
|
+
)
|
|
282
|
+
if len(final_content_to_save_str) > 200:
|
|
283
|
+
preview_text += "..."
|
|
284
|
+
elif response_status_code >= 400:
|
|
285
|
+
preview_text += f"\nError response content (first 200 chars): {response_content_bytes[:200].decode('utf-8', errors='replace')}"
|
|
286
|
+
if len(response_content_bytes) > 200:
|
|
287
|
+
preview_text += "..."
|
|
288
|
+
|
|
289
|
+
return {
|
|
290
|
+
"status": "success",
|
|
291
|
+
"message": f"Successfully fetched content from {url} (status: {response_status_code}). "
|
|
292
|
+
f"Saved as artifact '{final_artifact_filename}' v{save_result['data_version']}. "
|
|
293
|
+
f"Analyze the content of '{final_artifact_filename}' before providing a final answer to the user.",
|
|
294
|
+
"output_filename": final_artifact_filename,
|
|
295
|
+
"output_version": save_result["data_version"],
|
|
296
|
+
"response_status_code": response_status_code,
|
|
297
|
+
"original_content_type": original_content_type,
|
|
298
|
+
"processed_content_type": processed_content_type,
|
|
299
|
+
"result_preview": preview_text,
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
except httpx.HTTPStatusError as hse:
|
|
303
|
+
error_message = f"HTTP error {hse.response.status_code} while fetching {url}: {hse.response.text[:500]}"
|
|
304
|
+
log.error(f"{log_identifier} {error_message}", exc_info=True)
|
|
305
|
+
try:
|
|
306
|
+
error_filename = f"error_response_{uuid.uuid4()}.txt"
|
|
307
|
+
error_metadata = {
|
|
308
|
+
"url": url,
|
|
309
|
+
"method": method.upper(),
|
|
310
|
+
"error_type": "HTTPStatusError",
|
|
311
|
+
"status_code": hse.response.status_code,
|
|
312
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
313
|
+
}
|
|
314
|
+
await save_artifact_with_metadata(
|
|
315
|
+
artifact_service,
|
|
316
|
+
app_name,
|
|
317
|
+
user_id,
|
|
318
|
+
session_id,
|
|
319
|
+
error_filename,
|
|
320
|
+
hse.response.text.encode("utf-8", errors="replace"),
|
|
321
|
+
"text/plain",
|
|
322
|
+
error_metadata,
|
|
323
|
+
datetime.now(timezone.utc),
|
|
324
|
+
tool_context=tool_context,
|
|
325
|
+
)
|
|
326
|
+
return {
|
|
327
|
+
"status": "error",
|
|
328
|
+
"message": error_message,
|
|
329
|
+
"error_artifact": error_filename,
|
|
330
|
+
}
|
|
331
|
+
except Exception as e_save:
|
|
332
|
+
log.error(
|
|
333
|
+
f"{log_identifier} Could not save HTTPStatusError response: {e_save}"
|
|
334
|
+
)
|
|
335
|
+
return {"status": "error", "message": error_message}
|
|
336
|
+
|
|
337
|
+
except httpx.RequestError as re:
|
|
338
|
+
error_message = f"Request error while fetching {url}: {re}"
|
|
339
|
+
log.error(f"{log_identifier} {error_message}", exc_info=True)
|
|
340
|
+
return {"status": "error", "message": error_message}
|
|
341
|
+
except ValueError as ve:
|
|
342
|
+
log.error(f"{log_identifier} Value error: {ve}", exc_info=True)
|
|
343
|
+
return {"status": "error", "message": str(ve)}
|
|
344
|
+
except IOError as ioe:
|
|
345
|
+
log.error(f"{log_identifier} IO error: {ioe}", exc_info=True)
|
|
346
|
+
return {"status": "error", "message": str(ioe)}
|
|
347
|
+
except Exception as e:
|
|
348
|
+
log.exception(f"{log_identifier} Unexpected error in web_request: {e}")
|
|
349
|
+
return {"status": "error", "message": f"An unexpected error occurred: {e}"}
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
web_request_tool_def = BuiltinTool(
|
|
353
|
+
name="web_request",
|
|
354
|
+
implementation=web_request,
|
|
355
|
+
description="Makes an HTTP request to a URL, processes content (e.g., HTML to Markdown), and saves the result as an artifact.",
|
|
356
|
+
category="web",
|
|
357
|
+
category_name=CATEGORY_NAME,
|
|
358
|
+
category_description=CATEGORY_DESCRIPTION,
|
|
359
|
+
required_scopes=["tool:web:request"],
|
|
360
|
+
parameters=adk_types.Schema(
|
|
361
|
+
type=adk_types.Type.OBJECT,
|
|
362
|
+
properties={
|
|
363
|
+
"url": adk_types.Schema(
|
|
364
|
+
type=adk_types.Type.STRING, description="The URL to fetch."
|
|
365
|
+
),
|
|
366
|
+
"method": adk_types.Schema(
|
|
367
|
+
type=adk_types.Type.STRING,
|
|
368
|
+
description="HTTP method (e.g., 'GET', 'POST'). Defaults to 'GET'.",
|
|
369
|
+
nullable=True,
|
|
370
|
+
),
|
|
371
|
+
"headers": adk_types.Schema(
|
|
372
|
+
type=adk_types.Type.OBJECT,
|
|
373
|
+
description="Optional dictionary of request headers.",
|
|
374
|
+
nullable=True,
|
|
375
|
+
),
|
|
376
|
+
"body": adk_types.Schema(
|
|
377
|
+
type=adk_types.Type.STRING,
|
|
378
|
+
description="Optional request body string for methods like POST/PUT.",
|
|
379
|
+
nullable=True,
|
|
380
|
+
),
|
|
381
|
+
"output_artifact_filename": adk_types.Schema(
|
|
382
|
+
type=adk_types.Type.STRING,
|
|
383
|
+
description="Optional. Desired filename for the output artifact.",
|
|
384
|
+
nullable=True,
|
|
385
|
+
),
|
|
386
|
+
},
|
|
387
|
+
required=["url"],
|
|
388
|
+
),
|
|
389
|
+
examples=[],
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
tool_registry.register(web_request_tool_def)
|
|
File without changes
|