ibm-watsonx-orchestrate 1.8.1__py3-none-any.whl → 1.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ibm_watsonx_orchestrate/__init__.py +1 -2
- ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +2 -2
- ibm_watsonx_orchestrate/agent_builder/models/types.py +5 -0
- ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +18 -6
- ibm_watsonx_orchestrate/agent_builder/tools/types.py +5 -3
- ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +15 -3
- ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +6 -3
- ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +103 -23
- ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +17 -13
- ibm_watsonx_orchestrate/cli/commands/server/server_command.py +146 -36
- ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +4 -2
- ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +9 -1
- ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +1 -1
- ibm_watsonx_orchestrate/client/connections/connections_client.py +14 -2
- ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py +5 -3
- ibm_watsonx_orchestrate/docker/compose-lite.yml +124 -9
- ibm_watsonx_orchestrate/docker/default.env +22 -17
- ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -2
- ibm_watsonx_orchestrate/flow_builder/flows/constants.py +2 -0
- ibm_watsonx_orchestrate/flow_builder/flows/flow.py +52 -10
- ibm_watsonx_orchestrate/flow_builder/node.py +34 -3
- ibm_watsonx_orchestrate/flow_builder/types.py +144 -25
- ibm_watsonx_orchestrate/flow_builder/utils.py +7 -4
- {ibm_watsonx_orchestrate-1.8.1.dist-info → ibm_watsonx_orchestrate-1.9.0.dist-info}/METADATA +1 -1
- {ibm_watsonx_orchestrate-1.8.1.dist-info → ibm_watsonx_orchestrate-1.9.0.dist-info}/RECORD +28 -28
- {ibm_watsonx_orchestrate-1.8.1.dist-info → ibm_watsonx_orchestrate-1.9.0.dist-info}/WHEEL +0 -0
- {ibm_watsonx_orchestrate-1.8.1.dist-info → ibm_watsonx_orchestrate-1.9.0.dist-info}/entry_points.txt +0 -0
- {ibm_watsonx_orchestrate-1.8.1.dist-info → ibm_watsonx_orchestrate-1.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,11 +4,13 @@ import os
|
|
4
4
|
import platform
|
5
5
|
import subprocess
|
6
6
|
import sys
|
7
|
+
import shutil
|
7
8
|
import tempfile
|
8
9
|
import time
|
9
10
|
from pathlib import Path
|
10
11
|
from urllib.parse import urlparse
|
11
12
|
|
13
|
+
import re
|
12
14
|
import jwt
|
13
15
|
import requests
|
14
16
|
import typer
|
@@ -32,6 +34,13 @@ logger = logging.getLogger(__name__)
|
|
32
34
|
|
33
35
|
server_app = typer.Typer(no_args_is_help=True)
|
34
36
|
|
37
|
+
_EXPORT_FILE_TYPES: set[str] = {
|
38
|
+
'py',
|
39
|
+
'yaml',
|
40
|
+
'yml',
|
41
|
+
'json',
|
42
|
+
'env'
|
43
|
+
}
|
35
44
|
|
36
45
|
_ALWAYS_UNSET: set[str] = {
|
37
46
|
"WO_API_KEY",
|
@@ -43,11 +52,34 @@ _ALWAYS_UNSET: set[str] = {
|
|
43
52
|
"WO_USERNAME",
|
44
53
|
"WO_PASSWORD",
|
45
54
|
}
|
55
|
+
|
56
|
+
NON_SECRET_ENV_ITEMS: set[str] = {
|
57
|
+
"WO_DEVELOPER_EDITION_SOURCE",
|
58
|
+
"WO_INSTANCE",
|
59
|
+
"USE_SAAS_ML_TOOLS_RUNTIME",
|
60
|
+
"AUTHORIZATION_URL",
|
61
|
+
"OPENSOURCE_REGISTRY_PROXY",
|
62
|
+
"SAAS_WDU_RUNTIME",
|
63
|
+
"LATEST_ENV_FILE",
|
64
|
+
}
|
46
65
|
|
47
66
|
def define_saas_wdu_runtime(value: str = "none") -> None:
|
48
67
|
cfg = Config()
|
49
68
|
cfg.write(USER_ENV_CACHE_HEADER,"SAAS_WDU_RUNTIME",value)
|
50
69
|
|
70
|
+
def set_compose_file_path_in_env(path: str = None) -> None:
|
71
|
+
Config().save(
|
72
|
+
{
|
73
|
+
USER_ENV_CACHE_HEADER: {
|
74
|
+
"DOCKER_COMPOSE_FILE_PATH" : path
|
75
|
+
}
|
76
|
+
}
|
77
|
+
)
|
78
|
+
|
79
|
+
def get_compose_file_path_from_env() -> str:
|
80
|
+
return Config().read(USER_ENV_CACHE_HEADER,"DOCKER_COMPOSE_FILE_PATH")
|
81
|
+
|
82
|
+
|
51
83
|
def ensure_docker_installed() -> None:
|
52
84
|
try:
|
53
85
|
subprocess.run(["docker", "--version"], check=True, capture_output=True)
|
@@ -106,6 +138,11 @@ def docker_login_by_dev_edition_source(env_dict: dict, source: str) -> None:
|
|
106
138
|
|
107
139
|
|
108
140
|
def get_compose_file() -> Path:
|
141
|
+
custom_compose_path = get_compose_file_path_from_env()
|
142
|
+
return Path(custom_compose_path) if custom_compose_path else get_default_compose_file()
|
143
|
+
|
144
|
+
|
145
|
+
def get_default_compose_file() -> Path:
|
109
146
|
with resources.as_file(
|
110
147
|
resources.files("ibm_watsonx_orchestrate.docker").joinpath("compose-lite.yml")
|
111
148
|
) as compose_file:
|
@@ -283,12 +320,17 @@ def _prepare_clean_env(env_file: Path) -> None:
|
|
283
320
|
for key in keys_to_unset:
|
284
321
|
os.environ.pop(key, None)
|
285
322
|
|
286
|
-
def write_merged_env_file(merged_env: dict) -> Path:
|
287
|
-
|
288
|
-
|
323
|
+
def write_merged_env_file(merged_env: dict, target_path: str = None) -> Path:
|
324
|
+
|
325
|
+
if target_path:
|
326
|
+
file = open(target_path,"w")
|
327
|
+
else:
|
328
|
+
file = tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".env")
|
329
|
+
|
330
|
+
with file:
|
289
331
|
for key, val in merged_env.items():
|
290
|
-
|
291
|
-
return Path(
|
332
|
+
file.write(f"{key}={val}\n")
|
333
|
+
return Path(file.name)
|
292
334
|
|
293
335
|
|
294
336
|
def get_dbtag_from_architecture(merged_env_dict: dict) -> str:
|
@@ -310,14 +352,6 @@ def refresh_local_credentials() -> None:
|
|
310
352
|
clear_protected_env_credentials_token()
|
311
353
|
_login(name=PROTECTED_ENV_NAME, apikey=None)
|
312
354
|
|
313
|
-
NON_SECRET_ENV_ITEMS = {
|
314
|
-
"WO_DEVELOPER_EDITION_SOURCE",
|
315
|
-
"WO_INSTANCE",
|
316
|
-
"USE_SAAS_ML_TOOLS_RUNTIME",
|
317
|
-
"AUTHORIZATION_URL",
|
318
|
-
"OPENSOURCE_REGISTRY_PROXY",
|
319
|
-
"SAAS_WDU_RUNTIME"
|
320
|
-
}
|
321
355
|
def persist_user_env(env: dict, include_secrets: bool = False) -> None:
|
322
356
|
if include_secrets:
|
323
357
|
persistable_env = env
|
@@ -337,7 +371,10 @@ def get_persisted_user_env() -> dict | None:
|
|
337
371
|
return user_env
|
338
372
|
|
339
373
|
def run_compose_lite(final_env_file: Path, experimental_with_langfuse=False, experimental_with_ibm_telemetry=False, with_doc_processing=False) -> None:
|
374
|
+
|
375
|
+
|
340
376
|
compose_path = get_compose_file()
|
377
|
+
|
341
378
|
compose_command = ensure_docker_compose_installed()
|
342
379
|
_prepare_clean_env(final_env_file)
|
343
380
|
db_tag = read_env_file(final_env_file).get('DBTAG', None)
|
@@ -754,6 +791,32 @@ def auto_configure_callback_ip(merged_env_dict: dict) -> dict:
|
|
754
791
|
|
755
792
|
return merged_env_dict
|
756
793
|
|
794
|
+
def prepare_server_env_vars(user_env: dict = {}):
|
795
|
+
|
796
|
+
default_env = read_env_file(get_default_env_file())
|
797
|
+
dev_edition_source = get_dev_edition_source(user_env)
|
798
|
+
default_registry_vars = get_default_registry_env_vars_by_dev_edition_source(default_env, user_env, source=dev_edition_source)
|
799
|
+
|
800
|
+
# Update the default environment with the default registry variables only if they are not already set
|
801
|
+
for key in default_registry_vars:
|
802
|
+
if key not in default_env or not default_env[key]:
|
803
|
+
default_env[key] = default_registry_vars[key]
|
804
|
+
|
805
|
+
# Merge the default environment with the user environment
|
806
|
+
merged_env_dict = {
|
807
|
+
**default_env,
|
808
|
+
**user_env,
|
809
|
+
}
|
810
|
+
|
811
|
+
merged_env_dict = apply_server_env_dict_defaults(merged_env_dict)
|
812
|
+
|
813
|
+
# Auto-configure callback IP for async tools
|
814
|
+
merged_env_dict = auto_configure_callback_ip(merged_env_dict)
|
815
|
+
|
816
|
+
apply_llm_api_key_defaults(merged_env_dict)
|
817
|
+
|
818
|
+
return merged_env_dict
|
819
|
+
|
757
820
|
@server_app.command(name="start")
|
758
821
|
def server_start(
|
759
822
|
user_env_file: str = typer.Option(
|
@@ -787,38 +850,37 @@ def server_start(
|
|
787
850
|
'--with-doc-processing', '-d',
|
788
851
|
help='Enable IBM Document Processing to extract information from your business documents. Enabling this activates the Watson Document Understanding service.'
|
789
852
|
),
|
853
|
+
custom_compose_file: str = typer.Option(
|
854
|
+
None,
|
855
|
+
'--compose-file', '-f',
|
856
|
+
help='Provide the path to a custom docker-compose file to use instead of the default compose file'
|
857
|
+
),
|
790
858
|
):
|
791
859
|
confirm_accepts_license_agreement(accept_terms_and_conditions)
|
792
860
|
|
793
861
|
define_saas_wdu_runtime()
|
794
862
|
|
863
|
+
ensure_docker_installed()
|
864
|
+
|
795
865
|
if user_env_file and not Path(user_env_file).exists():
|
796
|
-
logger.error(f"
|
866
|
+
logger.error(f"The specified environment file '{user_env_file}' does not exist.")
|
797
867
|
sys.exit(1)
|
798
|
-
ensure_docker_installed()
|
799
868
|
|
800
|
-
|
869
|
+
if custom_compose_file:
|
870
|
+
if Path(custom_compose_file).exists():
|
871
|
+
logger.warning("You are using a custom docker compose file, official support will not be available for this configuration")
|
872
|
+
else:
|
873
|
+
logger.error(f"The specified docker-compose file '{custom_compose_file}' does not exist.")
|
874
|
+
sys.exit(1)
|
875
|
+
|
876
|
+
#Run regardless, to allow this to set compose as 'None' when not in use
|
877
|
+
set_compose_file_path_in_env(custom_compose_file)
|
878
|
+
|
801
879
|
user_env = read_env_file(user_env_file) if user_env_file else {}
|
802
880
|
persist_user_env(user_env, include_secrets=persist_env_secrets)
|
803
881
|
|
804
|
-
|
805
|
-
default_registry_vars = get_default_registry_env_vars_by_dev_edition_source(default_env, user_env, source=dev_edition_source)
|
806
|
-
|
807
|
-
# Update the default environment with the default registry variables only if they are not already set
|
808
|
-
for key in default_registry_vars:
|
809
|
-
if key not in default_env or not default_env[key]:
|
810
|
-
default_env[key] = default_registry_vars[key]
|
882
|
+
merged_env_dict = prepare_server_env_vars(user_env)
|
811
883
|
|
812
|
-
# Merge the default environment with the user environment
|
813
|
-
merged_env_dict = {
|
814
|
-
**default_env,
|
815
|
-
**user_env,
|
816
|
-
}
|
817
|
-
|
818
|
-
merged_env_dict = apply_server_env_dict_defaults(merged_env_dict)
|
819
|
-
|
820
|
-
# Auto-configure callback IP for async tools
|
821
|
-
merged_env_dict = auto_configure_callback_ip(merged_env_dict)
|
822
884
|
if not _check_exclusive_observibility(experimental_with_langfuse, experimental_with_ibm_telemetry):
|
823
885
|
logger.error("Please select either langfuse or ibm telemetry for observability not both")
|
824
886
|
sys.exit(1)
|
@@ -835,14 +897,12 @@ def server_start(
|
|
835
897
|
merged_env_dict['USE_IBM_TELEMETRY'] = 'true'
|
836
898
|
|
837
899
|
try:
|
900
|
+
dev_edition_source = get_dev_edition_source(merged_env_dict)
|
838
901
|
docker_login_by_dev_edition_source(merged_env_dict, dev_edition_source)
|
839
902
|
except ValueError as e:
|
840
903
|
logger.error(f"Error: {e}")
|
841
904
|
sys.exit(1)
|
842
905
|
|
843
|
-
apply_llm_api_key_defaults(merged_env_dict)
|
844
|
-
|
845
|
-
|
846
906
|
final_env_file = write_merged_env_file(merged_env_dict)
|
847
907
|
|
848
908
|
run_compose_lite(final_env_file=final_env_file,
|
@@ -1000,5 +1060,55 @@ def run_db_migration() -> None:
|
|
1000
1060
|
)
|
1001
1061
|
sys.exit(1)
|
1002
1062
|
|
1063
|
+
|
1064
|
+
def bump_file_iteration(filename: str) -> str:
|
1065
|
+
regex = re.compile(f"^(?P<name>[^\\(\\s\\.\\)]+)(\\((?P<num>\\d+)\\))?(?P<type>\\.(?:{'|'.join(_EXPORT_FILE_TYPES)}))?$")
|
1066
|
+
_m = regex.match(filename)
|
1067
|
+
iter = int(_m['num']) + 1 if (_m and _m['num']) else 1
|
1068
|
+
return f"{_m['name']}({iter}){_m['type'] or ''}"
|
1069
|
+
|
1070
|
+
def get_next_free_file_iteration(filename: str) -> str:
|
1071
|
+
while Path(filename).exists():
|
1072
|
+
filename = bump_file_iteration(filename)
|
1073
|
+
return filename
|
1074
|
+
|
1075
|
+
@server_app.command(name="eject", help="output the docker-compose file and associated env file used to run the server")
|
1076
|
+
def server_eject(
|
1077
|
+
user_env_file: str = typer.Option(
|
1078
|
+
None,
|
1079
|
+
"--env-file",
|
1080
|
+
"-e",
|
1081
|
+
help="Path to a .env file that overrides default.env. Then environment variables override both."
|
1082
|
+
)
|
1083
|
+
):
|
1084
|
+
|
1085
|
+
if not user_env_file:
|
1086
|
+
logger.error(f"To use 'server eject' you need to specify an env file with '--env-file' or '-e'")
|
1087
|
+
sys.exit(1)
|
1088
|
+
|
1089
|
+
if not Path(user_env_file).exists():
|
1090
|
+
logger.error(f"The specified environment file '{user_env_file}' does not exist.")
|
1091
|
+
sys.exit(1)
|
1092
|
+
|
1093
|
+
logger.warning("Changes to your docker compose file are not supported")
|
1094
|
+
|
1095
|
+
compose_file_path = get_compose_file()
|
1096
|
+
|
1097
|
+
compose_output_file = get_next_free_file_iteration('docker-compose.yml')
|
1098
|
+
logger.info(f"Exporting docker compose file to '{compose_output_file}'")
|
1099
|
+
|
1100
|
+
shutil.copyfile(compose_file_path,compose_output_file)
|
1101
|
+
|
1102
|
+
|
1103
|
+
user_env = read_env_file(user_env_file)
|
1104
|
+
merged_env_dict = prepare_server_env_vars(user_env)
|
1105
|
+
|
1106
|
+
env_output_file = get_next_free_file_iteration('server.env')
|
1107
|
+
logger.info(f"Exporting env file to '{env_output_file}'")
|
1108
|
+
|
1109
|
+
write_merged_env_file(merged_env=merged_env_dict,target_path=env_output_file)
|
1110
|
+
|
1111
|
+
logger.info(f"To make use of the exported configuration file run \"orchestrate server start -e {env_output_file} -f {compose_output_file}\"")
|
1112
|
+
|
1003
1113
|
if __name__ == "__main__":
|
1004
1114
|
server_app()
|
@@ -64,8 +64,8 @@ def import_toolkit(
|
|
64
64
|
else:
|
65
65
|
tool_list = None
|
66
66
|
|
67
|
-
if not package and not package_root:
|
68
|
-
logger.error("You must provide either '--package'
|
67
|
+
if not package and not package_root and not command:
|
68
|
+
logger.error("You must provide either '--package', '--package-root' or '--command'.")
|
69
69
|
sys.exit(1)
|
70
70
|
|
71
71
|
if package_root and not command:
|
@@ -85,6 +85,8 @@ def import_toolkit(
|
|
85
85
|
else:
|
86
86
|
logger.error("Unable to infer start up command: '--language' flag must be either 'node' or 'python' when using the '--package' flag without '--command' flag.")
|
87
87
|
sys.exit(1)
|
88
|
+
else:
|
89
|
+
logger.warning(f"Default package installation command for package '{package}' overridden by '--command {command}'.")
|
88
90
|
|
89
91
|
|
90
92
|
toolkit_controller = ToolkitController(
|
@@ -70,7 +70,7 @@ class ToolkitController:
|
|
70
70
|
self.client = None
|
71
71
|
|
72
72
|
self.source: ToolkitSource = (
|
73
|
-
ToolkitSource.
|
73
|
+
ToolkitSource.FILES if package_root else ToolkitSource.PUBLIC_REGISTRY
|
74
74
|
)
|
75
75
|
|
76
76
|
def get_client(self) -> ToolKitClient:
|
@@ -105,6 +105,14 @@ class ToolkitController:
|
|
105
105
|
command = command_parts[0]
|
106
106
|
args = command_parts[1:]
|
107
107
|
|
108
|
+
if self.package_root:
|
109
|
+
is_folder = os.path.isdir(self.package_root)
|
110
|
+
is_zip_file = os.path.isfile(self.package_root) and zipfile.is_zipfile(self.package_root)
|
111
|
+
|
112
|
+
if not is_folder and not is_zip_file:
|
113
|
+
logger.error(f"Unable to find a valid directory or zip file at location '{self.package_root}'")
|
114
|
+
sys.exit(1)
|
115
|
+
|
108
116
|
console = Console()
|
109
117
|
|
110
118
|
with tempfile.TemporaryDirectory() as tmpdir:
|
@@ -590,7 +590,7 @@ class ToolsController:
|
|
590
590
|
for tool in tools:
|
591
591
|
tools_list.append(json.loads(tool.dumps_spec()))
|
592
592
|
|
593
|
-
rich.
|
593
|
+
rich.print_json(json.dumps(tools_list, indent=4))
|
594
594
|
else:
|
595
595
|
table = rich.table.Table(show_header=True, header_style="bold white", show_lines=True)
|
596
596
|
column_args = {
|
@@ -3,6 +3,7 @@ from typing import List
|
|
3
3
|
from ibm_cloud_sdk_core.authenticators import MCSPAuthenticator
|
4
4
|
from pydantic import BaseModel, ValidationError
|
5
5
|
from typing import Optional
|
6
|
+
from enum import Enum
|
6
7
|
|
7
8
|
from ibm_watsonx_orchestrate.client.base_api_client import BaseAPIClient, ClientAPIException
|
8
9
|
from ibm_watsonx_orchestrate.agent_builder.connections.types import ConnectionEnvironment, ConnectionPreference, ConnectionAuthType, ConnectionSecurityScheme, IdpConfigData, AppConfigData, ConnectionType
|
@@ -12,12 +13,23 @@ import logging
|
|
12
13
|
logger = logging.getLogger(__name__)
|
13
14
|
|
14
15
|
|
16
|
+
class FetchConfigAuthTypes(str, Enum):
|
17
|
+
BASIC_AUTH = ConnectionType.BASIC_AUTH.value
|
18
|
+
BEARER_TOKEN = ConnectionType.BEARER_TOKEN.value
|
19
|
+
API_KEY_AUTH = ConnectionType.API_KEY_AUTH.value
|
20
|
+
OAUTH2_AUTH_CODE = ConnectionType.OAUTH2_AUTH_CODE.value
|
21
|
+
OAUTH2_IMPLICIT = 'oauth2_implicit'
|
22
|
+
OAUTH2_PASSWORD = 'oauth2_password'
|
23
|
+
OAUTH2_CLIENT_CREDS = ConnectionType.OAUTH2_CLIENT_CREDS.value
|
24
|
+
OAUTH_ON_BEHALF_OF_FLOW = ConnectionType.OAUTH_ON_BEHALF_OF_FLOW.value
|
25
|
+
KEY_VALUE = ConnectionType.KEY_VALUE.value
|
26
|
+
|
15
27
|
class ListConfigsResponse(BaseModel):
|
16
28
|
connection_id: str = None,
|
17
29
|
app_id: str = None
|
18
30
|
name: str = None
|
19
31
|
security_scheme: ConnectionSecurityScheme | None = None,
|
20
|
-
auth_type:
|
32
|
+
auth_type: FetchConfigAuthTypes | None = None,
|
21
33
|
environment: ConnectionEnvironment | None = None,
|
22
34
|
preference: ConnectionPreference | None = None,
|
23
35
|
credentials_entered: bool | None = False
|
@@ -28,7 +40,7 @@ class GetConfigResponse(BaseModel):
|
|
28
40
|
app_id: str = None
|
29
41
|
environment: ConnectionEnvironment = None
|
30
42
|
preference: ConnectionPreference = None
|
31
|
-
auth_type:
|
43
|
+
auth_type: FetchConfigAuthTypes | None = None
|
32
44
|
sso: bool = None
|
33
45
|
security_scheme: ConnectionSecurityScheme = None
|
34
46
|
server_url: str | None = None
|
@@ -21,13 +21,15 @@ class CPEClient(BaseAPIClient):
|
|
21
21
|
}
|
22
22
|
|
23
23
|
|
24
|
-
def submit_pre_cpe_chat(self, user_message: str | None =None, tools: Dict[str, Any] = None,
|
24
|
+
def submit_pre_cpe_chat(self, user_message: str | None =None, tools: Dict[str, Any] = None, collaborators: Dict[str, Any] = None, knowledge_bases: Dict[str, Any] = None, selected:bool=False) -> dict:
|
25
25
|
payload = {
|
26
26
|
"message": user_message,
|
27
27
|
"tools": tools,
|
28
|
-
"
|
28
|
+
"collaborators": collaborators,
|
29
|
+
"knowledge_bases": knowledge_bases,
|
29
30
|
"chat_id": self.chat_id,
|
30
|
-
"chat_model_name": self.chat_model_name
|
31
|
+
"chat_model_name": self.chat_model_name,
|
32
|
+
'selected':selected
|
31
33
|
}
|
32
34
|
|
33
35
|
response = self._post_nd_json("/wxo-cpe/create-agent", data=payload)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
name: docker
|
1
2
|
services:
|
2
3
|
########################
|
3
4
|
# Orchestrate Lite dependencies
|
@@ -121,6 +122,11 @@ services:
|
|
121
122
|
CONNECTIONS_MANAGER_ENDPOINT: http://wxo-server-connection-manager:3001
|
122
123
|
AGENT_OPS_API_KEY: ${AGENTOPS_API_KEY}
|
123
124
|
AGENTS_OPS_RUNTIME_ENDPOINT: https://frontend-server:443
|
125
|
+
DPI_WO_WDU_SERVER_ENDPOINT: https://wxo-doc-processing-service:8080
|
126
|
+
DPI_RAG_SERVER_ENDPOINT: https://wxo-doc-processing-llm-service:8083
|
127
|
+
IBM_DPS_CACHE_SERVICE: https://wxo-doc-processing-cache:8080
|
128
|
+
DOCPROC_BASE_URL: http://wxo-doc-processing-infra-standalone:9080
|
129
|
+
BUILDER_ASYNC_CALLBACK_ENDPOINT: http://wxo-builder:4025
|
124
130
|
IS_OBSERVABILITY_FEATURE_ENABLED: "true"
|
125
131
|
ALLOW_INSECURE_TLS: "true"
|
126
132
|
command: 'npm start'
|
@@ -164,7 +170,7 @@ services:
|
|
164
170
|
"
|
165
171
|
|
166
172
|
wxo-milvus-standalone:
|
167
|
-
image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/milvusdb/milvus:v2.5.
|
173
|
+
image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/milvusdb/milvus:v2.5.15
|
168
174
|
command: ["milvus", "run", "standalone"]
|
169
175
|
security_opt:
|
170
176
|
- seccomp:unconfined
|
@@ -548,6 +554,7 @@ services:
|
|
548
554
|
- TENANT_DEFAULT_PASSWORD=${ES_PASSWORD}
|
549
555
|
- TENANT_DEFAULT_HOSTNAME=http://elasticsearch:9200
|
550
556
|
- DEFAULT_TENANT_ID=${DEFAULT_TENANT_ID}
|
557
|
+
- FORCE_SINGLE_TENANT=${FORCE_SINGLE_TENANT:-true}
|
551
558
|
ports:
|
552
559
|
- "9202:9201" # Expose proxy on host port 9202
|
553
560
|
networks:
|
@@ -643,6 +650,7 @@ services:
|
|
643
650
|
- INBOUND_API_KEY=${AGENTOPS_API_KEY}
|
644
651
|
- DEFAULT_TENANT_ID=${DEFAULT_TENANT_ID}
|
645
652
|
- TENANT_DEFAULT_HOSTNAME=http://elasticsearch:9200
|
653
|
+
- FORCE_SINGLE_TENANT=${FORCE_SINGLE_TENANT:-true}
|
646
654
|
ports:
|
647
655
|
- "8765:443"
|
648
656
|
networks:
|
@@ -780,13 +788,13 @@ services:
|
|
780
788
|
LANGFUSE_PUBLIC_KEY: ${LANGFUSE_PUBLIC_KEY:-pk-lf-7417757e-d6df-421b-957e-683b76acb5df}
|
781
789
|
LANGFUSE_SECRET_KEY: ${LANGFUSE_PRIVATE_KEY:-sk-lf-7bc4da63-7b2b-40c0-b5eb-1e0cf64f9af2}
|
782
790
|
LOG_LEVEL: info
|
783
|
-
DISABLE_FLOW_BINDING: true
|
784
791
|
DOCPROC_ENABLED: ${DOCPROC_ENABLED:-false}
|
785
792
|
DOCPROC_BASE_URL: http://wxo-doc-processing-infra-standalone:9080
|
786
793
|
WO_API_KEY: ${WO_API_KEY}
|
787
794
|
WO_INSTANCE: ${WO_INSTANCE}
|
788
795
|
AUTHORIZATION_URL: ${AUTHORIZATION_URL}
|
789
796
|
WO_AUTH_TYPE: ${WO_AUTH_TYPE}
|
797
|
+
FLOW_CALLBACK_REQUEST_RETRIES: "1"
|
790
798
|
healthcheck:
|
791
799
|
test: curl -k http://localhost:9044/readiness --fail
|
792
800
|
interval: 30s
|
@@ -825,7 +833,7 @@ services:
|
|
825
833
|
########################
|
826
834
|
|
827
835
|
wxo-doc-processing-service:
|
828
|
-
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo_doc_processing_service:${DOCPROC_DPS_TAG:-
|
836
|
+
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo_doc_processing_service:${DOCPROC_DPS_TAG:-20250721-164412-250-503756a}
|
829
837
|
platform: linux/amd64
|
830
838
|
restart: unless-stopped
|
831
839
|
environment:
|
@@ -841,9 +849,9 @@ services:
|
|
841
849
|
IBM_DPS_CACHE_SERVICE: https://wxo-doc-processing-cache:8080
|
842
850
|
profiles:
|
843
851
|
- docproc
|
844
|
-
|
845
|
-
|
846
|
-
|
852
|
+
depends_on:
|
853
|
+
wxo-doc-processing-cache:
|
854
|
+
condition: service_healthy
|
847
855
|
ports:
|
848
856
|
- "18081:8080"
|
849
857
|
healthcheck:
|
@@ -855,6 +863,7 @@ services:
|
|
855
863
|
wdu-runtime:
|
856
864
|
image: ${WDU_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wdu-runtime:${WDU_TAG:-2.4.0}
|
857
865
|
platform: linux/amd64
|
866
|
+
user: app
|
858
867
|
restart: unless-stopped
|
859
868
|
environment:
|
860
869
|
MEMORY_MINIMAL: "true"
|
@@ -894,6 +903,48 @@ services:
|
|
894
903
|
tmpfs:
|
895
904
|
- "/dev/shm"
|
896
905
|
|
906
|
+
wxo-doc-processing-cache:
|
907
|
+
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo_doc_processing_cache:${DOCPROC_CACHE_TAG:-20250723-100852-70-9edc1ab}
|
908
|
+
platform: linux/amd64
|
909
|
+
restart: unless-stopped
|
910
|
+
environment:
|
911
|
+
SERVICE_NAME: wxo-doc-processing-cache
|
912
|
+
LOG_LEVEL: info
|
913
|
+
RATE_LIMITING_ENABLED: "false"
|
914
|
+
USE_DUMMY_CACHE: "false"
|
915
|
+
CACHE_ENFORCE_STRICT_JWT: "false"
|
916
|
+
PGHOST: wxo-server-db
|
917
|
+
PGPORT: "5432"
|
918
|
+
PGUSER: ${POSTGRES_USER:-postgres}
|
919
|
+
PGPASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
920
|
+
PGDATABASE: wxo-document-processing-cache
|
921
|
+
PG_DB_SCHEMA: dpschema
|
922
|
+
# PG_USE_SSL: false
|
923
|
+
S3_ENDPOINT_URL: http://wxo-server-minio:9000
|
924
|
+
S3_ACCESS_KEY: ${MINIO_ROOT_USER:-minioadmin}
|
925
|
+
S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-watsonxorchestrate}
|
926
|
+
S3_REGION: us-east-1
|
927
|
+
S3_BUCKET_NAME: wxo-document-processing-cache
|
928
|
+
VERIFY_CLIENT_CERT: 1
|
929
|
+
# S3_USE_SSL: false
|
930
|
+
# S3_VERIFY_CERT: false
|
931
|
+
profiles:
|
932
|
+
- docproc
|
933
|
+
depends_on:
|
934
|
+
wxo-doc-processing-pg-init:
|
935
|
+
condition: service_completed_successfully
|
936
|
+
wxo-doc-processing-cache-minio-init:
|
937
|
+
condition: service_completed_successfully
|
938
|
+
ports:
|
939
|
+
- "18083:8080"
|
940
|
+
# volumes:
|
941
|
+
# - ./docker/wo_doc_processing_rag_base/etc/certs:/etc/certs
|
942
|
+
healthcheck:
|
943
|
+
test: ["CMD-SHELL", "curl -fk https://localhost:8080/ping"]
|
944
|
+
interval: 30s
|
945
|
+
timeout: 30s
|
946
|
+
retries: 10
|
947
|
+
|
897
948
|
wxo-doc-processing-infra-standalone:
|
898
949
|
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo-doc-processing-infra-standalone:${DOCPROC_DPI_TAG:-2025-06-13-dev-1}
|
899
950
|
platform: linux/amd64
|
@@ -918,7 +969,7 @@ services:
|
|
918
969
|
SIDECAR_METERED_ENABLED: "false"
|
919
970
|
DPI_DEBUG: "false"
|
920
971
|
DPI_WO_WDU_SERVER_ENDPOINT: https://wxo-doc-processing-service:8080
|
921
|
-
|
972
|
+
DPI_RAG_SERVER_ENDPOINT: https://wxo-doc-processing-llm-service:8083
|
922
973
|
DISABLE_TLS: true
|
923
974
|
STANDALONE_DPI: "true"
|
924
975
|
depends_on:
|
@@ -928,8 +979,8 @@ services:
|
|
928
979
|
condition: service_completed_successfully
|
929
980
|
wxo-doc-processing-service:
|
930
981
|
condition: service_healthy
|
931
|
-
|
932
|
-
|
982
|
+
wxo-doc-processing-llm-service:
|
983
|
+
condition: service_healthy
|
933
984
|
ports:
|
934
985
|
- 19080:9080
|
935
986
|
- 19443:9443
|
@@ -939,6 +990,33 @@ services:
|
|
939
990
|
timeout: 30s
|
940
991
|
retries: 10
|
941
992
|
|
993
|
+
wxo-doc-processing-llm-service:
|
994
|
+
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo_doc_processing_rag:${DOCPROC_LLMSERVICE_TAG:-20250725-100249-111-51d3e51}
|
995
|
+
platform: linux/amd64
|
996
|
+
restart: unless-stopped
|
997
|
+
environment:
|
998
|
+
SERVICE_NAME: wxo-doc-processing-llm-service
|
999
|
+
LOG_LEVEL: info
|
1000
|
+
WATSONX_API_ENDPOINT: ${WATSONX_URL:-https://us-south.ml.cloud.ibm.com}
|
1001
|
+
WATSONX_API_KEY: ${WATSONX_APIKEY}
|
1002
|
+
WATSONX_PROJECT_ID: ${WATSONX_PROJECT_ID}
|
1003
|
+
WATSONX_SPACE_ID: ${WATSONX_SPACE_ID}
|
1004
|
+
IBM_DPS_CACHE_SERVICE: 'wxo-doc-processing-cache:8080'
|
1005
|
+
profiles:
|
1006
|
+
- docproc
|
1007
|
+
depends_on:
|
1008
|
+
wxo-doc-processing-cache:
|
1009
|
+
condition: service_healthy
|
1010
|
+
ports:
|
1011
|
+
- "18084:8083"
|
1012
|
+
# volumes:
|
1013
|
+
# - ./conf/rag/certs:/etc/certs
|
1014
|
+
healthcheck:
|
1015
|
+
test: ["CMD-SHELL", "curl -fk https://localhost:8083/ping"]
|
1016
|
+
interval: 30s
|
1017
|
+
timeout: 30s
|
1018
|
+
retries: 10
|
1019
|
+
|
942
1020
|
wxo-doc-processing-infra-pg-init:
|
943
1021
|
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo-doc-processing-infra-pg-init:${DOCPROC_DPI_TAG:-2025-06-13-dev-1}
|
944
1022
|
platform: linux/amd64
|
@@ -963,6 +1041,28 @@ services:
|
|
963
1041
|
timeout: 5s
|
964
1042
|
retries: 50
|
965
1043
|
|
1044
|
+
wxo-doc-processing-pg-init:
|
1045
|
+
image: ${DOCPROC_REGISTRY:-us.icr.io/watson-orchestrate-private}/document-processing/wo_doc_processing_cache_rds_init:${DOCPROC_CACHE_TAG:-20250723-100852-70-9edc1ab}
|
1046
|
+
platform: linux/amd64
|
1047
|
+
environment:
|
1048
|
+
PGHOST: wxo-server-db
|
1049
|
+
PGPORT: "5432"
|
1050
|
+
PGUSER: ${POSTGRES_USER:-postgres}
|
1051
|
+
PGPASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
1052
|
+
PGDATABASE: wxo-document-processing-cache
|
1053
|
+
PG_DB_SCHEMA: dpschema
|
1054
|
+
# PG_USE_SSL: false
|
1055
|
+
profiles:
|
1056
|
+
- docproc
|
1057
|
+
depends_on:
|
1058
|
+
wxo-server-db:
|
1059
|
+
condition: service_started
|
1060
|
+
healthcheck:
|
1061
|
+
test: ["CMD-SHELL", "psql -h localhost -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_PASSWORD:-postgres}"]
|
1062
|
+
interval: 1s
|
1063
|
+
timeout: 5s
|
1064
|
+
retries: 50
|
1065
|
+
|
966
1066
|
wxo-doc-processing-dpi-minio-init:
|
967
1067
|
image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/minio/mc:latest
|
968
1068
|
platform: linux/amd64
|
@@ -978,6 +1078,21 @@ services:
|
|
978
1078
|
exit 0;
|
979
1079
|
"
|
980
1080
|
|
1081
|
+
wxo-doc-processing-cache-minio-init:
|
1082
|
+
image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/minio/mc:latest
|
1083
|
+
platform: linux/amd64
|
1084
|
+
profiles:
|
1085
|
+
- docproc
|
1086
|
+
depends_on:
|
1087
|
+
wxo-server-minio:
|
1088
|
+
condition: service_healthy
|
1089
|
+
entrypoint: >
|
1090
|
+
/bin/sh -c "
|
1091
|
+
/usr/bin/mc alias set wxo-server-minio http://wxo-server-minio:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-watsonxorchestrate};
|
1092
|
+
/usr/bin/mc mb wxo-server-minio/wxo-document-processing-cache;
|
1093
|
+
exit 0;
|
1094
|
+
"
|
1095
|
+
|
981
1096
|
volumes:
|
982
1097
|
tools:
|
983
1098
|
driver: local
|