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.
Files changed (39) hide show
  1. ibm_watsonx_orchestrate/__init__.py +2 -1
  2. ibm_watsonx_orchestrate/agent_builder/agents/types.py +2 -0
  3. ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +1 -1
  4. ibm_watsonx_orchestrate/agent_builder/connections/connections.py +1 -1
  5. ibm_watsonx_orchestrate/agent_builder/connections/types.py +16 -12
  6. ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +47 -3
  7. ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +18 -15
  8. ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +19 -7
  9. ibm_watsonx_orchestrate/agent_builder/tools/types.py +1 -1
  10. ibm_watsonx_orchestrate/agent_builder/voice_configurations/__init__.py +1 -0
  11. ibm_watsonx_orchestrate/agent_builder/voice_configurations/types.py +98 -0
  12. ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +20 -0
  13. ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +170 -1
  14. ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +7 -7
  15. ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +36 -26
  16. ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +51 -22
  17. ibm_watsonx_orchestrate/cli/commands/server/server_command.py +110 -16
  18. ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +43 -10
  19. ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +52 -25
  20. ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +5 -0
  21. ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_command.py +58 -0
  22. ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_controller.py +173 -0
  23. ibm_watsonx_orchestrate/cli/main.py +2 -0
  24. ibm_watsonx_orchestrate/client/agents/agent_client.py +64 -1
  25. ibm_watsonx_orchestrate/client/connections/connections_client.py +4 -3
  26. ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +4 -4
  27. ibm_watsonx_orchestrate/client/voice_configurations/voice_configurations_client.py +75 -0
  28. ibm_watsonx_orchestrate/docker/compose-lite.yml +54 -5
  29. ibm_watsonx_orchestrate/docker/default.env +21 -13
  30. ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -0
  31. ibm_watsonx_orchestrate/flow_builder/flows/flow.py +115 -31
  32. ibm_watsonx_orchestrate/flow_builder/node.py +39 -15
  33. ibm_watsonx_orchestrate/flow_builder/types.py +114 -25
  34. ibm_watsonx_orchestrate/run/connections.py +2 -2
  35. {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/METADATA +1 -1
  36. {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/RECORD +39 -34
  37. {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/WHEEL +0 -0
  38. {ibm_watsonx_orchestrate-1.9.0b2.dist-info → ibm_watsonx_orchestrate-1.10.0b1.dist-info}/entry_points.txt +0 -0
  39. {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 = '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
- if e.response.status_code == 404:
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={ "knowledge_base" : json.dumps(payload) })
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={ "knowledge_base" : json.dumps(payload) }, files=files)
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={ "knowledge_base" : json.dumps(payload) })
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={ "knowledge_base" : json.dumps(payload) }, files=files)
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.17.5
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
- WATSONX_API_KEY: ${WATSONX_APIKEY}
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
- SERVER_TAG=01-08-2025
60
+
61
+ SERVER_TAG=20-08-2025-cf6e342
61
62
  SERVER_REGISTRY=
62
63
 
63
- WORKER_TAG=01-08-2025-v2
64
+ WORKER_TAG=20-08-2025-cf6e342
64
65
  WORKER_REGISTRY=
65
66
 
66
- AI_GATEWAY_TAG=01-08-2025-v1
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=23-07-2025-3c60549f0bac275de3e5736265a3fd49cdd3a203
86
+ TRM_TAG=19-08-2025-fe105eb0b950ff304f712a1a5b9fa3cba92d09da
86
87
  TRM_REGISTRY=
87
88
 
88
- TR_TAG=23-07-2025-3c60549f0bac275de3e5736265a3fd49cdd3a203
89
+ TR_TAG=19-08-2025-fe105eb0b950ff304f712a1a5b9fa3cba92d09da
89
90
  TR_REGISTRY=
90
91
 
91
- BUILDER_TAG=31-07-2025-d7145cb
92
+ BUILDER_TAG=19-08-2025-1a79d34
92
93
  BUILDER_REGISTRY=
93
94
 
94
- FLOW_RUNTIME_TAG=01-08-2025
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=06-08-2025-b0a20ad
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.5.0
118
+ WDU_TAG=2.6.1
112
119
  WDU_REGISTRY=
113
120
 
114
- DOCPROC_DPS_TAG=20250721-164412-250-503756a
115
- DOCPROC_LLMSERVICE_TAG=20250725-100249-111-51d3e51
116
- DOCPROC_CACHE_TAG=20250723-100852-70-9edc1ab
117
- DOCPROC_DPI_TAG=20250731-155328-257-06879e86
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
@@ -19,6 +19,8 @@ __all__ = [
19
19
  "DocProcInput",
20
20
 
21
21
  "DocProcNode",
22
+ "DocExtNode",
23
+ "DocClassifierNode"
22
24
  "UserNode",
23
25
  "AgentNode",
24
26
  "StartNode",