solace-agent-mesh 1.4.12__py3-none-any.whl → 1.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +51 -2
- 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/agent_llm.txt +1 -1
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +2 -13
- 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/component.py +51 -21
- 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/tools_llm.txt +148 -154
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +274 -0
- 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/483cef9a.bf9398af.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{main.f67fc9f4.js → main.0c149855.js} +2 -2
- solace_agent_mesh/assets/docs/assets/js/{runtime~main.40527046.js → runtime~main.c66557e4.js} +1 -1
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/rbac-setup-guilde/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +8 -4
- solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/litellm_models/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-python-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +3 -3
- solace_agent_mesh/assets/docs/lunr-index-1760032255022.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1760032255022.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +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-CZbpmwfA.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-C__uuUkB.js +339 -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_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/middleware_llm_detail.txt +185 -0
- 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/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/services_llm.txt +57 -6
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +1 -1
- 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/gateway/base/app.py +1 -1
- 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/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 +148 -2
- solace_agent_mesh/gateway/http_sse/component.py +368 -60
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +46 -6
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +108 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +1 -1
- solace_agent_mesh/gateway/http_sse/dependencies.py +116 -26
- 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 +146 -41
- 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/artifacts.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/config.py +26 -4
- 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/routers_llm.txt +255 -204
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +220 -40
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +168 -42
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +272 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +241 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +0 -80
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +177 -13
- solace_agent_mesh/gateway/http_sse/services/session_service.py +151 -84
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +317 -0
- 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/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-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/METADATA +1 -1
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/RECORD +172 -124
- solace_agent_mesh/agent/adk/invocation_monitor.py +0 -295
- solace_agent_mesh/assets/docs/assets/js/483cef9a.4736f2d8.js +0 -1
- 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/assets/docs/assets/js/{main.f67fc9f4.js.LICENSE.txt → main.0c149855.js.LICENSE.txt} +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,263 +1,314 @@
|
|
|
1
1
|
# DEVELOPER GUIDE for the routers directory
|
|
2
2
|
|
|
3
3
|
## Quick Summary
|
|
4
|
-
The `routers` directory contains FastAPI
|
|
5
|
-
|
|
6
|
-
## Files Overview
|
|
7
|
-
-
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
10
|
-
- `
|
|
11
|
-
- `
|
|
12
|
-
- `
|
|
13
|
-
- `
|
|
14
|
-
- `
|
|
15
|
-
- `
|
|
16
|
-
- `
|
|
17
|
-
- `
|
|
4
|
+
The `routers` directory contains FastAPI router modules that define the REST API endpoints for the HTTP SSE Gateway. Each router groups endpoints by functional domain (agent discovery, artifact management, authentication, sessions, etc.) and provides the primary interface for frontend applications and other clients to interact with the gateway. The routers work together to provide a complete web API with real-time capabilities through Server-Sent Events (SSE), along with comprehensive session management, artifact handling, and A2A message visualization.
|
|
5
|
+
|
|
6
|
+
## Files and Subdirectories Overview
|
|
7
|
+
- **Direct files:**
|
|
8
|
+
- `__init__.py` - Package initialization for router modules
|
|
9
|
+
- `agent_cards.py` - Agent discovery endpoints
|
|
10
|
+
- `artifacts.py` - Artifact management (upload, download, versioning)
|
|
11
|
+
- `auth.py` - Authentication flow endpoints (login, callback, refresh)
|
|
12
|
+
- `config.py` - Frontend configuration endpoint
|
|
13
|
+
- `feedback.py` - User feedback collection endpoints
|
|
14
|
+
- `people.py` - User search for autocomplete features
|
|
15
|
+
- `sessions.py` - Session management (CRUD operations)
|
|
16
|
+
- `sse.py` - Server-Sent Events streaming endpoint
|
|
17
|
+
- `tasks.py` - Task submission and management endpoints
|
|
18
|
+
- `users.py` - Current user information endpoint
|
|
19
|
+
- `visualization.py` - A2A message visualization streaming
|
|
20
|
+
- **Subdirectories:**
|
|
21
|
+
- `dto/` - Data Transfer Objects for request/response validation
|
|
18
22
|
|
|
19
23
|
## Developer API Reference
|
|
20
24
|
|
|
21
|
-
###
|
|
22
|
-
**Purpose:** Provides REST endpoints for agent discovery.
|
|
23
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.agents import router`
|
|
25
|
+
### Direct Files
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
#### __init__.py
|
|
28
|
+
**Purpose:** Package initialization for the routers module
|
|
29
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers import *`
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
from fastapi import FastAPI
|
|
32
|
-
from solace_agent_mesh.gateway.http_sse.routers.agents import router
|
|
31
|
+
#### agent_cards.py
|
|
32
|
+
**Purpose:** Provides REST endpoints for agent discovery
|
|
33
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.agent_cards import router`
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
**Functions:**
|
|
36
|
+
- `get_discovered_agent_cards() -> List[AgentCard]` - Retrieves all currently discovered A2A agents
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
#### artifacts.py
|
|
39
|
+
**Purpose:** Manages session-specific artifacts via REST endpoints with versioning and metadata support
|
|
40
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.artifacts import router, ArtifactUploadResponse`
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.artifacts import router`
|
|
42
|
+
**Classes:**
|
|
43
|
+
- `ArtifactUploadResponse(BaseModel)` - Response model for artifact uploads with camelCase fields
|
|
43
44
|
|
|
44
45
|
**Functions:**
|
|
45
|
-
- `
|
|
46
|
-
- `
|
|
47
|
-
- `
|
|
48
|
-
- `
|
|
49
|
-
- `
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
from fastapi import FastAPI
|
|
57
|
-
from solace_agent_mesh.gateway.http_sse.routers.artifacts import router
|
|
58
|
-
|
|
59
|
-
app = FastAPI()
|
|
60
|
-
app.include_router(router, prefix="/api/v1/artifacts")
|
|
61
|
-
|
|
62
|
-
# Client usage examples:
|
|
63
|
-
# GET /api/v1/artifacts/ - List all artifacts
|
|
64
|
-
# GET /api/v1/artifacts/myfile.txt - Download latest version
|
|
65
|
-
# GET /api/v1/artifacts/myfile.txt/versions/1 - Download specific version
|
|
66
|
-
# POST /api/v1/artifacts/myfile.txt - Upload new version
|
|
67
|
-
# DELETE /api/v1/artifacts/myfile.txt - Delete artifact
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### auth.py
|
|
71
|
-
**Purpose:** Handles user authentication flow including login, callback, and token refresh.
|
|
46
|
+
- `upload_artifact_with_session(upload_file: UploadFile, sessionId: str, filename: str, metadata_json: str) -> ArtifactUploadResponse` - Uploads artifact with session management
|
|
47
|
+
- `list_artifact_versions(session_id: str, filename: str) -> List[int]` - Lists available versions for an artifact
|
|
48
|
+
- `list_artifacts(session_id: str) -> List[ArtifactInfo]` - Lists all artifacts in a session with metadata
|
|
49
|
+
- `get_latest_artifact(session_id: str, filename: str) -> StreamingResponse` - Downloads latest artifact version with embed resolution
|
|
50
|
+
- `get_specific_artifact_version(session_id: str, filename: str, version: Union[int, str]) -> StreamingResponse` - Downloads specific version
|
|
51
|
+
- `get_artifact_by_uri(uri: str) -> StreamingResponse` - Downloads artifact by formal artifact:// URI
|
|
52
|
+
- `upload_artifact(session_id: str, filename: str, upload_file: UploadFile, metadata_json: Optional[str]) -> Dict[str, Any]` - Uploads new artifact version with metadata
|
|
53
|
+
- `delete_artifact(session_id: str, filename: str) -> Response` - Deletes artifact and all versions
|
|
54
|
+
|
|
55
|
+
#### auth.py
|
|
56
|
+
**Purpose:** Handles OAuth-based user authentication flow with external authorization service
|
|
72
57
|
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.auth import router`
|
|
73
58
|
|
|
74
59
|
**Functions:**
|
|
75
|
-
- `initiate_login(request: FastAPIRequest) -> RedirectResponse` -
|
|
76
|
-
- `get_csrf_token(response: Response) -> Dict[str, str]` - Generates and
|
|
77
|
-
- `auth_callback(request: FastAPIRequest) -> RedirectResponse` - Handles
|
|
78
|
-
- `refresh_token(request: FastAPIRequest) -> Dict[str, str]` - Refreshes
|
|
60
|
+
- `initiate_login(request: FastAPIRequest) -> RedirectResponse` - Starts OAuth login flow with external service
|
|
61
|
+
- `get_csrf_token(response: Response) -> Dict[str, str]` - Generates and sets CSRF token
|
|
62
|
+
- `auth_callback(request: FastAPIRequest) -> RedirectResponse` - Handles OAuth callback and token exchange
|
|
63
|
+
- `refresh_token(request: FastAPIRequest) -> Dict[str, str]` - Refreshes access token using refresh token
|
|
79
64
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# Include in FastAPI app
|
|
83
|
-
from fastapi import FastAPI
|
|
84
|
-
from solace_agent_mesh.gateway.http_sse.routers.auth import router
|
|
85
|
-
|
|
86
|
-
app = FastAPI()
|
|
87
|
-
app.include_router(router, prefix="/api/v1")
|
|
88
|
-
|
|
89
|
-
# Client usage:
|
|
90
|
-
# GET /api/v1/auth/login - Start login flow
|
|
91
|
-
# GET /api/v1/csrf-token - Get CSRF token
|
|
92
|
-
# GET /api/v1/auth/callback - OAuth callback endpoint
|
|
93
|
-
# POST /api/v1/auth/refresh - Refresh access token
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### config.py
|
|
97
|
-
**Purpose:** Provides configuration settings needed by the frontend application.
|
|
65
|
+
#### config.py
|
|
66
|
+
**Purpose:** Provides frontend configuration settings including feature flags
|
|
98
67
|
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.config import router`
|
|
99
68
|
|
|
100
69
|
**Functions:**
|
|
101
|
-
- `get_app_config() -> Dict[str, Any]` - Returns frontend configuration
|
|
70
|
+
- `get_app_config() -> Dict[str, Any]` - Returns frontend configuration including auth URLs, feature flags, and persistence settings
|
|
102
71
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
from fastapi import FastAPI
|
|
107
|
-
from solace_agent_mesh.gateway.http_sse.routers.config import router
|
|
72
|
+
#### feedback.py
|
|
73
|
+
**Purpose:** Receives and processes user feedback on chat messages
|
|
74
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.feedback import router, FeedbackPayload`
|
|
108
75
|
|
|
109
|
-
|
|
110
|
-
|
|
76
|
+
**Classes:**
|
|
77
|
+
- `FeedbackPayload(BaseModel)` - Data model for feedback submission
|
|
78
|
+
- `task_id: str` - ID of the task being rated
|
|
79
|
+
- `session_id: str` - Session containing the task
|
|
80
|
+
- `feedback_type: Literal["up", "down"]` - Type of feedback
|
|
81
|
+
- `feedback_text: Optional[str]` - Optional text feedback
|
|
111
82
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
```
|
|
83
|
+
**Functions:**
|
|
84
|
+
- `submit_feedback(payload: FeedbackPayload, user_id: str) -> Dict[str, str]` - Processes user feedback asynchronously
|
|
115
85
|
|
|
116
|
-
|
|
117
|
-
**Purpose:** Provides user search functionality for autocomplete features
|
|
86
|
+
#### people.py
|
|
87
|
+
**Purpose:** Provides user search functionality for autocomplete features
|
|
118
88
|
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.people import router`
|
|
119
89
|
|
|
120
90
|
**Functions:**
|
|
121
|
-
- `search_people(q: str, limit: int = 10) -> List[Dict[str, Any]]` - Searches for users
|
|
122
|
-
|
|
123
|
-
**Usage Examples:**
|
|
124
|
-
```python
|
|
125
|
-
# Include in FastAPI app
|
|
126
|
-
from fastapi import FastAPI
|
|
127
|
-
from solace_agent_mesh.gateway.http_sse.routers.people import router
|
|
128
|
-
|
|
129
|
-
app = FastAPI()
|
|
130
|
-
app.include_router(router, prefix="/api/v1")
|
|
131
|
-
|
|
132
|
-
# Client usage:
|
|
133
|
-
# GET /api/v1/people/search?q=john&limit=5 - Search for users
|
|
134
|
-
```
|
|
91
|
+
- `search_people(q: str, limit: int = 10) -> List[Dict[str, Any]]` - Searches for users for @mention autocomplete
|
|
135
92
|
|
|
136
|
-
|
|
137
|
-
**Purpose:** Manages user sessions including
|
|
93
|
+
#### sessions.py
|
|
94
|
+
**Purpose:** Manages user sessions including CRUD operations with persistence
|
|
138
95
|
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.sessions import router`
|
|
139
96
|
|
|
140
97
|
**Functions:**
|
|
141
|
-
- `
|
|
142
|
-
- `
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
app = FastAPI()
|
|
151
|
-
app.include_router(router, prefix="/api/v1/sessions")
|
|
152
|
-
|
|
153
|
-
# Client usage:
|
|
154
|
-
# POST /api/v1/sessions/new - Create new session
|
|
155
|
-
# GET /api/v1/sessions/current - Get current session info
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### sse.py
|
|
159
|
-
**Purpose:** Provides Server-Sent Events (SSE) endpoint for streaming real-time task updates.
|
|
98
|
+
- `get_all_sessions(page_number: int, page_size: int, user: dict) -> PaginatedResponse[SessionResponse]` - Lists user's sessions with pagination
|
|
99
|
+
- `get_session(session_id: str, user: dict) -> DataResponse[SessionResponse]` - Gets session details with authorization
|
|
100
|
+
- `get_session_history(session_id: str, user: dict) -> List[MessageResponse]` - Gets session message history
|
|
101
|
+
- `update_session_name(session_id: str, name: str, user: dict) -> SessionResponse` - Updates session name with validation
|
|
102
|
+
- `delete_session(session_id: str, user: dict) -> None` - Deletes session with cascade notifications
|
|
103
|
+
|
|
104
|
+
#### sse.py
|
|
105
|
+
**Purpose:** Provides Server-Sent Events endpoint for real-time streaming
|
|
160
106
|
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.sse import router`
|
|
161
107
|
|
|
162
108
|
**Functions:**
|
|
163
|
-
- `subscribe_to_task_events(task_id: str, request: FastAPIRequest) -> EventSourceResponse` - Establishes
|
|
109
|
+
- `subscribe_to_task_events(task_id: str, request: FastAPIRequest) -> EventSourceResponse` - Establishes SSE connection for task updates with automatic cleanup
|
|
164
110
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
from fastapi import FastAPI
|
|
169
|
-
from solace_agent_mesh.gateway.http_sse.routers.sse import router
|
|
111
|
+
#### tasks.py
|
|
112
|
+
**Purpose:** Handles task submission, management, and historical search
|
|
113
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.tasks import router`
|
|
170
114
|
|
|
171
|
-
|
|
172
|
-
|
|
115
|
+
**Functions:**
|
|
116
|
+
- `search_tasks(start_date: Optional[str], end_date: Optional[str], search: Optional[str], page: int, page_size: int, query_user_id: Optional[str]) -> List[Task]` - Searches historical tasks with admin capabilities
|
|
117
|
+
- `get_task_as_stim_file(task_id: str) -> Response` - Downloads complete task history as .stim file
|
|
118
|
+
- `send_task_to_agent(request: FastAPIRequest, payload: SendMessageRequest) -> SendMessageSuccessResponse` - Submits non-streaming task
|
|
119
|
+
- `subscribe_task_from_agent(request: FastAPIRequest, payload: SendStreamingMessageRequest) -> SendStreamingMessageSuccessResponse` - Submits streaming task
|
|
120
|
+
- `cancel_agent_task(request: FastAPIRequest, taskId: str, payload: CancelTaskRequest) -> Dict[str, str]` - Cancels active task
|
|
121
|
+
|
|
122
|
+
#### users.py
|
|
123
|
+
**Purpose:** Provides current user information with authentication status
|
|
124
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.users import router`
|
|
173
125
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```
|
|
126
|
+
**Functions:**
|
|
127
|
+
- `get_current_user_endpoint(user: dict) -> Dict[str, Any]` - Returns current user information with auth status
|
|
177
128
|
|
|
178
|
-
|
|
179
|
-
**Purpose:**
|
|
180
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.
|
|
129
|
+
#### visualization.py
|
|
130
|
+
**Purpose:** Manages A2A message visualization streams for real-time monitoring
|
|
131
|
+
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.visualization import router, SubscriptionTarget, VisualizationSubscribeRequest`
|
|
181
132
|
|
|
182
|
-
**
|
|
183
|
-
- `
|
|
184
|
-
- `
|
|
185
|
-
- `
|
|
133
|
+
**Classes:**
|
|
134
|
+
- `SubscriptionTarget(BaseModel)` - Defines visualization target
|
|
135
|
+
- `type: str` - Target type (e.g., "current_namespace_a2a_messages", "agent_a2a_messages")
|
|
136
|
+
- `identifier: Optional[str]` - Target identifier (namespace or agent name)
|
|
137
|
+
- `VisualizationSubscribeRequest(BaseModel)` - Subscription request
|
|
138
|
+
- `subscription_targets: Optional[List[SubscriptionTarget]]` - Targets to monitor
|
|
139
|
+
- `client_stream_id: Optional[str]` - Client-generated stream ID for idempotency
|
|
140
|
+
- `VisualizationSubscribeResponse(BaseModel)` - Subscription response with SSE URL
|
|
141
|
+
- `VisualizationConfigUpdateRequest(BaseModel)` - Configuration update request
|
|
142
|
+
- `VisualizationConfigUpdateResponse(BaseModel)` - Configuration update response
|
|
186
143
|
|
|
187
|
-
**
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
144
|
+
**Functions:**
|
|
145
|
+
- `subscribe_to_visualization_stream(request_data: VisualizationSubscribeRequest) -> VisualizationSubscribeResponse` - Starts visualization stream with authorization
|
|
146
|
+
- `get_visualization_stream_events(stream_id: str) -> EventSourceResponse` - SSE endpoint for visualization events
|
|
147
|
+
- `update_visualization_stream_config(stream_id: str, update_request: VisualizationConfigUpdateRequest) -> VisualizationConfigUpdateResponse` - Updates stream configuration
|
|
148
|
+
- `unsubscribe_from_visualization_stream(stream_id: str) -> Response` - Terminates visualization stream
|
|
192
149
|
|
|
193
|
-
|
|
194
|
-
app.include_router(router, prefix="/api/v1/tasks")
|
|
150
|
+
### Subdirectory APIs
|
|
195
151
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
152
|
+
#### dto/
|
|
153
|
+
**Purpose:** Provides Data Transfer Objects for request/response validation and serialization with automatic timestamp conversion
|
|
154
|
+
**Key Exports:** Request and response DTOs for session management with field validation and camelCase aliasing
|
|
155
|
+
**Import Examples:**
|
|
156
|
+
```python
|
|
157
|
+
from solace_agent_mesh.gateway.http_sse.routers.dto.requests import GetSessionsRequest, UpdateSessionRequest
|
|
158
|
+
from solace_agent_mesh.gateway.http_sse.routers.dto.responses import SessionResponse, MessageResponse
|
|
200
159
|
```
|
|
201
160
|
|
|
202
|
-
|
|
203
|
-
**Purpose:** Provides information about the currently authenticated user.
|
|
204
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.users import router`
|
|
161
|
+
## Complete Usage Guide
|
|
205
162
|
|
|
206
|
-
|
|
207
|
-
- `get_current_user(request: FastAPIRequest) -> Dict[str, Any]` - Retrieves information about the currently authenticated user.
|
|
163
|
+
### 1. Setting Up Routers in FastAPI Application
|
|
208
164
|
|
|
209
|
-
**Usage Examples:**
|
|
210
165
|
```python
|
|
211
|
-
# Include in FastAPI app
|
|
212
166
|
from fastapi import FastAPI
|
|
213
|
-
from solace_agent_mesh.gateway.http_sse.routers
|
|
167
|
+
from solace_agent_mesh.gateway.http_sse.routers import (
|
|
168
|
+
agent_cards,
|
|
169
|
+
artifacts,
|
|
170
|
+
auth,
|
|
171
|
+
config,
|
|
172
|
+
feedback,
|
|
173
|
+
people,
|
|
174
|
+
sessions,
|
|
175
|
+
sse,
|
|
176
|
+
tasks,
|
|
177
|
+
users,
|
|
178
|
+
visualization
|
|
179
|
+
)
|
|
214
180
|
|
|
215
181
|
app = FastAPI()
|
|
216
|
-
app.include_router(router, prefix="/api/v1/users")
|
|
217
182
|
|
|
218
|
-
#
|
|
219
|
-
|
|
183
|
+
# Include all routers with appropriate prefixes
|
|
184
|
+
app.include_router(agent_cards.router, prefix="/api/v1", tags=["agents"])
|
|
185
|
+
app.include_router(artifacts.router, prefix="/api/v1/artifacts", tags=["artifacts"])
|
|
186
|
+
app.include_router(auth.router, prefix="/api/v1", tags=["auth"])
|
|
187
|
+
app.include_router(config.router, prefix="/api/v1", tags=["config"])
|
|
188
|
+
app.include_router(feedback.router, prefix="/api/v1", tags=["feedback"])
|
|
189
|
+
app.include_router(people.router, prefix="/api/v1", tags=["people"])
|
|
190
|
+
app.include_router(sessions.router, prefix="/api/v1", tags=["sessions"])
|
|
191
|
+
app.include_router(sse.router, prefix="/api/v1/sse", tags=["sse"])
|
|
192
|
+
app.include_router(tasks.router, prefix="/api/v1/tasks", tags=["tasks"])
|
|
193
|
+
app.include_router(users.router, prefix="/api/v1/users", tags=["users"])
|
|
194
|
+
app.include_router(visualization.router, prefix="/api/v1/visualization", tags=["visualization"])
|
|
220
195
|
```
|
|
221
196
|
|
|
222
|
-
###
|
|
223
|
-
**Purpose:** Manages A2A message visualization streams for monitoring and debugging.
|
|
224
|
-
**Import:** `from solace_agent_mesh.gateway.http_sse.routers.visualization import router, SubscriptionTarget, VisualizationSubscribeRequest`
|
|
225
|
-
|
|
226
|
-
**Classes:**
|
|
227
|
-
- `SubscriptionTarget(BaseModel)` - Defines an abstract target for A2A message visualization.
|
|
228
|
-
- `type: str` - Type of target to monitor
|
|
229
|
-
- `identifier: Optional[str]` - Identifier for the target
|
|
230
|
-
- `VisualizationSubscribeRequest(BaseModel)` - Request body for initiating a visualization stream.
|
|
231
|
-
- `subscription_targets: Optional[List[SubscriptionTarget]]` - Targets to monitor
|
|
232
|
-
- `client_stream_id: Optional[str]` - Client-generated ID for idempotency
|
|
233
|
-
- `VisualizationSubscribeResponse(BaseModel)` - Response for successful visualization subscription.
|
|
234
|
-
- `VisualizationConfigUpdateRequest(BaseModel)` - Request for updating stream configuration.
|
|
235
|
-
- `VisualizationConfigUpdateResponse(BaseModel)` - Response for configuration updates.
|
|
236
|
-
|
|
237
|
-
**Functions:**
|
|
238
|
-
- `subscribe_to_visualization_stream(request_data: VisualizationSubscribeRequest) -> VisualizationSubscribeResponse` - Initiates a new A2A message visualization stream.
|
|
239
|
-
- `get_visualization_stream_events(stream_id: str) -> EventSourceResponse` - Establishes SSE connection for filtered A2A messages.
|
|
240
|
-
- `update_visualization_stream_config(stream_id: str, update_request: VisualizationConfigUpdateRequest) -> VisualizationConfigUpdateResponse` - Modifies stream configuration.
|
|
241
|
-
- `unsubscribe_from_visualization_stream(stream_id: str) -> Response` - Terminates an active visualization stream.
|
|
197
|
+
### 2. Agent Discovery and Task Submission
|
|
242
198
|
|
|
243
|
-
**Usage Examples:**
|
|
244
199
|
```python
|
|
245
|
-
|
|
246
|
-
from
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
200
|
+
import httpx
|
|
201
|
+
from a2a.types import SendStreamingMessageRequest, Message, MessagePart
|
|
202
|
+
|
|
203
|
+
# Discover available agents
|
|
204
|
+
async def get_available_agents():
|
|
205
|
+
async with httpx.AsyncClient() as client:
|
|
206
|
+
response = await client.get("http://localhost:8000/api/v1/agentCards")
|
|
207
|
+
return response.json()
|
|
208
|
+
|
|
209
|
+
# Submit a streaming task to an agent
|
|
210
|
+
async def submit_streaming_task(agent_name: str, message_text: str, session_id: str):
|
|
211
|
+
# Create message parts
|
|
212
|
+
parts = [MessagePart(text=message_text)]
|
|
213
|
+
|
|
214
|
+
# Create message with metadata
|
|
215
|
+
message = Message(
|
|
216
|
+
parts=parts,
|
|
217
|
+
context_id=session_id,
|
|
218
|
+
metadata={"agent_name": agent_name}
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
# Create request payload
|
|
222
|
+
payload = SendStreamingMessageRequest(
|
|
223
|
+
method="message:stream",
|
|
224
|
+
params={"message": message},
|
|
225
|
+
id="req_123"
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
async with httpx.AsyncClient() as client:
|
|
229
|
+
response = await client.post(
|
|
230
|
+
"http://localhost:8000/api/v1/tasks/message:stream",
|
|
231
|
+
json=payload.model_dump()
|
|
232
|
+
)
|
|
233
|
+
return response.json()
|
|
234
|
+
|
|
235
|
+
# Search historical tasks (admin users can query all users)
|
|
236
|
+
async def search_historical_tasks(start_date: str = None, query_user_id: str = None):
|
|
237
|
+
params = {}
|
|
238
|
+
if start_date:
|
|
239
|
+
params["start_date"] = start_date
|
|
240
|
+
if query_user_id:
|
|
241
|
+
params["query_user_id"] = query_user_id
|
|
242
|
+
|
|
243
|
+
async with httpx.AsyncClient() as client:
|
|
244
|
+
response = await client.get(
|
|
245
|
+
"http://localhost:8000/api/v1/tasks",
|
|
246
|
+
params=params
|
|
247
|
+
)
|
|
248
|
+
return response.json()
|
|
249
|
+
```
|
|
251
250
|
|
|
252
|
-
|
|
253
|
-
# POST /api/v1/visualization/subscribe - Start visualization stream
|
|
254
|
-
# GET /api/v1/visualization/{stream_id}/events - SSE endpoint for events
|
|
255
|
-
# PUT /api/v1/visualization/{stream_id}/config - Update stream config
|
|
256
|
-
# DELETE /api/v1/visualization/{stream_id}/unsubscribe - Stop stream
|
|
251
|
+
### 3. Real-time Event Streaming with SSE
|
|
257
252
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
253
|
+
```python
|
|
254
|
+
import asyncio
|
|
255
|
+
import httpx
|
|
256
|
+
import json
|
|
257
|
+
|
|
258
|
+
# Client-side SSE connection for task events
|
|
259
|
+
async def listen_to_task_events(task_id: str):
|
|
260
|
+
async with httpx.AsyncClient() as client:
|
|
261
|
+
async with client.stream(
|
|
262
|
+
"GET",
|
|
263
|
+
f"http://localhost:8000/api/v1/sse/subscribe/{task_id}",
|
|
264
|
+
headers={"Accept": "text/event-stream"}
|
|
265
|
+
) as response:
|
|
266
|
+
async for line in response.aiter_lines():
|
|
267
|
+
if line.startswith("data: "):
|
|
268
|
+
event_data = line[6:] # Remove "data: " prefix
|
|
269
|
+
try:
|
|
270
|
+
parsed_data = json.loads(event_data)
|
|
271
|
+
print(f"Received event: {parsed_data}")
|
|
272
|
+
except json.JSONDecodeError:
|
|
273
|
+
print(f"Received raw data: {event_data}")
|
|
274
|
+
|
|
275
|
+
# Client-side SSE connection for visualization
|
|
276
|
+
async def listen_to_visualization_events(stream_id: str):
|
|
277
|
+
async with httpx.AsyncClient() as client:
|
|
278
|
+
async with client.stream(
|
|
279
|
+
"GET",
|
|
280
|
+
f"http://localhost:8000/api/v1/visualization/{stream_id}/events",
|
|
281
|
+
headers={"Accept": "text/event-stream"}
|
|
282
|
+
) as response:
|
|
283
|
+
async for line in response.aiter_lines():
|
|
284
|
+
if line.startswith("data: "):
|
|
285
|
+
event_data = line[6:]
|
|
286
|
+
print(f"Visualization event: {event_data}")
|
|
261
287
|
```
|
|
262
288
|
|
|
263
|
-
|
|
289
|
+
### 4. Comprehensive Artifact Management
|
|
290
|
+
|
|
291
|
+
```python
|
|
292
|
+
import httpx
|
|
293
|
+
import json
|
|
294
|
+
from pathlib import Path
|
|
295
|
+
|
|
296
|
+
# Upload an artifact with metadata using session-based endpoint
|
|
297
|
+
async def upload_artifact_with_metadata(session_id: str, filename: str, file_path: Path, metadata: dict = None):
|
|
298
|
+
files = {"upload_file": (filename, file_path.open("rb"))}
|
|
299
|
+
data = {}
|
|
300
|
+
|
|
301
|
+
if metadata:
|
|
302
|
+
data["metadata_json"] = json.dumps(metadata)
|
|
303
|
+
|
|
304
|
+
async with httpx.AsyncClient() as client:
|
|
305
|
+
response = await client.post(
|
|
306
|
+
f"http://localhost:8000/api/v1/artifacts/{session_id}/{filename}",
|
|
307
|
+
files=files,
|
|
308
|
+
data=data
|
|
309
|
+
)
|
|
310
|
+
return response.json()
|
|
311
|
+
|
|
312
|
+
# Upload artifact with automatic session creation
|
|
313
|
+
|
|
314
|
+
# content_hash: a98ae1eb7e5483f6e9438569a4c3dd2df4d9992a968e84230d41cf18d2d34624
|