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,572 +0,0 @@
|
|
|
1
|
-
# LLM Summary Detail File
|
|
2
|
-
|
|
3
|
-
This file is a concatenation of all individual *llm.txt files found in the 'utils' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
-
|
|
5
|
-
================================================================================
|
|
6
|
-
|
|
7
|
-
## Section 1: solace_agent_mesh/common/utils/embeds/embeds_llm.txt
|
|
8
|
-
|
|
9
|
-
**Source file:** `solace_agent_mesh/common/utils/embeds/embeds_llm.txt`
|
|
10
|
-
|
|
11
|
-
# DEVELOPER GUIDE: embeds
|
|
12
|
-
|
|
13
|
-
## Quick Summary
|
|
14
|
-
The `embeds` directory provides a comprehensive system for finding, parsing, and resolving embedded expressions within strings. These expressions use `«...»` syntax and can represent dynamic values like mathematical calculations, datetimes, UUIDs, or content from stored artifacts. The system supports multi-step data transformation pipelines, recursive embed resolution, and includes safety features like depth and size limits. It's designed as a core component for dynamic content generation and data processing in agent workflows.
|
|
15
|
-
|
|
16
|
-
## Files Overview
|
|
17
|
-
- `__init__.py` - Main public entry point exporting key functions and constants
|
|
18
|
-
- `constants.py` - Defines embed syntax (delimiters, separators), regex patterns, and type classifications
|
|
19
|
-
- `converter.py` - Data format conversion and serialization functions
|
|
20
|
-
- `evaluators.py` - Specific evaluation logic for simple embed types (math, datetime, uuid, etc.)
|
|
21
|
-
- `modifiers.py` - Data transformation functions that can be chained together (jsonpath, slice, grep, etc.)
|
|
22
|
-
- `resolver.py` - Core orchestration engine handling embed resolution, modifier chains, and recursion
|
|
23
|
-
- `types.py` - DataFormat enum for tracking data types during transformations
|
|
24
|
-
|
|
25
|
-
## Developer API Reference
|
|
26
|
-
|
|
27
|
-
### __init__.py
|
|
28
|
-
**Purpose:** Main public entry point that exports the most commonly used functions and constants from other modules.
|
|
29
|
-
|
|
30
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX`
|
|
31
|
-
|
|
32
|
-
**Functions:**
|
|
33
|
-
- `evaluate_embed(embed_type: str, expression: str, format_spec: Optional[str], context: Dict[str, Any], log_identifier: str, config: Optional[Dict] = None, current_depth: int = 0, visited_artifacts: Optional[Set[Tuple[str, int]]] = None) -> Union[Tuple[str, Optional[str], int], Tuple[None, str, Any]]` - Evaluates a single parsed embed expression
|
|
34
|
-
- `resolve_embeds_in_string(text: str, context: Any, resolver_func: Callable, types_to_resolve: Set[str], log_identifier: str = "[EmbedUtil]", config: Optional[Dict[str, Any]] = None) -> Tuple[str, int, List[Tuple[int, Any]]]` - Resolves embeds in a string for a single pass (non-recursive)
|
|
35
|
-
- `resolve_embeds_recursively_in_string(text: str, context: Any, resolver_func: Callable, types_to_resolve: Set[str], log_identifier: str, config: Optional[Dict], max_depth: int, current_depth: int = 0, visited_artifacts: Optional[Set[Tuple[str, int]]] = None, accumulated_size: int = 0, max_total_size: int = -1) -> str` - Recursively resolves all embeds in a string with depth and size limits
|
|
36
|
-
|
|
37
|
-
**Constants/Variables:**
|
|
38
|
-
- `EMBED_DELIMITER_OPEN: str` - Opening delimiter (`«`)
|
|
39
|
-
- `EMBED_DELIMITER_CLOSE: str` - Closing delimiter (`»`)
|
|
40
|
-
- `EMBED_TYPE_SEPARATOR: str` - Type/expression separator (`:`)
|
|
41
|
-
- `EMBED_FORMAT_SEPARATOR: str` - Format specifier separator (`|`)
|
|
42
|
-
- `EMBED_CHAIN_DELIMITER: str` - Modifier chain separator (`>>>`)
|
|
43
|
-
- `EMBED_REGEX: re.Pattern` - Compiled regex for finding embeds
|
|
44
|
-
- `EARLY_EMBED_TYPES: Set[str]` - Types resolved in initial pass
|
|
45
|
-
- `LATE_EMBED_TYPES: Set[str]` - Types resolved in subsequent pass
|
|
46
|
-
|
|
47
|
-
**Usage Examples:**
|
|
48
|
-
```python
|
|
49
|
-
from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX
|
|
50
|
-
|
|
51
|
-
# Basic embed resolution
|
|
52
|
-
context = {
|
|
53
|
-
"artifact_service": my_artifact_service,
|
|
54
|
-
"session_context": {"app_name": "myapp", "user_id": "user123", "session_id": "sess456"}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
text = "The result is «math:10 * 1.15 | .2f» and ID is «uuid:new»"
|
|
58
|
-
resolved = await resolve_embeds_recursively_in_string(
|
|
59
|
-
text=text,
|
|
60
|
-
context=context,
|
|
61
|
-
resolver_func=evaluate_embed,
|
|
62
|
-
types_to_resolve={"math", "uuid"},
|
|
63
|
-
log_identifier="[MyApp]",
|
|
64
|
-
config={},
|
|
65
|
-
max_depth=5
|
|
66
|
-
)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### constants.py
|
|
70
|
-
**Purpose:** Defines all static constants governing embed syntax and classification.
|
|
71
|
-
|
|
72
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX, EARLY_EMBED_TYPES`
|
|
73
|
-
|
|
74
|
-
**Constants/Variables:**
|
|
75
|
-
- `EMBED_DELIMITER_OPEN: str` - Opening delimiter (`«`)
|
|
76
|
-
- `EMBED_DELIMITER_CLOSE: str` - Closing delimiter (`»`)
|
|
77
|
-
- `EMBED_TYPE_SEPARATOR: str` - Type/expression separator (`:`)
|
|
78
|
-
- `EMBED_FORMAT_SEPARATOR: str` - Format specifier separator (`|`)
|
|
79
|
-
- `EMBED_CHAIN_DELIMITER: str` - Modifier chain separator (`>>>`)
|
|
80
|
-
- `EMBED_REGEX: re.Pattern` - Compiled regex with capture groups for type, expression, and format
|
|
81
|
-
- `EARLY_EMBED_TYPES: Set[str]` - Simple embed types resolved first (`math`, `datetime`, `uuid`, `artifact_meta`, `status_update`)
|
|
82
|
-
- `LATE_EMBED_TYPES: Set[str]` - Complex embed types resolved later (`artifact_content`)
|
|
83
|
-
- `TEXT_CONTAINER_MIME_TYPES: Set[str]` - MIME types considered text-based
|
|
84
|
-
|
|
85
|
-
**Usage Examples:**
|
|
86
|
-
```python
|
|
87
|
-
from solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX
|
|
88
|
-
|
|
89
|
-
text = "Price: «math:10 * 1.15 | .2f» ID: «uuid:new»"
|
|
90
|
-
for match in EMBED_REGEX.finditer(text):
|
|
91
|
-
embed_type = match.group(1) # "math" or "uuid"
|
|
92
|
-
expression = match.group(2) # "10 * 1.15 " or "new"
|
|
93
|
-
format_spec = match.group(3) # " .2f" or None
|
|
94
|
-
print(f"Type: {embed_type}, Expr: '{expression}', Format: '{format_spec}'")
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### converter.py
|
|
98
|
-
**Purpose:** Provides data conversion between different formats and serialization to final string representations.
|
|
99
|
-
|
|
100
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data`
|
|
101
|
-
|
|
102
|
-
**Functions:**
|
|
103
|
-
- `convert_data(current_data: Any, current_format: Optional[DataFormat], target_format: DataFormat, log_id: str = "[Converter]", original_mime_type: Optional[str] = None) -> Tuple[Any, DataFormat, Optional[str]]` - Converts data between DataFormat types using MIME type hints
|
|
104
|
-
- `serialize_data(data: Any, data_format: Optional[DataFormat], target_string_format: Optional[str], original_mime_type: Optional[str], log_id: str = "[Serializer]") -> Tuple[str, Optional[str]]` - Serializes data to final string format (text, json, csv, datauri, or Python format specs)
|
|
105
|
-
|
|
106
|
-
**Usage Examples:**
|
|
107
|
-
```python
|
|
108
|
-
from solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data
|
|
109
|
-
from solace_agent_mesh.common.utils.embeds.types import DataFormat
|
|
110
|
-
|
|
111
|
-
# Convert CSV bytes to list of dictionaries
|
|
112
|
-
csv_bytes = b"id,name\n1,Alice\n2,Bob"
|
|
113
|
-
list_data, new_format, err = convert_data(
|
|
114
|
-
current_data=csv_bytes,
|
|
115
|
-
current_format=DataFormat.BYTES,
|
|
116
|
-
target_format=DataFormat.LIST_OF_DICTS,
|
|
117
|
-
original_mime_type="text/csv"
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
# Serialize to pretty JSON
|
|
121
|
-
json_str, err = serialize_data(
|
|
122
|
-
data=list_data,
|
|
123
|
-
data_format=DataFormat.LIST_OF_DICTS,
|
|
124
|
-
target_string_format="json_pretty",
|
|
125
|
-
original_mime_type=None
|
|
126
|
-
)
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### evaluators.py
|
|
130
|
-
**Purpose:** Contains evaluation logic for simple embed types and the evaluator registry.
|
|
131
|
-
|
|
132
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.evaluators import EMBED_EVALUATORS`
|
|
133
|
-
|
|
134
|
-
**Functions:**
|
|
135
|
-
- `_evaluate_math_embed(expression: str, context: Any, log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Evaluates mathematical expressions using asteval
|
|
136
|
-
- `_evaluate_datetime_embed(expression: str, context: Any, log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Formats current datetime
|
|
137
|
-
- `_evaluate_uuid_embed(expression: str, context: Any, log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Generates UUID4 strings
|
|
138
|
-
- `_evaluate_artifact_meta_embed(expression: str, context: Dict[str, Any], log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Loads and formats artifact metadata
|
|
139
|
-
- `_evaluate_artifact_content_embed(expression: str, context: Any, log_identifier: str, config: Optional[Dict] = None) -> Tuple[Optional[bytes], Optional[str], Optional[str]]` - Loads raw artifact content
|
|
140
|
-
|
|
141
|
-
**Constants/Variables:**
|
|
142
|
-
- `EMBED_EVALUATORS: Dict[str, Callable]` - Registry mapping embed types to evaluator functions
|
|
143
|
-
- `MATH_SAFE_SYMBOLS: Dict[str, Any]` - Safe mathematical functions and constants for math embeds
|
|
144
|
-
|
|
145
|
-
**Usage Examples:**
|
|
146
|
-
```python
|
|
147
|
-
from solace_agent_mesh.common.utils.embeds.evaluators import EMBED_EVALUATORS
|
|
148
|
-
|
|
149
|
-
# Math evaluation
|
|
150
|
-
result, error, size = EMBED_EVALUATORS["math"]("2 + 3 * 4", {}, "[Test]", ".2f")
|
|
151
|
-
# result: "14.00", error: None, size: 5
|
|
152
|
-
|
|
153
|
-
# DateTime formatting
|
|
154
|
-
result, error, size = EMBED_EVALUATORS["datetime"]("%Y-%m-%d", {}, "[Test]")
|
|
155
|
-
# result: "2024-01-15", error: None, size: 10
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### modifiers.py
|
|
159
|
-
**Purpose:** Implements data transformation functions that can be chained together in artifact_content embeds.
|
|
160
|
-
|
|
161
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.modifiers import MODIFIER_DEFINITIONS, _parse_modifier_chain`
|
|
162
|
-
|
|
163
|
-
**Functions:**
|
|
164
|
-
- `_apply_jsonpath(current_data: Any, expression: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Applies JSONPath expressions to JSON data
|
|
165
|
-
- `_apply_select_cols(current_data: List[Dict], cols_str: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Selects specific columns from tabular data
|
|
166
|
-
- `_apply_filter_rows_eq(current_data: List[Dict], filter_spec: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Filters rows by column value equality
|
|
167
|
-
- `_apply_slice_rows(current_data: List[Dict], slice_spec: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Slices rows using Python slice notation
|
|
168
|
-
- `_apply_slice_lines(current_data: str, slice_spec: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Slices text lines
|
|
169
|
-
- `_apply_grep(current_data: str, pattern: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Filters lines matching regex pattern
|
|
170
|
-
- `_apply_head(current_data: str, n_str: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Returns first N lines
|
|
171
|
-
- `_apply_tail(current_data: str, n_str: str, mime_type: Optional[str], log_id: str) -> Tuple[Any, Optional[str], Optional[str]]` - Returns last N lines
|
|
172
|
-
- `_apply_template(current_data: Any, template_spec: str, mime_type: Optional[str], log_id: str, context: Any) -> Tuple[Any, Optional[str], Optional[str]]` - Applies Mustache templates from artifacts
|
|
173
|
-
- `_parse_modifier_chain(expression: str) -> Tuple[str, List[Tuple[str, str]], Optional[str]]` - Parses artifact_content expression into components
|
|
174
|
-
|
|
175
|
-
**Constants/Variables:**
|
|
176
|
-
- `MODIFIER_IMPLEMENTATIONS: Dict[str, Callable]` - Registry of modifier functions
|
|
177
|
-
- `MODIFIER_DEFINITIONS: Dict[str, Dict[str, Any]]` - Modifier metadata including accepted/produced formats
|
|
178
|
-
|
|
179
|
-
**Usage Examples:**
|
|
180
|
-
```python
|
|
181
|
-
from solace_agent_mesh.common.utils.embeds.modifiers import _parse_modifier_chain
|
|
182
|
-
|
|
183
|
-
# Parse a complex artifact_content expression
|
|
184
|
-
expression = "data.csv:1 >>> select_cols:name,age >>> filter_rows_eq:age:25 >>> format:json"
|
|
185
|
-
artifact_spec, modifiers, output_format = _parse_modifier_chain(expression)
|
|
186
|
-
# artifact_spec: "data.csv:1"
|
|
187
|
-
# modifiers: [("select_cols", "name,age"), ("filter_rows_eq", "age:25")]
|
|
188
|
-
# output_format: "json"
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### resolver.py
|
|
192
|
-
**Purpose:** Core orchestration engine that handles the complete embed resolution process including modifier chains and recursion.
|
|
193
|
-
|
|
194
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.resolver import resolve_embeds_in_string, evaluate_embed`
|
|
195
|
-
|
|
196
|
-
**Functions:**
|
|
197
|
-
- `resolve_embeds_in_string(text: str, context: Any, resolver_func: Callable, types_to_resolve: Set[str], log_identifier: str = "[EmbedUtil]", config: Optional[Dict[str, Any]] = None) -> Tuple[str, int, List[Tuple[int, Any]]]` - Single-pass embed resolution with buffering support
|
|
198
|
-
- `resolve_embeds_recursively_in_string(text: str, context: Any, resolver_func: Callable, types_to_resolve: Set[str], log_identifier: str, config: Optional[Dict], max_depth: int, current_depth: int = 0, visited_artifacts: Optional[Set[Tuple[str, int]]] = None, accumulated_size: int = 0, max_total_size: int = -1) -> str` - Recursive embed resolution with safety limits
|
|
199
|
-
- `evaluate_embed(embed_type: str, expression: str, format_spec: Optional[str], context: Dict[str, Any], log_identifier: str, config: Optional[Dict] = None, current_depth: int = 0, visited_artifacts: Optional[Set[Tuple[str, int]]] = None) -> Union[Tuple[str, Optional[str], int], Tuple[None, str, Any]]` - Main embed evaluation dispatcher
|
|
200
|
-
|
|
201
|
-
**Usage Examples:**
|
|
202
|
-
```python
|
|
203
|
-
from solace_agent_mesh.common.utils.embeds.resolver import resolve_embeds_in_string, evaluate_embed
|
|
204
|
-
|
|
205
|
-
# Single-pass resolution
|
|
206
|
-
text = "Result: «math:2+3» and «uuid:new»"
|
|
207
|
-
context = {"artifact_service": service, "session_context": session_ctx}
|
|
208
|
-
|
|
209
|
-
resolved_text, processed_index, signals = await resolve_embeds_in_string(
|
|
210
|
-
text=text,
|
|
211
|
-
context=context,
|
|
212
|
-
resolver_func=evaluate_embed,
|
|
213
|
-
types_to_resolve={"math", "uuid"},
|
|
214
|
-
log_identifier="[MyApp]",
|
|
215
|
-
config={}
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
# Complex artifact content with modifiers
|
|
219
|
-
result, error, size = await evaluate_embed(
|
|
220
|
-
embed_type="artifact_content",
|
|
221
|
-
expression="sales.csv >>> select_cols:product,revenue >>> format:json",
|
|
222
|
-
format_spec=None,
|
|
223
|
-
context=context,
|
|
224
|
-
log_identifier="[Sales]"
|
|
225
|
-
)
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### types.py
|
|
229
|
-
|
|
230
|
-
================================================================================
|
|
231
|
-
|
|
232
|
-
## Section 2: solace_agent_mesh/common/utils/utils_llm.txt
|
|
233
|
-
|
|
234
|
-
**Source file:** `solace_agent_mesh/common/utils/utils_llm.txt`
|
|
235
|
-
|
|
236
|
-
## Quick Summary
|
|
237
|
-
The `utils` directory provides essential utility functions and tools for the Solace Agent Mesh system. It contains both direct utility files for common operations (MIME type handling, caching, message validation, authentication) and a sophisticated `embeds` subdirectory that implements a dynamic expression evaluation system. The utilities work together to provide platform compatibility, security features, data processing capabilities, and dynamic content generation for agent workflows.
|
|
238
|
-
|
|
239
|
-
## Files and Subdirectories Overview
|
|
240
|
-
|
|
241
|
-
### Direct Files:
|
|
242
|
-
- **`__init__.py`** - Main entry point exporting commonly used utilities like MIME type checking
|
|
243
|
-
- **`artifact_utils.py`** - Utilities for working with ADK artifacts, including version resolution
|
|
244
|
-
- **`asyncio_macos_fix.py`** - Automatic fix for asyncio subprocess issues on macOS
|
|
245
|
-
- **`in_memory_cache.py`** - Thread-safe singleton cache with TTL support
|
|
246
|
-
- **`initializer.py`** - Enterprise feature initialization and configuration loading
|
|
247
|
-
- **`log_formatters.py`** - Custom logging formatters for platforms like Datadog
|
|
248
|
-
- **`message_utils.py`** - Message size calculation and validation utilities
|
|
249
|
-
- **`mime_helpers.py`** - MIME type classification and file extension utilities
|
|
250
|
-
- **`push_notification_auth.py`** - JWT-based authentication for push notifications
|
|
251
|
-
- **`pydantic_utils.py`** - Pydantic BaseModel with dict-like access for configuration
|
|
252
|
-
- **`type_utils.py`** - Robust type checking utilities for development environments
|
|
253
|
-
|
|
254
|
-
### Subdirectories:
|
|
255
|
-
- **`embeds/`** - Dynamic expression evaluation system using `«...»` syntax for mathematical calculations, datetime formatting, UUID generation, and artifact content processing
|
|
256
|
-
|
|
257
|
-
## Developer API Reference
|
|
258
|
-
|
|
259
|
-
### Direct Files
|
|
260
|
-
|
|
261
|
-
#### __init__.py
|
|
262
|
-
**Purpose:** Main entry point for the utils package, exporting the most commonly used utility functions
|
|
263
|
-
**Import:** `from solace_agent_mesh.common.utils import is_text_based_mime_type`
|
|
264
|
-
|
|
265
|
-
**Functions:**
|
|
266
|
-
- `is_text_based_mime_type(mime_type: Optional[str]) -> bool` - Checks if a MIME type represents text-based content
|
|
267
|
-
|
|
268
|
-
#### artifact_utils.py
|
|
269
|
-
**Purpose:** Common utility functions for working with ADK artifacts
|
|
270
|
-
**Import:** `from solace_agent_mesh.common.utils.artifact_utils import get_latest_artifact_version`
|
|
271
|
-
|
|
272
|
-
**Functions:**
|
|
273
|
-
- `get_latest_artifact_version(artifact_service: BaseArtifactService, app_name: str, user_id: str, session_id: str, filename: str) -> Optional[int]` - Resolves the latest version number for a given artifact
|
|
274
|
-
|
|
275
|
-
#### asyncio_macos_fix.py
|
|
276
|
-
**Purpose:** Automatic fix for asyncio subprocess creation issues on macOS (imported for side effects)
|
|
277
|
-
**Import:** `from solace_agent_mesh.common.utils import asyncio_macos_fix`
|
|
278
|
-
|
|
279
|
-
**Functions:**
|
|
280
|
-
- `apply_macos_asyncio_fix() -> bool` - Applies the asyncio fix for macOS subprocess support
|
|
281
|
-
- `ensure_asyncio_compatibility() -> bool` - Ensures asyncio compatibility for subprocess creation
|
|
282
|
-
|
|
283
|
-
#### in_memory_cache.py
|
|
284
|
-
**Purpose:** Thread-safe singleton in-memory cache with TTL support
|
|
285
|
-
**Import:** `from solace_agent_mesh.common.utils.in_memory_cache import InMemoryCache`
|
|
286
|
-
|
|
287
|
-
**Classes:**
|
|
288
|
-
- **`InMemoryCache`** - Singleton cache class
|
|
289
|
-
- `set(key: str, value: Any, ttl: Optional[int] = None) -> None` - Store value with optional TTL
|
|
290
|
-
- `get(key: str, default: Any = None) -> Any` - Retrieve value or default
|
|
291
|
-
- `delete(key: str) -> bool` - Delete specific key
|
|
292
|
-
- `clear() -> bool` - Clear all cached data
|
|
293
|
-
|
|
294
|
-
#### initializer.py
|
|
295
|
-
**Purpose:** Handles initialization of enterprise features if available
|
|
296
|
-
**Import:** `from solace_agent_mesh.common.utils.initializer import initialize`
|
|
297
|
-
|
|
298
|
-
**Functions:**
|
|
299
|
-
- `initialize() -> None` - Initializes enterprise features using SAM_AUTHORIZATION_CONFIG environment variable
|
|
300
|
-
|
|
301
|
-
#### log_formatters.py
|
|
302
|
-
**Purpose:** Custom logging formatters for structured output
|
|
303
|
-
**Import:** `from solace_agent_mesh.common.utils.log_formatters import DatadogJsonFormatter`
|
|
304
|
-
|
|
305
|
-
**Classes:**
|
|
306
|
-
- **`DatadogJsonFormatter(logging.Formatter)`** - JSON formatter with Datadog-compatible attributes including trace IDs
|
|
307
|
-
|
|
308
|
-
#### message_utils.py
|
|
309
|
-
**Purpose:** Message size calculation and validation utilities
|
|
310
|
-
**Import:** `from solace_agent_mesh.common.utils.message_utils import calculate_message_size, validate_message_size`
|
|
311
|
-
|
|
312
|
-
**Functions:**
|
|
313
|
-
- `calculate_message_size(payload: Dict[str, Any]) -> int` - Calculate exact message size using JSON + UTF-8 encoding
|
|
314
|
-
- `validate_message_size(payload: Dict[str, Any], max_size_bytes: int, component_identifier: str = "Unknown") -> Tuple[bool, int]` - Validate message doesn't exceed size limits
|
|
315
|
-
|
|
316
|
-
**Constants:**
|
|
317
|
-
- `MAX_UTF8_BYTES_PER_CHARACTER: int` - Maximum UTF-8 bytes per character (4)
|
|
318
|
-
|
|
319
|
-
#### mime_helpers.py
|
|
320
|
-
**Purpose:** MIME type classification and file extension utilities
|
|
321
|
-
**Import:** `from solace_agent_mesh.common.utils.mime_helpers import is_text_based_mime_type, get_extension_for_mime_type, is_text_based_file`
|
|
322
|
-
|
|
323
|
-
**Functions:**
|
|
324
|
-
- `is_text_based_mime_type(mime_type: Optional[str]) -> bool` - Check if MIME type is text-based
|
|
325
|
-
- `is_text_based_file(mime_type: Optional[str], content_bytes: Optional[bytes] = None) -> bool` - Determine if file is text-based using MIME type and content analysis
|
|
326
|
-
- `get_extension_for_mime_type(mime_type: Optional[str], default_extension: str = ".dat") -> str` - Get file extension for MIME type
|
|
327
|
-
|
|
328
|
-
**Constants:**
|
|
329
|
-
- `TEXT_CONTAINER_MIME_TYPES: Set[str]` - Set of non-text/* MIME types that contain text
|
|
330
|
-
|
|
331
|
-
#### push_notification_auth.py
|
|
332
|
-
**Purpose:** JWT-based authentication for push notifications with request integrity verification
|
|
333
|
-
**Import:** `from solace_agent_mesh.common.utils.push_notification_auth import PushNotificationSenderAuth, PushNotificationReceiverAuth`
|
|
334
|
-
|
|
335
|
-
**Classes:**
|
|
336
|
-
- **`PushNotificationSenderAuth`** - Handles sending authenticated notifications
|
|
337
|
-
- `generate_jwk() -> None` - Generate RSA key pair for signing
|
|
338
|
-
- `handle_jwks_endpoint(request: Request) -> JSONResponse` - Serve public keys endpoint
|
|
339
|
-
- `send_push_notification(url: str, data: dict[str, Any]) -> None` - Send authenticated notification
|
|
340
|
-
- `verify_push_notification_url(url: str) -> bool` - Verify notification URL
|
|
341
|
-
- **`PushNotificationReceiverAuth`** - Handles receiving and verifying notifications
|
|
342
|
-
- `load_jwks(jwks_url: str) -> None` - Load public keys from JWKS endpoint
|
|
343
|
-
- `verify_push_notification(request: Request) -> bool` - Verify notification authenticity
|
|
344
|
-
|
|
345
|
-
#### pydantic_utils.py
|
|
346
|
-
**Purpose:** Provides a Pydantic BaseModel for SAM configuration with dict-like access
|
|
347
|
-
**Import:** `from solace_agent_mesh.common.utils.pydantic_utils import SamConfigBase`
|
|
348
|
-
|
|
349
|
-
**Classes:**
|
|
350
|
-
- **`SamConfigBase(BaseModel)`** - Pydantic BaseModel with dict-like access
|
|
351
|
-
- `model_validate_and_clean(cls: Type[T], obj: Any) -> T` - Validates dict after removing None values
|
|
352
|
-
- `get(key: str, default: Any = None) -> Any` - Dict-like .get() method
|
|
353
|
-
- `__getitem__(key: str) -> Any` - Dict-like ['key'] access
|
|
354
|
-
- `__setitem__(key: str, value: Any)` - Dict-like ['key'] = value assignment
|
|
355
|
-
- `__contains__(key: str) -> bool` - Dict-like 'in' support
|
|
356
|
-
- `keys()`, `values()`, `items()`, `__iter__()` - Dict-like iteration methods
|
|
357
|
-
|
|
358
|
-
#### type_utils.py
|
|
359
|
-
**Purpose:** Utilities for robust type checking, especially in development environments
|
|
360
|
-
**Import:** `from solace_agent_mesh.common.utils.type_utils import is_subclass_by_name`
|
|
361
|
-
|
|
362
|
-
**Functions:**
|
|
363
|
-
- `is_subclass_by_name(cls_to_check: type, base_class_name: str) -> bool` - Checks if a class is a subclass by looking for the base class name in the MRO
|
|
364
|
-
|
|
365
|
-
### Subdirectory APIs
|
|
366
|
-
|
|
367
|
-
#### embeds/
|
|
368
|
-
**Purpose:** Comprehensive dynamic expression evaluation system using `«...»` syntax for mathematical calculations, datetime formatting, UUID generation, and artifact content processing with transformation pipelines
|
|
369
|
-
**Key Exports:** Main resolution functions, evaluator registry, modifier system, and type constants
|
|
370
|
-
**Import Examples:**
|
|
371
|
-
```python
|
|
372
|
-
from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX
|
|
373
|
-
from solace_agent_mesh.common.utils.embeds.constants import EARLY_EMBED_TYPES, LATE_EMBED_TYPES
|
|
374
|
-
from solace_agent_mesh.common.utils.embeds.types import DataFormat
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
## Complete Usage Guide
|
|
378
|
-
|
|
379
|
-
### 1. Basic Utility Operations
|
|
380
|
-
|
|
381
|
-
```python
|
|
382
|
-
# Import commonly used utilities
|
|
383
|
-
from solace_agent_mesh.common.utils import is_text_based_mime_type
|
|
384
|
-
from solace_agent_mesh.common.utils.in_memory_cache import InMemoryCache
|
|
385
|
-
from solace_agent_mesh.common.utils.message_utils import validate_message_size, calculate_message_size
|
|
386
|
-
from solace_agent_mesh.common.utils.mime_helpers import get_extension_for_mime_type, is_text_based_file
|
|
387
|
-
|
|
388
|
-
# MIME type checking
|
|
389
|
-
if is_text_based_mime_type("application/json"):
|
|
390
|
-
print("JSON is text-based")
|
|
391
|
-
|
|
392
|
-
# File analysis with content
|
|
393
|
-
with open("data.bin", "rb") as f:
|
|
394
|
-
content = f.read()
|
|
395
|
-
if is_text_based_file("application/octet-stream", content):
|
|
396
|
-
print("File contains text despite binary MIME type")
|
|
397
|
-
|
|
398
|
-
# Singleton cache usage
|
|
399
|
-
cache = InMemoryCache()
|
|
400
|
-
cache.set("user_session", {"user_id": "123", "role": "admin"}, ttl=3600) # 1 hour TTL
|
|
401
|
-
session_data = cache.get("user_session", {})
|
|
402
|
-
|
|
403
|
-
# Message size validation
|
|
404
|
-
payload = {"message": "Hello world", "data": [1, 2, 3], "metadata": {"timestamp": "2024-01-15"}}
|
|
405
|
-
is_valid, size = validate_message_size(payload, max_size_bytes=1024, component_identifier="MessageProcessor")
|
|
406
|
-
if not is_valid:
|
|
407
|
-
print(f"Message too large: {size} bytes exceeds 1024 byte limit")
|
|
408
|
-
|
|
409
|
-
# Get appropriate file extension
|
|
410
|
-
extension = get_extension_for_mime_type("image/png") # Returns ".png"
|
|
411
|
-
filename = f"image_{uuid.uuid4()}{extension}"
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
### 2. Configuration and Type Utilities
|
|
415
|
-
|
|
416
|
-
```python
|
|
417
|
-
from solace_agent_mesh.common.utils.pydantic_utils import SamConfigBase
|
|
418
|
-
from solace_agent_mesh.common.utils.type_utils import is_subclass_by_name
|
|
419
|
-
from pydantic import Field
|
|
420
|
-
from typing import Optional
|
|
421
|
-
|
|
422
|
-
# Define configuration with Pydantic validation and dict-like access
|
|
423
|
-
class AgentConfig(SamConfigBase):
|
|
424
|
-
name: str
|
|
425
|
-
timeout: int = 30
|
|
426
|
-
debug: bool = False
|
|
427
|
-
api_key: Optional[str] = None
|
|
428
|
-
|
|
429
|
-
# Load config from YAML/dict with None value cleaning
|
|
430
|
-
config_dict = {
|
|
431
|
-
"name": "my_agent",
|
|
432
|
-
"timeout": None, # Will use default value of 30
|
|
433
|
-
"debug": True,
|
|
434
|
-
"api_key": None # Will use default value of None
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
config = AgentConfig.model_validate_and_clean(config_dict)
|
|
438
|
-
|
|
439
|
-
# Use both Pydantic and dict-style access
|
|
440
|
-
print(config.name) # Pydantic style: "my_agent"
|
|
441
|
-
print(config["timeout"]) # Dict style: 30 (default applied)
|
|
442
|
-
print(config.get("debug", False)) # Dict .get(): True
|
|
443
|
-
|
|
444
|
-
# Check if field was explicitly set
|
|
445
|
-
if "api_key" in config:
|
|
446
|
-
print("API key was provided")
|
|
447
|
-
else:
|
|
448
|
-
print("API key not provided, using default")
|
|
449
|
-
|
|
450
|
-
# Robust type checking for development
|
|
451
|
-
class BaseAgent:
|
|
452
|
-
pass
|
|
453
|
-
|
|
454
|
-
class MyAgent(BaseAgent):
|
|
455
|
-
pass
|
|
456
|
-
|
|
457
|
-
# This works even if BaseAgent is loaded from different paths
|
|
458
|
-
if is_subclass_by_name(MyAgent, "BaseAgent"):
|
|
459
|
-
print("MyAgent is a BaseAgent subclass")
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
### 3. Platform Compatibility and System Initialization
|
|
463
|
-
|
|
464
|
-
```python
|
|
465
|
-
# Early in application startup - import for side effects
|
|
466
|
-
from solace_agent_mesh.common.utils import asyncio_macos_fix # Auto-applies macOS fix
|
|
467
|
-
from solace_agent_mesh.common.utils.initializer import initialize
|
|
468
|
-
|
|
469
|
-
# Initialize enterprise features if available
|
|
470
|
-
try:
|
|
471
|
-
initialize()
|
|
472
|
-
print("Enterprise features initialized")
|
|
473
|
-
except Exception as e:
|
|
474
|
-
print(f"Running in community mode: {e}")
|
|
475
|
-
|
|
476
|
-
# Now asyncio subprocess creation works reliably on macOS
|
|
477
|
-
import asyncio
|
|
478
|
-
|
|
479
|
-
async def run_command(cmd: str):
|
|
480
|
-
process = await asyncio.create_subprocess_exec(
|
|
481
|
-
*cmd.split(),
|
|
482
|
-
stdout=asyncio.subprocess.PIPE,
|
|
483
|
-
stderr=asyncio.subprocess.PIPE
|
|
484
|
-
)
|
|
485
|
-
stdout, stderr = await process.communicate()
|
|
486
|
-
return stdout.decode(), stderr.decode(), process.returncode
|
|
487
|
-
|
|
488
|
-
# This will work on macOS without NotImplementedError
|
|
489
|
-
result = await run_command("echo Hello World")
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
### 4. Structured Logging Setup
|
|
493
|
-
|
|
494
|
-
```python
|
|
495
|
-
import logging
|
|
496
|
-
import os
|
|
497
|
-
from solace_agent_mesh.common.utils.log_formatters import DatadogJsonFormatter
|
|
498
|
-
|
|
499
|
-
# Configure structured JSON logging
|
|
500
|
-
logger = logging.getLogger("my_application")
|
|
501
|
-
handler = logging.StreamHandler()
|
|
502
|
-
handler.setFormatter(DatadogJsonFormatter())
|
|
503
|
-
logger.addHandler(handler)
|
|
504
|
-
logger.setLevel(logging.INFO)
|
|
505
|
-
|
|
506
|
-
# Set service name for Datadog
|
|
507
|
-
os.environ["SERVICE_NAME"] = "my_agent_service"
|
|
508
|
-
|
|
509
|
-
# Log with structured data - automatically includes trace IDs if available
|
|
510
|
-
logger.info("User action completed", extra={
|
|
511
|
-
"user_id": "user123",
|
|
512
|
-
"action": "file_upload",
|
|
513
|
-
"file_size": 1024,
|
|
514
|
-
"dd.trace_id": "abc123" # Will be included in JSON output
|
|
515
|
-
})
|
|
516
|
-
|
|
517
|
-
# Output will be JSON with timestamp, level, service, code location, etc.
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### 5. Secure Push Notification System
|
|
521
|
-
|
|
522
|
-
```python
|
|
523
|
-
from solace_agent_mesh.common.utils.push_notification_auth import (
|
|
524
|
-
PushNotificationSenderAuth,
|
|
525
|
-
PushNotificationReceiverAuth
|
|
526
|
-
)
|
|
527
|
-
from starlette.applications import Starlette
|
|
528
|
-
from starlette.requests import Request
|
|
529
|
-
from starlette.responses import Response, JSONResponse
|
|
530
|
-
|
|
531
|
-
# Sender setup and usage
|
|
532
|
-
sender_auth = PushNotificationSenderAuth()
|
|
533
|
-
sender_auth.generate_jwk() # Generate RSA key pair
|
|
534
|
-
|
|
535
|
-
async def notify_clients(event_data: dict):
|
|
536
|
-
client_urls = ["https://client1.example.com/webhook", "https://client2.example.com/webhook"]
|
|
537
|
-
|
|
538
|
-
for url in client_urls:
|
|
539
|
-
# Verify URL accepts notifications
|
|
540
|
-
if await sender_auth.verify_push_notification_url(url):
|
|
541
|
-
# Send authenticated notification
|
|
542
|
-
await sender_auth.send_push_notification(url, {
|
|
543
|
-
"event": "data_updated",
|
|
544
|
-
"timestamp": "2024-01-15T10:30:00Z",
|
|
545
|
-
"data": event_data
|
|
546
|
-
})
|
|
547
|
-
else:
|
|
548
|
-
print(f"Failed to verify URL: {url}")
|
|
549
|
-
|
|
550
|
-
# Receiver setup
|
|
551
|
-
app = Starlette()
|
|
552
|
-
receiver_auth = PushNotificationReceiverAuth()
|
|
553
|
-
|
|
554
|
-
# Load sender's public keys
|
|
555
|
-
await receiver_auth.load_jwks("https://sender.example.com/.well-known/jwks.json")
|
|
556
|
-
|
|
557
|
-
@app.route("/webhook", methods=["POST"])
|
|
558
|
-
async def webhook_handler(request: Request):
|
|
559
|
-
try:
|
|
560
|
-
# Verify JWT signature and request integrity
|
|
561
|
-
if await receiver_auth.verify_push_notification(request):
|
|
562
|
-
data = await request.json()
|
|
563
|
-
# Process authenticated notification
|
|
564
|
-
print(f"Received verified notification: {data}")
|
|
565
|
-
return Response("OK")
|
|
566
|
-
else:
|
|
567
|
-
return Response("Unauthorized", status_code=401)
|
|
568
|
-
except Exception as e:
|
|
569
|
-
print(f"
|
|
570
|
-
|
|
571
|
-
================================================================================
|
|
572
|
-
|