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,53 @@
|
|
|
1
|
+
# Solace Agent Mesh Agent Configuration
|
|
2
|
+
|
|
3
|
+
log:
|
|
4
|
+
stdout_log_level: INFO
|
|
5
|
+
log_file_level: DEBUG
|
|
6
|
+
log_file: a2a_agent.log
|
|
7
|
+
|
|
8
|
+
!include ../shared_config.yaml
|
|
9
|
+
|
|
10
|
+
apps:
|
|
11
|
+
- name: "__AGENT_NAME____app"
|
|
12
|
+
app_base_path: .
|
|
13
|
+
app_module: solace_agent_mesh.agent.sac.app
|
|
14
|
+
broker:
|
|
15
|
+
<<: *broker_connection
|
|
16
|
+
|
|
17
|
+
app_config:
|
|
18
|
+
namespace: "__NAMESPACE__"
|
|
19
|
+
supports_streaming: __SUPPORTS_STREAMING__
|
|
20
|
+
agent_name: "__AGENT_NAME__"
|
|
21
|
+
display_name: "__AGENT_SPACED_NAME__ Agent"
|
|
22
|
+
model: __MODEL_ALIAS__
|
|
23
|
+
|
|
24
|
+
instruction: |
|
|
25
|
+
__INSTRUCTION__
|
|
26
|
+
|
|
27
|
+
tools: __TOOLS_CONFIG__
|
|
28
|
+
|
|
29
|
+
session_service: __SESSION_SERVICE__
|
|
30
|
+
artifact_service: __ARTIFACT_SERVICE__
|
|
31
|
+
|
|
32
|
+
artifact_handling_mode: "__ARTIFACT_HANDLING_MODE__"
|
|
33
|
+
enable_embed_resolution: __ENABLE_EMBED_RESOLUTION__
|
|
34
|
+
enable_artifact_content_instruction: __ENABLE_ARTIFACT_CONTENT_INSTRUCTION__
|
|
35
|
+
data_tools_config: *default_data_tools_config
|
|
36
|
+
|
|
37
|
+
# Agent Card Definition
|
|
38
|
+
agent_card:
|
|
39
|
+
description: |
|
|
40
|
+
__AGENT_CARD_DESCRIPTION__
|
|
41
|
+
defaultInputModes: __DEFAULT_INPUT_MODES__
|
|
42
|
+
defaultOutputModes: __DEFAULT_OUTPUT_MODES__
|
|
43
|
+
skills: __AGENT_CARD_SKILLS__
|
|
44
|
+
|
|
45
|
+
# Discovery & Communication
|
|
46
|
+
agent_card_publishing:
|
|
47
|
+
interval_seconds: __AGENT_CARD_PUBLISHING_INTERVAL__
|
|
48
|
+
agent_discovery:
|
|
49
|
+
enabled: __AGENT_DISCOVERY_ENABLED__
|
|
50
|
+
inter_agent_communication:
|
|
51
|
+
allow_list: __INTER_AGENT_COMMUNICATION_ALLOW_LIST__
|
|
52
|
+
deny_list: __INTER_AGENT_COMMUNICATION_DENY_LIST__
|
|
53
|
+
request_timeout_seconds: __INTER_AGENT_COMMUNICATION_TIMEOUT__
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Solace AI Connector Configuration for Evaluation Backend
|
|
2
|
+
|
|
3
|
+
log:
|
|
4
|
+
stdout_log_level: INFO
|
|
5
|
+
log_file_level: DEBUG
|
|
6
|
+
log_file: eval_backend.log
|
|
7
|
+
|
|
8
|
+
# Shared SAM config
|
|
9
|
+
!include ./shared_config.yaml
|
|
10
|
+
|
|
11
|
+
apps:
|
|
12
|
+
- name: a2a_eval_backend_app
|
|
13
|
+
app_base_path: .
|
|
14
|
+
app_module: sam_rest_gateway.app
|
|
15
|
+
|
|
16
|
+
broker:
|
|
17
|
+
<<: *broker_connection
|
|
18
|
+
|
|
19
|
+
app_config:
|
|
20
|
+
namespace: ${NAMESPACE}
|
|
21
|
+
session_secret_key: ${SESSION_SECRET_KEY, please_change_me_in_production}
|
|
22
|
+
|
|
23
|
+
artifact_service:
|
|
24
|
+
type: "filesystem"
|
|
25
|
+
base_path: "/tmp/samv2"
|
|
26
|
+
artifact_scope: namespace
|
|
27
|
+
|
|
28
|
+
enforce_authentication: false
|
|
29
|
+
default_user_identity: "eval-user"
|
|
30
|
+
sync_mode_timeout_seconds: 300
|
|
31
|
+
rest_api_server_host: ${REST_API_HOST, 0.0.0.0}
|
|
32
|
+
rest_api_server_port: ${REST_API_PORT, 8080}
|
|
33
|
+
cors_allowed_origins:
|
|
34
|
+
- "http://localhost:3000"
|
|
35
|
+
- "http://127.0.0.1:3000"
|
|
36
|
+
|
|
37
|
+
enable_embed_resolution: ${ENABLE_EMBED_RESOLUTION, true}
|
|
38
|
+
gateway_artifact_content_limit_bytes: ${GATEWAY_ARTIFACT_LIMIT_BYTES, 10000000}
|
|
39
|
+
|
|
40
|
+
system_purpose: >
|
|
41
|
+
The system is an AI Chatbot with agentic capabilities.
|
|
42
|
+
It will use the agents available to provide information,
|
|
43
|
+
reasoning and general assistance for the users in this system.
|
|
44
|
+
**Always return useful artifacts and files that you create to the user.**
|
|
45
|
+
Provide a status update before each tool call.
|
|
46
|
+
Your external name is Agent Mesh.
|
|
47
|
+
|
|
48
|
+
response_format: >
|
|
49
|
+
Responses should be clear, concise, and professionally toned.
|
|
50
|
+
Format responses to the user in Markdown using appropriate formatting.
|
|
51
|
+
|
|
52
|
+
frontend_welcome_message: ${FRONTEND_WELCOME_MESSAGE, ""}
|
|
53
|
+
frontend_bot_name: ${FRONTEND_BOT_NAME, "Solace Agent Mesh"}
|
|
54
|
+
frontend_collect_feedback: ${FRONTEND_COLLECT_FEEDBACK, false}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Solace Agent Mesh App class for the __GATEWAY_NAME_PASCAL_CASE__ Gateway.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Any, Dict, List, Type
|
|
7
|
+
|
|
8
|
+
from solace_agent_mesh.gateway.base.app import BaseGatewayApp
|
|
9
|
+
from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
|
|
10
|
+
|
|
11
|
+
from .component import __GATEWAY_NAME_PASCAL_CASE__GatewayComponent
|
|
12
|
+
|
|
13
|
+
log = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
info = {
|
|
16
|
+
"class_name": "__GATEWAY_NAME_PASCAL_CASE__GatewayApp",
|
|
17
|
+
"description": "Custom App class for the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class __GATEWAY_NAME_PASCAL_CASE__GatewayApp(BaseGatewayApp):
|
|
21
|
+
"""
|
|
22
|
+
App class for the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.
|
|
23
|
+
- Extends BaseGatewayApp for common gateway functionalities.
|
|
24
|
+
- Defines __GATEWAY_NAME_PASCAL_CASE__-specific configuration parameters below.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
# Define __GATEWAY_NAME_PASCAL_CASE__-specific parameters
|
|
28
|
+
# This list will be automatically merged with BaseGatewayApp's schema.
|
|
29
|
+
# These parameters will be configurable in the yaml config file
|
|
30
|
+
# under the 'app_config' section.
|
|
31
|
+
SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
|
|
32
|
+
# --- Example Required Parameter ---
|
|
33
|
+
# {
|
|
34
|
+
# "name": "api_endpoint_url",
|
|
35
|
+
# "required": True,
|
|
36
|
+
# "type": "string",
|
|
37
|
+
# "description": "The API endpoint URL for the __GATEWAY_NAME_SNAKE_CASE__ service.",
|
|
38
|
+
# },
|
|
39
|
+
# --- Example Optional Parameter with Default ---
|
|
40
|
+
# {
|
|
41
|
+
# "name": "connection_timeout_seconds",
|
|
42
|
+
# "required": False,
|
|
43
|
+
# "type": "integer",
|
|
44
|
+
# "default": 30,
|
|
45
|
+
# "description": "Timeout in seconds for connecting to the __GATEWAY_NAME_SNAKE_CASE__ service.",
|
|
46
|
+
# },
|
|
47
|
+
# --- Example List Parameter ---
|
|
48
|
+
# {
|
|
49
|
+
# "name": "processing_rules",
|
|
50
|
+
# "required": False,
|
|
51
|
+
# "type": "list",
|
|
52
|
+
# "default": [],
|
|
53
|
+
# "description": "List of processing rules for the gateway.",
|
|
54
|
+
# "items": { # Schema for each item in the list
|
|
55
|
+
# "type": "object",
|
|
56
|
+
# "properties": {
|
|
57
|
+
# "rule_name": {"type": "string", "required": True},
|
|
58
|
+
# "action_type": {"type": "string", "enum": ["process", "ignore"]},
|
|
59
|
+
# # ... other rule-specific schema fields
|
|
60
|
+
# }
|
|
61
|
+
# }
|
|
62
|
+
# }
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
def __init__(self, app_info: Dict[str, Any], **kwargs):
|
|
66
|
+
log_prefix = app_info.get("name", "__GATEWAY_NAME_PASCAL_CASE__GatewayApp")
|
|
67
|
+
log.debug("[%s] Initializing __GATEWAY_NAME_PASCAL_CASE__GatewayApp...", log_prefix)
|
|
68
|
+
super().__init__(app_info=app_info, **kwargs)
|
|
69
|
+
log.debug("[%s] __GATEWAY_NAME_PASCAL_CASE__GatewayApp initialization complete.", self.name)
|
|
70
|
+
|
|
71
|
+
def _get_gateway_component_class(self) -> Type[BaseGatewayComponent]:
|
|
72
|
+
"""
|
|
73
|
+
Returns the specific gateway component class for this app.
|
|
74
|
+
"""
|
|
75
|
+
return __GATEWAY_NAME_PASCAL_CASE__GatewayComponent
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Solace Agent Mesh Component class for the __GATEWAY_NAME_PASCAL_CASE__ Gateway.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
7
|
+
|
|
8
|
+
from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
|
|
9
|
+
from a2a.types import (
|
|
10
|
+
TextPart,
|
|
11
|
+
FilePart, # If handling files
|
|
12
|
+
DataPart, # If handling structured data
|
|
13
|
+
Task,
|
|
14
|
+
TaskStatusUpdateEvent,
|
|
15
|
+
TaskArtifactUpdateEvent,
|
|
16
|
+
JSONRPCError,
|
|
17
|
+
)
|
|
18
|
+
from ...common import a2a
|
|
19
|
+
from ...common.a2a import ContentPart
|
|
20
|
+
|
|
21
|
+
log = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
info = {
|
|
24
|
+
"class_name": "__GATEWAY_NAME_PASCAL_CASE__GatewayComponent",
|
|
25
|
+
"description": (
|
|
26
|
+
"Implements the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway, inheriting from BaseGatewayComponent. "
|
|
27
|
+
"Handles communication between the __GATEWAY_NAME_SNAKE_CASE__ system and the A2A agent ecosystem."
|
|
28
|
+
),
|
|
29
|
+
"config_parameters": [], # Defined by __GATEWAY_NAME_PASCAL_CASE__GatewayApp
|
|
30
|
+
# Not needed for gateway components
|
|
31
|
+
"input_schema": {},
|
|
32
|
+
"output_schema": {},
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class __GATEWAY_NAME_PASCAL_CASE__GatewayComponent(BaseGatewayComponent):
|
|
37
|
+
"""
|
|
38
|
+
Solace Agent Mesh Component implementing the A2A __GATEWAY_NAME_PASCAL_CASE__ Gateway.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, **kwargs: Any):
|
|
42
|
+
super().__init__(**kwargs)
|
|
43
|
+
log.info(
|
|
44
|
+
"%s Initializing __GATEWAY_NAME_PASCAL_CASE__ Gateway Component (Post-Base)...",
|
|
45
|
+
self.log_identifier,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# --- Retrieve Gateway-Specific Configurations ---
|
|
49
|
+
# Example: self.api_endpoint_url = self.get_config("api_endpoint_url")
|
|
50
|
+
# Example: self.connection_timeout = self.get_config("connection_timeout_seconds")
|
|
51
|
+
# Example: self.processing_rules = self.get_config("processing_rules")
|
|
52
|
+
|
|
53
|
+
# --- Initialize External System Client/SDK ---
|
|
54
|
+
# Example: self.external_client = SomeApiClient(api_key=self.service_api_key, endpoint=self.api_endpoint_url)
|
|
55
|
+
# Ensure any client initialization is robust and handles potential errors.
|
|
56
|
+
|
|
57
|
+
log.info(
|
|
58
|
+
"%s __GATEWAY_NAME_PASCAL_CASE__ Gateway Component initialization complete.",
|
|
59
|
+
self.log_identifier,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
def _start_listener(self) -> None:
|
|
63
|
+
"""
|
|
64
|
+
GDK Hook: Start listening for events/requests from the external __GATEWAY_NAME_SNAKE_CASE__ system.
|
|
65
|
+
This method is called by BaseGatewayComponent.run() within self.async_loop.
|
|
66
|
+
- For polling: Start a polling loop (e.g., in a new thread or asyncio task).
|
|
67
|
+
- For webhooks: If embedding a server (like FastAPI in WebhookGateway), start it here.
|
|
68
|
+
- For SDKs with callbacks: Register your callbacks here.
|
|
69
|
+
"""
|
|
70
|
+
log_id_prefix = f"{self.log_identifier}[StartListener]"
|
|
71
|
+
log.info(
|
|
72
|
+
"%s Starting listener for __GATEWAY_NAME_SNAKE_CASE__ system...",
|
|
73
|
+
log_id_prefix,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
# Example for a polling mechanism (adapt as needed):
|
|
77
|
+
# if self.async_loop and self.async_loop.is_running():
|
|
78
|
+
# self.async_loop.create_task(self._poll_external_system())
|
|
79
|
+
# else:
|
|
80
|
+
# log.error("%s Async loop not available or not running. Cannot start polling.", log_id_prefix)
|
|
81
|
+
# self.stop_signal.set() # Signal component to stop if listener cannot start
|
|
82
|
+
|
|
83
|
+
# If your external system uses an SDK that runs its own event loop or requires
|
|
84
|
+
# a blocking call to start, manage that appropriately (e.g., in a separate thread
|
|
85
|
+
# that communicates back to the async_loop via asyncio.run_coroutine_threadsafe).
|
|
86
|
+
|
|
87
|
+
log.info(
|
|
88
|
+
"%s __GATEWAY_NAME_SNAKE_CASE__ listener startup initiated.", log_id_prefix
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# async def _poll_external_system(self): # Example polling loop
|
|
92
|
+
# log_id_prefix = f"{self.log_identifier}[PollLoop]"
|
|
93
|
+
# log.info("%s Starting __GATEWAY_NAME_SNAKE_CASE__ polling loop...", log_id_prefix)
|
|
94
|
+
# while not self.stop_signal.is_set():
|
|
95
|
+
# try:
|
|
96
|
+
# # new_events = await self.external_client.get_new_events() # Or sync equivalent
|
|
97
|
+
# # for event_data in new_events:
|
|
98
|
+
# # # 1. Authenticate the user and enrich their profile.
|
|
99
|
+
# # user_identity = await self.authenticate_and_enrich_user(event_data)
|
|
100
|
+
# # if not user_identity:
|
|
101
|
+
# # log.warning("%s Authentication failed for event, skipping.", log_id_prefix)
|
|
102
|
+
# # continue
|
|
103
|
+
# #
|
|
104
|
+
# # # 2. Translate the external event into an A2A task.
|
|
105
|
+
# # try:
|
|
106
|
+
# # target_agent, parts, context = await self._translate_external_input(event_data)
|
|
107
|
+
# # except ValueError as e:
|
|
108
|
+
# # log.error("%s Translation failed for event: %s", log_id_prefix, e)
|
|
109
|
+
# # # Optionally, send an error back to the user in the external system here.
|
|
110
|
+
# # continue
|
|
111
|
+
# #
|
|
112
|
+
# # # 3. Submit the A2A task.
|
|
113
|
+
# # if target_agent and parts:
|
|
114
|
+
# # await self.submit_a2a_task(
|
|
115
|
+
# # target_agent_name=target_agent,
|
|
116
|
+
# # a2a_parts=parts,
|
|
117
|
+
# # external_request_context=context,
|
|
118
|
+
# # user_identity=user_identity,
|
|
119
|
+
# # is_streaming=True # Or False, depending on gateway needs
|
|
120
|
+
# # )
|
|
121
|
+
# #
|
|
122
|
+
# # await asyncio.sleep(self.get_config("polling_interval_seconds", 60))
|
|
123
|
+
# pass # Placeholder
|
|
124
|
+
# except asyncio.CancelledError:
|
|
125
|
+
# log.info("%s Polling loop cancelled.", log_id_prefix)
|
|
126
|
+
# break
|
|
127
|
+
# except Exception as e:
|
|
128
|
+
# log.exception("%s Error in polling loop: %s", log_id_prefix, e)
|
|
129
|
+
# await asyncio.sleep(60) # Wait before retrying on error
|
|
130
|
+
# log.info("%s __GATEWAY_NAME_SNAKE_CASE__ polling loop stopped.", log_id_prefix)
|
|
131
|
+
|
|
132
|
+
def _stop_listener(self) -> None:
|
|
133
|
+
"""
|
|
134
|
+
GDK Hook: Stop listening for events/requests and clean up resources.
|
|
135
|
+
This method is called by BaseGatewayComponent.cleanup().
|
|
136
|
+
- For polling: Signal the polling loop to stop.
|
|
137
|
+
- For webhooks: Gracefully shut down the embedded server.
|
|
138
|
+
- For SDKs: Unregister callbacks, close connections.
|
|
139
|
+
"""
|
|
140
|
+
log_id_prefix = f"{self.log_identifier}[StopListener]"
|
|
141
|
+
log.info(
|
|
142
|
+
"%s Stopping listener for __GATEWAY_NAME_SNAKE_CASE__ system...",
|
|
143
|
+
log_id_prefix,
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# self.stop_signal is already set by BaseGatewayComponent before calling this.
|
|
147
|
+
# Ensure your _start_listener logic (e.g., polling loop) respects self.stop_signal.
|
|
148
|
+
|
|
149
|
+
# Example: If you started a thread for a blocking SDK client:
|
|
150
|
+
# if hasattr(self, "sdk_thread") and self.sdk_thread.is_alive():
|
|
151
|
+
# # Signal SDK to shutdown if possible, then join thread
|
|
152
|
+
# # self.external_client.shutdown()
|
|
153
|
+
# self.sdk_thread.join(timeout=10)
|
|
154
|
+
|
|
155
|
+
# Example: If an asyncio task was created for polling:
|
|
156
|
+
# if hasattr(self, "polling_task") and not self.polling_task.done():
|
|
157
|
+
# self.polling_task.cancel()
|
|
158
|
+
# # Optionally await it if _stop_listener can be async, or manage in cleanup
|
|
159
|
+
|
|
160
|
+
log.info(
|
|
161
|
+
"%s __GATEWAY_NAME_SNAKE_CASE__ listener shutdown initiated.", log_id_prefix
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
async def _extract_initial_claims(
|
|
165
|
+
self, external_event_data: Any
|
|
166
|
+
) -> Optional[Dict[str, Any]]:
|
|
167
|
+
"""
|
|
168
|
+
GDK Hook: Extracts the primary identity claims from a platform-specific event.
|
|
169
|
+
This method MUST be implemented by derived gateway components.
|
|
170
|
+
|
|
171
|
+
The base class's `authenticate_and_enrich_user` method will call this,
|
|
172
|
+
and then (if configured) pass the result to an Identity Service for enrichment.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
external_event_data: Raw event data from the external platform
|
|
176
|
+
(e.g., FastAPIRequest, Slack event dictionary).
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
A dictionary of initial claims, which MUST include an 'id' key.
|
|
180
|
+
Example: {"id": "user@example.com", "source": "api_key"}
|
|
181
|
+
Return None if authentication fails.
|
|
182
|
+
"""
|
|
183
|
+
log_id_prefix = f"{self.log_identifier}[ExtractClaims]"
|
|
184
|
+
# log.debug("%s Extracting initial claims from external event: %s", log_id_prefix, external_event_data)
|
|
185
|
+
|
|
186
|
+
# --- Implement Claims Extraction Logic Here ---
|
|
187
|
+
# Example: Check an API key from headers or payload
|
|
188
|
+
# provided_key = external_event_data.get("headers", {}).get("X-API-Key")
|
|
189
|
+
# if provided_key and provided_key == self.get_config("service_api_key"):
|
|
190
|
+
# user_id = external_event_data.get("user_id_field", "default_system_user")
|
|
191
|
+
# log.info("%s Authentication successful for user: %s", log_id_prefix, user_id)
|
|
192
|
+
# return {"id": user_id, "source": "api_key"}
|
|
193
|
+
# else:
|
|
194
|
+
# log.warning("%s Authentication failed: API key mismatch or missing.", log_id_prefix)
|
|
195
|
+
# return None
|
|
196
|
+
|
|
197
|
+
# If no authentication is needed for this gateway, you can use a default identity
|
|
198
|
+
# from the configuration. The base class handles this logic if `force_user_identity`
|
|
199
|
+
# or `default_user_identity` are set, but you can implement it here if needed.
|
|
200
|
+
# return {"id": "anonymous___GATEWAY_NAME_SNAKE_CASE___user", "source": "anonymous"}
|
|
201
|
+
|
|
202
|
+
log.warning("%s _extract_initial_claims not fully implemented.", log_id_prefix)
|
|
203
|
+
return {
|
|
204
|
+
"id": "placeholder_user_identity",
|
|
205
|
+
"source": "placeholder",
|
|
206
|
+
} # Replace with actual logic
|
|
207
|
+
|
|
208
|
+
async def _translate_external_input(
|
|
209
|
+
self, external_event_data: Any
|
|
210
|
+
) -> Tuple[str, List[ContentPart], Dict[str, Any]]:
|
|
211
|
+
"""
|
|
212
|
+
GDK Hook: Translates the incoming external event/request into A2A task parameters.
|
|
213
|
+
This method is called *after* `authenticate_and_enrich_user`. The gateway's
|
|
214
|
+
event processing logic (e.g., a polling loop or request handler) is responsible
|
|
215
|
+
for calling `authenticate_and_enrich_user` first, and then passing the raw
|
|
216
|
+
event data to this method.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
external_event_data: The raw data from the external system.
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
A tuple:
|
|
223
|
+
- `target_agent_name` (str): Name of the A2A agent to route the task to.
|
|
224
|
+
- `a2a_parts` (List[ContentPart]): List of A2A Parts for the task.
|
|
225
|
+
- `external_request_context` (Dict[str, Any]): Dictionary to store any context
|
|
226
|
+
needed later (e.g., for _send_final_response_to_external).
|
|
227
|
+
|
|
228
|
+
Raises:
|
|
229
|
+
ValueError: If translation fails (e.g., target agent cannot be determined).
|
|
230
|
+
"""
|
|
231
|
+
log_id_prefix = f"{self.log_identifier}[TranslateInput]"
|
|
232
|
+
# log.debug("%s Translating external event: %s", log_id_prefix, external_event_data)
|
|
233
|
+
|
|
234
|
+
a2a_parts: List[ContentPart] = []
|
|
235
|
+
target_agent_name: Optional[str] = (
|
|
236
|
+
None # Determine this based on event data or config
|
|
237
|
+
)
|
|
238
|
+
# This context is stored and passed back to the `_send_*_to_external` methods.
|
|
239
|
+
# It should contain any information needed to route the response back to the
|
|
240
|
+
# original requester in the external system.
|
|
241
|
+
external_request_context: Dict[str, Any] = {
|
|
242
|
+
"a2a_session_id": f"__GATEWAY_NAME_SNAKE_CASE__-session-{self.generate_uuid()}", # Example session ID
|
|
243
|
+
# "original_request_id": external_event_data.get("id"),
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# --- Implement Translation Logic Here ---
|
|
247
|
+
# 1. Determine Target Agent:
|
|
248
|
+
# - Statically from config: target_agent_name = self.get_config("default_target_agent")
|
|
249
|
+
# - Dynamically from event_data: target_agent_name = external_event_data.get("target_agent_field")
|
|
250
|
+
# - Based on processing_rules:
|
|
251
|
+
# for rule in self.processing_rules:
|
|
252
|
+
# if rule.matches(external_event_data):
|
|
253
|
+
# target_agent_name = rule.get_agent_name()
|
|
254
|
+
# break
|
|
255
|
+
target_agent_name = "OrchestratorAgent" # Placeholder
|
|
256
|
+
|
|
257
|
+
# 2. Construct A2A Parts:
|
|
258
|
+
# - Extract text:
|
|
259
|
+
# text_content = external_event_data.get("message_text", "")
|
|
260
|
+
# if text_content:
|
|
261
|
+
# a2a_parts.append(a2a.create_text_part(text=text_content))
|
|
262
|
+
# - Handle files (if any): Download, save to artifact service, create FilePart with URI.
|
|
263
|
+
# (Requires self.shared_artifact_service to be configured and available).
|
|
264
|
+
# The `user_identity` dict is available in the calling context (e.g., polling loop).
|
|
265
|
+
# # if "file_url" in external_event_data and self.shared_artifact_service:
|
|
266
|
+
# # file_bytes = await download_file(external_event_data["file_url"])
|
|
267
|
+
# # file_name = external_event_data.get("file_name", "attachment.dat")
|
|
268
|
+
# # mime_type = external_event_data.get("mime_type", "application/octet-stream")
|
|
269
|
+
# # artifact_uri = await self.save_to_artifact_service(
|
|
270
|
+
# # file_bytes, file_name, mime_type,
|
|
271
|
+
# # user_identity, external_request_context["a2a_session_id"]
|
|
272
|
+
# # )
|
|
273
|
+
# # if artifact_uri:
|
|
274
|
+
# # a2a_parts.append(a2a.create_file_part_from_uri(uri=artifact_uri, name=file_name, mime_type=mime_type))
|
|
275
|
+
# - Handle structured data:
|
|
276
|
+
# # structured_data = external_event_data.get("data_payload")
|
|
277
|
+
# # if structured_data:
|
|
278
|
+
# # a2a_parts.append(a2a.create_data_part(data=structured_data, metadata={"source": "__GATEWAY_NAME_SNAKE_CASE__"}))
|
|
279
|
+
|
|
280
|
+
# Example: Simple text passthrough
|
|
281
|
+
raw_text = str(
|
|
282
|
+
external_event_data.get(
|
|
283
|
+
"text_input_field", "Default text from __GATEWAY_NAME_SNAKE_CASE__"
|
|
284
|
+
)
|
|
285
|
+
)
|
|
286
|
+
a2a_parts.append(a2a.create_text_part(text=raw_text))
|
|
287
|
+
|
|
288
|
+
if not target_agent_name:
|
|
289
|
+
log.error("%s Could not determine target_agent_name.", log_id_prefix)
|
|
290
|
+
raise ValueError("Could not determine target agent for the request.")
|
|
291
|
+
|
|
292
|
+
if not a2a_parts:
|
|
293
|
+
log.warning(
|
|
294
|
+
"%s No A2A parts created from external event. Task might be empty.",
|
|
295
|
+
log_id_prefix,
|
|
296
|
+
)
|
|
297
|
+
# Depending on requirements, you might want to raise ValueError here too.
|
|
298
|
+
|
|
299
|
+
log.info(
|
|
300
|
+
"%s Translation complete. Target: %s, Parts: %d",
|
|
301
|
+
log_id_prefix,
|
|
302
|
+
target_agent_name,
|
|
303
|
+
len(a2a_parts),
|
|
304
|
+
)
|
|
305
|
+
return target_agent_name, a2a_parts, external_request_context
|
|
306
|
+
|
|
307
|
+
async def _send_final_response_to_external(
|
|
308
|
+
self, external_request_context: Dict[str, Any], task_data: Task
|
|
309
|
+
) -> None:
|
|
310
|
+
"""
|
|
311
|
+
GDK Hook: Sends the final A2A Task result back to the external __GATEWAY_NAME_SNAKE_CASE__ system.
|
|
312
|
+
- `external_request_context`: The context dictionary returned by _translate_external_input.
|
|
313
|
+
- `task_data`: The final A2A Task object (contains status, results, etc.).
|
|
314
|
+
"""
|
|
315
|
+
log_id_prefix = f"{self.log_identifier}[SendFinalResponse]"
|
|
316
|
+
task_id = a2a.get_task_id(task_data)
|
|
317
|
+
# log.debug("%s Sending final response for task %s. Context: %s", log_id_prefix, task_id, external_request_context)
|
|
318
|
+
|
|
319
|
+
# --- Implement Logic to Send Response to External System ---
|
|
320
|
+
# 1. Extract relevant information from task_data using the `a2a` facade:
|
|
321
|
+
# from a2a.types import TaskState
|
|
322
|
+
# task_status = a2a.get_task_status(task_data) # e.g., TaskState.completed
|
|
323
|
+
# artifacts = a2a.get_task_artifacts(task_data)
|
|
324
|
+
# response_text = a2a.get_text_from_message(task_data.status.message) if task_data.status and task_data.status.message else ""
|
|
325
|
+
|
|
326
|
+
# 2. Format the response according to the external system's requirements.
|
|
327
|
+
# if task_status == TaskState.failed:
|
|
328
|
+
# final_message = f"Task failed: {response_text}"
|
|
329
|
+
# elif task_status == TaskState.canceled:
|
|
330
|
+
# final_message = "Task was canceled."
|
|
331
|
+
# else:
|
|
332
|
+
# final_message = response_text
|
|
333
|
+
|
|
334
|
+
# 3. Use information from external_request_context to send the response
|
|
335
|
+
# (e.g., reply-to address, original request ID).
|
|
336
|
+
# # original_request_id = external_request_context.get("original_request_id")
|
|
337
|
+
# # await self.external_client.send_reply(original_request_id, final_message)
|
|
338
|
+
|
|
339
|
+
log.warning(
|
|
340
|
+
"%s _send_final_response_to_external not fully implemented for task %s.",
|
|
341
|
+
log_id_prefix,
|
|
342
|
+
task_id,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
async def _send_error_to_external(
|
|
346
|
+
self, external_request_context: Dict[str, Any], error_data: JSONRPCError
|
|
347
|
+
) -> None:
|
|
348
|
+
"""
|
|
349
|
+
GDK Hook: Sends an A2A error back to the external __GATEWAY_NAME_SNAKE_CASE__ system.
|
|
350
|
+
This is called if an error occurs within the A2A GDK processing (e.g., task submission failure,
|
|
351
|
+
authorization failure after initial authentication).
|
|
352
|
+
- `external_request_context`: Context from _translate_external_input.
|
|
353
|
+
- `error_data`: A JSONRPCError object.
|
|
354
|
+
"""
|
|
355
|
+
log_id_prefix = f"{self.log_identifier}[SendError]"
|
|
356
|
+
error_message = a2a.get_error_message(error_data)
|
|
357
|
+
error_code = a2a.get_error_code(error_data)
|
|
358
|
+
# log.warning("%s Sending error to external system. Error: %s. Context: %s", log_id_prefix, error_message, external_request_context)
|
|
359
|
+
|
|
360
|
+
# --- Implement Logic to Send Error to External System ---
|
|
361
|
+
# error_message_to_send = f"A2A Error: {error_message} (Code: {error_code})"
|
|
362
|
+
# # original_request_id = external_request_context.get("original_request_id")
|
|
363
|
+
# # await self.external_client.send_error_reply(original_request_id, error_message_to_send)
|
|
364
|
+
|
|
365
|
+
log.warning(
|
|
366
|
+
"%s _send_error_to_external not fully implemented. Error: %s",
|
|
367
|
+
log_id_prefix,
|
|
368
|
+
error_message,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
async def _send_update_to_external(
|
|
372
|
+
self,
|
|
373
|
+
external_request_context: Dict[str, Any],
|
|
374
|
+
event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
|
|
375
|
+
is_final_chunk_of_update: bool,
|
|
376
|
+
) -> None:
|
|
377
|
+
"""
|
|
378
|
+
GDK Hook: Sends intermediate A2A task updates (status or artifacts) to the external system.
|
|
379
|
+
- This is optional. If your gateway doesn't support streaming intermediate updates,
|
|
380
|
+
- you can leave this method as a no-op (just log).
|
|
381
|
+
- `is_final_chunk_of_update`: True if this is the last part of a streamed TextPart from TaskStatusUpdateEvent.
|
|
382
|
+
"""
|
|
383
|
+
log_id_prefix = f"{self.log_identifier}[SendUpdate]"
|
|
384
|
+
task_id = event_data.task_id
|
|
385
|
+
# log.debug("%s Received A2A update for task %s. Type: %s. FinalChunk: %s",
|
|
386
|
+
# log_id_prefix, task_id, type(event_data).__name__, is_final_chunk_of_update)
|
|
387
|
+
|
|
388
|
+
# --- Implement Logic to Send Intermediate Update (if supported) ---
|
|
389
|
+
# if isinstance(event_data, TaskStatusUpdateEvent):
|
|
390
|
+
# message = a2a.get_message_from_status_update(event_data)
|
|
391
|
+
# if message:
|
|
392
|
+
# # Get text content
|
|
393
|
+
# text_content = a2a.get_text_from_message(message)
|
|
394
|
+
# if text_content:
|
|
395
|
+
# # Send text_content to external system
|
|
396
|
+
# pass
|
|
397
|
+
#
|
|
398
|
+
# # Check for specific status signals (DataParts)
|
|
399
|
+
# data_parts = a2a.get_data_parts_from_message(message)
|
|
400
|
+
# for part in data_parts:
|
|
401
|
+
# data = a2a.get_data_from_data_part(part)
|
|
402
|
+
# if data.get("type") == "agent_progress_update":
|
|
403
|
+
# status_text = data.get("status_text")
|
|
404
|
+
# # Send status_text to external system
|
|
405
|
+
# pass
|
|
406
|
+
#
|
|
407
|
+
# elif isinstance(event_data, TaskArtifactUpdateEvent):
|
|
408
|
+
# artifact = a2a.get_artifact_from_artifact_update(event_data)
|
|
409
|
+
# if artifact:
|
|
410
|
+
# # Handle artifact updates (e.g., notify external system of new artifact URI)
|
|
411
|
+
# pass
|
|
412
|
+
|
|
413
|
+
# Default: Log that this gateway does not handle intermediate updates.
|
|
414
|
+
log.debug(
|
|
415
|
+
"%s __GATEWAY_NAME_PASCAL_CASE__ Gateway does not process intermediate updates. Update for task %s ignored.",
|
|
416
|
+
log_id_prefix,
|
|
417
|
+
task_id,
|
|
418
|
+
)
|
|
419
|
+
pass # No-op by default
|
|
420
|
+
|
|
421
|
+
# --- Optional: Helper methods for your gateway ---
|
|
422
|
+
def generate_uuid(self) -> str: # Made this a method of the class
|
|
423
|
+
import uuid
|
|
424
|
+
|
|
425
|
+
return str(uuid.uuid4())
|
|
426
|
+
|
|
427
|
+
# async def save_to_artifact_service(self, content_bytes: bytes, filename: str, mime_type: str, user_identity: Dict[str, Any], session_id: str) -> Optional[str]:
|
|
428
|
+
# """Helper to save content to the shared artifact service."""
|
|
429
|
+
# if not self.shared_artifact_service:
|
|
430
|
+
# log.error("%s Artifact service not available. Cannot save file: %s", self.log_identifier, filename)
|
|
431
|
+
# return None
|
|
432
|
+
# try:
|
|
433
|
+
# from ...agent.utils.artifact_helpers import save_artifact_with_metadata # Adjust import
|
|
434
|
+
# from datetime import datetime, timezone
|
|
435
|
+
|
|
436
|
+
# user_id = user_identity.get("id")
|
|
437
|
+
# if not user_id:
|
|
438
|
+
# log.error("%s Cannot save artifact, user_id not found in user_identity.", self.log_identifier)
|
|
439
|
+
# return None
|
|
440
|
+
|
|
441
|
+
# save_result = await save_artifact_with_metadata(
|
|
442
|
+
# artifact_service=self.shared_artifact_service,
|
|
443
|
+
# app_name=self.gateway_id, # from BaseGatewayComponent
|
|
444
|
+
# user_id=user_id,
|
|
445
|
+
# session_id=session_id,
|
|
446
|
+
# filename=filename,
|
|
447
|
+
# content_bytes=content_bytes,
|
|
448
|
+
# mime_type=mime_type,
|
|
449
|
+
# metadata_dict={
|
|
450
|
+
# "source": "__GATEWAY_NAME_SNAKE_CASE___upload",
|
|
451
|
+
# "original_filename": filename,
|
|
452
|
+
# "upload_timestamp_utc": datetime.now(timezone.utc).isoformat(),
|
|
453
|
+
# },
|
|
454
|
+
# timestamp=datetime.now(timezone.utc)
|
|
455
|
+
# )
|
|
456
|
+
# if save_result["status"] in ["success", "partial_success"]:
|
|
457
|
+
# data_version = save_result.get("data_version", 0)
|
|
458
|
+
# artifact_uri = f"artifact://{self.gateway_id}/{user_id}/{session_id}/{filename}?version={data_version}"
|
|
459
|
+
# log.info("%s Saved artifact: %s", self.log_identifier, artifact_uri)
|
|
460
|
+
# return artifact_uri
|
|
461
|
+
# else:
|
|
462
|
+
# log.error("%s Failed to save artifact %s: %s", self.log_identifier, filename, save_result.get("message"))
|
|
463
|
+
# return None
|
|
464
|
+
# except Exception as e:
|
|
465
|
+
# log.exception("%s Error saving artifact %s: %s", self.log_identifier, filename, e)
|
|
466
|
+
# return None
|
|
467
|
+
|
|
468
|
+
def cleanup(self):
|
|
469
|
+
"""
|
|
470
|
+
GDK Hook: Called before the component is fully stopped.
|
|
471
|
+
Perform any final cleanup specific to this component beyond _stop_listener.
|
|
472
|
+
"""
|
|
473
|
+
log.info(
|
|
474
|
+
"%s Cleaning up __GATEWAY_NAME_PASCAL_CASE__ Gateway Component (Pre-Base)...",
|
|
475
|
+
self.log_identifier,
|
|
476
|
+
)
|
|
477
|
+
# Example: Close any persistent connections not handled in _stop_listener
|
|
478
|
+
# if hasattr(self, "persistent_connection") and self.persistent_connection.is_open():
|
|
479
|
+
# self.persistent_connection.close()
|
|
480
|
+
super().cleanup() # Important to call super().cleanup()
|
|
481
|
+
log.info(
|
|
482
|
+
"%s __GATEWAY_NAME_PASCAL_CASE__ Gateway Component cleanup finished.",
|
|
483
|
+
self.log_identifier,
|
|
484
|
+
)
|