solace-agent-mesh 1.6.0__py3-none-any.whl → 1.6.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/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +1 -1
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +135 -31
- solace_agent_mesh/agent/adk/models/lite_llm.py +5 -0
- solace_agent_mesh/agent/adk/runner.py +10 -12
- solace_agent_mesh/agent/adk/services.py +50 -14
- solace_agent_mesh/agent/adk/setup.py +66 -38
- solace_agent_mesh/agent/protocol/event_handlers.py +416 -152
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/component.py +35 -4
- solace_agent_mesh/agent/sac/app.py +97 -9
- solace_agent_mesh/agent/sac/component.py +284 -145
- solace_agent_mesh/agent/sac/task_execution_context.py +79 -2
- solace_agent_mesh/agent/tools/tool_config_types.py +3 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1 -1
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{e3d9abda.2b916f9e.js → e3d9abda.6b9493d0.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d1643f0b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.97f920d4.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -25
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +5 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/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/try-agent-mesh/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +3 -6
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
- solace_agent_mesh/assets/docs/lunr-index-1761663789856.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1761663789856.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-D4_RMYRh.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-CaY59VuC.js → client-UZ3qU6Bq.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +342 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BEmvJSYz.js → vendor-DSqhjwq_.js} +1 -1
- 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/events.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +78 -0
- solace_agent_mesh/common/sac/sam_component_base.py +406 -21
- solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
- solace_agent_mesh/gateway/base/app.py +15 -0
- solace_agent_mesh/gateway/base/component.py +116 -46
- solace_agent_mesh/gateway/http_sse/app.py +7 -0
- solace_agent_mesh/gateway/http_sse/component.py +18 -10
- solace_agent_mesh/gateway/http_sse/dependencies.py +83 -59
- solace_agent_mesh/gateway/http_sse/main.py +5 -4
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/auth.py +103 -6
- solace_agent_mesh/gateway/http_sse/routers/config.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/sse.py +15 -5
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/users.py +47 -1
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +90 -8
- solace_agent_mesh/gateway/http_sse/services/session_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +16 -1
- solace_agent_mesh/gateway/http_sse/sse_manager.py +15 -6
- solace_agent_mesh/templates/logging_config_template.ini +2 -2
- {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/METADATA +2 -2
- {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/RECORD +116 -114
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.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/main.20feee82.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.0d198646.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761165361160.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761165361160.json +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-BGTaW0uv.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- /solace_agent_mesh/assets/docs/assets/js/{main.20feee82.js.LICENSE.txt → main.d1643f0b.js.LICENSE.txt} +0 -0
- {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -160,7 +160,7 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
160
160
|
)
|
|
161
161
|
|
|
162
162
|
log.info(
|
|
163
|
-
"%s Base Gateway Component
|
|
163
|
+
"%s Initialized Base Gateway Component.", self.log_identifier
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
async def authenticate_and_enrich_user(
|
|
@@ -208,6 +208,8 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
208
208
|
user_identity: Any,
|
|
209
209
|
is_streaming: bool = True,
|
|
210
210
|
api_version: str = "v2",
|
|
211
|
+
task_id_override: str | None = None,
|
|
212
|
+
metadata: dict[str, Any] | None = None,
|
|
211
213
|
) -> str:
|
|
212
214
|
log_id_prefix = f"{self.log_identifier}[SubmitA2ATask]"
|
|
213
215
|
log.info(
|
|
@@ -241,7 +243,7 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
241
243
|
user_config = await config_resolver.resolve_user_config(
|
|
242
244
|
user_identity, gateway_context, {}
|
|
243
245
|
)
|
|
244
|
-
log.
|
|
246
|
+
log.debug(
|
|
245
247
|
"%s Resolved user configuration for user_identity '%s': %s",
|
|
246
248
|
log_id_prefix,
|
|
247
249
|
user_identity.get("id"),
|
|
@@ -307,9 +309,15 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
307
309
|
log_id_prefix,
|
|
308
310
|
len(invoked_artifacts),
|
|
309
311
|
)
|
|
312
|
+
|
|
313
|
+
if metadata:
|
|
314
|
+
a2a_metadata.update(metadata)
|
|
310
315
|
|
|
311
316
|
# This correlation ID is used by the gateway to track the task
|
|
312
|
-
|
|
317
|
+
if task_id_override:
|
|
318
|
+
task_id = task_id_override
|
|
319
|
+
else:
|
|
320
|
+
task_id = f"gdk-task-{uuid.uuid4().hex}"
|
|
313
321
|
|
|
314
322
|
prepared_a2a_parts = await self._prepare_parts_for_publishing(
|
|
315
323
|
parts=a2a_parts,
|
|
@@ -343,6 +351,37 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
343
351
|
if user_config:
|
|
344
352
|
user_properties["a2aUserConfig"] = user_config
|
|
345
353
|
|
|
354
|
+
# Enterprise feature: Add signed user claims if trust manager available
|
|
355
|
+
if hasattr(self, "trust_manager") and self.trust_manager:
|
|
356
|
+
log.debug(
|
|
357
|
+
"%s Attempting to sign user claims for task %s",
|
|
358
|
+
log_id_prefix,
|
|
359
|
+
task_id,
|
|
360
|
+
)
|
|
361
|
+
try:
|
|
362
|
+
auth_token = self.trust_manager.sign_user_claims(
|
|
363
|
+
user_info=user_identity, task_id=task_id
|
|
364
|
+
)
|
|
365
|
+
user_properties["authToken"] = auth_token
|
|
366
|
+
log.debug(
|
|
367
|
+
"%s Successfully signed user claims for task %s",
|
|
368
|
+
log_id_prefix,
|
|
369
|
+
task_id,
|
|
370
|
+
)
|
|
371
|
+
except Exception as e:
|
|
372
|
+
log.error(
|
|
373
|
+
"%s Failed to sign user claims for task %s: %s",
|
|
374
|
+
log_id_prefix,
|
|
375
|
+
task_id,
|
|
376
|
+
e,
|
|
377
|
+
)
|
|
378
|
+
# Continue without token - enterprise feature is optional
|
|
379
|
+
else:
|
|
380
|
+
log.debug(
|
|
381
|
+
"%s Trust Manager not available, proceeding without authentication token",
|
|
382
|
+
log_id_prefix,
|
|
383
|
+
)
|
|
384
|
+
|
|
346
385
|
user_properties["replyTo"] = a2a.get_gateway_response_topic(
|
|
347
386
|
self.namespace, self.gateway_id, task_id
|
|
348
387
|
)
|
|
@@ -366,49 +405,55 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
366
405
|
)
|
|
367
406
|
return task_id
|
|
368
407
|
|
|
369
|
-
def
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
if not original_broker_message:
|
|
373
|
-
log.warning(
|
|
374
|
-
"%s Received MESSAGE event with no data. Ignoring.",
|
|
375
|
-
self.log_identifier,
|
|
376
|
-
)
|
|
377
|
-
return
|
|
408
|
+
def _handle_message(self, message: SolaceMessage, topic: str) -> None:
|
|
409
|
+
"""
|
|
410
|
+
Override to use queue-based pattern instead of direct async.
|
|
378
411
|
|
|
379
|
-
|
|
380
|
-
|
|
412
|
+
Gateway uses an internal queue for message processing to ensure
|
|
413
|
+
strict ordering and backpressure handling.
|
|
414
|
+
|
|
415
|
+
Args:
|
|
416
|
+
message: The Solace message
|
|
417
|
+
topic: The topic the message was received on
|
|
418
|
+
"""
|
|
419
|
+
log.debug(
|
|
420
|
+
"%s Received SolaceMessage on topic: %s. Bridging to internal queue.",
|
|
421
|
+
self.log_identifier,
|
|
422
|
+
topic,
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
try:
|
|
426
|
+
msg_data_for_processor = {
|
|
427
|
+
"topic": topic,
|
|
428
|
+
"payload": message.get_payload(),
|
|
429
|
+
"user_properties": message.get_user_properties(),
|
|
430
|
+
"_original_broker_message": message,
|
|
431
|
+
}
|
|
432
|
+
self.internal_event_queue.put_nowait(msg_data_for_processor)
|
|
433
|
+
except queue.Full:
|
|
434
|
+
log.error(
|
|
435
|
+
"%s Internal event queue full. Cannot bridge message.",
|
|
381
436
|
self.log_identifier,
|
|
382
|
-
original_broker_message.get_topic(),
|
|
383
437
|
)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
"user_properties": original_broker_message.get_user_properties(),
|
|
389
|
-
"_original_broker_message": original_broker_message,
|
|
390
|
-
}
|
|
391
|
-
self.internal_event_queue.put_nowait(msg_data_for_processor)
|
|
392
|
-
except queue.Full:
|
|
393
|
-
log.error(
|
|
394
|
-
"%s Internal event queue full. Cannot bridge message. NACKing.",
|
|
395
|
-
self.log_identifier,
|
|
396
|
-
)
|
|
397
|
-
original_broker_message.call_negative_acknowledgements()
|
|
398
|
-
except Exception as e:
|
|
399
|
-
log.exception(
|
|
400
|
-
"%s Error bridging message to internal queue: %s. NACKing.",
|
|
401
|
-
self.log_identifier,
|
|
402
|
-
e,
|
|
403
|
-
)
|
|
404
|
-
original_broker_message.call_negative_acknowledgements()
|
|
405
|
-
else:
|
|
406
|
-
log.debug(
|
|
407
|
-
"%s Received non-MESSAGE event type: %s. Passing to super.",
|
|
438
|
+
raise
|
|
439
|
+
except Exception as e:
|
|
440
|
+
log.exception(
|
|
441
|
+
"%s Error bridging message to internal queue: %s",
|
|
408
442
|
self.log_identifier,
|
|
409
|
-
|
|
443
|
+
e,
|
|
410
444
|
)
|
|
411
|
-
|
|
445
|
+
raise
|
|
446
|
+
|
|
447
|
+
async def _handle_message_async(self, message, topic: str) -> None:
|
|
448
|
+
"""
|
|
449
|
+
Not used by gateway - we override _handle_message() instead.
|
|
450
|
+
|
|
451
|
+
This is here to satisfy the abstract method requirement, but the
|
|
452
|
+
gateway uses the queue-based pattern via _handle_message() override.
|
|
453
|
+
"""
|
|
454
|
+
raise NotImplementedError(
|
|
455
|
+
"Gateway uses queue-based message handling via _handle_message() override"
|
|
456
|
+
)
|
|
412
457
|
|
|
413
458
|
async def _handle_resolved_signals(
|
|
414
459
|
self,
|
|
@@ -1120,20 +1165,30 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
1120
1165
|
|
|
1121
1166
|
async def _async_setup_and_run(self) -> None:
|
|
1122
1167
|
"""Main async logic for the gateway component."""
|
|
1168
|
+
# Call base class to initialize Trust Manager
|
|
1169
|
+
await super()._async_setup_and_run()
|
|
1170
|
+
|
|
1123
1171
|
log.info(
|
|
1124
1172
|
"%s Starting _start_listener() to initiate external platform connection.",
|
|
1125
1173
|
self.log_identifier,
|
|
1126
1174
|
)
|
|
1127
1175
|
self._start_listener()
|
|
1128
1176
|
|
|
1129
|
-
log.info(
|
|
1130
|
-
"%s Starting _message_processor_loop as an asyncio task.",
|
|
1131
|
-
self.log_identifier,
|
|
1132
|
-
)
|
|
1133
1177
|
await self._message_processor_loop()
|
|
1134
1178
|
|
|
1135
1179
|
def _pre_async_cleanup(self) -> None:
|
|
1136
1180
|
"""Pre-cleanup actions for the gateway component."""
|
|
1181
|
+
# Cleanup Trust Manager if present (ENTERPRISE FEATURE)
|
|
1182
|
+
if self.trust_manager:
|
|
1183
|
+
try:
|
|
1184
|
+
log.info("%s Cleaning up Trust Manager...", self.log_identifier)
|
|
1185
|
+
self.trust_manager.cleanup(self.cancel_timer)
|
|
1186
|
+
log.info("%s Trust Manager cleanup complete", self.log_identifier)
|
|
1187
|
+
except Exception as e:
|
|
1188
|
+
log.error(
|
|
1189
|
+
"%s Error during Trust Manager cleanup: %s", self.log_identifier, e
|
|
1190
|
+
)
|
|
1191
|
+
|
|
1137
1192
|
log.info("%s Calling _stop_listener()...", self.log_identifier)
|
|
1138
1193
|
self._stop_listener()
|
|
1139
1194
|
|
|
@@ -1146,7 +1201,7 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
1146
1201
|
self.internal_event_queue.put(None)
|
|
1147
1202
|
|
|
1148
1203
|
async def _message_processor_loop(self):
|
|
1149
|
-
log.
|
|
1204
|
+
log.debug("%s Starting message processor loop as an asyncio task...", self.log_identifier)
|
|
1150
1205
|
loop = self.get_async_loop()
|
|
1151
1206
|
|
|
1152
1207
|
while not self.stop_signal.is_set():
|
|
@@ -1184,6 +1239,13 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
1184
1239
|
processed_successfully = await self._handle_discovery_message(
|
|
1185
1240
|
payload
|
|
1186
1241
|
)
|
|
1242
|
+
elif (
|
|
1243
|
+
hasattr(self, "trust_manager")
|
|
1244
|
+
and self.trust_manager
|
|
1245
|
+
and self.trust_manager.is_trust_card_topic(topic)
|
|
1246
|
+
):
|
|
1247
|
+
await self.trust_manager.handle_trust_card_message(payload, topic)
|
|
1248
|
+
processed_successfully = True
|
|
1187
1249
|
elif a2a.topic_matches_subscription(
|
|
1188
1250
|
topic,
|
|
1189
1251
|
a2a.get_gateway_response_subscription_topic(
|
|
@@ -1328,6 +1390,14 @@ class BaseGatewayComponent(SamComponentBase):
|
|
|
1328
1390
|
) -> None:
|
|
1329
1391
|
pass
|
|
1330
1392
|
|
|
1393
|
+
def _get_component_id(self) -> str:
|
|
1394
|
+
"""Returns the gateway ID as the component identifier."""
|
|
1395
|
+
return self.gateway_id
|
|
1396
|
+
|
|
1397
|
+
def _get_component_type(self) -> str:
|
|
1398
|
+
"""Returns 'gateway' as the component type."""
|
|
1399
|
+
return "gateway"
|
|
1400
|
+
|
|
1331
1401
|
def invoke(self, message, data):
|
|
1332
1402
|
if isinstance(message, SolaceMessage):
|
|
1333
1403
|
message.call_acknowledgements()
|
|
@@ -89,6 +89,13 @@ class WebUIBackendApp(BaseGatewayApp):
|
|
|
89
89
|
"default": "",
|
|
90
90
|
"description": "General guidelines on how agent responses should be structured, to be optionally used by agents.",
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
"name": "model",
|
|
94
|
+
"required": False,
|
|
95
|
+
"type": "dict",
|
|
96
|
+
"default": None,
|
|
97
|
+
"description": "The model to use for the WebUI gateway.",
|
|
98
|
+
},
|
|
92
99
|
{
|
|
93
100
|
"name": "frontend_welcome_message",
|
|
94
101
|
"required": False,
|
|
@@ -115,6 +115,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
115
115
|
self.ssl_keyfile = self.get_config("ssl_keyfile", "")
|
|
116
116
|
self.ssl_certfile = self.get_config("ssl_certfile", "")
|
|
117
117
|
self.ssl_keyfile_password = self.get_config("ssl_keyfile_password", "")
|
|
118
|
+
self.model_config = self.get_config("model", None)
|
|
118
119
|
|
|
119
120
|
log.info(
|
|
120
121
|
"%s WebUI-specific configuration retrieved (Host: %s, Port: %d).",
|
|
@@ -437,7 +438,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
437
438
|
raise RuntimeError(
|
|
438
439
|
"Visualization flow setup error: BrokerInput not found."
|
|
439
440
|
)
|
|
440
|
-
log.
|
|
441
|
+
log.debug(
|
|
441
442
|
"%s Obtained reference to internal BrokerInput component.",
|
|
442
443
|
log_id_prefix,
|
|
443
444
|
)
|
|
@@ -883,7 +884,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
883
884
|
Manages global subscription reference counts.
|
|
884
885
|
"""
|
|
885
886
|
log_id_prefix = f"{self.log_identifier}[AddVizSub:{stream_id}]"
|
|
886
|
-
log.
|
|
887
|
+
log.debug(
|
|
887
888
|
"%s Attempting to add subscription to topic: %s", log_id_prefix, topic_str
|
|
888
889
|
)
|
|
889
890
|
|
|
@@ -1207,7 +1208,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1207
1208
|
self.task_logger_service = TaskLoggerService(
|
|
1208
1209
|
session_factory=session_factory, config=task_logging_config
|
|
1209
1210
|
)
|
|
1210
|
-
log.
|
|
1211
|
+
log.debug(
|
|
1211
1212
|
"%s Services dependent on database session factory have been initialized.",
|
|
1212
1213
|
self.log_identifier,
|
|
1213
1214
|
)
|
|
@@ -1222,7 +1223,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1222
1223
|
app=self.fastapi_app,
|
|
1223
1224
|
host=self.fastapi_host,
|
|
1224
1225
|
port=port,
|
|
1225
|
-
log_level="
|
|
1226
|
+
log_level="warning",
|
|
1226
1227
|
lifespan="on",
|
|
1227
1228
|
ssl_keyfile=self.ssl_keyfile,
|
|
1228
1229
|
ssl_certfile=self.ssl_certfile,
|
|
@@ -1238,14 +1239,14 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1238
1239
|
)
|
|
1239
1240
|
try:
|
|
1240
1241
|
self.fastapi_event_loop = asyncio.get_running_loop()
|
|
1241
|
-
log.
|
|
1242
|
+
log.debug(
|
|
1242
1243
|
"%s [_start_listener] Captured FastAPI event loop via startup event: %s",
|
|
1243
1244
|
self.log_identifier,
|
|
1244
1245
|
self.fastapi_event_loop,
|
|
1245
1246
|
)
|
|
1246
1247
|
|
|
1247
1248
|
if self.fastapi_event_loop:
|
|
1248
|
-
log.
|
|
1249
|
+
log.debug(
|
|
1249
1250
|
"%s Ensuring visualization flow is running...",
|
|
1250
1251
|
self.log_identifier,
|
|
1251
1252
|
)
|
|
@@ -1255,7 +1256,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1255
1256
|
self._visualization_processor_task is None
|
|
1256
1257
|
or self._visualization_processor_task.done()
|
|
1257
1258
|
):
|
|
1258
|
-
log.
|
|
1259
|
+
log.debug(
|
|
1259
1260
|
"%s Starting visualization message processor task.",
|
|
1260
1261
|
self.log_identifier,
|
|
1261
1262
|
)
|
|
@@ -1265,7 +1266,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1265
1266
|
)
|
|
1266
1267
|
)
|
|
1267
1268
|
else:
|
|
1268
|
-
log.
|
|
1269
|
+
log.debug(
|
|
1269
1270
|
"%s Visualization message processor task already running.",
|
|
1270
1271
|
self.log_identifier,
|
|
1271
1272
|
)
|
|
@@ -1812,7 +1813,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1812
1813
|
for agent_name in agents_to_deregister:
|
|
1813
1814
|
self._deregister_agent(agent_name)
|
|
1814
1815
|
|
|
1815
|
-
log.
|
|
1816
|
+
log.debug(
|
|
1816
1817
|
"%s Agent health check completed. Total agents: %d, De-registered: %d",
|
|
1817
1818
|
self.log_identifier,
|
|
1818
1819
|
total_agents,
|
|
@@ -2052,6 +2053,13 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
2052
2053
|
)
|
|
2053
2054
|
return
|
|
2054
2055
|
|
|
2056
|
+
try:
|
|
2057
|
+
from solace_agent_mesh_enterprise.auth.input_required import handle_input_required_request
|
|
2058
|
+
event_data = handle_input_required_request(event_data, sse_task_id, self)
|
|
2059
|
+
except ImportError:
|
|
2060
|
+
pass
|
|
2061
|
+
|
|
2062
|
+
|
|
2055
2063
|
log.debug(
|
|
2056
2064
|
"%s Sending update for A2A Task ID %s to SSE Task ID %s. Final chunk: %s",
|
|
2057
2065
|
log_id_prefix,
|
|
@@ -2073,7 +2081,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
2073
2081
|
await self.sse_manager.send_event(
|
|
2074
2082
|
task_id=sse_task_id, event_data=sse_payload, event_type=sse_event_type
|
|
2075
2083
|
)
|
|
2076
|
-
log.
|
|
2084
|
+
log.debug(
|
|
2077
2085
|
"%s Successfully sent %s via SSE for A2A Task ID %s.",
|
|
2078
2086
|
log_id_prefix,
|
|
2079
2087
|
sse_event_type,
|