ibm-watsonx-orchestrate 1.9.0b2__py3-none-any.whl → 1.10.0b1__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 +2 -1
- ibm_watsonx_orchestrate/agent_builder/agents/types.py +2 -0
- ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +1 -1
- ibm_watsonx_orchestrate/agent_builder/connections/connections.py +1 -1
- ibm_watsonx_orchestrate/agent_builder/connections/types.py +16 -12
- ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +47 -3
- ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +18 -15
- ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +19 -7
- ibm_watsonx_orchestrate/agent_builder/tools/types.py +1 -1
- ibm_watsonx_orchestrate/agent_builder/voice_configurations/__init__.py +1 -0
- ibm_watsonx_orchestrate/agent_builder/voice_configurations/types.py +98 -0
- ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +20 -0
- ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +170 -1
- ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +7 -7
- ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +36 -26
- ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +51 -22
- ibm_watsonx_orchestrate/cli/commands/server/server_command.py +110 -16
- ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +43 -10
- ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +52 -25
- ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +5 -0
- ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_command.py +58 -0
- ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_controller.py +173 -0
- ibm_watsonx_orchestrate/cli/main.py +2 -0
- ibm_watsonx_orchestrate/client/agents/agent_client.py +64 -1
- ibm_watsonx_orchestrate/client/connections/connections_client.py +4 -3
- ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +4 -4
- ibm_watsonx_orchestrate/client/voice_configurations/voice_configurations_client.py +75 -0
- ibm_watsonx_orchestrate/docker/compose-lite.yml +54 -5
- ibm_watsonx_orchestrate/docker/default.env +21 -13
- ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -0
- ibm_watsonx_orchestrate/flow_builder/flows/flow.py +115 -31
- ibm_watsonx_orchestrate/flow_builder/node.py +39 -15
- ibm_watsonx_orchestrate/flow_builder/types.py +114 -25
- ibm_watsonx_orchestrate/run/connections.py +2 -2
- {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/METADATA +1 -1
- {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/RECORD +39 -34
- {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/WHEEL +0 -0
- {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/entry_points.txt +0 -0
- {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/licenses/LICENSE +0 -0
@@ -16,6 +16,7 @@ from ibm_watsonx_orchestrate.cli.commands.knowledge_bases.knowledge_bases_comman
|
|
16
16
|
from ibm_watsonx_orchestrate.cli.commands.toolkit.toolkit_command import toolkits_app
|
17
17
|
from ibm_watsonx_orchestrate.cli.commands.evaluations.evaluations_command import evaluation_app
|
18
18
|
from ibm_watsonx_orchestrate.cli.commands.copilot.copilot_command import copilot_app
|
19
|
+
from ibm_watsonx_orchestrate.cli.commands.voice_configurations.voice_configurations_command import voice_configurations_app
|
19
20
|
from ibm_watsonx_orchestrate.cli.init_helper import init_callback
|
20
21
|
|
21
22
|
import urllib3
|
@@ -35,6 +36,7 @@ app.add_typer(tools_app, name="tools", help='Interact with the tools in your act
|
|
35
36
|
app.add_typer(toolkits_app, name="toolkits", help="Interact with the toolkits in your active env")
|
36
37
|
app.add_typer(knowledge_bases_app, name="knowledge-bases", help="Upload knowledge your agents can search through to your active env")
|
37
38
|
app.add_typer(connections_app, name="connections", help='Interact with the agents in your active env')
|
39
|
+
app.add_typer(voice_configurations_app, name="voice-configs", help="Configure voice providers to enable voice interaction with your agents")
|
38
40
|
app.add_typer(server_app, name="server", help='Manipulate your local Orchestrate Developer Edition server [requires entitlement]')
|
39
41
|
app.add_typer(chat_app, name="chat", help='Launch the chat ui for your local Developer Edition server [requires entitlement]')
|
40
42
|
app.add_typer(models_app, name="models", help='List the available large language models (llms) that can be used in your agent definitions')
|
@@ -1,7 +1,26 @@
|
|
1
1
|
from ibm_watsonx_orchestrate.client.base_api_client import BaseAPIClient, ClientAPIException
|
2
2
|
from typing_extensions import List, Optional
|
3
|
+
from enum import Enum
|
4
|
+
|
3
5
|
from ibm_watsonx_orchestrate.client.utils import is_local_dev
|
4
6
|
from pydantic import BaseModel
|
7
|
+
import time
|
8
|
+
import logging
|
9
|
+
|
10
|
+
logger = logging.getLogger(__name__)
|
11
|
+
|
12
|
+
POLL_INTERVAL = 2
|
13
|
+
MAX_RETRIES = 10
|
14
|
+
|
15
|
+
class ReleaseMode(str, Enum):
|
16
|
+
DEPLOY = "deploy"
|
17
|
+
UNDEPLOY = "undeploy"
|
18
|
+
|
19
|
+
class ReleaseStatus(str, Enum):
|
20
|
+
SUCCESS = "success"
|
21
|
+
NONE = "none"
|
22
|
+
FAILED = "failed"
|
23
|
+
IN_PROGRESS = "in_progress"
|
5
24
|
|
6
25
|
def transform_agents_from_flat_agent_spec(agents: dict | list[dict] ) -> dict | list[dict]:
|
7
26
|
if isinstance(agents,list):
|
@@ -83,7 +102,6 @@ class AgentClient(BaseAPIClient):
|
|
83
102
|
super().__init__(*args, **kwargs)
|
84
103
|
self.base_endpoint = "/orchestrate/agents" if is_local_dev(self.base_url) else "/agents"
|
85
104
|
|
86
|
-
|
87
105
|
def create(self, payload: dict) -> AgentUpsertResponse:
|
88
106
|
response = self._post(self.base_endpoint, data=transform_agents_from_flat_agent_spec(payload))
|
89
107
|
return AgentUpsertResponse.model_validate(response)
|
@@ -120,4 +138,49 @@ class AgentClient(BaseAPIClient):
|
|
120
138
|
def get_drafts_by_ids(self, agent_ids: List[str]) -> List[dict]:
|
121
139
|
formatted_agent_ids = [f"ids={x}" for x in agent_ids]
|
122
140
|
return transform_agents_to_flat_agent_spec(self._get(f"{self.base_endpoint}?{'&'.join(formatted_agent_ids)}&include_hidden=true"))
|
141
|
+
|
142
|
+
def poll_release_status(self, agent_id: str, environment_id: str, mode: str = "deploy") -> bool:
|
143
|
+
expected_status = {
|
144
|
+
ReleaseMode.DEPLOY: ReleaseStatus.SUCCESS,
|
145
|
+
ReleaseMode.UNDEPLOY: ReleaseStatus.NONE
|
146
|
+
}[mode]
|
147
|
+
|
148
|
+
for attempt in range(MAX_RETRIES):
|
149
|
+
try:
|
150
|
+
response = self._get(
|
151
|
+
f"{self.base_endpoint}/{agent_id}/releases/status?environment_id={environment_id}"
|
152
|
+
)
|
153
|
+
except Exception as e:
|
154
|
+
logger.error(f"Polling for Deployment/Undeployment failed on attempt {attempt + 1}: {e}")
|
155
|
+
return False
|
156
|
+
|
157
|
+
if not isinstance(response, dict):
|
158
|
+
logger.warning(f"Invalid response format: {response}")
|
159
|
+
return False
|
160
|
+
|
161
|
+
status = response.get("deployment_status")
|
162
|
+
|
163
|
+
if status == expected_status:
|
164
|
+
return True
|
165
|
+
elif status == "failed":
|
166
|
+
return False
|
167
|
+
elif status == "in_progress":
|
168
|
+
pass
|
169
|
+
|
170
|
+
time.sleep(POLL_INTERVAL)
|
171
|
+
|
172
|
+
logger.warning(f"{mode.capitalize()} status polling timed out")
|
173
|
+
return False
|
174
|
+
|
175
|
+
def deploy(self, agent_id: str, environment_id: str) -> bool:
|
176
|
+
self._post(f"{self.base_endpoint}/{agent_id}/releases", data={"environment_id": environment_id})
|
177
|
+
return self.poll_release_status(agent_id, environment_id, mode=ReleaseMode.DEPLOY)
|
178
|
+
|
179
|
+
def undeploy(self, agent_id: str, version: str, environment_id: str) -> bool:
|
180
|
+
self._post(f"{self.base_endpoint}/{agent_id}/releases/{version}/undeploy")
|
181
|
+
return self.poll_release_status(agent_id, environment_id, mode=ReleaseMode.UNDEPLOY)
|
182
|
+
|
183
|
+
def get_environments_for_agent(self, agent_id: str):
|
184
|
+
return self._get(f"{self.base_endpoint}/{agent_id}/environment")
|
185
|
+
|
123
186
|
|
@@ -19,7 +19,7 @@ class FetchConfigAuthTypes(str, Enum):
|
|
19
19
|
API_KEY_AUTH = ConnectionType.API_KEY_AUTH.value
|
20
20
|
OAUTH2_AUTH_CODE = ConnectionType.OAUTH2_AUTH_CODE.value
|
21
21
|
OAUTH2_IMPLICIT = 'oauth2_implicit'
|
22
|
-
OAUTH2_PASSWORD =
|
22
|
+
OAUTH2_PASSWORD = ConnectionType.OAUTH2_PASSWORD.value
|
23
23
|
OAUTH2_CLIENT_CREDS = ConnectionType.OAUTH2_CLIENT_CREDS.value
|
24
24
|
OAUTH_ON_BEHALF_OF_FLOW = ConnectionType.OAUTH_ON_BEHALF_OF_FLOW.value
|
25
25
|
KEY_VALUE = ConnectionType.KEY_VALUE.value
|
@@ -50,7 +50,7 @@ class GetConfigResponse(BaseModel):
|
|
50
50
|
class GetConnectionResponse(BaseModel):
|
51
51
|
connection_id: str = None
|
52
52
|
app_id: str = None
|
53
|
-
tenant_id: str = None
|
53
|
+
tenant_id: Optional[str] = None
|
54
54
|
|
55
55
|
|
56
56
|
|
@@ -141,7 +141,8 @@ class ConnectionsClient(BaseAPIClient):
|
|
141
141
|
else:
|
142
142
|
return self._get(f"/connections/applications/runtime_credentials?app_id={app_id}&env={env}")
|
143
143
|
except ClientAPIException as e:
|
144
|
-
|
144
|
+
# Returns 400 when app creds exist but runtime cred don't yet exist
|
145
|
+
if e.response.status_code == 404 or e.response.status_code == 400:
|
145
146
|
return None
|
146
147
|
raise e
|
147
148
|
|
@@ -15,10 +15,10 @@ class KnowledgeBaseClient(BaseAPIClient):
|
|
15
15
|
self.base_endpoint = "/orchestrate/knowledge-bases" if is_local_dev(self.base_url) else "/knowledge-bases"
|
16
16
|
|
17
17
|
def create(self, payload: dict) -> dict:
|
18
|
-
return self._post_form_data(f"{self.base_endpoint}/documents", data=
|
18
|
+
return self._post_form_data(f"{self.base_endpoint}/documents", data=payload)
|
19
19
|
|
20
20
|
def create_built_in(self, payload: dict, files: list) -> dict:
|
21
|
-
return self._post_form_data(f"{self.base_endpoint}/documents", data=
|
21
|
+
return self._post_form_data(f"{self.base_endpoint}/documents", data=payload, files=files)
|
22
22
|
|
23
23
|
def get(self) -> dict:
|
24
24
|
return self._get(self.base_endpoint)
|
@@ -38,10 +38,10 @@ class KnowledgeBaseClient(BaseAPIClient):
|
|
38
38
|
return self._get(f"{self.base_endpoint}/{knowledge_base_id}/status")
|
39
39
|
|
40
40
|
def update(self, knowledge_base_id: str, payload: dict) -> dict:
|
41
|
-
return self._patch_form_data(f"{self.base_endpoint}/{knowledge_base_id}/documents", data=
|
41
|
+
return self._patch_form_data(f"{self.base_endpoint}/{knowledge_base_id}/documents", data=payload)
|
42
42
|
|
43
43
|
def update_with_documents(self, knowledge_base_id: str, payload: dict, files: list) -> dict:
|
44
|
-
return self._patch_form_data(f"{self.base_endpoint}/{knowledge_base_id}/documents", data=
|
44
|
+
return self._patch_form_data(f"{self.base_endpoint}/{knowledge_base_id}/documents", data=payload, files=files)
|
45
45
|
|
46
46
|
def delete(self, knowledge_base_id: str,) -> dict:
|
47
47
|
return self._delete(f"{self.base_endpoint}/{knowledge_base_id}")
|
@@ -0,0 +1,75 @@
|
|
1
|
+
from pydantic import ValidationError
|
2
|
+
from ibm_watsonx_orchestrate.agent_builder.voice_configurations import VoiceConfiguration
|
3
|
+
from ibm_watsonx_orchestrate.client.base_api_client import BaseAPIClient, ClientAPIException
|
4
|
+
from ibm_watsonx_orchestrate.client.client_errors import MissingArgument
|
5
|
+
|
6
|
+
import logging
|
7
|
+
logger = logging.getLogger(__name__)
|
8
|
+
|
9
|
+
class VoiceConfigurationsClient(BaseAPIClient):
|
10
|
+
|
11
|
+
def create(self, voice_config: VoiceConfiguration) -> dict:
|
12
|
+
return self._post("/voice_configurations", data=voice_config.model_dump(exclude_none=True))
|
13
|
+
|
14
|
+
|
15
|
+
def update(self, voice_config_id: str, voice_config: VoiceConfiguration) -> dict:
|
16
|
+
if voice_config_id in [None,""]:
|
17
|
+
raise MissingArgument("voice_config_id")
|
18
|
+
return self._patch(f"/voice_configurations/{voice_config_id}", data=voice_config.model_dump(exclude_none=True))
|
19
|
+
|
20
|
+
|
21
|
+
def get_by_id(self, voice_config_id: str) -> dict | None:
|
22
|
+
if voice_config_id in [None,""]:
|
23
|
+
raise MissingArgument("voice_config_id")
|
24
|
+
|
25
|
+
try:
|
26
|
+
response = self._get(f"/voice_configurations/{voice_config_id}")
|
27
|
+
return VoiceConfiguration.model_validate(response)
|
28
|
+
|
29
|
+
except ClientAPIException as e:
|
30
|
+
if e.response.status_code == 404:
|
31
|
+
return None
|
32
|
+
raise e
|
33
|
+
|
34
|
+
except ValidationError as e:
|
35
|
+
logger.error("Recieved unexpected response from server")
|
36
|
+
raise e
|
37
|
+
|
38
|
+
def get_by_name(self, name: str) -> list[VoiceConfiguration]:
|
39
|
+
return self.get_by_names([name])
|
40
|
+
|
41
|
+
def get_by_names(self, names: list[str]) -> list[VoiceConfiguration]:
|
42
|
+
# server will implement query by name, below can be uncommented then
|
43
|
+
# formatted_config_names = [f"names={n}" for n in names]
|
44
|
+
# return self._get(f"/voice_configurations?{"&".join(formatted_config_names)}")
|
45
|
+
config_list = self.list()
|
46
|
+
filtered_list = [cfg for cfg in config_list if cfg.name in names]
|
47
|
+
|
48
|
+
try:
|
49
|
+
return [ VoiceConfiguration.model_validate(cfg) for cfg in filtered_list ]
|
50
|
+
except ValidationError as e:
|
51
|
+
logger.error("Recieved unexpected response from server")
|
52
|
+
raise e
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
def delete(self, voice_config_id: str) -> None:
|
58
|
+
if voice_config_id in [None,""]:
|
59
|
+
raise MissingArgument("voice_config_id")
|
60
|
+
self._delete(f"/voice_configurations/{voice_config_id}")
|
61
|
+
|
62
|
+
|
63
|
+
def list(self) -> list[dict]:
|
64
|
+
try:
|
65
|
+
response = self._get("/voice_configurations")
|
66
|
+
return [VoiceConfiguration.model_validate(x) for x in response.get('voice_configurations',[])]
|
67
|
+
|
68
|
+
except ClientAPIException as e:
|
69
|
+
if e.response.status_code == 404:
|
70
|
+
return []
|
71
|
+
raise e
|
72
|
+
|
73
|
+
except ValidationError as e:
|
74
|
+
logger.error("Recieved unexpected response from server")
|
75
|
+
raise e
|
@@ -32,6 +32,7 @@ services:
|
|
32
32
|
- wxo-applied-migrations:/var/lib/postgresql/applied_migrations
|
33
33
|
command: -c shared_preload_libraries=pgsodium
|
34
34
|
|
35
|
+
|
35
36
|
wxo-server-connection-manager:
|
36
37
|
image: ${CM_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-connections:${CM_TAG:-latest}
|
37
38
|
platform: linux/amd64
|
@@ -102,6 +103,7 @@ services:
|
|
102
103
|
DISMISS_NOTIFICATION_TIMEOUT: 10000
|
103
104
|
STANDALONE: "true"
|
104
105
|
STREAM_TIMEOUT: ${STREAM_TIMEOUT:-120000}
|
106
|
+
WXO_VOICE_URL: http://localhost:9876/v1
|
105
107
|
command: "./StartServer.sh"
|
106
108
|
ports:
|
107
109
|
- "3000:4002"
|
@@ -127,8 +129,11 @@ services:
|
|
127
129
|
IBM_DPS_CACHE_SERVICE: https://wxo-doc-processing-cache:8080
|
128
130
|
DOCPROC_BASE_URL: http://wxo-doc-processing-infra-standalone:9080
|
129
131
|
BUILDER_ASYNC_CALLBACK_ENDPOINT: http://wxo-builder:4025
|
132
|
+
DOCPROC_ENABLED: ${DOCPROC_ENABLED:-false}
|
130
133
|
IS_OBSERVABILITY_FEATURE_ENABLED: "true"
|
131
134
|
ALLOW_INSECURE_TLS: "true"
|
135
|
+
ENABLE_EDIT_PROMPTS: "true"
|
136
|
+
LANGFLOW_ENABLED: ${LANGFLOW_ENABLED:-false}
|
132
137
|
command: 'npm start'
|
133
138
|
ports:
|
134
139
|
- "4025:4025"
|
@@ -260,6 +265,7 @@ services:
|
|
260
265
|
- default
|
261
266
|
- jaeger-network
|
262
267
|
environment:
|
268
|
+
DEFAULT_AGENT_ENABLED: "true"
|
263
269
|
RUNTIME_MANAGER_API_KEY: ${RUNTIME_MANAGER_API_KEY:-testapikey}
|
264
270
|
PIP_NO_CACHE_DIR:
|
265
271
|
JWT_SECRET: ${JWT_SECRET}
|
@@ -342,6 +348,8 @@ services:
|
|
342
348
|
AGENTOPS_API_KEY_AUTH_ENABLED: ${AGENTOPS_API_KEY_AUTH_ENABLED:-false}
|
343
349
|
AGENTOPS_API_KEY: ${AGENTOPS_API_KEY}
|
344
350
|
ES_HOST: http://elasticsearch:9200
|
351
|
+
ORIGIN_HEADER: "internal"
|
352
|
+
LANGFLOW_ENABLED: ${LANGFLOW_ENABLED:-false}
|
345
353
|
|
346
354
|
wxo-server-worker:
|
347
355
|
image: ${WORKER_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-server-conversation_controller:${WORKER_TAG:-latest}
|
@@ -439,6 +447,7 @@ services:
|
|
439
447
|
USE_IBM_TELEMETRY: ${USE_IBM_TELEMETRY:-false}
|
440
448
|
WXO_DEPLOYMENT_PLATFORM: saas
|
441
449
|
CALLBACK_HOST_URL: ${CALLBACK_HOST_URL:-http://wxo-server:4321}
|
450
|
+
LANGFLOW_ENABLED: ${LANGFLOW_ENABLED:-false}
|
442
451
|
|
443
452
|
tools-runtime-manager:
|
444
453
|
image: ${TRM_REGISTRY:-us.icr.io/watson-orchestrate-private}/tools-runtime-manager:${TRM_TAG:-latest}
|
@@ -480,7 +489,8 @@ services:
|
|
480
489
|
STORAGE_S3_REGION: us-east-1
|
481
490
|
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-minioadmin}
|
482
491
|
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-watsonxorchestrate}
|
483
|
-
TEMPUS_HOST_NAME: http://wxo-tempus-runtime:9044
|
492
|
+
TEMPUS_HOST_NAME: http://wxo-tempus-runtime:9044
|
493
|
+
LANGFLOW_ENABLED: ${LANGFLOW_ENABLED:-false}
|
484
494
|
extra_hosts:
|
485
495
|
- "host.docker.internal:host-gateway"
|
486
496
|
|
@@ -512,12 +522,13 @@ services:
|
|
512
522
|
STORAGE_S3_REGION: us-east-1
|
513
523
|
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-minioadmin}
|
514
524
|
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-watsonxorchestrate}
|
525
|
+
LANGFLOW_ENABLED: ${LANGFLOW_ENABLED:-false}
|
515
526
|
|
516
527
|
########################
|
517
528
|
# IBM AGENT-OPS
|
518
529
|
########################
|
519
530
|
elasticsearch:
|
520
|
-
image: docker.elastic.co/elasticsearch/elasticsearch:8.
|
531
|
+
image: docker.elastic.co/elasticsearch/elasticsearch:8.19.0
|
521
532
|
profiles: [ibm-telemetry]
|
522
533
|
environment:
|
523
534
|
- discovery.type=single-node
|
@@ -790,10 +801,12 @@ services:
|
|
790
801
|
LOG_LEVEL: info
|
791
802
|
DOCPROC_ENABLED: ${DOCPROC_ENABLED:-false}
|
792
803
|
DOCPROC_BASE_URL: http://wxo-doc-processing-infra-standalone:9080
|
804
|
+
DOCPROC_OUTPUT_FILE_SERVER_URL: ${DOCPROC_OUTPUT_FILE_SERVER_URL:-http://wxo-server:4321}
|
793
805
|
WO_API_KEY: ${WO_API_KEY}
|
794
806
|
WO_INSTANCE: ${WO_INSTANCE}
|
795
807
|
AUTHORIZATION_URL: ${AUTHORIZATION_URL}
|
796
808
|
WO_AUTH_TYPE: ${WO_AUTH_TYPE}
|
809
|
+
FLOW_CALLBACK_REQUEST_RETRIES: "1"
|
797
810
|
healthcheck:
|
798
811
|
test: curl -k http://localhost:9044/readiness --fail
|
799
812
|
interval: 30s
|
@@ -869,6 +882,19 @@ services:
|
|
869
882
|
PREFLIGHT_MAX_SIZE: 10Mb
|
870
883
|
PREFLIGHT_MAX_PAGES: 600
|
871
884
|
RUNTIME_LIBRARY: "watson_doc_understanding"
|
885
|
+
WXAI_API_KEY: ${WXAI_API_KEY:-}
|
886
|
+
WXAI_IMAGE_DESCRIPTION_MODEL_ID: ${WXAI_IMAGE_DESCRIPTION_MODEL_ID:-mistralai/pixtral-12b}
|
887
|
+
WXAI_IMAGE_DESCRIPTION_PROJECT_ID: ${WXAI_IMAGE_DESCRIPTION_PROJECT_ID:-}
|
888
|
+
WXAI_KVP_MODEL_ID: ${WXAI_KVP_MODEL_ID:-}
|
889
|
+
WXAI_KVP_PROJECT_ID: ${WXAI_KVP_PROJECT_ID:-}
|
890
|
+
WXAI_SEMANTIC_KVP_PROJECT_ID: ${WXAI_SEMANTIC_KVP_PROJECT_ID:-}
|
891
|
+
WXAI_SEMANTIC_KVP_MODEL_ID: ${WXAI_SEMANTIC_KVP_MODEL_ID:-mistralai/pixtral-12b}
|
892
|
+
WXAI_SEMANTIC_KVP_SPACE_ID: ${WXAI_SEMANTIC_KVP_SPACE_ID:-}
|
893
|
+
WXAI_URL: ${WXAI_URL:-}
|
894
|
+
WXAI_USERNAME: ${WXAI_USERNAME:-}
|
895
|
+
WXAI_INSTANCE_ID: ${WXAI_INSTANCE_ID:-}
|
896
|
+
WXAI_VERSION: ${WXAI_VERSION:-5.1}
|
897
|
+
|
872
898
|
profiles:
|
873
899
|
- docproc
|
874
900
|
ports:
|
@@ -997,9 +1023,7 @@ services:
|
|
997
1023
|
SERVICE_NAME: wxo-doc-processing-llm-service
|
998
1024
|
LOG_LEVEL: info
|
999
1025
|
WATSONX_API_ENDPOINT: ${WATSONX_URL:-https://us-south.ml.cloud.ibm.com}
|
1000
|
-
|
1001
|
-
WATSONX_PROJECT_ID: ${WATSONX_PROJECT_ID}
|
1002
|
-
WATSONX_SPACE_ID: ${WATSONX_SPACE_ID}
|
1026
|
+
WXO_SERVER_BASE_URL : http://wxo-server:4321
|
1003
1027
|
IBM_DPS_CACHE_SERVICE: 'wxo-doc-processing-cache:8080'
|
1004
1028
|
profiles:
|
1005
1029
|
- docproc
|
@@ -1092,6 +1116,30 @@ services:
|
|
1092
1116
|
exit 0;
|
1093
1117
|
"
|
1094
1118
|
|
1119
|
+
wxo-server-voice:
|
1120
|
+
image: ${VOICE_CONTROLLER_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-server-voice:${VOICE_CONTROLLER_TAG:-latest}
|
1121
|
+
profiles: [voice]
|
1122
|
+
restart: unless-stopped
|
1123
|
+
ports:
|
1124
|
+
- 9876:8765
|
1125
|
+
environment:
|
1126
|
+
WXO_BASE_DOMAIN_URL: "http://wxo-server:4321"
|
1127
|
+
AI_GATEWAY_URL: "http://ai-gateway:8787"
|
1128
|
+
WXO_ORIGIN_HEADER: "internal"
|
1129
|
+
|
1130
|
+
langflow:
|
1131
|
+
image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/langflowai/${LANGFLOW_IMAGE:-langflow}:${LANGFLOW_TAG:-latest}
|
1132
|
+
profiles: [langflow]
|
1133
|
+
ports:
|
1134
|
+
- 7861:7861
|
1135
|
+
environment:
|
1136
|
+
LANGFLOW_PORT: 7861
|
1137
|
+
LANGFLOW_DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@wxo-server-db:5432/langflow
|
1138
|
+
LANGFLOW_CONFIG_DIR: app/langflow
|
1139
|
+
volumes:
|
1140
|
+
- langflow-data:/app/langflow
|
1141
|
+
|
1142
|
+
|
1095
1143
|
volumes:
|
1096
1144
|
tools:
|
1097
1145
|
driver: local
|
@@ -1124,6 +1172,7 @@ volumes:
|
|
1124
1172
|
wdu-models:
|
1125
1173
|
driver: local
|
1126
1174
|
es_data:
|
1175
|
+
langflow-data:
|
1127
1176
|
|
1128
1177
|
networks:
|
1129
1178
|
default:
|
@@ -57,13 +57,14 @@ EVENT_BROKER_TTL="3600"
|
|
57
57
|
REGISTRY_URL=
|
58
58
|
|
59
59
|
|
60
|
-
|
60
|
+
|
61
|
+
SERVER_TAG=20-08-2025-cf6e342
|
61
62
|
SERVER_REGISTRY=
|
62
63
|
|
63
|
-
WORKER_TAG=
|
64
|
+
WORKER_TAG=20-08-2025-cf6e342
|
64
65
|
WORKER_REGISTRY=
|
65
66
|
|
66
|
-
AI_GATEWAY_TAG=
|
67
|
+
AI_GATEWAY_TAG=20-08-2025-9ed6d40
|
67
68
|
AI_GATEWAY_REGISTRY=
|
68
69
|
|
69
70
|
AGENT_GATEWAY_TAG=29-07-2025
|
@@ -82,16 +83,16 @@ UITAG=31-07-2025
|
|
82
83
|
CM_REGISTRY=
|
83
84
|
CM_TAG=24-07-2025
|
84
85
|
|
85
|
-
TRM_TAG=
|
86
|
+
TRM_TAG=19-08-2025-fe105eb0b950ff304f712a1a5b9fa3cba92d09da
|
86
87
|
TRM_REGISTRY=
|
87
88
|
|
88
|
-
TR_TAG=
|
89
|
+
TR_TAG=19-08-2025-fe105eb0b950ff304f712a1a5b9fa3cba92d09da
|
89
90
|
TR_REGISTRY=
|
90
91
|
|
91
|
-
BUILDER_TAG=
|
92
|
+
BUILDER_TAG=19-08-2025-1a79d34
|
92
93
|
BUILDER_REGISTRY=
|
93
94
|
|
94
|
-
FLOW_RUNTIME_TAG=
|
95
|
+
FLOW_RUNTIME_TAG=18-08-2025-v2
|
95
96
|
FLOW_RUMTIME_REGISTRY=
|
96
97
|
|
97
98
|
|
@@ -104,17 +105,23 @@ JAEGER_PROXY_REGISTRY=
|
|
104
105
|
SOCKET_HANDLER_TAG=29-05-2025
|
105
106
|
SOCKET_HANDLER_REGISTRY=
|
106
107
|
|
107
|
-
CPE_TAG=
|
108
|
+
CPE_TAG=18-08-2025-ae1308e
|
108
109
|
CPE_REGISTRY=
|
109
110
|
|
111
|
+
VOICE_CONTROLLER_TAG=12-08-2025
|
112
|
+
VOICE_CONTROLLER_REGISTRY=
|
113
|
+
|
114
|
+
LANGFLOW_TAG=
|
115
|
+
LANGFLOW_IMAGE=
|
116
|
+
|
110
117
|
# IBM Document Processing
|
111
|
-
WDU_TAG=2.
|
118
|
+
WDU_TAG=2.6.1
|
112
119
|
WDU_REGISTRY=
|
113
120
|
|
114
|
-
DOCPROC_DPS_TAG=
|
115
|
-
DOCPROC_LLMSERVICE_TAG=
|
116
|
-
DOCPROC_CACHE_TAG=
|
117
|
-
DOCPROC_DPI_TAG=
|
121
|
+
DOCPROC_DPS_TAG=20250815-010747-277-173db2a
|
122
|
+
DOCPROC_LLMSERVICE_TAG=20250820-153924-128-55cf4d5
|
123
|
+
DOCPROC_CACHE_TAG=20250814-master-82-cf33f87
|
124
|
+
DOCPROC_DPI_TAG=20250815-004755-273-e65f26b4
|
118
125
|
DOCPROC_REGISTRY=
|
119
126
|
|
120
127
|
# END -- IMAGE REGISTRIES AND TAGS
|
@@ -149,6 +156,7 @@ TOOLS_RUNTIME_MANAGER_BASE_URL="http://tools-runtime-manager:8080"
|
|
149
156
|
CONNECTION_SERVICE_BASE_URL="http://wxo-server-connection-manager:3001"
|
150
157
|
AI_GATEWAY_BASE_URL="http://ai-gateway:8787/v1"
|
151
158
|
AI_GATEWAY_ENABLED=True
|
159
|
+
DEFAULT_AGENT_ENABLED=True
|
152
160
|
AGENT_GATEWAY_URI="http://wxo-agent-gateway:8989"
|
153
161
|
DEFAULT_TENANT_ID=10000000-0000-0000-0000-000000000000
|
154
162
|
ES_USERNAME=elastic
|