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
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# DEVELOPER GUIDE: entities
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The entities directory contains domain entities for the repository layer, providing core business objects for managing chat sessions, messages, tasks, feedback, and events with built-in validation and business logic.
|
|
5
|
+
|
|
6
|
+
## Files Overview
|
|
7
|
+
- `__init__.py` - Exports the main domain entities (Feedback, Message, Session, SessionHistory, Task, TaskEvent)
|
|
8
|
+
- `feedback.py` - Feedback entity for user ratings and comments on tasks
|
|
9
|
+
- `message.py` - Message entity with content validation and sender type checking
|
|
10
|
+
- `session.py` - Session entity with name management and access control
|
|
11
|
+
- `session_history.py` - Composite entity combining sessions with their message history
|
|
12
|
+
- `task.py` - Task entity for tracking user tasks and their status with token usage
|
|
13
|
+
- `task_event.py` - Task event entity for tracking events related to tasks
|
|
14
|
+
|
|
15
|
+
## Developer API Reference
|
|
16
|
+
|
|
17
|
+
### __init__.py
|
|
18
|
+
**Purpose:** Provides centralized imports for all domain entities
|
|
19
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import Feedback, Message, Session, SessionHistory, Task, TaskEvent`
|
|
20
|
+
|
|
21
|
+
### feedback.py
|
|
22
|
+
**Purpose:** Defines the Feedback domain entity for user ratings and comments
|
|
23
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import Feedback`
|
|
24
|
+
|
|
25
|
+
**Classes:**
|
|
26
|
+
- `Feedback(id: str, session_id: str, task_id: str, user_id: str, rating: str, comment: str | None = None, created_time: int)` - Feedback domain entity
|
|
27
|
+
- `id: str` - Unique feedback identifier
|
|
28
|
+
- `session_id: str` - Associated session identifier
|
|
29
|
+
- `task_id: str` - Associated task identifier
|
|
30
|
+
- `user_id: str` - User who provided feedback
|
|
31
|
+
- `rating: str` - User rating
|
|
32
|
+
- `comment: str | None` - Optional feedback comment
|
|
33
|
+
- `created_time: int` - Feedback creation timestamp
|
|
34
|
+
|
|
35
|
+
**Usage Examples:**
|
|
36
|
+
```python
|
|
37
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import Feedback
|
|
38
|
+
|
|
39
|
+
# Create feedback
|
|
40
|
+
feedback = Feedback(
|
|
41
|
+
id="feedback_123",
|
|
42
|
+
session_id="session_456",
|
|
43
|
+
task_id="task_789",
|
|
44
|
+
user_id="user_123",
|
|
45
|
+
rating="5",
|
|
46
|
+
comment="Great service!",
|
|
47
|
+
created_time=1640995200000
|
|
48
|
+
)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### message.py
|
|
52
|
+
**Purpose:** Defines the Message domain entity with business logic for chat messages
|
|
53
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import Message`
|
|
54
|
+
|
|
55
|
+
**Classes:**
|
|
56
|
+
- `Message(id: MessageId, session_id: SessionId, message: str, sender_type: SenderType, sender_name: str, message_type: MessageType = MessageType.TEXT, created_time: int)` - Message domain entity with business logic
|
|
57
|
+
- `validate_message_content() -> None` - Validates message content is not empty and under 10MB limit
|
|
58
|
+
- `is_from_user() -> bool` - Checks if message is from a user
|
|
59
|
+
- `is_from_agent() -> bool` - Checks if message is from an agent
|
|
60
|
+
- `is_system_message() -> bool` - Checks if message is a system message
|
|
61
|
+
- `id: MessageId` - Unique message identifier
|
|
62
|
+
- `session_id: SessionId` - Associated session identifier
|
|
63
|
+
- `message: str` - Message content
|
|
64
|
+
- `sender_type: SenderType` - Type of sender (USER, AGENT, SYSTEM)
|
|
65
|
+
- `sender_name: str` - Name of the message sender
|
|
66
|
+
- `message_type: MessageType` - Type of message content
|
|
67
|
+
- `created_time: int` - Message creation timestamp
|
|
68
|
+
|
|
69
|
+
**Usage Examples:**
|
|
70
|
+
```python
|
|
71
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import Message
|
|
72
|
+
from solace_agent_mesh.gateway.http_sse.shared.enums import SenderType, MessageType
|
|
73
|
+
|
|
74
|
+
# Create a user message
|
|
75
|
+
message = Message(
|
|
76
|
+
id="msg_123",
|
|
77
|
+
session_id="session_456",
|
|
78
|
+
message="Hello, how can I help?",
|
|
79
|
+
sender_type=SenderType.USER,
|
|
80
|
+
sender_name="John Doe",
|
|
81
|
+
message_type=MessageType.TEXT,
|
|
82
|
+
created_time=1640995200000
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Validate message content
|
|
86
|
+
message.validate_message_content()
|
|
87
|
+
|
|
88
|
+
# Check sender type
|
|
89
|
+
if message.is_from_user():
|
|
90
|
+
print("Message from user")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### session.py
|
|
94
|
+
**Purpose:** Defines the Session domain entity with business logic for chat sessions
|
|
95
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import Session`
|
|
96
|
+
|
|
97
|
+
**Classes:**
|
|
98
|
+
- `Session(id: SessionId, user_id: UserId, name: str | None = None, agent_id: AgentId | None = None, created_time: int, updated_time: int | None = None)` - Session domain entity with business logic
|
|
99
|
+
- `update_name(new_name: str) -> None` - Updates session name with validation and sets updated_time
|
|
100
|
+
- `mark_activity() -> None` - Marks session as having recent activity by updating timestamp
|
|
101
|
+
- `can_be_deleted_by_user(user_id: UserId) -> bool` - Checks if user can delete this session
|
|
102
|
+
- `can_be_accessed_by_user(user_id: UserId) -> bool` - Checks if user can access this session
|
|
103
|
+
- `id: SessionId` - Unique session identifier
|
|
104
|
+
- `user_id: UserId` - Owner user identifier
|
|
105
|
+
- `name: str | None` - Optional session name
|
|
106
|
+
- `agent_id: AgentId | None` - Optional associated agent identifier
|
|
107
|
+
- `created_time: int` - Session creation timestamp
|
|
108
|
+
- `updated_time: int | None` - Last update timestamp
|
|
109
|
+
|
|
110
|
+
**Usage Examples:**
|
|
111
|
+
```python
|
|
112
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import Session
|
|
113
|
+
|
|
114
|
+
# Create a new session
|
|
115
|
+
session = Session(
|
|
116
|
+
id="session_123",
|
|
117
|
+
user_id="user_456",
|
|
118
|
+
name="Customer Support Chat",
|
|
119
|
+
agent_id="agent_789",
|
|
120
|
+
created_time=1640995200000
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
# Update session name
|
|
124
|
+
session.update_name("Updated Chat Name")
|
|
125
|
+
|
|
126
|
+
# Mark activity
|
|
127
|
+
session.mark_activity()
|
|
128
|
+
|
|
129
|
+
# Check permissions
|
|
130
|
+
if session.can_be_accessed_by_user("user_456"):
|
|
131
|
+
print("User can access this session")
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### session_history.py
|
|
135
|
+
**Purpose:** Defines a composite entity that combines a session with its message history
|
|
136
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import SessionHistory`
|
|
137
|
+
|
|
138
|
+
**Classes:**
|
|
139
|
+
- `SessionHistory(session: Session, messages: list[Message] = [], total_message_count: int = 0)` - Composite entity representing a session with its messages
|
|
140
|
+
- `session: Session` - The session entity
|
|
141
|
+
- `messages: list[Message]` - List of messages in the session
|
|
142
|
+
- `total_message_count: int` - Total count of messages (may exceed messages list length for pagination)
|
|
143
|
+
|
|
144
|
+
**Usage Examples:**
|
|
145
|
+
```python
|
|
146
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import SessionHistory, Session, Message
|
|
147
|
+
from solace_agent_mesh.gateway.http_sse.shared.enums import SenderType
|
|
148
|
+
|
|
149
|
+
# Create session history
|
|
150
|
+
session = Session(
|
|
151
|
+
id="session_123",
|
|
152
|
+
user_id="user_456",
|
|
153
|
+
created_time=1640995200000
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
messages = [
|
|
157
|
+
Message(
|
|
158
|
+
id="msg_1",
|
|
159
|
+
session_id="session_123",
|
|
160
|
+
message="Hello",
|
|
161
|
+
sender_type=SenderType.USER,
|
|
162
|
+
sender_name="John",
|
|
163
|
+
created_time=1640995200000
|
|
164
|
+
)
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
history = SessionHistory(
|
|
168
|
+
session=session,
|
|
169
|
+
messages=messages,
|
|
170
|
+
total_message_count=1
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
# Access session and messages
|
|
174
|
+
print(f"Session: {history.session.id}")
|
|
175
|
+
print(f"Message count: {len(history.messages)}")
|
|
176
|
+
print(f"Total messages: {history.total_message_count}")
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### task.py
|
|
180
|
+
**Purpose:** Defines the Task domain entity for tracking user tasks with token usage metrics
|
|
181
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import Task`
|
|
182
|
+
|
|
183
|
+
**Classes:**
|
|
184
|
+
- `Task(id: str, user_id: str, start_time: int, end_time: int | None = None, status: str | None = None, initial_request_text: str | None = None, total_input_tokens: int | None = None, total_output_tokens: int | None = None, total_cached_input_tokens: int | None = None, token_usage_details: dict | None = None)` - Task domain entity with token usage tracking
|
|
185
|
+
- `id: str` - Unique task identifier
|
|
186
|
+
- `user_id: str` - User who owns the task
|
|
187
|
+
- `start_time: int` - Task start timestamp
|
|
188
|
+
- `end_time: int | None` - Optional task end timestamp
|
|
189
|
+
- `status: str | None` - Optional task status
|
|
190
|
+
- `initial_request_text: str | None` - Optional initial request text
|
|
191
|
+
- `total_input_tokens: int | None` - Total input tokens used
|
|
192
|
+
- `total_output_tokens: int | None` - Total output tokens generated
|
|
193
|
+
- `total_cached_input_tokens: int | None` - Total cached input tokens used
|
|
194
|
+
- `token_usage_details: dict | None` - Detailed token usage information
|
|
195
|
+
|
|
196
|
+
**Usage Examples:**
|
|
197
|
+
```python
|
|
198
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import Task
|
|
199
|
+
|
|
200
|
+
# Create a task
|
|
201
|
+
task = Task(
|
|
202
|
+
id="task_123",
|
|
203
|
+
user_id="user_456",
|
|
204
|
+
start_time=1640995200000,
|
|
205
|
+
status="in_progress",
|
|
206
|
+
initial_request_text="Help me with my order"
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Task with token usage tracking
|
|
210
|
+
task_with_tokens = Task(
|
|
211
|
+
id="task_124",
|
|
212
|
+
user_id="user_456",
|
|
213
|
+
start_time=1640995200000,
|
|
214
|
+
end_time=1640995800000,
|
|
215
|
+
status="completed",
|
|
216
|
+
total_input_tokens=150,
|
|
217
|
+
total_output_tokens=300,
|
|
218
|
+
total_cached_input_tokens=50,
|
|
219
|
+
token_usage_details={"model": "gpt-4", "cost": 0.05}
|
|
220
|
+
)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### task_event.py
|
|
224
|
+
**Purpose:** Defines the TaskEvent domain entity for tracking events related to tasks
|
|
225
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.entities import TaskEvent`
|
|
226
|
+
|
|
227
|
+
**Classes:**
|
|
228
|
+
- `TaskEvent(id: str, task_id: str, user_id: str | None = None, created_time: int, topic: str, direction: str, payload: dict[str, Any])` - TaskEvent domain entity
|
|
229
|
+
- `id: str` - Unique event identifier
|
|
230
|
+
- `task_id: str` - Associated task identifier
|
|
231
|
+
- `user_id: str | None` - Optional user identifier
|
|
232
|
+
- `created_time: int` - Event creation timestamp
|
|
233
|
+
- `topic: str` - Event topic
|
|
234
|
+
- `direction: str` - Event direction
|
|
235
|
+
- `payload: dict[str, Any]` - Event payload data
|
|
236
|
+
|
|
237
|
+
**Usage Examples:**
|
|
238
|
+
```python
|
|
239
|
+
from solace_agent_mesh.gateway.http_sse.repository.entities import TaskEvent
|
|
240
|
+
|
|
241
|
+
# Create a task event
|
|
242
|
+
event = TaskEvent(
|
|
243
|
+
id="event_123",
|
|
244
|
+
task_id="task_456",
|
|
245
|
+
user_id="user_789",
|
|
246
|
+
created_time=1640995200000,
|
|
247
|
+
topic="task.status.changed",
|
|
248
|
+
direction="outbound",
|
|
249
|
+
payload={"status": "completed", "result": "success"}
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
# Event without user
|
|
253
|
+
system_event = TaskEvent(
|
|
254
|
+
id="event_124",
|
|
255
|
+
task_id="task_456",
|
|
256
|
+
created_time=1640995200000,
|
|
257
|
+
topic="task.system.notification",
|
|
258
|
+
direction="inbound",
|
|
259
|
+
payload={"message": "Task processing started"}
|
|
260
|
+
)
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
# content_hash: 14f978bcbf2c820db1c7f3185ffa1529a656b3b5fa0f64cff81927eb2f7d12e9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Feedback domain entity.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Feedback(BaseModel):
|
|
9
|
+
"""Feedback domain entity."""
|
|
10
|
+
|
|
11
|
+
id: str
|
|
12
|
+
session_id: str
|
|
13
|
+
task_id: str
|
|
14
|
+
user_id: str
|
|
15
|
+
rating: str
|
|
16
|
+
comment: str | None = None
|
|
17
|
+
created_time: int
|
|
18
|
+
|
|
19
|
+
class Config:
|
|
20
|
+
from_attributes = True
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Session history composite entity.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel
|
|
6
|
-
|
|
7
|
-
from .message import Message
|
|
8
|
-
from .session import Session
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SessionHistory(BaseModel):
|
|
12
|
-
"""Composite entity representing a session with its messages."""
|
|
13
|
-
|
|
14
|
-
session: Session
|
|
15
|
-
messages: list[Message] = []
|
|
16
|
-
total_message_count: int = 0
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Task domain entity.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Task(BaseModel):
|
|
9
|
+
"""Task domain entity."""
|
|
10
|
+
|
|
11
|
+
id: str
|
|
12
|
+
user_id: str
|
|
13
|
+
start_time: int
|
|
14
|
+
end_time: int | None = None
|
|
15
|
+
status: str | None = None
|
|
16
|
+
initial_request_text: str | None = None
|
|
17
|
+
|
|
18
|
+
# Token usage fields
|
|
19
|
+
total_input_tokens: int | None = None
|
|
20
|
+
total_output_tokens: int | None = None
|
|
21
|
+
total_cached_input_tokens: int | None = None
|
|
22
|
+
token_usage_details: dict | None = None
|
|
23
|
+
|
|
24
|
+
class Config:
|
|
25
|
+
from_attributes = True
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Task Event domain entity.
|
|
3
|
+
"""
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TaskEvent(BaseModel):
|
|
10
|
+
"""TaskEvent domain entity."""
|
|
11
|
+
|
|
12
|
+
id: str
|
|
13
|
+
task_id: str
|
|
14
|
+
user_id: str | None = None
|
|
15
|
+
created_time: int
|
|
16
|
+
topic: str
|
|
17
|
+
direction: str
|
|
18
|
+
payload: dict[str, Any]
|
|
19
|
+
|
|
20
|
+
class Config:
|
|
21
|
+
from_attributes = True
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Feedback repository implementation using SQLAlchemy.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from sqlalchemy.orm import Session as DBSession
|
|
6
|
+
|
|
7
|
+
from .entities import Feedback
|
|
8
|
+
from .interfaces import IFeedbackRepository
|
|
9
|
+
from .models import FeedbackModel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FeedbackRepository(IFeedbackRepository):
|
|
13
|
+
"""SQLAlchemy implementation of feedback repository."""
|
|
14
|
+
|
|
15
|
+
def __init__(self, db: DBSession):
|
|
16
|
+
self.db = db
|
|
17
|
+
|
|
18
|
+
def save(self, feedback: Feedback) -> Feedback:
|
|
19
|
+
"""Save feedback."""
|
|
20
|
+
model = FeedbackModel(
|
|
21
|
+
id=feedback.id,
|
|
22
|
+
session_id=feedback.session_id,
|
|
23
|
+
task_id=feedback.task_id,
|
|
24
|
+
user_id=feedback.user_id,
|
|
25
|
+
rating=feedback.rating,
|
|
26
|
+
comment=feedback.comment,
|
|
27
|
+
created_time=feedback.created_time,
|
|
28
|
+
)
|
|
29
|
+
self.db.add(model)
|
|
30
|
+
self.db.commit()
|
|
31
|
+
self.db.refresh(model)
|
|
32
|
+
return self._model_to_entity(model)
|
|
33
|
+
|
|
34
|
+
def delete_feedback_older_than(self, cutoff_time_ms: int, batch_size: int) -> int:
|
|
35
|
+
"""
|
|
36
|
+
Delete feedback records older than the cutoff time.
|
|
37
|
+
Uses batch deletion to avoid long-running transactions.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
cutoff_time_ms: Epoch milliseconds - feedback with created_time before this will be deleted
|
|
41
|
+
batch_size: Number of feedback records to delete per batch
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Total number of feedback records deleted
|
|
45
|
+
"""
|
|
46
|
+
total_deleted = 0
|
|
47
|
+
|
|
48
|
+
while True:
|
|
49
|
+
# Find a batch of feedback IDs to delete
|
|
50
|
+
feedback_ids_to_delete = (
|
|
51
|
+
self.db.query(FeedbackModel.id)
|
|
52
|
+
.filter(FeedbackModel.created_time < cutoff_time_ms)
|
|
53
|
+
.limit(batch_size)
|
|
54
|
+
.all()
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if not feedback_ids_to_delete:
|
|
58
|
+
break
|
|
59
|
+
|
|
60
|
+
# Extract IDs from the result tuples
|
|
61
|
+
ids = [feedback_id[0] for feedback_id in feedback_ids_to_delete]
|
|
62
|
+
|
|
63
|
+
# Delete this batch
|
|
64
|
+
deleted_count = (
|
|
65
|
+
self.db.query(FeedbackModel)
|
|
66
|
+
.filter(FeedbackModel.id.in_(ids))
|
|
67
|
+
.delete(synchronize_session=False)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
self.db.commit()
|
|
71
|
+
total_deleted += deleted_count
|
|
72
|
+
|
|
73
|
+
# If we deleted fewer than batch_size, we're done
|
|
74
|
+
if deleted_count < batch_size:
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
return total_deleted
|
|
78
|
+
|
|
79
|
+
def _model_to_entity(self, model: FeedbackModel) -> Feedback:
|
|
80
|
+
"""Convert SQLAlchemy model to domain entity."""
|
|
81
|
+
return Feedback.model_validate(model)
|
|
@@ -3,9 +3,13 @@ Repository interfaces defining contracts for data access.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
|
+
from typing import TYPE_CHECKING, Optional
|
|
6
7
|
|
|
7
|
-
from ..shared.types import PaginationInfo, SessionId, UserId
|
|
8
|
-
from .entities import
|
|
8
|
+
from ..shared.types import PaginationInfo, PaginationParams, SessionId, UserId
|
|
9
|
+
from .entities import Feedback, Session, Task, TaskEvent
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from .entities import ChatTask
|
|
9
13
|
|
|
10
14
|
|
|
11
15
|
class ISessionRepository(ABC):
|
|
@@ -13,7 +17,7 @@ class ISessionRepository(ABC):
|
|
|
13
17
|
|
|
14
18
|
@abstractmethod
|
|
15
19
|
def find_by_user(
|
|
16
|
-
self, user_id: UserId, pagination:
|
|
20
|
+
self, user_id: UserId, pagination: PaginationParams | None = None
|
|
17
21
|
) -> list[Session]:
|
|
18
22
|
"""Find all sessions for a specific user."""
|
|
19
23
|
pass
|
|
@@ -40,30 +44,81 @@ class ISessionRepository(ABC):
|
|
|
40
44
|
"""Delete a session belonging to a user."""
|
|
41
45
|
pass
|
|
42
46
|
|
|
47
|
+
|
|
48
|
+
class ITaskRepository(ABC):
|
|
49
|
+
"""Interface for task data access operations."""
|
|
50
|
+
|
|
43
51
|
@abstractmethod
|
|
44
|
-
def
|
|
45
|
-
|
|
46
|
-
) -> tuple[Session, list[Message]] | None:
|
|
47
|
-
"""Find a session with its messages."""
|
|
52
|
+
def save_task(self, task: Task) -> Task:
|
|
53
|
+
"""Create or update a task."""
|
|
48
54
|
pass
|
|
49
55
|
|
|
56
|
+
@abstractmethod
|
|
57
|
+
def save_event(self, event: TaskEvent) -> TaskEvent:
|
|
58
|
+
"""Save a task event."""
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
@abstractmethod
|
|
62
|
+
def find_by_id(self, task_id: str) -> Task | None:
|
|
63
|
+
"""Find a task by its ID."""
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def find_by_id_with_events(self, task_id: str) -> tuple[Task, list[TaskEvent]] | None:
|
|
68
|
+
"""Find a task with all its events."""
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
@abstractmethod
|
|
72
|
+
def search(
|
|
73
|
+
self,
|
|
74
|
+
user_id: UserId,
|
|
75
|
+
start_date: int | None = None,
|
|
76
|
+
end_date: int | None = None,
|
|
77
|
+
search_query: str | None = None,
|
|
78
|
+
pagination: PaginationParams | None = None,
|
|
79
|
+
) -> list[Task]:
|
|
80
|
+
"""Search for tasks with filters."""
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
@abstractmethod
|
|
84
|
+
def delete_tasks_older_than(self, cutoff_time_ms: int, batch_size: int) -> int:
|
|
85
|
+
"""Delete tasks older than cutoff time using batch deletion."""
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class IFeedbackRepository(ABC):
|
|
90
|
+
"""Interface for feedback data access operations."""
|
|
91
|
+
|
|
92
|
+
@abstractmethod
|
|
93
|
+
def save(self, feedback: Feedback) -> Feedback:
|
|
94
|
+
"""Save feedback."""
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
@abstractmethod
|
|
98
|
+
def delete_feedback_older_than(self, cutoff_time_ms: int, batch_size: int) -> int:
|
|
99
|
+
"""Delete feedback older than cutoff time using batch deletion."""
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class IChatTaskRepository(ABC):
|
|
104
|
+
"""Interface for chat task data access operations."""
|
|
50
105
|
|
|
51
|
-
class IMessageRepository(ABC):
|
|
52
|
-
"""Interface for message data access operations."""
|
|
53
|
-
|
|
54
106
|
@abstractmethod
|
|
55
|
-
def
|
|
56
|
-
|
|
57
|
-
) -> list[Message]:
|
|
58
|
-
"""Find all messages in a session."""
|
|
107
|
+
def save(self, task: "ChatTask") -> "ChatTask":
|
|
108
|
+
"""Save or update a chat task (upsert)."""
|
|
59
109
|
pass
|
|
60
110
|
|
|
61
111
|
@abstractmethod
|
|
62
|
-
def
|
|
63
|
-
"""
|
|
112
|
+
def find_by_session(self, session_id: SessionId, user_id: UserId) -> list["ChatTask"]:
|
|
113
|
+
"""Find all tasks for a session."""
|
|
114
|
+
pass
|
|
115
|
+
|
|
116
|
+
@abstractmethod
|
|
117
|
+
def find_by_id(self, task_id: str, user_id: UserId) -> Optional["ChatTask"]:
|
|
118
|
+
"""Find a specific task."""
|
|
64
119
|
pass
|
|
65
120
|
|
|
66
121
|
@abstractmethod
|
|
67
122
|
def delete_by_session(self, session_id: SessionId) -> bool:
|
|
68
|
-
"""Delete all
|
|
69
|
-
pass
|
|
123
|
+
"""Delete all tasks for a session."""
|
|
124
|
+
pass
|
|
@@ -3,15 +3,19 @@ SQLAlchemy models and Pydantic models for database persistence.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from .base import Base
|
|
6
|
-
from .
|
|
6
|
+
from .chat_task_model import ChatTaskModel
|
|
7
|
+
from .feedback_model import FeedbackModel
|
|
7
8
|
from .session_model import SessionModel, CreateSessionModel, UpdateSessionModel
|
|
9
|
+
from .task_event_model import TaskEventModel
|
|
10
|
+
from .task_model import TaskModel
|
|
8
11
|
|
|
9
12
|
__all__ = [
|
|
10
13
|
"Base",
|
|
11
|
-
"
|
|
14
|
+
"ChatTaskModel",
|
|
12
15
|
"SessionModel",
|
|
13
|
-
"CreateMessageModel",
|
|
14
|
-
"UpdateMessageModel",
|
|
15
16
|
"CreateSessionModel",
|
|
16
17
|
"UpdateSessionModel",
|
|
17
|
-
|
|
18
|
+
"TaskEventModel",
|
|
19
|
+
"TaskModel",
|
|
20
|
+
"FeedbackModel",
|
|
21
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ChatTask SQLAlchemy model.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from sqlalchemy import BigInteger, Column, ForeignKey, String, Text
|
|
6
|
+
from sqlalchemy.orm import relationship
|
|
7
|
+
|
|
8
|
+
from .base import Base
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ChatTaskModel(Base):
|
|
12
|
+
"""SQLAlchemy model for chat tasks."""
|
|
13
|
+
|
|
14
|
+
__tablename__ = "chat_tasks"
|
|
15
|
+
|
|
16
|
+
id = Column(String, primary_key=True)
|
|
17
|
+
session_id = Column(
|
|
18
|
+
String,
|
|
19
|
+
ForeignKey("sessions.id", ondelete="CASCADE"),
|
|
20
|
+
nullable=False,
|
|
21
|
+
index=True
|
|
22
|
+
)
|
|
23
|
+
user_id = Column(String, nullable=False, index=True)
|
|
24
|
+
user_message = Column(Text, nullable=True)
|
|
25
|
+
message_bubbles = Column(Text, nullable=False)
|
|
26
|
+
task_metadata = Column(Text, nullable=True)
|
|
27
|
+
created_time = Column(BigInteger, nullable=False, index=True)
|
|
28
|
+
updated_time = Column(BigInteger, nullable=True)
|
|
29
|
+
|
|
30
|
+
# Relationship to session
|
|
31
|
+
session = relationship("SessionModel", back_populates="chat_tasks")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Feedback SQLAlchemy model.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from sqlalchemy import BigInteger, Column, String, Text
|
|
6
|
+
|
|
7
|
+
from .base import Base
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class FeedbackModel(Base):
|
|
11
|
+
"""SQLAlchemy model for user feedback."""
|
|
12
|
+
|
|
13
|
+
__tablename__ = "feedback"
|
|
14
|
+
|
|
15
|
+
id = Column(String, primary_key=True)
|
|
16
|
+
session_id = Column(String, nullable=False)
|
|
17
|
+
task_id = Column(String, nullable=False, index=True)
|
|
18
|
+
user_id = Column(String, nullable=False, index=True)
|
|
19
|
+
rating = Column(String, nullable=False) # e.g., 'up', 'down'
|
|
20
|
+
comment = Column(Text, nullable=True)
|
|
21
|
+
created_time = Column(BigInteger, nullable=False)
|