solace-agent-mesh 1.0.2__py3-none-any.whl → 1.0.5__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.

Files changed (98) hide show
  1. solace_agent_mesh/__init__.py +0 -5
  2. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +32 -39
  3. solace_agent_mesh/agent/adk/services.py +140 -59
  4. solace_agent_mesh/agent/protocol/event_handlers.py +70 -116
  5. solace_agent_mesh/agent/sac/app.py +12 -2
  6. solace_agent_mesh/agent/sac/component.py +37 -1
  7. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +8 -1
  8. solace_agent_mesh/agent/tools/peer_agent_tool.py +92 -84
  9. solace_agent_mesh/agent/utils/artifact_helpers.py +148 -14
  10. solace_agent_mesh/assets/docs/404.html +3 -3
  11. solace_agent_mesh/assets/docs/assets/js/{04989206.674a8007.js → 04989206.da8246cd.js} +1 -1
  12. solace_agent_mesh/assets/docs/assets/js/1023fc19.8e6d174c.js +1 -0
  13. solace_agent_mesh/assets/docs/assets/js/{3d406171.f722eaf5.js → 3d406171.9b081d5f.js} +1 -1
  14. solace_agent_mesh/assets/docs/assets/js/75384d09.c3991823.js +1 -0
  15. solace_agent_mesh/assets/docs/assets/js/9eff14a2.036c35ea.js +1 -0
  16. solace_agent_mesh/assets/docs/assets/js/{aba87c2f.d3e2dcc3.js → aba87c2f.a6b84da6.js} +1 -1
  17. solace_agent_mesh/assets/docs/assets/js/{ae4415af.8e279b5d.js → ae4415af.96189a93.js} +1 -1
  18. solace_agent_mesh/assets/docs/assets/js/b7006a3a.38c0cf3d.js +1 -0
  19. solace_agent_mesh/assets/docs/assets/js/bb2ef573.56931473.js +1 -0
  20. solace_agent_mesh/assets/docs/assets/js/{cc969b05.954186d4.js → cc969b05.bd3e0d6c.js} +1 -1
  21. solace_agent_mesh/assets/docs/assets/js/f284c35a.5aff74ab.js +1 -0
  22. solace_agent_mesh/assets/docs/assets/js/{f897a61a.f8c53b0f.js → f897a61a.862b0514.js} +1 -1
  23. solace_agent_mesh/assets/docs/assets/js/main.946fa17b.js +2 -0
  24. solace_agent_mesh/assets/docs/assets/js/runtime~main.aa687c82.js +1 -0
  25. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +3 -3
  26. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +3 -3
  27. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +8 -6
  28. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +4 -4
  29. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +3 -3
  30. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +3 -3
  31. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +3 -3
  32. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +3 -3
  33. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +3 -3
  34. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +3 -3
  35. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +3 -3
  36. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +3 -3
  37. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  38. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +9 -9
  39. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +4 -4
  40. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +5 -5
  41. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +4 -4
  42. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +4 -4
  43. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +5 -5
  44. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html +140 -0
  45. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +4 -4
  46. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +4 -4
  47. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +4 -4
  48. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +4 -4
  49. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +3 -3
  50. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +5 -5
  51. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +3 -3
  52. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +3 -3
  53. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +3 -3
  54. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +3 -3
  55. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +3 -3
  56. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +3 -3
  57. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +3 -3
  58. solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
  59. solace_agent_mesh/assets/docs/lunr-index-1755275703209.json +1 -0
  60. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  61. solace_agent_mesh/assets/docs/search-doc-1755275703209.json +1 -0
  62. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  63. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  64. solace_agent_mesh/cli/__init__.py +1 -1
  65. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +1 -1
  66. solace_agent_mesh/cli/commands/run_cmd.py +46 -3
  67. solace_agent_mesh/cli/main.py +1 -3
  68. solace_agent_mesh/client/webui/frontend/static/assets/main-BCpII1-0.css +1 -0
  69. solace_agent_mesh/client/webui/frontend/static/assets/main-DzKPMTRs.js +673 -0
  70. solace_agent_mesh/client/webui/frontend/static/index.html +2 -2
  71. solace_agent_mesh/common/exceptions.py +25 -0
  72. solace_agent_mesh/common/utils/initializer.py +4 -3
  73. solace_agent_mesh/common/utils/message_utils.py +79 -0
  74. solace_agent_mesh/config_portal/backend/common.py +1 -1
  75. solace_agent_mesh/config_portal/frontend/static/client/assets/{_index-_7yox_eh.js → _index-xSu2leR8.js} +1 -1
  76. solace_agent_mesh/config_portal/frontend/static/client/assets/{manifest-e5c3acfe.js → manifest-950eb3be.js} +1 -1
  77. solace_agent_mesh/config_portal/frontend/static/client/index.html +1 -1
  78. solace_agent_mesh/gateway/base/component.py +15 -2
  79. solace_agent_mesh/gateway/http_sse/sse_manager.py +23 -1
  80. solace_agent_mesh/templates/plugin_agent_config_template.yaml +1 -1
  81. {solace_agent_mesh-1.0.2.dist-info → solace_agent_mesh-1.0.5.dist-info}/METADATA +66 -49
  82. {solace_agent_mesh-1.0.2.dist-info → solace_agent_mesh-1.0.5.dist-info}/RECORD +86 -82
  83. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +0 -1
  84. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +0 -1
  85. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +0 -1
  86. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +0 -1
  87. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +0 -1
  88. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js +0 -2
  89. solace_agent_mesh/assets/docs/assets/js/runtime~main.d5133813.js +0 -1
  90. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  91. solace_agent_mesh/assets/docs/lunr-index-1754075282978.json +0 -1
  92. solace_agent_mesh/assets/docs/search-doc-1754075282978.json +0 -1
  93. solace_agent_mesh/client/webui/frontend/static/assets/main-D11Lmy9p.css +0 -1
  94. solace_agent_mesh/client/webui/frontend/static/assets/main-Gfk3BYn5.js +0 -663
  95. /solace_agent_mesh/assets/docs/assets/js/{main.c6286d7c.js.LICENSE.txt → main.946fa17b.js.LICENSE.txt} +0 -0
  96. {solace_agent_mesh-1.0.2.dist-info → solace_agent_mesh-1.0.5.dist-info}/WHEEL +0 -0
  97. {solace_agent_mesh-1.0.2.dist-info → solace_agent_mesh-1.0.5.dist-info}/entry_points.txt +0 -0
  98. {solace_agent_mesh-1.0.2.dist-info → solace_agent_mesh-1.0.5.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- window.__remixManifest={"entry":{"module":"/assets/entry.client-CEumGClk.js","imports":["/assets/index-DSo1AH_7.js","/assets/components-B7lKcHVY.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/root-C4XmHinv.js","imports":["/assets/index-DSo1AH_7.js","/assets/components-B7lKcHVY.js"],"css":["/assets/root-DxRwaWiE.css"]},"routes/_index":{"id":"routes/_index","parentId":"root","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_index-_7yox_eh.js","imports":["/assets/index-DSo1AH_7.js"],"css":[]}},"url":"/assets/manifest-e5c3acfe.js","version":"e5c3acfe"};
1
+ window.__remixManifest={"entry":{"module":"/assets/entry.client-CEumGClk.js","imports":["/assets/index-DSo1AH_7.js","/assets/components-B7lKcHVY.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/root-C4XmHinv.js","imports":["/assets/index-DSo1AH_7.js","/assets/components-B7lKcHVY.js"],"css":["/assets/root-DxRwaWiE.css"]},"routes/_index":{"id":"routes/_index","parentId":"root","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_index-xSu2leR8.js","imports":["/assets/index-DSo1AH_7.js"],"css":[]}},"url":"/assets/manifest-950eb3be.js","version":"950eb3be"};
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/root-DxRwaWiE.css"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&amp;display=swap"/></head><body><p>Loading...</p><link rel="modulepreload" href="/assets/manifest-e5c3acfe.js"/><link rel="modulepreload" href="/assets/entry.client-CEumGClk.js"/><link rel="modulepreload" href="/assets/index-DSo1AH_7.js"/><link rel="modulepreload" href="/assets/components-B7lKcHVY.js"/><link rel="modulepreload" href="/assets/root-C4XmHinv.js"/><script>window.__remixContext = {"basename":"/","future":{"v3_fetcherPersist":false,"v3_relativeSplatPath":false,"v3_throwAbortReason":false,"v3_routeConfig":false,"v3_singleFetch":false,"v3_lazyRouteDiscovery":false,"unstable_optimizeDeps":false},"isSpaMode":true,"state":{"loaderData":{"root":null,"routes/_index":null},"actionData":null,"errors":null}};</script><script type="module" async="">import "/assets/manifest-e5c3acfe.js";
2
+ <html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/root-DxRwaWiE.css"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&amp;display=swap"/></head><body><p>Loading...</p><link rel="modulepreload" href="/assets/manifest-950eb3be.js"/><link rel="modulepreload" href="/assets/entry.client-CEumGClk.js"/><link rel="modulepreload" href="/assets/index-DSo1AH_7.js"/><link rel="modulepreload" href="/assets/components-B7lKcHVY.js"/><link rel="modulepreload" href="/assets/root-C4XmHinv.js"/><script>window.__remixContext = {"basename":"/","future":{"v3_fetcherPersist":false,"v3_relativeSplatPath":false,"v3_throwAbortReason":false,"v3_routeConfig":false,"v3_singleFetch":false,"v3_lazyRouteDiscovery":false,"unstable_optimizeDeps":false},"isSpaMode":true,"state":{"loaderData":{"root":null,"routes/_index":null},"actionData":null,"errors":null}};</script><script type="module" async="">import "/assets/manifest-950eb3be.js";
3
3
  import * as route0 from "/assets/root-C4XmHinv.js";
4
4
 
5
5
  window.__remixRouteModules = {"root":route0};
@@ -65,7 +65,9 @@ from solace_ai_connector.common.event import Event, EventType
65
65
  from abc import abstractmethod
66
66
 
67
67
  from ...common.middleware.registry import MiddlewareRegistry
68
- from ...agent.utils.artifact_helpers import load_artifact_content_or_metadata
68
+ from ...agent.utils.artifact_helpers import (
69
+ load_artifact_content_or_metadata,
70
+ )
69
71
 
70
72
  info = {
71
73
  "class_name": "BaseGatewayComponent",
@@ -157,6 +159,7 @@ class BaseGatewayComponent(ComponentBase):
157
159
  self.shared_artifact_service: Optional[BaseArtifactService] = (
158
160
  initialize_artifact_service(self)
159
161
  )
162
+
160
163
  self.task_context_manager: TaskContextManager = TaskContextManager()
161
164
  self.internal_event_queue: queue.Queue = queue.Queue()
162
165
  self.message_processor_thread: Optional[threading.Thread] = None
@@ -340,7 +343,17 @@ class BaseGatewayComponent(ComponentBase):
340
343
  )
341
344
  external_request_context["a2a_session_id"] = a2a_session_id
342
345
 
343
- a2a_message = A2AMessage(role="user", parts=a2a_parts)
346
+ a2a_metadata = {}
347
+ invoked_artifacts = external_request_context.get("invoked_with_artifacts")
348
+ if invoked_artifacts:
349
+ a2a_metadata["invoked_with_artifacts"] = invoked_artifacts
350
+ log.debug(
351
+ "%s Found %d artifact identifiers in external context to pass to agent.",
352
+ log_id_prefix,
353
+ len(invoked_artifacts),
354
+ )
355
+
356
+ a2a_message = A2AMessage(role="user", parts=a2a_parts, metadata=a2a_metadata)
344
357
  reply_topic_pattern = get_gateway_response_topic(
345
358
  self.namespace, self.gateway_id, "{task_id}"
346
359
  )
@@ -6,6 +6,8 @@ import asyncio
6
6
  import threading
7
7
  from typing import Dict, List, Any
8
8
  import json
9
+ import datetime
10
+ import math
9
11
 
10
12
  from solace_ai_connector.common.log import log
11
13
 
@@ -46,6 +48,23 @@ class SSEManager:
46
48
  )
47
49
  return self._locks[current_loop]
48
50
 
51
+ def _sanitize_json(self, obj):
52
+ if isinstance(obj, dict):
53
+ return {k: self._sanitize_json(v) for k, v in obj.items()}
54
+ elif isinstance(obj, list):
55
+ return [self._sanitize_json(v) for v in obj]
56
+ elif isinstance(obj, (float, int)):
57
+ if math.isnan(obj) or math.isinf(obj):
58
+ return None
59
+ return obj
60
+ elif isinstance(obj, (str, bool, type(None))):
61
+ return obj
62
+ elif isinstance(obj, (datetime.datetime, datetime.date)):
63
+ return obj.isoformat()
64
+ else:
65
+ return str(obj)
66
+
67
+
49
68
  async def create_sse_connection(self, task_id: str) -> asyncio.Queue:
50
69
  """
51
70
  Creates a new queue for an SSE connection subscribing to a task.
@@ -136,7 +155,10 @@ class SSEManager:
136
155
 
137
156
  queues_to_remove = []
138
157
  try:
139
- serialized_data = json.dumps(event_data)
158
+ serialized_data = json.dumps(
159
+ self._sanitize_json(event_data),
160
+ allow_nan=False
161
+ )
140
162
  except Exception as json_err:
141
163
  log.error(
142
164
  "%s Failed to JSON serialize event data for Task ID %s: %s",
@@ -102,7 +102,7 @@ apps:
102
102
  session_service: *default_session_service
103
103
  artifact_service: *default_artifact_service
104
104
 
105
- artifact_handling_mode: "embed"
105
+ artifact_handling_mode: "reference"
106
106
  enable_embed_resolution: true
107
107
  enable_artifact_content_instruction: true
108
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solace-agent-mesh
3
- Version: 1.0.2
3
+ Version: 1.0.5
4
4
  Summary: Solace Agent Mesh is an open-source framework for building event-driven, multi-agent AI systems where specialized agents collaborate on complex tasks.
5
5
  Project-URL: Homepage, https://github.com/SolaceLabs/solace-agent-mesh
6
6
  Project-URL: Repository, https://github.com/SolaceLabs/solace-agent-mesh
@@ -257,10 +257,6 @@ Requires-Dist: prompt-toolkit>=3.0; extra == 'cli'
257
257
  Requires-Dist: rich>=13.0; extra == 'cli'
258
258
  Provides-Extra: database
259
259
  Requires-Dist: sqlalchemy>=2.0; extra == 'database'
260
- Provides-Extra: dev
261
- Requires-Dist: pytest-asyncio>=0.20; extra == 'dev'
262
- Requires-Dist: pytest>=7.0; extra == 'dev'
263
- Requires-Dist: ruff; extra == 'dev'
264
260
  Provides-Extra: employee-tools
265
261
  Requires-Dist: holidays>=0.24; extra == 'employee-tools'
266
262
  Provides-Extra: gcs
@@ -300,30 +296,33 @@ Description-Content-Type: text/markdown
300
296
 
301
297
  ---
302
298
 
303
- The Solace Agent Mesh transforms how AI agents work together, creating a dynamic ecosystem where specialized agents communicate seamlessly, share information, and collaborate on complex tasks.
299
+ **Solace Agent Mesh** is a framework that supports building AI applications where multiple specialized AI agents work together to solve complex problems. It uses the event messaging of [Solace Platform](https://solace.com) for true scalability and reliability.
304
300
 
305
- Built on Solace PubSub+ Event Broker, this framework provides a robust foundation for enterprise-grade AI solutions that scale effortlessly. The mesh creates a standardized communication layer where AI agents can:
301
+ With Solace Agent Mesh (SAM), you can create teams of AI agents, each having distinct skills and access to specific tools. For example, you could have a Database Agent that can make SQL queries to fetch data or a MultiModal Agent that can help create images, audio files and reports.
306
302
 
307
- * Delegate specialized tasks to peer agents
308
- * Share artifacts and data across the network
303
+ The framework handles the communication between agents automatically, so you can focus on building great AI experiences.
304
+
305
+ SAM creates a standardized communication layer where AI agents can:
306
+ * Delegate tasks to peer agents
307
+ * Share data and artifacts
309
308
  * Connect with diverse user interfaces and external systems
310
- * Execute complex, multi-step workflows with minimal coupling
309
+ * Execute multi-step workflows with minimal coupling
310
+
311
+ SAM is built on top of the Solace AI Connector (SAC) which allows Solace Platform Event Brokers to connect to AI models and services and Google's Agent Development Kit (ADK) for AI logic and tool integrations.
311
312
 
312
- Under the hood, the framework combines the Solace AI Connector (SAC) for runtime orchestration with Google's Agent Development Kit (ADK) for agent logic, LLM interaction, and tool execution—all communicating via the A2A protocol over Solace's event mesh. The result? A fully asynchronous, event-driven, and decoupled AI agent architecture ready for enterprise deployment.
313
+ The result? A fully asynchronous, event-driven and decoupled AI agent architecture ready for production deployment. It is robust, reliable and easy to maintain.
313
314
 
314
315
  ---
315
316
 
316
- ## Key Features
317
- - ⚙️ **[Modular, Event-Driven Architecture](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/getting-started/component-overview)** – All components communicate via events through a central event mesh, enabling loose coupling and high scalability.
318
- - 🤖 **[Composable Agents](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/agents)** – Combine specialized AI agents to solve complex, multi-step workflows.
319
- - 🌐 **[Flexible Interfaces](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/gateways)** – Interact with SAM via the REST API, browser UI, [Slack](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/tutorials/slack-integration), etc.
320
- - 🧠 **[Orchestration Agent](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/orchestrator)** – Tasks are automatically broken down and delegated across agents by the orchestrator agent.
321
- - 🧩 **[Plugin-Extensible](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/plugins)** – Add your own agents, gateways, or services with minimal boilerplate.
322
- - 🏢 **[Production-Ready](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/deployment/deploy)** – Backed by [Solace's enterprise-grade event broker](https://solace.com/products/event-broker/) for reliability and performance.
323
- - 📁 **[File Management](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/artifact-management)** – Built-in tools for managing file artifacts with automatic metadata injection and artifact handling.
324
- - 📊 **[Data Analysis Tools](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/data-analysis-tools)** – Built-in tools for SQL queries, JQ transformations, and Plotly chart generation.
325
- - 🔗 **[Dynamic Embeds](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/embeds)** – Include dynamic placeholders in responses that are resolved by the framework with support for modifier chains.
326
- - 🤝 **[Agent-to-Agent Communication](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/architecture)** – Agents can discover and delegate tasks to peer agents using the A2A protocol over Solace.
317
+ ## 🔑 Key Features
318
+ - **[Multi-Agent Event-Driven Architecture](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/getting-started/component-overview)** – Agents communicate via the Solace Event Mesh for true scalability
319
+ - **[Agent Orchestration](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/agents)** – Complex tasks are automatically broken down and delegated by the [Orchestrator](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/orchestrator) agent
320
+ - **[Flexible Interfaces](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/gateways)** – Integrate with REST API, web UI, [Slack](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/tutorials/slack-integration), or build your own integration
321
+ - **[Extensible](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/plugins)** – Add your own agents, gateways, or services with minimal code
322
+ - **[Agent-to-Agent Communication](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/concepts/architecture)** – Agents can discover and delegate tasks to each other seamlessly using the Agent2Agent (A2A) Protocol
323
+ - **[Dynamic Embeds](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/user-guide/builtin-tools/embeds)** – Embed dynamic content like real-time data, calculations and file contents in responses
324
+
325
+ 📚 **Want to know more?** Check out the full Solace Agent Mesh [documentation](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/getting-started/introduction/).
327
326
 
328
327
  ---
329
328
 
@@ -342,39 +341,53 @@ To run Solace Agent Mesh locally, you'll need:
342
341
 
343
342
  ### 💻 Setup Steps
344
343
 
344
+ #### 1. Create a directory for a new project
345
345
  ```bash
346
- # 1. (Optional) Create and activate a Python virtual environment
347
- python3 -m venv .venv
348
- source .venv/bin/activate
349
-
350
- # 2. Install the Solace Agent Mesh
351
- pip install solace-agent-mesh
346
+ mkdir my-sam && cd my-sam
347
+ ```
348
+ #### 2. Create and activate a Python virtual environment
349
+ ```bash
350
+ python3 -m venv .venv && source .venv/bin/activate
351
+ ```
352
+ #### 3. Install Solace Agent Mesh (SAM)
353
+ Check if you have a version of SAM already installed.
354
+ ```bash
355
+ sam -v
356
+ ```
357
+ If you have an earlier version, uninstall it and **start from scratch**:
358
+ ```bash
359
+ pip3 uninstall solace-agent-mesh
360
+ ```
361
+ Note: Optionally, you can try to upgrade versions but this action is not officially supported at this time. (`pip3 install --upgrade solace-agent-mesh`)
352
362
 
353
- # 3. Initialize a new project with web-based setup
354
- mkdir my-agent-mesh && cd my-agent-mesh
363
+ If no previous version exists, install the latest version with:
364
+ ```bash
365
+ pip3 install solace-agent-mesh
366
+ ```
367
+ #### 4. Initialize the new project via a GUI interface
368
+ ```bash
355
369
  sam init --gui
356
-
357
- # 4. Run the project
370
+ ```
371
+ Note: This initialization UI runs on port 5002
372
+ #### 5. Run the project
373
+ ```bash
358
374
  sam run
359
375
  ```
376
+ #### 6. Verify SAM is running
377
+ Open the Web UI at [http://localhost:8000](http://localhost:8000) for the chat inteface and ask a question
360
378
 
361
- ### 🔧 Adding Agents
379
+ ### 🔧 Customize SAM
362
380
 
381
+ #### New agents can be added via a GUI interface
363
382
  ```bash
364
- # Add a new agent with GUI interface
365
383
  sam add agent --gui
366
384
  ```
367
385
 
368
- Or install an existing plugin:
369
-
386
+ #### Existing plugins can be installed
370
387
  ```bash
371
388
  sam plugin add <your-component-name> --plugin <plugin-name>
372
389
  ```
373
390
 
374
- #### Once running:
375
-
376
- Open the Web UI at [http://localhost:8000](http://localhost:8000) to talk with a chat interface.
377
-
378
391
  ---
379
392
 
380
393
  ## 🏗️ Architecture Overview
@@ -385,7 +398,7 @@ The system allows you to:
385
398
 
386
399
  - Host AI agents developed with Google ADK within the SAC framework
387
400
  - Define agent capabilities (LLM model, instructions, tools) primarily through SAC YAML configuration
388
- - Utilize Solace PubSub+ as the transport for standard Agent-to-Agent (A2A) protocol communication
401
+ - Use Solace Platform as the transport for standard Agent-to-Agent (A2A) protocol communication
389
402
  - Enable dynamic discovery of peer agents running within the same ecosystem
390
403
  - Allow agents to delegate tasks to discovered peers via the A2A protocol over Solace
391
404
  - Manage file artifacts using built-in tools with automatic metadata injection
@@ -413,20 +426,24 @@ Want to go further? Here are some hands-on tutorials to help you get started:
413
426
  | 🧠 **MCP Integration**<br>Integrating a Model Context Protocol (MCP) Servers into Solace Agent Mesh. | **~10–15 min** | [MCP Integration Tutorial](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/tutorials/mcp-integration) |
414
427
  | 💬 **Slack Integration**<br>Chat with Solace Agent Mesh directly from Slack. | **~20–30 min** | [Slack Integration Tutorial](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/tutorials/slack-integration) |
415
428
 
416
- 📚 Want to explore more? Check out the full [Solace Agent Mesh documentation](https://solacelabs.github.io/solace-agent-mesh/docs/documentation/getting-started/introduction/).
417
-
418
429
  ---
419
430
 
420
431
  ## 👥 Contributors
421
432
 
422
- Solace Agent Mesh is built with the help of our amazing community.
423
- Thanks to everyone who has contributed ideas, code, and time to make this project better.
424
- 👀 View the full list of contributors [GitHub Contributors](https://github.com/SolaceLabs/solace-agent-mesh/graphs/contributors)
425
- 🤝 **Looking to contribute?** Check out [CONTRIBUTING.md](CONTRIBUTING.md) to get started and see how you can help.
433
+ Solace Agent Mesh is built with the help of our amazing community. Thanks to everyone who has contributed ideas, code and time to make this project better!
434
+
435
+ View the full list of contributors here: [GitHub Contributors](https://github.com/SolaceLabs/solace-agent-mesh/graphs/contributors) 💚
436
+
437
+ **Looking to contribute?** Check out [CONTRIBUTING.md](CONTRIBUTING.md) to get started and see how you can help!
426
438
 
427
439
  ---
428
440
 
429
441
  ## 📄 License
430
442
 
431
- This project is licensed under the **Apache 2.0 License**.
432
- See the full license text in the [LICENSE](LICENSE) file.
443
+ This project is licensed under the **Apache 2.0 License**. See the full license text in the [LICENSE](LICENSE) file.
444
+
445
+ ---
446
+
447
+ <h3 align="center">
448
+ <img src="./docs/static/img/solace-logo-text.svg" alt="Solace Agent Mesh Logo" width="100"/>
449
+ </h3>