solace-agent-mesh 1.7.1__py3-none-any.whl → 1.13.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.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- 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/artifacts/filesystem_artifact_service.py +164 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +752 -127
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +99 -7
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
- solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
- solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +66 -8
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +41 -1
- solace_agent_mesh/agent/adk/setup.py +220 -32
- solace_agent_mesh/agent/adk/stream_parser.py +229 -40
- solace_agent_mesh/agent/protocol/event_handlers.py +219 -33
- solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
- solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
- solace_agent_mesh/agent/proxies/base/component.py +188 -22
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
- solace_agent_mesh/agent/sac/app.py +37 -12
- solace_agent_mesh/agent/sac/component.py +322 -52
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +90 -0
- solace_agent_mesh/agent/tools/__init__.py +3 -0
- solace_agent_mesh/agent/tools/audio_tools.py +3 -3
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +698 -24
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +54 -2
- solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
- solace_agent_mesh/agent/tools/web_tools.py +125 -17
- solace_agent_mesh/agent/utils/artifact_helpers.py +243 -5
- solace_agent_mesh/agent/utils/context_helpers.py +17 -0
- solace_agent_mesh/assets/docs/404.html +6 -6
- solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.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/e04b235d.06d23db6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +75 -75
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
- solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +98 -112
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -28
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -29
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +67 -53
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -17
- 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 +38 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +87 -87
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
- 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 +50 -23
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +29 -24
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +21 -21
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
- 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 +96 -66
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +181 -181
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +75 -75
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +27 -27
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -38
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +135 -114
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +37 -37
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +112 -112
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +28 -28
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
- solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
- solace_agent_mesh/cli/commands/run_cmd.py +64 -49
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +15 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-tcIFZLis.js → authCallback-KnKMP_vb.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CINwxvwV.js → vendor-CGk8Suyh.js} +189 -94
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- 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/a2a/types.py +1 -1
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +124 -0
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/exceptions.py +24 -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/rag_dto.py +156 -0
- solace_agent_mesh/common/sac/sam_component_base.py +73 -1
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +2 -27
- solace_agent_mesh/common/utils/embeds/resolver.py +94 -25
- solace_agent_mesh/common/utils/embeds/types.py +1 -0
- solace_agent_mesh/common/utils/log_formatters.py +20 -0
- solace_agent_mesh/common/utils/mime_helpers.py +12 -5
- 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/config_portal/backend/common.py +12 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/service.py +3 -2
- solace_agent_mesh/gateway/adapter/base.py +28 -1
- solace_agent_mesh/gateway/adapter/types.py +9 -0
- solace_agent_mesh/gateway/base/app.py +10 -0
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +451 -10
- solace_agent_mesh/gateway/generic/component.py +274 -30
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +2 -43
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +2 -2
- 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.ini +0 -36
- solace_agent_mesh/gateway/http_sse/app.py +23 -6
- solace_agent_mesh/gateway/http_sse/component.py +158 -73
- solace_agent_mesh/gateway/http_sse/dependencies.py +50 -57
- solace_agent_mesh/gateway/http_sse/main.py +58 -482
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +3 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +5 -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 +1 -1
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +12 -107
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +113 -7
- solace_agent_mesh/gateway/http_sse/routers/auth.py +69 -132
- solace_agent_mesh/gateway/http_sse/routers/config.py +235 -10
- 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/session_requests.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +1 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +250 -24
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +14 -5
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +117 -4
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +509 -149
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
- 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 +1 -1
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/project_service.py +539 -12
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +198 -21
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/sse_manager.py +280 -169
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +29 -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 +154 -0
- solace_agent_mesh/services/platform/api/main.py +314 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +215 -0
- solace_agent_mesh/services/platform/component.py +777 -0
- solace_agent_mesh/shared/__init__.py +14 -0
- solace_agent_mesh/shared/api/__init__.py +42 -0
- solace_agent_mesh/shared/auth/__init__.py +26 -0
- solace_agent_mesh/shared/auth/dependencies.py +204 -0
- solace_agent_mesh/shared/auth/middleware.py +347 -0
- solace_agent_mesh/shared/database/__init__.py +20 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
- solace_agent_mesh/shared/exceptions/__init__.py +36 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +1 -1
- solace_agent_mesh/shared/utils/__init__.py +21 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
- solace_agent_mesh/templates/platform.yaml +49 -0
- solace_agent_mesh/templates/plugin_readme_template.md +3 -25
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/proxy_template.yaml +62 -0
- solace_agent_mesh/templates/webui.yaml +148 -6
- solace_agent_mesh/tools/web_search/__init__.py +18 -0
- solace_agent_mesh/tools/web_search/base.py +84 -0
- solace_agent_mesh/tools/web_search/google_search.py +247 -0
- solace_agent_mesh/tools/web_search/models.py +99 -0
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +29 -8
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/RECORD +334 -313
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
- solace_agent_mesh/agent/adk/models/models_llm.txt +0 -189
- solace_agent_mesh/agent/agent_llm.txt +0 -369
- solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
- solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +0 -190
- solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
- solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
- solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
- solace_agent_mesh/agent/testing/testing_llm.txt +0 -58
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.045d0fa1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +0 -1
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +0 -47
- solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1762283454666.json +0 -1
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
- solace_agent_mesh/client/webui/frontend/static/assets/client-CRYdKo2Q.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +0 -353
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
- solace_agent_mesh/common/common_llm.txt +0 -230
- solace_agent_mesh/common/common_llm_detail.txt +0 -2562
- solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
- solace_agent_mesh/common/sac/sac_llm.txt +0 -71
- solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
- solace_agent_mesh/common/services/providers/providers_llm.txt +0 -81
- solace_agent_mesh/common/services/services_llm.txt +0 -368
- solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
- solace_agent_mesh/common/utils/utils_llm.txt +0 -335
- solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
- solace_agent_mesh/gateway/base/base_llm.txt +0 -226
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -369
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +0 -92
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -221
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
- solace_agent_mesh/llm.txt +0 -228
- solace_agent_mesh/llm_detail.txt +0 -2835
- solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
- solace_agent_mesh/templates/logging_config_template.ini +0 -45
- solace_agent_mesh/templates/templates_llm.txt +0 -147
- /solace_agent_mesh/assets/docs/assets/js/{main.f213fe0c.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
# LLM Summary Detail File
|
|
2
|
-
|
|
3
|
-
This file is a concatenation of all individual *llm.txt files found in the 'base' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
-
|
|
5
|
-
================================================================================
|
|
6
|
-
|
|
7
|
-
## Section 1: solace_agent_mesh/gateway/base/base_llm.txt
|
|
8
|
-
|
|
9
|
-
**Source file:** `solace_agent_mesh/gateway/base/base_llm.txt`
|
|
10
|
-
|
|
11
|
-
# DEVELOPER GUIDE: base
|
|
12
|
-
|
|
13
|
-
## Quick Summary
|
|
14
|
-
The `base` directory provides foundational abstract classes for building Gateway implementations within the Solace AI Connector. It establishes a framework for handling common gateway tasks such as application configuration, Solace broker integration, A2A (Agent-to-Agent) message protocol handling, and managing the lifecycle of requests from external platforms. Developers should subclass `BaseGatewayApp` and `BaseGatewayComponent` to create new gateways.
|
|
15
|
-
|
|
16
|
-
## Files Overview
|
|
17
|
-
- `__init__.py` - Marks the directory as a Python package
|
|
18
|
-
- `app.py` - Contains the base application class that handles configuration, schema merging, and broker setup
|
|
19
|
-
- `component.py` - Contains the core logic class for processing A2A messages and integrating with external platforms
|
|
20
|
-
- `task_context.py` - Provides a thread-safe manager for mapping A2A task IDs to their original request context
|
|
21
|
-
|
|
22
|
-
## Developer API Reference
|
|
23
|
-
|
|
24
|
-
### __init__.py
|
|
25
|
-
**Purpose:** Initializes the `gateway.base` Python package
|
|
26
|
-
**Import:** `from solace_agent_mesh.gateway.base import ...`
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
### app.py
|
|
31
|
-
**Purpose:** Provides the base application class for gateway implementations with automated configuration schema merging, Solace broker setup, and component instantiation
|
|
32
|
-
**Import:** `from solace_agent_mesh.gateway.base.app import BaseGatewayApp, BaseGatewayComponent`
|
|
33
|
-
|
|
34
|
-
**Classes:**
|
|
35
|
-
- `BaseGatewayComponent(ComponentBase)` - Base marker class for gateway components
|
|
36
|
-
- `BaseGatewayApp(app_info: Dict[str, Any], **kwargs)` - Main application class to be subclassed for new gateways
|
|
37
|
-
- `_get_gateway_component_class(self) -> Type[BaseGatewayComponent]` - **[Abstract Method]** Must return the specific gateway component class
|
|
38
|
-
- `namespace: str` - Absolute topic prefix for A2A communication (e.g., 'myorg/dev')
|
|
39
|
-
- `gateway_id: str` - Unique ID for this gateway instance (auto-generated if not provided)
|
|
40
|
-
- `artifact_service_config: Dict` - Configuration for the shared ADK Artifact Service
|
|
41
|
-
- `enable_embed_resolution: bool` - Flag to enable/disable late-stage 'artifact_content' embed resolution
|
|
42
|
-
- `gateway_max_artifact_resolve_size_bytes: int` - Maximum size for resolving artifacts (default: 104857600)
|
|
43
|
-
- `gateway_recursive_embed_depth: int` - Maximum depth for recursive embed resolution (default: 12)
|
|
44
|
-
|
|
45
|
-
**Constants/Variables:**
|
|
46
|
-
- `BASE_GATEWAY_APP_SCHEMA: Dict[str, List[Dict[str, Any]]]` - Base configuration schema automatically merged with subclass parameters
|
|
47
|
-
- `SPECIFIC_APP_SCHEMA_PARAMS_ATTRIBUTE_NAME: str` - Class attribute name ("SPECIFIC_APP_SCHEMA_PARAMS") for subclass-specific config parameters
|
|
48
|
-
|
|
49
|
-
**Usage Examples:**
|
|
50
|
-
```python
|
|
51
|
-
from typing import Type, List, Dict, Any
|
|
52
|
-
from solace_agent_mesh.gateway.base.app import BaseGatewayApp
|
|
53
|
-
from .component import MyGatewayComponent
|
|
54
|
-
|
|
55
|
-
class MyGatewayApp(BaseGatewayApp):
|
|
56
|
-
"""Custom gateway application for My Platform."""
|
|
57
|
-
|
|
58
|
-
# Define additional configuration parameters
|
|
59
|
-
SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
|
|
60
|
-
{
|
|
61
|
-
"name": "my_platform_api_key",
|
|
62
|
-
"required": True,
|
|
63
|
-
"type": "string",
|
|
64
|
-
"description": "API key for connecting to My Platform."
|
|
65
|
-
}
|
|
66
|
-
]
|
|
67
|
-
|
|
68
|
-
def _get_gateway_component_class(self) -> Type[MyGatewayComponent]:
|
|
69
|
-
return MyGatewayComponent
|
|
70
|
-
|
|
71
|
-
# Usage in YAML config:
|
|
72
|
-
# app_config:
|
|
73
|
-
# namespace: "myorg/prod"
|
|
74
|
-
# gateway_id: "my-gateway-instance-01"
|
|
75
|
-
# artifact_service:
|
|
76
|
-
# type: "local_file"
|
|
77
|
-
# base_path: "/data/artifacts"
|
|
78
|
-
# my_platform_api_key: "secret-key-here"
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### component.py
|
|
84
|
-
**Purpose:** Provides the abstract base class for gateway components containing core A2A protocol logic, service management, and external platform integration interface
|
|
85
|
-
**Import:** `from solace_agent_mesh.gateway.base.component import BaseGatewayComponent`
|
|
86
|
-
|
|
87
|
-
**Classes:**
|
|
88
|
-
- `BaseGatewayComponent(**kwargs: Any)` - Abstract base class for gateway components
|
|
89
|
-
- **Public Methods:**
|
|
90
|
-
- `get_config(self, key: str, default: Any = None) -> Any` - Retrieves configuration from nested app_config or component_config
|
|
91
|
-
- `publish_a2a_message(self, topic: str, payload: Dict, user_properties: Optional[Dict] = None) -> None` - Publishes A2A messages to Solace broker
|
|
92
|
-
- `authenticate_and_enrich_user(self, external_event_data: Any) -> Optional[Dict[str, Any]]` - Orchestrates user authentication and identity enrichment
|
|
93
|
-
- `submit_a2a_task(self, target_agent_name: str, a2a_parts: List[ContentPart], external_request_context: Dict[str, Any], user_identity: Any, is_streaming: bool = True, api_version: str = "v2") -> str` - Submits task to target agent, returns task_id
|
|
94
|
-
- `run(self) -> None` - Starts component's async operations and external platform listener
|
|
95
|
-
- `cleanup(self) -> None` - Cleans up resources and stops background threads
|
|
96
|
-
- **Abstract Methods (Must be Implemented):**
|
|
97
|
-
- `_extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]` - Extract identity claims from platform event (must return dict with 'id' key)
|
|
98
|
-
- `_start_listener(self) -> None` - Start external platform listener (e.g., web server, WebSocket)
|
|
99
|
-
- `_stop_listener(self) -> None` - Stop external platform listener
|
|
100
|
-
- `_translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]` - Convert external event to A2A format: (target_agent_name, a2a_parts, context)
|
|
101
|
-
- `_send_update_to_external(self, external_request_context: Dict[str, Any], event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent], is_final_chunk_of_update: bool) -> None` - Send streaming update to external platform
|
|
102
|
-
- `_send_final_response_to_external(self, external_request_context: Dict[str, Any], task_data: Task) -> None` - Send final response to external platform
|
|
103
|
-
- `_send_error_to_external(self, external_request_context: Dict[str, Any], error_data: JSONRPCError) -> None` - Send error to external platform
|
|
104
|
-
- **Properties:**
|
|
105
|
-
- `namespace: str` - A2A communication namespace
|
|
106
|
-
- `gateway_id: str` - Unique gateway instance ID
|
|
107
|
-
- `agent_registry: AgentRegistry` - Registry for discovered agents
|
|
108
|
-
- `core_a2a_service: CoreA2AService` - Core A2A protocol service
|
|
109
|
-
- `shared_artifact_service: Optional[BaseArtifactService]` - Artifact service instance
|
|
110
|
-
- `task_context_manager: TaskContextManager` - Thread-safe task context storage
|
|
111
|
-
- `identity_service: Optional[BaseIdentityService]` - Identity enrichment service
|
|
112
|
-
|
|
113
|
-
**Usage Examples:**
|
|
114
|
-
```python
|
|
115
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
116
|
-
from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
|
|
117
|
-
from solace_agent_mesh.common.a2a.types import ContentPart
|
|
118
|
-
from a2a.types import TextPart, Task, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, JSONRPCError
|
|
119
|
-
|
|
120
|
-
class MyGatewayComponent(BaseGatewayComponent):
|
|
121
|
-
|
|
122
|
-
async def _extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]:
|
|
123
|
-
"""Extract user identity from platform-specific event."""
|
|
124
|
-
# Example for HTTP request
|
|
125
|
-
if hasattr(external_event_data, 'headers'):
|
|
126
|
-
user_id = external_event_data.headers.get('X-User-ID')
|
|
127
|
-
if user_id:
|
|
128
|
-
return {"id": user_id, "source": "http_header"}
|
|
129
|
-
return None
|
|
130
|
-
|
|
131
|
-
def _start_listener(self) -> None:
|
|
132
|
-
"""Start your platform listener (web server, etc.)."""
|
|
133
|
-
# Example: Start FastAPI server, WebSocket connection, etc.
|
|
134
|
-
pass
|
|
135
|
-
|
|
136
|
-
def _stop_listener(self) -> None:
|
|
137
|
-
"""Stop your platform listener."""
|
|
138
|
-
pass
|
|
139
|
-
|
|
140
|
-
async def _translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]:
|
|
141
|
-
"""Convert external event to A2A format."""
|
|
142
|
-
# Example translation
|
|
143
|
-
target_agent = "my-agent"
|
|
144
|
-
message_text = getattr(external_event, 'message', 'Hello')
|
|
145
|
-
a2a_parts = [TextPart(text=message_text)]
|
|
146
|
-
context = {
|
|
147
|
-
"platform": "my_platform",
|
|
148
|
-
"user_id_for_artifacts": "user123",
|
|
149
|
-
"a2a_session_id": "session456"
|
|
150
|
-
}
|
|
151
|
-
return target_agent, a2a_parts, context
|
|
152
|
-
|
|
153
|
-
async def _send_update_to_external(self, external_request_context: Dict[str, Any],
|
|
154
|
-
event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
|
|
155
|
-
is_final_chunk_of_update: bool) -> None:
|
|
156
|
-
"""Send streaming update back to external platform."""
|
|
157
|
-
# Extract text from event and send to your platform
|
|
158
|
-
pass
|
|
159
|
-
|
|
160
|
-
async def _send_final_response_to_external(self, external_request_context: Dict[str, Any],
|
|
161
|
-
task_data: Task) -> None:
|
|
162
|
-
"""Send final response back to external platform."""
|
|
163
|
-
# Extract final result and send to your platform
|
|
164
|
-
pass
|
|
165
|
-
|
|
166
|
-
async def _send_error_to_external(self, external_request_context: Dict[str, Any],
|
|
167
|
-
error_data: JSONRPCError) -> None:
|
|
168
|
-
"""Send error back to external platform."""
|
|
169
|
-
# Send error message to your platform
|
|
170
|
-
pass
|
|
171
|
-
|
|
172
|
-
# Usage in your handler:
|
|
173
|
-
async def handle_external_request(request):
|
|
174
|
-
# Authenticate user
|
|
175
|
-
user_identity = await component.authenticate_and_enrich_user(request)
|
|
176
|
-
if not user_identity:
|
|
177
|
-
return "Authentication failed"
|
|
178
|
-
|
|
179
|
-
# Translate request
|
|
180
|
-
target_agent, a2a_parts, context = await component._translate_external_input(request)
|
|
181
|
-
|
|
182
|
-
# Submit to A2A system
|
|
183
|
-
task_id = await component.submit_a2a_task(
|
|
184
|
-
target_agent_name=target_agent,
|
|
185
|
-
a2a_parts=a2a_parts,
|
|
186
|
-
external_request_context=context,
|
|
187
|
-
user_identity=user_identity,
|
|
188
|
-
is_streaming=True
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
return f"Task submitted: {task_id}"
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
### task_context.py
|
|
197
|
-
**Purpose:** Provides thread-safe storage for mapping A2A task IDs to their original external request context
|
|
198
|
-
**Import:** `from solace_agent_mesh.gateway.base.task_context import TaskContextManager`
|
|
199
|
-
|
|
200
|
-
**Classes:**
|
|
201
|
-
- `TaskContextManager()` - Thread-safe context storage manager
|
|
202
|
-
- `store_context(self, task_id: str, context_data: Dict[str, Any]) -> None` - Store context for a task ID
|
|
203
|
-
- `get_context(self, task_id: str) -> Optional[Dict[str, Any]]` - Retrieve context for a task ID
|
|
204
|
-
- `remove_context(self, task_id: str) -> Optional[Dict[str, Any]]` - Remove and return context for a task ID
|
|
205
|
-
- `clear_all_contexts_for_testing(self) -> None` - Clear all contexts (testing only)
|
|
206
|
-
|
|
207
|
-
**Usage Examples:**
|
|
208
|
-
```python
|
|
209
|
-
from solace_agent_mesh.gateway.base.task_context import TaskContextManager
|
|
210
|
-
|
|
211
|
-
# Initialize manager
|
|
212
|
-
context_manager = TaskContextManager()
|
|
213
|
-
|
|
214
|
-
# Store context when submitting task
|
|
215
|
-
task_id = "gdk-task-abc123"
|
|
216
|
-
context = {
|
|
217
|
-
"platform": "slack",
|
|
218
|
-
"channel_id": "C1234567890",
|
|
219
|
-
"thread_ts": "1234567890.123456",
|
|
220
|
-
"user_identity": {"id": "user123", "name": "John Doe"}
|
|
221
|
-
}
|
|
222
|
-
context_manager.store_context(task_id, context)
|
|
223
|
-
|
|
224
|
-
# Retrieve context when processing response
|
|
225
|
-
retrieved_context = context_manager.get_context(task_id)
|
|
226
|
-
if retrieved_context:
|
|
227
|
-
channel_id = retrieved_context["channel_id"]
|
|
228
|
-
# Send response back to Slack channel
|
|
229
|
-
|
|
230
|
-
# Clean up when task is complete
|
|
231
|
-
context_manager.remove_context(task_id)
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
================================================================================
|
|
235
|
-
|
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: gateway
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `gateway` directory provides a comprehensive framework for building gateways that connect external platforms (Slack, HTTP/SSE web interfaces) to the Solace AI Connector's A2A (Agent-to-Agent) messaging system. The architecture consists of a foundational `base` module that defines abstract classes for gateway implementations, and specific gateway implementations like `slack` for Slack integration and `http_sse` for web-based interfaces. The framework handles authentication, message translation between external formats and A2A protocol, real-time streaming updates, and manages the complete lifecycle of requests from external platforms to AI agents.
|
|
5
|
-
|
|
6
|
-
## Files and Subdirectories Overview
|
|
7
|
-
- **Direct files:**
|
|
8
|
-
- `__init__.py`: Standard Python package initializer
|
|
9
|
-
- `gateway_llm.txt`: Documentation or configuration file for LLM-related gateway functionality
|
|
10
|
-
- `gateway_llm_detail.txt`: Comprehensive documentation combining all gateway module summaries
|
|
11
|
-
|
|
12
|
-
- **Subdirectories:**
|
|
13
|
-
- `base/`: Foundational abstract classes and utilities for building gateway implementations
|
|
14
|
-
- `http_sse/`: HTTP/Server-Sent Events gateway for web-based user interfaces
|
|
15
|
-
|
|
16
|
-
## Developer API Reference
|
|
17
|
-
|
|
18
|
-
### Direct Files
|
|
19
|
-
|
|
20
|
-
#### __init__.py
|
|
21
|
-
**Purpose:** Initializes the `gateway` Python package
|
|
22
|
-
**Import:** `from solace_agent_mesh.gateway import ...`
|
|
23
|
-
|
|
24
|
-
**Classes/Functions/Constants:**
|
|
25
|
-
This file is empty and contains no direct exports.
|
|
26
|
-
|
|
27
|
-
#### gateway_llm.txt
|
|
28
|
-
**Purpose:** Documentation or configuration file for LLM-related gateway functionality
|
|
29
|
-
**Import:** Not applicable (text/documentation file)
|
|
30
|
-
|
|
31
|
-
**Content:** This appears to be a documentation or configuration file rather than executable code.
|
|
32
|
-
|
|
33
|
-
#### gateway_llm_detail.txt
|
|
34
|
-
**Purpose:** Comprehensive documentation combining all individual LLM summary files from the gateway directory tree
|
|
35
|
-
**Import:** Not applicable (text/documentation file)
|
|
36
|
-
|
|
37
|
-
**Content:** Contains concatenated developer guides for all gateway subdirectories and components.
|
|
38
|
-
|
|
39
|
-
### Subdirectory APIs
|
|
40
|
-
|
|
41
|
-
#### base/
|
|
42
|
-
**Purpose:** Provides foundational abstract classes for building Gateway implementations
|
|
43
|
-
**Key Exports:** `BaseGatewayApp`, `BaseGatewayComponent`, `TaskContextManager`
|
|
44
|
-
**Import Examples:**
|
|
45
|
-
```python
|
|
46
|
-
from solace_agent_mesh.gateway.base.app import BaseGatewayApp
|
|
47
|
-
from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
|
|
48
|
-
from solace_agent_mesh.gateway.base.task_context import TaskContextManager
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
#### http_sse/
|
|
52
|
-
**Purpose:** HTTP/Server-Sent Events gateway for web-based user interfaces with real-time streaming
|
|
53
|
-
**Key Exports:** `WebUIBackendApp`, `WebUIBackendComponent`, `SSEManager`, `SessionManager`, routers, services
|
|
54
|
-
**Import Examples:**
|
|
55
|
-
```python
|
|
56
|
-
from solace_agent_mesh.gateway.http_sse.app import WebUIBackendApp
|
|
57
|
-
from solace_agent_mesh.gateway.http_sse.component import WebUIBackendComponent
|
|
58
|
-
from solace_agent_mesh.gateway.http_sse.sse_manager import SSEManager
|
|
59
|
-
from solace_agent_mesh.gateway.http_sse.dependencies import get_sse_manager, get_session_manager
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Complete Usage Guide
|
|
63
|
-
|
|
64
|
-
### 1. Creating a Custom Gateway Implementation
|
|
65
|
-
|
|
66
|
-
```python
|
|
67
|
-
from typing import Type, List, Dict, Any, Optional, Tuple, Union
|
|
68
|
-
from solace_agent_mesh.gateway.base.app import BaseGatewayApp
|
|
69
|
-
from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
|
|
70
|
-
from solace_agent_mesh.common.a2a.types import ContentPart, TextPart
|
|
71
|
-
from a2a.types import Task, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, JSONRPCError
|
|
72
|
-
|
|
73
|
-
# Step 1: Define your gateway app class
|
|
74
|
-
class MyCustomGatewayApp(BaseGatewayApp):
|
|
75
|
-
"""Custom gateway for My Platform integration."""
|
|
76
|
-
|
|
77
|
-
# Define platform-specific configuration parameters
|
|
78
|
-
SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
|
|
79
|
-
{
|
|
80
|
-
"name": "my_platform_api_key",
|
|
81
|
-
"required": True,
|
|
82
|
-
"type": "string",
|
|
83
|
-
"description": "API key for My Platform"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"name": "my_platform_webhook_url",
|
|
87
|
-
"required": False,
|
|
88
|
-
"type": "string",
|
|
89
|
-
"description": "Webhook URL for receiving events"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"name": "default_agent_name",
|
|
93
|
-
"required": False,
|
|
94
|
-
"type": "string",
|
|
95
|
-
"default": "assistant",
|
|
96
|
-
"description": "Default agent to route messages to"
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
|
|
100
|
-
def _get_gateway_component_class(self) -> Type[BaseGatewayComponent]:
|
|
101
|
-
return MyCustomGatewayComponent
|
|
102
|
-
|
|
103
|
-
# Step 2: Implement your gateway component
|
|
104
|
-
class MyCustomGatewayComponent(BaseGatewayComponent):
|
|
105
|
-
"""Component implementing My Platform integration logic."""
|
|
106
|
-
|
|
107
|
-
def __init__(self, **kwargs):
|
|
108
|
-
super().__init__(**kwargs)
|
|
109
|
-
self.api_key = self.get_config("my_platform_api_key")
|
|
110
|
-
self.webhook_url = self.get_config("my_platform_webhook_url")
|
|
111
|
-
self.default_agent = self.get_config("default_agent_name", "assistant")
|
|
112
|
-
self.platform_client = None # Initialize your platform client
|
|
113
|
-
|
|
114
|
-
async def _extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]:
|
|
115
|
-
"""Extract user identity from platform event."""
|
|
116
|
-
# Example: Extract user ID from your platform's event structure
|
|
117
|
-
if hasattr(external_event_data, 'user_id'):
|
|
118
|
-
return {
|
|
119
|
-
"id": external_event_data.user_id,
|
|
120
|
-
"platform": "my_platform",
|
|
121
|
-
"username": getattr(external_event_data, 'username', None)
|
|
122
|
-
}
|
|
123
|
-
return None
|
|
124
|
-
|
|
125
|
-
def _start_listener(self) -> None:
|
|
126
|
-
"""Start your platform's event listener."""
|
|
127
|
-
# Example: Start webhook server, WebSocket connection, etc.
|
|
128
|
-
print(f"Starting My Platform listener on {self.webhook_url}")
|
|
129
|
-
# Initialize your platform client/listener here
|
|
130
|
-
|
|
131
|
-
def _stop_listener(self) -> None:
|
|
132
|
-
"""Stop your platform's event listener."""
|
|
133
|
-
print("Stopping My Platform listener")
|
|
134
|
-
# Clean up platform client/listener here
|
|
135
|
-
|
|
136
|
-
async def _translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]:
|
|
137
|
-
"""Convert platform event to A2A format."""
|
|
138
|
-
# Extract message content
|
|
139
|
-
message_text = getattr(external_event, 'message', '')
|
|
140
|
-
|
|
141
|
-
# Determine target agent (could be extracted from message or use default)
|
|
142
|
-
target_agent = getattr(external_event, 'target_agent', self.default_agent)
|
|
143
|
-
|
|
144
|
-
# Create A2A content parts
|
|
145
|
-
a2a_parts = [TextPart(text=message_text)]
|
|
146
|
-
|
|
147
|
-
# Create context for tracking this request
|
|
148
|
-
context = {
|
|
149
|
-
"platform": "my_platform",
|
|
150
|
-
"event_id": getattr(external_event, 'id', ''),
|
|
151
|
-
"channel_id": getattr(external_event, 'channel_id', ''),
|
|
152
|
-
"user_id_for_artifacts": getattr(external_event, 'user_id', ''),
|
|
153
|
-
"a2a_session_id": f"my_platform_{getattr(external_event, 'session_id', '')}"
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return target_agent, a2a_parts, context
|
|
157
|
-
|
|
158
|
-
async def _send_update_to_external(self,
|
|
159
|
-
external_request_context: Dict[str, Any],
|
|
160
|
-
event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
|
|
161
|
-
is_final_chunk_of_update: bool) -> None:
|
|
162
|
-
"""Send streaming update to your platform."""
|
|
163
|
-
channel_id = external_request_context.get("channel_id")
|
|
164
|
-
|
|
165
|
-
# Extract text content from the event
|
|
166
|
-
if hasattr(event_data, 'text_delta'):
|
|
167
|
-
text_content = event_data.text_delta
|
|
168
|
-
elif hasattr(event_data, 'content'):
|
|
169
|
-
text_content = str(event_data.content)
|
|
170
|
-
else:
|
|
171
|
-
text_content = "Update received"
|
|
172
|
-
|
|
173
|
-
# Send to your platform (example)
|
|
174
|
-
await self._send_to_platform(channel_id, text_content, is_partial=not is_final_chunk_of_update)
|
|
175
|
-
|
|
176
|
-
async def _send_final_response_to_external(self,
|
|
177
|
-
external_request_context: Dict[str, Any],
|
|
178
|
-
task_data: Task) -> None:
|
|
179
|
-
"""Send final response to your platform."""
|
|
180
|
-
channel_id = external_request_context.get("channel_id")
|
|
181
|
-
|
|
182
|
-
# Extract final response from task data
|
|
183
|
-
final_response = "Task completed"
|
|
184
|
-
if task_data.result and hasattr(task_data.result, 'content'):
|
|
185
|
-
final_response = str(task_data.result.content)
|
|
186
|
-
|
|
187
|
-
await self._send_to_platform(channel_id, final_response, is_final=True)
|
|
188
|
-
|
|
189
|
-
async def _send_error_to_external(self,
|
|
190
|
-
external_request_context: Dict[str, Any],
|
|
191
|
-
error_data: JSONRPCError) -> None:
|
|
192
|
-
"""Send error to your platform."""
|
|
193
|
-
channel_id = external_request_context.get("channel_id")
|
|
194
|
-
error_message = f"Error: {error_data.message}"
|
|
195
|
-
await self._send_to_platform(channel_id, error_message, is_error=True)
|
|
196
|
-
|
|
197
|
-
async def _send_to_platform(self, channel_id: str, message: str, **kwargs):
|
|
198
|
-
"""Helper method to send messages to your platform."""
|
|
199
|
-
# Implement your platform's message sending logic here
|
|
200
|
-
print(f"Sending to {channel_id}: {message}")
|
|
201
|
-
|
|
202
|
-
# Step 3: Usage
|
|
203
|
-
if __name__ == "__main__":
|
|
204
|
-
config = {
|
|
205
|
-
"name": "my-custom-gateway",
|
|
206
|
-
"namespace": "/myorg/prod",
|
|
207
|
-
"gateway_id": "my-gateway-01",
|
|
208
|
-
"my_platform_api_key": "your-api-key",
|
|
209
|
-
"my_platform_webhook_url": "https://my-webhook.example.com",
|
|
210
|
-
"default_agent_name": "my-assistant",
|
|
211
|
-
"solace_config": {
|
|
212
|
-
"broker_url": "tcp://localhost:55555",
|
|
213
|
-
"vpn_name": "default",
|
|
214
|
-
"username": "default",
|
|
215
|
-
"password": "default"
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
app = MyCustomGatewayApp(app_info=config)
|
|
220
|
-
app.run()
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### 2. Using the HTTP/SSE Gateway for Web Interfaces
|
|
224
|
-
|
|
225
|
-
```python
|
|
226
|
-
from solace_agent_mesh.gateway.http_sse.app import WebUIBackendApp
|
|
227
|
-
from fastapi import APIRouter, Depends, Request
|
|
228
|
-
from solace_agent_mesh.gateway.http_sse.dependencies import (
|
|
229
|
-
get_sse_manager, get_session_manager, get_core_a2a_service
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
# Configure web UI gateway
|
|
233
|
-
webui_config = {
|
|
234
|
-
"name": "my-webui",
|
|
235
|
-
"session_secret_key": "your-secret-key",
|
|
236
|
-
"fastapi_host": "0.0.0.0",
|
|
237
|
-
"fastapi_port": 8000,
|
|
238
|
-
"namespace": "/myorg/prod",
|
|
239
|
-
"gateway_id": "webui-01",
|
|
240
|
-
"cors_allowed_origins": ["http://localhost:3000"],
|
|
241
|
-
"frontend_welcome_message": "Welcome to AI Assistant!",
|
|
242
|
-
"frontend_bot_name": "Assistant",
|
|
243
|
-
"frontend_enable_file_upload": True,
|
|
244
|
-
"frontend_enable_agent_selection": True,
|
|
245
|
-
|
|
246
|
-
# Database for session persistence
|
|
247
|
-
"session_service": {
|
|
248
|
-
"type": "sql",
|
|
249
|
-
"database_url": "sqlite:///./sessions.db"
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
# A2A system configuration
|
|
253
|
-
"solace_config": {
|
|
254
|
-
"broker_url": "tcp://localhost:55555",
|
|
255
|
-
"vpn_name": "default",
|
|
256
|
-
"username": "default",
|
|
257
|
-
"password": "default"
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
# Create custom router for additional endpoints
|
|
262
|
-
custom_router = APIRouter(prefix="/api/custom")
|
|
263
|
-
|
|
264
|
-
@custom_router.get("/my-endpoint")
|
|
265
|
-
async def my_custom_endpoint(
|
|
266
|
-
request: Request,
|
|
267
|
-
sse_manager = Depends(get_sse_manager),
|
|
268
|
-
session_manager = Depends(get_session_manager)
|
|
269
|
-
):
|
|
270
|
-
"""Custom endpoint with access to gateway services."""
|
|
271
|
-
user_id = session_manager.get_a2a_client_id(request)
|
|
272
|
-
return {"user_id": user_id, "message": "Custom endpoint response"}
|
|
273
|
-
|
|
274
|
-
# Create and run the web UI gateway
|
|
275
|
-
webui_app = WebUIBackendApp(app_info=webui_config)
|
|
276
|
-
webui_app.run()
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### 3. Working with Task Context and Session Management
|
|
280
|
-
|
|
281
|
-
```python
|
|
282
|
-
from solace_agent_mesh.gateway.base.task_context import TaskContextManager
|
|
283
|
-
from solace_agent_mesh.gateway.http_sse.session_manager import SessionManager
|
|
284
|
-
|
|
285
|
-
# Task context management (used internally by gateways)
|
|
286
|
-
context_manager = TaskContextManager()
|
|
287
|
-
|
|
288
|
-
# Store context when submitting a task
|
|
289
|
-
task_id = "task-123"
|
|
290
|
-
context = {
|
|
291
|
-
"platform": "http_sse",
|
|
292
|
-
"session_id": "session-456",
|
|
293
|
-
"user_id": "user-789",
|
|
294
|
-
"client_id": "client-abc"
|
|
295
|
-
}
|
|
296
|
-
context_manager.store_context(task_id, context)
|
|
297
|
-
|
|
298
|
-
# Retrieve context when processing response
|
|
299
|
-
retrieved_context = context_manager.get_context(task_id)
|
|
300
|
-
if retrieved_context:
|
|
301
|
-
# Send response back to original platform
|
|
302
|
-
session_id = retrieved_context["session_id"]
|
|
303
|
-
|
|
304
|
-
# Session management for web interfaces
|
|
305
|
-
session_manager = SessionManager(
|
|
306
|
-
secret_key="your-secret-key",
|
|
307
|
-
app_config={"session_timeout": 3600}
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
# In a FastAPI endpoint
|
|
311
|
-
@app.get("/api/session-info")
|
|
312
|
-
async def get_session_info(request: Request):
|
|
313
|
-
# Get A2A client ID for this web session
|
|
314
|
-
client_id = session_manager.get_a2a_client_id(request)
|
|
315
|
-
|
|
316
|
-
# Ensure we have an A2A session
|
|
317
|
-
session_id = session_manager.ensure_a2a_session(request)
|
|
318
|
-
|
|
319
|
-
return {
|
|
320
|
-
"client_id": client_id,
|
|
321
|
-
"session_id": session_id
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### 4. Real-time Streaming with Server-Sent Events
|
|
326
|
-
|
|
327
|
-
```python
|
|
328
|
-
import asyncio
|
|
329
|
-
import httpx
|
|
330
|
-
import json
|
|
331
|
-
from solace_agent_mesh.gateway.http_sse.sse_manager import SSEManager
|
|
332
|
-
from solace_agent_mesh.gateway.http_sse.sse_event_buffer import SSEEventBuffer
|
|
333
|
-
|
|
334
|
-
# Server-side SSE management
|
|
335
|
-
sse_buffer = SSEEventBuffer(max_queue_size=100, max_age_seconds=300)
|
|
336
|
-
sse_manager = SSEManager(max_queue_size=100, event_buffer=sse_buffer)
|
|
337
|
-
|
|
338
|
-
# Create SSE connection for a task
|
|
339
|
-
task_id = "task-123"
|
|
340
|
-
sse_queue = sse_manager.create_sse_connection(task_id)
|
|
341
|
-
|
|
342
|
-
# Send events to connected clients
|
|
343
|
-
sse_manager.send_event(
|
|
344
|
-
task_id=task_id,
|
|
345
|
-
event_data={"message": "Task started", "progress": 0},
|
|
346
|
-
event_type="task_update"
|
|
347
|
-
)
|
|
348
|
-
|
|
349
|
-
# Client-side SSE consumption
|
|
350
|
-
async def listen_to_task_events(task_id: str):
|
|
351
|
-
async with httpx.AsyncClient() as client:
|
|
352
|
-
async with client.stream(
|
|
353
|
-
"GET",
|
|
354
|
-
f"http://localhost:8000/api/v1/sse/subscribe/{task_id}",
|
|
355
|
-
headers={"Accept": "text/event-stream"}
|
|
356
|
-
) as response:
|
|
357
|
-
async for line in response.aiter_lines():
|
|
358
|
-
if line.startswith("data: "):
|
|
359
|
-
event_data = line[6:] # Remove "data: " prefix
|
|
360
|
-
try:
|
|
361
|
-
parsed_data = json.loads(event_data)
|
|
362
|
-
print(f"Received event: {parsed_data}")
|
|
363
|
-
except json.JSONDecodeError:
|
|
364
|
-
print(f"Received raw data: {event_data}")
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
### 5. Database
|
|
368
|
-
|
|
369
|
-
# content_hash: 0b7ed0154e912abecea7634ace04f072596af9b37780b6093ab5585b700d3d39
|