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,459 +0,0 @@
|
|
|
1
|
-
# LLM Summary Detail File
|
|
2
|
-
|
|
3
|
-
This file is a concatenation of all individual *llm.txt files found in the 'services' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
-
|
|
5
|
-
================================================================================
|
|
6
|
-
|
|
7
|
-
## Section 1: solace_agent_mesh/common/services/providers/providers_llm.txt
|
|
8
|
-
|
|
9
|
-
**Source file:** `solace_agent_mesh/common/services/providers/providers_llm.txt`
|
|
10
|
-
|
|
11
|
-
## Quick Summary
|
|
12
|
-
This directory contains concrete implementations (providers) for the abstract services defined in the parent `services` package. These providers offer specific ways to fulfill service contracts, such as sourcing user identity information from a local file.
|
|
13
|
-
|
|
14
|
-
## Files Overview
|
|
15
|
-
- `__init__.py` - Package initialization file marking the directory as a Python package
|
|
16
|
-
- `local_file_identity_service.py` - File-based identity service implementation that reads user data from local JSON files
|
|
17
|
-
|
|
18
|
-
## Developer API Reference
|
|
19
|
-
|
|
20
|
-
### __init__.py
|
|
21
|
-
**Purpose:** Initializes the providers package
|
|
22
|
-
**Import:** `from solace_agent_mesh.common.services import providers`
|
|
23
|
-
|
|
24
|
-
This file contains no public classes or functions - it serves only as package documentation.
|
|
25
|
-
|
|
26
|
-
### local_file_identity_service.py
|
|
27
|
-
**Purpose:** Provides a file-based identity service that reads user profiles from a local JSON file, ideal for development, testing, or small-scale deployments
|
|
28
|
-
**Import:** `from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService`
|
|
29
|
-
|
|
30
|
-
**Classes:**
|
|
31
|
-
- `LocalFileIdentityService(config: Dict[str, Any])` - Identity service that sources user data from a local JSON file
|
|
32
|
-
- `async get_user_profile(auth_claims: Dict[str, Any]) -> Optional[Dict[str, Any]]` - Looks up a user profile using the lookup key from auth claims
|
|
33
|
-
- `async search_users(query: str, limit: int = 10) -> List[Dict[str, Any]]` - Performs case-insensitive search on user names and emails
|
|
34
|
-
- `file_path: str` - Path to the JSON file containing user data
|
|
35
|
-
- `lookup_key: str` - Key used to identify users (defaults to "id")
|
|
36
|
-
- `all_users: List[Dict[str, Any]]` - Complete list of user profiles loaded from file
|
|
37
|
-
- `user_index: Dict[str, Dict[str, Any]]` - In-memory index mapping lookup keys to user profiles
|
|
38
|
-
|
|
39
|
-
**Usage Examples:**
|
|
40
|
-
```python
|
|
41
|
-
import asyncio
|
|
42
|
-
import json
|
|
43
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
44
|
-
|
|
45
|
-
# Create sample users.json file
|
|
46
|
-
users_data = [
|
|
47
|
-
{
|
|
48
|
-
"id": "jdoe",
|
|
49
|
-
"email": "jane.doe@example.com",
|
|
50
|
-
"name": "Jane Doe",
|
|
51
|
-
"title": "Senior Engineer",
|
|
52
|
-
"manager_id": "ssmith"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "ssmith",
|
|
56
|
-
"email": "sam.smith@example.com",
|
|
57
|
-
"name": "Sam Smith",
|
|
58
|
-
"title": "Engineering Manager"
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
|
|
62
|
-
with open("users.json", "w") as f:
|
|
63
|
-
json.dump(users_data, f)
|
|
64
|
-
|
|
65
|
-
async def main():
|
|
66
|
-
# Initialize the service
|
|
67
|
-
config = {
|
|
68
|
-
"file_path": "users.json",
|
|
69
|
-
"lookup_key": "id" # Optional, defaults to "id"
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
identity_service = LocalFileIdentityService(config)
|
|
73
|
-
|
|
74
|
-
# Get user profile by ID
|
|
75
|
-
auth_claims = {"id": "jdoe"}
|
|
76
|
-
profile = await identity_service.get_user_profile(auth_claims)
|
|
77
|
-
print(f"User profile: {profile}")
|
|
78
|
-
|
|
79
|
-
# Search for users
|
|
80
|
-
results = await identity_service.search_users("jane", limit=5)
|
|
81
|
-
print(f"Search results: {results}")
|
|
82
|
-
|
|
83
|
-
# Handle missing user
|
|
84
|
-
missing = await identity_service.get_user_profile({"id": "nonexistent"})
|
|
85
|
-
print(f"Missing user: {missing}") # Returns None
|
|
86
|
-
|
|
87
|
-
asyncio.run(main())
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
================================================================================
|
|
91
|
-
|
|
92
|
-
## Section 2: solace_agent_mesh/common/services/services_llm.txt
|
|
93
|
-
|
|
94
|
-
**Source file:** `solace_agent_mesh/common/services/services_llm.txt`
|
|
95
|
-
|
|
96
|
-
# DEVELOPER GUIDE: services
|
|
97
|
-
|
|
98
|
-
## Quick Summary
|
|
99
|
-
The `services` directory provides a modular and extensible framework for integrating external data sources related to identity and employee information into the Solace AI Connector. It is built on a provider pattern, defining abstract base classes (`BaseIdentityService`, `BaseEmployeeService`) that establish a clear contract for what data and functionality a service must provide.
|
|
100
|
-
|
|
101
|
-
The core architecture revolves around factory functions (`create_identity_service`, `create_employee_service`) that instantiate specific service providers based on a configuration dictionary. This allows the application to remain decoupled from the concrete implementations. The `providers/` subdirectory contains concrete implementations, including a built-in file-based identity service, while external providers can be dynamically loaded as plugins through Python's entry points system.
|
|
102
|
-
|
|
103
|
-
## Files and Subdirectories Overview
|
|
104
|
-
- **Direct files:**
|
|
105
|
-
- `__init__.py`: Marks the directory as a Python package with shared, reusable services
|
|
106
|
-
- `employee_service.py`: Defines the abstract contract and factory for employee data services
|
|
107
|
-
- `identity_service.py`: Defines the abstract contract and factory for user identity services
|
|
108
|
-
- **Subdirectories:**
|
|
109
|
-
- `providers/`: Contains concrete implementations of the service contracts, including a file-based identity provider
|
|
110
|
-
|
|
111
|
-
## Developer API Reference
|
|
112
|
-
|
|
113
|
-
### Direct Files
|
|
114
|
-
|
|
115
|
-
#### employee_service.py
|
|
116
|
-
**Purpose:** Defines the abstract base class (`BaseEmployeeService`) that all employee service providers must implement, and a factory function (`create_employee_service`) to instantiate them. It enforces a canonical schema for employee data to ensure consistency across different providers.
|
|
117
|
-
**Import:** `from solace_agent_mesh.common.services.employee_service import BaseEmployeeService, create_employee_service`
|
|
118
|
-
|
|
119
|
-
**Classes/Functions/Constants:**
|
|
120
|
-
- **`class BaseEmployeeService(ABC)`**: The abstract base class for employee service providers.
|
|
121
|
-
- **`__init__(self, config: Dict[str, Any])`**: Initializes the service, setting up configuration and an optional in-memory cache.
|
|
122
|
-
- **`async def get_employee_dataframe(self) -> pd.DataFrame`**: (Abstract) Returns the entire employee directory as a pandas DataFrame.
|
|
123
|
-
- **`async def get_employee_profile(self, employee_id: str) -> Optional[Dict[str, Any]]`**: (Abstract) Fetches the profile for a single employee, conforming to the canonical schema.
|
|
124
|
-
- **`async def get_time_off_data(self, employee_id: str) -> List[Dict[str, Any]]`**: (Abstract) Retrieves a list of time-off entries for an employee.
|
|
125
|
-
- **`async def get_employee_profile_picture(self, employee_id: str) -> Optional[str]`**: (Abstract) Fetches an employee's profile picture as a data URI string.
|
|
126
|
-
- **`def create_employee_service(config: Optional[Dict[str, Any]]) -> Optional[BaseEmployeeService]`**: A factory function that dynamically loads and instantiates an employee service provider based on the `type` specified in the configuration. It primarily uses Python's entry points to find and load external plugins.
|
|
127
|
-
|
|
128
|
-
#### identity_service.py
|
|
129
|
-
**Purpose:** Defines the abstract base class (`BaseIdentityService`) for identity providers and a factory function (`create_identity_service`) to create instances of them. This service is used for user lookups and profile enrichment.
|
|
130
|
-
**Import:** `from solace_agent_mesh.common.services.identity_service import BaseIdentityService, create_identity_service`
|
|
131
|
-
|
|
132
|
-
**Classes/Functions/Constants:**
|
|
133
|
-
- **`class BaseIdentityService(ABC)`**: The abstract base class for identity service providers.
|
|
134
|
-
- **`__init__(self, config: Dict[str, Any])`**: Initializes the service, setting up configuration and an optional in-memory cache.
|
|
135
|
-
- **`async def get_user_profile(self, auth_claims: Dict[str, Any]) -> Optional[Dict[str, Any]]`**: (Abstract) Fetches additional profile details for an authenticated user based on claims.
|
|
136
|
-
- **`async def search_users(self, query: str, limit: int = 10) -> List[Dict[str, Any]]`**: (Abstract) Searches for users based on a query string (e.g., for autocomplete).
|
|
137
|
-
- **`def create_identity_service(config: Optional[Dict[str, Any]]) -> Optional[BaseIdentityService]`**: A factory function that instantiates an identity service provider. It has special handling for the built-in `local_file` provider and uses Python entry points for all other provider types.
|
|
138
|
-
|
|
139
|
-
### Subdirectory APIs
|
|
140
|
-
|
|
141
|
-
#### providers/
|
|
142
|
-
**Purpose:** Contains concrete implementations of the abstract service classes, providing specific ways to fulfill service contracts such as sourcing user identity information from local files
|
|
143
|
-
**Key Exports:** `LocalFileIdentityService`
|
|
144
|
-
**Import Examples:**
|
|
145
|
-
```python
|
|
146
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Complete Usage Guide
|
|
150
|
-
|
|
151
|
-
### 1. Using Service Factories (Recommended Approach)
|
|
152
|
-
The factories are the primary way to create and use services. They abstract away the specific implementation details and handle plugin loading.
|
|
153
|
-
|
|
154
|
-
**Example: Creating Identity and Employee Services**
|
|
155
|
-
|
|
156
|
-
```python
|
|
157
|
-
import asyncio
|
|
158
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
159
|
-
from solace_agent_mesh.common.services.employee_service import create_employee_service
|
|
160
|
-
|
|
161
|
-
async def main():
|
|
162
|
-
# --- Identity Service Example (using built-in provider) ---
|
|
163
|
-
identity_config = {
|
|
164
|
-
"type": "local_file",
|
|
165
|
-
"file_path": "path/to/your/users.json",
|
|
166
|
-
"lookup_key": "email", # Key to use for lookups from auth_claims
|
|
167
|
-
"cache_ttl_seconds": 3600
|
|
168
|
-
}
|
|
169
|
-
identity_service = create_identity_service(identity_config)
|
|
170
|
-
|
|
171
|
-
if identity_service:
|
|
172
|
-
print("Identity Service created.")
|
|
173
|
-
# Fetch a user profile
|
|
174
|
-
auth_claims = {"email": "jane.doe@example.com"}
|
|
175
|
-
user_profile = await identity_service.get_user_profile(auth_claims)
|
|
176
|
-
print(f"User Profile: {user_profile}")
|
|
177
|
-
|
|
178
|
-
# Search for users
|
|
179
|
-
search_results = await identity_service.search_users("Jane")
|
|
180
|
-
print(f"Search Results: {search_results}")
|
|
181
|
-
|
|
182
|
-
# --- Employee Service Example (using external plugin) ---
|
|
183
|
-
# The 'type' must match the name of a registered plugin entry point
|
|
184
|
-
employee_config = {
|
|
185
|
-
"type": "bamboohr_plugin",
|
|
186
|
-
"api_key": "your-secret-api-key",
|
|
187
|
-
"subdomain": "your-company",
|
|
188
|
-
"cache_ttl_seconds": 7200
|
|
189
|
-
}
|
|
190
|
-
employee_service = create_employee_service(employee_config)
|
|
191
|
-
|
|
192
|
-
if employee_service:
|
|
193
|
-
print("\nEmployee Service created.")
|
|
194
|
-
# Get a detailed employee profile
|
|
195
|
-
employee_profile = await employee_service.get_employee_profile("jane.doe@example.com")
|
|
196
|
-
print(f"Employee Profile: {employee_profile}")
|
|
197
|
-
|
|
198
|
-
# Get time off data
|
|
199
|
-
time_off = await employee_service.get_time_off_data("jane.doe@example.com")
|
|
200
|
-
print(f"Time Off Data: {time_off}")
|
|
201
|
-
|
|
202
|
-
# Get employee directory as DataFrame
|
|
203
|
-
df = await employee_service.get_employee_dataframe()
|
|
204
|
-
print(f"Employee Directory Shape: {df.shape}")
|
|
205
|
-
|
|
206
|
-
# Run the example
|
|
207
|
-
asyncio.run(main())
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### 2. Direct Provider Instantiation
|
|
211
|
-
While factories are preferred, you can instantiate providers from the `providers/` directory directly. This is useful for testing or when you know you will always use a specific built-in provider.
|
|
212
|
-
|
|
213
|
-
**Example: Direct Use of LocalFileIdentityService**
|
|
214
|
-
|
|
215
|
-
```python
|
|
216
|
-
import asyncio
|
|
217
|
-
import json
|
|
218
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
219
|
-
|
|
220
|
-
async def main():
|
|
221
|
-
# First, create a sample users.json file
|
|
222
|
-
users_data = [
|
|
223
|
-
{
|
|
224
|
-
"id": "jdoe",
|
|
225
|
-
"email": "jane.doe@example.com",
|
|
226
|
-
"name": "Jane Doe",
|
|
227
|
-
"title": "Senior Engineer",
|
|
228
|
-
"manager_id": "ssmith"
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
"id": "ssmith",
|
|
232
|
-
"email": "sam.smith@example.com",
|
|
233
|
-
"name": "Sam Smith",
|
|
234
|
-
"title": "Engineering Manager"
|
|
235
|
-
}
|
|
236
|
-
]
|
|
237
|
-
|
|
238
|
-
with open("users.json", "w") as f:
|
|
239
|
-
json.dump(users_data, f)
|
|
240
|
-
|
|
241
|
-
# Configuration does not need a 'type' key for direct instantiation
|
|
242
|
-
config = {
|
|
243
|
-
"file_path": "users.json",
|
|
244
|
-
"lookup_key": "id",
|
|
245
|
-
"cache_ttl_seconds": 1800
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
# Instantiate the class directly
|
|
249
|
-
local_service = LocalFileIdentityService(config)
|
|
250
|
-
print("LocalFileIdentityService created directly")
|
|
251
|
-
|
|
252
|
-
# Get user profile by ID
|
|
253
|
-
auth_claims = {"id": "jdoe"}
|
|
254
|
-
profile = await local_service.get_user_profile(auth_claims)
|
|
255
|
-
print(f"User profile: {profile}")
|
|
256
|
-
|
|
257
|
-
# Search for users
|
|
258
|
-
results = await local_service.search_users("jane", limit=5)
|
|
259
|
-
print(f"Search results: {results}")
|
|
260
|
-
|
|
261
|
-
asyncio.run(main())
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### 3. Creating Custom Service Providers
|
|
265
|
-
To create your own service provider, inherit from the appropriate base class and implement all abstract methods.
|
|
266
|
-
|
|
267
|
-
**Example: Custom Employee Service Provider**
|
|
268
|
-
|
|
269
|
-
```python
|
|
270
|
-
import pandas as pd
|
|
271
|
-
from typing import Any, Dict, List, Optional
|
|
272
|
-
from solace_agent_mesh.common.services.employee_service import BaseEmployeeService
|
|
273
|
-
|
|
274
|
-
class CustomEmployeeService(BaseEmployeeService):
|
|
275
|
-
"""Custom employee service that connects to your HR system."""
|
|
276
|
-
|
|
277
|
-
def __init__(self, config: Dict[str, Any]):
|
|
278
|
-
super().__init__(config)
|
|
279
|
-
self.api_endpoint = config.get("api_endpoint")
|
|
280
|
-
self.api_key = config.get("api_key")
|
|
281
|
-
|
|
282
|
-
async def get_employee_dataframe(self) -> pd.DataFrame:
|
|
283
|
-
"""Fetch all employees and return as DataFrame."""
|
|
284
|
-
# Your implementation here
|
|
285
|
-
# This should return a DataFrame with canonical schema columns:
|
|
286
|
-
# id, displayName, workEmail, jobTitle, department, location, supervisorId, hireDate, mobilePhone
|
|
287
|
-
employees_data = [
|
|
288
|
-
{
|
|
289
|
-
"id": "jdoe@company.com",
|
|
290
|
-
"displayName": "Jane Doe",
|
|
291
|
-
"workEmail": "jdoe@company.com",
|
|
292
|
-
"jobTitle": "Software Engineer",
|
|
293
|
-
"department": "Engineering",
|
|
294
|
-
"location": "San Francisco",
|
|
295
|
-
"supervisorId": "manager@company.com",
|
|
296
|
-
"hireDate": "2023-01-15",
|
|
297
|
-
"mobilePhone": "+1-555-0123"
|
|
298
|
-
}
|
|
299
|
-
]
|
|
300
|
-
return pd.DataFrame(employees_data)
|
|
301
|
-
|
|
302
|
-
async def get_employee_profile(self, employee_id: str) -> Optional[Dict[str, Any]]:
|
|
303
|
-
"""Get single employee profile."""
|
|
304
|
-
# Your implementation here
|
|
305
|
-
return {
|
|
306
|
-
"id": employee_id,
|
|
307
|
-
"displayName": "Jane Doe",
|
|
308
|
-
"workEmail": employee_id,
|
|
309
|
-
"jobTitle": "Software Engineer"
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
async def get_time_off_data(self, employee_id: str) -> List[Dict[str, Any]]:
|
|
313
|
-
"""Get employee time off data."""
|
|
314
|
-
# Your implementation here
|
|
315
|
-
return [
|
|
316
|
-
{
|
|
317
|
-
'start': '2025-07-04',
|
|
318
|
-
'end': '2025-07-04',
|
|
319
|
-
'type': 'Holiday',
|
|
320
|
-
'amount': 'full_day'
|
|
321
|
-
}
|
|
322
|
-
]
|
|
323
|
-
|
|
324
|
-
async def get_employee_profile_picture(self, employee_id: str) -> Optional[str]:
|
|
325
|
-
"""Get employee profile picture as data URI."""
|
|
326
|
-
# Your implementation here
|
|
327
|
-
return None # or return "data:image/jpeg;base64,..."
|
|
328
|
-
|
|
329
|
-
# Usage
|
|
330
|
-
async def use_custom_service():
|
|
331
|
-
config = {
|
|
332
|
-
"api_endpoint": "https://your-hr-api.com",
|
|
333
|
-
"api_key": "your-api-key",
|
|
334
|
-
"cache_ttl_seconds": 3600
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
service = CustomEmployeeService(config)
|
|
338
|
-
profile = await service.get_employee_profile("jdoe@company.com")
|
|
339
|
-
print(f"Custom service profile: {profile}")
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
### 4. Working with Both Services Together
|
|
343
|
-
Often you'll want to use both identity and employee services together for comprehensive user information.
|
|
344
|
-
|
|
345
|
-
**Example: Combined Service Usage**
|
|
346
|
-
|
|
347
|
-
```python
|
|
348
|
-
import asyncio
|
|
349
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
350
|
-
from solace_agent_mesh.common.services.employee_service import create_employee_service
|
|
351
|
-
|
|
352
|
-
async def get_complete_user_info(user_email: str):
|
|
353
|
-
"""Get comprehensive user information from both services."""
|
|
354
|
-
|
|
355
|
-
# Configure services
|
|
356
|
-
identity_config = {
|
|
357
|
-
"type": "local_file",
|
|
358
|
-
"file_path": "users.json",
|
|
359
|
-
"lookup_key": "email"
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
employee_config = {
|
|
363
|
-
"type": "your_hr_plugin",
|
|
364
|
-
"api_key": "your-key"
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
# Create services
|
|
368
|
-
identity_service = create_identity_service(identity_config)
|
|
369
|
-
employee_service = create_employee_service(employee_config)
|
|
370
|
-
|
|
371
|
-
# Gather information
|
|
372
|
-
user_info = {}
|
|
373
|
-
|
|
374
|
-
if identity_service:
|
|
375
|
-
auth_claims = {"email": user_email}
|
|
376
|
-
identity_profile = await identity_service.get_user_profile(auth_claims)
|
|
377
|
-
if identity_profile:
|
|
378
|
-
user_info.update(identity_profile)
|
|
379
|
-
|
|
380
|
-
if employee_service:
|
|
381
|
-
employee_profile = await employee_service.get_employee_profile(user_email)
|
|
382
|
-
if employee_profile:
|
|
383
|
-
user_info.update(employee_profile)
|
|
384
|
-
|
|
385
|
-
# Get additional employee data
|
|
386
|
-
time_off = await employee_service.get_time_off_data(user_email)
|
|
387
|
-
user_info["time_off"] = time_off
|
|
388
|
-
|
|
389
|
-
profile_pic = await employee_service.get_employee_profile_picture(user_email)
|
|
390
|
-
if profile_pic:
|
|
391
|
-
user_info["profile_picture"] = profile_pic
|
|
392
|
-
|
|
393
|
-
return user_info
|
|
394
|
-
|
|
395
|
-
# Usage
|
|
396
|
-
async def main():
|
|
397
|
-
complete_info = await get_complete_user_info("jane.doe@example.com")
|
|
398
|
-
print(f"Complete user information: {complete_info}")
|
|
399
|
-
|
|
400
|
-
asyncio.run(main())
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
### 5. Using the Built-in LocalFileIdentityService
|
|
404
|
-
The `providers/` subdirectory includes a ready-to-use file-based identity service that's perfect for development and testing.
|
|
405
|
-
|
|
406
|
-
**Example: Setting up LocalFileIdentityService with Factory**
|
|
407
|
-
|
|
408
|
-
```python
|
|
409
|
-
import asyncio
|
|
410
|
-
import json
|
|
411
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
412
|
-
|
|
413
|
-
async def setup_file_based_identity():
|
|
414
|
-
# Create sample users.json file
|
|
415
|
-
users_data = [
|
|
416
|
-
{
|
|
417
|
-
"id": "jdoe",
|
|
418
|
-
"email": "jane.doe@example.com",
|
|
419
|
-
"name": "Jane Doe",
|
|
420
|
-
"title": "Senior Engineer",
|
|
421
|
-
"manager_id": "ssmith"
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
"id": "ssmith",
|
|
425
|
-
"email": "sam.smith@example.com",
|
|
426
|
-
"name": "Sam Smith",
|
|
427
|
-
"title": "Engineering Manager"
|
|
428
|
-
}
|
|
429
|
-
]
|
|
430
|
-
|
|
431
|
-
with open("users.json", "w") as f:
|
|
432
|
-
json.dump(users_data, f)
|
|
433
|
-
|
|
434
|
-
# Use factory to create the service
|
|
435
|
-
config = {
|
|
436
|
-
"type": "local_file", # This triggers the built-in provider
|
|
437
|
-
"file_path": "users.json",
|
|
438
|
-
"lookup_key": "email", # Use email for lookups
|
|
439
|
-
"cache_ttl_seconds": 3600
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
identity_service = create_identity_service(config)
|
|
443
|
-
|
|
444
|
-
# Test the service
|
|
445
|
-
auth_claims = {"email": "jane.doe@example.com"}
|
|
446
|
-
profile = await identity_service.get_user_profile(auth_claims)
|
|
447
|
-
print(f"Profile found: {profile}")
|
|
448
|
-
|
|
449
|
-
# Search functionality
|
|
450
|
-
search_results = await identity_service.search_users("jane")
|
|
451
|
-
print(f"Search results: {search_results}")
|
|
452
|
-
|
|
453
|
-
asyncio.run(setup_file_based_identity())
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
This comprehensive guide shows how the services framework provides a clean, extensible way to integrate various data sources while maintaining consistent interfaces and supporting both built-in providers and external plugins through the factory pattern and plugin system.
|
|
457
|
-
|
|
458
|
-
================================================================================
|
|
459
|
-
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: embeds
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
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.
|
|
5
|
-
|
|
6
|
-
## Files Overview
|
|
7
|
-
- `__init__.py` - Main public entry point exporting key functions and constants
|
|
8
|
-
- `constants.py` - Defines embed syntax (delimiters, separators), regex patterns, and type classifications
|
|
9
|
-
- `converter.py` - Data format conversion and serialization functions
|
|
10
|
-
- `evaluators.py` - Specific evaluation logic for simple embed types (math, datetime, uuid, etc.)
|
|
11
|
-
- `modifiers.py` - Data transformation functions that can be chained together (jsonpath, slice, grep, etc.)
|
|
12
|
-
- `resolver.py` - Core orchestration engine handling embed resolution, modifier chains, and recursion
|
|
13
|
-
- `types.py` - DataFormat enum for tracking data types during transformations
|
|
14
|
-
|
|
15
|
-
## Developer API Reference
|
|
16
|
-
|
|
17
|
-
### __init__.py
|
|
18
|
-
**Purpose:** Main public entry point that exports the most commonly used functions and constants from other modules.
|
|
19
|
-
|
|
20
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX`
|
|
21
|
-
|
|
22
|
-
**Functions:**
|
|
23
|
-
- `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
|
|
24
|
-
- `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)
|
|
25
|
-
- `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
|
|
26
|
-
|
|
27
|
-
**Constants/Variables:**
|
|
28
|
-
- `EMBED_DELIMITER_OPEN: str` - Opening delimiter (`«`)
|
|
29
|
-
- `EMBED_DELIMITER_CLOSE: str` - Closing delimiter (`»`)
|
|
30
|
-
- `EMBED_TYPE_SEPARATOR: str` - Type/expression separator (`:`)
|
|
31
|
-
- `EMBED_FORMAT_SEPARATOR: str` - Format specifier separator (`|`)
|
|
32
|
-
- `EMBED_CHAIN_DELIMITER: str` - Modifier chain separator (`>>>`)
|
|
33
|
-
- `EMBED_REGEX: re.Pattern` - Compiled regex for finding embeds
|
|
34
|
-
- `EARLY_EMBED_TYPES: Set[str]` - Types resolved in initial pass
|
|
35
|
-
- `LATE_EMBED_TYPES: Set[str]` - Types resolved in subsequent pass
|
|
36
|
-
|
|
37
|
-
**Usage Examples:**
|
|
38
|
-
```python
|
|
39
|
-
from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX
|
|
40
|
-
|
|
41
|
-
# Basic embed resolution
|
|
42
|
-
context = {
|
|
43
|
-
"artifact_service": my_artifact_service,
|
|
44
|
-
"session_context": {"app_name": "myapp", "user_id": "user123", "session_id": "sess456"}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
text = "The result is «math:10 * 1.15 | .2f» and ID is «uuid:new»"
|
|
48
|
-
resolved = await resolve_embeds_recursively_in_string(
|
|
49
|
-
text=text,
|
|
50
|
-
context=context,
|
|
51
|
-
resolver_func=evaluate_embed,
|
|
52
|
-
types_to_resolve={"math", "uuid"},
|
|
53
|
-
log_identifier="[MyApp]",
|
|
54
|
-
config={},
|
|
55
|
-
max_depth=5
|
|
56
|
-
)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### constants.py
|
|
60
|
-
**Purpose:** Defines all static constants governing embed syntax and classification.
|
|
61
|
-
|
|
62
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX, EARLY_EMBED_TYPES`
|
|
63
|
-
|
|
64
|
-
**Constants/Variables:**
|
|
65
|
-
- `EMBED_DELIMITER_OPEN: str` - Opening delimiter (`«`)
|
|
66
|
-
- `EMBED_DELIMITER_CLOSE: str` - Closing delimiter (`»`)
|
|
67
|
-
- `EMBED_TYPE_SEPARATOR: str` - Type/expression separator (`:`)
|
|
68
|
-
- `EMBED_FORMAT_SEPARATOR: str` - Format specifier separator (`|`)
|
|
69
|
-
- `EMBED_CHAIN_DELIMITER: str` - Modifier chain separator (`>>>`)
|
|
70
|
-
- `EMBED_REGEX: re.Pattern` - Compiled regex with capture groups for type, expression, and format
|
|
71
|
-
- `EARLY_EMBED_TYPES: Set[str]` - Simple embed types resolved first (`math`, `datetime`, `uuid`, `artifact_meta`, `status_update`)
|
|
72
|
-
- `LATE_EMBED_TYPES: Set[str]` - Complex embed types resolved later (`artifact_content`)
|
|
73
|
-
- `TEXT_CONTAINER_MIME_TYPES: Set[str]` - MIME types considered text-based
|
|
74
|
-
|
|
75
|
-
**Usage Examples:**
|
|
76
|
-
```python
|
|
77
|
-
from solace_agent_mesh.common.utils.embeds.constants import EMBED_REGEX
|
|
78
|
-
|
|
79
|
-
text = "Price: «math:10 * 1.15 | .2f» ID: «uuid:new»"
|
|
80
|
-
for match in EMBED_REGEX.finditer(text):
|
|
81
|
-
embed_type = match.group(1) # "math" or "uuid"
|
|
82
|
-
expression = match.group(2) # "10 * 1.15 " or "new"
|
|
83
|
-
format_spec = match.group(3) # " .2f" or None
|
|
84
|
-
print(f"Type: {embed_type}, Expr: '{expression}', Format: '{format_spec}'")
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### converter.py
|
|
88
|
-
**Purpose:** Provides data conversion between different formats and serialization to final string representations.
|
|
89
|
-
|
|
90
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data`
|
|
91
|
-
|
|
92
|
-
**Functions:**
|
|
93
|
-
- `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
|
|
94
|
-
- `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)
|
|
95
|
-
|
|
96
|
-
**Usage Examples:**
|
|
97
|
-
```python
|
|
98
|
-
from solace_agent_mesh.common.utils.embeds.converter import convert_data, serialize_data
|
|
99
|
-
from solace_agent_mesh.common.utils.embeds.types import DataFormat
|
|
100
|
-
|
|
101
|
-
# Convert CSV bytes to list of dictionaries
|
|
102
|
-
csv_bytes = b"id,name\n1,Alice\n2,Bob"
|
|
103
|
-
list_data, new_format, err = convert_data(
|
|
104
|
-
current_data=csv_bytes,
|
|
105
|
-
current_format=DataFormat.BYTES,
|
|
106
|
-
target_format=DataFormat.LIST_OF_DICTS,
|
|
107
|
-
original_mime_type="text/csv"
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
# Serialize to pretty JSON
|
|
111
|
-
json_str, err = serialize_data(
|
|
112
|
-
data=list_data,
|
|
113
|
-
data_format=DataFormat.LIST_OF_DICTS,
|
|
114
|
-
target_string_format="json_pretty",
|
|
115
|
-
original_mime_type=None
|
|
116
|
-
)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### evaluators.py
|
|
120
|
-
**Purpose:** Contains evaluation logic for simple embed types and the evaluator registry.
|
|
121
|
-
|
|
122
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.evaluators import EMBED_EVALUATORS`
|
|
123
|
-
|
|
124
|
-
**Functions:**
|
|
125
|
-
- `_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
|
|
126
|
-
- `_evaluate_datetime_embed(expression: str, context: Any, log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Formats current datetime
|
|
127
|
-
- `_evaluate_uuid_embed(expression: str, context: Any, log_identifier: str, format_spec: Optional[str] = None) -> Tuple[str, Optional[str], int]` - Generates UUID4 strings
|
|
128
|
-
- `_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
|
|
129
|
-
- `_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
|
|
130
|
-
|
|
131
|
-
**Constants/Variables:**
|
|
132
|
-
- `EMBED_EVALUATORS: Dict[str, Callable]` - Registry mapping embed types to evaluator functions
|
|
133
|
-
- `MATH_SAFE_SYMBOLS: Dict[str, Any]` - Safe mathematical functions and constants for math embeds
|
|
134
|
-
|
|
135
|
-
**Usage Examples:**
|
|
136
|
-
```python
|
|
137
|
-
from solace_agent_mesh.common.utils.embeds.evaluators import EMBED_EVALUATORS
|
|
138
|
-
|
|
139
|
-
# Math evaluation
|
|
140
|
-
result, error, size = EMBED_EVALUATORS["math"]("2 + 3 * 4", {}, "[Test]", ".2f")
|
|
141
|
-
# result: "14.00", error: None, size: 5
|
|
142
|
-
|
|
143
|
-
# DateTime formatting
|
|
144
|
-
result, error, size = EMBED_EVALUATORS["datetime"]("%Y-%m-%d", {}, "[Test]")
|
|
145
|
-
# result: "2024-01-15", error: None, size: 10
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### modifiers.py
|
|
149
|
-
**Purpose:** Implements data transformation functions that can be chained together in artifact_content embeds.
|
|
150
|
-
|
|
151
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.modifiers import MODIFIER_DEFINITIONS, _parse_modifier_chain`
|
|
152
|
-
|
|
153
|
-
**Functions:**
|
|
154
|
-
- `_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
|
|
155
|
-
- `_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
|
|
156
|
-
- `_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
|
|
157
|
-
- `_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
|
|
158
|
-
- `_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
|
|
159
|
-
- `_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
|
|
160
|
-
- `_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
|
|
161
|
-
- `_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
|
|
162
|
-
- `_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
|
|
163
|
-
- `_parse_modifier_chain(expression: str) -> Tuple[str, List[Tuple[str, str]], Optional[str]]` - Parses artifact_content expression into components
|
|
164
|
-
|
|
165
|
-
**Constants/Variables:**
|
|
166
|
-
- `MODIFIER_IMPLEMENTATIONS: Dict[str, Callable]` - Registry of modifier functions
|
|
167
|
-
- `MODIFIER_DEFINITIONS: Dict[str, Dict[str, Any]]` - Modifier metadata including accepted/produced formats
|
|
168
|
-
|
|
169
|
-
**Usage Examples:**
|
|
170
|
-
```python
|
|
171
|
-
from solace_agent_mesh.common.utils.embeds.modifiers import _parse_modifier_chain
|
|
172
|
-
|
|
173
|
-
# Parse a complex artifact_content expression
|
|
174
|
-
expression = "data.csv:1 >>> select_cols:name,age >>> filter_rows_eq:age:25 >>> format:json"
|
|
175
|
-
artifact_spec, modifiers, output_format = _parse_modifier_chain(expression)
|
|
176
|
-
# artifact_spec: "data.csv:1"
|
|
177
|
-
# modifiers: [("select_cols", "name,age"), ("filter_rows_eq", "age:25")]
|
|
178
|
-
# output_format: "json"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### resolver.py
|
|
182
|
-
**Purpose:** Core orchestration engine that handles the complete embed resolution process including modifier chains and recursion.
|
|
183
|
-
|
|
184
|
-
**Import:** `from solace_agent_mesh.common.utils.embeds.resolver import resolve_embeds_in_string, evaluate_embed`
|
|
185
|
-
|
|
186
|
-
**Functions:**
|
|
187
|
-
- `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
|
|
188
|
-
- `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
|
|
189
|
-
- `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
|
|
190
|
-
|
|
191
|
-
**Usage Examples:**
|
|
192
|
-
```python
|
|
193
|
-
from solace_agent_mesh.common.utils.embeds.resolver import resolve_embeds_in_string, evaluate_embed
|
|
194
|
-
|
|
195
|
-
# Single-pass resolution
|
|
196
|
-
text = "Result: «math:2+3» and «uuid:new»"
|
|
197
|
-
context = {"artifact_service": service, "session_context": session_ctx}
|
|
198
|
-
|
|
199
|
-
resolved_text, processed_index, signals = await resolve_embeds_in_string(
|
|
200
|
-
text=text,
|
|
201
|
-
context=context,
|
|
202
|
-
resolver_func=evaluate_embed,
|
|
203
|
-
types_to_resolve={"math", "uuid"},
|
|
204
|
-
log_identifier="[MyApp]",
|
|
205
|
-
config={}
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
# Complex artifact content with modifiers
|
|
209
|
-
result, error, size = await evaluate_embed(
|
|
210
|
-
embed_type="artifact_content",
|
|
211
|
-
expression="sales.csv >>> select_cols:product,revenue >>> format:json",
|
|
212
|
-
format_spec=None,
|
|
213
|
-
context=context,
|
|
214
|
-
log_identifier="[Sales]"
|
|
215
|
-
)
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### types.py
|
|
219
|
-
|
|
220
|
-
# content_hash: b2c6bea4995d4d68f8cad84016e236560d091897ba1b8502f1532bf84eb813f7
|