solace-agent-mesh 0.1.2__py3-none-any.whl → 0.1.3__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/agents/base_agent_component.py +2 -0
- solace_agent_mesh/agents/global/actions/plantuml_diagram.py +5 -0
- solace_agent_mesh/agents/global/actions/plotly_graph.py +11 -0
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/init/builtin_agent_step.py +1 -6
- solace_agent_mesh/cli/commands/init/create_config_file_step.py +5 -0
- solace_agent_mesh/cli/commands/init/init.py +1 -5
- solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -29
- solace_agent_mesh/cli/commands/plugin/add.py +3 -1
- solace_agent_mesh/cli/commands/plugin/plugin.py +20 -5
- solace_agent_mesh/cli/commands/plugin/remove.py +3 -1
- solace_agent_mesh/common/action_response.py +13 -0
- solace_agent_mesh/common/constants.py +2 -0
- solace_agent_mesh/common/postgres_database.py +11 -5
- solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +3 -0
- solace_agent_mesh/orchestrator/action_manager.py +13 -1
- solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +3 -1
- solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +2 -1
- solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +4 -1
- solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +6 -3
- solace_agent_mesh/services/history_service/history_service.py +1 -1
- solace_agent_mesh/services/llm_service/components/llm_request_component.py +5 -0
- {solace_agent_mesh-0.1.2.dist-info → solace_agent_mesh-0.1.3.dist-info}/METADATA +37 -8
- {solace_agent_mesh-0.1.2.dist-info → solace_agent_mesh-0.1.3.dist-info}/RECORD +27 -29
- solace_agent_mesh/cli/commands/init/rest_api_step.py +0 -50
- solace_agent_mesh/cli/commands/init/web_ui_step.py +0 -40
- {solace_agent_mesh-0.1.2.dist-info → solace_agent_mesh-0.1.3.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-0.1.2.dist-info → solace_agent_mesh-0.1.3.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-0.1.2.dist-info → solace_agent_mesh-0.1.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -12,6 +12,7 @@ from solace_ai_connector.common.utils import ensure_slash_on_end
|
|
|
12
12
|
from ..services.llm_service.components.llm_service_component_base import LLMServiceComponentBase
|
|
13
13
|
from ..common.action_list import ActionList
|
|
14
14
|
from ..common.action_response import ActionResponse, ErrorInfo
|
|
15
|
+
from ..common.constants import ORCHESTRATOR_COMPONENT_NAME
|
|
15
16
|
from ..services.file_service import FileService
|
|
16
17
|
from ..services.file_service.file_utils import recursive_file_resolver
|
|
17
18
|
from ..services.middleware_service.middleware_service import MiddlewareService
|
|
@@ -185,6 +186,7 @@ class BaseAgentComponent(LLMServiceComponentBase, ABC):
|
|
|
185
186
|
action_response.action_idx = data.get("action_idx")
|
|
186
187
|
action_response.action_name = action_name
|
|
187
188
|
action_response.action_params = data.get("action_params", {})
|
|
189
|
+
action_response.originator = data.get("originator", ORCHESTRATOR_COMPONENT_NAME)
|
|
188
190
|
try:
|
|
189
191
|
action_response_dict = action_response.to_dict()
|
|
190
192
|
except Exception as e:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""PlantUML diagram"""
|
|
2
2
|
|
|
3
|
+
import platform
|
|
3
4
|
import os
|
|
4
5
|
import tempfile
|
|
5
6
|
import subprocess
|
|
@@ -41,6 +42,10 @@ class PlantUmlDiagram(Action):
|
|
|
41
42
|
)
|
|
42
43
|
|
|
43
44
|
def invoke(self, params, meta={}) -> ActionResponse:
|
|
45
|
+
if platform.system() == "Windows":
|
|
46
|
+
return ActionResponse(
|
|
47
|
+
message=f"Unfortunately, the PlantUML is not available on {platform.system()}"
|
|
48
|
+
)
|
|
44
49
|
# Do a local command to run plantuml -tpng
|
|
45
50
|
description = params.get("diagram_description")
|
|
46
51
|
agent = self.get_agent()
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"""Plotly graph generation"""
|
|
2
2
|
|
|
3
|
+
import platform
|
|
3
4
|
import os
|
|
4
5
|
import random
|
|
5
6
|
import tempfile
|
|
6
7
|
import json
|
|
7
8
|
import yaml
|
|
9
|
+
from importlib.metadata import version
|
|
8
10
|
from io import BytesIO
|
|
11
|
+
from packaging.version import parse
|
|
9
12
|
from solace_ai_connector.common.log import log
|
|
10
13
|
|
|
11
14
|
import plotly.graph_objects as go
|
|
@@ -80,6 +83,14 @@ class PlotlyGraph(Action):
|
|
|
80
83
|
)
|
|
81
84
|
|
|
82
85
|
def invoke(self, params, meta={}) -> ActionResponse:
|
|
86
|
+
if platform.system() == "Windows":
|
|
87
|
+
kaleido_version = version('kaleido')
|
|
88
|
+
min_version = parse('0.1.0.post1')
|
|
89
|
+
max_version = parse('0.2.0')
|
|
90
|
+
if parse(kaleido_version) < min_version or parse(kaleido_version) >= max_version:
|
|
91
|
+
return ActionResponse(
|
|
92
|
+
message="For Windows users, the plotting functionality requires a specific version of Kaleido. Please refer to the documentation."
|
|
93
|
+
)
|
|
83
94
|
obj = params["plotly_figure_config"]
|
|
84
95
|
if isinstance(obj, str):
|
|
85
96
|
# Remove any leading/trailing quote characters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.1.
|
|
1
|
+
__version__ = "0.1.3"
|
|
@@ -10,12 +10,7 @@ def builtin_agent_step(options, default_options, none_interactive, abort):
|
|
|
10
10
|
"image_processing": (
|
|
11
11
|
True,
|
|
12
12
|
"generate images from text or convert images to text (The model name should be formatted like provider/model-name)",
|
|
13
|
-
["
|
|
14
|
-
),
|
|
15
|
-
"slack": (
|
|
16
|
-
False,
|
|
17
|
-
"Slack agent, send messages to Slack channels",
|
|
18
|
-
["MONITOR_SLACK_BOT_TOKEN="],
|
|
13
|
+
["IMAGE_GEN_ENDPOINT=", "IMAGE_GEN_API_KEY=", "IMAGE_GEN_MODEL=",],
|
|
19
14
|
),
|
|
20
15
|
}
|
|
21
16
|
|
|
@@ -7,6 +7,11 @@ def create_config_file_step(options, default_options, none_interactive, abort):
|
|
|
7
7
|
"""
|
|
8
8
|
Creates the configuration files.
|
|
9
9
|
"""
|
|
10
|
+
# Populate options dictionary with default values, for non specified options
|
|
11
|
+
for key, value in default_options.items():
|
|
12
|
+
if key not in options or options[key] is None:
|
|
13
|
+
options[key] = value
|
|
14
|
+
|
|
10
15
|
sam_config = Config.get_default_config()
|
|
11
16
|
|
|
12
17
|
# Set up the built-in agents
|
|
@@ -9,8 +9,6 @@ from .create_config_file_step import create_config_file_step
|
|
|
9
9
|
from .file_service_step import file_service_step
|
|
10
10
|
from .project_structure_step import project_structure_step
|
|
11
11
|
from .create_other_project_files_step import create_other_project_files_step
|
|
12
|
-
from .rest_api_step import rest_api_step
|
|
13
|
-
from .web_ui_step import webui_step
|
|
14
12
|
|
|
15
13
|
from cli.utils import (
|
|
16
14
|
log_error,
|
|
@@ -45,7 +43,7 @@ default_options = {
|
|
|
45
43
|
"rest_api_gateway_name": "rest-api",
|
|
46
44
|
"webui_enabled": True,
|
|
47
45
|
"webui_listen_port": "5001",
|
|
48
|
-
"webui_host": "
|
|
46
|
+
"webui_host": "127.0.0.1"
|
|
49
47
|
}
|
|
50
48
|
"""
|
|
51
49
|
Default options for the init command.
|
|
@@ -76,8 +74,6 @@ def init_command(options={}):
|
|
|
76
74
|
("AI provider setup", ai_provider_step),
|
|
77
75
|
("Builtin agent setup", builtin_agent_step),
|
|
78
76
|
("File service setup", file_service_step),
|
|
79
|
-
("REST API setup", rest_api_step),
|
|
80
|
-
("Web UI setup", webui_step),
|
|
81
77
|
("", create_config_file_step),
|
|
82
78
|
("Setting up project", create_other_project_files_step),
|
|
83
79
|
]
|
|
@@ -14,32 +14,3 @@ def project_structure_step(options, default_options, none_interactive, abort):
|
|
|
14
14
|
)
|
|
15
15
|
if namespace and not namespace.endswith("/"):
|
|
16
16
|
options["namespace"] = f"{namespace}/"
|
|
17
|
-
|
|
18
|
-
ask_if_not_provided(
|
|
19
|
-
options,
|
|
20
|
-
"config_dir",
|
|
21
|
-
"Enter base directory for config files",
|
|
22
|
-
default_options["config_dir"],
|
|
23
|
-
none_interactive,
|
|
24
|
-
)
|
|
25
|
-
ask_if_not_provided(
|
|
26
|
-
options,
|
|
27
|
-
"module_dir",
|
|
28
|
-
"Enter base directory for python modules",
|
|
29
|
-
default_options["module_dir"],
|
|
30
|
-
none_interactive,
|
|
31
|
-
)
|
|
32
|
-
ask_if_not_provided(
|
|
33
|
-
options,
|
|
34
|
-
"build_dir",
|
|
35
|
-
"Enter base directory for the build output",
|
|
36
|
-
default_options["build_dir"],
|
|
37
|
-
none_interactive,
|
|
38
|
-
)
|
|
39
|
-
ask_if_not_provided(
|
|
40
|
-
options,
|
|
41
|
-
"env_file",
|
|
42
|
-
"Enter environment file path",
|
|
43
|
-
default_options["env_file"],
|
|
44
|
-
none_interactive,
|
|
45
|
-
)
|
|
@@ -37,7 +37,9 @@ def add_command(name: str, installer: str = None, from_url=None, add_all=False):
|
|
|
37
37
|
f"Module '{name}' not found. Attempting to install '{install_name}' using {installer}..."
|
|
38
38
|
)
|
|
39
39
|
if installer == "pip":
|
|
40
|
-
subprocess.check_call(["
|
|
40
|
+
subprocess.check_call(["pip3", "install", install_name])
|
|
41
|
+
elif installer == "uv":
|
|
42
|
+
subprocess.check_call(["uv", "pip", "install", install_name])
|
|
41
43
|
elif installer == "poetry":
|
|
42
44
|
subprocess.check_call(["poetry", "add", install_name])
|
|
43
45
|
elif installer == "conda":
|
|
@@ -44,6 +44,7 @@ def plugin_command(plugin):
|
|
|
44
44
|
@click.argument("name")
|
|
45
45
|
@click.option("--add-all", is_flag=True, help="Added the plugin with default of loading all exported files from the plugin")
|
|
46
46
|
@click.option("--pip", is_flag=True, help="Install with pip.")
|
|
47
|
+
@click.option("--uv", is_flag=True, help="Install with uv pip.")
|
|
47
48
|
@click.option("--poetry", is_flag=True, help="Install with poetry.")
|
|
48
49
|
@click.option("--conda", is_flag=True, help="Install with conda.")
|
|
49
50
|
@click.option(
|
|
@@ -51,7 +52,7 @@ def plugin_command(plugin):
|
|
|
51
52
|
"--from-url",
|
|
52
53
|
help="Install the plugin from a the given URL instead of the given name. (URL can be a file path or a git URL)",
|
|
53
54
|
)
|
|
54
|
-
def add(name, add_all, pip, poetry, conda, from_url):
|
|
55
|
+
def add(name, add_all, uv, pip, poetry, conda, from_url):
|
|
55
56
|
"""
|
|
56
57
|
Add a new plugin to solace-agent-mesh config yaml.
|
|
57
58
|
Optional install the module if not found.
|
|
@@ -59,10 +60,16 @@ def plugin_command(plugin):
|
|
|
59
60
|
Only one installation method can be selected at a time.
|
|
60
61
|
"""
|
|
61
62
|
# Only one option can be true at a time
|
|
62
|
-
if sum([pip, poetry, conda]) > 1:
|
|
63
|
+
if sum([uv, pip, poetry, conda]) > 1:
|
|
63
64
|
log_error("Only one installation method can be selected.")
|
|
64
65
|
return 1
|
|
65
|
-
installer =
|
|
66
|
+
installer = (
|
|
67
|
+
"uv" if uv
|
|
68
|
+
else "pip" if pip
|
|
69
|
+
else "poetry" if poetry
|
|
70
|
+
else "conda" if conda
|
|
71
|
+
else None
|
|
72
|
+
)
|
|
66
73
|
return add_command(name, installer, from_url, add_all)
|
|
67
74
|
|
|
68
75
|
@plugin.command()
|
|
@@ -73,6 +80,12 @@ def plugin_command(plugin):
|
|
|
73
80
|
is_flag=True,
|
|
74
81
|
help="Removes the plugin module using pip",
|
|
75
82
|
)
|
|
83
|
+
@click.option(
|
|
84
|
+
"--uv-uninstall",
|
|
85
|
+
default=False,
|
|
86
|
+
is_flag=True,
|
|
87
|
+
help="Removes the plugin module using uv.",
|
|
88
|
+
)
|
|
76
89
|
@click.option(
|
|
77
90
|
"--poetry-uninstall",
|
|
78
91
|
default=False,
|
|
@@ -85,7 +98,7 @@ def plugin_command(plugin):
|
|
|
85
98
|
is_flag=True,
|
|
86
99
|
help="Removes the plugin module using conda",
|
|
87
100
|
)
|
|
88
|
-
def remove(name, pip_uninstall, poetry_uninstall, conda_uninstall):
|
|
101
|
+
def remove(name, pip_uninstall, uv_uninstall, poetry_uninstall, conda_uninstall):
|
|
89
102
|
"""
|
|
90
103
|
Remove a plugin by removing it from solace-agent-mesh config yaml
|
|
91
104
|
Optionally uninstall the module.
|
|
@@ -93,13 +106,15 @@ def plugin_command(plugin):
|
|
|
93
106
|
Only one uninstallation method can be selected at a time.
|
|
94
107
|
"""
|
|
95
108
|
# Only one option can be true at a time
|
|
96
|
-
if sum([pip_uninstall, poetry_uninstall, conda_uninstall]) > 1:
|
|
109
|
+
if sum([pip_uninstall, uv_uninstall, poetry_uninstall, conda_uninstall]) > 1:
|
|
97
110
|
log_error("Only one uninstallation method can be selected.")
|
|
98
111
|
return 1
|
|
99
112
|
|
|
100
113
|
installer = (
|
|
101
114
|
"pip"
|
|
102
115
|
if pip_uninstall
|
|
116
|
+
else "uv"
|
|
117
|
+
if uv_uninstall
|
|
103
118
|
else "poetry"
|
|
104
119
|
if poetry_uninstall
|
|
105
120
|
else "conda"
|
|
@@ -48,7 +48,9 @@ def remove_command(name: str, installer: str = None):
|
|
|
48
48
|
click.echo(f"Attempting to uninstall module '{name}' using {installer}...")
|
|
49
49
|
try:
|
|
50
50
|
if installer == "pip":
|
|
51
|
-
subprocess.check_call(["
|
|
51
|
+
subprocess.check_call(["pip3", "uninstall", "-y", name])
|
|
52
|
+
elif installer == "uv":
|
|
53
|
+
subprocess.check_call(["uv", "pip", "uninstall", "-y", name])
|
|
52
54
|
elif installer == "poetry":
|
|
53
55
|
subprocess.check_call(["poetry", "remove", name])
|
|
54
56
|
elif installer == "conda":
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""This is the definition of responses for the actions of the system."""
|
|
2
2
|
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
class RagMatch:
|
|
5
7
|
|
|
@@ -212,6 +214,8 @@ class ActionResponse:
|
|
|
212
214
|
self._is_async: bool = is_async
|
|
213
215
|
# async_response_id - unique identifier for correlating async responses
|
|
214
216
|
self._async_response_id: str = async_response_id
|
|
217
|
+
# originator - the component that originated the action request
|
|
218
|
+
self._originator: Optional[str] = None
|
|
215
219
|
|
|
216
220
|
@property
|
|
217
221
|
def message(self) -> any:
|
|
@@ -269,6 +273,10 @@ class ActionResponse:
|
|
|
269
273
|
def action_params(self) -> dict:
|
|
270
274
|
return self._action_params
|
|
271
275
|
|
|
276
|
+
@property
|
|
277
|
+
def originator(self) -> dict:
|
|
278
|
+
return self._originator
|
|
279
|
+
|
|
272
280
|
@action_list_id.setter
|
|
273
281
|
def action_list_id(self, action_list_id: str):
|
|
274
282
|
self._action_list_id = action_list_id
|
|
@@ -285,6 +293,10 @@ class ActionResponse:
|
|
|
285
293
|
def action_params(self, action_params: dict):
|
|
286
294
|
self._action_params = action_params
|
|
287
295
|
|
|
296
|
+
@originator.setter
|
|
297
|
+
def originator(self, originator: str):
|
|
298
|
+
self._originator = originator
|
|
299
|
+
|
|
288
300
|
@property
|
|
289
301
|
def is_async(self) -> bool:
|
|
290
302
|
return self._is_async
|
|
@@ -324,4 +336,5 @@ class ActionResponse:
|
|
|
324
336
|
response["action_idx"] = self._action_idx
|
|
325
337
|
response["action_name"] = self._action_name
|
|
326
338
|
response["action_params"] = self._action_params
|
|
339
|
+
response["originator"] = self._originator
|
|
327
340
|
return response
|
|
@@ -56,11 +56,17 @@ class PostgreSQLDatabase:
|
|
|
56
56
|
|
|
57
57
|
return cursor
|
|
58
58
|
|
|
59
|
-
def get_db_for_action(action_obj):
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
def get_db_for_action(action_obj, sql_params=None):
|
|
60
|
+
if sql_params:
|
|
61
|
+
sql_host = sql_params.get("sql_host")
|
|
62
|
+
sql_user = sql_params.get("sql_user")
|
|
63
|
+
sql_password = sql_params.get("sql_password")
|
|
64
|
+
sql_database = sql_params.get("sql_database")
|
|
65
|
+
else:
|
|
66
|
+
sql_host = action_obj.get_config("sql_host")
|
|
67
|
+
sql_user = action_obj.get_config("sql_user")
|
|
68
|
+
sql_password = action_obj.get_config("sql_password")
|
|
69
|
+
sql_database = action_obj.get_config("sql_database")
|
|
64
70
|
sql_db = None
|
|
65
71
|
|
|
66
72
|
if sql_host and sql_user and sql_password and sql_database:
|
|
@@ -99,6 +99,9 @@ flows:
|
|
|
99
99
|
- type: copy
|
|
100
100
|
source_value: '0'
|
|
101
101
|
dest_expression: user_data.output:payload.action_idx
|
|
102
|
+
- type: copy
|
|
103
|
+
source_value: 'stim_and_error_monitor'
|
|
104
|
+
dest_expression: user_data.output:payload.originator
|
|
102
105
|
- type: copy
|
|
103
106
|
source_expression: template:${SOLACE_AGENT_MESH_NAMESPACE}solace-agent-mesh/v1/actionRequest/monitor/x/slack/post_message/{{text://input.payload:correlation_id}}
|
|
104
107
|
dest_expression: user_data.output:topic
|
|
@@ -15,6 +15,7 @@ from datetime import datetime
|
|
|
15
15
|
|
|
16
16
|
from solace_ai_connector.common.log import log
|
|
17
17
|
from ..common.utils import format_agent_response
|
|
18
|
+
from ..common.constants import ORCHESTRATOR_COMPONENT_NAME
|
|
18
19
|
|
|
19
20
|
ACTION_REQUEST_TIMEOUT = 180
|
|
20
21
|
|
|
@@ -78,6 +79,17 @@ class ActionManager:
|
|
|
78
79
|
def add_action_response(self, action_response_obj, response_text_and_files):
|
|
79
80
|
"""Add an action response to the list"""
|
|
80
81
|
action_list_id = action_response_obj.get("action_list_id")
|
|
82
|
+
|
|
83
|
+
originator = action_response_obj.get("originator", "unknown")
|
|
84
|
+
# Ignore responses for actions that are not originated by the orchestrator
|
|
85
|
+
if originator != ORCHESTRATOR_COMPONENT_NAME:
|
|
86
|
+
log.debug(
|
|
87
|
+
"Ignoring response for action not originated by the orchestrator. "
|
|
88
|
+
"originator: %s action_list_id: %s",
|
|
89
|
+
originator, action_list_id
|
|
90
|
+
)
|
|
91
|
+
return None
|
|
92
|
+
|
|
81
93
|
with self.lock:
|
|
82
94
|
action_list = self.action_requests.get(action_list_id)
|
|
83
95
|
if action_list is None:
|
|
@@ -222,4 +234,4 @@ class ActionRequestList:
|
|
|
222
234
|
|
|
223
235
|
def format_ai_response(self):
|
|
224
236
|
"""Format the action response for the AI"""
|
|
225
|
-
return format_agent_response(self.actions)
|
|
237
|
+
return format_agent_response(self.actions)
|
|
@@ -14,6 +14,7 @@ import yaml
|
|
|
14
14
|
from solace_ai_connector.common.log import log
|
|
15
15
|
from solace_ai_connector.common.message import Message
|
|
16
16
|
|
|
17
|
+
from ...common.constants import ORCHESTRATOR_COMPONENT_NAME
|
|
17
18
|
from ...services.llm_service.components.llm_request_component import LLMRequestComponent, info as base_info
|
|
18
19
|
from ...services.middleware_service.middleware_service import MiddlewareService
|
|
19
20
|
from ...services.file_service import FileService
|
|
@@ -184,7 +185,7 @@ class OrchestratorStimulusProcessorComponent(LLMRequestComponent):
|
|
|
184
185
|
message.set_user_properties(user_properties)
|
|
185
186
|
|
|
186
187
|
input_data = self.get_user_input(chat_text)
|
|
187
|
-
user_info =
|
|
188
|
+
user_info = user_properties.get("user_info", {"email": "unknown"})
|
|
188
189
|
|
|
189
190
|
agent_state_yaml, examples = self.get_agents_yaml(user_properties)
|
|
190
191
|
full_input = {
|
|
@@ -458,6 +459,7 @@ class OrchestratorStimulusProcessorComponent(LLMRequestComponent):
|
|
|
458
459
|
"action_name": action_name,
|
|
459
460
|
"action_params": action_params,
|
|
460
461
|
"action_idx": action_idx,
|
|
462
|
+
"originator": ORCHESTRATOR_COMPONENT_NAME,
|
|
461
463
|
},
|
|
462
464
|
"topic": f"{os.getenv('SOLACE_AGENT_MESH_NAMESPACE')}solace-agent-mesh/v1/actionRequest/orchestrator/agent/{agent_name}/{action_name}",
|
|
463
465
|
}
|
|
@@ -61,12 +61,13 @@ class BaseHistoryProvider(ABC):
|
|
|
61
61
|
raise NotImplementedError("Method not implemented")
|
|
62
62
|
|
|
63
63
|
@abstractmethod
|
|
64
|
-
def clear_history(self, session_id: str, keep_levels=0):
|
|
64
|
+
def clear_history(self, session_id: str, keep_levels=0, clear_files=True):
|
|
65
65
|
"""
|
|
66
66
|
Clear the history and files, optionally keeping a specified number of recent entries.
|
|
67
67
|
|
|
68
68
|
:param session_id: The session identifier.
|
|
69
69
|
:param keep_levels: Number of most recent history entries to keep. Default is 0 (clear all).
|
|
70
|
+
:param clear_files: Whether to clear associated files. Default is True.
|
|
70
71
|
"""
|
|
71
72
|
raise NotImplementedError("Method not implemented")
|
|
72
73
|
|
|
@@ -125,12 +125,13 @@ class MemoryHistoryProvider(BaseHistoryProvider):
|
|
|
125
125
|
files.append(file)
|
|
126
126
|
return files
|
|
127
127
|
|
|
128
|
-
def clear_history(self, session_id: str, keep_levels=0):
|
|
128
|
+
def clear_history(self, session_id: str, keep_levels=0, clear_files=True):
|
|
129
129
|
"""
|
|
130
130
|
Clear the history for a session, optionally keeping a specified number of recent entries.
|
|
131
131
|
|
|
132
132
|
:param session_id: The session identifier.
|
|
133
133
|
:param keep_levels: Number of most recent history entries to keep. Default is 0 (clear all).
|
|
134
|
+
:param clear_files: Whether to clear associated files. Default is True.
|
|
134
135
|
"""
|
|
135
136
|
if session_id in self.history:
|
|
136
137
|
if keep_levels <= 0:
|
|
@@ -146,6 +147,8 @@ class MemoryHistoryProvider(BaseHistoryProvider):
|
|
|
146
147
|
self.history[session_id]["num_turns"] = len(
|
|
147
148
|
self.history[session_id]["history"]
|
|
148
149
|
)
|
|
150
|
+
if session_id in self.history and clear_files:
|
|
151
|
+
self.history[session_id]["files"] = []
|
|
149
152
|
|
|
150
153
|
def get_session_meta(self, session_id: str):
|
|
151
154
|
"""
|
|
@@ -112,9 +112,8 @@ class RedisHistoryProvider(BaseHistoryProvider):
|
|
|
112
112
|
|
|
113
113
|
return valid_files
|
|
114
114
|
|
|
115
|
-
def clear_history(self, session_id: str, keep_levels=0):
|
|
115
|
+
def clear_history(self, session_id: str, keep_levels=0, clear_files=True):
|
|
116
116
|
history_key = self._get_history_key(session_id)
|
|
117
|
-
files_key = self._get_files_key(session_id)
|
|
118
117
|
|
|
119
118
|
if keep_levels > 0:
|
|
120
119
|
# Keep the latest `keep_levels` entries
|
|
@@ -132,7 +131,11 @@ class RedisHistoryProvider(BaseHistoryProvider):
|
|
|
132
131
|
})
|
|
133
132
|
else:
|
|
134
133
|
# Clear all history and files
|
|
135
|
-
self.redis_client.delete(history_key,
|
|
134
|
+
self.redis_client.delete(history_key, session_id)
|
|
135
|
+
|
|
136
|
+
if clear_files:
|
|
137
|
+
files_key = self._get_files_key(session_id)
|
|
138
|
+
self.redis_client.delete(files_key)
|
|
136
139
|
|
|
137
140
|
|
|
138
141
|
def get_session_meta(self, session_id: str):
|
|
@@ -136,4 +136,4 @@ class HistoryService(AutoExpiry, metaclass=AutoExpirySingletonMeta):
|
|
|
136
136
|
:param session_id: The session identifier.
|
|
137
137
|
:param keep_levels: Number of most recent history entries to keep. Default is 0 (clear all).
|
|
138
138
|
"""
|
|
139
|
-
return self.history_provider.clear_history(session_id, keep_levels)
|
|
139
|
+
return self.history_provider.clear_history(session_id, keep_levels, clear_files=True)
|
|
@@ -206,6 +206,11 @@ class LLMRequestComponent(ComponentBase):
|
|
|
206
206
|
aggregate_result += content
|
|
207
207
|
current_batch += content
|
|
208
208
|
|
|
209
|
+
if payload.get("handle_error", False):
|
|
210
|
+
log.error("Error invoking LLM service: %s", payload.get("content", ""), exc_info=True)
|
|
211
|
+
aggregate_result = payload.get("content", None)
|
|
212
|
+
last_message = True
|
|
213
|
+
|
|
209
214
|
if len(current_batch.split()) >= self.stream_batch_size or last_message:
|
|
210
215
|
self._send_streaming_chunk(
|
|
211
216
|
input_message,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: solace-agent-mesh
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Solace Agent Mesh is an EDA AI-first platform powered by Solace
|
|
5
5
|
Project-URL: homepage, https://github.com/SolaceLabs/solace-agent-mesh
|
|
6
6
|
Project-URL: repository, https://github.com/SolaceLabs/solace-agent-mesh
|
|
@@ -23,7 +23,8 @@ Requires-Dist: flask-socketio~=5.4.1
|
|
|
23
23
|
Requires-Dist: flask~=3.0.3
|
|
24
24
|
Requires-Dist: html2text~=2024.2.26
|
|
25
25
|
Requires-Dist: jq~=1.8.0
|
|
26
|
-
Requires-Dist: kaleido~=0.
|
|
26
|
+
Requires-Dist: kaleido~=0.1.0.post1; sys_platform == 'win32'
|
|
27
|
+
Requires-Dist: kaleido~=0.2.1; sys_platform != 'win32'
|
|
27
28
|
Requires-Dist: langchain-core~=0.3.0
|
|
28
29
|
Requires-Dist: langchain~=0.3.0
|
|
29
30
|
Requires-Dist: litellm~=1.51.3
|
|
@@ -46,10 +47,10 @@ Requires-Dist: python-dateutil==2.9.0.post0
|
|
|
46
47
|
Requires-Dist: pyyaml~=6.0.1
|
|
47
48
|
Requires-Dist: requests~=2.32.3
|
|
48
49
|
Requires-Dist: ruamel-yaml~=0.18.6
|
|
49
|
-
Requires-Dist: solace-ai-connector-rest~=0.0.
|
|
50
|
+
Requires-Dist: solace-ai-connector-rest~=0.0.2
|
|
50
51
|
Requires-Dist: solace-ai-connector-slack~=0.0.1
|
|
51
|
-
Requires-Dist: solace-ai-connector-web~=0.
|
|
52
|
-
Requires-Dist: solace-ai-connector~=1.0.
|
|
52
|
+
Requires-Dist: solace-ai-connector-web~=0.2.0
|
|
53
|
+
Requires-Dist: solace-ai-connector~=1.0.2
|
|
53
54
|
Requires-Dist: solace-pubsubplus~=1.9.0
|
|
54
55
|
Description-Content-Type: text/markdown
|
|
55
56
|
|
|
@@ -62,6 +63,16 @@ Description-Content-Type: text/markdown
|
|
|
62
63
|
[](https://pypi.org/project/solace-agent-mesh)
|
|
63
64
|
[](https://pypi.org/project/solace-agent-mesh)
|
|
64
65
|
|
|
66
|
+
- [Solace Agent Mesh](#solace-agent-mesh)
|
|
67
|
+
* [Installation](#installation)
|
|
68
|
+
* [Quick Start](#quick-start)
|
|
69
|
+
* [Why Use Solace Agent Mesh?](#why-use-solace-agent-mesh)
|
|
70
|
+
* [Next Steps](#next-steps)
|
|
71
|
+
* [Contributing](#contributing)
|
|
72
|
+
* [Authors](#authors)
|
|
73
|
+
* [Release Notes](#release-notes)
|
|
74
|
+
* [License](#license)
|
|
75
|
+
|
|
65
76
|
The Solace Agent Mesh (SAM) is an open-source platform that tackles a fundamental challenge in modern AI development: while powerful AI models are readily available, the real complexity lies in connecting them to the data and systems where they can provide value. Data is often siloed across databases, SaaS platforms, APIs, and legacy systems, making it difficult to build AI applications that operate seamlessly across these boundaries. SAM provides a flexible foundation for AI applications where multiple agents can collaborate, each bringing their own specialized capabilities and data access. Whether you're an AI enthusiast experimenting with new models, or an enterprise developer building production systems, SAM gives you the tools to:
|
|
66
77
|
|
|
67
78
|
- Connect AI agents to real-world data sources and systems.
|
|
@@ -77,13 +88,27 @@ Built on event-driven architecture technology from Solace, SAM provides the robu
|
|
|
77
88
|
|
|
78
89
|
## Installation
|
|
79
90
|
|
|
80
|
-
1.
|
|
91
|
+
1. [Optional] Set up Python Virtual Environment using `virtualenv` and activate it
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
## Install virtualenv if not already installed
|
|
95
|
+
python3 -m pip install --user virtualenv
|
|
96
|
+
## Setup python virtual environment
|
|
97
|
+
python3 -m venv venv
|
|
98
|
+
## Activate virtual environment:
|
|
99
|
+
### MacOS/Linux:
|
|
100
|
+
source venv/bin/activate
|
|
101
|
+
### Windows:
|
|
102
|
+
venv/Scripts/activate
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
2. The following command installs the Solace Agent Mesh CLI in your environment:
|
|
81
106
|
|
|
82
107
|
```sh
|
|
83
108
|
pip install solace-agent-mesh
|
|
84
109
|
```
|
|
85
110
|
|
|
86
|
-
|
|
111
|
+
3. Run the following SAM CLI command (`solace-agent-mesh` or `sam`) to verify your installation:
|
|
87
112
|
|
|
88
113
|
```sh
|
|
89
114
|
solace-agent-mesh --version
|
|
@@ -118,7 +143,11 @@ To get started with Solace Agent Mesh, follow these steps:
|
|
|
118
143
|
|
|
119
144
|
_(Use `-eb` to combine build and run steps.)_
|
|
120
145
|
|
|
121
|
-
5. **
|
|
146
|
+
5. **Connect to the Web Interface**:
|
|
147
|
+
|
|
148
|
+
Open the web interface at [http://localhost:5001](http://localhost:5001) or with the port specified during `init`.
|
|
149
|
+
|
|
150
|
+
6. **Send a REST Request**:
|
|
122
151
|
|
|
123
152
|
Try the system by sending a request to the REST API gateway interface.
|
|
124
153
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
solace_agent_mesh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
solace_agent_mesh/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
solace_agent_mesh/agents/base_agent_component.py,sha256=
|
|
3
|
+
solace_agent_mesh/agents/base_agent_component.py,sha256=gO9WHotTatVECNlqahRi4ukBsyKUJvV04wjrzrs8KeY,9507
|
|
4
4
|
solace_agent_mesh/agents/global/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
solace_agent_mesh/agents/global/global_agent_component.py,sha256=3oYsSXKNmsURAwMSgNrqC9-LImq4yZ59C12gtqOP8DA,1015
|
|
6
6
|
solace_agent_mesh/agents/global/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -9,8 +9,8 @@ solace_agent_mesh/agents/global/actions/clear_history.py,sha256=XOCpmkr-Jv0SDP1E
|
|
|
9
9
|
solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py,sha256=qVLDIS8KZoFP777Kb_B5UmrLAEksxrRzKrcO76lwwm8,6407
|
|
10
10
|
solace_agent_mesh/agents/global/actions/create_file.py,sha256=mf_CFKZc8iWJSb8l8z5EWrv6OQtpFw_jDHLuvji-p6g,2602
|
|
11
11
|
solace_agent_mesh/agents/global/actions/error_action.py,sha256=d0sNyC8pvZu3AeLLOIimG3cmjFmovxTGczp8Y8fTySo,1643
|
|
12
|
-
solace_agent_mesh/agents/global/actions/plantuml_diagram.py,sha256
|
|
13
|
-
solace_agent_mesh/agents/global/actions/plotly_graph.py,sha256=
|
|
12
|
+
solace_agent_mesh/agents/global/actions/plantuml_diagram.py,sha256=4BNNQ-PE2I5XjDwjk5vqfQi9gE0K9ZisBIb9P8yMfuM,4207
|
|
13
|
+
solace_agent_mesh/agents/global/actions/plotly_graph.py,sha256=UnlXyYeoda2xQxAbVeKzxo5uSE2oN430186OmDqRDdU,4932
|
|
14
14
|
solace_agent_mesh/agents/global/actions/retrieve_file.py,sha256=nBK8EGn6R6gCFV4zCc2Xo3Bzz112EtvPmaOBRBZr2do,2232
|
|
15
15
|
solace_agent_mesh/agents/image_processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
solace_agent_mesh/agents/image_processing/image_processing_agent_component.py,sha256=IjZnNk7e8znm7NzXHgvFUpVaxDgUokwB3BzmLjcGolg,632
|
|
@@ -32,10 +32,10 @@ solace_agent_mesh/agents/web_request/actions/download_file.py,sha256=nFIuuimL6ub
|
|
|
32
32
|
solace_agent_mesh/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
solace_agent_mesh/common/action.py,sha256=vlgojeQs3PjRPCdgGjpHHs5McT5sx72tsahiJ6ZZaxI,3053
|
|
34
34
|
solace_agent_mesh/common/action_list.py,sha256=sy1cwkJ3ISdvK1CqvCblQmONnZtAtLt-nv5eBOaq-r8,1109
|
|
35
|
-
solace_agent_mesh/common/action_response.py,sha256=
|
|
36
|
-
solace_agent_mesh/common/constants.py,sha256=
|
|
35
|
+
solace_agent_mesh/common/action_response.py,sha256=TYh8OdvpQmRS0_SbRKjhKWOdSPCN4Ux-j59J7-SLtbE,10201
|
|
36
|
+
solace_agent_mesh/common/constants.py,sha256=317vZG0tJMDan809yp0LZ74sjzqOiZtFfpKgsTg-ZNs,163
|
|
37
37
|
solace_agent_mesh/common/mysql_database.py,sha256=I6heri35TqLU0spV_p7XBye5CmFe3dspZHs9eCjHYK4,1121
|
|
38
|
-
solace_agent_mesh/common/postgres_database.py,sha256=
|
|
38
|
+
solace_agent_mesh/common/postgres_database.py,sha256=8JBPSN3ZtpNSlnYfWNlDbhl2cAKVLawJgC_t_dbbTAc,2607
|
|
39
39
|
solace_agent_mesh/common/prompt_templates.py,sha256=QhcxTVRvLyJYdUO8w8P3LzVCejSVKG90P6UE0qHG3fc,687
|
|
40
40
|
solace_agent_mesh/common/prompt_templates_unused_delete.py,sha256=Quyee4Xuf4vZj_29Nq0RIR9-eztKZGzzUY7cFbmmJno,7229
|
|
41
41
|
solace_agent_mesh/common/stimulus_utils.py,sha256=OIGrOVFlg3V0YAjO5GU0qZ-NO95cN_yQ707JTuQqa9E,5445
|
|
@@ -55,14 +55,14 @@ solace_agent_mesh/monitors/base_monitor_component.py,sha256=3-IKG6MJ8otrPhzoye9Y
|
|
|
55
55
|
solace_agent_mesh/monitors/feedback/user_feedback_monitor.py,sha256=JGK9nJcKnK8JznVZk-zl1NL6uHLu-eg7jJ4N8LTJMEU,2736
|
|
56
56
|
solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py,sha256=jMM1mhsntpoFWP1NVtLj5kLChb0CH4VZamAa77wFLn0,20177
|
|
57
57
|
solace_agent_mesh/orchestrator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
solace_agent_mesh/orchestrator/action_manager.py,sha256=
|
|
58
|
+
solace_agent_mesh/orchestrator/action_manager.py,sha256=NgSrm9XXEfsOzGIfmfMo8s_-Pv5vgod02ig6lj8g7Uc,9076
|
|
59
59
|
solace_agent_mesh/orchestrator/orchestrator_main.py,sha256=wHLCaIqwzDrnpWM97lnrUwrk_bS9nmjy4R_dDRn24iU,5983
|
|
60
60
|
solace_agent_mesh/orchestrator/orchestrator_prompt.py,sha256=lCSrSy_Kn5GkEihvN_sKxWewv8W7ABxh0Sbl_qt3qPY,24238
|
|
61
61
|
solace_agent_mesh/orchestrator/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py,sha256=w-rZBLMJPz8sLkxgOCH4Mc5Yk8jI0wKG-TZ27cQP-sU,1976
|
|
63
63
|
solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py,sha256=Wo2Qd6CU4bcllc_jy6XXdza1jewcV1SGXh1osdWI4Zc,7140
|
|
64
64
|
solace_agent_mesh/orchestrator/components/orchestrator_register_component.py,sha256=rLoTSwQvYedBnTaeU9pM-viBvY2So7Gv3eYuXMbuhTs,4797
|
|
65
|
-
solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py,sha256=
|
|
65
|
+
solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py,sha256=DidpSikvSNvmBHtEA38BuOiJwecENhbmZlyP291SvYM,19234
|
|
66
66
|
solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py,sha256=IhFUMA4GUEcfa7j94QEEt-R6JCF4C58tp1sejHu5nPk,9463
|
|
67
67
|
solace_agent_mesh/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
solace_agent_mesh/services/authorization/providers/base_authorization_provider.py,sha256=4c31MQRzGQdI7ACDgorIqAcxnUjbJwSs0fS06l6NoaI,2105
|
|
@@ -83,12 +83,12 @@ solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py,sha2
|
|
|
83
83
|
solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py,sha256=alOIyG0jWZvchEP9tHhOdnkmXMPDs4W0VQK1bZtCXUc,4041
|
|
84
84
|
solace_agent_mesh/services/file_service/transformers/__init__.py,sha256=srgqGcX0ROzSeiQqbfcQpIq1p1FGBxU_Gu03t8pZ7q8,52
|
|
85
85
|
solace_agent_mesh/services/history_service/__init__.py,sha256=AjMNxbn-i0Zz9e32x-nyKpUVO0PSBYQrguCqOcEPXq0,73
|
|
86
|
-
solace_agent_mesh/services/history_service/history_service.py,sha256=
|
|
86
|
+
solace_agent_mesh/services/history_service/history_service.py,sha256=dHfZeJAr9oRV_imrCEKVEDAegSuC-uIlb2cOhUDaQ-g,5252
|
|
87
87
|
solace_agent_mesh/services/history_service/history_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
solace_agent_mesh/services/history_service/history_providers/base_history_provider.py,sha256=
|
|
89
|
-
solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py,sha256=
|
|
90
|
-
solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py,sha256=
|
|
91
|
-
solace_agent_mesh/services/llm_service/components/llm_request_component.py,sha256=
|
|
88
|
+
solace_agent_mesh/services/history_service/history_providers/base_history_provider.py,sha256=BCCeCMLR9g7HwRCNYJON9_0yatjguETnsT0ARtDcJik,2680
|
|
89
|
+
solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py,sha256=z5HZAocP8KPzSREY7wL35dKAW2-vV37etsQWGMJKpak,6441
|
|
90
|
+
solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py,sha256=n4DUG2V3I4sApFy4KhaOe24iwl5UW4kMAKfT9Cia6Qw,6309
|
|
91
|
+
solace_agent_mesh/services/llm_service/components/llm_request_component.py,sha256=fSWedSGzFu2iQjhrgjyah4uNY_AgisI1ienTHk3Cin0,10480
|
|
92
92
|
solace_agent_mesh/services/llm_service/components/llm_service_component_base.py,sha256=vbtHMVRk4dCHDbo-gZfYfLPJYt4WFSq9A51UqVTLz18,5769
|
|
93
93
|
solace_agent_mesh/services/middleware_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
94
|
solace_agent_mesh/services/middleware_service/middleware_service.py,sha256=IoCnWr9XujVmfac6Z5FoLMeogszSwgPGkXXpWdYqKkU,899
|
|
@@ -97,7 +97,7 @@ solace_agent_mesh/tools/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
|
|
|
97
97
|
solace_agent_mesh/tools/components/conversation_formatter.py,sha256=_C60LepjhxPzQYCwjIAp8nQD3XdVpvZdxNO4cLBXXrY,4202
|
|
98
98
|
solace_agent_mesh/tools/components/file_resolver_component.py,sha256=MOKFuIBpxsQuSQF7ogdhtm2E1w8LDMs_giaNKfkx2pY,1965
|
|
99
99
|
solace_agent_mesh/tools/config/runtime_config.py,sha256=9-sCi2W5RSyN8WUHdSv6YVzKWORzK1akM-C19tDSCUo,860
|
|
100
|
-
solace_agent_mesh/cli/__init__.py,sha256=
|
|
100
|
+
solace_agent_mesh/cli/__init__.py,sha256=XEqb2aiIn8fzGE68Mph4ck1FtQqsR_am0wRWvrYPffQ,22
|
|
101
101
|
solace_agent_mesh/cli/config.py,sha256=sGcJE9zNNGme3n6Q4wOM5Vn2TQSTWHRXPZUBnNEwV40,2841
|
|
102
102
|
solace_agent_mesh/cli/main.py,sha256=faei8XGbAaexbIfmZBnuo7eqyo5pBm7Rh1pn-Ybjv6M,7127
|
|
103
103
|
solace_agent_mesh/cli/utils.py,sha256=TYNDr8IweOtGT11X-ZNPVC6WPgMrcVyAeAa9NvVV5Oo,7632
|
|
@@ -116,21 +116,19 @@ solace_agent_mesh/cli/commands/chat/chat.py,sha256=1zeE972Ao2B7ln2WoEwCAjLK6e8fH
|
|
|
116
116
|
solace_agent_mesh/cli/commands/init/__init__.py,sha256=Z7a4KC9a2Y98CRKbU8_YCWrOjSN3_tuxrAe0SV_bJWM,59
|
|
117
117
|
solace_agent_mesh/cli/commands/init/ai_provider_step.py,sha256=UX5sOTD5NKa49TCHxk5-FgOD2vlOQ2WKT32jpS7-peY,1936
|
|
118
118
|
solace_agent_mesh/cli/commands/init/broker_step.py,sha256=wsXO0H7i198amS2x_sZ-ZyzTNquzQ-G-CII4kpRV0rA,3587
|
|
119
|
-
solace_agent_mesh/cli/commands/init/builtin_agent_step.py,sha256=
|
|
119
|
+
solace_agent_mesh/cli/commands/init/builtin_agent_step.py,sha256=uIh_j19U9VRevzOMvqw0IxXjAMNY2dXumA9aUxNi1TM,3075
|
|
120
120
|
solace_agent_mesh/cli/commands/init/check_if_already_done.py,sha256=M8dT7Bs2p2BU8LxBt2DiqRM7WehptWRyp5eyG7Ad4FQ,432
|
|
121
|
-
solace_agent_mesh/cli/commands/init/create_config_file_step.py,sha256=
|
|
121
|
+
solace_agent_mesh/cli/commands/init/create_config_file_step.py,sha256=LWGs-HwZ0YSdMBnfn1aM4gjIFavuMrkU5qCKS7klKTE,2167
|
|
122
122
|
solace_agent_mesh/cli/commands/init/create_other_project_files_step.py,sha256=D-EsvKxwVTjhUOySEednNv1_PH5-frlHV2038PDPPX8,3926
|
|
123
123
|
solace_agent_mesh/cli/commands/init/file_service_step.py,sha256=FrmA4Yb082lEFFe4cxLXr_8xT6hC8Zee-5ygR6XO4-E,2256
|
|
124
|
-
solace_agent_mesh/cli/commands/init/init.py,sha256=
|
|
125
|
-
solace_agent_mesh/cli/commands/init/project_structure_step.py,sha256=
|
|
126
|
-
solace_agent_mesh/cli/commands/init/rest_api_step.py,sha256=2tjdz90ohVi82vqnkDBTJ7YhcYajBqBIoujFYGwAHzQ,1477
|
|
127
|
-
solace_agent_mesh/cli/commands/init/web_ui_step.py,sha256=BG5UmaxEPS0HtZwf1zv9-wXVO_IYgZAbOq9zGPop858,1163
|
|
124
|
+
solace_agent_mesh/cli/commands/init/init.py,sha256=pkP7mUSSoB14Z6vZVLqPY1x4_U9Nhzjk31J5ofIdpdk,3479
|
|
125
|
+
solace_agent_mesh/cli/commands/init/project_structure_step.py,sha256=pXIeYFmdY0oy0FVnOG0iqeGuK_nwDdICjqyj6b7mEss,518
|
|
128
126
|
solace_agent_mesh/cli/commands/plugin/__init__.py,sha256=zFmLT32wXFLISlIqpfR1Ru5pur2boWwfD-Et5R8PWbs,65
|
|
129
|
-
solace_agent_mesh/cli/commands/plugin/add.py,sha256=
|
|
127
|
+
solace_agent_mesh/cli/commands/plugin/add.py,sha256=T1rD-jvjbX7qi5uH1Q85y_RzBqi1kDUQjymdgibIkdc,3782
|
|
130
128
|
solace_agent_mesh/cli/commands/plugin/build.py,sha256=KqJNOmp77KDk5y04qbkl6AJgEGKAXqXCwgIeD9Yx4tI,9439
|
|
131
129
|
solace_agent_mesh/cli/commands/plugin/create.py,sha256=6XwcvIVAmmkbjK_e-JT4D54xk_dxTOwjl9dTDwsjyF4,3748
|
|
132
|
-
solace_agent_mesh/cli/commands/plugin/plugin.py,sha256=
|
|
133
|
-
solace_agent_mesh/cli/commands/plugin/remove.py,sha256=
|
|
130
|
+
solace_agent_mesh/cli/commands/plugin/plugin.py,sha256=ziyj5VOhsdKAMdcGwJ3z3NGC1CcfUKHOihLcxCre2yk,3853
|
|
131
|
+
solace_agent_mesh/cli/commands/plugin/remove.py,sha256=7SHOL2Jy5nMiD1ASavl3DC1jdav52hxDZo2JDs8Mq4o,2629
|
|
134
132
|
solace_agent_mesh/configs/agent_global.yaml,sha256=3bpVr6DeXAzA8U1F6rKhwL8oMbh3M3ZuhkguqaI9Nvs,2864
|
|
135
133
|
solace_agent_mesh/configs/agent_image_processing.yaml,sha256=zZW4jN0Rhjc9mYBuO_xq83Ibez8zecso4AHc6MIcZfM,3143
|
|
136
134
|
solace_agent_mesh/configs/agent_slack.yaml,sha256=a2AxmWMwkcE0YxETVS1MvbrYhWY-vi9oJypo7lNbIfo,2198
|
|
@@ -138,7 +136,7 @@ solace_agent_mesh/configs/agent_web_request.yaml,sha256=r4sWRXV8FfPxIhpicAJTo9xb
|
|
|
138
136
|
solace_agent_mesh/configs/conversation_to_file.yaml,sha256=rFp8bceg-q7SFWnvPYo13E8uUcJhopXmguR2r4eQVgA,1976
|
|
139
137
|
solace_agent_mesh/configs/error_catcher.yaml,sha256=NrZEVIq4B8S-2UXJd1AHHF_xLcIGN-fnJLTPoqzMLAY,1949
|
|
140
138
|
solace_agent_mesh/configs/monitor.yaml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
|
-
solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml,sha256=
|
|
139
|
+
solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml,sha256=zSOSUvcy8x91xHFdPqIndc8cK8g8Hjxj_1VWxrXYST0,4122
|
|
142
140
|
solace_agent_mesh/configs/monitor_user_feedback.yaml,sha256=iBZWKIA4XIdqKBCVwo39m-9uOXaCe0m5V59GUiSxiqM,1742
|
|
143
141
|
solace_agent_mesh/configs/orchestrator.yaml,sha256=6XtSMVWj87eU9egzNHXynHa2n5Bja1LBn_LZfwwO2aU,9617
|
|
144
142
|
solace_agent_mesh/configs/service_embedding.yaml,sha256=JDIvNmywtGcy9G25L89zXa-KrEZN68E6kgomXikMHyw,3090
|
|
@@ -167,8 +165,8 @@ solace_agent_mesh/assets/web-visualizer/index.html,sha256=Bn-hrNXJvapfRG-L_hs5K5
|
|
|
167
165
|
solace_agent_mesh/assets/web-visualizer/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
|
|
168
166
|
solace_agent_mesh/assets/web-visualizer/assets/index-C5awueeJ.js,sha256=tlhSEqOgFpMuwd7X73mdRAxUCxQ8H7TiCfk4oHh6qXY,752048
|
|
169
167
|
solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css,sha256=sR-djfZhg7oOrDkv7deFLKVioHOSGFA0ZCDPvK8jzYI,12678
|
|
170
|
-
solace_agent_mesh-0.1.
|
|
171
|
-
solace_agent_mesh-0.1.
|
|
172
|
-
solace_agent_mesh-0.1.
|
|
173
|
-
solace_agent_mesh-0.1.
|
|
174
|
-
solace_agent_mesh-0.1.
|
|
168
|
+
solace_agent_mesh-0.1.3.dist-info/METADATA,sha256=sQkEyXOB34b0JbKcN1rePdk1Knw3sedUmiqq8uAUQrM,10920
|
|
169
|
+
solace_agent_mesh-0.1.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
170
|
+
solace_agent_mesh-0.1.3.dist-info/entry_points.txt,sha256=VDI4Kkhc1jy9ajf8Qd08v3lpV4n7zoWBAo6fopQrXL8,108
|
|
171
|
+
solace_agent_mesh-0.1.3.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
172
|
+
solace_agent_mesh-0.1.3.dist-info/RECORD,,
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
from cli.utils import ask_if_not_provided
|
|
2
|
-
import click
|
|
3
|
-
|
|
4
|
-
def rest_api_step(options, default_options, none_interactive, abort):
|
|
5
|
-
"""
|
|
6
|
-
Initialize the REST API.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
enabled = ask_if_not_provided(
|
|
10
|
-
options,
|
|
11
|
-
"rest_api_enabled",
|
|
12
|
-
"Set up the REST API interface? (Required for Web UI setup in the next step.)",
|
|
13
|
-
default_options["rest_api_enabled"],
|
|
14
|
-
none_interactive,
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
if not enabled:
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
ask_if_not_provided(
|
|
21
|
-
options,
|
|
22
|
-
"rest_api_server_input_port",
|
|
23
|
-
"REST API server port",
|
|
24
|
-
default_options["rest_api_server_input_port"],
|
|
25
|
-
none_interactive,
|
|
26
|
-
)
|
|
27
|
-
ask_if_not_provided(
|
|
28
|
-
options,
|
|
29
|
-
"rest_api_server_host",
|
|
30
|
-
"REST API server host",
|
|
31
|
-
default_options["rest_api_server_host"],
|
|
32
|
-
none_interactive,
|
|
33
|
-
)
|
|
34
|
-
ask_if_not_provided(
|
|
35
|
-
options,
|
|
36
|
-
"rest_api_server_input_endpoint",
|
|
37
|
-
"REST API endpoint",
|
|
38
|
-
default_options["rest_api_server_input_endpoint"],
|
|
39
|
-
none_interactive,
|
|
40
|
-
)
|
|
41
|
-
ask_if_not_provided(
|
|
42
|
-
options,
|
|
43
|
-
"rest_api_gateway_name",
|
|
44
|
-
"What would you like to call the gateway",
|
|
45
|
-
default_options["rest_api_gateway_name"],
|
|
46
|
-
none_interactive,
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
click.echo("\nAdditional configuration options are availale for the REST API such as enabling authentication, rate limits etc.")
|
|
50
|
-
click.echo("Please refer to our documentation for detailed setup instructions.\n")
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
from cli.utils import ask_if_not_provided
|
|
2
|
-
import click
|
|
3
|
-
|
|
4
|
-
def webui_step(options, default_options, none_interactive, abort):
|
|
5
|
-
"""
|
|
6
|
-
Initialize the Web UI configuration.
|
|
7
|
-
"""
|
|
8
|
-
if not options.get("rest_api_enabled"):
|
|
9
|
-
click.echo(click.style("Skipping setup for Web UI because REST API was not enabled", bold=False, fg="yellow"))
|
|
10
|
-
return
|
|
11
|
-
|
|
12
|
-
enabled = ask_if_not_provided(
|
|
13
|
-
options,
|
|
14
|
-
"webui_enabled",
|
|
15
|
-
"Enable Web UI?",
|
|
16
|
-
default_options["webui_enabled"],
|
|
17
|
-
none_interactive=none_interactive,
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
if not enabled:
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
ask_if_not_provided(
|
|
24
|
-
options,
|
|
25
|
-
"webui_listen_port",
|
|
26
|
-
"Server listen port",
|
|
27
|
-
default_options["webui_listen_port"],
|
|
28
|
-
none_interactive,
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
ask_if_not_provided(
|
|
32
|
-
options,
|
|
33
|
-
"webui_host",
|
|
34
|
-
"Server host",
|
|
35
|
-
default_options["webui_host"],
|
|
36
|
-
none_interactive,
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
click.echo("\nAdditional configuration options are availale for the Web UI such as enabling authentication, collecting feedback etc.")
|
|
40
|
-
click.echo("Please refer to our documentation for detailed setup instructions.\n")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|