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,283 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: proxies
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `proxies` directory provides a framework for creating proxy applications that enable the Solace Agent Mesh to communicate with downstream agents using various protocols. It consists of protocol-agnostic base classes in the `base/` subdirectory that handle common functionality like message routing, agent discovery, and task management, plus concrete implementations like `a2a/` for A2A-over-HTTPS protocol support.
|
|
5
|
-
|
|
6
|
-
## Files and Subdirectories Overview
|
|
7
|
-
- **Direct files:**
|
|
8
|
-
- `__init__.py` - Empty package initialization file
|
|
9
|
-
- **Subdirectories:**
|
|
10
|
-
- `base/` - Abstract base classes for proxy applications and components with common functionality
|
|
11
|
-
- `a2a/` - Concrete implementation for proxying A2A-over-HTTPS agents with authentication support
|
|
12
|
-
|
|
13
|
-
## Developer API Reference
|
|
14
|
-
|
|
15
|
-
### Direct Files
|
|
16
|
-
|
|
17
|
-
#### __init__.py
|
|
18
|
-
**Purpose:** Package initialization (empty file)
|
|
19
|
-
**Import:** `from solace_agent_mesh.agent.proxies import *`
|
|
20
|
-
|
|
21
|
-
No public API - this is an empty initialization file.
|
|
22
|
-
|
|
23
|
-
### Subdirectory APIs
|
|
24
|
-
|
|
25
|
-
#### base/
|
|
26
|
-
**Purpose:** Provides abstract base classes and configuration models for building proxy applications
|
|
27
|
-
**Key Exports:** BaseProxyApp, BaseProxyComponent, BaseProxyAppConfig, ProxyTaskContext
|
|
28
|
-
**Import Examples:**
|
|
29
|
-
```python
|
|
30
|
-
from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp
|
|
31
|
-
from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
|
|
32
|
-
from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig, ProxiedAgentConfig
|
|
33
|
-
from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
#### a2a/
|
|
37
|
-
**Purpose:** Concrete implementation for proxying A2A-over-HTTPS agents with OAuth 2.0 and static authentication
|
|
38
|
-
**Key Exports:** A2AProxyApp, A2AProxyComponent, A2AProxyAppConfig, OAuth2TokenCache
|
|
39
|
-
**Import Examples:**
|
|
40
|
-
```python
|
|
41
|
-
from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
|
|
42
|
-
from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
|
|
43
|
-
from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig, AuthenticationConfig
|
|
44
|
-
from solace_agent_mesh.agent.proxies.a2a.oauth_token_cache import OAuth2TokenCache
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Complete Usage Guide
|
|
48
|
-
|
|
49
|
-
### 1. Creating a Custom Proxy Implementation
|
|
50
|
-
|
|
51
|
-
To create a new proxy for a different protocol, extend the base classes:
|
|
52
|
-
|
|
53
|
-
```python
|
|
54
|
-
from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp
|
|
55
|
-
from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
|
|
56
|
-
from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig
|
|
57
|
-
from a2a.types import AgentCard, A2ARequest
|
|
58
|
-
from typing import Optional
|
|
59
|
-
|
|
60
|
-
# Custom configuration (extend BaseProxyAppConfig)
|
|
61
|
-
class MyProxyAppConfig(BaseProxyAppConfig):
|
|
62
|
-
custom_setting: str = "default_value"
|
|
63
|
-
|
|
64
|
-
# Custom component implementation
|
|
65
|
-
class MyProxyComponent(BaseProxyComponent):
|
|
66
|
-
async def _fetch_agent_card(self, agent_config: dict) -> Optional[AgentCard]:
|
|
67
|
-
# Implement protocol-specific agent discovery
|
|
68
|
-
url = agent_config.get("url")
|
|
69
|
-
# Make HTTP request to get agent capabilities
|
|
70
|
-
# Return AgentCard with agent information
|
|
71
|
-
pass
|
|
72
|
-
|
|
73
|
-
async def _forward_request(self, task_context, request: A2ARequest, agent_name: str):
|
|
74
|
-
# Implement protocol-specific request forwarding
|
|
75
|
-
# Forward request to downstream agent
|
|
76
|
-
# Handle response and publish back to Solace
|
|
77
|
-
pass
|
|
78
|
-
|
|
79
|
-
# Custom app class
|
|
80
|
-
class MyProxyApp(BaseProxyApp):
|
|
81
|
-
def _get_component_class(self):
|
|
82
|
-
return MyProxyComponent
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 2. Using the A2A Proxy Implementation
|
|
86
|
-
|
|
87
|
-
The most common use case is using the built-in A2A proxy:
|
|
88
|
-
|
|
89
|
-
```python
|
|
90
|
-
from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
|
|
91
|
-
from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig, AuthenticationConfig
|
|
92
|
-
|
|
93
|
-
# Configuration with OAuth 2.0 authentication
|
|
94
|
-
app_info = {
|
|
95
|
-
"app_config": {
|
|
96
|
-
"namespace": "myorg/production",
|
|
97
|
-
"proxied_agents": [
|
|
98
|
-
{
|
|
99
|
-
"name": "external-agent",
|
|
100
|
-
"url": "https://external-agent.example.com",
|
|
101
|
-
"request_timeout_seconds": 120,
|
|
102
|
-
"authentication": {
|
|
103
|
-
"type": "oauth2_client_credentials",
|
|
104
|
-
"token_url": "https://auth.example.com/oauth/token",
|
|
105
|
-
"client_id": "my-client-id",
|
|
106
|
-
"client_secret": "my-client-secret",
|
|
107
|
-
"scope": "agent:read agent:write",
|
|
108
|
-
"token_cache_duration_seconds": 3300
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"name": "api-key-agent",
|
|
113
|
-
"url": "https://api-agent.example.com",
|
|
114
|
-
"authentication": {
|
|
115
|
-
"type": "static_bearer",
|
|
116
|
-
"token": "my-api-key"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
],
|
|
120
|
-
"artifact_service": {
|
|
121
|
-
"type": "gcs",
|
|
122
|
-
"bucket_name": "my-artifacts-bucket",
|
|
123
|
-
"artifact_scope": "namespace"
|
|
124
|
-
},
|
|
125
|
-
"discovery_interval_seconds": 30,
|
|
126
|
-
"default_request_timeout_seconds": 300
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
# Create and run the proxy app
|
|
131
|
-
app = A2AProxyApp(app_info)
|
|
132
|
-
# App automatically handles Solace subscriptions and agent discovery
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### 3. Working with Authentication
|
|
136
|
-
|
|
137
|
-
The A2A proxy supports multiple authentication methods:
|
|
138
|
-
|
|
139
|
-
```python
|
|
140
|
-
from solace_agent_mesh.agent.proxies.a2a.config import AuthenticationConfig
|
|
141
|
-
|
|
142
|
-
# OAuth 2.0 Client Credentials
|
|
143
|
-
oauth_auth = AuthenticationConfig(
|
|
144
|
-
type="oauth2_client_credentials",
|
|
145
|
-
token_url="https://auth.provider.com/token",
|
|
146
|
-
client_id="client123",
|
|
147
|
-
client_secret="secret456",
|
|
148
|
-
scope="read write",
|
|
149
|
-
token_cache_duration_seconds=3300 # Cache for 55 minutes
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
# Static Bearer Token
|
|
153
|
-
bearer_auth = AuthenticationConfig(
|
|
154
|
-
type="static_bearer",
|
|
155
|
-
token="Bearer abc123xyz"
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
# Static API Key
|
|
159
|
-
apikey_auth = AuthenticationConfig(
|
|
160
|
-
type="static_apikey",
|
|
161
|
-
token="api-key-value"
|
|
162
|
-
)
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### 4. Managing OAuth Token Cache
|
|
166
|
-
|
|
167
|
-
For OAuth 2.0 authentication, tokens are automatically cached:
|
|
168
|
-
|
|
169
|
-
```python
|
|
170
|
-
from solace_agent_mesh.agent.proxies.a2a.oauth_token_cache import OAuth2TokenCache
|
|
171
|
-
from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
|
|
172
|
-
|
|
173
|
-
# Access the component to manage cache
|
|
174
|
-
component = A2AProxyComponent(proxied_agents_config=config)
|
|
175
|
-
|
|
176
|
-
# Clear all cached tokens (useful for testing or credential rotation)
|
|
177
|
-
component.clear_client_cache()
|
|
178
|
-
|
|
179
|
-
# Direct cache usage (advanced)
|
|
180
|
-
cache = OAuth2TokenCache()
|
|
181
|
-
await cache.set("agent-name", "access_token", 3600)
|
|
182
|
-
token = await cache.get("agent-name")
|
|
183
|
-
await cache.invalidate("agent-name")
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### 5. Task Context and Lifecycle Management
|
|
187
|
-
|
|
188
|
-
The proxy framework automatically manages task contexts:
|
|
189
|
-
|
|
190
|
-
```python
|
|
191
|
-
from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext
|
|
192
|
-
|
|
193
|
-
# Task contexts are created automatically when requests arrive
|
|
194
|
-
# They contain A2A protocol information and task state
|
|
195
|
-
task_context = ProxyTaskContext(
|
|
196
|
-
task_id="unique-task-id",
|
|
197
|
-
a2a_context={
|
|
198
|
-
"jsonrpc_request_id": "req-123",
|
|
199
|
-
"logical_task_id": "task-456",
|
|
200
|
-
"session_id": "session-789",
|
|
201
|
-
"user_id": "user123",
|
|
202
|
-
"status_topic": "status/myorg/production/external-agent",
|
|
203
|
-
"reply_to_topic": "reply/myorg/production/external-agent",
|
|
204
|
-
"is_streaming": False
|
|
205
|
-
}
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
# Access task information in custom components
|
|
209
|
-
print(f"Handling task: {task_context.task_id}")
|
|
210
|
-
print(f"User: {task_context.a2a_context['user_id']}")
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### 6. Configuration Validation
|
|
214
|
-
|
|
215
|
-
All proxy configurations use Pydantic for validation:
|
|
216
|
-
|
|
217
|
-
```python
|
|
218
|
-
from solace_agent_mesh.agent.proxies.a2a.config import A2AProxyAppConfig
|
|
219
|
-
from pydantic import ValidationError
|
|
220
|
-
|
|
221
|
-
try:
|
|
222
|
-
config = A2AProxyAppConfig.model_validate({
|
|
223
|
-
"namespace": "myorg/dev",
|
|
224
|
-
"proxied_agents": [
|
|
225
|
-
{
|
|
226
|
-
"name": "test-agent",
|
|
227
|
-
"url": "https://agent.example.com",
|
|
228
|
-
"authentication": {
|
|
229
|
-
"type": "oauth2_client_credentials",
|
|
230
|
-
"token_url": "https://auth.example.com/token",
|
|
231
|
-
"client_id": "client123"
|
|
232
|
-
# Missing client_secret - will cause validation error
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
]
|
|
236
|
-
})
|
|
237
|
-
except ValidationError as e:
|
|
238
|
-
print(f"Configuration error: {e}")
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### 7. Integration Patterns
|
|
242
|
-
|
|
243
|
-
Common patterns for integrating proxies into larger applications:
|
|
244
|
-
|
|
245
|
-
```python
|
|
246
|
-
# Pattern 1: Direct instantiation
|
|
247
|
-
from solace_agent_mesh.agent.proxies.a2a.app import A2AProxyApp
|
|
248
|
-
|
|
249
|
-
app = A2AProxyApp(app_info)
|
|
250
|
-
# App handles its own lifecycle
|
|
251
|
-
|
|
252
|
-
# Pattern 2: Component access for advanced control
|
|
253
|
-
from solace_agent_mesh.agent.proxies.a2a.component import A2AProxyComponent
|
|
254
|
-
|
|
255
|
-
component = A2AProxyComponent(
|
|
256
|
-
proxied_agents_config=config["proxied_agents"],
|
|
257
|
-
namespace=config["namespace"],
|
|
258
|
-
# ... other broker settings
|
|
259
|
-
)
|
|
260
|
-
|
|
261
|
-
# Manual lifecycle management
|
|
262
|
-
await component.run()
|
|
263
|
-
# ... application logic
|
|
264
|
-
await component.cleanup()
|
|
265
|
-
|
|
266
|
-
# Pattern 3: Custom proxy with base classes
|
|
267
|
-
class CustomProtocolProxy(BaseProxyComponent):
|
|
268
|
-
def __init__(self, **kwargs):
|
|
269
|
-
super().__init__(**kwargs)
|
|
270
|
-
self.custom_clients = {}
|
|
271
|
-
|
|
272
|
-
async def _fetch_agent_card(self, agent_config):
|
|
273
|
-
# Custom discovery logic
|
|
274
|
-
pass
|
|
275
|
-
|
|
276
|
-
async def _forward_request(self, task_context, request, agent_name):
|
|
277
|
-
# Custom forwarding logic
|
|
278
|
-
pass
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
This comprehensive guide covers all the main use cases for the proxies directory, from using the built-in A2A proxy to creating custom proxy implementations for new protocols.
|
|
282
|
-
|
|
283
|
-
# content_hash: 2f19070457fccc3f5c8f680f44788fb63495f9ea3b3da7d71ddb5a52f8f5b0f6
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE for the directory: sac
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `sac` (Solace AI Connector) directory provides the core implementation for hosting a Google ADK (Agent Development Kit) agent within the Solace AI Connector framework. It acts as a bridge, enabling ADK agents to communicate using the A2A (Agent-to-Agent) protocol over Solace messaging. This allows for the creation of distributed, collaborative agent systems where agents can delegate tasks, share information, and work together to solve complex problems.
|
|
5
|
-
|
|
6
|
-
## Files Overview
|
|
7
|
-
- `__init__.py` - Empty package marker file
|
|
8
|
-
- `app.py` - Custom SAC App class that automatically configures Solace subscriptions and broker settings for A2A communication
|
|
9
|
-
- `component.py` - Main SAC Component that hosts the ADK agent, manages its lifecycle, and handles all A2A protocol messaging
|
|
10
|
-
- `patch_adk.py` - Runtime patches for the Google ADK library to enhance or correct its behavior
|
|
11
|
-
- `task_execution_context.py` - State management class that encapsulates all runtime information for a single, in-flight A2A task
|
|
12
|
-
|
|
13
|
-
## Developer API Reference
|
|
14
|
-
|
|
15
|
-
### app.py
|
|
16
|
-
**Purpose:** Provides a custom SAC App class that simplifies the configuration of an A2A agent
|
|
17
|
-
**Import:** `from solace_agent_mesh.agent.sac.app import SamAgentApp`
|
|
18
|
-
|
|
19
|
-
**Classes:**
|
|
20
|
-
- `SamAgentApp(app_info: Dict[str, Any], **kwargs)` - Custom App class for SAM Agent Host with namespace prefixing and automatic subscription generation
|
|
21
|
-
- `app_schema: Dict` - Class attribute defining comprehensive configuration schema for agent host validation
|
|
22
|
-
|
|
23
|
-
**Constants/Variables:**
|
|
24
|
-
- `info: Dict[str, str]` - Metadata dictionary about the SamAgentApp class for SAC framework discovery
|
|
25
|
-
|
|
26
|
-
**Usage Examples:**
|
|
27
|
-
```python
|
|
28
|
-
# SamAgentApp is typically instantiated by the SAC framework from YAML config
|
|
29
|
-
# Example agent-config.yaml:
|
|
30
|
-
# app:
|
|
31
|
-
# class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
|
|
32
|
-
# app_config:
|
|
33
|
-
# namespace: "my-org/production"
|
|
34
|
-
# agent_name: "customer-support-agent"
|
|
35
|
-
# model: "gemini-1.5-pro-latest"
|
|
36
|
-
# tools:
|
|
37
|
-
# - tool_type: "builtin"
|
|
38
|
-
# tool_name: "file_search"
|
|
39
|
-
# agent_card:
|
|
40
|
-
# description: "An agent that can answer questions about customer accounts."
|
|
41
|
-
# agent_card_publishing:
|
|
42
|
-
# interval_seconds: 60
|
|
43
|
-
# session_service:
|
|
44
|
-
# type: "memory"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### component.py
|
|
48
|
-
**Purpose:** Core component that hosts a Google ADK agent and bridges communication to A2A protocol
|
|
49
|
-
**Import:** `from solace_agent_mesh.agent.sac.component import SamAgentComponent`
|
|
50
|
-
|
|
51
|
-
**Classes:**
|
|
52
|
-
- `SamAgentComponent(**kwargs)` - Solace AI Connector component that hosts a Google ADK agent
|
|
53
|
-
- `process_event(event: Event) -> None` - Main entry point for all SAC framework events
|
|
54
|
-
- `handle_timer_event(timer_data: Dict[str, Any]) -> None` - Handles scheduled timer events for agent card publishing
|
|
55
|
-
- `handle_cache_expiry_event(cache_data: Dict[str, Any]) -> None` - Handles cache expiry events for peer agent timeouts
|
|
56
|
-
- `finalize_task_success(a2a_context: Dict) -> None` - Async method to finalize successful task completion
|
|
57
|
-
- `finalize_task_canceled(a2a_context: Dict) -> None` - Finalizes task as CANCELED
|
|
58
|
-
- `finalize_task_error(exception: Exception, a2a_context: Dict) -> None` - Async method to finalize failed tasks
|
|
59
|
-
- `cleanup() -> None` - Cleans up resources on component shutdown
|
|
60
|
-
- `set_agent_specific_state(key: str, value: Any) -> None` - Sets key-value pair in agent state dictionary
|
|
61
|
-
- `get_agent_specific_state(key: str, default: Optional[Any] = None) -> Any` - Retrieves value from agent state
|
|
62
|
-
- `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns dedicated asyncio event loop
|
|
63
|
-
- `set_agent_system_instruction_string(instruction_string: str) -> None` - Sets static system prompt injection
|
|
64
|
-
- `set_agent_system_instruction_callback(callback_function: Callable) -> None` - Sets dynamic system prompt callback
|
|
65
|
-
- `get_gateway_id() -> str` - Returns unique identifier for agent host instance
|
|
66
|
-
- `submit_a2a_task(target_agent_name: str, a2a_message: A2AMessage, user_id: str, user_config: Dict[str, Any], sub_task_id: str) -> str` - Submits task to peer agent
|
|
67
|
-
- `get_agent_context() -> Dict[str, Any]` - Returns agent context for middleware interactions
|
|
68
|
-
|
|
69
|
-
**Constants/Variables:**
|
|
70
|
-
- `info: Dict` - Metadata dictionary for SAC framework
|
|
71
|
-
- `CORRELATION_DATA_PREFIX: str` - Prefix for cache keys when tracking peer requests
|
|
72
|
-
- `HOST_COMPONENT_VERSION: str` - Version string of the host component
|
|
73
|
-
|
|
74
|
-
**Usage Examples:**
|
|
75
|
-
```python
|
|
76
|
-
# Custom initialization function example
|
|
77
|
-
from solace_agent_mesh.agent.sac.component import SamAgentComponent
|
|
78
|
-
|
|
79
|
-
def initialize_my_agent(host_component: SamAgentComponent, config: dict):
|
|
80
|
-
"""Custom initialization function for the agent."""
|
|
81
|
-
# Store database connection in agent state
|
|
82
|
-
db_connection = create_database_connection(config.get('db_url'))
|
|
83
|
-
host_component.set_agent_specific_state('db_connection', db_connection)
|
|
84
|
-
|
|
85
|
-
# Set custom system instruction
|
|
86
|
-
host_component.set_agent_system_instruction_string(
|
|
87
|
-
"You are a specialized customer service agent with access to our database."
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
# Tool accessing agent state
|
|
91
|
-
def my_custom_tool(host_component: SamAgentComponent, query: str) -> str:
|
|
92
|
-
"""Tool that uses stored database connection."""
|
|
93
|
-
db_connection = host_component.get_agent_specific_state('db_connection')
|
|
94
|
-
if db_connection:
|
|
95
|
-
return db_connection.execute_query(query)
|
|
96
|
-
return "Database not available"
|
|
97
|
-
|
|
98
|
-
# Scheduling async work from synchronous code
|
|
99
|
-
def schedule_background_task(host_component: SamAgentComponent):
|
|
100
|
-
"""Schedule async work on the component's event loop."""
|
|
101
|
-
loop = host_component.get_async_loop()
|
|
102
|
-
if loop:
|
|
103
|
-
asyncio.run_coroutine_threadsafe(my_async_task(), loop)
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### patch_adk.py
|
|
107
|
-
**Purpose:** Contains runtime patches for the Google ADK library to enhance behavior
|
|
108
|
-
**Import:** `from solace_agent_mesh.agent.sac.patch_adk import patch_adk`
|
|
109
|
-
|
|
110
|
-
**Functions:**
|
|
111
|
-
- `patch_adk() -> None` - Applies all necessary patches to the ADK library
|
|
112
|
-
|
|
113
|
-
**Usage Examples:**
|
|
114
|
-
```python
|
|
115
|
-
from solace_agent_mesh.agent.sac.patch_adk import patch_adk
|
|
116
|
-
|
|
117
|
-
# Apply patches before using ADK
|
|
118
|
-
patch_adk()
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### task_execution_context.py
|
|
122
|
-
**Purpose:** State management class for single, in-flight agent tasks
|
|
123
|
-
**Import:** `from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext`
|
|
124
|
-
|
|
125
|
-
**Classes:**
|
|
126
|
-
- `TaskExecutionContext(task_id: str, a2a_context: Dict[str, Any])` - Encapsulates runtime state for a single agent task
|
|
127
|
-
- `cancel() -> None` - Signals that the task should be cancelled
|
|
128
|
-
- `is_cancelled() -> bool` - Checks if cancellation event has been set
|
|
129
|
-
- `append_to_streaming_buffer(text: str) -> None` - Appends text to streaming buffer
|
|
130
|
-
- `flush_streaming_buffer() -> str` - Returns and clears streaming buffer content
|
|
131
|
-
- `get_streaming_buffer_content() -> str` - Returns buffer content without clearing
|
|
132
|
-
- `append_to_run_based_buffer(text: str) -> None` - Appends text to run-based response buffer
|
|
133
|
-
- `register_peer_sub_task(sub_task_id: str, correlation_data: Dict[str, Any]) -> None` - Adds peer sub-task tracking
|
|
134
|
-
- `claim_sub_task_completion(sub_task_id: str) -> Optional[Dict[str, Any]]` - Atomically retrieves and removes sub-task data
|
|
135
|
-
- `register_parallel_call_sent(invocation_id: str) -> None` - Registers new parallel tool call
|
|
136
|
-
- `handle_peer_timeout(sub_task_id: str, correlation_data: Dict, timeout_sec: int, invocation_id: str) -> bool` - Handles peer timeout
|
|
137
|
-
- `record_parallel_result(result: Dict, invocation_id: str) -> bool` - Records parallel tool call result
|
|
138
|
-
- `clear_parallel_invocation_state(invocation_id: str) -> None` - Removes completed invocation state
|
|
139
|
-
- `register_produced_artifact(filename: str, version: int) -> None` - Tracks newly created artifacts
|
|
140
|
-
- `add_artifact_signal(signal: Dict[str, Any]) -> None` - Adds artifact return signal
|
|
141
|
-
- `get_and_clear_artifact_signals() -> List[Dict[str, Any]]` - Retrieves and clears artifact signals
|
|
142
|
-
- `set_event_loop(loop: asyncio.AbstractEventLoop) -> None` - Stores event loop reference
|
|
143
|
-
- `get_event_loop() -> Optional[asyncio.AbstractEventLoop]` - Retrieves stored event loop
|
|
144
|
-
- `record_token_usage(input_tokens: int, output_tokens: int, model: str, source: str = "agent", tool_name: Optional[str] = None, cached_input_tokens: int = 0) -> None` - Records token usage for LLM calls
|
|
145
|
-
- `get_token_usage_summary() -> Dict[str, Any]` - Returns summary of all token usage for the task
|
|
146
|
-
|
|
147
|
-
**Usage Examples:**
|
|
148
|
-
```python
|
|
149
|
-
from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
|
|
150
|
-
|
|
151
|
-
# Create task context
|
|
152
|
-
a2a_context = {
|
|
153
|
-
"logical_task_id": "task-123",
|
|
154
|
-
"user_id": "user-456",
|
|
155
|
-
"session_id": "session-789"
|
|
156
|
-
}
|
|
157
|
-
task_context = TaskExecutionContext("task-123", a2a_context)
|
|
158
|
-
|
|
159
|
-
# Use streaming buffer
|
|
160
|
-
task_context.append_to_streaming_buffer("Hello ")
|
|
161
|
-
task_context.append_to_streaming_buffer("world!")
|
|
162
|
-
content = task_context.flush_streaming_buffer() # Returns "Hello world!"
|
|
163
|
-
|
|
164
|
-
# Track peer sub-tasks
|
|
165
|
-
correlation_data = {
|
|
166
|
-
"peer_agent_name": "math-agent",
|
|
167
|
-
"adk_function_call_id": "call-123"
|
|
168
|
-
}
|
|
169
|
-
task_context.register_peer_sub_task("sub-task-456", correlation_data)
|
|
170
|
-
|
|
171
|
-
# Handle completion
|
|
172
|
-
completed_data = task_context.claim_sub_task_completion("sub-task-456")
|
|
173
|
-
if completed_data:
|
|
174
|
-
print(f"Sub-task completed: {completed_data}")
|
|
175
|
-
|
|
176
|
-
# Track token usage
|
|
177
|
-
task_context.record_token_usage(
|
|
178
|
-
input_tokens=100,
|
|
179
|
-
output_tokens=50,
|
|
180
|
-
model="gemini-1.5-pro",
|
|
181
|
-
source="agent"
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
# Get usage summary
|
|
185
|
-
usage = task_context.get_token_usage_summary()
|
|
186
|
-
print(f"Total tokens used: {usage['total_tokens']}")
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
# content_hash: c80bf39278c35fcb73e1df4421b631aabbdb4ba330e8be028fb8a29e097c3fad
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
# LLM Summary Detail File
|
|
2
|
-
|
|
3
|
-
This file is a concatenation of all individual *llm.txt files found in the 'sac' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
-
|
|
5
|
-
================================================================================
|
|
6
|
-
|
|
7
|
-
## Section 1: solace_agent_mesh/agent/sac/sac_llm.txt
|
|
8
|
-
|
|
9
|
-
**Source file:** `solace_agent_mesh/agent/sac/sac_llm.txt`
|
|
10
|
-
|
|
11
|
-
# DEVELOPER GUIDE for the directory: sac
|
|
12
|
-
|
|
13
|
-
## Quick Summary
|
|
14
|
-
The `sac` (Solace AI Connector) directory provides the core implementation for hosting a Google ADK (Agent Development Kit) agent within the Solace AI Connector framework. It acts as a bridge, enabling ADK agents to communicate using the A2A (Agent-to-Agent) protocol over Solace messaging. This allows for the creation of distributed, collaborative agent systems where agents can delegate tasks, share information, and work together to solve complex problems.
|
|
15
|
-
|
|
16
|
-
## Files Overview
|
|
17
|
-
- `__init__.py` - Empty package marker file
|
|
18
|
-
- `app.py` - Custom SAC App class that automatically configures Solace subscriptions and broker settings for A2A communication
|
|
19
|
-
- `component.py` - Main SAC Component that hosts the ADK agent, manages its lifecycle, and handles all A2A protocol messaging
|
|
20
|
-
- `patch_adk.py` - Runtime patches for the Google ADK library to enhance or correct its behavior
|
|
21
|
-
- `task_execution_context.py` - State management class that encapsulates all runtime information for a single, in-flight A2A task
|
|
22
|
-
|
|
23
|
-
## Developer API Reference
|
|
24
|
-
|
|
25
|
-
### app.py
|
|
26
|
-
**Purpose:** Provides a custom SAC App class that simplifies the configuration of an A2A agent
|
|
27
|
-
**Import:** `from solace_agent_mesh.agent.sac.app import SamAgentApp`
|
|
28
|
-
|
|
29
|
-
**Classes:**
|
|
30
|
-
- `SamAgentApp(app_info: Dict[str, Any], **kwargs)` - Custom App class for SAM Agent Host with namespace prefixing and automatic subscription generation
|
|
31
|
-
- `app_schema: Dict` - Class attribute defining comprehensive configuration schema for agent host validation
|
|
32
|
-
|
|
33
|
-
**Constants/Variables:**
|
|
34
|
-
- `info: Dict[str, str]` - Metadata dictionary about the SamAgentApp class for SAC framework discovery
|
|
35
|
-
|
|
36
|
-
**Usage Examples:**
|
|
37
|
-
```python
|
|
38
|
-
# SamAgentApp is typically instantiated by the SAC framework from YAML config
|
|
39
|
-
# Example agent-config.yaml:
|
|
40
|
-
# app:
|
|
41
|
-
# class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
|
|
42
|
-
# app_config:
|
|
43
|
-
# namespace: "my-org/production"
|
|
44
|
-
# agent_name: "customer-support-agent"
|
|
45
|
-
# model: "gemini-1.5-pro-latest"
|
|
46
|
-
# tools:
|
|
47
|
-
# - tool_type: "builtin"
|
|
48
|
-
# tool_name: "file_search"
|
|
49
|
-
# agent_card:
|
|
50
|
-
# description: "An agent that can answer questions about customer accounts."
|
|
51
|
-
# agent_card_publishing:
|
|
52
|
-
# interval_seconds: 60
|
|
53
|
-
# session_service:
|
|
54
|
-
# type: "memory"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### component.py
|
|
58
|
-
**Purpose:** Core component that hosts a Google ADK agent and bridges communication to A2A protocol
|
|
59
|
-
**Import:** `from solace_agent_mesh.agent.sac.component import SamAgentComponent`
|
|
60
|
-
|
|
61
|
-
**Classes:**
|
|
62
|
-
- `SamAgentComponent(**kwargs)` - Solace AI Connector component that hosts a Google ADK agent
|
|
63
|
-
- `process_event(event: Event) -> None` - Main entry point for all SAC framework events
|
|
64
|
-
- `handle_timer_event(timer_data: Dict[str, Any]) -> None` - Handles scheduled timer events for agent card publishing
|
|
65
|
-
- `handle_cache_expiry_event(cache_data: Dict[str, Any]) -> None` - Handles cache expiry events for peer agent timeouts
|
|
66
|
-
- `finalize_task_success(a2a_context: Dict) -> None` - Async method to finalize successful task completion
|
|
67
|
-
- `finalize_task_canceled(a2a_context: Dict) -> None` - Finalizes task as CANCELED
|
|
68
|
-
- `finalize_task_error(exception: Exception, a2a_context: Dict) -> None` - Async method to finalize failed tasks
|
|
69
|
-
- `cleanup() -> None` - Cleans up resources on component shutdown
|
|
70
|
-
- `set_agent_specific_state(key: str, value: Any) -> None` - Sets key-value pair in agent state dictionary
|
|
71
|
-
- `get_agent_specific_state(key: str, default: Optional[Any] = None) -> Any` - Retrieves value from agent state
|
|
72
|
-
- `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns dedicated asyncio event loop
|
|
73
|
-
- `set_agent_system_instruction_string(instruction_string: str) -> None` - Sets static system prompt injection
|
|
74
|
-
- `set_agent_system_instruction_callback(callback_function: Callable) -> None` - Sets dynamic system prompt callback
|
|
75
|
-
- `get_gateway_id() -> str` - Returns unique identifier for agent host instance
|
|
76
|
-
- `submit_a2a_task(target_agent_name: str, a2a_message: A2AMessage, user_id: str, user_config: Dict[str, Any], sub_task_id: str) -> str` - Submits task to peer agent
|
|
77
|
-
- `get_agent_context() -> Dict[str, Any]` - Returns agent context for middleware interactions
|
|
78
|
-
|
|
79
|
-
**Constants/Variables:**
|
|
80
|
-
- `info: Dict` - Metadata dictionary for SAC framework
|
|
81
|
-
- `CORRELATION_DATA_PREFIX: str` - Prefix for cache keys when tracking peer requests
|
|
82
|
-
- `HOST_COMPONENT_VERSION: str` - Version string of the host component
|
|
83
|
-
|
|
84
|
-
**Usage Examples:**
|
|
85
|
-
```python
|
|
86
|
-
# Custom initialization function example
|
|
87
|
-
from solace_agent_mesh.agent.sac.component import SamAgentComponent
|
|
88
|
-
|
|
89
|
-
def initialize_my_agent(host_component: SamAgentComponent, config: dict):
|
|
90
|
-
"""Custom initialization function for the agent."""
|
|
91
|
-
# Store database connection in agent state
|
|
92
|
-
db_connection = create_database_connection(config.get('db_url'))
|
|
93
|
-
host_component.set_agent_specific_state('db_connection', db_connection)
|
|
94
|
-
|
|
95
|
-
# Set custom system instruction
|
|
96
|
-
host_component.set_agent_system_instruction_string(
|
|
97
|
-
"You are a specialized customer service agent with access to our database."
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
# Tool accessing agent state
|
|
101
|
-
def my_custom_tool(host_component: SamAgentComponent, query: str) -> str:
|
|
102
|
-
"""Tool that uses stored database connection."""
|
|
103
|
-
db_connection = host_component.get_agent_specific_state('db_connection')
|
|
104
|
-
if db_connection:
|
|
105
|
-
return db_connection.execute_query(query)
|
|
106
|
-
return "Database not available"
|
|
107
|
-
|
|
108
|
-
# Scheduling async work from synchronous code
|
|
109
|
-
def schedule_background_task(host_component: SamAgentComponent):
|
|
110
|
-
"""Schedule async work on the component's event loop."""
|
|
111
|
-
loop = host_component.get_async_loop()
|
|
112
|
-
if loop:
|
|
113
|
-
asyncio.run_coroutine_threadsafe(my_async_task(), loop)
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### patch_adk.py
|
|
117
|
-
**Purpose:** Contains runtime patches for the Google ADK library to enhance behavior
|
|
118
|
-
**Import:** `from solace_agent_mesh.agent.sac.patch_adk import patch_adk`
|
|
119
|
-
|
|
120
|
-
**Functions:**
|
|
121
|
-
- `patch_adk() -> None` - Applies all necessary patches to the ADK library
|
|
122
|
-
|
|
123
|
-
**Usage Examples:**
|
|
124
|
-
```python
|
|
125
|
-
from solace_agent_mesh.agent.sac.patch_adk import patch_adk
|
|
126
|
-
|
|
127
|
-
# Apply patches before using ADK
|
|
128
|
-
patch_adk()
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### task_execution_context.py
|
|
132
|
-
**Purpose:** State management class for single, in-flight agent tasks
|
|
133
|
-
**Import:** `from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext`
|
|
134
|
-
|
|
135
|
-
**Classes:**
|
|
136
|
-
- `TaskExecutionContext(task_id: str, a2a_context: Dict[str, Any])` - Encapsulates runtime state for a single agent task
|
|
137
|
-
- `cancel() -> None` - Signals that the task should be cancelled
|
|
138
|
-
- `is_cancelled() -> bool` - Checks if cancellation event has been set
|
|
139
|
-
- `append_to_streaming_buffer(text: str) -> None` - Appends text to streaming buffer
|
|
140
|
-
- `flush_streaming_buffer() -> str` - Returns and clears streaming buffer content
|
|
141
|
-
- `get_streaming_buffer_content() -> str` - Returns buffer content without clearing
|
|
142
|
-
- `append_to_run_based_buffer(text: str) -> None` - Appends text to run-based response buffer
|
|
143
|
-
- `register_peer_sub_task(sub_task_id: str, correlation_data: Dict[str, Any]) -> None` - Adds peer sub-task tracking
|
|
144
|
-
- `claim_sub_task_completion(sub_task_id: str) -> Optional[Dict[str, Any]]` - Atomically retrieves and removes sub-task data
|
|
145
|
-
- `register_parallel_call_sent(invocation_id: str) -> None` - Registers new parallel tool call
|
|
146
|
-
- `handle_peer_timeout(sub_task_id: str, correlation_data: Dict, timeout_sec: int, invocation_id: str) -> bool` - Handles peer timeout
|
|
147
|
-
- `record_parallel_result(result: Dict, invocation_id: str) -> bool` - Records parallel tool call result
|
|
148
|
-
- `clear_parallel_invocation_state(invocation_id: str) -> None` - Removes completed invocation state
|
|
149
|
-
- `register_produced_artifact(filename: str, version: int) -> None` - Tracks newly created artifacts
|
|
150
|
-
- `add_artifact_signal(signal: Dict[str, Any]) -> None` - Adds artifact return signal
|
|
151
|
-
- `get_and_clear_artifact_signals() -> List[Dict[str, Any]]` - Retrieves and clears artifact signals
|
|
152
|
-
- `set_event_loop(loop: asyncio.AbstractEventLoop) -> None` - Stores event loop reference
|
|
153
|
-
- `get_event_loop() -> Optional[asyncio.AbstractEventLoop]` - Retrieves stored event loop
|
|
154
|
-
- `record_token_usage(input_tokens: int, output_tokens: int, model: str, source: str = "agent", tool_name: Optional[str] = None, cached_input_tokens: int = 0) -> None` - Records token usage for LLM calls
|
|
155
|
-
- `get_token_usage_summary() -> Dict[str, Any]` - Returns summary of all token usage for the task
|
|
156
|
-
|
|
157
|
-
**Usage Examples:**
|
|
158
|
-
```python
|
|
159
|
-
from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
|
|
160
|
-
|
|
161
|
-
# Create task context
|
|
162
|
-
a2a_context = {
|
|
163
|
-
"logical_task_id": "task-123",
|
|
164
|
-
"user_id": "user-456",
|
|
165
|
-
"session_id": "session-789"
|
|
166
|
-
}
|
|
167
|
-
task_context = TaskExecutionContext("task-123", a2a_context)
|
|
168
|
-
|
|
169
|
-
# Use streaming buffer
|
|
170
|
-
task_context.append_to_streaming_buffer("Hello ")
|
|
171
|
-
task_context.append_to_streaming_buffer("world!")
|
|
172
|
-
content = task_context.flush_streaming_buffer() # Returns "Hello world!"
|
|
173
|
-
|
|
174
|
-
# Track peer sub-tasks
|
|
175
|
-
correlation_data = {
|
|
176
|
-
"peer_agent_name": "math-agent",
|
|
177
|
-
"adk_function_call_id": "call-123"
|
|
178
|
-
}
|
|
179
|
-
task_context.register_peer_sub_task("sub-task-456", correlation_data)
|
|
180
|
-
|
|
181
|
-
# Handle completion
|
|
182
|
-
completed_data = task_context.claim_sub_task_completion("sub-task-456")
|
|
183
|
-
if completed_data:
|
|
184
|
-
print(f"Sub-task completed: {completed_data}")
|
|
185
|
-
|
|
186
|
-
# Track token usage
|
|
187
|
-
task_context.record_token_usage(
|
|
188
|
-
input_tokens=100,
|
|
189
|
-
output_tokens=50,
|
|
190
|
-
model="gemini-1.5-pro",
|
|
191
|
-
source="agent"
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
# Get usage summary
|
|
195
|
-
usage = task_context.get_token_usage_summary()
|
|
196
|
-
print(f"Total tokens used: {usage['total_tokens']}")
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
================================================================================
|
|
200
|
-
|