solace-agent-mesh 1.11.2__py3-none-any.whl → 1.12.0__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.
- solace_agent_mesh/agent/adk/callbacks.py +177 -10
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +3 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
- solace_agent_mesh/agent/adk/runner.py +66 -8
- solace_agent_mesh/agent/adk/setup.py +61 -26
- solace_agent_mesh/agent/protocol/event_handlers.py +48 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +27 -0
- solace_agent_mesh/agent/sac/component.py +84 -2
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +41 -22
- solace_agent_mesh/agent/tools/peer_agent_tool.py +19 -12
- solace_agent_mesh/agent/tools/tool_config_types.py +21 -1
- solace_agent_mesh/agent/utils/artifact_helpers.py +54 -0
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -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.28b7c67b.js → 3ac1795d.dc006e20.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.f08618fb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.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/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.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.95be65d4.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/ab9708a8.3e563275.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/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.08fab659.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.b241af3e.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.4ca7d2e2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +4 -4
- 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 +14 -12
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +30 -9
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +6 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +4 -4
- 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 +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/{kubernetes-deployment → kubernetes}/index.html +6 -6
- 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 +11 -6
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +23 -5
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +17 -8
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +6 -5
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +4 -4
- 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 +25 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1767712284328.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1767712284328.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/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 +29 -2
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +2 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-Dj3JtK42.js → authCallback-8Nihi8rv.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-ZKk9kEJ5.js → client-DYtZN8p-.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-BYGUHQMk.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-D2CSH1bp.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BNV4kZN0.js → vendor-XBWAmrun.js} +106 -101
- 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/ui-version.json +1 -1
- 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 +28 -0
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/config_portal/backend/common.py +2 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ZV-jX48T.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{manifest-ba77705e.js → manifest-ce5bc5da.js} +1 -1
- solace_agent_mesh/config_portal/frontend/static/client/index.html +1 -1
- 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/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +68 -1
- solace_agent_mesh/gateway/generic/component.py +195 -30
- solace_agent_mesh/gateway/http_sse/app.py +23 -6
- solace_agent_mesh/gateway/http_sse/component.py +9 -61
- solace_agent_mesh/gateway/http_sse/dependencies.py +9 -51
- solace_agent_mesh/gateway/http_sse/main.py +28 -418
- 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 +2 -2
- 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/prompt_model.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +1 -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 +4 -4
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +16 -15
- solace_agent_mesh/gateway/http_sse/routers/auth.py +61 -132
- solace_agent_mesh/gateway/http_sse/routers/config.py +12 -8
- 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/session_responses.py +2 -2
- 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 +2 -1
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +2 -1
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/speech.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +1 -1
- 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/session_service.py +4 -4
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +1 -1
- solace_agent_mesh/services/platform/__init__.py +23 -12
- solace_agent_mesh/services/platform/api/dependencies.py +23 -16
- solace_agent_mesh/services/platform/api/main.py +118 -43
- solace_agent_mesh/services/platform/api/routers/__init__.py +12 -3
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +101 -7
- solace_agent_mesh/services/platform/component.py +552 -33
- 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 +291 -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/platform.yaml +49 -0
- solace_agent_mesh/templates/webui.yaml +12 -3
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/METADATA +2 -1
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/RECORD +214 -258
- 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/15ba94aa.92fea363.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.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/3ff0015d.2ddc75c0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1765810064709.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/main-BcUaNZ-Q.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +0 -435
- 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-DiOiAjzL.js +0 -103
- 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/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/templates_llm.txt +0 -147
- /solace_agent_mesh/assets/docs/assets/js/{main.7acf7ace.js.LICENSE.txt → main.b241af3e.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.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# LLM Summary Detail File
|
|
2
|
-
|
|
3
|
-
This file is a concatenation of all individual *llm.txt files found in the 'sam_events' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
-
|
|
5
|
-
================================================================================
|
|
6
|
-
|
|
7
|
-
## Section 1: solace_agent_mesh/common/sam_events/sam_events_llm.txt
|
|
8
|
-
|
|
9
|
-
**Source file:** `solace_agent_mesh/common/sam_events/sam_events_llm.txt`
|
|
10
|
-
|
|
11
|
-
# DEVELOPER GUIDE: sam_events
|
|
12
|
-
|
|
13
|
-
## Quick Summary
|
|
14
|
-
The `sam_events` directory provides system-level event messaging for Solace Agent Mesh (SAM). It enables clean separation between agent-to-agent (A2A) task communication and system events like session lifecycle, agent health, and configuration changes.
|
|
15
|
-
|
|
16
|
-
## Files Overview
|
|
17
|
-
- `__init__.py` - Package initialization and public API exports
|
|
18
|
-
- `event_service.py` - Core event service implementation with publishing/subscription capabilities
|
|
19
|
-
|
|
20
|
-
## Developer API Reference
|
|
21
|
-
|
|
22
|
-
### __init__.py
|
|
23
|
-
**Purpose:** Package entry point that exports the main classes for SAM event handling
|
|
24
|
-
**Import:** `from solace_agent_mesh.common.sam_events import SamEventService, SamEvent, SessionDeletedEvent`
|
|
25
|
-
|
|
26
|
-
### event_service.py
|
|
27
|
-
**Purpose:** Implements the core event messaging service for system-level events in SAM
|
|
28
|
-
**Import:** `from solace_agent_mesh.common.sam_events.event_service import SamEventService, SamEvent, SessionDeletedEvent`
|
|
29
|
-
|
|
30
|
-
**Classes:**
|
|
31
|
-
|
|
32
|
-
- `SamEvent(event_type: str, event_id: str, timestamp: str, source_component: str, namespace: str, data: Dict[str, Any])` - Base class for all SAM system events
|
|
33
|
-
- `create(event_type: str, source_component: str, namespace: str, data: Dict[str, Any]) -> SamEvent` - Create a new event with auto-generated ID and timestamp
|
|
34
|
-
- `to_dict() -> Dict[str, Any]` - Convert event to dictionary for messaging
|
|
35
|
-
- `event_type: str` - Type of event (e.g., "session.deleted")
|
|
36
|
-
- `event_id: str` - Unique identifier for the event
|
|
37
|
-
- `timestamp: str` - ISO format timestamp when event was created
|
|
38
|
-
- `source_component: str` - Component that generated the event
|
|
39
|
-
- `namespace: str` - SAM namespace
|
|
40
|
-
- `data: Dict[str, Any]` - Event-specific data payload
|
|
41
|
-
|
|
42
|
-
- `SessionDeletedEvent(SamEvent)` - Specialized event for session deletion notifications
|
|
43
|
-
- `create(namespace: str, source_component: str, session_id: str, user_id: str, agent_id: str, gateway_id: str) -> SessionDeletedEvent` - Create a session deleted event
|
|
44
|
-
|
|
45
|
-
- `SamEventService(namespace: str, component_name: str, publish_func: Callable[[str, Dict, Optional[Dict]], None])` - Service for publishing and subscribing to SAM system events
|
|
46
|
-
- `publish_event(event: SamEvent) -> bool` - Publish a system event
|
|
47
|
-
- `publish_session_deleted(session_id: str, user_id: str, agent_id: str, gateway_id: str) -> bool` - Convenience method to publish session deleted event
|
|
48
|
-
- `subscribe_to_events(event_type: str, handler: Callable[[SamEvent], None]) -> bool` - Subscribe to events of a specific type
|
|
49
|
-
- `handle_incoming_event(topic: str, payload: Dict[str, Any]) -> None` - Handle incoming events from messaging system
|
|
50
|
-
- `namespace: str` - The SAM namespace
|
|
51
|
-
- `component_name: str` - Name of the component using this service
|
|
52
|
-
|
|
53
|
-
**Functions:**
|
|
54
|
-
|
|
55
|
-
- `SamEventService.get_event_topic(namespace: str, event_type: str) -> str` - Get the topic for a specific event type
|
|
56
|
-
|
|
57
|
-
**Usage Examples:**
|
|
58
|
-
|
|
59
|
-
```python
|
|
60
|
-
# Basic event service setup
|
|
61
|
-
from solace_agent_mesh.common.sam_events import SamEventService, SamEvent, SessionDeletedEvent
|
|
62
|
-
|
|
63
|
-
# Initialize the event service
|
|
64
|
-
def my_publish_func(topic: str, payload: dict, headers: dict = None):
|
|
65
|
-
# Your A2A publishing implementation
|
|
66
|
-
pass
|
|
67
|
-
|
|
68
|
-
event_service = SamEventService(
|
|
69
|
-
namespace="my_namespace",
|
|
70
|
-
component_name="my_component",
|
|
71
|
-
publish_func=my_publish_func
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
# Create and publish a custom event
|
|
75
|
-
custom_event = SamEvent.create(
|
|
76
|
-
event_type="agent.health_check",
|
|
77
|
-
source_component="health_monitor",
|
|
78
|
-
namespace="my_namespace",
|
|
79
|
-
data={"status": "healthy", "cpu_usage": 45.2}
|
|
80
|
-
)
|
|
81
|
-
success = event_service.publish_event(custom_event)
|
|
82
|
-
|
|
83
|
-
# Publish a session deleted event (convenience method)
|
|
84
|
-
success = event_service.publish_session_deleted(
|
|
85
|
-
session_id="sess_123",
|
|
86
|
-
user_id="user_456",
|
|
87
|
-
agent_id="agent_789",
|
|
88
|
-
gateway_id="gateway_001"
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
# Subscribe to events
|
|
92
|
-
def handle_session_deleted(event: SamEvent):
|
|
93
|
-
session_id = event.data["session_id"]
|
|
94
|
-
print(f"Session {session_id} was deleted")
|
|
95
|
-
|
|
96
|
-
event_service.subscribe_to_events("session.deleted", handle_session_deleted)
|
|
97
|
-
|
|
98
|
-
# Handle incoming events (typically called by your messaging infrastructure)
|
|
99
|
-
incoming_payload = {
|
|
100
|
-
"event_type": "session.deleted",
|
|
101
|
-
"event_id": "evt_123",
|
|
102
|
-
"timestamp": "2024-01-01T12:00:00Z",
|
|
103
|
-
"source_component": "gateway",
|
|
104
|
-
"namespace": "my_namespace",
|
|
105
|
-
"data": {"session_id": "sess_123", "user_id": "user_456"}
|
|
106
|
-
}
|
|
107
|
-
event_service.handle_incoming_event("sam/events/session/deleted", incoming_payload)
|
|
108
|
-
|
|
109
|
-
# Get topic for an event type
|
|
110
|
-
topic = SamEventService.get_event_topic("my_namespace", "session.deleted")
|
|
111
|
-
print(topic) # Returns the proper SAM events topic
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
================================================================================
|
|
115
|
-
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
## Quick Summary
|
|
2
|
-
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.
|
|
3
|
-
|
|
4
|
-
## Files Overview
|
|
5
|
-
- `__init__.py` - Package initialization file marking the directory as a Python package
|
|
6
|
-
- `local_file_identity_service.py` - File-based identity service implementation that reads user data from local JSON files
|
|
7
|
-
|
|
8
|
-
## Developer API Reference
|
|
9
|
-
|
|
10
|
-
### __init__.py
|
|
11
|
-
**Purpose:** Initializes the providers package
|
|
12
|
-
**Import:** `from solace_agent_mesh.common.services import providers`
|
|
13
|
-
|
|
14
|
-
This file contains no public classes or functions - it serves only as package documentation.
|
|
15
|
-
|
|
16
|
-
### local_file_identity_service.py
|
|
17
|
-
**Purpose:** Provides a file-based identity service that reads user profiles from a local JSON file, ideal for development, testing, or small-scale deployments
|
|
18
|
-
**Import:** `from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService`
|
|
19
|
-
|
|
20
|
-
**Classes:**
|
|
21
|
-
- `LocalFileIdentityService(config: Dict[str, Any], component: Optional[SamComponentBase] = None)` - Identity service that sources user data from a local JSON file
|
|
22
|
-
- `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
|
|
23
|
-
- `async search_users(query: str, limit: int = 10) -> List[Dict[str, Any]]` - Performs case-insensitive search on user names and emails
|
|
24
|
-
- `file_path: str` - Path to the JSON file containing user data
|
|
25
|
-
- `lookup_key: str` - Key used to identify users (defaults to "id")
|
|
26
|
-
- `all_users: List[Dict[str, Any]]` - Complete list of user profiles loaded from file
|
|
27
|
-
- `user_index: Dict[str, Dict[str, Any]]` - In-memory index mapping lookup keys to user profiles
|
|
28
|
-
|
|
29
|
-
**Usage Examples:**
|
|
30
|
-
```python
|
|
31
|
-
import asyncio
|
|
32
|
-
import json
|
|
33
|
-
from typing import Dict, Any
|
|
34
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
35
|
-
|
|
36
|
-
# Create sample users.json file
|
|
37
|
-
users_data = [
|
|
38
|
-
{
|
|
39
|
-
"id": "jdoe",
|
|
40
|
-
"email": "jane.doe@example.com",
|
|
41
|
-
"name": "Jane Doe",
|
|
42
|
-
"title": "Senior Engineer",
|
|
43
|
-
"manager_id": "ssmith"
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": "ssmith",
|
|
47
|
-
"email": "sam.smith@example.com",
|
|
48
|
-
"name": "Sam Smith",
|
|
49
|
-
"title": "Engineering Manager"
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
|
|
53
|
-
with open("users.json", "w") as f:
|
|
54
|
-
json.dump(users_data, f)
|
|
55
|
-
|
|
56
|
-
async def main():
|
|
57
|
-
# Initialize the service
|
|
58
|
-
config = {
|
|
59
|
-
"file_path": "users.json",
|
|
60
|
-
"lookup_key": "id" # Optional, defaults to "id"
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
identity_service = LocalFileIdentityService(config)
|
|
64
|
-
|
|
65
|
-
# Get user profile by ID
|
|
66
|
-
auth_claims = {"id": "jdoe"}
|
|
67
|
-
profile = await identity_service.get_user_profile(auth_claims)
|
|
68
|
-
print(f"User profile: {profile}")
|
|
69
|
-
|
|
70
|
-
# Search for users
|
|
71
|
-
results = await identity_service.search_users("jane", limit=5)
|
|
72
|
-
print(f"Search results: {results}")
|
|
73
|
-
|
|
74
|
-
# Handle missing user
|
|
75
|
-
missing = await identity_service.get_user_profile({"id": "nonexistent"})
|
|
76
|
-
print(f"Missing user: {missing}") # Returns None
|
|
77
|
-
|
|
78
|
-
asyncio.run(main())
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
# content_hash: 26b677e947bf60f1e211b6e119bf6382f0a269d46c0f102751bae9faab3c8435
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: services
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
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.
|
|
5
|
-
|
|
6
|
-
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.
|
|
7
|
-
|
|
8
|
-
## Files and Subdirectories Overview
|
|
9
|
-
- **Direct files:**
|
|
10
|
-
- `__init__.py`: Marks the directory as a Python package with shared, reusable services
|
|
11
|
-
- `employee_service.py`: Defines the abstract contract and factory for employee data services
|
|
12
|
-
- `identity_service.py`: Defines the abstract contract and factory for user identity services
|
|
13
|
-
- **Subdirectories:**
|
|
14
|
-
- `providers/`: Contains concrete implementations of the service contracts, including a file-based identity provider
|
|
15
|
-
|
|
16
|
-
## Developer API Reference
|
|
17
|
-
|
|
18
|
-
### Direct Files
|
|
19
|
-
|
|
20
|
-
#### employee_service.py
|
|
21
|
-
**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.
|
|
22
|
-
**Import:** `from solace_agent_mesh.common.services.employee_service import BaseEmployeeService, create_employee_service`
|
|
23
|
-
|
|
24
|
-
**Classes/Functions/Constants:**
|
|
25
|
-
- **`class BaseEmployeeService(ABC)`**: The abstract base class for employee service providers.
|
|
26
|
-
- **`__init__(self, config: Dict[str, Any])`**: Initializes the service, setting up configuration and an optional in-memory cache.
|
|
27
|
-
- **`async def get_employee_dataframe(self) -> pd.DataFrame`**: (Abstract) Returns the entire employee directory as a pandas DataFrame.
|
|
28
|
-
- **`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.
|
|
29
|
-
- **`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.
|
|
30
|
-
- **`async def get_employee_profile_picture(self, employee_id: str) -> Optional[str]`**: (Abstract) Fetches an employee's profile picture as a data URI string.
|
|
31
|
-
- **`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.
|
|
32
|
-
|
|
33
|
-
#### identity_service.py
|
|
34
|
-
**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.
|
|
35
|
-
**Import:** `from solace_agent_mesh.common.services.identity_service import BaseIdentityService, create_identity_service`
|
|
36
|
-
|
|
37
|
-
**Classes/Functions/Constants:**
|
|
38
|
-
- **`class BaseIdentityService(ABC)`**: The abstract base class for identity service providers.
|
|
39
|
-
- **`__init__(self, config: Dict[str, Any], component: Optional[SamComponentBase] = None)`**: Initializes the service, setting up configuration and an optional in-memory cache.
|
|
40
|
-
- **`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.
|
|
41
|
-
- **`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).
|
|
42
|
-
- **`def create_identity_service(config: Optional[Dict[str, Any]], component: Optional[SamComponentBase] = None) -> 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.
|
|
43
|
-
|
|
44
|
-
### Subdirectory APIs
|
|
45
|
-
|
|
46
|
-
#### providers/
|
|
47
|
-
**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
|
|
48
|
-
**Key Exports:** `LocalFileIdentityService`
|
|
49
|
-
**Import Examples:**
|
|
50
|
-
```python
|
|
51
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Complete Usage Guide
|
|
55
|
-
|
|
56
|
-
### 1. Using Service Factories (Recommended Approach)
|
|
57
|
-
The factories are the primary way to create and use services. They abstract away the specific implementation details and handle plugin loading.
|
|
58
|
-
|
|
59
|
-
**Example: Creating Identity and Employee Services**
|
|
60
|
-
|
|
61
|
-
```python
|
|
62
|
-
import asyncio
|
|
63
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
64
|
-
from solace_agent_mesh.common.services.employee_service import create_employee_service
|
|
65
|
-
|
|
66
|
-
async def main():
|
|
67
|
-
# --- Identity Service Example (using built-in provider) ---
|
|
68
|
-
identity_config = {
|
|
69
|
-
"type": "local_file",
|
|
70
|
-
"file_path": "path/to/your/users.json",
|
|
71
|
-
"lookup_key": "email", # Key to use for lookups from auth_claims
|
|
72
|
-
"cache_ttl_seconds": 3600
|
|
73
|
-
}
|
|
74
|
-
identity_service = create_identity_service(identity_config)
|
|
75
|
-
|
|
76
|
-
if identity_service:
|
|
77
|
-
print("Identity Service created.")
|
|
78
|
-
# Fetch a user profile
|
|
79
|
-
auth_claims = {"email": "jane.doe@example.com"}
|
|
80
|
-
user_profile = await identity_service.get_user_profile(auth_claims)
|
|
81
|
-
print(f"User Profile: {user_profile}")
|
|
82
|
-
|
|
83
|
-
# Search for users
|
|
84
|
-
search_results = await identity_service.search_users("Jane")
|
|
85
|
-
print(f"Search Results: {search_results}")
|
|
86
|
-
|
|
87
|
-
# --- Employee Service Example (using external plugin) ---
|
|
88
|
-
# The 'type' must match the name of a registered plugin entry point
|
|
89
|
-
employee_config = {
|
|
90
|
-
"type": "bamboohr_plugin",
|
|
91
|
-
"api_key": "your-secret-api-key",
|
|
92
|
-
"subdomain": "your-company",
|
|
93
|
-
"cache_ttl_seconds": 7200
|
|
94
|
-
}
|
|
95
|
-
employee_service = create_employee_service(employee_config)
|
|
96
|
-
|
|
97
|
-
if employee_service:
|
|
98
|
-
print("\nEmployee Service created.")
|
|
99
|
-
# Get a detailed employee profile
|
|
100
|
-
employee_profile = await employee_service.get_employee_profile("jane.doe@example.com")
|
|
101
|
-
print(f"Employee Profile: {employee_profile}")
|
|
102
|
-
|
|
103
|
-
# Get time off data
|
|
104
|
-
time_off = await employee_service.get_time_off_data("jane.doe@example.com")
|
|
105
|
-
print(f"Time Off Data: {time_off}")
|
|
106
|
-
|
|
107
|
-
# Get employee directory as DataFrame
|
|
108
|
-
df = await employee_service.get_employee_dataframe()
|
|
109
|
-
print(f"Employee Directory Shape: {df.shape}")
|
|
110
|
-
|
|
111
|
-
# Run the example
|
|
112
|
-
asyncio.run(main())
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 2. Direct Provider Instantiation
|
|
116
|
-
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.
|
|
117
|
-
|
|
118
|
-
**Example: Direct Use of LocalFileIdentityService**
|
|
119
|
-
|
|
120
|
-
```python
|
|
121
|
-
import asyncio
|
|
122
|
-
import json
|
|
123
|
-
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
124
|
-
|
|
125
|
-
async def main():
|
|
126
|
-
# First, create a sample users.json file
|
|
127
|
-
users_data = [
|
|
128
|
-
{
|
|
129
|
-
"id": "jdoe",
|
|
130
|
-
"email": "jane.doe@example.com",
|
|
131
|
-
"name": "Jane Doe",
|
|
132
|
-
"title": "Senior Engineer",
|
|
133
|
-
"manager_id": "ssmith"
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"id": "ssmith",
|
|
137
|
-
"email": "sam.smith@example.com",
|
|
138
|
-
"name": "Sam Smith",
|
|
139
|
-
"title": "Engineering Manager"
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
|
|
143
|
-
with open("users.json", "w") as f:
|
|
144
|
-
json.dump(users_data, f)
|
|
145
|
-
|
|
146
|
-
# Configuration does not need a 'type' key for direct instantiation
|
|
147
|
-
config = {
|
|
148
|
-
"file_path": "users.json",
|
|
149
|
-
"lookup_key": "id",
|
|
150
|
-
"cache_ttl_seconds": 1800
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
# Instantiate the class directly
|
|
154
|
-
local_service = LocalFileIdentityService(config)
|
|
155
|
-
print("LocalFileIdentityService created directly")
|
|
156
|
-
|
|
157
|
-
# Get user profile by ID
|
|
158
|
-
auth_claims = {"id": "jdoe"}
|
|
159
|
-
profile = await local_service.get_user_profile(auth_claims)
|
|
160
|
-
print(f"User profile: {profile}")
|
|
161
|
-
|
|
162
|
-
# Search for users
|
|
163
|
-
results = await local_service.search_users("jane", limit=5)
|
|
164
|
-
print(f"Search results: {results}")
|
|
165
|
-
|
|
166
|
-
asyncio.run(main())
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### 3. Creating Custom Service Providers
|
|
170
|
-
To create your own service provider, inherit from the appropriate base class and implement all abstract methods.
|
|
171
|
-
|
|
172
|
-
**Example: Custom Employee Service Provider**
|
|
173
|
-
|
|
174
|
-
```python
|
|
175
|
-
import pandas as pd
|
|
176
|
-
from typing import Any, Dict, List, Optional
|
|
177
|
-
from solace_agent_mesh.common.services.employee_service import BaseEmployeeService
|
|
178
|
-
|
|
179
|
-
class CustomEmployeeService(BaseEmployeeService):
|
|
180
|
-
"""Custom employee service that connects to your HR system."""
|
|
181
|
-
|
|
182
|
-
def __init__(self, config: Dict[str, Any]):
|
|
183
|
-
super().__init__(config)
|
|
184
|
-
self.api_endpoint = config.get("api_endpoint")
|
|
185
|
-
self.api_key = config.get("api_key")
|
|
186
|
-
|
|
187
|
-
async def get_employee_dataframe(self) -> pd.DataFrame:
|
|
188
|
-
"""Fetch all employees and return as DataFrame."""
|
|
189
|
-
# Your implementation here
|
|
190
|
-
# This should return a DataFrame with canonical schema columns:
|
|
191
|
-
# id, displayName, workEmail, jobTitle, department, location, supervisorId, hireDate, mobilePhone
|
|
192
|
-
employees_data = [
|
|
193
|
-
{
|
|
194
|
-
"id": "jdoe@company.com",
|
|
195
|
-
"displayName": "Jane Doe",
|
|
196
|
-
"workEmail": "jdoe@company.com",
|
|
197
|
-
"jobTitle": "Software Engineer",
|
|
198
|
-
"department": "Engineering",
|
|
199
|
-
"location": "San Francisco",
|
|
200
|
-
"supervisorId": "manager@company.com",
|
|
201
|
-
"hireDate": "2023-01-15",
|
|
202
|
-
"mobilePhone": "+1-555-0123"
|
|
203
|
-
}
|
|
204
|
-
]
|
|
205
|
-
return pd.DataFrame(employees_data)
|
|
206
|
-
|
|
207
|
-
async def get_employee_profile(self, employee_id: str) -> Optional[Dict[str, Any]]:
|
|
208
|
-
"""Get single employee profile."""
|
|
209
|
-
# Your implementation here
|
|
210
|
-
return {
|
|
211
|
-
"id": employee_id,
|
|
212
|
-
"displayName": "Jane Doe",
|
|
213
|
-
"workEmail": employee_id,
|
|
214
|
-
"jobTitle": "Software Engineer"
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
async def get_time_off_data(self, employee_id: str) -> List[Dict[str, Any]]:
|
|
218
|
-
"""Get employee time off data."""
|
|
219
|
-
# Your implementation here
|
|
220
|
-
return [
|
|
221
|
-
{
|
|
222
|
-
'start': '2025-07-04',
|
|
223
|
-
'end': '2025-07-04',
|
|
224
|
-
'type': 'Holiday',
|
|
225
|
-
'amount': 'full_day'
|
|
226
|
-
}
|
|
227
|
-
]
|
|
228
|
-
|
|
229
|
-
async def get_employee_profile_picture(self, employee_id: str) -> Optional[str]:
|
|
230
|
-
"""Get employee profile picture as data URI."""
|
|
231
|
-
# Your implementation here
|
|
232
|
-
return None # or return "data:image/jpeg;base64,..."
|
|
233
|
-
|
|
234
|
-
# Usage
|
|
235
|
-
async def use_custom_service():
|
|
236
|
-
config = {
|
|
237
|
-
"api_endpoint": "https://your-hr-api.com",
|
|
238
|
-
"api_key": "your-api-key",
|
|
239
|
-
"cache_ttl_seconds": 3600
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
service = CustomEmployeeService(config)
|
|
243
|
-
profile = await service.get_employee_profile("jdoe@company.com")
|
|
244
|
-
print(f"Custom service profile: {profile}")
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### 4. Working with Both Services Together
|
|
248
|
-
Often you'll want to use both identity and employee services together for comprehensive user information.
|
|
249
|
-
|
|
250
|
-
**Example: Combined Service Usage**
|
|
251
|
-
|
|
252
|
-
```python
|
|
253
|
-
import asyncio
|
|
254
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
255
|
-
from solace_agent_mesh.common.services.employee_service import create_employee_service
|
|
256
|
-
|
|
257
|
-
async def get_complete_user_info(user_email: str):
|
|
258
|
-
"""Get comprehensive user information from both services."""
|
|
259
|
-
|
|
260
|
-
# Configure services
|
|
261
|
-
identity_config = {
|
|
262
|
-
"type": "local_file",
|
|
263
|
-
"file_path": "users.json",
|
|
264
|
-
"lookup_key": "email"
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
employee_config = {
|
|
268
|
-
"type": "your_hr_plugin",
|
|
269
|
-
"api_key": "your-key"
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
# Create services
|
|
273
|
-
identity_service = create_identity_service(identity_config)
|
|
274
|
-
employee_service = create_employee_service(employee_config)
|
|
275
|
-
|
|
276
|
-
# Gather information
|
|
277
|
-
user_info = {}
|
|
278
|
-
|
|
279
|
-
if identity_service:
|
|
280
|
-
auth_claims = {"email": user_email}
|
|
281
|
-
identity_profile = await identity_service.get_user_profile(auth_claims)
|
|
282
|
-
if identity_profile:
|
|
283
|
-
user_info.update(identity_profile)
|
|
284
|
-
|
|
285
|
-
if employee_service:
|
|
286
|
-
employee_profile = await employee_service.get_employee_profile(user_email)
|
|
287
|
-
if employee_profile:
|
|
288
|
-
user_info.update(employee_profile)
|
|
289
|
-
|
|
290
|
-
# Get additional employee data
|
|
291
|
-
time_off = await employee_service.get_time_off_data(user_email)
|
|
292
|
-
user_info["time_off"] = time_off
|
|
293
|
-
|
|
294
|
-
profile_pic = await employee_service.get_employee_profile_picture(user_email)
|
|
295
|
-
if profile_pic:
|
|
296
|
-
user_info["profile_picture"] = profile_pic
|
|
297
|
-
|
|
298
|
-
return user_info
|
|
299
|
-
|
|
300
|
-
# Usage
|
|
301
|
-
async def main():
|
|
302
|
-
complete_info = await get_complete_user_info("jane.doe@example.com")
|
|
303
|
-
print(f"Complete user information: {complete_info}")
|
|
304
|
-
|
|
305
|
-
asyncio.run(main())
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
### 5. Using the Built-in LocalFileIdentityService
|
|
309
|
-
The `providers/` subdirectory includes a ready-to-use file-based identity service that's perfect for development and testing.
|
|
310
|
-
|
|
311
|
-
**Example: Setting up LocalFileIdentityService with Factory**
|
|
312
|
-
|
|
313
|
-
```python
|
|
314
|
-
import asyncio
|
|
315
|
-
import json
|
|
316
|
-
from solace_agent_mesh.common.services.identity_service import create_identity_service
|
|
317
|
-
|
|
318
|
-
async def setup_file_based_identity():
|
|
319
|
-
# Create sample users.json file
|
|
320
|
-
users_data = [
|
|
321
|
-
{
|
|
322
|
-
"id": "jdoe",
|
|
323
|
-
"email": "jane.doe@example.com",
|
|
324
|
-
"name": "Jane Doe",
|
|
325
|
-
"title": "Senior Engineer",
|
|
326
|
-
"manager_id": "ssmith"
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
"id": "ssmith",
|
|
330
|
-
"email": "sam.smith@example.com",
|
|
331
|
-
"name": "Sam Smith",
|
|
332
|
-
"title": "Engineering Manager"
|
|
333
|
-
}
|
|
334
|
-
]
|
|
335
|
-
|
|
336
|
-
with open("users.json", "w") as f:
|
|
337
|
-
json.dump(users_data, f)
|
|
338
|
-
|
|
339
|
-
# Use factory to create the service
|
|
340
|
-
config = {
|
|
341
|
-
"type": "local_file", # This triggers the built-in provider
|
|
342
|
-
"file_path": "users.json",
|
|
343
|
-
"lookup_key": "email", # Use email for lookups
|
|
344
|
-
"cache_ttl_seconds": 3600
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
identity_service = create_identity_service(config)
|
|
348
|
-
|
|
349
|
-
# Test the service
|
|
350
|
-
auth_claims = {"email": "jane.doe@example.com"}
|
|
351
|
-
profile = await identity_service.get_user_profile(auth_claims)
|
|
352
|
-
print(f"Profile found: {profile}")
|
|
353
|
-
|
|
354
|
-
# Search functionality
|
|
355
|
-
search_results = await identity_service.search_users("jane")
|
|
356
|
-
print(f"Search results: {search_results}")
|
|
357
|
-
|
|
358
|
-
asyncio.run(setup_file_based_identity())
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
### 6. Advanced Usage: Custom Identity Service with Component Integration
|
|
362
|
-
|
|
363
|
-
```python
|
|
364
|
-
import asyncio
|
|
365
|
-
from typing import Any, Dict, List, Optional
|
|
366
|
-
from solace_agent
|
|
367
|
-
|
|
368
|
-
# content_hash: 4532aa73f5067694fc253bc1875f79148f7b8778d1d46680c423d2b3da8456e6
|