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,415 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Encapsulates the runtime state for a single, in-flight agent task.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import threading
|
|
7
|
+
from typing import Any, Dict, List, Optional, TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from solace_ai_connector.common.message import Message as SolaceMessage
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TaskExecutionContext:
|
|
14
|
+
"""
|
|
15
|
+
A class to hold all runtime state and control mechanisms for a single agent task.
|
|
16
|
+
This object is created when a task is initiated and destroyed when it completes,
|
|
17
|
+
ensuring that all state is properly encapsulated and cleaned up.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, task_id: str, a2a_context: Dict[str, Any]):
|
|
21
|
+
"""
|
|
22
|
+
Initializes the TaskExecutionContext.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
task_id: The unique logical ID of the task.
|
|
26
|
+
a2a_context: The original, rich context dictionary from the A2A request.
|
|
27
|
+
"""
|
|
28
|
+
self.task_id: str = task_id
|
|
29
|
+
self.a2a_context: Dict[str, Any] = a2a_context
|
|
30
|
+
self.cancellation_event: asyncio.Event = asyncio.Event()
|
|
31
|
+
self.streaming_buffer: str = ""
|
|
32
|
+
self.run_based_response_buffer: str = ""
|
|
33
|
+
self.active_peer_sub_tasks: Dict[str, Dict[str, Any]] = {}
|
|
34
|
+
self.parallel_tool_calls: Dict[str, Dict[str, Any]] = {}
|
|
35
|
+
self.produced_artifacts: List[Dict[str, Any]] = []
|
|
36
|
+
self.artifact_signals_to_return: List[Dict[str, Any]] = []
|
|
37
|
+
self.event_loop: Optional[asyncio.AbstractEventLoop] = None
|
|
38
|
+
self.lock: threading.Lock = threading.Lock()
|
|
39
|
+
self.is_paused: bool = False # Track if task is paused waiting for peer/auth
|
|
40
|
+
|
|
41
|
+
# Token usage tracking
|
|
42
|
+
self.total_input_tokens: int = 0
|
|
43
|
+
self.total_output_tokens: int = 0
|
|
44
|
+
self.total_cached_input_tokens: int = 0
|
|
45
|
+
self.token_usage_by_model: Dict[str, Dict[str, int]] = {}
|
|
46
|
+
self.token_usage_by_source: Dict[str, Dict[str, int]] = {}
|
|
47
|
+
|
|
48
|
+
# Generic security storage (enterprise use only)
|
|
49
|
+
self._security_context: Dict[str, Any] = {}
|
|
50
|
+
|
|
51
|
+
# Original Solace message for ACK/NACK operations
|
|
52
|
+
# Stored here instead of a2a_context to avoid serialization issues
|
|
53
|
+
self._original_solace_message: Optional["SolaceMessage"] = None
|
|
54
|
+
|
|
55
|
+
# Turn tracking for proper spacing between LLM turns
|
|
56
|
+
self._current_invocation_id: Optional[str] = None
|
|
57
|
+
self._first_text_seen_in_turn: bool = False
|
|
58
|
+
self._need_spacing_before_next_text: bool = False
|
|
59
|
+
|
|
60
|
+
def cancel(self) -> None:
|
|
61
|
+
"""Signals that the task should be cancelled."""
|
|
62
|
+
self.cancellation_event.set()
|
|
63
|
+
|
|
64
|
+
def is_cancelled(self) -> bool:
|
|
65
|
+
"""Checks if the cancellation event has been set."""
|
|
66
|
+
return self.cancellation_event.is_set()
|
|
67
|
+
|
|
68
|
+
def set_paused(self, paused: bool) -> None:
|
|
69
|
+
"""
|
|
70
|
+
Marks the task as paused (waiting for peer response or user input).
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
paused: True if task is paused, False if resuming.
|
|
74
|
+
"""
|
|
75
|
+
with self.lock:
|
|
76
|
+
self.is_paused = paused
|
|
77
|
+
|
|
78
|
+
def get_is_paused(self) -> bool:
|
|
79
|
+
"""
|
|
80
|
+
Checks if the task is currently paused.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
True if task is paused (waiting for peer/auth), False otherwise.
|
|
84
|
+
"""
|
|
85
|
+
with self.lock:
|
|
86
|
+
return self.is_paused
|
|
87
|
+
|
|
88
|
+
def append_to_streaming_buffer(self, text: str) -> None:
|
|
89
|
+
"""Appends a chunk of text to the main streaming buffer."""
|
|
90
|
+
with self.lock:
|
|
91
|
+
self.streaming_buffer += text
|
|
92
|
+
|
|
93
|
+
def flush_streaming_buffer(self) -> str:
|
|
94
|
+
"""Returns the entire content of the streaming buffer and clears it."""
|
|
95
|
+
with self.lock:
|
|
96
|
+
content = self.streaming_buffer
|
|
97
|
+
self.streaming_buffer = ""
|
|
98
|
+
return content
|
|
99
|
+
|
|
100
|
+
def get_streaming_buffer_content(self) -> str:
|
|
101
|
+
"""Returns the current buffer content without clearing it."""
|
|
102
|
+
with self.lock:
|
|
103
|
+
return self.streaming_buffer
|
|
104
|
+
|
|
105
|
+
def append_to_run_based_buffer(self, text: str) -> None:
|
|
106
|
+
"""Appends a chunk of processed text to the run-based response buffer."""
|
|
107
|
+
with self.lock:
|
|
108
|
+
self.run_based_response_buffer += text
|
|
109
|
+
|
|
110
|
+
def register_peer_sub_task(
|
|
111
|
+
self, sub_task_id: str, correlation_data: Dict[str, Any]
|
|
112
|
+
) -> None:
|
|
113
|
+
"""Adds a new peer sub-task's correlation data to the tracking dictionary."""
|
|
114
|
+
with self.lock:
|
|
115
|
+
self.active_peer_sub_tasks[sub_task_id] = correlation_data
|
|
116
|
+
|
|
117
|
+
def claim_sub_task_completion(self, sub_task_id: str) -> Optional[Dict[str, Any]]:
|
|
118
|
+
"""
|
|
119
|
+
Atomically retrieves and removes a sub-task's correlation data.
|
|
120
|
+
This is the core atomic operation to prevent race conditions.
|
|
121
|
+
Returns the correlation data if the claim is successful, otherwise None.
|
|
122
|
+
"""
|
|
123
|
+
with self.lock:
|
|
124
|
+
return self.active_peer_sub_tasks.pop(sub_task_id, None)
|
|
125
|
+
|
|
126
|
+
def register_parallel_call_sent(self, invocation_id: str) -> None:
|
|
127
|
+
"""
|
|
128
|
+
Registers that a new parallel tool call has been sent for a specific invocation.
|
|
129
|
+
Initializes the tracking dictionary for the invocation if it's the first call,
|
|
130
|
+
otherwise increments the total.
|
|
131
|
+
"""
|
|
132
|
+
with self.lock:
|
|
133
|
+
if invocation_id not in self.parallel_tool_calls:
|
|
134
|
+
self.parallel_tool_calls[invocation_id] = {
|
|
135
|
+
"total": 1,
|
|
136
|
+
"completed": 0,
|
|
137
|
+
"results": [],
|
|
138
|
+
}
|
|
139
|
+
else:
|
|
140
|
+
self.parallel_tool_calls[invocation_id]["total"] += 1
|
|
141
|
+
|
|
142
|
+
def handle_peer_timeout(
|
|
143
|
+
self,
|
|
144
|
+
sub_task_id: str,
|
|
145
|
+
correlation_data: Dict,
|
|
146
|
+
timeout_sec: int,
|
|
147
|
+
invocation_id: str,
|
|
148
|
+
) -> bool:
|
|
149
|
+
"""
|
|
150
|
+
Handles a timeout for a specific peer sub-task for a given invocation.
|
|
151
|
+
|
|
152
|
+
Updates the parallel call tracker with a formatted error message and returns
|
|
153
|
+
True if all peer calls for that invocation are now complete.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
sub_task_id: The ID of the sub-task that timed out.
|
|
157
|
+
correlation_data: The correlation data associated with the sub-task.
|
|
158
|
+
timeout_sec: The timeout duration in seconds.
|
|
159
|
+
invocation_id: The ID of the invocation that initiated the parallel calls.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
A boolean indicating if all parallel calls for the invocation are now complete.
|
|
163
|
+
"""
|
|
164
|
+
peer_tool_name = correlation_data.get("peer_tool_name", "unknown_tool")
|
|
165
|
+
timeout_message = f"Request to peer agent tool '{peer_tool_name}' timed out after {timeout_sec} seconds."
|
|
166
|
+
|
|
167
|
+
# The payload must be a dictionary with a 'result' key containing the simple string.
|
|
168
|
+
# This ensures the ADK framework presents it to the LLM as a simple text response.
|
|
169
|
+
simple_error_payload = {"result": timeout_message}
|
|
170
|
+
|
|
171
|
+
current_result = {
|
|
172
|
+
"adk_function_call_id": correlation_data.get("adk_function_call_id"),
|
|
173
|
+
"peer_tool_name": peer_tool_name,
|
|
174
|
+
"payload": simple_error_payload,
|
|
175
|
+
}
|
|
176
|
+
return self.record_parallel_result(current_result, invocation_id)
|
|
177
|
+
|
|
178
|
+
def record_parallel_result(self, result: Dict, invocation_id: str) -> bool:
|
|
179
|
+
"""
|
|
180
|
+
Records a result for a parallel tool call for a specific invocation
|
|
181
|
+
and returns True if all calls for that invocation are now complete.
|
|
182
|
+
"""
|
|
183
|
+
with self.lock:
|
|
184
|
+
invocation_state = self.parallel_tool_calls.get(invocation_id)
|
|
185
|
+
if not invocation_state:
|
|
186
|
+
# This can happen if a response arrives after a timeout has cleaned up.
|
|
187
|
+
return False
|
|
188
|
+
|
|
189
|
+
invocation_state["results"].append(result)
|
|
190
|
+
invocation_state["completed"] += 1
|
|
191
|
+
return invocation_state["completed"] >= invocation_state["total"]
|
|
192
|
+
|
|
193
|
+
def clear_parallel_invocation_state(self, invocation_id: str) -> None:
|
|
194
|
+
"""
|
|
195
|
+
Removes the state for a completed parallel tool call invocation.
|
|
196
|
+
"""
|
|
197
|
+
with self.lock:
|
|
198
|
+
if invocation_id in self.parallel_tool_calls:
|
|
199
|
+
del self.parallel_tool_calls[invocation_id]
|
|
200
|
+
|
|
201
|
+
def register_produced_artifact(self, filename: str, version: int) -> None:
|
|
202
|
+
"""Adds a newly created artifact to the tracking list."""
|
|
203
|
+
with self.lock:
|
|
204
|
+
self.produced_artifacts.append({"filename": filename, "version": version})
|
|
205
|
+
|
|
206
|
+
def add_artifact_signal(self, signal: Dict[str, Any]) -> None:
|
|
207
|
+
"""Adds an artifact return signal to the list in a thread-safe manner."""
|
|
208
|
+
with self.lock:
|
|
209
|
+
self.artifact_signals_to_return.append(signal)
|
|
210
|
+
|
|
211
|
+
def get_and_clear_artifact_signals(self) -> List[Dict[str, Any]]:
|
|
212
|
+
"""
|
|
213
|
+
Retrieves all pending artifact signals and clears the list atomically.
|
|
214
|
+
"""
|
|
215
|
+
with self.lock:
|
|
216
|
+
signals = list(self.artifact_signals_to_return) # Create a copy
|
|
217
|
+
self.artifact_signals_to_return.clear()
|
|
218
|
+
return signals
|
|
219
|
+
|
|
220
|
+
def set_event_loop(self, loop: asyncio.AbstractEventLoop) -> None:
|
|
221
|
+
"""Stores a reference to the task's event loop."""
|
|
222
|
+
with self.lock:
|
|
223
|
+
self.event_loop = loop
|
|
224
|
+
|
|
225
|
+
def get_event_loop(self) -> Optional[asyncio.AbstractEventLoop]:
|
|
226
|
+
"""Retrieves the stored event loop."""
|
|
227
|
+
with self.lock:
|
|
228
|
+
return self.event_loop
|
|
229
|
+
|
|
230
|
+
def record_token_usage(
|
|
231
|
+
self,
|
|
232
|
+
input_tokens: int,
|
|
233
|
+
output_tokens: int,
|
|
234
|
+
model: str,
|
|
235
|
+
source: str = "agent",
|
|
236
|
+
tool_name: Optional[str] = None,
|
|
237
|
+
cached_input_tokens: int = 0,
|
|
238
|
+
) -> None:
|
|
239
|
+
"""
|
|
240
|
+
Records token usage for an LLM call.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
input_tokens: Number of input/prompt tokens.
|
|
244
|
+
output_tokens: Number of output/completion tokens.
|
|
245
|
+
model: Model identifier used for this call.
|
|
246
|
+
source: Source of the LLM call ("agent" or "tool").
|
|
247
|
+
tool_name: Tool name if source is "tool".
|
|
248
|
+
cached_input_tokens: Number of cached input tokens (optional).
|
|
249
|
+
"""
|
|
250
|
+
with self.lock:
|
|
251
|
+
# Update totals
|
|
252
|
+
self.total_input_tokens += input_tokens
|
|
253
|
+
self.total_output_tokens += output_tokens
|
|
254
|
+
self.total_cached_input_tokens += cached_input_tokens
|
|
255
|
+
|
|
256
|
+
# Track by model
|
|
257
|
+
if model not in self.token_usage_by_model:
|
|
258
|
+
self.token_usage_by_model[model] = {
|
|
259
|
+
"input_tokens": 0,
|
|
260
|
+
"output_tokens": 0,
|
|
261
|
+
"cached_input_tokens": 0,
|
|
262
|
+
}
|
|
263
|
+
self.token_usage_by_model[model]["input_tokens"] += input_tokens
|
|
264
|
+
self.token_usage_by_model[model]["output_tokens"] += output_tokens
|
|
265
|
+
self.token_usage_by_model[model]["cached_input_tokens"] += cached_input_tokens
|
|
266
|
+
|
|
267
|
+
# Track by source
|
|
268
|
+
source_key = f"{source}:{tool_name}" if tool_name else source
|
|
269
|
+
if source_key not in self.token_usage_by_source:
|
|
270
|
+
self.token_usage_by_source[source_key] = {
|
|
271
|
+
"input_tokens": 0,
|
|
272
|
+
"output_tokens": 0,
|
|
273
|
+
"cached_input_tokens": 0,
|
|
274
|
+
}
|
|
275
|
+
self.token_usage_by_source[source_key]["input_tokens"] += input_tokens
|
|
276
|
+
self.token_usage_by_source[source_key]["output_tokens"] += output_tokens
|
|
277
|
+
self.token_usage_by_source[source_key]["cached_input_tokens"] += cached_input_tokens
|
|
278
|
+
|
|
279
|
+
def get_token_usage_summary(self) -> Dict[str, Any]:
|
|
280
|
+
"""
|
|
281
|
+
Returns a summary of all token usage for this task.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Dictionary containing total token counts and breakdowns by model and source.
|
|
285
|
+
"""
|
|
286
|
+
with self.lock:
|
|
287
|
+
return {
|
|
288
|
+
"total_input_tokens": self.total_input_tokens,
|
|
289
|
+
"total_output_tokens": self.total_output_tokens,
|
|
290
|
+
"total_cached_input_tokens": self.total_cached_input_tokens,
|
|
291
|
+
"total_tokens": self.total_input_tokens + self.total_output_tokens,
|
|
292
|
+
"by_model": dict(self.token_usage_by_model),
|
|
293
|
+
"by_source": dict(self.token_usage_by_source),
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
def set_security_data(self, key: str, value: Any) -> None:
|
|
297
|
+
"""
|
|
298
|
+
Store opaque security data (enterprise use only).
|
|
299
|
+
|
|
300
|
+
This method provides a secure storage mechanism for enterprise security features
|
|
301
|
+
such as authentication tokens. The stored data is isolated per task and
|
|
302
|
+
automatically cleaned up when the task completes.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
key: Storage key for the security data
|
|
306
|
+
value: Security data to store (opaque to open source code)
|
|
307
|
+
"""
|
|
308
|
+
with self.lock:
|
|
309
|
+
self._security_context[key] = value
|
|
310
|
+
|
|
311
|
+
def get_security_data(self, key: str, default: Any = None) -> Any:
|
|
312
|
+
"""
|
|
313
|
+
Retrieve opaque security data (enterprise use only).
|
|
314
|
+
|
|
315
|
+
This method retrieves security data that was previously stored using
|
|
316
|
+
set_security_data(). The data is opaque to open source code.
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
key: Storage key for the security data
|
|
320
|
+
default: Default value to return if key not found
|
|
321
|
+
|
|
322
|
+
Returns:
|
|
323
|
+
The stored security data, or default if not found
|
|
324
|
+
"""
|
|
325
|
+
with self.lock:
|
|
326
|
+
return self._security_context.get(key, default)
|
|
327
|
+
|
|
328
|
+
def clear_security_data(self) -> None:
|
|
329
|
+
"""
|
|
330
|
+
Clear all security data.
|
|
331
|
+
|
|
332
|
+
This method is provided for completeness but is not explicitly called.
|
|
333
|
+
Security data is automatically cleaned up when the TaskExecutionContext
|
|
334
|
+
is removed from active_tasks and garbage collected.
|
|
335
|
+
"""
|
|
336
|
+
with self.lock:
|
|
337
|
+
self._security_context.clear()
|
|
338
|
+
|
|
339
|
+
def set_original_solace_message(self, message: Optional["SolaceMessage"]) -> None:
|
|
340
|
+
"""
|
|
341
|
+
Store the original Solace message for this task.
|
|
342
|
+
|
|
343
|
+
This message is used for ACK/NACK operations when the task completes.
|
|
344
|
+
Stored separately from a2a_context to avoid serialization issues when
|
|
345
|
+
the context is persisted to the ADK session state.
|
|
346
|
+
|
|
347
|
+
Args:
|
|
348
|
+
message: The Solace message that initiated this task, or None
|
|
349
|
+
"""
|
|
350
|
+
with self.lock:
|
|
351
|
+
self._original_solace_message = message
|
|
352
|
+
|
|
353
|
+
def get_original_solace_message(self) -> Optional["SolaceMessage"]:
|
|
354
|
+
"""
|
|
355
|
+
Retrieve the original Solace message for this task.
|
|
356
|
+
|
|
357
|
+
Returns:
|
|
358
|
+
The Solace message that initiated this task, or None if not available
|
|
359
|
+
"""
|
|
360
|
+
with self.lock:
|
|
361
|
+
return self._original_solace_message
|
|
362
|
+
|
|
363
|
+
def check_and_update_invocation(self, new_invocation_id: str) -> bool:
|
|
364
|
+
"""
|
|
365
|
+
Check if this is a new turn (different invocation_id) and update tracking.
|
|
366
|
+
|
|
367
|
+
Args:
|
|
368
|
+
new_invocation_id: The invocation_id from the current ADK event
|
|
369
|
+
|
|
370
|
+
Returns:
|
|
371
|
+
True if this is a new turn (invocation_id changed), False otherwise
|
|
372
|
+
"""
|
|
373
|
+
with self.lock:
|
|
374
|
+
is_new_turn = (
|
|
375
|
+
self._current_invocation_id is not None
|
|
376
|
+
and self._current_invocation_id != new_invocation_id
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
if is_new_turn:
|
|
380
|
+
# Mark that we need spacing before the next text
|
|
381
|
+
self._need_spacing_before_next_text = True
|
|
382
|
+
|
|
383
|
+
if is_new_turn or self._current_invocation_id is None:
|
|
384
|
+
self._current_invocation_id = new_invocation_id
|
|
385
|
+
self._first_text_seen_in_turn = False
|
|
386
|
+
|
|
387
|
+
return is_new_turn
|
|
388
|
+
|
|
389
|
+
def is_first_text_in_turn(self) -> bool:
|
|
390
|
+
"""
|
|
391
|
+
Check if this is the first text we're seeing in the current turn,
|
|
392
|
+
and mark it as seen.
|
|
393
|
+
|
|
394
|
+
Returns:
|
|
395
|
+
True if this is the first text in the turn, False otherwise
|
|
396
|
+
"""
|
|
397
|
+
with self.lock:
|
|
398
|
+
if not self._first_text_seen_in_turn:
|
|
399
|
+
self._first_text_seen_in_turn = True
|
|
400
|
+
return True
|
|
401
|
+
return False
|
|
402
|
+
|
|
403
|
+
def should_add_turn_spacing(self) -> bool:
|
|
404
|
+
"""
|
|
405
|
+
Check if we need to add spacing before the next text (because it's a new turn).
|
|
406
|
+
This flag is set when a new invocation starts and cleared after spacing is added.
|
|
407
|
+
|
|
408
|
+
Returns:
|
|
409
|
+
True if spacing should be added, False otherwise
|
|
410
|
+
"""
|
|
411
|
+
with self.lock:
|
|
412
|
+
if self._need_spacing_before_next_text:
|
|
413
|
+
self._need_spacing_before_next_text = False
|
|
414
|
+
return True
|
|
415
|
+
return False
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Provides debugging utilities for the declarative test framework,
|
|
3
|
+
including a pretty-printer for A2A event history.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from typing import List, Dict, Any
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _truncate(s: str, max_len: int) -> str:
|
|
12
|
+
"""Truncates a string if it exceeds max_len, appending '...'."""
|
|
13
|
+
if not isinstance(s, str):
|
|
14
|
+
s = str(s)
|
|
15
|
+
if max_len <= 0 or len(s) <= max_len:
|
|
16
|
+
return s
|
|
17
|
+
if max_len <= 3:
|
|
18
|
+
return s[:max_len]
|
|
19
|
+
return s[: max_len - 3] + "..."
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _format_a2a_parts(parts: List[Dict], max_string_length: int) -> str:
|
|
23
|
+
"""Helper to format A2A message parts into a readable string."""
|
|
24
|
+
if not parts:
|
|
25
|
+
return "[No Parts]"
|
|
26
|
+
|
|
27
|
+
formatted_parts = []
|
|
28
|
+
for part in parts:
|
|
29
|
+
part_type = part.get("type", "unknown")
|
|
30
|
+
if part_type == "text":
|
|
31
|
+
text = part.get("text", "")
|
|
32
|
+
formatted_parts.append(
|
|
33
|
+
f" - [Text]: '{_truncate(text, max_string_length)}'"
|
|
34
|
+
)
|
|
35
|
+
elif part_type == "data":
|
|
36
|
+
data_content = json.dumps(part.get("data", {}))
|
|
37
|
+
formatted_parts.append(
|
|
38
|
+
f" - [Data]: {_truncate(data_content, max_string_length)}"
|
|
39
|
+
)
|
|
40
|
+
elif part_type == "file":
|
|
41
|
+
file_info = part.get("file", {})
|
|
42
|
+
name = file_info.get("name", "N/A")
|
|
43
|
+
mime = file_info.get("mimeType", "N/A")
|
|
44
|
+
formatted_parts.append(
|
|
45
|
+
f" - [File]: {_truncate(name, max_string_length)} ({mime})"
|
|
46
|
+
)
|
|
47
|
+
else:
|
|
48
|
+
part_str = json.dumps(part)
|
|
49
|
+
formatted_parts.append(
|
|
50
|
+
f" - [Unknown Part]: {_truncate(part_str, max_string_length)}"
|
|
51
|
+
)
|
|
52
|
+
return "\n".join(formatted_parts)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _truncate_dict_strings(data: Any, max_len: int) -> Any:
|
|
56
|
+
"""Recursively traverses a dict/list and truncates all string values."""
|
|
57
|
+
if max_len <= 0:
|
|
58
|
+
return data
|
|
59
|
+
if isinstance(data, dict):
|
|
60
|
+
return {k: _truncate_dict_strings(v, max_len) for k, v in data.items()}
|
|
61
|
+
elif isinstance(data, list):
|
|
62
|
+
return [_truncate_dict_strings(item, max_len) for item in data]
|
|
63
|
+
elif isinstance(data, str):
|
|
64
|
+
return _truncate(data, max_len)
|
|
65
|
+
else:
|
|
66
|
+
return data
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def pretty_print_event_history(
|
|
70
|
+
event_history: List[Dict[str, Any]], max_string_length: int = 200
|
|
71
|
+
):
|
|
72
|
+
"""
|
|
73
|
+
Formats and prints a list of A2A event payloads for debugging.
|
|
74
|
+
"""
|
|
75
|
+
if not event_history:
|
|
76
|
+
print("\n" + "=" * 25 + " NO EVENTS RECORDED " + "=" * 25)
|
|
77
|
+
print("--- The test failed before any events were received from the agent. ---")
|
|
78
|
+
print("=" * 70 + "\n")
|
|
79
|
+
return
|
|
80
|
+
|
|
81
|
+
print("\n" + "=" * 25 + " TASK EVENT HISTORY " + "=" * 25)
|
|
82
|
+
for i, event_payload in enumerate(event_history):
|
|
83
|
+
print(f"\n--- Event {i+1} ---")
|
|
84
|
+
|
|
85
|
+
event_type = "Unknown Event"
|
|
86
|
+
details = ""
|
|
87
|
+
|
|
88
|
+
result = event_payload.get("result", {})
|
|
89
|
+
error = event_payload.get("error")
|
|
90
|
+
|
|
91
|
+
if error:
|
|
92
|
+
event_type = "Error Response"
|
|
93
|
+
details += f" Error Code: {error.get('code')}\n"
|
|
94
|
+
details += f" Error Message: {_truncate(error.get('message'), max_string_length)}\n"
|
|
95
|
+
|
|
96
|
+
elif result.get("status") and result.get("final") is not None:
|
|
97
|
+
event_type = "Task Status Update"
|
|
98
|
+
status = result.get("status", {})
|
|
99
|
+
state = status.get("state", "UNKNOWN")
|
|
100
|
+
message = status.get("message", {})
|
|
101
|
+
parts = message.get("parts", [])
|
|
102
|
+
details += f" State: {state}\n"
|
|
103
|
+
details += f" Parts:\n{_format_a2a_parts(parts, max_string_length)}\n"
|
|
104
|
+
|
|
105
|
+
elif result.get("status") and result.get("sessionId"):
|
|
106
|
+
event_type = "Final Task Response"
|
|
107
|
+
status = result.get("status", {})
|
|
108
|
+
state = status.get("state", "UNKNOWN")
|
|
109
|
+
message = status.get("message", {})
|
|
110
|
+
parts = message.get("parts", [])
|
|
111
|
+
details += f" Final State: {state}\n"
|
|
112
|
+
details += (
|
|
113
|
+
f" Final Parts:\n{_format_a2a_parts(parts, max_string_length)}\n"
|
|
114
|
+
)
|
|
115
|
+
if result.get("artifacts"):
|
|
116
|
+
artifacts_str = json.dumps(result.get("artifacts"))
|
|
117
|
+
details += (
|
|
118
|
+
f" Artifacts: {_truncate(artifacts_str, max_string_length)}\n"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
elif result.get("artifact"):
|
|
122
|
+
event_type = "Task Artifact Update"
|
|
123
|
+
artifact = result.get("artifact", {})
|
|
124
|
+
details += f" Artifact Name: {_truncate(artifact.get('name'), max_string_length)}\n"
|
|
125
|
+
details += f" Artifact Parts:\n{_format_a2a_parts(artifact.get('parts', []), max_string_length)}\n"
|
|
126
|
+
|
|
127
|
+
print(f"Type: {event_type}")
|
|
128
|
+
if details:
|
|
129
|
+
print(details, end="")
|
|
130
|
+
|
|
131
|
+
print("Raw Payload:")
|
|
132
|
+
truncated_payload = _truncate_dict_strings(event_payload, max_string_length)
|
|
133
|
+
print(json.dumps(truncated_payload, indent=2))
|
|
134
|
+
|
|
135
|
+
print("=" * 70 + "\n")
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
## Quick Summary
|
|
2
|
+
The `testing` directory provides utilities for testing the A2A (Agent-to-Agent) framework, with a focus on debugging tools that help developers understand test failures by providing readable representations of agent event histories.
|
|
3
|
+
|
|
4
|
+
## Files Overview
|
|
5
|
+
- `__init__.py` - Package initialization file marking the directory as a Python module
|
|
6
|
+
- `debug_utils.py` - Debugging utilities including pretty-printing for A2A event history
|
|
7
|
+
- `testing_llm.txt` - Documentation file (not a code module)
|
|
8
|
+
- `testing_llm_detail.txt` - Concatenated documentation file (not a code module)
|
|
9
|
+
|
|
10
|
+
## Developer API Reference
|
|
11
|
+
|
|
12
|
+
### debug_utils.py
|
|
13
|
+
**Purpose:** Provides debugging utilities for the declarative test framework, including a pretty-printer for A2A event history
|
|
14
|
+
**Import:** `from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history`
|
|
15
|
+
|
|
16
|
+
**Functions:**
|
|
17
|
+
- `pretty_print_event_history(event_history: List[Dict[str, Any]], max_string_length: int = 200) -> None` - Formats and prints a list of A2A event payloads for debugging, intelligently parsing different event types and truncating long strings for readability
|
|
18
|
+
|
|
19
|
+
**Usage Examples:**
|
|
20
|
+
```python
|
|
21
|
+
# Import the debugging utility
|
|
22
|
+
from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
|
|
23
|
+
from typing import List, Dict, Any
|
|
24
|
+
|
|
25
|
+
# Example: Debug a failed test by printing event history
|
|
26
|
+
event_history: List[Dict[str, Any]] = [
|
|
27
|
+
{
|
|
28
|
+
"result": {
|
|
29
|
+
"status": {
|
|
30
|
+
"state": "EXECUTING",
|
|
31
|
+
"message": {
|
|
32
|
+
"parts": [
|
|
33
|
+
{"type": "text", "text": "Processing your request..."}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"final": False
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"error": {
|
|
42
|
+
"code": "TIMEOUT_ERROR",
|
|
43
|
+
"message": "Request timed out after 30 seconds"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# Print formatted event history for debugging
|
|
49
|
+
pretty_print_event_history(event_history)
|
|
50
|
+
|
|
51
|
+
# Print with custom string truncation length
|
|
52
|
+
pretty_print_event_history(event_history, max_string_length=100)
|
|
53
|
+
|
|
54
|
+
# Handle empty event history (when test fails before any events)
|
|
55
|
+
pretty_print_event_history([])
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
# content_hash: 09db923206be2f0cd02c12cb97cf50f7b6364773fae328dd0570e69067cc1971
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# LLM Summary Detail File
|
|
2
|
+
|
|
3
|
+
This file is a concatenation of all individual *llm.txt files found in the 'testing' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
+
|
|
5
|
+
================================================================================
|
|
6
|
+
|
|
7
|
+
## Section 1: solace_agent_mesh/agent/testing/testing_llm.txt
|
|
8
|
+
|
|
9
|
+
**Source file:** `solace_agent_mesh/agent/testing/testing_llm.txt`
|
|
10
|
+
|
|
11
|
+
## Quick Summary
|
|
12
|
+
The `testing` directory provides utilities for testing the A2A (Agent-to-Agent) framework, with a focus on debugging tools that help developers understand test failures by providing readable representations of agent event histories.
|
|
13
|
+
|
|
14
|
+
## Files Overview
|
|
15
|
+
- `__init__.py` - Package initialization file marking the directory as a Python module
|
|
16
|
+
- `debug_utils.py` - Debugging utilities including pretty-printing for A2A event history
|
|
17
|
+
- `testing_llm.txt` - Documentation file (not a code module)
|
|
18
|
+
|
|
19
|
+
## Developer API Reference
|
|
20
|
+
|
|
21
|
+
### debug_utils.py
|
|
22
|
+
**Purpose:** Provides debugging utilities for the declarative test framework, including a pretty-printer for A2A event history
|
|
23
|
+
**Import:** `from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history`
|
|
24
|
+
|
|
25
|
+
**Functions:**
|
|
26
|
+
- `pretty_print_event_history(event_history: List[Dict[str, Any]], max_string_length: int = 200) -> None` - Formats and prints a list of A2A event payloads for debugging, intelligently parsing different event types and truncating long strings for readability
|
|
27
|
+
|
|
28
|
+
**Usage Examples:**
|
|
29
|
+
```python
|
|
30
|
+
# Import the debugging utility
|
|
31
|
+
from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
|
|
32
|
+
from typing import List, Dict, Any
|
|
33
|
+
|
|
34
|
+
# Example: Debug a failed test by printing event history
|
|
35
|
+
event_history: List[Dict[str, Any]] = [
|
|
36
|
+
{
|
|
37
|
+
"result": {
|
|
38
|
+
"status": {
|
|
39
|
+
"state": "EXECUTING",
|
|
40
|
+
"message": {
|
|
41
|
+
"parts": [
|
|
42
|
+
{"type": "text", "text": "Processing your request..."}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"final": False
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"error": {
|
|
51
|
+
"code": "TIMEOUT_ERROR",
|
|
52
|
+
"message": "Request timed out after 30 seconds"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
# Print formatted event history for debugging
|
|
58
|
+
pretty_print_event_history(event_history)
|
|
59
|
+
|
|
60
|
+
# Print with custom string truncation length
|
|
61
|
+
pretty_print_event_history(event_history, max_string_length=100)
|
|
62
|
+
|
|
63
|
+
# Handle empty event history (when test fails before any events)
|
|
64
|
+
pretty_print_event_history([])
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
================================================================================
|
|
68
|
+
|