solace-agent-mesh 1.6.1__py3-none-any.whl → 1.13.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +852 -109
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
- solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
- solace_agent_mesh/agent/adk/models/lite_llm.py +77 -21
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +85 -20
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +94 -18
- solace_agent_mesh/agent/adk/setup.py +281 -65
- solace_agent_mesh/agent/adk/stream_parser.py +231 -37
- solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
- solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
- solace_agent_mesh/agent/proxies/base/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/component.py +188 -22
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
- solace_agent_mesh/agent/sac/app.py +91 -3
- solace_agent_mesh/agent/sac/component.py +591 -157
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
- solace_agent_mesh/agent/tools/__init__.py +3 -0
- solace_agent_mesh/agent/tools/audio_tools.py +3 -3
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +710 -171
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +57 -2
- solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
- solace_agent_mesh/agent/tools/web_tools.py +125 -17
- solace_agent_mesh/agent/utils/artifact_helpers.py +248 -6
- solace_agent_mesh/agent/utils/context_helpers.py +17 -0
- solace_agent_mesh/assets/docs/404.html +6 -6
- solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +82 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
- solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -49
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +162 -171
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +23 -19
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +112 -87
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +87 -64
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +311 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
- solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
- solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
- solace_agent_mesh/cli/commands/run_cmd.py +64 -49
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +15 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-KnKMP_vb.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-CGk8Suyh.js +565 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/a2a/events.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +5 -0
- solace_agent_mesh/common/a2a/types.py +2 -1
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +144 -4
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/exceptions.py +24 -0
- solace_agent_mesh/common/oauth/__init__.py +17 -0
- solace_agent_mesh/common/oauth/oauth_client.py +408 -0
- solace_agent_mesh/common/oauth/utils.py +50 -0
- solace_agent_mesh/common/rag_dto.py +156 -0
- solace_agent_mesh/common/sac/sam_component_base.py +97 -19
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/services/employee_service.py +1 -1
- solace_agent_mesh/common/utils/embeds/constants.py +1 -0
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
- solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
- solace_agent_mesh/common/utils/embeds/types.py +9 -0
- solace_agent_mesh/common/utils/log_formatters.py +20 -0
- solace_agent_mesh/common/utils/mime_helpers.py +12 -5
- solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
- solace_agent_mesh/common/utils/rbac_utils.py +69 -0
- solace_agent_mesh/common/utils/templates/__init__.py +8 -0
- solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
- solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
- solace_agent_mesh/config_portal/backend/common.py +12 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/service.py +3 -2
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +170 -0
- solace_agent_mesh/gateway/adapter/types.py +230 -0
- solace_agent_mesh/gateway/base/app.py +39 -2
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +1027 -151
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +894 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
- solace_agent_mesh/gateway/http_sse/app.py +40 -11
- solace_agent_mesh/gateway/http_sse/component.py +285 -160
- solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
- solace_agent_mesh/gateway/http_sse/main.py +68 -450
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +26 -3
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +8 -2
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +256 -58
- solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
- solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
- solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +92 -9
- solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +361 -12
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +29 -0
- solace_agent_mesh/services/platform/alembic/env.py +85 -0
- solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
- solace_agent_mesh/services/platform/alembic.ini +109 -0
- solace_agent_mesh/services/platform/api/__init__.py +3 -0
- solace_agent_mesh/services/platform/api/dependencies.py +154 -0
- solace_agent_mesh/services/platform/api/main.py +314 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +215 -0
- solace_agent_mesh/services/platform/component.py +777 -0
- solace_agent_mesh/shared/__init__.py +14 -0
- solace_agent_mesh/shared/api/__init__.py +42 -0
- solace_agent_mesh/shared/auth/__init__.py +26 -0
- solace_agent_mesh/shared/auth/dependencies.py +204 -0
- solace_agent_mesh/shared/auth/middleware.py +347 -0
- solace_agent_mesh/shared/database/__init__.py +20 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
- solace_agent_mesh/shared/exceptions/__init__.py +36 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +19 -5
- solace_agent_mesh/shared/utils/__init__.py +21 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
- solace_agent_mesh/templates/platform.yaml +49 -0
- solace_agent_mesh/templates/plugin_readme_template.md +3 -25
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/proxy_template.yaml +62 -0
- solace_agent_mesh/templates/webui.yaml +148 -6
- solace_agent_mesh/tools/web_search/__init__.py +18 -0
- solace_agent_mesh/tools/web_search/base.py +84 -0
- solace_agent_mesh/tools/web_search/google_search.py +247 -0
- solace_agent_mesh/tools/web_search/models.py +99 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
- solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
- solace_agent_mesh/agent/adk/models/models_llm.txt +0 -142
- solace_agent_mesh/agent/agent_llm.txt +0 -378
- solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
- solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
- solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
- solace_agent_mesh/agent/testing/testing_llm.txt +0 -57
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
- solace_agent_mesh/client/webui/frontend/static/assets/client-CaY59VuC.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
- solace_agent_mesh/common/common_llm.txt +0 -251
- solace_agent_mesh/common/common_llm_detail.txt +0 -2562
- solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
- solace_agent_mesh/common/sac/sac_llm.txt +0 -71
- solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
- solace_agent_mesh/common/services/providers/providers_llm.txt +0 -80
- solace_agent_mesh/common/services/services_llm.txt +0 -363
- solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
- solace_agent_mesh/common/utils/utils_llm.txt +0 -336
- solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
- solace_agent_mesh/gateway/base/base_llm.txt +0 -224
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -373
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -263
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
- solace_agent_mesh/llm.txt +0 -228
- solace_agent_mesh/llm_detail.txt +0 -2835
- solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
- solace_agent_mesh/templates/logging_config_template.ini +0 -45
- solace_agent_mesh/templates/templates_llm.txt +0 -147
- solace_agent_mesh-1.6.1.dist-info/RECORD +0 -525
- /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
## Quick Summary
|
|
2
|
-
|
|
3
|
-
The repository directory implements the data access layer for the HTTP SSE gateway using the Repository pattern. It provides a clean separation between domain entities and database persistence through SQLAlchemy ORM models. The architecture consists of abstract interfaces, concrete implementations, domain entities with business logic, and SQLAlchemy models for database operations. The two main subdirectories (entities and models) work together to provide a complete data persistence solution for chat sessions, messages, tasks, feedback, and events.
|
|
4
|
-
|
|
5
|
-
## Files and Subdirectories Overview
|
|
6
|
-
|
|
7
|
-
**Direct files:**
|
|
8
|
-
- `__init__.py` - Main package exports for repository interfaces, implementations, entities, and models
|
|
9
|
-
- `interfaces.py` - Abstract repository interfaces defining data access contracts for sessions, messages, tasks, and feedback
|
|
10
|
-
- `message_repository.py` - SQLAlchemy implementation of message data access operations
|
|
11
|
-
- `session_repository.py` - SQLAlchemy implementation of session data access operations
|
|
12
|
-
- `feedback_repository.py` - SQLAlchemy implementation of feedback data access operations
|
|
13
|
-
- `task_repository.py` - SQLAlchemy implementation of task data access operations
|
|
14
|
-
|
|
15
|
-
**Subdirectories:**
|
|
16
|
-
- `entities/` - Domain entities with business logic for sessions, messages, tasks, feedback, and events
|
|
17
|
-
- `models/` - SQLAlchemy ORM models for database persistence and schema definition
|
|
18
|
-
|
|
19
|
-
## Developer API Reference
|
|
20
|
-
|
|
21
|
-
### Direct Files
|
|
22
|
-
|
|
23
|
-
#### __init__.py
|
|
24
|
-
**Purpose:** Central package exports for all repository components
|
|
25
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository import IMessageRepository, ISessionRepository, MessageRepository, SessionRepository, Session, Message, SessionHistory, Base, MessageModel, SessionModel`
|
|
26
|
-
|
|
27
|
-
**Exports:**
|
|
28
|
-
- `IMessageRepository` - Message repository interface
|
|
29
|
-
- `ISessionRepository` - Session repository interface
|
|
30
|
-
- `MessageRepository` - Message repository implementation
|
|
31
|
-
- `SessionRepository` - Session repository implementation
|
|
32
|
-
- `Message` - Message domain entity
|
|
33
|
-
- `Session` - Session domain entity
|
|
34
|
-
- `SessionHistory` - Session with messages composite entity
|
|
35
|
-
- `Base` - SQLAlchemy declarative base
|
|
36
|
-
- `MessageModel` - SQLAlchemy message model
|
|
37
|
-
- `SessionModel` - SQLAlchemy session model
|
|
38
|
-
|
|
39
|
-
#### interfaces.py
|
|
40
|
-
**Purpose:** Defines abstract repository interfaces for data access contracts
|
|
41
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.interfaces import ISessionRepository, IMessageRepository, ITaskRepository, IFeedbackRepository`
|
|
42
|
-
|
|
43
|
-
**Classes:**
|
|
44
|
-
- `ISessionRepository(ABC)` - Abstract interface for session data operations
|
|
45
|
-
- `find_by_user(user_id: UserId, pagination: PaginationInfo | None = None) -> list[Session]` - Find all sessions for a user
|
|
46
|
-
- `count_by_user(user_id: UserId) -> int` - Count total sessions for a user
|
|
47
|
-
- `find_user_session(session_id: SessionId, user_id: UserId) -> Session | None` - Find specific user session
|
|
48
|
-
- `save(session: Session) -> Session` - Save or update a session
|
|
49
|
-
- `delete(session_id: SessionId, user_id: UserId) -> bool` - Delete user session
|
|
50
|
-
- `find_user_session_with_messages(session_id: SessionId, user_id: UserId, pagination: PaginationInfo | None = None) -> tuple[Session, list[Message]] | None` - Find session with messages
|
|
51
|
-
|
|
52
|
-
- `IMessageRepository(ABC)` - Abstract interface for message data operations
|
|
53
|
-
- `find_by_session(session_id: SessionId, pagination: PaginationInfo | None = None) -> list[Message]` - Find messages in session
|
|
54
|
-
- `save(message: Message) -> Message` - Save or update a message
|
|
55
|
-
- `delete_by_session(session_id: SessionId) -> bool` - Delete all session messages
|
|
56
|
-
|
|
57
|
-
- `ITaskRepository(ABC)` - Abstract interface for task data operations
|
|
58
|
-
- `save_task(task: Task) -> Task` - Create or update a task
|
|
59
|
-
- `save_event(event: TaskEvent) -> TaskEvent` - Save a task event
|
|
60
|
-
- `find_by_id(task_id: str) -> Task | None` - Find a task by its ID
|
|
61
|
-
- `find_by_id_with_events(task_id: str) -> tuple[Task, list[TaskEvent]] | None` - Find a task with all its events
|
|
62
|
-
- `search(user_id: UserId, start_date: int | None = None, end_date: int | None = None, search_query: str | None = None, pagination: PaginationParams | None = None) -> list[Task]` - Search for tasks with filters
|
|
63
|
-
- `delete_tasks_older_than(cutoff_time_ms: int, batch_size: int) -> int` - Delete tasks older than cutoff time
|
|
64
|
-
|
|
65
|
-
- `IFeedbackRepository(ABC)` - Abstract interface for feedback data operations
|
|
66
|
-
- `save(feedback: Feedback) -> Feedback` - Save feedback
|
|
67
|
-
- `delete_feedback_older_than(cutoff_time_ms: int, batch_size: int) -> int` - Delete feedback older than cutoff time
|
|
68
|
-
|
|
69
|
-
#### message_repository.py
|
|
70
|
-
**Purpose:** SQLAlchemy implementation of message repository interface
|
|
71
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.message_repository import MessageRepository`
|
|
72
|
-
|
|
73
|
-
**Classes:**
|
|
74
|
-
- `MessageRepository(IMessageRepository)` - SQLAlchemy message repository implementation
|
|
75
|
-
- `__init__(db: DBSession)` - Initialize with database session
|
|
76
|
-
- `find_by_session(session_id: SessionId, pagination: PaginationInfo | None = None) -> list[Message]` - Find messages in session with pagination
|
|
77
|
-
- `save(message: Message) -> Message` - Save or update message in database
|
|
78
|
-
- `delete_by_session(session_id: SessionId) -> bool` - Delete all messages in session
|
|
79
|
-
- `_convert_model_to_entity(model: MessageModel) -> Message` - Convert SQLAlchemy model to domain entity
|
|
80
|
-
|
|
81
|
-
#### session_repository.py
|
|
82
|
-
**Purpose:** SQLAlchemy implementation of session repository interface
|
|
83
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.session_repository import SessionRepository`
|
|
84
|
-
|
|
85
|
-
**Classes:**
|
|
86
|
-
- `SessionRepository(ISessionRepository)` - SQLAlchemy session repository implementation
|
|
87
|
-
- `__init__(db: DBSession)` - Initialize with database session
|
|
88
|
-
- `find_by_user(user_id: UserId, pagination: PaginationInfo | None = None) -> list[Session]` - Find user sessions with pagination
|
|
89
|
-
- `count_by_user(user_id: UserId) -> int` - Count total sessions for a user
|
|
90
|
-
- `find_user_session(session_id: SessionId, user_id: UserId) -> Session | None` - Find specific user session
|
|
91
|
-
- `save(session: Session) -> Session` - Save or update session in database
|
|
92
|
-
- `delete(session_id: SessionId, user_id: UserId) -> bool` - Delete user session
|
|
93
|
-
- `find_user_session_with_messages(session_id: SessionId, user_id: UserId, pagination: PaginationInfo | None = None) -> tuple[Session, list[Message]] | None` - Find session with messages
|
|
94
|
-
- `_message_model_to_entity(model: MessageModel) -> Message` - Convert message model to entity
|
|
95
|
-
|
|
96
|
-
#### feedback_repository.py
|
|
97
|
-
**Purpose:** SQLAlchemy implementation of feedback repository interface
|
|
98
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.feedback_repository import FeedbackRepository`
|
|
99
|
-
|
|
100
|
-
**Classes:**
|
|
101
|
-
- `FeedbackRepository(IFeedbackRepository)` - SQLAlchemy feedback repository implementation
|
|
102
|
-
- `__init__(db: DBSession)` - Initialize with database session
|
|
103
|
-
- `save(feedback: Feedback) -> Feedback` - Save feedback to database
|
|
104
|
-
- `delete_feedback_older_than(cutoff_time_ms: int, batch_size: int) -> int` - Delete feedback older than cutoff time using batch deletion
|
|
105
|
-
- `_model_to_entity(model: FeedbackModel) -> Feedback` - Convert SQLAlchemy model to domain entity
|
|
106
|
-
|
|
107
|
-
#### task_repository.py
|
|
108
|
-
**Purpose:** SQLAlchemy implementation of task repository interface
|
|
109
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.repository.task_repository import TaskRepository`
|
|
110
|
-
|
|
111
|
-
**Classes:**
|
|
112
|
-
- `TaskRepository(ITaskRepository)` - SQLAlchemy task repository implementation
|
|
113
|
-
- `__init__(db: DBSession)` - Initialize with database session
|
|
114
|
-
- `save_task(task: Task) -> Task` - Create or update a task
|
|
115
|
-
- `save_event(event: TaskEvent) -> TaskEvent` - Save a task event
|
|
116
|
-
- `find_by_id(task_id: str) -> Task | None` - Find a task by its ID
|
|
117
|
-
- `find_by_id_with_events(task_id: str) -> tuple[Task, list[TaskEvent]] | None` - Find a task with all its events
|
|
118
|
-
- `search(user_id: UserId, start_date: int | None = None, end_date: int | None = None, search_query: str | None = None, pagination: PaginationParams | None = None) -> list[Task]` - Search for tasks with filters
|
|
119
|
-
- `delete_tasks_older_than(cutoff_time_ms: int, batch_size: int) -> int` - Delete tasks older than cutoff time using batch deletion
|
|
120
|
-
- `_task_model_to_entity(model: TaskModel) -> Task` - Convert SQLAlchemy task model to domain entity
|
|
121
|
-
- `_event_model_to_entity(model: TaskEventModel) -> TaskEvent` - Convert SQLAlchemy event model to domain entity
|
|
122
|
-
|
|
123
|
-
### Subdirectory APIs
|
|
124
|
-
|
|
125
|
-
#### entities/
|
|
126
|
-
**Purpose:** Provides domain entities with business logic for sessions, messages, tasks, feedback, and events
|
|
127
|
-
**Key Exports:** Message, Session, SessionHistory, Task, TaskEvent, Feedback
|
|
128
|
-
**Import Examples:**
|
|
129
|
-
```python
|
|
130
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import Message, Session, SessionHistory, Task, TaskEvent, Feedback
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
#### models/
|
|
134
|
-
**Purpose:** Provides SQLAlchemy ORM models for database persistence and schema definition
|
|
135
|
-
**Key Exports:** Base, MessageModel, SessionModel, TaskModel, TaskEventModel, FeedbackModel
|
|
136
|
-
**Import Examples:**
|
|
137
|
-
```python
|
|
138
|
-
from solace_agent_mesh.gateway.http_sse.repository.models import Base, MessageModel, SessionModel, TaskModel, TaskEventModel, FeedbackModel
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## Complete Usage Guide
|
|
142
|
-
|
|
143
|
-
### 1. Setting Up the Repository Layer
|
|
144
|
-
|
|
145
|
-
```python
|
|
146
|
-
from sqlalchemy import create_engine
|
|
147
|
-
from sqlalchemy.orm import sessionmaker
|
|
148
|
-
from solace_agent_mesh.gateway.http_sse.repository import (
|
|
149
|
-
Base, MessageRepository, SessionRepository, TaskRepository, FeedbackRepository
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
# Create database engine and session
|
|
153
|
-
engine = create_engine("sqlite:///chat.db")
|
|
154
|
-
Base.metadata.create_all(engine)
|
|
155
|
-
Session = sessionmaker(bind=engine)
|
|
156
|
-
db_session = Session()
|
|
157
|
-
|
|
158
|
-
# Initialize repositories
|
|
159
|
-
message_repo = MessageRepository(db_session)
|
|
160
|
-
session_repo = SessionRepository(db_session)
|
|
161
|
-
task_repo = TaskRepository(db_session)
|
|
162
|
-
feedback_repo = FeedbackRepository(db_session)
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### 2. Working with Sessions
|
|
166
|
-
|
|
167
|
-
```python
|
|
168
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import Session
|
|
169
|
-
from solace_agent_mesh.gateway.http_sse.shared.types import PaginationInfo
|
|
170
|
-
import time
|
|
171
|
-
|
|
172
|
-
# Create a new session
|
|
173
|
-
session = Session(
|
|
174
|
-
id="session_123",
|
|
175
|
-
user_id="user_456",
|
|
176
|
-
name="Customer Support Chat",
|
|
177
|
-
agent_id="agent_789",
|
|
178
|
-
created_time=int(time.time() * 1000)
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
# Save session
|
|
182
|
-
saved_session = session_repo.save(session)
|
|
183
|
-
|
|
184
|
-
# Find user sessions with pagination
|
|
185
|
-
pagination = PaginationInfo(page=1, page_size=10)
|
|
186
|
-
user_sessions = session_repo.find_by_user("user_456", pagination)
|
|
187
|
-
|
|
188
|
-
# Count total sessions for user
|
|
189
|
-
total_sessions = session_repo.count_by_user("user_456")
|
|
190
|
-
|
|
191
|
-
# Find specific session
|
|
192
|
-
found_session = session_repo.find_user_session("session_123", "user_456")
|
|
193
|
-
|
|
194
|
-
# Update session
|
|
195
|
-
if found_session:
|
|
196
|
-
found_session.update_name("Updated Chat Name")
|
|
197
|
-
session_repo.save(found_session)
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### 3. Working with Messages
|
|
201
|
-
|
|
202
|
-
```python
|
|
203
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import Message
|
|
204
|
-
from solace_agent_mesh.gateway.http_sse.shared.enums import SenderType, MessageType
|
|
205
|
-
|
|
206
|
-
# Create a new message
|
|
207
|
-
message = Message(
|
|
208
|
-
id="msg_123",
|
|
209
|
-
session_id="session_123",
|
|
210
|
-
message="Hello, how can I help you today?",
|
|
211
|
-
sender_type=SenderType.AGENT,
|
|
212
|
-
sender_name="Support Agent",
|
|
213
|
-
message_type=MessageType.TEXT,
|
|
214
|
-
created_time=int(time.time() * 1000)
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
# Validate and save message
|
|
218
|
-
message.validate_message_content()
|
|
219
|
-
saved_message = message_repo.save(message)
|
|
220
|
-
|
|
221
|
-
# Find messages in session
|
|
222
|
-
session_messages = message_repo.find_by_session("session_123", pagination)
|
|
223
|
-
|
|
224
|
-
# Check message properties
|
|
225
|
-
if message.is_from_agent():
|
|
226
|
-
print("Message from agent")
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### 4. Working with Tasks and Events
|
|
230
|
-
|
|
231
|
-
```python
|
|
232
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import Task, TaskEvent
|
|
233
|
-
|
|
234
|
-
# Create a new task
|
|
235
|
-
task = Task(
|
|
236
|
-
id="task_123",
|
|
237
|
-
user_id="user_456",
|
|
238
|
-
start_time=int(time.time() * 1000),
|
|
239
|
-
status="in_progress",
|
|
240
|
-
initial_request_text="Help me with my order"
|
|
241
|
-
)
|
|
242
|
-
|
|
243
|
-
# Save task
|
|
244
|
-
saved_task = task_repo.save_task(task)
|
|
245
|
-
|
|
246
|
-
# Create task event
|
|
247
|
-
event = TaskEvent(
|
|
248
|
-
id="event_123",
|
|
249
|
-
task_id="task_123",
|
|
250
|
-
user_id="user_456",
|
|
251
|
-
created_time=int(time.time() * 1000),
|
|
252
|
-
topic="task.status.changed",
|
|
253
|
-
direction="outbound",
|
|
254
|
-
payload={"status": "completed", "result": "success"}
|
|
255
|
-
)
|
|
256
|
-
|
|
257
|
-
# Save event
|
|
258
|
-
saved_event = task_repo.save_event(event)
|
|
259
|
-
|
|
260
|
-
# Find task with events
|
|
261
|
-
result = task_repo.find_by_id_with_events("task_123")
|
|
262
|
-
if result:
|
|
263
|
-
task, events = result
|
|
264
|
-
print(f"Task {task.id} has {len(events)} events")
|
|
265
|
-
|
|
266
|
-
# Search tasks
|
|
267
|
-
from solace_agent_mesh.gateway.http_sse.shared.types import PaginationParams
|
|
268
|
-
pagination_params = PaginationParams(page=1, page_size=10)
|
|
269
|
-
tasks = task_repo.search(
|
|
270
|
-
user_id="user_456",
|
|
271
|
-
search_query="order",
|
|
272
|
-
pagination=pagination_params
|
|
273
|
-
)
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### 5. Working with Feedback
|
|
277
|
-
|
|
278
|
-
```python
|
|
279
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import Feedback
|
|
280
|
-
|
|
281
|
-
# Create feedback
|
|
282
|
-
feedback = Feedback(
|
|
283
|
-
id="feedback_123",
|
|
284
|
-
session_id="session_123",
|
|
285
|
-
task_id="task_123",
|
|
286
|
-
user_id="user_456",
|
|
287
|
-
rating="up",
|
|
288
|
-
comment="Great service!",
|
|
289
|
-
created_time=int(time.time() * 1000)
|
|
290
|
-
)
|
|
291
|
-
|
|
292
|
-
# Save feedback
|
|
293
|
-
saved_feedback = feedback_repo.save(feedback)
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
### 6. Working with Session History (Combined Operations)
|
|
297
|
-
|
|
298
|
-
```python
|
|
299
|
-
from solace_agent_mesh.gateway.http_sse.repository.entities import SessionHistory
|
|
300
|
-
|
|
301
|
-
# Get session with messages in one operation
|
|
302
|
-
result = session_repo.find_user_session_with_messages(
|
|
303
|
-
"session_123", "user_456", pagination
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
if result:
|
|
307
|
-
session, messages = result
|
|
308
|
-
|
|
309
|
-
# Create session history object
|
|
310
|
-
history = SessionHistory(
|
|
311
|
-
session=session,
|
|
312
|
-
messages=messages,
|
|
313
|
-
total_message_count=len(messages)
|
|
314
|
-
)
|
|
315
|
-
|
|
316
|
-
print(f"Session: {history.session.name}")
|
|
317
|
-
print(f"Messages: {len(history.messages)}")
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### 7. Using Repository Interfaces for Dependency Injection
|
|
321
|
-
|
|
322
|
-
```python
|
|
323
|
-
from solace_agent_mesh.gateway.http_sse.repository.interfaces import (
|
|
324
|
-
ISessionRepository, IMessageRepository, ITaskRepository, IFeedbackRepository
|
|
325
|
-
)
|
|
326
|
-
|
|
327
|
-
class ChatService:
|
|
328
|
-
def __init__(
|
|
329
|
-
self,
|
|
330
|
-
session_repo: ISessionRepository,
|
|
331
|
-
message_repo: IMessageRepository,
|
|
332
|
-
task_repo: ITaskRepository,
|
|
333
|
-
feedback_repo: IFeedbackRepository
|
|
334
|
-
):
|
|
335
|
-
self.session_repo = session_repo
|
|
336
|
-
self.message_repo = message_repo
|
|
337
|
-
self.task_repo = task_repo
|
|
338
|
-
self.feedback_
|
|
339
|
-
|
|
340
|
-
# content_hash: e4e822acd625d1acce1f4ea0721844e7428a9b110c9e73b6657b8d3adc8ed038
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: dto
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `dto` directory contains Data Transfer Objects (DTOs) for API contract definition and validation in the HTTP SSE gateway. It's organized into two main subdirectories: `requests` for incoming API request validation using Pydantic models, and `responses` for structured API response formatting with automatic timestamp conversion. The DTOs primarily focus on session management operations and provide type-safe interfaces for API endpoints.
|
|
5
|
-
|
|
6
|
-
## Files and Subdirectories Overview
|
|
7
|
-
- **Direct files:**
|
|
8
|
-
- `__init__.py` - Main module exports for requests and responses submodules
|
|
9
|
-
- **Subdirectories:**
|
|
10
|
-
- `requests/` - Request DTOs for API endpoint validation (session CRUD operations)
|
|
11
|
-
- `responses/` - Response DTOs with automatic timestamp serialization and field aliasing
|
|
12
|
-
|
|
13
|
-
## Developer API Reference
|
|
14
|
-
|
|
15
|
-
### Direct Files
|
|
16
|
-
|
|
17
|
-
#### __init__.py
|
|
18
|
-
**Purpose:** Main entry point that exports the requests and responses submodules
|
|
19
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.dto import requests, responses`
|
|
20
|
-
|
|
21
|
-
**Exports:**
|
|
22
|
-
- `requests` - Module containing all request DTOs
|
|
23
|
-
- `responses` - Module containing all response DTOs
|
|
24
|
-
|
|
25
|
-
### Subdirectory APIs
|
|
26
|
-
|
|
27
|
-
#### requests/
|
|
28
|
-
**Purpose:** Provides Pydantic models for validating incoming API requests, specifically for session management operations
|
|
29
|
-
**Key Exports:** GetSessionsRequest, GetSessionRequest, GetSessionHistoryRequest, UpdateSessionRequest, DeleteSessionRequest
|
|
30
|
-
**Import Examples:**
|
|
31
|
-
```python
|
|
32
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.requests import (
|
|
33
|
-
GetSessionRequest,
|
|
34
|
-
GetSessionHistoryRequest,
|
|
35
|
-
UpdateSessionRequest
|
|
36
|
-
)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
#### responses/
|
|
40
|
-
**Purpose:** Provides structured response DTOs with automatic timestamp conversion and field aliasing for API consistency
|
|
41
|
-
**Key Exports:** MessageResponse, SessionResponse, SessionListResponse, BaseTimestampResponse
|
|
42
|
-
**Import Examples:**
|
|
43
|
-
```python
|
|
44
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import (
|
|
45
|
-
MessageResponse,
|
|
46
|
-
SessionResponse,
|
|
47
|
-
SessionListResponse
|
|
48
|
-
)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Complete Usage Guide
|
|
52
|
-
|
|
53
|
-
### 1. Basic Imports and Setup
|
|
54
|
-
|
|
55
|
-
```python
|
|
56
|
-
# Import the main dto modules
|
|
57
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto import requests, responses
|
|
58
|
-
|
|
59
|
-
# Or import specific DTOs directly
|
|
60
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.requests import (
|
|
61
|
-
GetSessionRequest,
|
|
62
|
-
GetSessionHistoryRequest,
|
|
63
|
-
UpdateSessionRequest
|
|
64
|
-
)
|
|
65
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import (
|
|
66
|
-
SessionResponse,
|
|
67
|
-
MessageResponse,
|
|
68
|
-
SessionListResponse
|
|
69
|
-
)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 2. Working with Request DTOs
|
|
73
|
-
|
|
74
|
-
```python
|
|
75
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.requests import (
|
|
76
|
-
GetSessionRequest,
|
|
77
|
-
GetSessionHistoryRequest,
|
|
78
|
-
UpdateSessionRequest
|
|
79
|
-
)
|
|
80
|
-
from pydantic import ValidationError
|
|
81
|
-
|
|
82
|
-
# Create a request to get a specific session
|
|
83
|
-
def get_session(session_id: str, user_id: str):
|
|
84
|
-
try:
|
|
85
|
-
request = GetSessionRequest(
|
|
86
|
-
session_id=session_id,
|
|
87
|
-
user_id=user_id
|
|
88
|
-
)
|
|
89
|
-
return request
|
|
90
|
-
except ValidationError as e:
|
|
91
|
-
print(f"Invalid request parameters: {e}")
|
|
92
|
-
return None
|
|
93
|
-
|
|
94
|
-
# Create a request to get session history with pagination
|
|
95
|
-
def get_session_history(session_id: str, user_id: str, page: int = 1, size: int = 20):
|
|
96
|
-
try:
|
|
97
|
-
request = GetSessionHistoryRequest(
|
|
98
|
-
session_id=session_id,
|
|
99
|
-
user_id=user_id,
|
|
100
|
-
pagination={"page": page, "size": size}
|
|
101
|
-
)
|
|
102
|
-
return request
|
|
103
|
-
except ValidationError as e:
|
|
104
|
-
print(f"Validation failed: {e}")
|
|
105
|
-
return None
|
|
106
|
-
|
|
107
|
-
# Create a request to update session name
|
|
108
|
-
def update_session_name(session_id: str, user_id: str, new_name: str):
|
|
109
|
-
try:
|
|
110
|
-
request = UpdateSessionRequest(
|
|
111
|
-
session_id=session_id,
|
|
112
|
-
user_id=user_id,
|
|
113
|
-
name=new_name # Automatically validated (1-255 characters)
|
|
114
|
-
)
|
|
115
|
-
return request
|
|
116
|
-
except ValidationError as e:
|
|
117
|
-
print(f"Validation failed: {e}")
|
|
118
|
-
return None
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### 3. Working with Response DTOs
|
|
122
|
-
|
|
123
|
-
```python
|
|
124
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import (
|
|
125
|
-
SessionResponse,
|
|
126
|
-
MessageResponse,
|
|
127
|
-
SessionListResponse
|
|
128
|
-
)
|
|
129
|
-
from solace_agent_mesh.gateway.http_sse.shared.enums import MessageType, SenderType
|
|
130
|
-
import time
|
|
131
|
-
|
|
132
|
-
# Create session responses
|
|
133
|
-
def create_session_response(session_data: dict) -> SessionResponse:
|
|
134
|
-
return SessionResponse(
|
|
135
|
-
id=session_data["id"],
|
|
136
|
-
user_id=session_data["user_id"],
|
|
137
|
-
name=session_data.get("name"),
|
|
138
|
-
agent_id=session_data.get("agent_id"),
|
|
139
|
-
created_time=int(time.time() * 1000), # Current time in epoch ms
|
|
140
|
-
updated_time=session_data.get("updated_time")
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
# Create message responses
|
|
144
|
-
def create_message_response(message_data: dict) -> MessageResponse:
|
|
145
|
-
return MessageResponse(
|
|
146
|
-
id=message_data["id"],
|
|
147
|
-
session_id=message_data["session_id"],
|
|
148
|
-
message=message_data["message"],
|
|
149
|
-
sender_type=SenderType.USER,
|
|
150
|
-
sender_name=message_data["sender_name"],
|
|
151
|
-
message_type=MessageType.TEXT,
|
|
152
|
-
created_time=int(time.time() * 1000)
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
# Create paginated session list responses
|
|
156
|
-
def create_session_list_response(sessions: list, total: int) -> SessionListResponse:
|
|
157
|
-
session_responses = [create_session_response(session) for session in sessions]
|
|
158
|
-
return SessionListResponse(
|
|
159
|
-
sessions=session_responses,
|
|
160
|
-
pagination={"page": 1, "size": len(sessions), "total_pages": 1},
|
|
161
|
-
total_count=total
|
|
162
|
-
)
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### 4. Complete API Endpoint Example
|
|
166
|
-
|
|
167
|
-
```python
|
|
168
|
-
from fastapi import APIRouter, HTTPException
|
|
169
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.requests import (
|
|
170
|
-
GetSessionRequest,
|
|
171
|
-
GetSessionHistoryRequest,
|
|
172
|
-
UpdateSessionRequest
|
|
173
|
-
)
|
|
174
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import (
|
|
175
|
-
SessionResponse,
|
|
176
|
-
MessageResponse,
|
|
177
|
-
SessionListResponse
|
|
178
|
-
)
|
|
179
|
-
|
|
180
|
-
router = APIRouter()
|
|
181
|
-
|
|
182
|
-
@router.get("/sessions/{session_id}")
|
|
183
|
-
async def get_session(session_id: str, user_id: str) -> SessionResponse:
|
|
184
|
-
"""Get a specific session"""
|
|
185
|
-
|
|
186
|
-
# Create and validate request DTO
|
|
187
|
-
request = GetSessionRequest(
|
|
188
|
-
session_id=session_id,
|
|
189
|
-
user_id=user_id
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
# Fetch data (mock implementation)
|
|
193
|
-
session_data = fetch_session(request)
|
|
194
|
-
|
|
195
|
-
# Return structured response with automatic timestamp conversion
|
|
196
|
-
return SessionResponse(
|
|
197
|
-
id=session_data["id"],
|
|
198
|
-
user_id=session_data["user_id"],
|
|
199
|
-
name=session_data["name"],
|
|
200
|
-
created_time=session_data["created_time"]
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
@router.get("/sessions/{session_id}/history")
|
|
204
|
-
async def get_session_history(
|
|
205
|
-
session_id: str,
|
|
206
|
-
user_id: str,
|
|
207
|
-
page: int = 1,
|
|
208
|
-
size: int = 20
|
|
209
|
-
) -> list[MessageResponse]:
|
|
210
|
-
"""Get session message history"""
|
|
211
|
-
|
|
212
|
-
# Validate request using DTO
|
|
213
|
-
request = GetSessionHistoryRequest(
|
|
214
|
-
session_id=session_id,
|
|
215
|
-
user_id=user_id,
|
|
216
|
-
pagination={"page": page, "size": size}
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
# Fetch messages (mock implementation)
|
|
220
|
-
messages_data = fetch_session_messages(request)
|
|
221
|
-
|
|
222
|
-
# Return response DTOs with automatic field aliasing
|
|
223
|
-
return [
|
|
224
|
-
MessageResponse(
|
|
225
|
-
id=msg["id"],
|
|
226
|
-
session_id=msg["session_id"],
|
|
227
|
-
message=msg["message"],
|
|
228
|
-
sender_type=msg["sender_type"],
|
|
229
|
-
sender_name=msg["sender_name"],
|
|
230
|
-
message_type=msg["message_type"],
|
|
231
|
-
created_time=msg["created_time"]
|
|
232
|
-
)
|
|
233
|
-
for msg in messages_data
|
|
234
|
-
]
|
|
235
|
-
|
|
236
|
-
@router.put("/sessions/{session_id}")
|
|
237
|
-
async def update_session(
|
|
238
|
-
session_id: str,
|
|
239
|
-
user_id: str,
|
|
240
|
-
name: str
|
|
241
|
-
) -> SessionResponse:
|
|
242
|
-
"""Update session name"""
|
|
243
|
-
|
|
244
|
-
# Validate request using DTO
|
|
245
|
-
try:
|
|
246
|
-
request = UpdateSessionRequest(
|
|
247
|
-
session_id=session_id,
|
|
248
|
-
user_id=user_id,
|
|
249
|
-
name=name
|
|
250
|
-
)
|
|
251
|
-
except ValidationError as e:
|
|
252
|
-
raise HTTPException(status_code=400, detail=str(e))
|
|
253
|
-
|
|
254
|
-
# Update session (mock implementation)
|
|
255
|
-
updated_session = update_session_in_db(request)
|
|
256
|
-
|
|
257
|
-
# Return response DTO with automatic field aliasing
|
|
258
|
-
return SessionResponse(
|
|
259
|
-
id=updated_session["id"],
|
|
260
|
-
user_id=updated_session["user_id"],
|
|
261
|
-
name=updated_session["name"],
|
|
262
|
-
created_time=updated_session["created_time"],
|
|
263
|
-
updated_time=updated_session["updated_time"]
|
|
264
|
-
)
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
### 5. JSON Serialization with Automatic Timestamp Conversion
|
|
268
|
-
|
|
269
|
-
```python
|
|
270
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import SessionResponse, MessageResponse
|
|
271
|
-
from solace_agent_mesh.gateway.http_sse.shared.enums import MessageType, SenderType
|
|
272
|
-
import json
|
|
273
|
-
|
|
274
|
-
# Create a session response
|
|
275
|
-
session = SessionResponse(
|
|
276
|
-
id="sess_123",
|
|
277
|
-
user_id="user_456",
|
|
278
|
-
name="My Session",
|
|
279
|
-
created_time=1640995200000, # Epoch milliseconds
|
|
280
|
-
updated_time=1640995260000
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
# Automatic conversion to ISO strings in JSON output
|
|
284
|
-
json_output = session.model_dump_json()
|
|
285
|
-
print(json_output)
|
|
286
|
-
# Output: {
|
|
287
|
-
# "id": "sess_123",
|
|
288
|
-
# "userId": "user_456", # Note the camelCase aliasing
|
|
289
|
-
# "name": "My Session",
|
|
290
|
-
# "createdTime": "2022-01-01T00:00:00Z", # Converted to ISO string
|
|
291
|
-
# "updatedTime": "2022-01-01T00:01:00Z"
|
|
292
|
-
# }
|
|
293
|
-
|
|
294
|
-
# Create a message response with field aliasing
|
|
295
|
-
message = MessageResponse(
|
|
296
|
-
id="msg_789",
|
|
297
|
-
session_id="sess_123",
|
|
298
|
-
message="Hello world",
|
|
299
|
-
sender_type=SenderType.USER,
|
|
300
|
-
sender_name="John Doe",
|
|
301
|
-
message_type=MessageType.TEXT,
|
|
302
|
-
created_time=1640995200000
|
|
303
|
-
)
|
|
304
|
-
|
|
305
|
-
# Get dict with converted timestamps and aliased fields
|
|
306
|
-
dict_output = message.model_dump()
|
|
307
|
-
print(dict_output["sessionId"]) # "sess_123" (camelCase alias)
|
|
308
|
-
print(dict_output["senderType"]) # SenderType.USER (camelCase alias)
|
|
309
|
-
print(dict_output["createdTime"]) # "2022-01-01T00:00:00Z" (converted timestamp)
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
### 6. Custom Response Classes Using Base
|
|
313
|
-
|
|
314
|
-
```python
|
|
315
|
-
from solace_agent_mesh.gateway.http_sse.routers.dto.responses.base_responses import BaseTimestampResponse
|
|
316
|
-
|
|
317
|
-
class CustomResponse(BaseTimestampResponse):
|
|
318
|
-
"""Custom response with automatic timestamp handling"""
|
|
319
|
-
name: str
|
|
320
|
-
status: str
|
|
321
|
-
created_time: int
|
|
322
|
-
last_accessed: int | None = None
|
|
323
|
-
|
|
324
|
-
class Config:
|
|
325
|
-
# Add field aliases if needed
|
|
326
|
-
alias_generator = lambda field_name: ''.join(
|
|
327
|
-
word.capitalize() if i > 0 else word
|
|
328
|
-
for i, word in enumerate(field_name.split('_'))
|
|
329
|
-
)
|
|
330
|
-
|
|
331
|
-
# Usage
|
|
332
|
-
custom_response = CustomResponse(
|
|
333
|
-
name="Test Item",
|
|
334
|
-
status="active",
|
|
335
|
-
created_time=1640995200000,
|
|
336
|
-
last_accessed=1640995300000
|
|
337
|
-
)
|
|
338
|
-
|
|
339
|
-
# Automatic timestamp conversion in JSON
|
|
340
|
-
json_data = custom_response.model_dump_json()
|
|
341
|
-
# Fields like created_time become ISO strings automatically
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
This comprehensive guide shows how the `dto` directory provides a complete type-safe API contract system with automatic validation for requests and structured responses with timestamp conversion for the HTTP SSE gateway.
|
|
345
|
-
|
|
346
|
-
# content_hash: 3bb29d4c46b962221fc3034560b7e0da75b5a41f7f8f4d4f25aecf26e10f83f5
|