ibm-watsonx-orchestrate 1.0.1__py3-none-any.whl → 1.1.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.
@@ -5,7 +5,8 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.0.1"
8
+ __version__ = "1.1.0"
9
+
9
10
 
10
11
 
11
12
  from ibm_watsonx_orchestrate.utils.logging.logger import setup_logging
@@ -121,6 +121,7 @@ def tool(
121
121
  _desc = description
122
122
  if description is None and doc is not None:
123
123
  _desc = doc.description
124
+
124
125
 
125
126
  spec = ToolSpec(
126
127
  name=name or fn.__name__,
@@ -150,7 +151,11 @@ def tool(
150
151
 
151
152
  sig = inspect.signature(fn)
152
153
  if not input_schema:
153
- input_schema_model: type[BaseModel] = create_schema_from_function(spec.name, fn, parse_docstring=True)
154
+ try:
155
+ input_schema_model: type[BaseModel] = create_schema_from_function(spec.name, fn, parse_docstring=True)
156
+ except:
157
+ logger.warning("Unable to properly parse parameter descriptions due to incorrectly formatted docstring. This may result in degraded agent performance. To fix this, please ensure the docstring conforms to Google's docstring format.")
158
+ input_schema_model: type[BaseModel] = create_schema_from_function(spec.name, fn, parse_docstring=False)
154
159
  input_schema_json = input_schema_model.model_json_schema()
155
160
  input_schema_json = dereference_refs(input_schema_json)
156
161
 
@@ -165,7 +170,7 @@ def tool(
165
170
  )
166
171
  else:
167
172
  spec.input_schema = input_schema
168
-
173
+
169
174
  _validate_input_schema(spec.input_schema)
170
175
 
171
176
  if not output_schema:
@@ -1,30 +1,25 @@
1
+ import importlib.resources as resources
1
2
  import logging
2
- import sys
3
+ import os
4
+ import platform
3
5
  import subprocess
6
+ import sys
4
7
  import tempfile
5
- from pathlib import Path
6
- import requests
7
8
  import time
8
- import os
9
- import platform
10
-
9
+ from pathlib import Path
11
10
 
12
- import typer
13
- import importlib.resources as resources
14
11
  import jwt
12
+ import requests
13
+ import typer
14
+ from dotenv import dotenv_values
15
15
 
16
- from dotenv import dotenv_values, load_dotenv
17
-
18
- from ibm_watsonx_orchestrate.client.agents.agent_client import AgentClient
19
- from ibm_watsonx_orchestrate.client.analytics.llm.analytics_llm_client import AnalyticsLLMClient, AnalyticsLLMConfig, \
20
- AnalyticsLLMUpsertToolIdentifier
21
16
  from ibm_watsonx_orchestrate.client.utils import instantiate_client, check_token_validity, is_local_dev
22
-
23
- from ibm_watsonx_orchestrate.cli.commands.environment.environment_controller import _login, _decode_token
17
+ from ibm_watsonx_orchestrate.cli.commands.environment.environment_controller import _login
18
+ from ibm_watsonx_orchestrate.cli.config import LICENSE_HEADER, \
19
+ ENV_ACCEPT_LICENSE
24
20
  from ibm_watsonx_orchestrate.cli.config import PROTECTED_ENV_NAME, clear_protected_env_credentials_token, Config, \
25
- AUTH_CONFIG_FILE_FOLDER, AUTH_CONFIG_FILE, AUTH_MCSP_TOKEN_OPT, ENVIRONMENTS_SECTION_HEADER, ENV_WXO_URL_OPT, \
26
- CONTEXT_SECTION_HEADER, CONTEXT_ACTIVE_ENV_OPT, AUTH_SECTION_HEADER
27
- from dotenv import dotenv_values, load_dotenv
21
+ AUTH_CONFIG_FILE_FOLDER, AUTH_CONFIG_FILE, AUTH_MCSP_TOKEN_OPT, AUTH_SECTION_HEADER, USER_ENV_CACHE_HEADER
22
+ from ibm_watsonx_orchestrate.client.agents.agent_client import AgentClient
28
23
 
29
24
  logger = logging.getLogger(__name__)
30
25
 
@@ -52,11 +47,11 @@ def ensure_docker_compose_installed() -> list:
52
47
  typer.echo("Unable to find an installed docker-compose or docker compose")
53
48
  sys.exit(1)
54
49
 
55
- def docker_login(iam_api_key: str, registry_url: str) -> None:
50
+ def docker_login(api_key: str, registry_url: str, username:str = "iamapikey") -> None:
56
51
  logger.info(f"Logging into Docker registry: {registry_url} ...")
57
52
  result = subprocess.run(
58
- ["docker", "login", "-u", "iamapikey", "--password-stdin", registry_url],
59
- input=iam_api_key.encode("utf-8"),
53
+ ["docker", "login", "-u", username, "--password-stdin", registry_url],
54
+ input=api_key.encode("utf-8"),
60
55
  capture_output=True,
61
56
  )
62
57
  if result.returncode != 0:
@@ -64,6 +59,24 @@ def docker_login(iam_api_key: str, registry_url: str) -> None:
64
59
  sys.exit(1)
65
60
  logger.info("Successfully logged in to Docker.")
66
61
 
62
+ def docker_login_by_dev_edition_source(env_dict: dict, source: str) -> None:
63
+ registry_url = env_dict["REGISTRY_URL"]
64
+ if source == "internal":
65
+ iam_api_key = env_dict.get("DOCKER_IAM_KEY")
66
+ if not iam_api_key:
67
+ raise ValueError("DOCKER_IAM_KEY is required in the environment file if WO_DEVELOPER_EDITION_SOURCE is set to 'internal'.")
68
+ docker_login(iam_api_key, registry_url, "iamapikey")
69
+ elif source == "myibm":
70
+ wo_entitlement_key = env_dict.get("WO_ENTITLEMENT_KEY")
71
+ if not wo_entitlement_key:
72
+ raise ValueError("WO_ENTITLEMENT_KEY is required in the environment file.")
73
+ docker_login(wo_entitlement_key, registry_url, "cp")
74
+ elif source == "orchestrate":
75
+ wo_auth_type = env_dict.get("WO_AUTH_TYPE")
76
+ if not wo_auth_type:
77
+ raise ValueError("WO_AUTH_TYPE is required in the environment file if WO_DEVELOPER_EDITION_SOURCE is set to 'orchestrate'.")
78
+ api_key, username = get_docker_cred_by_wo_auth_type(env_dict, wo_auth_type)
79
+ docker_login(api_key, registry_url, username)
67
80
 
68
81
  def get_compose_file() -> Path:
69
82
  with resources.as_file(
@@ -93,9 +106,51 @@ def merge_env(
93
106
  user_env = dotenv_values(str(user_env_path))
94
107
  merged.update(user_env)
95
108
 
96
-
97
109
  return merged
98
110
 
111
+ def get_default_registry_env_vars_by_dev_edition_source(env_dict: dict, source: str) -> dict[str,str]:
112
+ component_registry_var_names = {key for key in env_dict if key.endswith("_REGISTRY")}
113
+
114
+ result = {}
115
+ if source == "internal":
116
+ result["REGISTRY_URL"] = "us.icr.io"
117
+ for name in component_registry_var_names:
118
+ result[name] = "us.icr.io/watson-orchestrate-private"
119
+ elif source == "myibm":
120
+ result["REGISTRY_URL"] = "cp.icr.io"
121
+ for name in component_registry_var_names:
122
+ result[name] = "cp.icr.io/cp/wxo-lite"
123
+ elif source == "orchestrate":
124
+ raise NotImplementedError("The 'orchestrate' source is not implemented yet.")
125
+ # TODO: confirm with Tej about the registry url for orchestrate source
126
+ return result
127
+
128
+ def get_dev_edition_source(env_dict: dict) -> str:
129
+ source = env_dict.get("WO_DEVELOPER_EDITION_SOURCE")
130
+
131
+ if source:
132
+ return source
133
+ if env_dict.get("WO_INSTANCE"):
134
+ return "orchestrate"
135
+ return "myibm"
136
+
137
+ def get_docker_cred_by_wo_auth_type(env_dict: dict, auth_type: str) -> tuple[str, str]:
138
+ if auth_type in {"mcsp", "ibm_iam"}:
139
+ wo_api_key = env_dict.get("WO_API_KEY")
140
+ if not wo_api_key:
141
+ raise ValueError("WO_API_KEY is required in the environment file if the WO_AUTH_TYPE is set to 'mcsp' or 'ibm_iam'.")
142
+ return wo_api_key, "wouser"
143
+ elif auth_type == "cpd":
144
+ wo_api_key = env_dict.get("WO_API_KEY")
145
+ wo_password = env_dict.get("WO_PASSWORD")
146
+ if not wo_api_key and not wo_password:
147
+ raise ValueError("WO_API_KEY or WO_PASSWORD is required in the environment file if the WO_AUTH_TYPE is set to 'cpd'.")
148
+ wo_username = env_dict.get("WO_USERNAME")
149
+ if not wo_username:
150
+ raise ValueError("WO_USERNAME is required in the environment file if the WO_AUTH_TYPE is set to 'cpd'.")
151
+ return wo_api_key or wo_password, wo_username # type: ignore[return-value]
152
+ else:
153
+ raise ValueError(f"Unknown value for WO_AUTH_TYPE: {auth_type}. Must be one of ['mcsp', 'ibm_iam', 'cpd'].")
99
154
 
100
155
  def apply_llm_api_key_defaults(env_dict: dict) -> None:
101
156
  llm_value = env_dict.get("WATSONX_APIKEY")
@@ -138,7 +193,30 @@ def refresh_local_credentials() -> None:
138
193
  clear_protected_env_credentials_token()
139
194
  _login(name=PROTECTED_ENV_NAME, apikey=None)
140
195
 
196
+ NON_SECRET_ENV_ITEMS = {
197
+ "WO_DEVELOPER_EDITION_SOURCE",
198
+ "WO_INSTANCE",
199
+ "USE_SAAS_ML_TOOLS_RUNTIME",
200
+ "WXO_MCSP_EXCHANGE_URL",
201
+ "OPENSOURCE_REGISTRY_PROXY"
202
+ }
203
+ def persist_user_env(env: dict, include_secrets: bool = False) -> None:
204
+ if include_secrets:
205
+ persistable_env = env
206
+ else:
207
+ persistable_env = {k:env[k] for k in NON_SECRET_ENV_ITEMS if k in env}
141
208
 
209
+ cfg = Config()
210
+ cfg.save(
211
+ {
212
+ USER_ENV_CACHE_HEADER: persistable_env
213
+ }
214
+ )
215
+
216
+ def get_persisted_user_env() -> dict | None:
217
+ cfg = Config()
218
+ user_env = cfg.get(USER_ENV_CACHE_HEADER) if cfg.get(USER_ENV_CACHE_HEADER) else None
219
+ return user_env
142
220
 
143
221
  def run_compose_lite(final_env_file: Path, experimental_with_langfuse=False, with_flow_runtime=False) -> None:
144
222
  compose_path = get_compose_file()
@@ -256,12 +334,20 @@ def run_compose_lite_ui(user_env_file: Path) -> bool:
256
334
  compose_path = get_compose_file()
257
335
  compose_command = ensure_docker_compose_installed()
258
336
  ensure_docker_installed()
259
- default_env_path = get_default_env_file()
260
- logger.debug(f"user env file: {user_env_file}")
261
- merged_env_dict = merge_env(
262
- default_env_path,
263
- user_env_file if user_env_file else None
264
- )
337
+
338
+ default_env = read_env_file(get_default_env_file())
339
+ user_env = read_env_file(user_env_file) if user_env_file else {}
340
+ if not user_env:
341
+ user_env = get_persisted_user_env()
342
+
343
+ dev_edition_source = get_dev_edition_source(user_env)
344
+ default_registry_vars = get_default_registry_env_vars_by_dev_edition_source(default_env, source=dev_edition_source)
345
+
346
+ merged_env_dict = {
347
+ **default_env,
348
+ **default_registry_vars,
349
+ **user_env,
350
+ }
265
351
 
266
352
  _login(name=PROTECTED_ENV_NAME)
267
353
  auth_cfg = Config(AUTH_CONFIG_FILE_FOLDER, AUTH_CONFIG_FILE)
@@ -271,21 +357,17 @@ def run_compose_lite_ui(user_env_file: Path) -> bool:
271
357
  tenant_id = token.get('woTenantId', None)
272
358
  merged_env_dict['REACT_APP_TENANT_ID'] = tenant_id
273
359
 
274
-
275
- registry_url = merged_env_dict.get("REGISTRY_URL")
276
- if not registry_url:
277
- logger.error("Error: REGISTRY_URL is required in the environment file.")
278
- sys.exit(1)
279
-
280
360
  agent_client = instantiate_client(AgentClient)
281
361
  agents = agent_client.get()
282
362
  if not agents:
283
363
  logger.error("No agents found for the current environment. Please create an agent before starting the chat.")
284
364
  sys.exit(1)
285
365
 
286
- iam_api_key = merged_env_dict.get("DOCKER_IAM_KEY")
287
- if iam_api_key:
288
- docker_login(iam_api_key, registry_url)
366
+ try:
367
+ docker_login_by_dev_edition_source(merged_env_dict, dev_edition_source)
368
+ except ValueError as ignored:
369
+ # do nothing, as the docker login here is not mandatory
370
+ pass
289
371
 
290
372
  #These are to removed warning and not used in UI component
291
373
  if not 'WATSONX_SPACE_ID' in merged_env_dict:
@@ -436,6 +518,35 @@ def run_compose_lite_logs(final_env_file: Path, is_reset: bool = False) -> None:
436
518
  )
437
519
  sys.exit(1)
438
520
 
521
+ def confirm_accepts_license_agreement(accepts_by_argument: bool):
522
+ cfg = Config()
523
+ accepts_license = cfg.read(LICENSE_HEADER, ENV_ACCEPT_LICENSE)
524
+ if accepts_license != True:
525
+ logger.warning(('''
526
+ By running the following command your machine will install IBM watsonx Orchestrate Developer Edition, which is governed by the following IBM license agreement:
527
+ - * https://www.ibm.com/support/customer/csol/terms/?id=L-YRMZ-PB6MHM&lc=en
528
+ Additionally, the following prerequisite open source programs will be obtained from Docker Hub and will be installed on your machine. Each of the below programs are Separately Licensed Code, and are governed by the separate license agreements identified below, and not by the IBM license agreement:
529
+ * redis (7.2) - https://github.com/redis/redis/blob/7.2.7/COPYING
530
+ * minio - https://github.com/minio/minio/blob/master/LICENSE
531
+ * milvus-io - https://github.com/milvus-io/milvus/blob/master/LICENSE
532
+ * etcd - https://github.com/etcd-io/etcd/blob/main/LICENSE
533
+ * clickhouse-server - https://github.com/ClickHouse/ClickHouse/blob/master/LICENSE
534
+ * langfuse - https://github.com/langfuse/langfuse/blob/main/LICENSE
535
+ After installation, you are solely responsible for obtaining and installing updates and fixes, including security patches, for the above prerequisite open source programs. To update images the customer will run `orchestrate server reset && orchestrate server start -e .env`.
536
+ ''').strip())
537
+ if not accepts_by_argument:
538
+ result = input('\nTo accept the terms and conditions of the IBM license agreement and the Separately Licensed Code licenses above please enter "I accept": ')
539
+ else:
540
+ result = None
541
+ if result == 'I accept' or accepts_by_argument:
542
+ cfg.write(LICENSE_HEADER, ENV_ACCEPT_LICENSE, True)
543
+ else:
544
+ logger.error('The terms and conditions were not accepted, exiting.')
545
+ exit(1)
546
+
547
+
548
+
549
+
439
550
  @server_app.command(name="start")
440
551
  def server_start(
441
552
  user_env_file: str = typer.Option(
@@ -454,33 +565,46 @@ def server_start(
454
565
  help='Option to start server with tempus-runtime.',
455
566
  hidden=True
456
567
  )
568
+ ,
569
+ persist_env_secrets: bool = typer.Option(
570
+ False,
571
+ '--persist-env-secrets', '-p',
572
+ help='Option to store secret values from the provided env file in the config file (~/.config/orchestrate/config.yaml)',
573
+ hidden=True
574
+ ),
575
+ accept_terms_and_conditions: bool = typer.Option(
576
+ False,
577
+ "--accept-terms-and-conditions",
578
+ help="By providing this flag you accept the terms and conditions outlined in the logs on server start."
579
+ ),
457
580
  ):
581
+ confirm_accepts_license_agreement(accept_terms_and_conditions)
582
+
458
583
  if user_env_file and not Path(user_env_file).exists():
459
584
  logger.error(f"Error: The specified environment file '{user_env_file}' does not exist.")
460
585
  sys.exit(1)
461
586
  ensure_docker_installed()
462
587
 
463
- default_env_path = get_default_env_file()
588
+ default_env = read_env_file(get_default_env_file())
589
+ user_env = read_env_file(user_env_file) if user_env_file else {}
590
+ persist_user_env(user_env, include_secrets=persist_env_secrets)
591
+ dev_edition_source = get_dev_edition_source(user_env)
592
+ default_registry_vars = get_default_registry_env_vars_by_dev_edition_source(default_env, source=dev_edition_source)
464
593
 
465
- merged_env_dict = merge_env(
466
- default_env_path,
467
- Path(user_env_file) if user_env_file else None
468
- )
594
+ merged_env_dict = {
595
+ **default_env,
596
+ **default_registry_vars,
597
+ **user_env,
598
+ }
469
599
 
470
600
  merged_env_dict['DBTAG'] = get_dbtag_from_architecture(merged_env_dict=merged_env_dict)
471
601
 
472
- iam_api_key = merged_env_dict.get("DOCKER_IAM_KEY")
473
- if not iam_api_key:
474
- logger.error("Error: DOCKER_IAM_KEY is required in the environment file.")
475
- sys.exit(1)
476
-
477
- registry_url = merged_env_dict.get("REGISTRY_URL")
478
- if not registry_url:
479
- logger.error("Error: REGISTRY_URL is required in the environment file.")
602
+ try:
603
+ docker_login_by_dev_edition_source(merged_env_dict, dev_edition_source)
604
+ except ValueError as e:
605
+ logger.error(f"Error: {e}")
480
606
  sys.exit(1)
481
607
 
482
- docker_login(iam_api_key, registry_url)
483
-
484
608
  apply_llm_api_key_defaults(merged_env_dict)
485
609
 
486
610
 
@@ -511,6 +635,9 @@ def server_start(
511
635
 
512
636
  logger.info(f"You can run `orchestrate env activate local` to set your environment or `orchestrate chat start` to start the UI service and begin chatting.")
513
637
 
638
+ if experimental_with_langfuse:
639
+ logger.info(f"You can access the observability platform Langfuse at http://localhost:3010, username: orchestrate@ibm.com, password: orchestrate")
640
+
514
641
  if with_flow_runtime:
515
642
  logger.info(f"Starting with flow runtime")
516
643
 
@@ -275,14 +275,8 @@ def import_python_tool(file: str, requirements_file: str = None, app_id: List[st
275
275
  resolved_requirements_file = get_resolved_py_tool_reqs_file(tool_file=file, requirements_file=requirements_file,
276
276
  package_root=resolved_package_root)
277
277
 
278
- if resolved_requirements_file is None:
279
- logger.warning(f"No requirements file.")
280
-
281
- if resolved_requirements_file != requirements_file:
282
- logger.info(f"Resolved Requirements file: \"{resolved_requirements_file}\"")
283
-
284
- else:
285
- logger.info(f"Requirements file: \"{requirements_file}\"")
278
+ if resolved_requirements_file is not None:
279
+ logger.info(f"Using requirement file: \"{resolved_requirements_file}\"")
286
280
 
287
281
  if resolved_requirements_file is not None:
288
282
  try:
@@ -472,7 +466,7 @@ class ToolsController:
472
466
  raise typer.BadParameter(f"Symbolic links in packages are not supported. - {path_str}")
473
467
 
474
468
  try:
475
- zip_tool_artifacts.write(path_str, arcname=path_str[len(str(Path(resolved_package_root))) + 1:])
469
+ zip_tool_artifacts.write(path_str, arcname=str(Path(path_str).relative_to(Path(resolved_package_root))))
476
470
 
477
471
  except Exception as ex:
478
472
  logger.error(f"Could not write file {path_str} to artifact. {ex}")
@@ -12,6 +12,8 @@ AUTH_SECTION_HEADER = "auth"
12
12
  CONTEXT_SECTION_HEADER = "context"
13
13
  ENVIRONMENTS_SECTION_HEADER = "environments"
14
14
  PYTHON_REGISTRY_HEADER = "python_registry"
15
+ USER_ENV_CACHE_HEADER = "cached_user_env"
16
+ LICENSE_HEADER = "license"
15
17
 
16
18
  # Option Names
17
19
  AUTH_MCSP_API_KEY_OPT = "wxo_mcsp_api_key"
@@ -24,6 +26,7 @@ ENV_WXO_URL_OPT = "wxo_url"
24
26
  ENV_IAM_URL_OPT = "iam_url"
25
27
  PROTECTED_ENV_NAME = "local"
26
28
  ENV_AUTH_TYPE = "auth_type"
29
+ ENV_ACCEPT_LICENSE = 'accepts_license_agreements'
27
30
 
28
31
  DEFAULT_LOCAL_SERVICE_URL = "http://localhost:4321"
29
32
  CHAT_UI_PORT = "3000"
@@ -40,7 +43,8 @@ DEFAULT_CONFIG_FILE_CONTENT = {
40
43
  PROTECTED_ENV_NAME: {
41
44
  ENV_WXO_URL_OPT: DEFAULT_LOCAL_SERVICE_URL
42
45
  }
43
- }
46
+ },
47
+ USER_ENV_CACHE_HEADER: {}
44
48
  }
45
49
 
46
50
  AUTH_CONFIG_FILE_FOLDER = f"{os.path.expanduser('~')}/.cache/orchestrate"
@@ -18,15 +18,15 @@ app = typer.Typer(
18
18
  )
19
19
  app.add_typer(login_app)
20
20
  app.add_typer(environment_app, name="env", help='Add, remove, or select the activate env other commands will interact with (either your local server or a production instance)')
21
- app.add_typer(tools_app, name="tools", help='Interact with the tools in your active env')
22
21
  app.add_typer(agents_app, name="agents", help='Interact with the agents in your active env')
22
+ app.add_typer(tools_app, name="tools", help='Interact with the tools in your active env')
23
+ app.add_typer(knowledge_bases_app, name="knowledge-bases", help="Upload knowledge your agents can search through to your active env")
23
24
  app.add_typer(connections_app, name="connections", help='Interact with the agents in your active env')
24
- app.add_typer(server_app, name="server", help='Manipulate your local wxo lite server [requires docker pull credentials]')
25
- app.add_typer(chat_app, name="chat", help='Launch the chat ui for your local list wxo lite server [requires docker pull credentials]')
25
+ app.add_typer(server_app, name="server", help='Manipulate your local Orchestrate Developer Edition server [requires an Entitlement]')
26
+ app.add_typer(chat_app, name="chat", help='Launch the chat ui for your local Developer Edition server [requires docker pull credentials]')
26
27
  app.add_typer(models_app, name="models", help='List the available large language models (llms) that can be used in your agent definitions')
28
+ app.add_typer(channel_app, name="channels", help="Configure channels where your agent can exist on (such as embedded webchat)")
27
29
  app.add_typer(settings_app, name="settings", help='Configure the settings for your active env')
28
- app.add_typer(channel_app, name="channels")
29
- app.add_typer(knowledge_bases_app, name="knowledge-bases")
30
30
 
31
31
  if __name__ == "__main__":
32
32
  app()
@@ -13,7 +13,7 @@ services:
13
13
  command: redis-server --loglevel warning
14
14
 
15
15
  wxo-server-db:
16
- image: us.icr.io/${DB_REGISTRY:-watson-orchestrate-private}/wxo-server-db:${DBTAG:-latest}
16
+ image: ${DB_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-server-db:${DBTAG:-latest}
17
17
  restart: unless-stopped
18
18
  environment:
19
19
  POSTGRES_USER: ${POSTGRES_USER:-postgres}
@@ -32,7 +32,7 @@ services:
32
32
  command: -c shared_preload_libraries=pgsodium
33
33
 
34
34
  wxo-server-connection-manager:
35
- image: us.icr.io/${CM_REGISTRY:-watson-orchestrate-private}/wxo-connections:${CM_TAG:-latest}
35
+ image: ${CM_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-connections:${CM_TAG:-latest}
36
36
  platform: linux/amd64
37
37
  restart: unless-stopped
38
38
  environment:
@@ -44,12 +44,13 @@ services:
44
44
  DB_PORT: ${DB_PORT:-5432}
45
45
  DB_ENCRYPTION_KEY: abc
46
46
  WXO_SERVER_URL: http://wxo-server:4321
47
- MAX_POOL: 10
47
+ MAX_POOL: 60
48
+ DEPLOYMENT_MODE: laptop
48
49
  ports:
49
50
  - 3001:3001
50
51
 
51
52
  ui:
52
- image: us.icr.io/${UI_REGISTRY:-watson-orchestrate-private}/wxo-chat:${UITAG:-latest}
53
+ image: ${UI_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-chat:${UITAG:-latest}
53
54
  platform: linux/amd64
54
55
  restart: unless-stopped
55
56
  environment:
@@ -74,6 +75,7 @@ services:
74
75
  MAX_FILE_UPLOAD_SIZE_BYTES_EXCEL: 1048576
75
76
  VCAP_APP_HOST: localhost
76
77
  DEPLOYMENT_PLATFORM: laptop
78
+ CONNECTION_MANAGER_URL: http://localhost:3001
77
79
  DISMISS_NOTIFICATION_TIMEOUT: 10000
78
80
  STANDALONE: "true"
79
81
  STREAM_TIMEOUT: ${STREAM_TIMEOUT:-120000}
@@ -87,7 +89,7 @@ services:
87
89
  - ui-data:/data
88
90
 
89
91
  wxo-builder:
90
- image: us.icr.io/${BUILDER_REGISTRY:-watson-orchestrate-private}/wxo-builder:${BUILDER_TAG:-latest}
92
+ image: ${BUILDER_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-builder:${BUILDER_TAG:-latest}
91
93
  platform: linux/amd64
92
94
  restart: unless-stopped
93
95
  environment:
@@ -199,7 +201,7 @@ services:
199
201
  - wxo-server-redis
200
202
 
201
203
  wxo-server:
202
- image: us.icr.io/${SERVER_REGISTRY:-watson-orchestrate-private}/wxo-server-server:${SERVER_TAG:-latest}
204
+ image: ${SERVER_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-server-server:${SERVER_TAG:-latest}
203
205
  platform: linux/amd64
204
206
  restart: unless-stopped
205
207
  ports:
@@ -294,7 +296,7 @@ services:
294
296
  MILVUS_PASSWORD: Milvus
295
297
 
296
298
  wxo-server-worker:
297
- image: us.icr.io/${WORKER_REGISTRY:-watson-orchestrate-private}/wxo-server-conversation_controller:${WORKER_TAG:-latest}
299
+ image: ${WORKER_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-server-conversation_controller:${WORKER_TAG:-latest}
298
300
  platform: linux/amd64
299
301
  restart: unless-stopped
300
302
  depends_on:
@@ -372,7 +374,7 @@ services:
372
374
  MILVUS_PASSWORD: Milvus
373
375
 
374
376
  tools-runtime-manager:
375
- image: us.icr.io/${TRM_REGISTRY:-watson-orchestrate-private}/tools-runtime-manager:${TRM_TAG:-latest}
377
+ image: ${TRM_REGISTRY:-us.icr.io/watson-orchestrate-private}/tools-runtime-manager:${TRM_TAG:-latest}
376
378
  platform: linux/amd64
377
379
  restart: unless-stopped
378
380
  ports:
@@ -409,7 +411,7 @@ services:
409
411
  - "host.docker.internal:host-gateway"
410
412
 
411
413
  tools-runtime:
412
- image: us.icr.io/${TR_REGISTRY:-watson-orchestrate-private}/tools-runtime:${TR_TAG:-latest}
414
+ image: ${TR_REGISTRY:-us.icr.io/watson-orchestrate-private}/tools-runtime:${TR_TAG:-latest}
413
415
  platform: linux/amd64
414
416
  ports:
415
417
  - "8000:8000"
@@ -527,7 +529,7 @@ services:
527
529
 
528
530
 
529
531
  wxo-tempus-runtime:
530
- image: us.icr.io/watson-orchestrate-private/wxo-tempus-runtime:${FLOW_RUNTIME_TAG:-latest}
532
+ image: ${FLOW_RUMTIME_REGISTRY:-us.icr.io/watson-orchestrate-private}/wxo-tempus-runtime:${FLOW_RUNTIME_TAG:-latest}
531
533
  restart: unless-stopped
532
534
  platform: linux/amd64
533
535
  profiles: [with-tempus-runtime]
@@ -1,4 +1,3 @@
1
- REGISTRY_URL=us.icr.io
2
1
  #DOCKER_IAM_KEY=dummy #Must Define in env
3
2
  #You can generate any JWT_SECRET with python -c 'import secrets; print(secrets.token_hex(32))'
4
3
  JWT_SECRET=11759cbc89dbec64956715e10a854eb38f8b7a1775bdf68142786170f5e8b5b2
@@ -47,35 +46,39 @@ CELERY_RESULTS_TTL="3600"
47
46
  EVENT_BROKER_TTL="-1"
48
47
 
49
48
  # START -- IMAGE REGISTRIES AND TAGS
50
- SERVER_TAG=29-04-2025
51
- SERVER_REGISTRY=watson-orchestrate-private
49
+ # THE VALUES FOR REGISTRY_URL AND *_REGISTRY ARE NOT SET HERE; THEY ARE EITHER PROVIDED BY THE USER OR DETERMINED AT RUNTIME BASED ON WO_DEVELOPER_EDITION_SOURCE.
50
+ REGISTRY_URL=
52
51
 
53
- WORKER_TAG=29-04-2025
54
- WORKER_REGISTRY=watson-orchestrate-private
52
+ SERVER_TAG=02-05-2025
53
+ SERVER_REGISTRY=
55
54
 
56
- DB_REGISTRY=watson-orchestrate-private
55
+ WORKER_TAG=01-05-2025
56
+ WORKER_REGISTRY=
57
+
58
+ DB_REGISTRY=
57
59
  # If you build multiarch set all three of these to the same, we have a pr against main
58
60
  # to not have this separation, but we can merge it later
59
- DBTAG=29-04-2025
60
- AMDDBTAG=22-04-2025
61
- ARM64DBTAG=22-04-2025
61
+ DBTAG=01-05-2025
62
+ AMDDBTAG=01-05-2025
63
+ ARM64DBTAG=01-05-2025
62
64
 
63
- UI_REGISTRY=watson-orchestrate-private
64
- UITAG=29-04-2025
65
+ UI_REGISTRY=
66
+ UITAG=01-05-2025
65
67
 
66
- CM_REGISTRY=watson-orchestrate-private
68
+ CM_REGISTRY=
67
69
  CM_TAG=30-04-2025
68
70
 
69
- TRM_TAG=30-04-2025
70
- TRM_REGISTRY=watson-orchestrate-private
71
+ TRM_TAG=01-05-2025
72
+ TRM_REGISTRY=
71
73
 
72
- TR_TAG=30-04-2025
73
- TR_REGISTRY=watson-orchestrate-private
74
+ TR_TAG=01-05-2025
75
+ TR_REGISTRY=
74
76
 
75
- BUILDER_REGISTRY=watson-orchestrate-private
76
- BUILDER_TAG=29-04-2025
77
+ BUILDER_REGISTRY=
78
+ BUILDER_TAG=02-05-2025
77
79
 
78
80
  FLOW_RUNTIME_TAG=31-03-2025
81
+ FLOW_RUMTIME_REGISTRY=
79
82
 
80
83
  # END -- IMAGE REGISTRIES AND TAGS
81
84
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ibm-watsonx-orchestrate
3
- Version: 1.0.1
3
+ Version: 1.1.0
4
4
  Summary: IBM watsonx.orchestrate SDK
5
5
  Author-email: IBM <support@ibm.com>
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- ibm_watsonx_orchestrate/__init__.py,sha256=SrlQDGttogEX9VFQltBr-eZPkFA_rUB44zQv2zVKDN4,424
1
+ ibm_watsonx_orchestrate/__init__.py,sha256=91p2cfiBwxyluyBwQs2LrncECszeZvkEMadULPl-Q1o,425
2
2
  ibm_watsonx_orchestrate/agent_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  ibm_watsonx_orchestrate/agent_builder/agents/__init__.py,sha256=v4G0MGh11eOCkUJP_4AMOcFgzW14oE41G3iFp7G2vvw,376
4
4
  ibm_watsonx_orchestrate/agent_builder/agents/agent.py,sha256=PcBg2dRi-IOzvl24u8fa3B0jLaM5hzgkpTS8k56L9Ag,919
@@ -14,13 +14,13 @@ ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py,sha256=yvtf4zM0Ms
14
14
  ibm_watsonx_orchestrate/agent_builder/tools/__init__.py,sha256=adkYX0wgB-RKFCUBw6LPJhNVelUjUdsxipGPk2ghLns,479
15
15
  ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py,sha256=unJBOJUY8DAq3T3YX5d1H5KehJUCjObAdpGLVoWIfzw,1156
16
16
  ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py,sha256=GD2yQkBSRHcnyq1LqA3crfo05rruqCj9vBS9xVDR2r0,14738
17
- ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py,sha256=wvJVC4VJuedkld_JFib1Le3o958bIvo7qhBr0VEI7wc,7940
17
+ ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py,sha256=gh38bToYRnoqmsoR7pHCwqQTI6ENbxOPOV5aVSqECrg,8359
18
18
  ibm_watsonx_orchestrate/agent_builder/tools/types.py,sha256=lA_BxWR_vQ0KTGYh3V0LPtNx9jG-IhwuptFf-VzhZAk,5280
19
19
  ibm_watsonx_orchestrate/agent_builder/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  ibm_watsonx_orchestrate/agent_builder/utils/pydantic_utils.py,sha256=QEanM6FpkmntvS02whdhWx1d4v6zT_1l9ipEbfTgHs8,7623
21
21
  ibm_watsonx_orchestrate/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- ibm_watsonx_orchestrate/cli/config.py,sha256=v-Yse4QnjEFrs_sT90tjL86BRsmp1LDn2YJbyikGWQY,8018
23
- ibm_watsonx_orchestrate/cli/main.py,sha256=AZtBEb1Dm_gh1uo98AnMo-D_LKhsLIUrRx-xJFnprog,2177
22
+ ibm_watsonx_orchestrate/cli/config.py,sha256=C_iSP6WSb5SO6cVPTueQ9lEX16gYOLXD12cKXD6w_KQ,8168
23
+ ibm_watsonx_orchestrate/cli/main.py,sha256=I_7qACre-Q6yr4FXPD_BLgJYHRqXo_NDXA5aS9rQUqA,2352
24
24
  ibm_watsonx_orchestrate/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py,sha256=GVHM1wv28zGzOcc__3BXHt0Y5NXZuOr7PH8exwVqn-o,6640
26
26
  ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py,sha256=mOoBwLltv5dpGdawoyXClUIsO3bIpZLOXrIXZ7Cney4,27920
@@ -39,7 +39,7 @@ ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py,
39
39
  ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py,sha256=mK9rMzslwIYDx8ebUs7QHVYAak6xm830_pKu3xH6F-s,8245
40
40
  ibm_watsonx_orchestrate/cli/commands/login/login_command.py,sha256=xArMiojoozg7Exn6HTpbTcjDO2idZRA-y0WV-_Ic1Sk,651
41
41
  ibm_watsonx_orchestrate/cli/commands/models/models_command.py,sha256=lxh0YpATogJRroHItwVuHmsZlHctVzWw_dEWkJlbwOI,4893
42
- ibm_watsonx_orchestrate/cli/commands/server/server_command.py,sha256=BRUUsZQddPSTSFQywFdJkqKtcxcWFwbIOf11WLx7sTQ,21976
42
+ ibm_watsonx_orchestrate/cli/commands/server/server_command.py,sha256=fleb0JwH1PJ67M4ArL5l4vxoJAK1mtsIRFjHWSsKenI,28774
43
43
  ibm_watsonx_orchestrate/cli/commands/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py,sha256=CzXRkd-97jXyS6LtaaNtMah-aZu0919dYl-mDwzGThc,344
45
45
  ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -47,7 +47,7 @@ ibm_watsonx_orchestrate/cli/commands/settings/observability/observability_comman
47
47
  ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_command.py,sha256=Wa0L8E44EdxH9LdOvmnluLk_ApJVfTLauNOC1kV4W8k,6515
49
49
  ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py,sha256=2GK5AKwEYXsOZaASG15J8yNIPakI0NYkSXBTkeuHj6s,3343
50
- ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py,sha256=vjOncBJ3K7hGaEo-SjzURm_DZ_mToTithwuuzkjn82M,26468
50
+ ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py,sha256=69gypDPFh-mOdRl-3xExu6rIzcnxKZyKsCr_ZD4qTwo,26292
51
51
  ibm_watsonx_orchestrate/cli/commands/tools/types.py,sha256=_md0GEa_cTH17NO_moWDY_LNdFvyEFQ1UVB9_FltYiA,173
52
52
  ibm_watsonx_orchestrate/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  ibm_watsonx_orchestrate/client/base_api_client.py,sha256=0ozLUudIrQH0RTdKaX0Y5c35FRNZPTemaAp71AsoMsQ,4410
@@ -69,8 +69,8 @@ ibm_watsonx_orchestrate/client/connections/connections_client.py,sha256=aenYRfyw
69
69
  ibm_watsonx_orchestrate/client/connections/utils.py,sha256=XqgYoiehiqIZ-LnduIAiJ9DIIF7IR7QvkKTc9784Ii0,1326
70
70
  ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py,sha256=U-pG_H0I8992f0V13Li_e1dksKp54MrYX3X9bvr-09w,2181
71
71
  ibm_watsonx_orchestrate/client/tools/tool_client.py,sha256=pEKOBH488YbLVc71ucucX0rr8YoulvDCxejuyWd0K8s,1588
72
- ibm_watsonx_orchestrate/docker/compose-lite.yml,sha256=T_d2xi20fNX8fwByhkAErXf21BLIWz-F2alsvvWhD9c,24575
73
- ibm_watsonx_orchestrate/docker/default.env,sha256=0dGbBljxmmxOxEGNP1vgVlQ9dxv9Ii6h_3p0QviEtnY,4639
72
+ ibm_watsonx_orchestrate/docker/compose-lite.yml,sha256=OTiVtPVrgKOyY9YuEvkkR_dytbhqKfSiKM3yMxahlS0,24683
73
+ ibm_watsonx_orchestrate/docker/default.env,sha256=yV2hRFzpCNYs8UVMHQ0HA__rlITmJObXJvF2PjwvoUo,4609
74
74
  ibm_watsonx_orchestrate/docker/start-up.sh,sha256=LTtwHp0AidVgjohis2LXGvZnkFQStOiUAxgGABOyeUI,1811
75
75
  ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl,sha256=Hi3-owh5OM0Jz2ihX9nLoojnr7Ky1TV-GelyqLcewLE,2047417
76
76
  ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0.tar.gz,sha256=e5T-q7XPAtiCyQljwZp6kk3Q_4Tg6y5sijHTkscmqqQ,2025466
@@ -82,8 +82,8 @@ ibm_watsonx_orchestrate/utils/utils.py,sha256=3JWk1J9A04yVZeetE3TQH82I53Sn20KvU_
82
82
  ibm_watsonx_orchestrate/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  ibm_watsonx_orchestrate/utils/logging/logger.py,sha256=FzeGnidXAjC7yHrvIaj4KZPeaBBSCniZFlwgr5yV3oA,1037
84
84
  ibm_watsonx_orchestrate/utils/logging/logging.yaml,sha256=9_TKfuFr1barnOKP0fZT5D6MhddiwsXVTFjtRbcOO5w,314
85
- ibm_watsonx_orchestrate-1.0.1.dist-info/METADATA,sha256=HAjcx8665Xir9Y1n3SkqrK1anhiDNs3bMvIItdHd1dY,1251
86
- ibm_watsonx_orchestrate-1.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
87
- ibm_watsonx_orchestrate-1.0.1.dist-info/entry_points.txt,sha256=SfIT02-Jen5e99OcLhzbcM9Bdyf8SGVOCtnSplgZdQI,69
88
- ibm_watsonx_orchestrate-1.0.1.dist-info/licenses/LICENSE,sha256=Shgxx7hTdCOkiVRmfGgp_1ISISrwQD7m2f0y8Hsapl4,1083
89
- ibm_watsonx_orchestrate-1.0.1.dist-info/RECORD,,
85
+ ibm_watsonx_orchestrate-1.1.0.dist-info/METADATA,sha256=Zk_dfo1Tu9kjiiJLQDIY1YLIkFlAQW1DwLVSdJamLWg,1251
86
+ ibm_watsonx_orchestrate-1.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
87
+ ibm_watsonx_orchestrate-1.1.0.dist-info/entry_points.txt,sha256=SfIT02-Jen5e99OcLhzbcM9Bdyf8SGVOCtnSplgZdQI,69
88
+ ibm_watsonx_orchestrate-1.1.0.dist-info/licenses/LICENSE,sha256=Shgxx7hTdCOkiVRmfGgp_1ISISrwQD7m2f0y8Hsapl4,1083
89
+ ibm_watsonx_orchestrate-1.1.0.dist-info/RECORD,,