solace-agent-mesh 1.4.12__py3-none-any.whl → 1.5.1__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/adk_llm.txt +3 -4
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +1 -1
- solace_agent_mesh/agent/adk/callbacks.py +56 -5
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +3 -1
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +2 -1
- solace_agent_mesh/agent/adk/mcp_content_processor.py +2 -1
- solace_agent_mesh/agent/adk/models/lite_llm.py +1 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +1 -2
- solace_agent_mesh/agent/adk/runner.py +3 -1
- solace_agent_mesh/agent/adk/services.py +4 -1
- solace_agent_mesh/agent/adk/setup.py +3 -1
- solace_agent_mesh/agent/adk/tool_wrapper.py +2 -2
- solace_agent_mesh/agent/agent_llm.txt +1 -1
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +4 -14
- solace_agent_mesh/agent/protocol/protocol_llm.txt +15 -2
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
- solace_agent_mesh/agent/sac/app.py +3 -1
- solace_agent_mesh/agent/sac/component.py +55 -22
- solace_agent_mesh/agent/sac/sac_llm.txt +15 -1
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +73 -0
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
- solace_agent_mesh/agent/tools/audio_tools.py +2 -1
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +3 -1
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +3 -1
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -1
- solace_agent_mesh/agent/tools/general_agent_tools.py +2 -1
- solace_agent_mesh/agent/tools/image_tools.py +2 -1
- solace_agent_mesh/agent/tools/peer_agent_tool.py +2 -1
- solace_agent_mesh/agent/tools/registry.py +3 -1
- solace_agent_mesh/agent/tools/test_tools.py +2 -1
- solace_agent_mesh/agent/tools/tools_llm.txt +148 -154
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +274 -0
- solace_agent_mesh/agent/tools/web_tools.py +2 -1
- solace_agent_mesh/agent/utils/artifact_helpers.py +3 -1
- solace_agent_mesh/agent/utils/config_parser.py +3 -1
- solace_agent_mesh/agent/utils/utils_llm.txt +1 -1
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/{b7006a3a.73a79653.js → 032c2d61.f3d37824.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{2334.622a6395.js → 2334.1cf50a20.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{3624.b524e433.js → 3624.0eaa1fd0.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/509e993c.4c7a1a6d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.e49689dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.39d5851d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.804d6567.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/77cf947d.64c9bd6c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js → 8591.5d015485.js} +2 -2
- solace_agent_mesh/assets/docs/assets/js/{8731.49e930c2.js → 8731.6c1dbf0c.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9e9d0a82.dd810042.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad71b5ed.60668e9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.9d369087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db924877.cbc66f02.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.139b4b9c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.2b916f9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.582a78ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.5766a13d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.9c0297a6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.bd3c34f3.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.18dc45dd.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +143 -0
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/artifact-management/index.html +7 -7
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/audio-tools/index.html +7 -7
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/data-analysis-tools/index.html +8 -8
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/embeds/index.html +6 -6
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/index.html +11 -11
- solace_agent_mesh/assets/docs/docs/documentation/{concepts → components}/cli/index.html +25 -25
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +104 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +59 -0
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-agents/index.html +113 -152
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-gateways/index.html +9 -9
- solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/creating-python-tools/index.html +12 -12
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +32 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/bedrock-agents/index.html +25 -25
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/custom-agent/index.html +13 -13
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/event-mesh-gateway/index.html +11 -11
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mcp-integration/index.html +10 -10
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mongodb-integration/index.html +13 -13
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rag-integration/index.html +13 -13
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rest-gateway/index.html +10 -10
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/sql-database/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +83 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +222 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +161 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +53 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +35 -100
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
- solace_agent_mesh/assets/docs/docs/documentation/{getting-started → installing-and-configuring}/configurations/index.html +56 -50
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +63 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
- solace_agent_mesh/assets/docs/docs/documentation/{Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html → migrations/a2a-upgrade/a2a-technical-migration-map/index.html} +10 -11
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1760121512891.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1760121512891.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/client/webui/frontend/static/assets/{authCallback-j1LW-wlq.js → authCallback-DwrxZE0E.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-B9p_nFNA.js → client-DarGQzyw.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-2nd1gbaH.js +339 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-DoKXctCM.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CS5YMf8a.js → vendor-BKIeiHj_.js} +80 -70
- 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/common/a2a/a2a_llm.txt +1 -1
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
- solace_agent_mesh/common/a2a/artifact.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +3 -2
- solace_agent_mesh/common/a2a/translation.py +3 -1
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +1 -1
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
- solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +23 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +93 -15
- solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +23 -0
- solace_agent_mesh/common/common_llm.txt +24 -39
- solace_agent_mesh/common/common_llm_detail.txt +2562 -0
- solace_agent_mesh/common/data_parts.py +9 -1
- solace_agent_mesh/common/middleware/config_resolver.py +3 -1
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
- solace_agent_mesh/common/middleware/registry.py +3 -1
- solace_agent_mesh/common/sac/sac_llm.txt +1 -1
- solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
- solace_agent_mesh/common/sac/sam_component_base.py +2 -1
- solace_agent_mesh/common/sam_events/event_service.py +3 -2
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
- solace_agent_mesh/common/services/employee_service.py +3 -1
- solace_agent_mesh/common/services/identity_service.py +2 -1
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +2 -1
- solace_agent_mesh/common/services/services_llm.txt +57 -6
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/artifact_utils.py +3 -1
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +3 -1
- solace_agent_mesh/common/utils/embeds/converter.py +3 -1
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +1 -1
- solace_agent_mesh/common/utils/embeds/evaluators.py +2 -1
- solace_agent_mesh/common/utils/embeds/modifiers.py +3 -2
- solace_agent_mesh/common/utils/embeds/resolver.py +2 -1
- solace_agent_mesh/common/utils/initializer.py +3 -1
- solace_agent_mesh/common/utils/message_utils.py +2 -1
- solace_agent_mesh/common/utils/push_notification_auth.py +3 -2
- solace_agent_mesh/common/utils/utils_llm.txt +75 -87
- solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
- solace_agent_mesh/core_a2a/service.py +2 -2
- solace_agent_mesh/gateway/base/app.py +3 -2
- solace_agent_mesh/gateway/base/base_llm.txt +1 -1
- solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
- solace_agent_mesh/gateway/base/component.py +3 -1
- solace_agent_mesh/gateway/base/task_context.py +2 -1
- solace_agent_mesh/gateway/gateway_llm.txt +242 -235
- solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +295 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +10 -1
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +155 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +1 -1
- solace_agent_mesh/gateway/http_sse/app.py +150 -3
- solace_agent_mesh/gateway/http_sse/component.py +372 -61
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +46 -6
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +4 -2
- solace_agent_mesh/gateway/http_sse/dependencies.py +119 -27
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +172 -172
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
- solace_agent_mesh/gateway/http_sse/main.py +149 -42
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +3 -12
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +103 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +5 -3
- solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +263 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -16
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +73 -18
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +9 -5
- solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
- solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +266 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +3 -3
- solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +32 -0
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +340 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +4 -53
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +173 -0
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/auth.py +3 -1
- solace_agent_mesh/gateway/http_sse/routers/config.py +29 -6
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +346 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +83 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +2 -10
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +5 -3
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +107 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +1 -15
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +37 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +3 -1
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +255 -204
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +223 -41
- solace_agent_mesh/gateway/http_sse/routers/sse.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +170 -43
- solace_agent_mesh/gateway/http_sse/routers/users.py +3 -1
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
- solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +3 -1
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +242 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +2 -82
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +177 -13
- solace_agent_mesh/gateway/http_sse/services/session_service.py +154 -85
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +318 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +3 -2
- solace_agent_mesh/gateway/http_sse/session_manager.py +2 -1
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +25 -14
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +285 -0
- solace_agent_mesh/gateway/http_sse/shared/types.py +7 -0
- solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +2 -1
- solace_agent_mesh/gateway/http_sse/sse_manager.py +2 -2
- solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +32 -0
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
- solace_agent_mesh/solace_agent_mesh_llm.txt +1 -1
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
- solace_agent_mesh/templates/gateway_app_template.py +4 -2
- solace_agent_mesh/templates/gateway_component_template.py +3 -1
- solace_agent_mesh/templates/logging_config_template.ini +22 -45
- solace_agent_mesh/templates/plugin_tools_template.py +2 -2
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.1.dist-info}/METADATA +2 -2
- solace_agent_mesh-1.5.1.dist-info/RECORD +504 -0
- solace_agent_mesh/agent/adk/invocation_monitor.py +0 -295
- solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/04989206.a248f00c.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/0e682baa.d54b8668.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/1023fc19.8a8a9309.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/1523c6b4.2645ef68.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/166ab619.e27886d9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/1c6e87d2.e056b7e0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/21ceee5f.3bf39250.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2a9cab12.2afaee76.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/332e10b5.f7629851.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3d406171.5560fdf9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.508ae8db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/442a8107.b5c2532a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/453a82a6.3c6bb61d.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/483cef9a.4736f2d8.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/4c2787c2.c1290a40.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55f47984.bcd00a86.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5b4258a4.fdfd2325.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/664b740a.ba305a89.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/75384d09.c19e8b51.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/768e31b0.9abcdc48.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/85387663.be2bc838.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/945fb41e.16e00776.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9a09e75d.92de8cf5.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9eff14a2.d62aad71.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a12a4955.25fbed32.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a3a92b25.af35e313.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/aba87c2f.4ddf32f2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ae0e903d.5fe5203f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ae4415af.16cc58d3.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/bac0be12.17de4316.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c2c06897.87cb1f47.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c835a94d.ce21f0bf.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/cc969b05.feef7dcc.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/cd3d4052.a19e7d78.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/cee5d587.47904f5e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/d6a81ee7.829198f1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.ed8dd236.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f897a61a.126663fe.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/fbfa3e75.e144b16c.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.f67fc9f4.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.40527046.js +0 -1
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +0 -46
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/rbac-setup-guilde/index.html +0 -201
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +0 -25
- solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +0 -105
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +0 -144
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +0 -91
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +0 -91
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +0 -55
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +0 -111
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +0 -77
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +0 -48
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +0 -54
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +0 -45
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/litellm_models/index.html +0 -49
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +0 -76
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +0 -73
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +0 -72
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +0 -54
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +0 -69
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +0 -59
- solace_agent_mesh/assets/docs/lunr-index-1759936913198.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1759936913198.json +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-ChRwcV89.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-DnnE01OM.js +0 -339
- solace_agent_mesh/gateway/http_sse/repository/entities/message.py +0 -41
- solace_agent_mesh/gateway/http_sse/repository/message_repository.py +0 -84
- solace_agent_mesh/gateway/http_sse/repository/models/message_model.py +0 -45
- solace_agent_mesh-1.4.12.dist-info/RECORD +0 -448
- /solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js.LICENSE.txt → 8591.5d015485.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/assets/docs/assets/js/{main.f67fc9f4.js.LICENSE.txt → main.bd3c34f3.js.LICENSE.txt} +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.1.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.1.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Quick Summary
|
|
4
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
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.
|
|
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
7
|
|
|
8
8
|
## Files and Subdirectories Overview
|
|
9
9
|
- **Direct files:**
|
|
@@ -44,12 +44,10 @@ The core architecture revolves around factory functions (`create_identity_servic
|
|
|
44
44
|
### Subdirectory APIs
|
|
45
45
|
|
|
46
46
|
#### providers/
|
|
47
|
-
**Purpose:**
|
|
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
48
|
**Key Exports:** `LocalFileIdentityService`
|
|
49
49
|
**Import Examples:**
|
|
50
50
|
```python
|
|
51
|
-
# Typically, you would use the factory function.
|
|
52
|
-
# But for direct instantiation (e.g., in tests), you can do this:
|
|
53
51
|
from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
|
|
54
52
|
```
|
|
55
53
|
|
|
@@ -307,6 +305,59 @@ async def main():
|
|
|
307
305
|
asyncio.run(main())
|
|
308
306
|
```
|
|
309
307
|
|
|
310
|
-
|
|
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.
|
|
311
310
|
|
|
312
|
-
|
|
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
|
+
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.
|
|
362
|
+
|
|
363
|
+
# content_hash: 879562926a7d3b7c6782ae395159d6c1f8a55663ce052a93eea8966e69b04444
|
|
@@ -0,0 +1,459 @@
|
|
|
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
|
+
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
Common utility functions for working with ADK artifacts.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import logging
|
|
5
6
|
from typing import Optional
|
|
6
7
|
from google.adk.artifacts import BaseArtifactService
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
log = logging.getLogger(__name__)
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
async def get_latest_artifact_version(
|
|
@@ -8,8 +8,10 @@ The issue occurs because the default event loop policy on macOS doesn't implemen
|
|
|
8
8
|
get_child_watcher(), which is required for subprocess creation.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
+
import logging
|
|
11
12
|
import sys
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
log = logging.getLogger(__name__)
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
def apply_macos_asyncio_fix() -> bool:
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
Contains the Central Data Converter and Serializer functions.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import logging
|
|
5
6
|
import json
|
|
6
7
|
import csv
|
|
7
8
|
import io
|
|
8
9
|
import base64
|
|
9
10
|
from typing import Any, Tuple, Optional, List, Dict
|
|
10
|
-
from solace_ai_connector.common.log import log
|
|
11
11
|
|
|
12
12
|
from .types import DataFormat
|
|
13
13
|
from ..mime_helpers import is_text_based_mime_type
|
|
14
14
|
|
|
15
|
+
log = logging.getLogger(__name__)
|
|
16
|
+
|
|
15
17
|
try:
|
|
16
18
|
import yaml
|
|
17
19
|
|
|
@@ -3,17 +3,18 @@ Contains individual evaluator functions for different embed types
|
|
|
3
3
|
and the mapping dictionary.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
import logging
|
|
6
7
|
import json
|
|
7
8
|
from datetime import datetime
|
|
8
9
|
import uuid
|
|
9
10
|
from typing import Any, Callable, Dict, Optional, Tuple
|
|
10
|
-
from solace_ai_connector.common.log import log
|
|
11
11
|
from asteval import Interpreter
|
|
12
12
|
import math, random
|
|
13
13
|
|
|
14
14
|
from ....agent.utils.artifact_helpers import format_metadata_for_llm
|
|
15
15
|
from .constants import EMBED_CHAIN_DELIMITER
|
|
16
16
|
|
|
17
|
+
log = logging.getLogger(__name__)
|
|
17
18
|
|
|
18
19
|
MATH_SAFE_SYMBOLS = {
|
|
19
20
|
# Basic math operations
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Defines modifier implementation functions and their contracts.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import logging
|
|
5
6
|
import re
|
|
6
7
|
from typing import Any, Callable, Dict, Optional, Tuple, List
|
|
7
8
|
|
|
8
|
-
from solace_ai_connector.common.log import log
|
|
9
|
-
|
|
10
9
|
from .constants import EARLY_EMBED_TYPES, LATE_EMBED_TYPES
|
|
11
10
|
|
|
11
|
+
log = logging.getLogger(__name__)
|
|
12
|
+
|
|
12
13
|
try:
|
|
13
14
|
from jsonpath_ng.ext import parse as jsonpath_parse
|
|
14
15
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Contains the main embed resolution functions, including the chain executor.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import logging
|
|
5
6
|
import asyncio
|
|
6
7
|
import json
|
|
7
|
-
from solace_ai_connector.common.log import log
|
|
8
8
|
from typing import Any, Callable, Dict, Optional, Set, Tuple, List, Union
|
|
9
9
|
from .constants import (
|
|
10
10
|
EMBED_REGEX,
|
|
@@ -23,6 +23,7 @@ from .converter import (
|
|
|
23
23
|
from .types import DataFormat
|
|
24
24
|
from ..mime_helpers import is_text_based_mime_type
|
|
25
25
|
|
|
26
|
+
log = logging.getLogger(__name__)
|
|
26
27
|
|
|
27
28
|
try:
|
|
28
29
|
import yaml
|