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,303 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AI Assistant for Prompt Template Builder.
|
|
3
|
+
Manages conversational prompt template creation through natural language.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
import re
|
|
10
|
+
from typing import Dict, Any, List, Optional
|
|
11
|
+
from pydantic import BaseModel, Field
|
|
12
|
+
from litellm import acompletion
|
|
13
|
+
from sqlalchemy.orm import Session
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PromptBuilderResponse(BaseModel):
|
|
19
|
+
"""Response from the prompt builder assistant."""
|
|
20
|
+
message: str
|
|
21
|
+
template_updates: Dict[str, Any] = Field(default_factory=dict)
|
|
22
|
+
confidence: float = Field(ge=0.0, le=1.0)
|
|
23
|
+
ready_to_save: bool = False
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class PromptBuilderAssistant:
|
|
27
|
+
"""
|
|
28
|
+
AI assistant for prompt template creation.
|
|
29
|
+
Manages conversation flow and template generation.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
SYSTEM_PROMPT = """You are an AI assistant helping users create reusable prompt templates.
|
|
33
|
+
|
|
34
|
+
CRITICAL RULES:
|
|
35
|
+
1. You MUST respond with valid JSON in this exact format - NO EXCEPTIONS
|
|
36
|
+
2. You MUST always include a "message" field with a helpful, conversational response
|
|
37
|
+
3. NEVER respond with just "I understand" - always provide actionable guidance
|
|
38
|
+
4. ONLY create placeholders for DATA that changes (names, paths, dates, numbers, specific values)
|
|
39
|
+
5. Keep instructions, steps, requirements, and process descriptions as FIXED TEXT
|
|
40
|
+
6. Use descriptive variable names in Title Case (e.g., {{File Path}}, {{Module Name}})
|
|
41
|
+
7. Suggest appropriate categories (Development, Analysis, Documentation, Communication, Testing, etc.)
|
|
42
|
+
8. Generate short command names (lowercase, hyphens only)
|
|
43
|
+
|
|
44
|
+
RESPONSE FORMAT (REQUIRED):
|
|
45
|
+
{{
|
|
46
|
+
"message": "your conversational response here - MUST be helpful and specific",
|
|
47
|
+
"template_updates": {{
|
|
48
|
+
"name": "Name",
|
|
49
|
+
"category": "Category",
|
|
50
|
+
"command": "command-name",
|
|
51
|
+
"promptText": "Template with {{placeholders}} for variable data only",
|
|
52
|
+
"description": "Brief description"
|
|
53
|
+
}},
|
|
54
|
+
"confidence": 0.0-1.0,
|
|
55
|
+
"ready_to_save": false
|
|
56
|
+
}}
|
|
57
|
+
|
|
58
|
+
VARIABLE PLACEHOLDER RULES:
|
|
59
|
+
- Use {{Variable Name}} format for placeholders (Title Case with spaces)
|
|
60
|
+
- ONLY for data that changes: file paths, names, dates, numbers, specific values
|
|
61
|
+
- NOT for instructions, steps, or requirements
|
|
62
|
+
- Use descriptive names: {{File Path}}, {{Module Name}}, {{Task Description}}
|
|
63
|
+
|
|
64
|
+
EXAMPLES:
|
|
65
|
+
|
|
66
|
+
Example 1: Code Review Template
|
|
67
|
+
User: "I need a template for code reviews"
|
|
68
|
+
{{
|
|
69
|
+
"message": "Great! I'll create a code review template. What information changes each time you do a code review? For example: file path, module name, specific concerns?",
|
|
70
|
+
"template_updates": {{
|
|
71
|
+
"name": "Code Review Template",
|
|
72
|
+
"category": "Development"
|
|
73
|
+
}},
|
|
74
|
+
"confidence": 0.6,
|
|
75
|
+
"ready_to_save": false
|
|
76
|
+
}}
|
|
77
|
+
|
|
78
|
+
User: "The file path, module name, and specific security concerns"
|
|
79
|
+
{{
|
|
80
|
+
"message": "Perfect! I've created a code review template with placeholders for file path, module name, and security concerns. Check the preview on the left!",
|
|
81
|
+
"template_updates": {{
|
|
82
|
+
"name": "Code Review Template",
|
|
83
|
+
"category": "Development",
|
|
84
|
+
"command": "code-review",
|
|
85
|
+
"promptText": "Review the {{Module Name}} module located at {{File Path}}.\\n\\nPlease perform a comprehensive code review focusing on:\\n1. Security vulnerabilities\\n2. Error handling\\n3. Code quality and best practices\\n4. Specific attention to: {{Security Concerns}}\\n\\nProvide a detailed report with:\\n- List of issues with severity levels\\n- Specific code snippets that need attention\\n- Recommendations for improvements",
|
|
86
|
+
"description": "Template for code review with security focus"
|
|
87
|
+
}},
|
|
88
|
+
"confidence": 0.9,
|
|
89
|
+
"ready_to_save": true
|
|
90
|
+
}}
|
|
91
|
+
|
|
92
|
+
Example 2: Bug Report Template
|
|
93
|
+
User: "Create a bug report template"
|
|
94
|
+
{{
|
|
95
|
+
"message": "I'll create a bug report template! What details vary for each bug report? For example: bug description, steps to reproduce, expected vs actual behavior?",
|
|
96
|
+
"template_updates": {{
|
|
97
|
+
"name": "Bug Report Template",
|
|
98
|
+
"category": "Testing"
|
|
99
|
+
}},
|
|
100
|
+
"confidence": 0.6,
|
|
101
|
+
"ready_to_save": false
|
|
102
|
+
}}
|
|
103
|
+
|
|
104
|
+
User: "Bug description, steps to reproduce, and environment details"
|
|
105
|
+
{{
|
|
106
|
+
"message": "Excellent! I've created a bug report template with those placeholders. You can see it in the preview!",
|
|
107
|
+
"template_updates": {{
|
|
108
|
+
"name": "Bug Report Template",
|
|
109
|
+
"category": "Testing",
|
|
110
|
+
"command": "bug-report",
|
|
111
|
+
"promptText": "# Bug Report\\n\\n## Description\\n{{Bug Description}}\\n\\n## Steps to Reproduce\\n{{Steps To Reproduce}}\\n\\n## Environment\\n{{Environment Details}}\\n\\n## Expected Behavior\\nDescribe what should happen\\n\\n## Actual Behavior\\nDescribe what actually happens\\n\\n## Additional Context\\nAny other relevant information",
|
|
112
|
+
"description": "Template for reporting bugs with structured format"
|
|
113
|
+
}},
|
|
114
|
+
"confidence": 0.9,
|
|
115
|
+
"ready_to_save": true
|
|
116
|
+
}}
|
|
117
|
+
|
|
118
|
+
REMEMBER:
|
|
119
|
+
- Ask clarifying questions to understand what data changes
|
|
120
|
+
- Create detailed, useful templates
|
|
121
|
+
- Only use placeholders for variable data
|
|
122
|
+
- Keep instructions and structure as fixed text
|
|
123
|
+
- Set ready_to_save to true when template is complete
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
def __init__(self, db: Optional[Session] = None, model_config: Optional[Dict[str, Any]] = None):
|
|
127
|
+
"""Initialize the assistant with model configuration from component config."""
|
|
128
|
+
self.system_prompt = self.SYSTEM_PROMPT
|
|
129
|
+
self.db = db
|
|
130
|
+
|
|
131
|
+
# Get LLM configuration from provided config
|
|
132
|
+
if not model_config or not isinstance(model_config, dict):
|
|
133
|
+
raise ValueError("model_config is required and must be a dictionary")
|
|
134
|
+
|
|
135
|
+
if not model_config.get("model"):
|
|
136
|
+
raise ValueError("model_config must contain 'model' key")
|
|
137
|
+
|
|
138
|
+
self.model = model_config.get("model")
|
|
139
|
+
self.api_base = model_config.get("api_base")
|
|
140
|
+
self.api_key = model_config.get("api_key", "dummy")
|
|
141
|
+
|
|
142
|
+
def _get_existing_commands(self, user_id: str) -> List[str]:
|
|
143
|
+
"""Get list of existing command shortcuts to avoid conflicts."""
|
|
144
|
+
if not self.db:
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
try:
|
|
148
|
+
from ..repository.models import PromptGroupModel
|
|
149
|
+
|
|
150
|
+
groups = self.db.query(PromptGroupModel).filter(
|
|
151
|
+
PromptGroupModel.user_id == user_id,
|
|
152
|
+
PromptGroupModel.command.isnot(None)
|
|
153
|
+
).all()
|
|
154
|
+
|
|
155
|
+
return [group.command for group in groups if group.command]
|
|
156
|
+
except Exception as e:
|
|
157
|
+
logger.error(f"Error fetching existing commands: {e}")
|
|
158
|
+
return []
|
|
159
|
+
|
|
160
|
+
async def process_message(
|
|
161
|
+
self,
|
|
162
|
+
user_message: str,
|
|
163
|
+
conversation_history: List[Dict[str, str]],
|
|
164
|
+
current_template: Dict[str, Any],
|
|
165
|
+
user_id: Optional[str] = None
|
|
166
|
+
) -> PromptBuilderResponse:
|
|
167
|
+
"""
|
|
168
|
+
Process user message and update template using LLM.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
user_message: The user's message
|
|
172
|
+
conversation_history: Previous conversation messages
|
|
173
|
+
current_template: Current template configuration
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
PromptBuilderResponse with updates
|
|
177
|
+
"""
|
|
178
|
+
try:
|
|
179
|
+
return await self._llm_response(
|
|
180
|
+
user_message,
|
|
181
|
+
conversation_history,
|
|
182
|
+
current_template,
|
|
183
|
+
user_id
|
|
184
|
+
)
|
|
185
|
+
except Exception as e:
|
|
186
|
+
logger.error(f"Error processing message: {e}", exc_info=True)
|
|
187
|
+
return PromptBuilderResponse(
|
|
188
|
+
message="I encountered an error. Could you please rephrase that?",
|
|
189
|
+
confidence=0.0,
|
|
190
|
+
ready_to_save=False
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
async def _llm_response(
|
|
194
|
+
self,
|
|
195
|
+
user_message: str,
|
|
196
|
+
conversation_history: List[Dict[str, str]],
|
|
197
|
+
current_template: Dict[str, Any],
|
|
198
|
+
user_id: Optional[str] = None
|
|
199
|
+
) -> PromptBuilderResponse:
|
|
200
|
+
"""Use LLM to generate response and template updates."""
|
|
201
|
+
|
|
202
|
+
# Get existing commands to avoid conflicts
|
|
203
|
+
existing_commands = []
|
|
204
|
+
if user_id and self.db:
|
|
205
|
+
existing_commands = self._get_existing_commands(user_id)
|
|
206
|
+
|
|
207
|
+
# Build messages for LLM
|
|
208
|
+
messages = [
|
|
209
|
+
{"role": "system", "content": self.system_prompt}
|
|
210
|
+
]
|
|
211
|
+
|
|
212
|
+
# Add conversation history
|
|
213
|
+
messages.extend(conversation_history)
|
|
214
|
+
|
|
215
|
+
# Add current message with template context and existing commands
|
|
216
|
+
template_context = f"\n\nCurrent Template:\n{json.dumps(current_template, indent=2)}"
|
|
217
|
+
|
|
218
|
+
commands_context = ""
|
|
219
|
+
if existing_commands:
|
|
220
|
+
commands_context = f"\n\nEXISTING COMMANDS (avoid these):\n{', '.join(['/' + cmd for cmd in existing_commands])}"
|
|
221
|
+
|
|
222
|
+
messages.append({
|
|
223
|
+
"role": "user",
|
|
224
|
+
"content": user_message + template_context + commands_context
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
# Call LLM with JSON mode
|
|
228
|
+
try:
|
|
229
|
+
completion_args = {
|
|
230
|
+
"model": self.model,
|
|
231
|
+
"messages": messages,
|
|
232
|
+
"response_format": {"type": "json_object"},
|
|
233
|
+
"temperature": 0.1, # Low temperature for consistency
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if self.api_base:
|
|
237
|
+
completion_args["api_base"] = self.api_base
|
|
238
|
+
if self.api_key:
|
|
239
|
+
completion_args["api_key"] = self.api_key
|
|
240
|
+
|
|
241
|
+
response = await acompletion(**completion_args)
|
|
242
|
+
|
|
243
|
+
# Parse response
|
|
244
|
+
content = response.choices[0].message.content
|
|
245
|
+
logger.info(f"LLM Response: {content}")
|
|
246
|
+
|
|
247
|
+
try:
|
|
248
|
+
parsed = json.loads(content)
|
|
249
|
+
except json.JSONDecodeError as e:
|
|
250
|
+
logger.error(f"Failed to parse LLM response as JSON: {e}")
|
|
251
|
+
logger.error(f"Response content: {content}")
|
|
252
|
+
# Try to extract JSON from response
|
|
253
|
+
json_match = re.search(r'\{.*\}', content, re.DOTALL)
|
|
254
|
+
if json_match:
|
|
255
|
+
parsed = json.loads(json_match.group())
|
|
256
|
+
else:
|
|
257
|
+
raise
|
|
258
|
+
|
|
259
|
+
# Handle nested response structure (some LLMs wrap in various keys)
|
|
260
|
+
if "response" in parsed and isinstance(parsed["response"], dict):
|
|
261
|
+
logger.info("Unwrapping nested 'response' structure from LLM")
|
|
262
|
+
parsed = parsed["response"]
|
|
263
|
+
|
|
264
|
+
# Handle case where LLM wraps response in an arbitrary key (e.g., "{}", "result", etc.)
|
|
265
|
+
# If we don't have a "message" key but have exactly one key with a dict value containing "message"
|
|
266
|
+
if "message" not in parsed and len(parsed) == 1:
|
|
267
|
+
single_key = list(parsed.keys())[0]
|
|
268
|
+
if isinstance(parsed[single_key], dict) and "message" in parsed[single_key]:
|
|
269
|
+
logger.info(f"Unwrapping nested structure from key '{single_key}'")
|
|
270
|
+
parsed = parsed[single_key]
|
|
271
|
+
|
|
272
|
+
# Validate that we have a proper message
|
|
273
|
+
message = parsed.get("message", "")
|
|
274
|
+
if not message or message.strip().lower() in ["i understand", "i understand.", "ok", "okay"]:
|
|
275
|
+
logger.warning(f"LLM returned generic/empty message: '{message}'")
|
|
276
|
+
message = "I'll help you create that template. Could you provide more details about what information changes each time you use this prompt?"
|
|
277
|
+
|
|
278
|
+
return PromptBuilderResponse(
|
|
279
|
+
message=message,
|
|
280
|
+
template_updates=parsed.get("template_updates", {}),
|
|
281
|
+
confidence=parsed.get("confidence", 0.5),
|
|
282
|
+
ready_to_save=parsed.get("ready_to_save", False)
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
except Exception as e:
|
|
286
|
+
logger.error(f"LLM call failed: {e}", exc_info=True)
|
|
287
|
+
# Fallback response with helpful guidance
|
|
288
|
+
return PromptBuilderResponse(
|
|
289
|
+
message="I'm having trouble processing that. Could you describe what you'd like this template to do? For example, what task are you trying to automate or what information changes each time?",
|
|
290
|
+
confidence=0.3,
|
|
291
|
+
ready_to_save=False
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
def get_initial_greeting(self) -> PromptBuilderResponse:
|
|
295
|
+
"""Get the initial greeting message."""
|
|
296
|
+
return PromptBuilderResponse(
|
|
297
|
+
message="Hi! I'll help you create a prompt template. You can either:\n\n"
|
|
298
|
+
"1. Describe a recurring task you'd like to template\n"
|
|
299
|
+
"2. Paste an example transcript of the task\n\n"
|
|
300
|
+
"What would you like to create a template for?",
|
|
301
|
+
confidence=1.0,
|
|
302
|
+
ready_to_save=False
|
|
303
|
+
)
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# DEVELOPER GUIDE: services
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `services` directory contains the business logic layer for the HTTP SSE Gateway. It provides high-level services for agent management (discovering and retrieving A2A agents), user feedback processing with database persistence and event publishing, user search via identity services, session management with database persistence, task logging to database, data retention/cleanup, and A2A task operations like cancellation.
|
|
5
|
+
|
|
6
|
+
## Files Overview
|
|
7
|
+
- `__init__.py` - Package initialization file marking the directory as a Python package
|
|
8
|
+
- `agent_card_service.py` - Service for retrieving information about discovered A2A agents from the registry
|
|
9
|
+
- `data_retention_service.py` - Service for automatic cleanup of old tasks and feedback based on retention policies
|
|
10
|
+
- `feedback_service.py` - Service for processing and storing user feedback on chat messages with database and event publishing
|
|
11
|
+
- `people_service.py` - Service for searching users via configured identity services
|
|
12
|
+
- `session_service.py` - Service for managing chat sessions and messages with database persistence
|
|
13
|
+
- `task_logger_service.py` - Service for logging A2A tasks and events to the database
|
|
14
|
+
- `task_service.py` - Service for handling A2A task operations like cancellation
|
|
15
|
+
|
|
16
|
+
## Developer API Reference
|
|
17
|
+
|
|
18
|
+
### __init__.py
|
|
19
|
+
**Purpose:** Marks the services directory as a Python package
|
|
20
|
+
**Import:** N/A - No public interfaces
|
|
21
|
+
|
|
22
|
+
### agent_card_service.py
|
|
23
|
+
**Purpose:** Provides methods for accessing information about discovered A2A agents from the shared AgentRegistry
|
|
24
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.agent_card_service import AgentCardService`
|
|
25
|
+
|
|
26
|
+
**Classes:**
|
|
27
|
+
- `AgentCardService(agent_registry: AgentRegistry)` - Service for accessing discovered A2A agent information
|
|
28
|
+
- `get_all_agent_cards() -> List[AgentCard]` - Retrieves all currently discovered and registered agent cards
|
|
29
|
+
- `get_agent_card_by_name(agent_name: str) -> Optional[AgentCard]` - Retrieves a specific agent card by name, returns None if not found
|
|
30
|
+
|
|
31
|
+
**Usage Examples:**
|
|
32
|
+
```python
|
|
33
|
+
from solace_agent_mesh.gateway.http_sse.services.agent_card_service import AgentCardService
|
|
34
|
+
from solace_agent_mesh.common.agent_registry import AgentRegistry
|
|
35
|
+
|
|
36
|
+
# Initialize with shared agent registry
|
|
37
|
+
agent_registry = AgentRegistry() # Usually injected as shared instance
|
|
38
|
+
agent_service = AgentCardService(agent_registry=agent_registry)
|
|
39
|
+
|
|
40
|
+
# Get all available agents
|
|
41
|
+
all_agents = agent_service.get_all_agent_cards()
|
|
42
|
+
print(f"Found {len(all_agents)} agents")
|
|
43
|
+
|
|
44
|
+
# Get specific agent by name
|
|
45
|
+
agent = agent_service.get_agent_card_by_name("data-processor")
|
|
46
|
+
if agent:
|
|
47
|
+
print(f"Found agent: {agent.name}")
|
|
48
|
+
else:
|
|
49
|
+
print("Agent not found")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### data_retention_service.py
|
|
53
|
+
**Purpose:** Service for automatically cleaning up old tasks, task events, and feedback based on configurable retention policies
|
|
54
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.data_retention_service import DataRetentionService`
|
|
55
|
+
|
|
56
|
+
**Classes:**
|
|
57
|
+
- `DataRetentionService(session_factory: Callable[[], DBSession] | None, config: Dict[str, Any])` - Service for automatic data cleanup based on retention policies
|
|
58
|
+
- `cleanup_old_data() -> None` - Main orchestration method for cleaning up old data, calls cleanup methods for tasks and feedback
|
|
59
|
+
|
|
60
|
+
**Constants/Variables:**
|
|
61
|
+
- `MIN_RETENTION_DAYS: int` - Minimum retention period (1 day)
|
|
62
|
+
- `MIN_CLEANUP_INTERVAL_HOURS: int` - Minimum cleanup interval (1 hour)
|
|
63
|
+
- `MIN_BATCH_SIZE: int` - Minimum batch size for deletion (1)
|
|
64
|
+
- `MAX_BATCH_SIZE: int` - Maximum batch size for deletion (10000)
|
|
65
|
+
|
|
66
|
+
**Usage Examples:**
|
|
67
|
+
```python
|
|
68
|
+
from solace_agent_mesh.gateway.http_sse.services.data_retention_service import DataRetentionService
|
|
69
|
+
from sqlalchemy.orm import sessionmaker
|
|
70
|
+
|
|
71
|
+
# Initialize with database session factory and config
|
|
72
|
+
session_factory = sessionmaker(bind=your_engine)
|
|
73
|
+
config = {
|
|
74
|
+
"enabled": True,
|
|
75
|
+
"task_retention_days": 90,
|
|
76
|
+
"feedback_retention_days": 90,
|
|
77
|
+
"cleanup_interval_hours": 24,
|
|
78
|
+
"batch_size": 1000
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
retention_service = DataRetentionService(
|
|
82
|
+
session_factory=session_factory,
|
|
83
|
+
config=config
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Run cleanup (typically called by scheduler)
|
|
87
|
+
retention_service.cleanup_old_data()
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### feedback_service.py
|
|
91
|
+
**Purpose:** Handles the business logic for processing and storing user feedback with database persistence and event publishing
|
|
92
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.feedback_service import FeedbackService`
|
|
93
|
+
|
|
94
|
+
**Classes:**
|
|
95
|
+
- `FeedbackService(session_factory: Callable[[], DBSession] | None, component: WebUIBackendComponent, task_repo: ITaskRepository)` - Service for processing user feedback with database persistence and event publishing
|
|
96
|
+
- `process_feedback(payload: FeedbackPayload, user_id: str) -> None` - Asynchronously processes and stores feedback, publishes events if configured
|
|
97
|
+
|
|
98
|
+
**Usage Examples:**
|
|
99
|
+
```python
|
|
100
|
+
import asyncio
|
|
101
|
+
from solace_agent_mesh.gateway.http_sse.services.feedback_service import FeedbackService
|
|
102
|
+
from sqlalchemy.orm import sessionmaker
|
|
103
|
+
|
|
104
|
+
# Initialize with database session factory
|
|
105
|
+
session_factory = sessionmaker(bind=your_engine)
|
|
106
|
+
component = YourWebUIBackendComponent() # Your component instance
|
|
107
|
+
task_repo = YourTaskRepository() # Your task repository
|
|
108
|
+
|
|
109
|
+
feedback_service = FeedbackService(
|
|
110
|
+
session_factory=session_factory,
|
|
111
|
+
component=component,
|
|
112
|
+
task_repo=task_repo
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Process feedback (requires FeedbackPayload from router)
|
|
116
|
+
async def process_user_feedback():
|
|
117
|
+
# payload would be a FeedbackPayload instance from the router
|
|
118
|
+
await feedback_service.process_feedback(payload, user_id="user123")
|
|
119
|
+
|
|
120
|
+
asyncio.run(process_user_feedback())
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### people_service.py
|
|
124
|
+
**Purpose:** Provides user search functionality via configured identity services
|
|
125
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.people_service import PeopleService`
|
|
126
|
+
|
|
127
|
+
**Classes:**
|
|
128
|
+
- `PeopleService(identity_service: Optional[BaseIdentityService])` - Service for searching and retrieving user information
|
|
129
|
+
- `search_for_users(query: str, limit: int = 10) -> List[Dict[str, Any]]` - Asynchronously searches for users, returns empty list if no identity service configured or query too short
|
|
130
|
+
|
|
131
|
+
**Usage Examples:**
|
|
132
|
+
```python
|
|
133
|
+
import asyncio
|
|
134
|
+
from solace_agent_mesh.gateway.http_sse.services.people_service import PeopleService
|
|
135
|
+
from solace_agent_mesh.common.services.identity_service import BaseIdentityService
|
|
136
|
+
|
|
137
|
+
# Initialize with identity service
|
|
138
|
+
identity_service = SomeIdentityService() # Your identity service implementation
|
|
139
|
+
people_service = PeopleService(identity_service=identity_service)
|
|
140
|
+
|
|
141
|
+
async def search_users():
|
|
142
|
+
# Search for users
|
|
143
|
+
users = await people_service.search_for_users("john", limit=5)
|
|
144
|
+
for user in users:
|
|
145
|
+
print(f"User: {user.get('name')} - {user.get('email')}")
|
|
146
|
+
|
|
147
|
+
# Initialize without identity service (graceful degradation)
|
|
148
|
+
people_service_no_id = PeopleService(identity_service=None)
|
|
149
|
+
# search_for_users will return empty list
|
|
150
|
+
|
|
151
|
+
asyncio.run(search_users())
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### session_service.py
|
|
155
|
+
**Purpose:** Manages chat sessions and messages with database persistence support
|
|
156
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.session_service import SessionService`
|
|
157
|
+
|
|
158
|
+
**Classes:**
|
|
159
|
+
- `SessionService(component: WebUIBackendComponent = None)` - Service for managing chat sessions and messages
|
|
160
|
+
- `is_persistence_enabled() -> bool` - Checks if the service is configured with a persistent backend
|
|
161
|
+
- `get_user_sessions(db: DbSession, user_id: UserId, pagination: PaginationParams | None = None) -> PaginatedResponse[Session]` - Retrieves paginated sessions for a user
|
|
162
|
+
- `get_session_details(db: DbSession, session_id: SessionId, user_id: UserId) -> Session | None` - Gets session details for a specific session
|
|
163
|
+
- `create_session(db: DbSession, user_id: UserId, name: str | None = None, agent_id: str | None = None, session_id: str | None = None) -> Optional[Session]` - Creates a new session
|
|
164
|
+
- `update_session_name(db: DbSession, session_id: SessionId, user_id: UserId, name: str) -> Session | None` - Updates session name
|
|
165
|
+
- `delete_session_with_notifications(db: DbSession, session_id: SessionId, user_id: UserId) -> bool` - Deletes session and notifies agents
|
|
166
|
+
- `save_task(db: DbSession, task_id: str, session_id: str, user_id: str, user_message: Optional[str], message_bubbles: str, task_metadata: Optional[str] = None) -> ChatTask` - Saves a complete task interaction
|
|
167
|
+
- `get_session_tasks(db: DbSession, session_id: str, user_id: str) -> List[ChatTask]` - Gets all tasks for a session
|
|
168
|
+
- `get_session_messages_from_tasks(db: DbSession, session_id: str, user_id: str) -> List[Dict[str, Any]]` - Gets session messages by flattening task message_bubbles for backward compatibility
|
|
169
|
+
|
|
170
|
+
**Usage Examples:**
|
|
171
|
+
```python
|
|
172
|
+
from solace_agent_mesh.gateway.http_sse.services.session_service import SessionService
|
|
173
|
+
from sqlalchemy.orm import Session as DbSession
|
|
174
|
+
|
|
175
|
+
# Initialize with component
|
|
176
|
+
component = YourWebUIBackendComponent() # Your component
|
|
177
|
+
session_service = SessionService(component=component)
|
|
178
|
+
|
|
179
|
+
# Use with database session
|
|
180
|
+
with your_session_factory() as db:
|
|
181
|
+
# Create a new session
|
|
182
|
+
session = session_service.create_session(
|
|
183
|
+
db=db,
|
|
184
|
+
user_id="user123",
|
|
185
|
+
name="My Chat Session",
|
|
186
|
+
agent_id="assistant-agent"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
# Save a task with message bubbles
|
|
190
|
+
import json
|
|
191
|
+
message_bubbles = json.dumps([
|
|
192
|
+
{"type": "user", "text": "Hello", "id": "msg1"},
|
|
193
|
+
{"type": "agent", "text": "Hi there!", "id": "msg2"}
|
|
194
|
+
])
|
|
195
|
+
|
|
196
|
+
task = session_service.save_task(
|
|
197
|
+
db=db,
|
|
198
|
+
task_id="task-123",
|
|
199
|
+
session_id=session.id,
|
|
200
|
+
user_id="user123",
|
|
201
|
+
user_message="Hello",
|
|
202
|
+
message_bubbles=message_bubbles
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
# Get user's sessions with pagination
|
|
206
|
+
paginated_sessions = session_service.get_user_sessions(db, "user123")
|
|
207
|
+
|
|
208
|
+
db.commit()
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### task_logger_service.py
|
|
212
|
+
**Purpose:** Service for logging A2A tasks and events to the database with configurable filtering and sanitization
|
|
213
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.task_logger_service import TaskLoggerService`
|
|
214
|
+
|
|
215
|
+
**Classes:**
|
|
216
|
+
- `TaskLoggerService(session_factory: Callable[[], DBSession] | None, config: Dict[str, Any])` - Service for logging A2A tasks and events to database
|
|
217
|
+
- `log_event(event_data: Dict[str, Any]) -> None` - Parses a raw A2A message and logs it as a task event, creates or updates master task record
|
|
218
|
+
|
|
219
|
+
**Usage Examples:**
|
|
220
|
+
```python
|
|
221
|
+
from solace_agent_mesh.gateway.http_sse.services.task_logger_service import TaskLoggerService
|
|
222
|
+
from sqlalchemy.orm import sessionmaker
|
|
223
|
+
|
|
224
|
+
# Initialize with database session factory and config
|
|
225
|
+
session_factory = sessionmaker(bind=your_engine)
|
|
226
|
+
config = {
|
|
227
|
+
"enabled": True,
|
|
228
|
+
"log_status_updates": True,
|
|
229
|
+
"log_artifact_events": False,
|
|
230
|
+
"log_file_parts": True,
|
|
231
|
+
"max_file_part_size_bytes": 102400
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
task_logger = TaskLoggerService(
|
|
235
|
+
session_factory=session_factory,
|
|
236
|
+
config=config
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
# Log an A2A event
|
|
240
|
+
event_data = {
|
|
241
|
+
"topic": "sam/agents/my-agent/request",
|
|
242
|
+
"payload": {"id": "task-123", "method": "sendMessage"},
|
|
243
|
+
"user_properties": {"userId": "user@example.com"}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
task_logger.log_event(event_data)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### task_service.py
|
|
250
|
+
**Purpose:** Handles A2A task operations, specifically task cancellation using CoreA2AService and message publishing
|
|
251
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.services.task_service import TaskService, PublishFunc`
|
|
252
|
+
|
|
253
|
+
**Type Aliases:**
|
|
254
|
+
- `PublishFunc: Callable[[str, Dict, Optional[Dict]], None]` - Function type for publishing messages (topic, payload, user_properties)
|
|
255
|
+
|
|
256
|
+
**Classes:**
|
|
257
|
+
- `TaskService(core_a2a_service: CoreA2AService, publish_func: PublishFunc, namespace: str, gateway_id: str, sse_manager: SSEManager, task_context_map: Dict[str, Dict], task_context_lock: threading.Lock, app_name: str)` - Service for managing A2A task operations
|
|
258
|
+
- `cancel_task(agent_name: str, task_id: str, client_id: str, user_id: str = "web_user") -> None` - Asynchronously cancels a task by publishing A2A CancelTaskRequest message
|
|
259
|
+
|
|
260
|
+
**Usage Examples:**
|
|
261
|
+
```python
|
|
262
|
+
import asyncio
|
|
263
|
+
import threading
|
|
264
|
+
from solace_agent_mesh.gateway.http_sse.services.task_service import TaskService, PublishFunc
|
|
265
|
+
from solace_agent_mesh.core_a2a.service import CoreA2AService
|
|
266
|
+
from solace_agent_mesh.gateway.http_sse.sse_manager import SSEManager
|
|
267
|
+
|
|
268
|
+
# Define publish function
|
|
269
|
+
def my_publish_func(topic: str, payload: dict, user_properties: dict = None):
|
|
270
|
+
print(f"Publishing to {topic}: {payload}")
|
|
271
|
+
# Your actual message publishing logic here
|
|
272
|
+
|
|
273
|
+
# Initialize dependencies
|
|
274
|
+
core_a2a_service = CoreA2AService() # Your core A2A service
|
|
275
|
+
sse_manager = SSEManager()
|
|
276
|
+
task_context_map = {}
|
|
277
|
+
task_context_lock = threading.Lock()
|
|
278
|
+
|
|
279
|
+
# Create task service
|
|
280
|
+
task_service = TaskService(
|
|
281
|
+
core_a2a_service=core_a2a_service,
|
|
282
|
+
publish_func=my_publish_func,
|
|
283
|
+
namespace="my-namespace",
|
|
284
|
+
gateway_id="gateway-01",
|
|
285
|
+
sse_manager=sse_manager,
|
|
286
|
+
task_context_map=task_context_map,
|
|
287
|
+
task_context_lock=task_context_lock,
|
|
288
|
+
app_name="my-app"
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
async def cancel_task_example():
|
|
292
|
+
# Cancel a task
|
|
293
|
+
await task_service.cancel_task(
|
|
294
|
+
agent_name="data-processor",
|
|
295
|
+
task_id="task-123",
|
|
296
|
+
client_id="client-456",
|
|
297
|
+
user_id="user@example.com"
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
asyncio.run(cancel_task_example())
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
# content_hash: 09bc3008d9a6c148b0b9d7477d20b26514f7fc4ee72f36eda5348f8f7d51f2ea
|