solace-agent-mesh 1.6.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/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +852 -109
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
- 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 +77 -21
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +85 -20
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +94 -18
- solace_agent_mesh/agent/adk/setup.py +281 -65
- solace_agent_mesh/agent/adk/stream_parser.py +231 -37
- solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- 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/app.py +3 -2
- 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 +91 -3
- solace_agent_mesh/agent/sac/component.py +591 -157
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
- 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 +710 -171
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -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 +57 -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 +248 -6
- 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/2987107d.a80604f9.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/631738c7.fa471607.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/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.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/8b032486.91a91afc.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/ad87452a.9d73dad6.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/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.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/ff4d71f2.74710fc1.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 +82 -68
- 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 +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +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 -49
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
- 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 +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
- 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 +162 -171
- 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 +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +23 -19
- 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 +112 -87
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +87 -64
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
- 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 +311 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
- 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 +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +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/docs_cmd.py +4 -1
- 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-BTf6dqwp.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-CGk8Suyh.js +565 -0
- 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/events.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +5 -0
- solace_agent_mesh/common/a2a/types.py +2 -1
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +144 -4
- 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 +97 -19
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/services/employee_service.py +1 -1
- solace_agent_mesh/common/utils/embeds/constants.py +1 -0
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
- solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
- solace_agent_mesh/common/utils/embeds/types.py +9 -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/pydantic_utils.py +90 -3
- 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/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +170 -0
- solace_agent_mesh/gateway/adapter/types.py +230 -0
- solace_agent_mesh/gateway/base/app.py +39 -2
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +1027 -151
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +894 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
- solace_agent_mesh/gateway/http_sse/app.py +40 -11
- solace_agent_mesh/gateway/http_sse/component.py +285 -160
- solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
- solace_agent_mesh/gateway/http_sse/main.py +68 -450
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +26 -3
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +8 -2
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
- 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 +256 -58
- solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
- solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
- 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/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -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 +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
- 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 +92 -9
- 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 +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +361 -12
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
- 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 +19 -5
- 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.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
- solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
- 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 -142
- solace_agent_mesh/agent/agent_llm.txt +0 -378
- 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/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 -57
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.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.76654dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.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.b5ddb7a1.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.3e6dd091.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761248203150.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-CaY59VuC.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
- solace_agent_mesh/common/common_llm.txt +0 -251
- 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 -80
- solace_agent_mesh/common/services/services_llm.txt +0 -363
- 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 -336
- 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 -224
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -373
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
- 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 -263
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
- 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-1.6.1.dist-info/RECORD +0 -525
- /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.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.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: artifacts
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The artifacts directory provides ADK ArtifactService implementations for the Solace Agent Mesh. It includes filesystem and S3-compatible storage backends for managing artifacts with versioning, user namespacing, and session-based organization.
|
|
5
|
-
|
|
6
|
-
## Files Overview
|
|
7
|
-
- `__init__.py` - Package initialization for artifact service implementations
|
|
8
|
-
- `filesystem_artifact_service.py` - Local filesystem-based artifact storage implementation
|
|
9
|
-
- `s3_artifact_service.py` - Amazon S3 compatible storage implementation for artifacts
|
|
10
|
-
|
|
11
|
-
## Developer API Reference
|
|
12
|
-
|
|
13
|
-
### filesystem_artifact_service.py
|
|
14
|
-
**Purpose:** Provides local filesystem storage for artifacts with structured directory organization and metadata management.
|
|
15
|
-
|
|
16
|
-
**Import:** `from solace_agent_mesh.agent.adk.artifacts.filesystem_artifact_service import FilesystemArtifactService`
|
|
17
|
-
|
|
18
|
-
**Classes:**
|
|
19
|
-
- `FilesystemArtifactService(base_path: str)` - Filesystem-based artifact service implementation
|
|
20
|
-
- `save_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, artifact: adk_types.Part) -> int` - Saves an artifact and returns version number
|
|
21
|
-
- `load_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, version: int | None = None) -> adk_types.Part | None` - Loads an artifact by version (latest if None)
|
|
22
|
-
- `list_artifact_keys(*, app_name: str, user_id: str, session_id: str) -> list[str]` - Lists all artifact filenames for a scope
|
|
23
|
-
- `delete_artifact(*, app_name: str, user_id: str, session_id: str, filename: str) -> None` - Deletes all versions of an artifact
|
|
24
|
-
- `list_versions(*, app_name: str, user_id: str, session_id: str, filename: str) -> list[int]` - Lists all version numbers for an artifact
|
|
25
|
-
- `base_path: str` - Root directory for artifact storage
|
|
26
|
-
|
|
27
|
-
**Constants/Variables:**
|
|
28
|
-
- `METADATA_FILE_SUFFIX: str` - File suffix for metadata files (".meta")
|
|
29
|
-
|
|
30
|
-
**Usage Examples:**
|
|
31
|
-
```python
|
|
32
|
-
from solace_agent_mesh.agent.adk.artifacts.filesystem_artifact_service import FilesystemArtifactService
|
|
33
|
-
from google.genai import types as adk_types
|
|
34
|
-
|
|
35
|
-
# Initialize the service
|
|
36
|
-
artifact_service = FilesystemArtifactService(base_path="/path/to/artifacts")
|
|
37
|
-
|
|
38
|
-
# Save an artifact
|
|
39
|
-
artifact_data = b"Hello, World!"
|
|
40
|
-
artifact_part = adk_types.Part.from_bytes(data=artifact_data, mime_type="text/plain")
|
|
41
|
-
version = await artifact_service.save_artifact(
|
|
42
|
-
app_name="my_app",
|
|
43
|
-
user_id="user123",
|
|
44
|
-
session_id="session456",
|
|
45
|
-
filename="greeting.txt",
|
|
46
|
-
artifact=artifact_part
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
# Load the latest version
|
|
50
|
-
loaded_artifact = await artifact_service.load_artifact(
|
|
51
|
-
app_name="my_app",
|
|
52
|
-
user_id="user123",
|
|
53
|
-
session_id="session456",
|
|
54
|
-
filename="greeting.txt"
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
# Load a specific version
|
|
58
|
-
specific_version = await artifact_service.load_artifact(
|
|
59
|
-
app_name="my_app",
|
|
60
|
-
user_id="user123",
|
|
61
|
-
session_id="session456",
|
|
62
|
-
filename="greeting.txt",
|
|
63
|
-
version=1
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
# List all artifacts
|
|
67
|
-
artifact_keys = await artifact_service.list_artifact_keys(
|
|
68
|
-
app_name="my_app",
|
|
69
|
-
user_id="user123",
|
|
70
|
-
session_id="session456"
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
# List versions of an artifact
|
|
74
|
-
versions = await artifact_service.list_versions(
|
|
75
|
-
app_name="my_app",
|
|
76
|
-
user_id="user123",
|
|
77
|
-
session_id="session456",
|
|
78
|
-
filename="greeting.txt"
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
# Delete an artifact
|
|
82
|
-
await artifact_service.delete_artifact(
|
|
83
|
-
app_name="my_app",
|
|
84
|
-
user_id="user123",
|
|
85
|
-
session_id="session456",
|
|
86
|
-
filename="greeting.txt"
|
|
87
|
-
)
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### s3_artifact_service.py
|
|
91
|
-
**Purpose:** Provides S3-compatible storage for artifacts with structured key organization and AWS integration.
|
|
92
|
-
|
|
93
|
-
**Import:** `from solace_agent_mesh.agent.adk.artifacts.s3_artifact_service import S3ArtifactService`
|
|
94
|
-
|
|
95
|
-
**Classes:**
|
|
96
|
-
- `S3ArtifactService(bucket_name: str, s3_client: BaseClient | None = None, **kwargs)` - S3-based artifact service implementation
|
|
97
|
-
- `save_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, artifact: adk_types.Part) -> int` - Saves an artifact to S3 and returns version number
|
|
98
|
-
- `load_artifact(*, app_name: str, user_id: str, session_id: str, filename: str, version: int | None = None) -> adk_types.Part | None` - Loads an artifact from S3 by version (latest if None)
|
|
99
|
-
- `list_artifact_keys(*, app_name: str, user_id: str, session_id: str) -> list[str]` - Lists all artifact filenames for a scope
|
|
100
|
-
- `delete_artifact(*, app_name: str, user_id: str, session_id: str, filename: str) -> None` - Deletes all versions of an artifact from S3
|
|
101
|
-
- `list_versions(*, app_name: str, user_id: str, session_id: str, filename: str) -> list[int]` - Lists all version numbers for an artifact
|
|
102
|
-
- `bucket_name: str` - S3 bucket name for storage
|
|
103
|
-
- `s3: BaseClient` - Boto3 S3 client instance
|
|
104
|
-
|
|
105
|
-
**Usage Examples:**
|
|
106
|
-
```python
|
|
107
|
-
from solace_agent_mesh.agent.adk.artifacts.s3_artifact_service import S3ArtifactService
|
|
108
|
-
from google.genai import types as adk_types
|
|
109
|
-
import boto3
|
|
110
|
-
|
|
111
|
-
# Initialize with default credentials
|
|
112
|
-
artifact_service = S3ArtifactService(bucket_name="my-artifacts-bucket")
|
|
113
|
-
|
|
114
|
-
# Initialize with custom S3 client
|
|
115
|
-
s3_client = boto3.client(
|
|
116
|
-
's3',
|
|
117
|
-
endpoint_url='https://minio.example.com',
|
|
118
|
-
aws_access_key_id='access_key',
|
|
119
|
-
aws_secret_access_key='secret_key'
|
|
120
|
-
)
|
|
121
|
-
artifact_service = S3ArtifactService(
|
|
122
|
-
bucket_name="my-artifacts-bucket",
|
|
123
|
-
s3_client=s3_client
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
# Save an artifact
|
|
127
|
-
artifact_data = b"Hello, S3!"
|
|
128
|
-
artifact_part = adk_types.Part.from_bytes(data=artifact_data, mime_type="text/plain")
|
|
129
|
-
version = await artifact_service.save_artifact(
|
|
130
|
-
app_name="my_app",
|
|
131
|
-
user_id="user123",
|
|
132
|
-
session_id="session456",
|
|
133
|
-
filename="greeting.txt",
|
|
134
|
-
artifact=artifact_part
|
|
135
|
-
)
|
|
136
|
-
|
|
137
|
-
# Load the latest version
|
|
138
|
-
loaded_artifact = await artifact_service.load_artifact(
|
|
139
|
-
app_name="my_app",
|
|
140
|
-
user_id="user123",
|
|
141
|
-
session_id="session456",
|
|
142
|
-
filename="greeting.txt"
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
# Save user-scoped artifact (persists across sessions)
|
|
146
|
-
user_artifact = adk_types.Part.from_bytes(data=b"User data", mime_type="text/plain")
|
|
147
|
-
await artifact_service.save_artifact(
|
|
148
|
-
app_name="my_app",
|
|
149
|
-
user_id="user123",
|
|
150
|
-
session_id="session456",
|
|
151
|
-
filename="user:profile.json", # user: prefix for user-scoped storage
|
|
152
|
-
artifact=user_artifact
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
# List all artifacts (includes both session and user-scoped)
|
|
156
|
-
artifact_keys = await artifact_service.list_artifact_keys(
|
|
157
|
-
app_name="my_app",
|
|
158
|
-
user_id="user123",
|
|
159
|
-
session_id="session456"
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
# Delete an artifact
|
|
163
|
-
await artifact_service.delete_artifact(
|
|
164
|
-
app_name="my_app",
|
|
165
|
-
user_id="user123",
|
|
166
|
-
session_id="session456",
|
|
167
|
-
filename="greeting.txt"
|
|
168
|
-
)
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
# content_hash: c4df3504afaa30b614cafc8cda2c977b18d0036faabaaec82b2f7a9bc5b082f6
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE for models directory
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
This directory contains concrete implementations of the `BaseLlm` interface, providing wrappers for various Large Language Model APIs. These classes translate the ADK's standard `LlmRequest` into provider-specific formats and parse responses back into standard `LlmResponse` objects.
|
|
5
|
-
|
|
6
|
-
## Files Overview
|
|
7
|
-
- `lite_llm.py` - LLM client using the `litellm` library to support hundreds of models from different providers
|
|
8
|
-
|
|
9
|
-
## Developer API Reference
|
|
10
|
-
|
|
11
|
-
### lite_llm.py
|
|
12
|
-
**Purpose:** Provides the `LiteLlm` class, a `BaseLlm` implementation that interfaces with hundreds of LLM models through the `litellm` library. Supports models from OpenAI, Anthropic, Vertex AI, and many other providers by simply changing the model string.
|
|
13
|
-
|
|
14
|
-
**Import:** `from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm`
|
|
15
|
-
|
|
16
|
-
**Classes:**
|
|
17
|
-
- `LiteLlm(model: str, **kwargs)` - Wrapper around `litellm` supporting any model it recognizes
|
|
18
|
-
- `generate_content_async(llm_request: LlmRequest, stream: bool = False) -> AsyncGenerator[LlmResponse, None]` - Generates content asynchronously with optional streaming
|
|
19
|
-
- `supported_models() -> list[str]` - Returns list of supported models (empty for LiteLlm due to dynamic model support)
|
|
20
|
-
- `model: str` - The name of the LiteLlm model
|
|
21
|
-
- `llm_client: LiteLLMClient` - The LLM client instance used for API calls
|
|
22
|
-
|
|
23
|
-
- `LiteLLMClient()` - Internal client providing completion methods for better testability
|
|
24
|
-
- `acompletion(model, messages, tools, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]` - Asynchronous completion call
|
|
25
|
-
- `completion(model, messages, tools, stream=False, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]` - Synchronous completion call
|
|
26
|
-
|
|
27
|
-
- `FunctionChunk(BaseModel)` - Represents a function call chunk in streaming responses
|
|
28
|
-
- `id: Optional[str]` - Function call ID
|
|
29
|
-
- `name: Optional[str]` - Function name
|
|
30
|
-
- `args: Optional[str]` - Function arguments as JSON string
|
|
31
|
-
- `index: Optional[int]` - Index of the function call
|
|
32
|
-
|
|
33
|
-
- `TextChunk(BaseModel)` - Represents a text chunk in streaming responses
|
|
34
|
-
- `text: str` - The text content
|
|
35
|
-
|
|
36
|
-
- `UsageMetadataChunk(BaseModel)` - Represents token usage information
|
|
37
|
-
- `prompt_tokens: int` - Number of tokens in the prompt
|
|
38
|
-
- `completion_tokens: int` - Number of tokens in the completion
|
|
39
|
-
- `total_tokens: int` - Total number of tokens used
|
|
40
|
-
|
|
41
|
-
**Functions:**
|
|
42
|
-
- `_content_to_message_param(content: types.Content) -> Union[Message, list[Message]]` - Converts ADK Content to litellm Message format
|
|
43
|
-
- `_get_content(parts: Iterable[types.Part]) -> Union[OpenAIMessageContent, str]` - Converts parts to litellm content format
|
|
44
|
-
- `_function_declaration_to_tool_param(function_declaration: types.FunctionDeclaration) -> dict` - Converts function declarations to OpenAPI spec format
|
|
45
|
-
- `_model_response_to_generate_content_response(response: ModelResponse) -> LlmResponse` - Converts litellm response to LlmResponse
|
|
46
|
-
|
|
47
|
-
**Usage Examples:**
|
|
48
|
-
```python
|
|
49
|
-
import asyncio
|
|
50
|
-
import os
|
|
51
|
-
from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
|
|
52
|
-
from solace_agent_mesh.agent.adk.models.llm_request import LlmRequest, LlmConfig
|
|
53
|
-
from google.genai.types import Content, Part
|
|
54
|
-
|
|
55
|
-
# Set environment variables for your chosen provider
|
|
56
|
-
# For OpenAI:
|
|
57
|
-
# os.environ["OPENAI_API_KEY"] = "your-api-key"
|
|
58
|
-
# For Vertex AI:
|
|
59
|
-
# os.environ["VERTEXAI_PROJECT"] = "your-project-id"
|
|
60
|
-
# os.environ["VERTEXAI_LOCATION"] = "your-location"
|
|
61
|
-
|
|
62
|
-
async def main():
|
|
63
|
-
# Initialize LiteLlm with a specific model
|
|
64
|
-
llm = LiteLlm(
|
|
65
|
-
model="gpt-4-turbo",
|
|
66
|
-
temperature=0.7,
|
|
67
|
-
max_completion_tokens=150
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
# Create a request
|
|
71
|
-
request = LlmRequest(
|
|
72
|
-
contents=[
|
|
73
|
-
Content(
|
|
74
|
-
role="user",
|
|
75
|
-
parts=[Part.from_text("Explain quantum computing in simple terms")]
|
|
76
|
-
)
|
|
77
|
-
],
|
|
78
|
-
config=LlmConfig(
|
|
79
|
-
temperature=0.5,
|
|
80
|
-
max_output_tokens=200
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
# Non-streaming generation
|
|
85
|
-
print("=== Non-streaming ===")
|
|
86
|
-
async for response in llm.generate_content_async(request, stream=False):
|
|
87
|
-
print(f"Response: {response.text}")
|
|
88
|
-
if response.usage_metadata:
|
|
89
|
-
print(f"Tokens used: {response.usage_metadata.total_token_count}")
|
|
90
|
-
|
|
91
|
-
# Streaming generation
|
|
92
|
-
print("\n=== Streaming ===")
|
|
93
|
-
async for response in llm.generate_content_async(request, stream=True):
|
|
94
|
-
if response.text:
|
|
95
|
-
print(response.text, end="", flush=True)
|
|
96
|
-
if response.usage_metadata:
|
|
97
|
-
print(f"\nTotal tokens: {response.usage_metadata.total_token_count}")
|
|
98
|
-
|
|
99
|
-
# Example with function calling
|
|
100
|
-
async def function_calling_example():
|
|
101
|
-
from google.genai.types import FunctionDeclaration, Schema, Type, Tool
|
|
102
|
-
|
|
103
|
-
# Define a function for the LLM to call
|
|
104
|
-
get_weather_func = FunctionDeclaration(
|
|
105
|
-
name="get_weather",
|
|
106
|
-
description="Get current weather for a location",
|
|
107
|
-
parameters=Schema(
|
|
108
|
-
type=Type.OBJECT,
|
|
109
|
-
properties={
|
|
110
|
-
"location": Schema(type=Type.STRING, description="City name"),
|
|
111
|
-
"unit": Schema(type=Type.STRING, description="Temperature unit")
|
|
112
|
-
},
|
|
113
|
-
required=["location"]
|
|
114
|
-
)
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
llm = LiteLlm(model="gpt-4-turbo")
|
|
118
|
-
|
|
119
|
-
request = LlmRequest(
|
|
120
|
-
contents=[
|
|
121
|
-
Content(
|
|
122
|
-
role="user",
|
|
123
|
-
parts=[Part.from_text("What's the weather like in Tokyo?")]
|
|
124
|
-
)
|
|
125
|
-
],
|
|
126
|
-
config=LlmConfig(
|
|
127
|
-
tools=[Tool(function_declarations=[get_weather_func])]
|
|
128
|
-
)
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
async for response in llm.generate_content_async(request):
|
|
132
|
-
if response.function_calls:
|
|
133
|
-
for func_call in response.function_calls:
|
|
134
|
-
print(f"Function called: {func_call.name}")
|
|
135
|
-
print(f"Arguments: {func_call.args}")
|
|
136
|
-
|
|
137
|
-
if __name__ == "__main__":
|
|
138
|
-
asyncio.run(main())
|
|
139
|
-
# asyncio.run(function_calling_example())
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
# content_hash: 97abaea0097e0d6fe18f1d747ed54ced092c0a96829dc5be8448b087ac5f7c20
|
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE for agent directory
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `agent` directory provides a comprehensive framework for hosting Google ADK (Agent Development Kit) agents within the Solace AI Connector ecosystem. It bridges ADK agents with the A2A (Agent-to-Agent) protocol over Solace messaging, enabling distributed agent communication, task delegation, and rich tool functionality.
|
|
5
|
-
|
|
6
|
-
The architecture is modular, consisting of several key components:
|
|
7
|
-
- **`sac/` (Solace AI Connector):** The main entry point, providing the `SamAgentApp` and `SamAgentComponent` to host the agent and manage its lifecycle and communication over the Solace event mesh.
|
|
8
|
-
- **`adk/` (Agent Development Kit):** The core integration layer with Google's ADK. It defines the custom `AppLlmAgent`, manages asynchronous task execution, and provides a rich set of callbacks to augment agent behavior.
|
|
9
|
-
- **`tools/`:** A comprehensive and extensible library of tools available to the agent, covering data analysis, artifact management, web requests, multimedia processing, and inter-agent communication.
|
|
10
|
-
- **`protocol/`:** The underlying implementation of the A2A (Agent-to-Agent) communication protocol, handling message routing and event processing.
|
|
11
|
-
- **`utils/`:** A collection of helper modules for common tasks like artifact management, configuration parsing, and context handling.
|
|
12
|
-
- **`testing/`:** Utilities to aid in debugging and testing custom agent implementations.
|
|
13
|
-
|
|
14
|
-
These components work together to create a robust environment where an ADK agent can be configured with specific instructions and tools, communicate with other agents, and execute complex tasks in a distributed, event-driven manner.
|
|
15
|
-
|
|
16
|
-
## Files and Subdirectories Overview
|
|
17
|
-
- **Direct files:**
|
|
18
|
-
- `__init__.py`: Standard Python package initializer that marks the `agent` directory as a Python package
|
|
19
|
-
- `agent_llm.txt`: Documentation file containing comprehensive developer guide content
|
|
20
|
-
- **Subdirectories:**
|
|
21
|
-
- `adk/`: Provides the core integration layer with Google's ADK, including custom agents, services, and callbacks
|
|
22
|
-
- `protocol/`: Implements the A2A protocol event handlers for message routing and agent communication
|
|
23
|
-
- `sac/`: Contains the Solace AI Connector app and component implementations for hosting ADK agents
|
|
24
|
-
- `testing/`: Provides utilities for testing the A2A framework and debugging agent behavior
|
|
25
|
-
- `tools/`: A comprehensive, registry-based tool library for AI agents
|
|
26
|
-
- `utils/`: Contains helper utilities for configuration, context handling, and artifact management
|
|
27
|
-
|
|
28
|
-
## Developer API Reference
|
|
29
|
-
|
|
30
|
-
### Direct Files
|
|
31
|
-
|
|
32
|
-
#### __init__.py
|
|
33
|
-
**Purpose:** Standard Python package initializer. It allows the `agent` directory to be treated as a package.
|
|
34
|
-
**Import:** `import solace_agent_mesh.agent`
|
|
35
|
-
|
|
36
|
-
**Classes/Functions/Constants:** [None - empty file]
|
|
37
|
-
|
|
38
|
-
#### agent_llm.txt
|
|
39
|
-
**Purpose:** Documentation file containing comprehensive developer guide content
|
|
40
|
-
**Import:** Not applicable - this is a documentation file, not a code module
|
|
41
|
-
|
|
42
|
-
**Classes/Functions/Constants:** [None - documentation file]
|
|
43
|
-
|
|
44
|
-
### Subdirectory APIs
|
|
45
|
-
|
|
46
|
-
#### adk/
|
|
47
|
-
**Purpose:** Provides the core integration layer between the Solace AI Connector and Google's ADK
|
|
48
|
-
**Key Exports:** `AppLlmAgent`, `initialize_adk_agent`, `initialize_adk_runner`, `load_adk_tools`, `FilesystemArtifactService`, `LiteLlm`
|
|
49
|
-
**Import Examples:**
|
|
50
|
-
```python
|
|
51
|
-
from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
|
|
52
|
-
from solace_agent_mesh.agent.adk.app_llm_agent import AppLlmAgent
|
|
53
|
-
from solace_agent_mesh.agent.adk.filesystem_artifact_service import FilesystemArtifactService
|
|
54
|
-
from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
|
|
55
|
-
from solace_agent_mesh.agent.adk.services import initialize_session_service, initialize_artifact_service
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
#### protocol/
|
|
59
|
-
**Purpose:** Implements the core logic for Agent-to-Agent (A2A) communication protocol
|
|
60
|
-
**Key Exports:** `process_event`, `handle_a2a_request`, `handle_agent_card_message`, `publish_agent_card`
|
|
61
|
-
**Import Examples:**
|
|
62
|
-
```python
|
|
63
|
-
from solace_agent_mesh.agent.protocol.event_handlers import process_event, publish_agent_card
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
#### sac/
|
|
67
|
-
**Purpose:** Provides the Solace AI Connector app and component implementations for hosting ADK agents
|
|
68
|
-
**Key Exports:** `SamAgentApp`, `SamAgentComponent`, `TaskExecutionContext`
|
|
69
|
-
**Import Examples:**
|
|
70
|
-
```python
|
|
71
|
-
from solace_agent_mesh.agent.sac.app import SamAgentApp
|
|
72
|
-
from solace_agent_mesh.agent.sac.component import SamAgentComponent
|
|
73
|
-
from solace_agent_mesh.agent.sac.task_execution_context import TaskExecutionContext
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
#### testing/
|
|
77
|
-
**Purpose:** Provides utilities for testing the A2A framework and debugging agent behavior
|
|
78
|
-
**Key Exports:** `pretty_print_event_history`
|
|
79
|
-
**Import Examples:**
|
|
80
|
-
```python
|
|
81
|
-
from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
#### tools/
|
|
85
|
-
**Purpose:** A comprehensive, registry-based tool library for AI agents
|
|
86
|
-
**Key Exports:** `tool_registry`, `BuiltinTool`, `PeerAgentTool`, and various tool functions
|
|
87
|
-
**Import Examples:**
|
|
88
|
-
```python
|
|
89
|
-
from solace_agent_mesh.agent.tools.registry import tool_registry
|
|
90
|
-
from solace_agent_mesh.agent.tools.peer_agent_tool import PeerAgentTool
|
|
91
|
-
from solace_agent_mesh.agent.tools.audio_tools import text_to_speech
|
|
92
|
-
from solace_agent_mesh.agent.tools.builtin_artifact_tools import list_artifacts, load_artifact
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
#### utils/
|
|
96
|
-
**Purpose:** Contains helper utilities for configuration, context handling, and artifact management
|
|
97
|
-
**Key Exports:** `save_artifact_with_metadata`, `load_artifact_content_or_metadata`, `resolve_instruction_provider`
|
|
98
|
-
**Import Examples:**
|
|
99
|
-
```python
|
|
100
|
-
from solace_agent_mesh.agent.utils.artifact_helpers import save_artifact_with_metadata, load_artifact_content_or_metadata
|
|
101
|
-
from solace_agent_mesh.agent.utils.config_parser import resolve_instruction_provider
|
|
102
|
-
from solace_agent_mesh.agent.utils.context_helpers import get_session_from_callback_context
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Complete Usage Guide
|
|
106
|
-
|
|
107
|
-
### 1. Basic Agent Setup and Configuration
|
|
108
|
-
|
|
109
|
-
```python
|
|
110
|
-
# Import the main SAC components
|
|
111
|
-
from solace_agent_mesh.agent.sac.app import SamAgentApp
|
|
112
|
-
from solace_agent_mesh.agent.sac.component import SamAgentComponent
|
|
113
|
-
|
|
114
|
-
# The agent is typically configured via YAML and instantiated by the SAC framework
|
|
115
|
-
# Example agent-config.yaml:
|
|
116
|
-
"""
|
|
117
|
-
app:
|
|
118
|
-
class_name: solace_agent_mesh.agent.sac.app.SamAgentApp
|
|
119
|
-
app_config:
|
|
120
|
-
namespace: "my-org/production"
|
|
121
|
-
agent_name: "customer-support-agent"
|
|
122
|
-
model: "gemini-1.5-pro-latest"
|
|
123
|
-
tools:
|
|
124
|
-
- tool_type: "builtin"
|
|
125
|
-
tool_name: "text_to_speech"
|
|
126
|
-
- tool_type: "builtin"
|
|
127
|
-
tool_name: "list_artifacts"
|
|
128
|
-
agent_card:
|
|
129
|
-
description: "An agent that can answer questions about customer accounts."
|
|
130
|
-
session_service:
|
|
131
|
-
type: "memory"
|
|
132
|
-
artifact_service:
|
|
133
|
-
type: "filesystem"
|
|
134
|
-
base_path: "/tmp/artifacts"
|
|
135
|
-
"""
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### 2. Working with ADK Components
|
|
139
|
-
|
|
140
|
-
```python
|
|
141
|
-
from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
|
|
142
|
-
from solace_agent_mesh.agent.adk.services import initialize_session_service, initialize_artifact_service
|
|
143
|
-
from solace_agent_mesh.agent.adk.models.lite_llm import LiteLlm
|
|
144
|
-
|
|
145
|
-
async def setup_adk_agent(component):
|
|
146
|
-
# Initialize services
|
|
147
|
-
session_service = initialize_session_service(component)
|
|
148
|
-
artifact_service = initialize_artifact_service(component)
|
|
149
|
-
|
|
150
|
-
# Load tools
|
|
151
|
-
loaded_tools, builtin_tools = await load_adk_tools(component)
|
|
152
|
-
|
|
153
|
-
# Initialize agent with LLM
|
|
154
|
-
agent = initialize_adk_agent(component, loaded_tools, builtin_tools)
|
|
155
|
-
|
|
156
|
-
# Initialize runner
|
|
157
|
-
runner = initialize_adk_runner(component)
|
|
158
|
-
|
|
159
|
-
return agent, runner
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### 3. Custom Tool Development
|
|
163
|
-
|
|
164
|
-
```python
|
|
165
|
-
from solace_agent_mesh.agent.tools.registry import tool_registry
|
|
166
|
-
from solace_agent_mesh.agent.tools.tool_definition import BuiltinTool
|
|
167
|
-
from google.adk.tools import ToolContext
|
|
168
|
-
|
|
169
|
-
# Define a custom tool function
|
|
170
|
-
async def my_custom_tool(
|
|
171
|
-
query: str,
|
|
172
|
-
tool_context: ToolContext = None,
|
|
173
|
-
tool_config: dict = None
|
|
174
|
-
) -> dict:
|
|
175
|
-
"""A custom tool that processes queries."""
|
|
176
|
-
# Access the host component
|
|
177
|
-
host_component = tool_context._invocation_context.agent.host_component
|
|
178
|
-
|
|
179
|
-
# Use agent state
|
|
180
|
-
db_connection = host_component.get_agent_specific_state('db_connection')
|
|
181
|
-
|
|
182
|
-
# Process the query
|
|
183
|
-
result = await process_query(query, db_connection)
|
|
184
|
-
|
|
185
|
-
return {"result": result, "status": "success"}
|
|
186
|
-
|
|
187
|
-
# Register the tool
|
|
188
|
-
custom_tool = BuiltinTool(
|
|
189
|
-
name="my_custom_tool",
|
|
190
|
-
description="Processes custom queries",
|
|
191
|
-
function=my_custom_tool,
|
|
192
|
-
category="custom"
|
|
193
|
-
)
|
|
194
|
-
tool_registry.register(custom_tool)
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### 4. Artifact Management
|
|
198
|
-
|
|
199
|
-
```python
|
|
200
|
-
from solace_agent_mesh.agent.utils.artifact_helpers import (
|
|
201
|
-
save_artifact_with_metadata,
|
|
202
|
-
load_artifact_content_or_metadata,
|
|
203
|
-
get_artifact_info_list
|
|
204
|
-
)
|
|
205
|
-
from datetime import datetime, timezone
|
|
206
|
-
|
|
207
|
-
async def artifact_operations(component, artifact_service):
|
|
208
|
-
# Save an artifact with metadata
|
|
209
|
-
content = b"Hello, world!"
|
|
210
|
-
result = await save_artifact_with_metadata(
|
|
211
|
-
artifact_service=artifact_service,
|
|
212
|
-
app_name=component.get_config()["app_name"],
|
|
213
|
-
user_id="user123",
|
|
214
|
-
session_id="session456",
|
|
215
|
-
filename="greeting.txt",
|
|
216
|
-
content_bytes=content,
|
|
217
|
-
mime_type="text/plain",
|
|
218
|
-
metadata_dict={"source": "custom_tool", "description": "A greeting"},
|
|
219
|
-
timestamp=datetime.now(timezone.utc)
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
# Load the artifact
|
|
223
|
-
loaded = await load_artifact_content_or_metadata(
|
|
224
|
-
artifact_service=artifact_service,
|
|
225
|
-
app_name=component.get_config()["app_name"],
|
|
226
|
-
user_id="user123",
|
|
227
|
-
session_id="session456",
|
|
228
|
-
filename="greeting.txt",
|
|
229
|
-
version="latest"
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
# List all artifacts
|
|
233
|
-
artifacts = await get_artifact_info_list(
|
|
234
|
-
artifact_service=artifact_service,
|
|
235
|
-
app_name=component.get_config()["app_name"],
|
|
236
|
-
user_id="user123",
|
|
237
|
-
session_id="session456"
|
|
238
|
-
)
|
|
239
|
-
|
|
240
|
-
return artifacts
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### 5. Inter-Agent Communication
|
|
244
|
-
|
|
245
|
-
```python
|
|
246
|
-
from solace_agent_mesh.agent.tools.peer_agent_tool import PeerAgentTool
|
|
247
|
-
|
|
248
|
-
# Create a peer agent tool (typically done automatically by the framework)
|
|
249
|
-
peer_tool = PeerAgentTool("data_analyst_agent", host_component)
|
|
250
|
-
|
|
251
|
-
# The LLM can then use this tool to delegate tasks:
|
|
252
|
-
# "Please use the data_analyst_agent to analyze the sales data in report.csv"
|
|
253
|
-
|
|
254
|
-
# The framework handles the A2A protocol communication automatically
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
### 6. Audio and Multimedia Tools
|
|
258
|
-
|
|
259
|
-
```python
|
|
260
|
-
from solace_agent_mesh.agent.tools.audio_tools import text_to_speech, multi_speaker_text_to_speech
|
|
261
|
-
from solace_agent_mesh.agent.tools.image_tools import create_image_from_description, describe_image
|
|
262
|
-
|
|
263
|
-
async def multimedia_example(tool_context):
|
|
264
|
-
# Generate speech from text
|
|
265
|
-
tts_result = await text_to_speech(
|
|
266
|
-
text="Welcome to our service!",
|
|
267
|
-
output_filename="welcome.mp3",
|
|
268
|
-
gender="female",
|
|
269
|
-
tone="friendly",
|
|
270
|
-
tool_context=tool_context
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
# Create a multi-speaker conversation
|
|
274
|
-
conversation_result = await multi_speaker_text_to_speech(
|
|
275
|
-
conversation_text="Alice: Hello there!\nBob: Hi Alice, how are you?",
|
|
276
|
-
speaker_configs=[
|
|
277
|
-
{"name": "Alice", "gender": "female", "tone": "bright"},
|
|
278
|
-
{"name": "Bob", "gender": "male", "tone": "warm"}
|
|
279
|
-
],
|
|
280
|
-
tool_context=tool_context
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
# Generate an image
|
|
284
|
-
image_result = await create_image_from_description(
|
|
285
|
-
image_description="A futuristic cityscape at sunset",
|
|
286
|
-
output_filename="cityscape.png",
|
|
287
|
-
tool_context=tool_context
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
return tts_result, conversation_result, image_result
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### 7. Testing and Debugging
|
|
294
|
-
|
|
295
|
-
```python
|
|
296
|
-
from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
|
|
297
|
-
from solace_agent_mesh.agent.adk.invocation_monitor import InvocationMonitor
|
|
298
|
-
|
|
299
|
-
# Debug event history in tests
|
|
300
|
-
def test_agent_behavior():
|
|
301
|
-
event_history = [
|
|
302
|
-
{"result": {"status": {"state": "EXECUTING"}}},
|
|
303
|
-
{"result": {"status": {"state": "COMPLETED"}}}
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
# Print formatted event history for debugging
|
|
307
|
-
pretty_print_event_history(event_history)
|
|
308
|
-
|
|
309
|
-
# Monitor agent invocations
|
|
310
|
-
monitor = InvocationMonitor()
|
|
311
|
-
monitor.log_message_event("incoming", "agent/request", {"task": "analyze data"})
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### 8. Configuration and Context Handling
|
|
315
|
-
|
|
316
|
-
```python
|
|
317
|
-
from solace_agent_mesh.agent.utils.config_parser import resolve_instruction_provider
|
|
318
|
-
from solace_agent_mesh.agent.utils.context_helpers import get_session_from_callback_context
|
|
319
|
-
|
|
320
|
-
# Resolve dynamic instructions
|
|
321
|
-
def setup_agent_instructions(component):
|
|
322
|
-
# Static instruction
|
|
323
|
-
static_instruction = resolve_instruction_provider(
|
|
324
|
-
component,
|
|
325
|
-
"You are a helpful customer service agent."
|
|
326
|
-
)
|
|
327
|
-
|
|
328
|
-
# Dynamic instruction function
|
|
329
|
-
def dynamic_instruction(context):
|
|
330
|
-
return f"You are assisting user {context.user_id} in session {context.session_id}"
|
|
331
|
-
|
|
332
|
-
dynamic_provider = resolve_instruction_provider(component, dynamic_instruction)
|
|
333
|
-
|
|
334
|
-
return static_instruction, dynamic_provider
|
|
335
|
-
|
|
336
|
-
# Safe context extraction in tools
|
|
337
|
-
def my_tool_with_context(tool_context):
|
|
338
|
-
session = get_session_from_callback_context(tool_context)
|
|
339
|
-
original_session_id = get_original_session_id(tool_context._invocation_context)
|
|
340
|
-
|
|
341
|
-
return {"session_id": original_session_id, "session_data": session}
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### 9. Complete Agent Implementation Example
|
|
345
|
-
|
|
346
|
-
```python
|
|
347
|
-
from solace_agent_mesh.agent.sac.app import SamAgentApp
|
|
348
|
-
from solace_agent_mesh.agent.sac.component import SamAgentComponent
|
|
349
|
-
from solace_agent_mesh.agent.adk.setup import load_adk_tools, initialize_adk_agent, initialize_adk_runner
|
|
350
|
-
from solace_agent_mesh.agent.tools.registry import tool_registry
|
|
351
|
-
from solace_agent_mesh.agent.tools.tool_definition import BuiltinTool
|
|
352
|
-
|
|
353
|
-
# Custom initialization function
|
|
354
|
-
def initialize_my_agent(host_component: SamAgentComponent, config: dict):
|
|
355
|
-
"""Custom initialization function for the agent."""
|
|
356
|
-
# Store custom state
|
|
357
|
-
host_component.set_agent_specific_state('custom_data', config.get('custom_data'))
|
|
358
|
-
|
|
359
|
-
# Set dynamic system instruction
|
|
360
|
-
def dynamic_instruction(context):
|
|
361
|
-
return f"You are a specialized agent for user {context.user_id}"
|
|
362
|
-
|
|
363
|
-
host_component.set_agent_system_instruction_callback(dynamic_instruction)
|
|
364
|
-
|
|
365
|
-
# Custom tool
|
|
366
|
-
async def my_business_tool(
|
|
367
|
-
query: str,
|
|
368
|
-
tool_context = None,
|
|
369
|
-
tool_config: dict = None
|
|
370
|
-
) -> dict:
|
|
371
|
-
"""Custom business logic tool."""
|
|
372
|
-
host_component = tool_context._invocation_context.agent.host_component
|
|
373
|
-
custom_data = host_component.get_agent_specific_state('custom_data')
|
|
374
|
-
|
|
375
|
-
# Process business logic
|
|
376
|
-
result =
|
|
377
|
-
|
|
378
|
-
# content_hash: 596f8253b415eaca3335f7660837dee9a090b3cab0b6e0a4daf92ca9a16d0123
|