solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.1__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.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/callbacks.py +1694 -0
- solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
- solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
- solace_agent_mesh/agent/adk/runner.py +353 -0
- solace_agent_mesh/agent/adk/services.py +240 -0
- solace_agent_mesh/agent/adk/setup.py +751 -0
- solace_agent_mesh/agent/adk/stream_parser.py +214 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
- solace_agent_mesh/agent/agent_llm.txt +41 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
- solace_agent_mesh/agent/sac/app.py +640 -0
- solace_agent_mesh/agent/sac/component.py +3388 -0
- solace_agent_mesh/agent/sac/patch_adk.py +111 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +176 -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 +90 -0
- solace_agent_mesh/agent/tools/__init__.py +14 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
- solace_agent_mesh/agent/tools/image_tools.py +1184 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
- solace_agent_mesh/agent/tools/registry.py +36 -0
- solace_agent_mesh/agent/tools/test_tools.py +135 -0
- solace_agent_mesh/agent/tools/tool_definition.py +45 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
- solace_agent_mesh/agent/tools/web_tools.py +381 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
- solace_agent_mesh/agent/utils/config_parser.py +47 -0
- solace_agent_mesh/agent/utils/context_helpers.py +60 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.906a1503.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/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.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/1523c6b4.91c7bc01.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/166ab619.7d97ccaf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
- solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.b524e433.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/3d406171.f722eaf5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.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/4c2787c2.66ee00e9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.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/5b4258a4.bda20761.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.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/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.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/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.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.d7c16be6.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.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.49e930c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.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/9eff14a2.1bf8f61c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -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/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1753813536522.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 -1
- 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 +659 -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 +93 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -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 +110 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +158 -0
- solace_agent_mesh/cli/main.py +17 -294
- solace_agent_mesh/cli/utils.py +135 -204
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a_protocol.py +564 -0
- solace_agent_mesh/common/agent_registry.py +42 -0
- solace_agent_mesh/common/client/__init__.py +4 -0
- solace_agent_mesh/common/client/card_resolver.py +21 -0
- solace_agent_mesh/common/client/client.py +85 -0
- solace_agent_mesh/common/client/client_llm.txt +133 -0
- solace_agent_mesh/common/common_llm.txt +144 -0
- solace_agent_mesh/common/constants.py +1 -14
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +130 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/registry.py +125 -0
- solace_agent_mesh/common/server/__init__.py +4 -0
- solace_agent_mesh/common/server/server.py +122 -0
- solace_agent_mesh/common/server/server_llm.txt +169 -0
- solace_agent_mesh/common/server/task_manager.py +291 -0
- solace_agent_mesh/common/server/utils.py +28 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +162 -0
- solace_agent_mesh/common/services/identity_service.py +129 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
- solace_agent_mesh/common/services/services_llm.txt +132 -0
- solace_agent_mesh/common/types.py +411 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +55 -0
- solace_agent_mesh/common/utils/embeds/converter.py +452 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
- solace_agent_mesh/common/utils/embeds/types.py +14 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/log_formatters.py +44 -0
- solace_agent_mesh/common/utils/mime_helpers.py +106 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
- solace_agent_mesh/common/utils/utils_llm.txt +67 -0
- solace_agent_mesh/config_portal/backend/common.py +66 -24
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
- solace_agent_mesh/config_portal/backend/server.py +550 -181
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
- solace_agent_mesh/core_a2a/service.py +331 -0
- solace_agent_mesh/evaluation/config_loader.py +657 -0
- solace_agent_mesh/evaluation/evaluator.py +667 -0
- solace_agent_mesh/evaluation/message_organizer.py +568 -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 +972 -0
- solace_agent_mesh/evaluation/report_generator.py +613 -0
- solace_agent_mesh/evaluation/run.py +613 -0
- solace_agent_mesh/evaluation/subscriber.py +872 -0
- solace_agent_mesh/evaluation/summary_builder.py +775 -0
- solace_agent_mesh/evaluation/test_case_loader.py +714 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +266 -0
- solace_agent_mesh/gateway/base/base_llm.txt +119 -0
- solace_agent_mesh/gateway/base/component.py +1542 -0
- solace_agent_mesh/gateway/base/task_context.py +74 -0
- solace_agent_mesh/gateway/gateway_llm.txt +125 -0
- solace_agent_mesh/gateway/http_sse/app.py +190 -0
- solace_agent_mesh/gateway/http_sse/component.py +1602 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
- solace_agent_mesh/gateway/http_sse/main.py +442 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -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 +73 -0
- solace_agent_mesh/templates/gateway_component_template.py +400 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +55 -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 +63 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
- solace_agent_mesh/templates/plugin_readme_template.md +34 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +66 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +53 -0
- solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
- solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
- solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
- {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
- solace_agent_mesh/agents/base_agent_component.py +0 -256
- solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
- solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
- solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
- solace_agent_mesh/agents/global/actions/create_file.py +0 -70
- solace_agent_mesh/agents/global/actions/error_action.py +0 -45
- solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
- solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
- solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
- solace_agent_mesh/agents/global/global_agent_component.py +0 -38
- solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
- solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
- solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
- solace_agent_mesh/agents/slack/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
- solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
- solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
- solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
- solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
- solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
- solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
- solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
- solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
- solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
- solace_agent_mesh/assets/web-visualizer/index.html +0 -14
- solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
- solace_agent_mesh/cli/commands/add/__init__.py +0 -3
- solace_agent_mesh/cli/commands/add/add.py +0 -88
- solace_agent_mesh/cli/commands/add/agent.py +0 -110
- solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
- solace_agent_mesh/cli/commands/add/gateway.py +0 -374
- solace_agent_mesh/cli/commands/build.py +0 -670
- solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
- solace_agent_mesh/cli/commands/chat/chat.py +0 -361
- solace_agent_mesh/cli/commands/config.py +0 -29
- solace_agent_mesh/cli/commands/init/__init__.py +0 -3
- solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
- solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
- solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
- solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
- solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
- solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
- solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
- solace_agent_mesh/cli/commands/init/init.py +0 -92
- solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
- solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
- solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
- solace_agent_mesh/cli/commands/plugin/add.py +0 -100
- solace_agent_mesh/cli/commands/plugin/build.py +0 -268
- solace_agent_mesh/cli/commands/plugin/create.py +0 -117
- solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
- solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
- solace_agent_mesh/cli/commands/run.py +0 -68
- solace_agent_mesh/cli/commands/visualizer.py +0 -138
- solace_agent_mesh/cli/config.py +0 -85
- solace_agent_mesh/common/action.py +0 -91
- solace_agent_mesh/common/action_list.py +0 -37
- solace_agent_mesh/common/action_response.py +0 -340
- solace_agent_mesh/common/mysql_database.py +0 -40
- solace_agent_mesh/common/postgres_database.py +0 -85
- solace_agent_mesh/common/prompt_templates.py +0 -28
- solace_agent_mesh/common/stimulus_utils.py +0 -152
- solace_agent_mesh/common/time.py +0 -24
- solace_agent_mesh/common/utils.py +0 -712
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
- solace_agent_mesh/configs/agent_global.yaml +0 -74
- solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
- solace_agent_mesh/configs/agent_slack.yaml +0 -64
- solace_agent_mesh/configs/agent_web_request.yaml +0 -75
- solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
- solace_agent_mesh/configs/error_catcher.yaml +0 -56
- solace_agent_mesh/configs/monitor.yaml +0 -0
- solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
- solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
- solace_agent_mesh/configs/orchestrator.yaml +0 -241
- solace_agent_mesh/configs/service_embedding.yaml +0 -81
- solace_agent_mesh/configs/service_llm.yaml +0 -265
- solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
- solace_agent_mesh/gateway/components/gateway_base.py +0 -47
- solace_agent_mesh/gateway/components/gateway_input.py +0 -278
- solace_agent_mesh/gateway/components/gateway_output.py +0 -298
- solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
- solace_agent_mesh/gateway/identity/identity_base.py +0 -10
- solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
- solace_agent_mesh/gateway/identity/no_identity.py +0 -9
- solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
- solace_agent_mesh/monitors/base_monitor_component.py +0 -26
- solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
- solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
- solace_agent_mesh/orchestrator/__init__.py +0 -0
- solace_agent_mesh/orchestrator/action_manager.py +0 -237
- solace_agent_mesh/orchestrator/components/__init__.py +0 -0
- solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
- solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
- solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
- solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
- solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
- solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
- solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
- solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
- solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
- solace_agent_mesh/services/common/__init__.py +0 -4
- solace_agent_mesh/services/common/auto_expiry.py +0 -45
- solace_agent_mesh/services/common/singleton.py +0 -18
- solace_agent_mesh/services/file_service/__init__.py +0 -14
- solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
- solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
- solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
- solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
- solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
- solace_agent_mesh/services/file_service/file_service.py +0 -437
- solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
- solace_agent_mesh/services/file_service/file_transformations.py +0 -141
- solace_agent_mesh/services/file_service/file_utils.py +0 -324
- solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
- solace_agent_mesh/services/history_service/__init__.py +0 -3
- solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
- solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
- solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
- solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
- solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
- solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
- solace_agent_mesh/services/history_service/history_service.py +0 -413
- solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
- solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
- solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
- solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
- solace_agent_mesh/services/middleware_service/__init__.py +0 -0
- solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
- solace_agent_mesh/templates/action.py +0 -38
- solace_agent_mesh/templates/agent.py +0 -29
- solace_agent_mesh/templates/agent.yaml +0 -70
- solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
- solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
- solace_agent_mesh/templates/gateway-flows.yaml +0 -78
- solace_agent_mesh/templates/gateway-header.yaml +0 -16
- solace_agent_mesh/templates/gateway_base.py +0 -15
- solace_agent_mesh/templates/gateway_input.py +0 -98
- solace_agent_mesh/templates/gateway_output.py +0 -71
- solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
- solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
- solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
- solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
- solace_agent_mesh/templates/slack-default-config.yaml +0 -16
- solace_agent_mesh/templates/slack-flows.yaml +0 -81
- solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
- solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
- solace_agent_mesh/templates/web-default-config.yaml +0 -10
- solace_agent_mesh/templates/web-flows.yaml +0 -76
- solace_agent_mesh/tools/__init__.py +0 -0
- solace_agent_mesh/tools/components/__init__.py +0 -0
- solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
- solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
- solace_agent_mesh/tools/config/runtime_config.py +0 -26
- solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
- solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
- solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
- /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
- /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
- {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
## Quick Summary
|
|
2
|
+
This directory contains components for the HTTP SSE (Server-Sent Events) gateway, designed to work within the Solace AI Connector (SAC) framework. The primary component forwards messages received from the Solace broker to an internal queue, enabling real-time visualization in a web-based user interface.
|
|
3
|
+
|
|
4
|
+
## Files Overview
|
|
5
|
+
- `__init__.py`: Makes the `VisualizationForwarderComponent` class directly importable from the `components` package.
|
|
6
|
+
- `visualization_forwarder_component.py`: Defines a component that forwards messages from a broker input to a Python `queue.Queue` for visualization.
|
|
7
|
+
|
|
8
|
+
## Developer API Reference
|
|
9
|
+
|
|
10
|
+
### __init__.py
|
|
11
|
+
**Purpose:** Exposes the public components of this directory for easy importing.
|
|
12
|
+
**Import:** `from gateway.http_sse.components import VisualizationForwarderComponent`
|
|
13
|
+
|
|
14
|
+
**Exports:**
|
|
15
|
+
- `VisualizationForwarderComponent`: The main component class for forwarding messages to a visualization queue.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
### visualization_forwarder_component.py
|
|
20
|
+
**Purpose:** A Solace AI Connector (SAC) component that listens for messages from a `BrokerInput` and forwards them to a specified Python `queue.Queue`. This is primarily used to send data to the Web UI for real-time display.
|
|
21
|
+
**Import:** `from gateway.http_sse.components.visualization_forwarder_component import VisualizationForwarderComponent`
|
|
22
|
+
|
|
23
|
+
**Classes:**
|
|
24
|
+
- `VisualizationForwarderComponent(**kwargs: Any)` - A component that forwards messages to a target queue. It is initialized with configuration parameters, most importantly `target_queue_ref`.
|
|
25
|
+
- `invoke(self, message: SolaceMessage, data: Dict[str, Any]) -> None` - The core method called by the SAC framework for each incoming message. It formats the data and places it onto the target queue. This method should not be called directly by developers; the framework handles its execution.
|
|
26
|
+
|
|
27
|
+
**Constants/Variables:**
|
|
28
|
+
- `info: Dict` - A metadata dictionary required by the SAC framework. It describes the component's configuration parameters, input schema, and purpose. This is for framework use and not for direct interaction.
|
|
29
|
+
|
|
30
|
+
**Usage Examples:**
|
|
31
|
+
```python
|
|
32
|
+
import queue
|
|
33
|
+
from gateway.http_sse.components import VisualizationForwarderComponent
|
|
34
|
+
from solace_ai_connector.common.message import Message as SolaceMessage
|
|
35
|
+
|
|
36
|
+
# 1. Create a target queue that will receive the forwarded messages.
|
|
37
|
+
# This queue is typically managed by another component, like a Web UI backend.
|
|
38
|
+
visualization_queue = queue.Queue()
|
|
39
|
+
|
|
40
|
+
# 2. Instantiate the component, providing a reference to the target queue.
|
|
41
|
+
# This is usually done within a SAC flow configuration file.
|
|
42
|
+
forwarder = VisualizationForwarderComponent(
|
|
43
|
+
name="my_forwarder",
|
|
44
|
+
target_queue_ref=visualization_queue
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# 3. The `invoke` method is called automatically by the SAC framework when a message
|
|
48
|
+
# arrives from a connected BrokerInput component.
|
|
49
|
+
|
|
50
|
+
# Example of what the consuming component would get from the queue:
|
|
51
|
+
# A dictionary containing the message topic, payload, and other details.
|
|
52
|
+
#
|
|
53
|
+
# if not visualization_queue.empty():
|
|
54
|
+
# forwarded_data = visualization_queue.get()
|
|
55
|
+
# print(f"Received topic: {forwarded_data['topic']}")
|
|
56
|
+
# print(f"Received payload: {forwarded_data['payload']}")
|
|
57
|
+
#
|
|
58
|
+
# Expected structure of `forwarded_data`:
|
|
59
|
+
# {
|
|
60
|
+
# "topic": "some/broker/topic",
|
|
61
|
+
# "payload": {"key": "value"},
|
|
62
|
+
# "user_properties": {"prop1": "value1"},
|
|
63
|
+
# "_original_broker_message": <SolaceMessage object>
|
|
64
|
+
# }
|
|
65
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SAC Component to forward messages from an internal BrokerInput
|
|
3
|
+
to the WebUIBackendComponent's internal queue for visualization.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import queue
|
|
7
|
+
from typing import Any, Dict
|
|
8
|
+
|
|
9
|
+
from solace_ai_connector.components.component_base import ComponentBase
|
|
10
|
+
from solace_ai_connector.common.message import Message as SolaceMessage
|
|
11
|
+
from solace_ai_connector.common.log import log
|
|
12
|
+
|
|
13
|
+
info = {
|
|
14
|
+
"class_name": "VisualizationForwarderComponent",
|
|
15
|
+
"description": (
|
|
16
|
+
"Forwards A2A messages from an internal BrokerInput to the main "
|
|
17
|
+
"WebUIBackendComponent's internal queue for visualization."
|
|
18
|
+
),
|
|
19
|
+
"config_parameters": [
|
|
20
|
+
{
|
|
21
|
+
"name": "target_queue_ref",
|
|
22
|
+
"required": True,
|
|
23
|
+
"type": "queue.Queue",
|
|
24
|
+
"description": "A direct reference to the target queue.Queue instance in WebUIBackendComponent.",
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"input_schema": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"description": "Output from a BrokerInput component.",
|
|
30
|
+
"properties": {
|
|
31
|
+
"payload": {"type": "any", "description": "The message payload."},
|
|
32
|
+
"topic": {"type": "string", "description": "The message topic."},
|
|
33
|
+
"user_properties": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"description": "User properties of the message.",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
"required": ["payload", "topic"],
|
|
39
|
+
},
|
|
40
|
+
"output_schema": None,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class VisualizationForwarderComponent(ComponentBase):
|
|
45
|
+
"""
|
|
46
|
+
A simple SAC component that takes messages from its input (typically
|
|
47
|
+
from a BrokerInput) and puts them onto a target Python queue.Queue
|
|
48
|
+
instance provided in its configuration.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self, **kwargs: Any):
|
|
52
|
+
super().__init__(info, **kwargs)
|
|
53
|
+
self.target_queue: queue.Queue = self.get_config("target_queue_ref")
|
|
54
|
+
if not isinstance(self.target_queue, queue.Queue):
|
|
55
|
+
log.error(
|
|
56
|
+
"%s Configuration 'target_queue_ref' is not a valid queue.Queue instance. Type: %s",
|
|
57
|
+
self.log_identifier,
|
|
58
|
+
type(self.target_queue),
|
|
59
|
+
)
|
|
60
|
+
raise ValueError(
|
|
61
|
+
f"{self.log_identifier} 'target_queue_ref' must be a queue.Queue instance."
|
|
62
|
+
)
|
|
63
|
+
log.info("%s VisualizationForwarderComponent initialized.", self.log_identifier)
|
|
64
|
+
|
|
65
|
+
def invoke(self, message: SolaceMessage, data: Dict[str, Any]) -> None:
|
|
66
|
+
"""
|
|
67
|
+
Processes the incoming message and forwards it.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
message: The SolaceMessage object from BrokerInput (this is the original message).
|
|
71
|
+
data: The data extracted by BrokerInput's output_schema (payload, topic, user_properties).
|
|
72
|
+
"""
|
|
73
|
+
log_id_prefix = f"{self.log_identifier}[Invoke]"
|
|
74
|
+
try:
|
|
75
|
+
|
|
76
|
+
forward_data = {
|
|
77
|
+
"topic": data.get("topic"),
|
|
78
|
+
"payload": data.get("payload"),
|
|
79
|
+
"user_properties": data.get("user_properties"),
|
|
80
|
+
"_original_broker_message": message,
|
|
81
|
+
}
|
|
82
|
+
log.debug(
|
|
83
|
+
"%s Forwarding message for topic: %s",
|
|
84
|
+
log_id_prefix,
|
|
85
|
+
forward_data["topic"],
|
|
86
|
+
)
|
|
87
|
+
try:
|
|
88
|
+
self.target_queue.put_nowait(forward_data)
|
|
89
|
+
except queue.Full:
|
|
90
|
+
log.warning(
|
|
91
|
+
"%s Visualization queue is full. Message dropped. Current size: %d",
|
|
92
|
+
log_id_prefix,
|
|
93
|
+
self.target_queue.qsize(),
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
message.call_acknowledgements()
|
|
97
|
+
log.debug("%s Message acknowledged to BrokerInput.", log_id_prefix)
|
|
98
|
+
|
|
99
|
+
except Exception as e:
|
|
100
|
+
log.exception(
|
|
101
|
+
"%s Error in VisualizationForwarderComponent invoke: %s",
|
|
102
|
+
log_id_prefix,
|
|
103
|
+
e,
|
|
104
|
+
)
|
|
105
|
+
if message:
|
|
106
|
+
message.call_negative_acknowledgements()
|
|
107
|
+
raise
|
|
108
|
+
return None
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines FastAPI dependency injectors to access shared resources
|
|
3
|
+
managed by the WebUIBackendComponent.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from fastapi import Depends, HTTPException, status, Request
|
|
7
|
+
from typing import (
|
|
8
|
+
TYPE_CHECKING,
|
|
9
|
+
Callable,
|
|
10
|
+
Dict,
|
|
11
|
+
Optional,
|
|
12
|
+
Any,
|
|
13
|
+
)
|
|
14
|
+
import os
|
|
15
|
+
|
|
16
|
+
from solace_ai_connector.common.log import log
|
|
17
|
+
from ...gateway.http_sse.sse_manager import SSEManager
|
|
18
|
+
from ...gateway.http_sse.session_manager import SessionManager
|
|
19
|
+
from ...common.agent_registry import AgentRegistry
|
|
20
|
+
|
|
21
|
+
from ...gateway.http_sse.services.agent_service import AgentService
|
|
22
|
+
from ...gateway.http_sse.services.task_service import TaskService
|
|
23
|
+
from ...gateway.http_sse.services.people_service import PeopleService
|
|
24
|
+
from ...gateway.base.task_context import TaskContextManager
|
|
25
|
+
|
|
26
|
+
from ...core_a2a.service import CoreA2AService
|
|
27
|
+
from ...common.services.identity_service import BaseIdentityService
|
|
28
|
+
from ...common.middleware.config_resolver import ConfigResolver
|
|
29
|
+
|
|
30
|
+
from google.adk.artifacts import BaseArtifactService
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if TYPE_CHECKING:
|
|
34
|
+
from gateway.http_sse.component import WebUIBackendComponent
|
|
35
|
+
|
|
36
|
+
sac_component_instance: "WebUIBackendComponent" = None
|
|
37
|
+
|
|
38
|
+
api_config: Optional[Dict[str, Any]] = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def set_component_instance(component: "WebUIBackendComponent"):
|
|
42
|
+
"""Called by the component during its startup to provide its instance."""
|
|
43
|
+
global sac_component_instance
|
|
44
|
+
if sac_component_instance is None:
|
|
45
|
+
sac_component_instance = component
|
|
46
|
+
log.info("[Dependencies] SAC Component instance provided.")
|
|
47
|
+
else:
|
|
48
|
+
log.warning("[Dependencies] SAC Component instance already set.")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def set_api_config(config: Dict[str, Any]):
|
|
52
|
+
"""Called during startup to provide API configuration."""
|
|
53
|
+
global api_config
|
|
54
|
+
if api_config is None:
|
|
55
|
+
api_config = config
|
|
56
|
+
log.info("[Dependencies] API configuration provided.")
|
|
57
|
+
else:
|
|
58
|
+
log.warning("[Dependencies] API configuration already set.")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_sac_component() -> "WebUIBackendComponent":
|
|
62
|
+
"""FastAPI dependency to get the SAC component instance."""
|
|
63
|
+
if sac_component_instance is None:
|
|
64
|
+
log.critical(
|
|
65
|
+
"[Dependencies] SAC Component instance accessed before it was set!"
|
|
66
|
+
)
|
|
67
|
+
raise HTTPException(
|
|
68
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
69
|
+
detail="Backend component not yet initialized.",
|
|
70
|
+
)
|
|
71
|
+
return sac_component_instance
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_api_config() -> Dict[str, Any]:
|
|
75
|
+
"""FastAPI dependency to get the API configuration."""
|
|
76
|
+
if api_config is None:
|
|
77
|
+
log.critical("[Dependencies] API configuration accessed before it was set!")
|
|
78
|
+
raise HTTPException(
|
|
79
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
80
|
+
detail="API configuration not yet initialized.",
|
|
81
|
+
)
|
|
82
|
+
return api_config
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def get_agent_registry(
|
|
86
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
87
|
+
) -> AgentRegistry:
|
|
88
|
+
"""FastAPI dependency to get the AgentRegistry."""
|
|
89
|
+
log.debug("[Dependencies] get_agent_registry called")
|
|
90
|
+
return component.get_agent_registry()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def get_sse_manager(
|
|
94
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
95
|
+
) -> SSEManager:
|
|
96
|
+
"""FastAPI dependency to get the SSEManager."""
|
|
97
|
+
log.debug("[Dependencies] get_sse_manager called")
|
|
98
|
+
return component.get_sse_manager()
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def get_session_manager(
|
|
102
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
103
|
+
) -> SessionManager:
|
|
104
|
+
"""FastAPI dependency to get the SessionManager."""
|
|
105
|
+
log.debug("[Dependencies] get_session_manager called")
|
|
106
|
+
return component.get_session_manager()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def get_user_id_callable(
|
|
110
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
111
|
+
) -> Callable:
|
|
112
|
+
"""Dependency that provides the callable for getting user_id (client_id)."""
|
|
113
|
+
log.debug("[Dependencies] Providing user_id callable")
|
|
114
|
+
return session_manager.dep_get_client_id()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def ensure_session_id_callable(
|
|
118
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
119
|
+
) -> Callable:
|
|
120
|
+
"""Dependency that provides the callable for ensuring session_id."""
|
|
121
|
+
log.debug("[Dependencies] Providing ensure_session_id callable")
|
|
122
|
+
return session_manager.dep_ensure_session_id()
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def get_user_id(
|
|
126
|
+
request: Request,
|
|
127
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
128
|
+
) -> str:
|
|
129
|
+
"""
|
|
130
|
+
FastAPI dependency that returns the user's identity.
|
|
131
|
+
It prioritizes the authenticated user from `request.state.user` (set by AuthMiddleware)
|
|
132
|
+
and falls back to the SessionManager for non-authenticated or legacy scenarios.
|
|
133
|
+
"""
|
|
134
|
+
log.debug("[Dependencies] Resolving user_id string")
|
|
135
|
+
|
|
136
|
+
if hasattr(request.state, "user") and request.state.user:
|
|
137
|
+
user_id = request.state.user.get("id")
|
|
138
|
+
if user_id:
|
|
139
|
+
log.debug(f"[Dependencies] Using user ID from AuthMiddleware: {user_id}")
|
|
140
|
+
return user_id
|
|
141
|
+
else:
|
|
142
|
+
log.warning(
|
|
143
|
+
"[Dependencies] request.state.user exists but has no 'id' field. Falling back."
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
log.debug("[Dependencies] Falling back to SessionManager for user_id")
|
|
147
|
+
try:
|
|
148
|
+
return session_manager.get_a2a_client_id(request)
|
|
149
|
+
except AssertionError:
|
|
150
|
+
return f"anonymous_user:{os.urandom(8).hex()}"
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def ensure_session_id(
|
|
154
|
+
request: Request,
|
|
155
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
156
|
+
) -> str:
|
|
157
|
+
"""FastAPI dependency that directly returns the ensured session_id string."""
|
|
158
|
+
log.debug("[Dependencies] Resolving ensured session_id string")
|
|
159
|
+
return session_manager.ensure_a2a_session(request)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def get_identity_service(
|
|
163
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
164
|
+
) -> Optional[BaseIdentityService]:
|
|
165
|
+
"""FastAPI dependency to get the configured IdentityService instance."""
|
|
166
|
+
log.debug("[Dependencies] get_identity_service called")
|
|
167
|
+
return component.identity_service
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def get_people_service(
|
|
171
|
+
identity_service: Optional[BaseIdentityService] = Depends(get_identity_service),
|
|
172
|
+
) -> PeopleService:
|
|
173
|
+
"""FastAPI dependency to get an instance of PeopleService."""
|
|
174
|
+
log.debug("[Dependencies] get_people_service called")
|
|
175
|
+
return PeopleService(identity_service=identity_service)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
PublishFunc = Callable[[str, Dict, Optional[Dict]], None]
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def get_publish_a2a_func(
|
|
182
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
183
|
+
) -> PublishFunc:
|
|
184
|
+
"""FastAPI dependency to get the component's publish_a2a method."""
|
|
185
|
+
log.debug("[Dependencies] get_publish_a2a_func called")
|
|
186
|
+
return component.publish_a2a
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def get_namespace(
|
|
190
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
191
|
+
) -> str:
|
|
192
|
+
"""FastAPI dependency to get the A2A namespace."""
|
|
193
|
+
log.debug("[Dependencies] get_namespace called")
|
|
194
|
+
return component.get_namespace()
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def get_gateway_id(
|
|
198
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
199
|
+
) -> str:
|
|
200
|
+
"""FastAPI dependency to get the Gateway ID."""
|
|
201
|
+
log.debug("[Dependencies] get_gateway_id called")
|
|
202
|
+
return component.get_gateway_id()
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def get_config_resolver(
|
|
206
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
207
|
+
) -> ConfigResolver:
|
|
208
|
+
"""FastAPI dependency to get the ConfigResolver."""
|
|
209
|
+
log.debug("[Dependencies] get_config_resolver called")
|
|
210
|
+
return component.get_config_resolver()
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def get_app_config(
|
|
214
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
215
|
+
) -> Dict[str, Any]:
|
|
216
|
+
"""
|
|
217
|
+
FastAPI dependency to safely get the application configuration dictionary.
|
|
218
|
+
"""
|
|
219
|
+
log.debug("[Dependencies] get_app_config called")
|
|
220
|
+
return component.component_config.get("app_config", {})
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
async def get_user_config(
|
|
224
|
+
request: Request,
|
|
225
|
+
user_id: str = Depends(get_user_id),
|
|
226
|
+
config_resolver: ConfigResolver = Depends(get_config_resolver),
|
|
227
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
228
|
+
app_config: Dict[str, Any] = Depends(get_app_config),
|
|
229
|
+
) -> Dict[str, Any]:
|
|
230
|
+
"""
|
|
231
|
+
FastAPI dependency to get the user-specific configuration.
|
|
232
|
+
"""
|
|
233
|
+
log.debug(f"[Dependencies] get_user_config called for user_id: {user_id}")
|
|
234
|
+
gateway_context = {
|
|
235
|
+
"gateway_id": component.gateway_id,
|
|
236
|
+
"gateway_app_config": app_config,
|
|
237
|
+
"request": request,
|
|
238
|
+
}
|
|
239
|
+
return await config_resolver.resolve_user_config(
|
|
240
|
+
user_id, gateway_context, app_config
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def get_shared_artifact_service(
|
|
245
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
246
|
+
) -> Optional[BaseArtifactService]:
|
|
247
|
+
"""FastAPI dependency to get the shared ArtifactService."""
|
|
248
|
+
log.debug("[Dependencies] get_shared_artifact_service called")
|
|
249
|
+
return component.get_shared_artifact_service()
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def get_embed_config(
|
|
253
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
254
|
+
) -> Dict[str, Any]:
|
|
255
|
+
"""FastAPI dependency to get embed-related configuration."""
|
|
256
|
+
log.debug("[Dependencies] get_embed_config called")
|
|
257
|
+
return component.get_embed_config()
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def get_core_a2a_service(
|
|
261
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
262
|
+
) -> CoreA2AService:
|
|
263
|
+
"""FastAPI dependency to get the CoreA2AService."""
|
|
264
|
+
log.debug("[Dependencies] get_core_a2a_service called")
|
|
265
|
+
core_service = component.get_core_a2a_service()
|
|
266
|
+
if core_service is None:
|
|
267
|
+
log.critical("[Dependencies] CoreA2AService accessed before initialization!")
|
|
268
|
+
raise HTTPException(status_code=503, detail="Core service not ready.")
|
|
269
|
+
return core_service
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def get_task_context_manager_from_component(
|
|
273
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
274
|
+
) -> TaskContextManager:
|
|
275
|
+
"""FastAPI dependency to get the TaskContextManager from the component."""
|
|
276
|
+
log.debug("[Dependencies] get_task_context_manager_from_component called")
|
|
277
|
+
if component.task_context_manager is None:
|
|
278
|
+
log.critical(
|
|
279
|
+
"[Dependencies] TaskContextManager accessed before initialization!"
|
|
280
|
+
)
|
|
281
|
+
raise HTTPException(status_code=503, detail="Task context manager not ready.")
|
|
282
|
+
return component.task_context_manager
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def get_agent_service(
|
|
286
|
+
registry: AgentRegistry = Depends(get_agent_registry),
|
|
287
|
+
) -> AgentService:
|
|
288
|
+
"""FastAPI dependency to get an instance of AgentService."""
|
|
289
|
+
log.debug("[Dependencies] get_agent_service called")
|
|
290
|
+
return AgentService(agent_registry=registry)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
def get_task_service(
|
|
294
|
+
core_a2a_service: CoreA2AService = Depends(get_core_a2a_service),
|
|
295
|
+
publish_func: PublishFunc = Depends(get_publish_a2a_func),
|
|
296
|
+
namespace: str = Depends(get_namespace),
|
|
297
|
+
gateway_id: str = Depends(get_gateway_id),
|
|
298
|
+
sse_manager: SSEManager = Depends(get_sse_manager),
|
|
299
|
+
task_context_manager: TaskContextManager = Depends(
|
|
300
|
+
get_task_context_manager_from_component
|
|
301
|
+
),
|
|
302
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
303
|
+
) -> TaskService:
|
|
304
|
+
"""FastAPI dependency to get an instance of TaskService."""
|
|
305
|
+
log.debug("[Dependencies] get_task_service called")
|
|
306
|
+
app_name = component.get_config("name", "WebUIBackendApp")
|
|
307
|
+
return TaskService(
|
|
308
|
+
core_a2a_service=core_a2a_service,
|
|
309
|
+
publish_func=publish_func,
|
|
310
|
+
namespace=namespace,
|
|
311
|
+
gateway_id=gateway_id,
|
|
312
|
+
sse_manager=sse_manager,
|
|
313
|
+
task_context_map=task_context_manager._contexts,
|
|
314
|
+
task_context_lock=task_context_manager._lock,
|
|
315
|
+
app_name=app_name,
|
|
316
|
+
)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Here is the comprehensive developer guide for the `http_sse` directory.
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `http_sse` directory implements a complete HTTP/SSE (Server-Sent Events) gateway for the A2A (Agent-to-Agent) system. Its primary purpose is to serve a web-based user interface and act as a bridge between standard web protocols (HTTP, WebSockets/SSE) and the backend A2A messaging fabric.
|
|
5
|
+
|
|
6
|
+
The architecture is centered around the `WebUIBackendComponent`, a custom Solace AI Connector (SAC) component that hosts an embedded FastAPI web server. This component manages shared state and resources, such as the `SSEManager` for real-time updates, the `SessionManager` for user sessions, and the `AgentRegistry` for discovering available agents.
|
|
7
|
+
|
|
8
|
+
Subdirectories organize the functionality:
|
|
9
|
+
- `routers/` defines the REST API endpoints (e.g., `/tasks`, `/agents`).
|
|
10
|
+
- `services/` contains the business logic that the API endpoints call.
|
|
11
|
+
- `dependencies.py` uses FastAPI's dependency injection system to provide the routers and services with safe access to the shared resources managed by the main component.
|
|
12
|
+
- `components/` contains specialized SAC components, for example, to forward A2A messages for real-time visualization.
|
|
13
|
+
|
|
14
|
+
This design creates a clean separation of concerns, where the web layer (FastAPI) is decoupled from the core messaging and state management layer (SAC Component).
|
|
15
|
+
|
|
16
|
+
## Files and Subdirectories Overview
|
|
17
|
+
- **Direct files:**
|
|
18
|
+
- `__init__.py`: Standard Python package initializer.
|
|
19
|
+
- `app.py`: Defines the main SAC `WebUIBackendApp`, which specifies configuration and launches the component.
|
|
20
|
+
- `component.py`: The core SAC component that hosts the FastAPI server and manages all shared resources and A2A logic.
|
|
21
|
+
- `dependencies.py`: Provides FastAPI dependency injectors for accessing shared resources like services and managers.
|
|
22
|
+
- `main.py`: The main FastAPI application instance, including middleware, router mounting, and exception handling.
|
|
23
|
+
- `session_manager.py`: Manages web user sessions and maps them to unique A2A client and session IDs.
|
|
24
|
+
- `sse_manager.py`: Manages Server-Sent Event (SSE) connections for streaming real-time updates to clients.
|
|
25
|
+
- **Subdirectories:**
|
|
26
|
+
- `components/`: Contains specialized SAC components, such as for forwarding messages to the visualization system.
|
|
27
|
+
- `routers/`: Defines the FastAPI `APIRouter` modules for all REST API endpoints.
|
|
28
|
+
- `services/`: Encapsulates business logic for agents, tasks, and other domain-specific operations.
|
|
29
|
+
|
|
30
|
+
## Developer API Reference
|
|
31
|
+
|
|
32
|
+
### Direct Files
|
|
33
|
+
|
|
34
|
+
#### app.py
|
|
35
|
+
**Purpose:** This file defines the `WebUIBackendApp`, a custom SAC (Solace AI Connector) App class. It is responsible for defining the configuration schema for the entire HTTP/SSE gateway and programmatically creating the `WebUIBackendComponent`.
|
|
36
|
+
**Import:** `from gateway.http_sse.app import WebUIBackendApp`
|
|
37
|
+
|
|
38
|
+
**Classes/Functions/Constants:**
|
|
39
|
+
- **`WebUIBackendApp(BaseGatewayApp)`**: The main application class. It extends `BaseGatewayApp` and adds a list of WebUI-specific configuration parameters to the application schema.
|
|
40
|
+
- **`SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]]`**: A constant list defining the configuration parameters specific to the HTTP/SSE gateway, such as `session_secret_key`, `fastapi_host`, `fastapi_port`, and various frontend-related settings.
|
|
41
|
+
|
|
42
|
+
#### component.py
|
|
43
|
+
**Purpose:** This is the core component of the gateway. It hosts the FastAPI server, manages all shared state (like the SSE and Session managers), handles the lifecycle of the web server, and implements the logic for translating between external HTTP requests and internal A2A messages.
|
|
44
|
+
**Import:** `from gateway.http_sse.component import WebUIBackendComponent`
|
|
45
|
+
|
|
46
|
+
**Classes/Functions/Constants:**
|
|
47
|
+
- **`WebUIBackendComponent(BaseGatewayComponent)`**: The main component class. Developers will primarily interact with its instances via the dependency injection system.
|
|
48
|
+
- **Public Accessor Methods (for Dependencies):**
|
|
49
|
+
- `get_sse_manager() -> SSEManager`: Returns the shared `SSEManager` instance.
|
|
50
|
+
- `get_session_manager() -> SessionManager`: Returns the shared `SessionManager` instance.
|
|
51
|
+
- `get_agent_registry() -> AgentRegistry`: Returns the shared `AgentRegistry` instance.
|
|
52
|
+
- `get_core_a2a_service() -> CoreA2AService`: Returns the core service for creating A2A messages.
|
|
53
|
+
- `get_shared_artifact_service() -> Optional[BaseArtifactService]`: Returns the service for artifact storage.
|
|
54
|
+
- `get_namespace() -> str`: Returns the configured A2A namespace.
|
|
55
|
+
- `get_gateway_id() -> str`: Returns the unique ID of this gateway.
|
|
56
|
+
- **Core Logic Methods:**
|
|
57
|
+
- `publish_a2a(topic: str, payload: Dict, user_properties: Optional[Dict] = None)`: Publishes a message onto the A2A messaging fabric. This is the primary method for sending data to agents.
|
|
58
|
+
- **Gateway-Development-Kit (GDK) Hooks:** These methods implement the `BaseGatewayComponent` abstract interface.
|
|
59
|
+
- `_start_listener()`: Starts the FastAPI/Uvicorn server.
|
|
60
|
+
- `_stop_listener()`: Stops the FastAPI/Uvicorn server.
|
|
61
|
+
- `_translate_external_input(...)`: Translates an incoming HTTP request (e.g., form data with files) into a structured A2A message (`List[A2APart]`).
|
|
62
|
+
- `_send_update_to_external(...)`: Sends an intermediate status update from an agent back to the client via SSE.
|
|
63
|
+
-
|