ibm-watsonx-orchestrate 1.0.0__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,24 +5,11 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.0.0"
8
+ __version__ = "1.1.0"
9
9
 
10
10
 
11
11
 
12
- try:
13
- from importlib.metadata import version
14
-
15
- ver = version(pkg_name)
16
-
17
- except (ModuleNotFoundError, AttributeError):
18
- from importlib_metadata import version as imp_lib_ver
19
-
20
- ver = imp_lib_ver(pkg_name)
21
-
22
- from ibm_watsonx_orchestrate.client.client import Client
23
12
  from ibm_watsonx_orchestrate.utils.logging.logger import setup_logging
24
13
 
25
- Client.version = ver
26
- __version__ = ver
27
14
  setup_logging()
28
15
 
@@ -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
 
@@ -31,6 +31,8 @@ from ibm_watsonx_orchestrate.client.connections import get_connections_client, g
31
31
  from ibm_watsonx_orchestrate.client.utils import instantiate_client
32
32
  from ibm_watsonx_orchestrate.utils.utils import sanatize_app_id
33
33
 
34
+ from ibm_watsonx_orchestrate import __version__
35
+
34
36
  logger = logging.getLogger(__name__)
35
37
 
36
38
  __supported_characters_pattern = re.compile("^(\\w|_)+$")
@@ -273,14 +275,8 @@ def import_python_tool(file: str, requirements_file: str = None, app_id: List[st
273
275
  resolved_requirements_file = get_resolved_py_tool_reqs_file(tool_file=file, requirements_file=requirements_file,
274
276
  package_root=resolved_package_root)
275
277
 
276
- if resolved_requirements_file is None:
277
- logger.warning(f"No requirements file.")
278
-
279
- if resolved_requirements_file != requirements_file:
280
- logger.info(f"Resolved Requirements file: \"{resolved_requirements_file}\"")
281
-
282
- else:
283
- 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}\"")
284
280
 
285
281
  if resolved_requirements_file is not None:
286
282
  try:
@@ -470,7 +466,7 @@ class ToolsController:
470
466
  raise typer.BadParameter(f"Symbolic links in packages are not supported. - {path_str}")
471
467
 
472
468
  try:
473
- 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))))
474
470
 
475
471
  except Exception as ex:
476
472
  logger.error(f"Could not write file {path_str} to artifact. {ex}")
@@ -489,7 +485,7 @@ class ToolsController:
489
485
  cfg = Config()
490
486
  registry_type = cfg.read(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT) or DEFAULT_CONFIG_FILE_CONTENT[PYTHON_REGISTRY_HEADER][PYTHON_REGISTRY_TYPE_OPT]
491
487
 
492
- version = importlib.import_module('ibm_watsonx_orchestrate').__version__
488
+ version = __version__
493
489
  if registry_type == RegistryType.LOCAL:
494
490
  requirements.append(f"/packages/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl\n")
495
491
  elif registry_type == RegistryType.PYPI:
@@ -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"
@@ -33,14 +36,15 @@ DEFAULT_CONFIG_FILE = "config.yaml"
33
36
  DEFAULT_CONFIG_FILE_CONTENT = {
34
37
  CONTEXT_SECTION_HEADER: {CONTEXT_ACTIVE_ENV_OPT: None},
35
38
  PYTHON_REGISTRY_HEADER: {
36
- PYTHON_REGISTRY_TYPE_OPT: str(RegistryType.TESTPYPI),
39
+ PYTHON_REGISTRY_TYPE_OPT: str(RegistryType.PYPI),
37
40
  PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT: None
38
41
  },
39
42
  ENVIRONMENTS_SECTION_HEADER: {
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()
@@ -37,7 +37,7 @@ class Credentials:
37
37
  ) -> None:
38
38
  env_credentials = Credentials._get_values_from_env_vars()
39
39
  self.url = url
40
- self.iam_url = iam_url if iam_url is not None else "https://iam.platform.saas.ibm.com"
40
+ self.iam_url = iam_url
41
41
  self.api_key = api_key
42
42
  self.token = token
43
43
  self.local_global_token = None
@@ -1,7 +1,8 @@
1
1
  from ibm_watsonx_orchestrate.client.base_api_client import BaseAPIClient
2
2
  import json
3
3
  from typing_extensions import List
4
- from ibm_watsonx_orchestrate.client.base_api_client import ClientAPIException
4
+ from ibm_watsonx_orchestrate.client.utils import is_local_dev
5
+
5
6
 
6
7
 
7
8
  class KnowledgeBaseClient(BaseAPIClient):
@@ -9,37 +10,41 @@ class KnowledgeBaseClient(BaseAPIClient):
9
10
  Client to handle CRUD operations for Native Knowledge Base endpoint
10
11
  """
11
12
 
13
+ def __init__(self, *args, **kwargs):
14
+ super().__init__(*args, **kwargs)
15
+ self.base_endpoint = "/orchestrate/knowledge-bases" if is_local_dev(self.base_url) else "/knowledge-bases"
16
+
12
17
  def create(self, payload: dict) -> dict:
13
- return self._post_form_data("/api/v1/orchestrate/knowledge-bases/documents", data={ "knowledge_base" : json.dumps(payload) })
18
+ return self._post_form_data(f"{self.base_endpoint}/documents", data={ "knowledge_base" : json.dumps(payload) })
14
19
 
15
20
  def create_built_in(self, payload: dict, files: list) -> dict:
16
- return self._post_form_data("/api/v1/orchestrate/knowledge-bases/documents", data={ "knowledge_base" : json.dumps(payload) }, files=files)
21
+ return self._post_form_data(f"{self.base_endpoint}/documents", data={ "knowledge_base" : json.dumps(payload) }, files=files)
17
22
 
18
23
  def get(self) -> dict:
19
- return self._get("/api/v1/orchestrate/knowledge-bases")
24
+ return self._get(self.base_endpoint)
20
25
 
21
26
  def get_by_name(self, name: str) -> List[dict]:
22
27
  kbs = self.get_by_names([name])
23
28
  return None if len(kbs) == 0 else kbs[0]
24
29
 
25
30
  def get_by_id(self, knowledge_base_id: str) -> dict:
26
- return self._get(f"/api/v1/orchestrate/knowledge-bases/{knowledge_base_id}")
31
+ return self._get(f"{self.base_endpoint}/{knowledge_base_id}")
27
32
 
28
33
  def get_by_names(self, name: List[str]) -> List[dict]:
29
34
  formatted_names = [f"names={x}" for x in name]
30
- return self._get(f"/api/v1/orchestrate/knowledge-bases?{'&'.join(formatted_names)}")
35
+ return self._get(f"{self.base_endpoint}?{'&'.join(formatted_names)}")
31
36
 
32
37
  def status(self, knowledge_base_id: str) -> dict:
33
- return self._get(f"/api/v1/orchestrate/knowledge-bases/{knowledge_base_id}/status")
38
+ return self._get(f"{self.base_endpoint}/{knowledge_base_id}/status")
34
39
 
35
40
  def update(self, knowledge_base_id: str, payload: dict) -> dict:
36
- return self._patch_form_data(f"/api/v1/orchestrate/knowledge-bases/{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={ "knowledge_base" : json.dumps(payload) })
37
42
 
38
43
  def update_with_documents(self, knowledge_base_id: str, payload: dict, files: list) -> dict:
39
- return self._patch_form_data(f"/api/v1/orchestrate/knowledge-bases/{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={ "knowledge_base" : json.dumps(payload) }, files=files)
40
45
 
41
46
  def delete(self, knowledge_base_id: str,) -> dict:
42
- return self._delete(f"/api/v1/orchestrate/knowledge-bases/{knowledge_base_id}")
47
+ return self._delete(f"{self.base_endpoint}/{knowledge_base_id}")
43
48
 
44
49
 
45
50
 
@@ -51,7 +51,8 @@ class ServiceInstance(BaseServiceInstance):
51
51
  try:
52
52
  match auth_type:
53
53
  case EnvironmentAuthType.MCSP:
54
- authenticator = MCSPAuthenticator(apikey=self._credentials.api_key, url=self._credentials.iam_url)
54
+ url = self._credentials.iam_url if self._credentials.iam_url is not None else "https://iam.platform.saas.ibm.com"
55
+ authenticator = MCSPAuthenticator(apikey=self._credentials.api_key, url=url)
55
56
  case EnvironmentAuthType.IBM_CLOUD_IAM:
56
57
  authenticator = IAMAuthenticator(apikey=self._credentials.api_key, url=self._credentials.iam_url)
57
58
  case _:
@@ -3,7 +3,7 @@ services:
3
3
  # Orchestrate Lite dependencies
4
4
  ########################
5
5
  wxo-server-redis:
6
- image: us.icr.io/watson-orchestrate-private/redis:latest
6
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/redis:7.2
7
7
  platform: linux/amd64
8
8
  restart: unless-stopped
9
9
  ports:
@@ -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:
@@ -103,7 +105,7 @@ services:
103
105
  retries: 5
104
106
 
105
107
  wxo-server-minio:
106
- image: us.icr.io/watson-orchestrate-private/minio/minio:latest
108
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/minio/minio:latest
107
109
  platform: linux/amd64
108
110
  ports:
109
111
  - '9000:9000'
@@ -121,7 +123,7 @@ services:
121
123
  - wxo-server-minio-data:/data
122
124
 
123
125
  wxo-server-minio-setup:
124
- image: us.icr.io/watson-orchestrate-private/minio/mc:latest
126
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/minio/mc:latest
125
127
  platform: linux/amd64
126
128
  depends_on:
127
129
  wxo-server-minio:
@@ -135,7 +137,7 @@ services:
135
137
  "
136
138
 
137
139
  wxo-milvus-standalone:
138
- image: milvusdb/milvus:v2.5.6
140
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/milvusdb/milvus:v2.5.6
139
141
  command: ["milvus", "run", "standalone"]
140
142
  security_opt:
141
143
  - seccomp:unconfined
@@ -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:
@@ -211,7 +213,7 @@ services:
211
213
  command: >
212
214
  bash -c "mkdir -p /tmp/certs &&
213
215
  openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/certs/key.pem -out /tmp/certs/cert.pem -subj '/CN=localhost' &&
214
- uvicorn --host 0.0.0.0 --port 4322 --ssl-keyfile /tmp/certs/key.pem --ssl-certfile /tmp/certs/cert.pem --log-config /app/config/logs/log_conf.yaml --log-level debug --workers 5 wo_archer.api.main:app &
216
+ uvicorn --host 0.0.0.0 --port 4322 --ssl-keyfile /tmp/certs/key.pem --ssl-certfile /tmp/certs/cert.pem --log-config /app/config/logs/log_conf.yaml --workers 2 --log-level debug wo_archer.api.main:app &
215
217
  (for i in {1..20}; do curl --silent --fail -k https://127.0.0.1:4322/health/alive && echo '[INFO] HTTPS Service ready' && break || echo '[INFO] Waiting for HTTPS service...' && sleep 30; done; curl --silent --fail -k https://127.0.0.1:4322/health/alive || (echo '[ERROR] HTTPS service failed to start' && exit 1) ) &&
216
218
  uvicorn --host 0.0.0.0 --port 4321 --log-config /app/config/logs/log_conf.yaml --log-level debug --workers 5 wo_archer.api.main:app &
217
219
  (for i in {1..20}; do curl --silent --fail -k http://127.0.0.1:4321/health/alive && echo '[INFO] HTTP Service ready' && break || echo '[INFO] Waiting for HTTP service...' && sleep 30; done; curl --silent --fail -k http://127.0.0.1:4321/health/alive || (echo '[ERROR] HTTP service failed to start' && exit 1) ) &&
@@ -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"
@@ -435,7 +437,7 @@ services:
435
437
  # LANGFUSE dependencies
436
438
  ########################
437
439
  langfuse-worker:
438
- image: us.icr.io/watson-orchestrate-private/langfuse-worker:3
440
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/langfuse/langfuse-worker:3
439
441
  restart: unless-stopped
440
442
  profiles: [langfuse]
441
443
  depends_on: &langfuse-depends-on
@@ -487,7 +489,7 @@ services:
487
489
  REDIS_CONNECTION_STRING: redis://wxo-server-redis:6379/1
488
490
 
489
491
  langfuse-web:
490
- image: us.icr.io/watson-orchestrate-private/langfuse:3
492
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/langfuse/langfuse:3
491
493
  restart: unless-stopped
492
494
  depends_on: *langfuse-depends-on
493
495
  profiles: [langfuse]
@@ -500,7 +502,7 @@ services:
500
502
  NEXTAUTH_SECRET: mysecret
501
503
 
502
504
  langfuse-clickhouse:
503
- image: us.icr.io/watson-orchestrate-private/clickhouse-server:latest
505
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/clickhouse/clickhouse-server:latest
504
506
  restart: unless-stopped
505
507
  user: "101:101"
506
508
  profiles: [langfuse]
@@ -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
67
- CM_TAG=29-04-2025v1
68
+ CM_REGISTRY=
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
 
@@ -103,10 +106,10 @@ WXO_USER=wxo.archer@ibm.com
103
106
  WXO_PASS=watsonx
104
107
  STREAM_TIMEOUT=120000
105
108
  DEPLOYMENT_PLATFORM=lite-laptop
106
- WXO_BASE_URL=http://host.docker.internal:4321
109
+ WXO_BASE_URL=http://wxo-server:4321
107
110
  RUNTIME_MANAGER_API_KEY="testapikey"
108
- TOOLS_RUNTIME_MANAGER_BASE_URL="http://host.docker.internal:8080"
109
- CONNECTION_SERVICE_BASE_URL="http://host.docker.internal:3001"
111
+ TOOLS_RUNTIME_MANAGER_BASE_URL="http://tools-runtime-manager:8080"
112
+ CONNECTION_SERVICE_BASE_URL="http://wxo-server-connection-manager:3001"
110
113
 
111
114
  #To Prevent warnings
112
115
  VECTOR_STORE_PROVIDER=
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ibm-watsonx-orchestrate
3
- Version: 1.0.0
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=BlQMhv5PHK2l1FOEcvljrRuScW9GICW4FnHuWld2p_A,737
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=X6VbsGagQO4Fo1D9xROjwAdaHyV_wnXDYRmRrWW73TI,8022
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,16 +47,16 @@ 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=qPY4CL0vUrM4rBryAAdE9DeUaXBSECWIQoNnuOgMVS0,26469
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
54
54
  ibm_watsonx_orchestrate/client/base_service_instance.py,sha256=sM_r7bln9BpgEOhaJMdFI9-je3T7GLQxLduk-in0oRY,235
55
55
  ibm_watsonx_orchestrate/client/client.py,sha256=pgYeXHe4_Makrw0gTyM343DQdrZZB8cjitFHKcbdzuc,2432
56
56
  ibm_watsonx_orchestrate/client/client_errors.py,sha256=72MKCNZbKoo2QXyY0RicLhP3r0ALRjgOEbHOHNSyOYI,11712
57
- ibm_watsonx_orchestrate/client/credentials.py,sha256=TAgCIum3YRR1Hsow4TRojEXgFA6QBCaIAG2boshEBUw,3702
57
+ ibm_watsonx_orchestrate/client/credentials.py,sha256=ksqfecJkx-XSOkpHksomdBVAKqEpuVGSk65qpfemYFQ,3638
58
58
  ibm_watsonx_orchestrate/client/local_service_instance.py,sha256=ilqbcd0R6r0w6H5tMlQf0YRFk8IjbJd9sXwT41iQ5iQ,3440
59
- ibm_watsonx_orchestrate/client/service_instance.py,sha256=FlE09lKi-wx6--Pg73qvJBnrHuNI92JPqIHziaCgkUA,2857
59
+ ibm_watsonx_orchestrate/client/service_instance.py,sha256=fkxDhp8jALw2W_1BOMDYlCGgR7pxdnXms5ejre6CkMY,2969
60
60
  ibm_watsonx_orchestrate/client/utils.py,sha256=qvVDrtlzJh-7ADG4SY0Xg38_AcjDRGuG6VgyWdF4NBg,3570
61
61
  ibm_watsonx_orchestrate/client/agents/agent_client.py,sha256=2Pt4uIC35uS9EwsjtzF7RIQxx020_gW4_nPNuoe9A-E,1713
62
62
  ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py,sha256=XRiyfYx8mB4OCaQTvvY3Q_taDh7KzEBGgAQnKCPyOvA,1467
@@ -67,10 +67,10 @@ ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py,sha256=OSw9
67
67
  ibm_watsonx_orchestrate/client/connections/__init__.py,sha256=u821r2ZiYXLYNTknxdBYgc7glwTXsrQBd3z1I81f3ro,184
68
68
  ibm_watsonx_orchestrate/client/connections/connections_client.py,sha256=aenYRfywM0lPlJWipFuy-Dnp2ljmpeP11oaWvPd69sA,7053
69
69
  ibm_watsonx_orchestrate/client/connections/utils.py,sha256=XqgYoiehiqIZ-LnduIAiJ9DIIF7IR7QvkKTc9784Ii0,1326
70
- ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py,sha256=0FCpb5dF3WVC1w_7loKXcBswSI-ZyJ52f9UA5Mo9hQw,2134
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=7i-5QsbNNeerM2E4XTuqWtO_tWjhMWqMRUQkIBh3N5Y,24491
73
- ibm_watsonx_orchestrate/docker/default.env,sha256=xi_1Kj1TNCUMiL4sNWQt4UMhgXnwsUDellPRKUxms_0,4641
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.0.dist-info/METADATA,sha256=P9Sf-k0Yh2T6kGL-8wwlsr19cIU2beUz0hvsocaa014,1251
86
- ibm_watsonx_orchestrate-1.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
87
- ibm_watsonx_orchestrate-1.0.0.dist-info/entry_points.txt,sha256=SfIT02-Jen5e99OcLhzbcM9Bdyf8SGVOCtnSplgZdQI,69
88
- ibm_watsonx_orchestrate-1.0.0.dist-info/licenses/LICENSE,sha256=Shgxx7hTdCOkiVRmfGgp_1ISISrwQD7m2f0y8Hsapl4,1083
89
- ibm_watsonx_orchestrate-1.0.0.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,,