ibm-watsonx-orchestrate 1.9.0b1__py3-none-any.whl → 1.9.0b2__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 (21) hide show
  1. ibm_watsonx_orchestrate/__init__.py +1 -1
  2. ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +2 -2
  3. ibm_watsonx_orchestrate/agent_builder/models/types.py +5 -0
  4. ibm_watsonx_orchestrate/agent_builder/tools/types.py +5 -3
  5. ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +5 -2
  6. ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +103 -20
  7. ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +17 -13
  8. ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +1 -1
  9. ibm_watsonx_orchestrate/client/connections/connections_client.py +14 -2
  10. ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py +5 -3
  11. ibm_watsonx_orchestrate/docker/compose-lite.yml +8 -1
  12. ibm_watsonx_orchestrate/docker/default.env +11 -10
  13. ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -2
  14. ibm_watsonx_orchestrate/flow_builder/flows/flow.py +6 -6
  15. ibm_watsonx_orchestrate/flow_builder/types.py +109 -17
  16. ibm_watsonx_orchestrate/flow_builder/utils.py +7 -3
  17. {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/METADATA +1 -1
  18. {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/RECORD +21 -21
  19. {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/WHEEL +0 -0
  20. {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/entry_points.txt +0 -0
  21. {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/licenses/LICENSE +0 -0
@@ -5,7 +5,7 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.9.0b1"
8
+ __version__ = "1.9.0b2"
9
9
 
10
10
 
11
11
 
@@ -86,11 +86,10 @@ class GenerationConfiguration(BaseModel):
86
86
  {
87
87
  "model_id": "meta-llama/llama-3-1-70b-instruct",
88
88
  "prompt_instruction": "When the documents are in different languages, you should respond in english.",
89
- "retrieval_confidence_threshold": "Lowest",
90
89
  "generated_response_length": "Moderate",
91
- "response_confidence_threshold": "Low",
92
90
  "display_text_no_results_found": "no docs found",
93
91
  "display_text_connectivity_issue": "conn failed",
92
+ "idk_message": "I dont know",
94
93
  }
95
94
  """
96
95
 
@@ -99,6 +98,7 @@ class GenerationConfiguration(BaseModel):
99
98
  generated_response_length: Optional[GeneratedResponseLength] = None
100
99
  display_text_no_results_found: Optional[str] = None
101
100
  display_text_connectivity_issue: Optional[str] = None
101
+ idk_message: Optional[str] = None
102
102
 
103
103
  class FieldMapping(BaseModel):
104
104
  """
@@ -87,6 +87,11 @@ class ProviderConfig(BaseModel):
87
87
  azure_entra_tenant_id: Optional[str] = Field(None, alias="azureEntraTenantId")
88
88
  azure_ad_token: Optional[str] = Field(None, alias="azureAdToken")
89
89
  azure_model_name: Optional[str] = Field(None, alias="azureModelName")
90
+ azure_inference_deployment_name: Optional[str] = Field(None, alias="azureDeploymentName")
91
+ azure_inference_api_version: Optional[str] = Field(None, alias="azureApiVersion")
92
+ azure_inference_extra_params: Optional[str] = Field(None, alias="azureExtraParams")
93
+ azure_inference_foundry_url: Optional[str] = Field(None, alias="azureFoundryUrl")
94
+
90
95
 
91
96
  # Workers AI specific
92
97
  workers_ai_account_id: Optional[str] = Field(None, alias="workersAiAccountId")
@@ -36,6 +36,7 @@ class JsonSchemaObject(BaseModel):
36
36
  anyOf: Optional[List['JsonSchemaObject']] = None
37
37
  in_field: Optional[Literal['query', 'header', 'path', 'body']] = Field(None, alias='in')
38
38
  aliasName: str | None = None
39
+ wrap_data: Optional[bool] = True
39
40
  "Runtime feature where the sdk can provide the original name of a field before prefixing"
40
41
 
41
42
  @model_validator(mode='after')
@@ -48,9 +49,9 @@ class JsonSchemaObject(BaseModel):
48
49
  class ToolRequestBody(BaseModel):
49
50
  model_config = ConfigDict(extra='allow')
50
51
 
51
- type: Literal['object']
52
- properties: Dict[str, JsonSchemaObject]
53
- required: Optional[List[str]] = None
52
+ type: Literal['object', 'string']
53
+ properties: Optional[Dict[str, JsonSchemaObject]] = {}
54
+ required: Optional[List[str]] = []
54
55
 
55
56
 
56
57
  class ToolResponseBody(BaseModel):
@@ -186,6 +187,7 @@ class ToolBinding(BaseModel):
186
187
 
187
188
  class ToolSpec(BaseModel):
188
189
  name: str
190
+ id: str | None = None
189
191
  display_name: str | None = None
190
192
  description: str
191
193
  permission: ToolPermission
@@ -404,8 +404,11 @@ def list_connections(environment: ConnectionEnvironment | None, verbose: bool =
404
404
  "❌"
405
405
  )
406
406
  continue
407
-
408
- connection_type = get_connection_type(security_scheme=conn.security_scheme, auth_type=conn.auth_type)
407
+
408
+ try:
409
+ connection_type = get_connection_type(security_scheme=conn.security_scheme, auth_type=conn.auth_type)
410
+ except:
411
+ connection_type = conn.auth_type
409
412
 
410
413
  if conn.environment == ConnectionEnvironment.DRAFT:
411
414
  draft_table.add_row(
@@ -10,10 +10,12 @@ from rich.progress import Progress, SpinnerColumn, TextColumn
10
10
  from requests import ConnectionError
11
11
  from typing import List
12
12
  from ibm_watsonx_orchestrate.client.base_api_client import ClientAPIException
13
+ from ibm_watsonx_orchestrate.agent_builder.knowledge_bases.types import KnowledgeBaseSpec
13
14
  from ibm_watsonx_orchestrate.agent_builder.tools import ToolSpec, ToolPermission, ToolRequestBody, ToolResponseBody
14
15
  from ibm_watsonx_orchestrate.cli.commands.agents.agents_controller import AgentsController, AgentKind, SpecVersion
15
16
  from ibm_watsonx_orchestrate.agent_builder.agents.types import DEFAULT_LLM, BaseAgentSpec
16
17
  from ibm_watsonx_orchestrate.client.agents.agent_client import AgentClient
18
+ from ibm_watsonx_orchestrate.client.knowledge_bases.knowledge_base_client import KnowledgeBaseClient
17
19
  from ibm_watsonx_orchestrate.client.tools.tool_client import ToolClient
18
20
  from ibm_watsonx_orchestrate.client.copilot.cpe.copilot_cpe_client import CPEClient
19
21
  from ibm_watsonx_orchestrate.client.utils import instantiate_client
@@ -56,10 +58,16 @@ def _get_incomplete_tool_from_name(tool_name: str) -> dict:
56
58
  "input_schema": input_schema, "output_schema": output_schema})
57
59
  return spec.model_dump()
58
60
 
61
+
59
62
  def _get_incomplete_agent_from_name(agent_name: str) -> dict:
60
63
  spec = BaseAgentSpec(**{"name": agent_name, "description": agent_name, "kind": AgentKind.NATIVE})
61
64
  return spec.model_dump()
62
65
 
66
+ def _get_incomplete_knowledge_base_from_name(kb_name: str) -> dict:
67
+ spec = KnowledgeBaseSpec(**{"name": kb_name, "description": kb_name})
68
+ return spec.model_dump()
69
+
70
+
63
71
  def _get_tools_from_names(tool_names: List[str]) -> List[dict]:
64
72
  if not len(tool_names):
65
73
  return []
@@ -115,6 +123,34 @@ def _get_agents_from_names(collaborators_names: List[str]) -> List[dict]:
115
123
 
116
124
  return agents
117
125
 
126
+ def _get_knowledge_bases_from_names(kb_names: List[str]) -> List[dict]:
127
+ if not len(kb_names):
128
+ return []
129
+
130
+ kb_client = get_knowledge_bases_client()
131
+
132
+ try:
133
+ with _get_progress_spinner() as progress:
134
+ task = progress.add_task(description="Fetching Knowledge Bases", total=None)
135
+ knowledge_bases = kb_client.get_by_names(kb_names)
136
+ found_kbs = {kb.get("name") for kb in knowledge_bases}
137
+ progress.remove_task(task)
138
+ progress.refresh()
139
+ for kb_name in kb_names:
140
+ if kb_name not in found_kbs:
141
+ logger.warning(
142
+ f"Failed to find knowledge base named '{kb_name}'. Falling back to incomplete knowledge base definition. Copilot performance maybe effected.")
143
+ knowledge_bases.append(_get_incomplete_knowledge_base_from_name(kb_name))
144
+ except ConnectionError:
145
+ logger.warning(
146
+ f"Failed to fetch knowledge bases from server. For optimal results please start the server and import the relevant knowledge bases {', '.join(kb_names)}.")
147
+ knowledge_bases = []
148
+ for kb_name in kb_names:
149
+ knowledge_bases.append(_get_incomplete_knowledge_base_from_name(kb_name))
150
+
151
+ return knowledge_bases
152
+
153
+
118
154
  def get_cpe_client() -> CPEClient:
119
155
  url = os.getenv('CPE_URL', "http://localhost:8081")
120
156
  return instantiate_client(client=CPEClient, url=url)
@@ -124,6 +160,10 @@ def get_tool_client(*args, **kwargs):
124
160
  return instantiate_client(ToolClient)
125
161
 
126
162
 
163
+ def get_knowledge_bases_client(*args, **kwargs):
164
+ return instantiate_client(KnowledgeBaseClient)
165
+
166
+
127
167
  def get_native_client(*args, **kwargs):
128
168
  return instantiate_client(AgentClient)
129
169
 
@@ -144,18 +184,34 @@ def gather_utterances(max: int) -> list[str]:
144
184
  return utterances
145
185
 
146
186
 
147
- def get_deployed_tools_agents():
187
+ def get_knowledge_bases(client):
188
+ with _get_progress_spinner() as progress:
189
+ task = progress.add_task(description="Fetching Knowledge Bases", total=None)
190
+ try:
191
+ knowledge_bases = client.get()
192
+ progress.remove_task(task)
193
+ except ConnectionError:
194
+ knowledge_bases = []
195
+ progress.remove_task(task)
196
+ progress.refresh()
197
+ logger.warning("Failed to contact wxo server to fetch knowledge_bases. Proceeding with empty agent list")
198
+ return knowledge_bases
199
+
200
+
201
+ def get_deployed_tools_agents_and_knowledge_bases():
148
202
  all_tools = find_tools_by_description(tool_client=get_tool_client(), description=None)
149
203
  # TODO: this brings only the "native" agents. Can external and assistant agents also be collaborators?
150
204
  all_agents = find_agents(agent_client=get_native_client())
151
- return {"tools": all_tools, "agents": all_agents}
205
+ all_knowledge_bases = get_knowledge_bases(get_knowledge_bases_client())
206
+
207
+ return {"tools": all_tools, "collaborators": all_agents, "knowledge_bases": all_knowledge_bases}
152
208
 
153
209
 
154
210
  def pre_cpe_step(cpe_client):
155
- tools_agents = get_deployed_tools_agents()
211
+ tools_agents_and_knowledge_bases = get_deployed_tools_agents_and_knowledge_bases()
156
212
  user_message = ""
157
213
  with _get_progress_spinner() as progress:
158
- task = progress.add_task(description="Initilizing Prompt Engine", total=None)
214
+ task = progress.add_task(description="Initializing Prompt Engine", total=None)
159
215
  response = cpe_client.submit_pre_cpe_chat(user_message=user_message)
160
216
  progress.remove_task(task)
161
217
 
@@ -165,15 +221,26 @@ def pre_cpe_step(cpe_client):
165
221
  rich.print('\n🤖 Copilot: ' + response["message"])
166
222
  user_message = Prompt.ask("\n👤 You").strip()
167
223
  message_content = {"user_message": user_message}
168
- elif "description" in response and response["description"]:
224
+ elif "description" in response and response["description"]: # after we have a description, we pass the all tools
169
225
  res["description"] = response["description"]
170
- message_content = tools_agents
171
- elif "metadata" in response:
172
- res["agent_name"] = response["metadata"]["agent_name"]
173
- res["agent_style"] = response["metadata"]["style"]
174
- res["tools"] = [t for t in tools_agents["tools"] if t["name"] in response["metadata"]["tools"]]
175
- res["collaborators"] = [a for a in tools_agents["agents"] if
176
- a["name"] in response["metadata"]["collaborators"]]
226
+ message_content = {"tools": tools_agents_and_knowledge_bases['tools']}
227
+ elif "tools" in response and response[
228
+ 'tools'] is not None: # after tools were selected, we pass all collaborators
229
+ res["tools"] = [t for t in tools_agents_and_knowledge_bases["tools"] if
230
+ t["name"] in response["tools"]]
231
+ message_content = {"collaborators": tools_agents_and_knowledge_bases['collaborators']}
232
+ elif "collaborators" in response and response[
233
+ 'collaborators'] is not None: # after we have collaborators, we pass all knowledge bases
234
+ res["collaborators"] = [a for a in tools_agents_and_knowledge_bases["collaborators"] if
235
+ a["name"] in response["collaborators"]]
236
+ message_content = {"knowledge_bases": tools_agents_and_knowledge_bases['knowledge_bases']}
237
+ elif "knowledge_bases" in response and response['knowledge_bases'] is not None: # after we have knowledge bases, we pass selected=True to mark that all selection were done
238
+ res["knowledge_bases"] = [a for a in tools_agents_and_knowledge_bases["knowledge_bases"] if
239
+ a["name"] in response["knowledge_bases"]]
240
+ message_content = {"selected": True}
241
+ elif "agent_name" in response and response['agent_name'] is not None: # once we have a name and style, this phase has ended
242
+ res["agent_name"] = response["agent_name"]
243
+ res["agent_style"] = response["agent_style"]
177
244
  return res
178
245
  with _get_progress_spinner() as progress:
179
246
  task = progress.add_task(description="Thinking...", total=None)
@@ -194,6 +261,7 @@ def find_tools_by_description(description, tool_client):
194
261
  logger.warning("Failed to contact wxo server to fetch tools. Proceeding with empty tool list")
195
262
  return tools
196
263
 
264
+
197
265
  def find_agents(agent_client):
198
266
  with _get_progress_spinner() as progress:
199
267
  task = progress.add_task(description="Fetching Agents", total=None)
@@ -279,16 +347,25 @@ def prompt_tune(agent_spec: str, output_file: str | None, samples_file: str | No
279
347
  tools = _get_tools_from_names(agent.tools)
280
348
 
281
349
  collaborators = _get_agents_from_names(agent.collaborators)
350
+
351
+ knowledge_bases = _get_knowledge_bases_from_names(agent.knowledge_base)
282
352
  try:
283
- new_prompt = talk_to_cpe(cpe_client=client, samples_file=samples_file,
284
- context_data={"initial_instruction": instr, 'tools': tools, 'description': agent.description,
285
- "collaborators": collaborators})
353
+ new_prompt = talk_to_cpe(cpe_client=client,
354
+ samples_file=samples_file,
355
+ context_data={
356
+ "initial_instruction": instr,
357
+ 'tools': tools,
358
+ 'description': agent.description,
359
+ "collaborators": collaborators,
360
+ "knowledge_bases": knowledge_bases
361
+ })
286
362
  except ConnectionError:
287
363
  logger.error(
288
364
  "Failed to connect to Copilot server. Please ensure Copilot is running via `orchestrate copilot start`")
289
365
  sys.exit(1)
290
366
  except ClientAPIException:
291
- logger.error("An unexpected server error has occur with in the Copilot server. Please check the logs via `orchestrate server logs`")
367
+ logger.error(
368
+ "An unexpected server error has occur with in the Copilot server. Please check the logs via `orchestrate server logs`")
292
369
  sys.exit(1)
293
370
 
294
371
  if new_prompt:
@@ -316,17 +393,21 @@ def create_agent(output_file: str, llm: str, samples_file: str | None, dry_run_f
316
393
  "Failed to connect to Copilot server. Please ensure Copilot is running via `orchestrate copilot start`")
317
394
  sys.exit(1)
318
395
  except ClientAPIException:
319
- logger.error("An unexpected server error has occur with in the Copilot server. Please check the logs via `orchestrate server logs`")
396
+ logger.error(
397
+ "An unexpected server error has occur with in the Copilot server. Please check the logs via `orchestrate server logs`")
320
398
  sys.exit(1)
321
-
399
+
322
400
  tools = res["tools"]
323
401
  collaborators = res["collaborators"]
402
+ knowledge_bases = res["knowledge_bases"]
324
403
  description = res["description"]
325
404
  agent_name = res["agent_name"]
326
405
  agent_style = res["agent_style"]
327
406
 
328
407
  # 4. discuss the instructions
329
- instructions = talk_to_cpe(cpe_client, samples_file, {'description': description, 'tools': tools, 'collaborators': collaborators})
408
+ instructions = talk_to_cpe(cpe_client, samples_file,
409
+ {'description': description, 'tools': tools, 'collaborators': collaborators,
410
+ 'knowledge_bases': knowledge_bases})
330
411
 
331
412
  # 6. create and save the agent
332
413
  llm = llm if llm else DEFAULT_LLM
@@ -334,7 +415,9 @@ def create_agent(output_file: str, llm: str, samples_file: str | None, dry_run_f
334
415
  'style': agent_style,
335
416
  'tools': [t['name'] for t in tools],
336
417
  'llm': llm,
337
- 'collaborators': [c['name'] for c in collaborators]
418
+ 'collaborators': [c['name'] for c in collaborators],
419
+ 'knowledge_base': [k['name'] for k in knowledge_bases]
420
+ # generate_agent_spec expects knowledge_base and not knowledge_bases
338
421
  }
339
422
  agent = AgentsController.generate_agent_spec(agent_name, AgentKind.NATIVE, description, **params)
340
423
  agent.instructions = instructions
@@ -10,19 +10,23 @@ _BASIC_PROVIDER_CONFIG_KEYS = {'provider', 'api_key', 'custom_host', 'url_to_fet
10
10
 
11
11
  PROVIDER_EXTRA_PROPERTIES_LUT = {
12
12
  ModelProvider.ANTHROPIC: {'anthropic_beta', 'anthropic_version'},
13
- # ModelProvider.AZURE_AI: {
14
- # 'azure_resource_name',
15
- # 'azure_deployment_id',
16
- # 'azure_api_version',
17
- # 'ad_auth',
18
- # 'azure_auth_mode',
19
- # 'azure_managed_client_id',
20
- # 'azure_entra_client_id',
21
- # 'azure_entra_client_secret',
22
- # 'azure_entra_tenant_id',
23
- # 'azure_ad_token',
24
- # 'azure_model_name'
25
- # },
13
+ ModelProvider.AZURE_AI: {
14
+ 'azure_resource_name',
15
+ 'azure_deployment_id',
16
+ 'azure_api_version',
17
+ 'ad_auth',
18
+ 'azure_auth_mode',
19
+ 'azure_managed_client_id',
20
+ 'azure_entra_client_id',
21
+ 'azure_entra_client_secret',
22
+ 'azure_entra_tenant_id',
23
+ 'azure_ad_token',
24
+ 'azure_model_name',
25
+ 'azure_inference_deployment_name',
26
+ 'azure_inference_api_version',
27
+ 'azure_inference_extra_params',
28
+ 'azure_inference_foundry_url'
29
+ },
26
30
  ModelProvider.AZURE_OPENAI: {
27
31
  'azure_resource_name',
28
32
  'azure_deployment_id',
@@ -590,7 +590,7 @@ class ToolsController:
590
590
  for tool in tools:
591
591
  tools_list.append(json.loads(tool.dumps_spec()))
592
592
 
593
- rich.print(JSON(json.dumps(tools_list, indent=4)))
593
+ rich.print_json(json.dumps(tools_list, indent=4))
594
594
  else:
595
595
  table = rich.table.Table(show_header=True, header_style="bold white", show_lines=True)
596
596
  column_args = {
@@ -3,6 +3,7 @@ from typing import List
3
3
  from ibm_cloud_sdk_core.authenticators import MCSPAuthenticator
4
4
  from pydantic import BaseModel, ValidationError
5
5
  from typing import Optional
6
+ from enum import Enum
6
7
 
7
8
  from ibm_watsonx_orchestrate.client.base_api_client import BaseAPIClient, ClientAPIException
8
9
  from ibm_watsonx_orchestrate.agent_builder.connections.types import ConnectionEnvironment, ConnectionPreference, ConnectionAuthType, ConnectionSecurityScheme, IdpConfigData, AppConfigData, ConnectionType
@@ -12,12 +13,23 @@ import logging
12
13
  logger = logging.getLogger(__name__)
13
14
 
14
15
 
16
+ class FetchConfigAuthTypes(str, Enum):
17
+ BASIC_AUTH = ConnectionType.BASIC_AUTH.value
18
+ BEARER_TOKEN = ConnectionType.BEARER_TOKEN.value
19
+ API_KEY_AUTH = ConnectionType.API_KEY_AUTH.value
20
+ OAUTH2_AUTH_CODE = ConnectionType.OAUTH2_AUTH_CODE.value
21
+ OAUTH2_IMPLICIT = 'oauth2_implicit'
22
+ OAUTH2_PASSWORD = 'oauth2_password'
23
+ OAUTH2_CLIENT_CREDS = ConnectionType.OAUTH2_CLIENT_CREDS.value
24
+ OAUTH_ON_BEHALF_OF_FLOW = ConnectionType.OAUTH_ON_BEHALF_OF_FLOW.value
25
+ KEY_VALUE = ConnectionType.KEY_VALUE.value
26
+
15
27
  class ListConfigsResponse(BaseModel):
16
28
  connection_id: str = None,
17
29
  app_id: str = None
18
30
  name: str = None
19
31
  security_scheme: ConnectionSecurityScheme | None = None,
20
- auth_type: ConnectionAuthType | None = None,
32
+ auth_type: FetchConfigAuthTypes | None = None,
21
33
  environment: ConnectionEnvironment | None = None,
22
34
  preference: ConnectionPreference | None = None,
23
35
  credentials_entered: bool | None = False
@@ -28,7 +40,7 @@ class GetConfigResponse(BaseModel):
28
40
  app_id: str = None
29
41
  environment: ConnectionEnvironment = None
30
42
  preference: ConnectionPreference = None
31
- auth_type: ConnectionAuthType | None = None
43
+ auth_type: FetchConfigAuthTypes | None = None
32
44
  sso: bool = None
33
45
  security_scheme: ConnectionSecurityScheme = None
34
46
  server_url: str | None = None
@@ -21,13 +21,15 @@ class CPEClient(BaseAPIClient):
21
21
  }
22
22
 
23
23
 
24
- def submit_pre_cpe_chat(self, user_message: str | None =None, tools: Dict[str, Any] = None, agents: Dict[str, Any] = None) -> dict:
24
+ def submit_pre_cpe_chat(self, user_message: str | None =None, tools: Dict[str, Any] = None, collaborators: Dict[str, Any] = None, knowledge_bases: Dict[str, Any] = None, selected:bool=False) -> dict:
25
25
  payload = {
26
26
  "message": user_message,
27
27
  "tools": tools,
28
- "agents": agents,
28
+ "collaborators": collaborators,
29
+ "knowledge_bases": knowledge_bases,
29
30
  "chat_id": self.chat_id,
30
- "chat_model_name": self.chat_model_name
31
+ "chat_model_name": self.chat_model_name,
32
+ 'selected':selected
31
33
  }
32
34
 
33
35
  response = self._post_nd_json("/wxo-cpe/create-agent", data=payload)
@@ -122,6 +122,11 @@ services:
122
122
  CONNECTIONS_MANAGER_ENDPOINT: http://wxo-server-connection-manager:3001
123
123
  AGENT_OPS_API_KEY: ${AGENTOPS_API_KEY}
124
124
  AGENTS_OPS_RUNTIME_ENDPOINT: https://frontend-server:443
125
+ DPI_WO_WDU_SERVER_ENDPOINT: https://wxo-doc-processing-service:8080
126
+ DPI_RAG_SERVER_ENDPOINT: https://wxo-doc-processing-llm-service:8083
127
+ IBM_DPS_CACHE_SERVICE: https://wxo-doc-processing-cache:8080
128
+ DOCPROC_BASE_URL: http://wxo-doc-processing-infra-standalone:9080
129
+ BUILDER_ASYNC_CALLBACK_ENDPOINT: http://wxo-builder:4025
125
130
  IS_OBSERVABILITY_FEATURE_ENABLED: "true"
126
131
  ALLOW_INSECURE_TLS: "true"
127
132
  command: 'npm start'
@@ -165,7 +170,7 @@ services:
165
170
  "
166
171
 
167
172
  wxo-milvus-standalone:
168
- image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/milvusdb/milvus:v2.5.6
173
+ image: ${OPENSOURCE_REGISTRY_PROXY:-docker.io}/milvusdb/milvus:v2.5.15
169
174
  command: ["milvus", "run", "standalone"]
170
175
  security_opt:
171
176
  - seccomp:unconfined
@@ -549,6 +554,7 @@ services:
549
554
  - TENANT_DEFAULT_PASSWORD=${ES_PASSWORD}
550
555
  - TENANT_DEFAULT_HOSTNAME=http://elasticsearch:9200
551
556
  - DEFAULT_TENANT_ID=${DEFAULT_TENANT_ID}
557
+ - FORCE_SINGLE_TENANT=${FORCE_SINGLE_TENANT:-true}
552
558
  ports:
553
559
  - "9202:9201" # Expose proxy on host port 9202
554
560
  networks:
@@ -644,6 +650,7 @@ services:
644
650
  - INBOUND_API_KEY=${AGENTOPS_API_KEY}
645
651
  - DEFAULT_TENANT_ID=${DEFAULT_TENANT_ID}
646
652
  - TENANT_DEFAULT_HOSTNAME=http://elasticsearch:9200
653
+ - FORCE_SINGLE_TENANT=${FORCE_SINGLE_TENANT:-true}
647
654
  ports:
648
655
  - "8765:443"
649
656
  networks:
@@ -57,13 +57,13 @@ EVENT_BROKER_TTL="3600"
57
57
  REGISTRY_URL=
58
58
 
59
59
 
60
- SERVER_TAG=31-07-2025
60
+ SERVER_TAG=01-08-2025
61
61
  SERVER_REGISTRY=
62
62
 
63
- WORKER_TAG=31-07-2025
63
+ WORKER_TAG=01-08-2025-v2
64
64
  WORKER_REGISTRY=
65
65
 
66
- AI_GATEWAY_TAG=21-07-2025
66
+ AI_GATEWAY_TAG=01-08-2025-v1
67
67
  AI_GATEWAY_REGISTRY=
68
68
 
69
69
  AGENT_GATEWAY_TAG=29-07-2025
@@ -77,7 +77,7 @@ AMDDBTAG=29-07-2025-9f3661b
77
77
  ARM64DBTAG=29-07-2025-9f3661b
78
78
 
79
79
  UI_REGISTRY=
80
- UITAG=23-07-2025
80
+ UITAG=31-07-2025
81
81
 
82
82
  CM_REGISTRY=
83
83
  CM_TAG=24-07-2025
@@ -88,23 +88,23 @@ TRM_REGISTRY=
88
88
  TR_TAG=23-07-2025-3c60549f0bac275de3e5736265a3fd49cdd3a203
89
89
  TR_REGISTRY=
90
90
 
91
- BUILDER_TAG=29-07-2025
91
+ BUILDER_TAG=31-07-2025-d7145cb
92
92
  BUILDER_REGISTRY=
93
93
 
94
- FLOW_RUNTIME_TAG=28-07-2025-v2
94
+ FLOW_RUNTIME_TAG=01-08-2025
95
95
  FLOW_RUMTIME_REGISTRY=
96
96
 
97
97
 
98
- AGENT_ANALYTICS_TAG=02-07-2025-v1
98
+ AGENT_ANALYTICS_TAG=05-08-2025
99
99
  AGENT_ANALYTICS_REGISTRY=
100
100
 
101
- JAEGER_PROXY_TAG=01-07-2025
101
+ JAEGER_PROXY_TAG=23-07-2025
102
102
  JAEGER_PROXY_REGISTRY=
103
103
 
104
104
  SOCKET_HANDLER_TAG=29-05-2025
105
105
  SOCKET_HANDLER_REGISTRY=
106
106
 
107
- CPE_TAG=17-07-2025
107
+ CPE_TAG=06-08-2025-b0a20ad
108
108
  CPE_REGISTRY=
109
109
 
110
110
  # IBM Document Processing
@@ -114,7 +114,7 @@ WDU_REGISTRY=
114
114
  DOCPROC_DPS_TAG=20250721-164412-250-503756a
115
115
  DOCPROC_LLMSERVICE_TAG=20250725-100249-111-51d3e51
116
116
  DOCPROC_CACHE_TAG=20250723-100852-70-9edc1ab
117
- DOCPROC_DPI_TAG=20250710-195309-241-8f9fb6d7
117
+ DOCPROC_DPI_TAG=20250731-155328-257-06879e86
118
118
  DOCPROC_REGISTRY=
119
119
 
120
120
  # END -- IMAGE REGISTRIES AND TAGS
@@ -182,6 +182,7 @@ CALLBACK_HOST_URL=
182
182
 
183
183
  AGENTOPS_API_KEY_AUTH_ENABLED=true
184
184
  AGENTOPS_API_KEY=qwertyuiop
185
+ FORCE_SINGLE_TENANT=true
185
186
 
186
187
  RUNTIME_MANAGER_API_KEY=example
187
188
 
@@ -1,6 +1,6 @@
1
1
  from .constants import START, END, RESERVED
2
2
 
3
- from ..types import FlowContext, TaskData, TaskEventType, File, DecisionsCondition, DecisionsRule
3
+ from ..types import FlowContext, TaskData, TaskEventType, DocProcInput, DecisionsCondition, DecisionsRule
4
4
  from ..node import UserNode, AgentNode, StartNode, EndNode, PromptNode, ToolNode, DecisionsNode
5
5
 
6
6
  from .flow import Flow, CompiledFlow, FlowRun, FlowEvent, FlowEventType, FlowFactory, MatchPolicy, WaitPolicy, ForeachPolicy, Branch, Foreach, Loop
@@ -16,7 +16,7 @@ __all__ = [
16
16
  "FlowContext",
17
17
  "TaskData",
18
18
  "TaskEventType",
19
- "File",
19
+ "DocProcInput",
20
20
 
21
21
  "DocProcNode",
22
22
  "UserNode",
@@ -18,7 +18,7 @@ import pytz
18
18
  import os
19
19
 
20
20
  from typing_extensions import Self
21
- from pydantic import BaseModel, Field, SerializeAsAny, create_model
21
+ from pydantic import BaseModel, Field, SerializeAsAny, create_model, TypeAdapter
22
22
  import yaml
23
23
  from ibm_watsonx_orchestrate.agent_builder.tools.python_tool import PythonTool
24
24
  from ibm_watsonx_orchestrate.client.tools.tool_client import ToolClient
@@ -27,7 +27,7 @@ from ibm_watsonx_orchestrate.client.utils import instantiate_client
27
27
  from ..types import (
28
28
  EndNodeSpec, Expression, ForeachPolicy, ForeachSpec, LoopSpec, BranchNodeSpec, MatchPolicy, PromptLLMParameters, PromptNodeSpec,
29
29
  StartNodeSpec, ToolSpec, JsonSchemaObject, ToolRequestBody, ToolResponseBody, UserFieldKind, UserFieldOption, UserFlowSpec, UserNodeSpec, WaitPolicy,
30
- DocProcSpec, TextExtractionResponse, File, DecisionsNodeSpec, DecisionsRule, DocExtSpec, LanguageCode
30
+ DocProcSpec, TextExtractionResponse, DocProcInput, DecisionsNodeSpec, DecisionsRule, DocExtSpec, File
31
31
  )
32
32
  from .constants import CURRENT_USER, START, END, ANY_USER
33
33
  from ..node import (
@@ -190,7 +190,7 @@ class Flow(Node):
190
190
 
191
191
  def _add_schema_ref(self, schema: JsonSchemaObject, title: str = None) -> SchemaRef:
192
192
  '''Create a schema reference'''
193
- if schema and (schema.type == "object" or schema.type == "array"):
193
+ if schema and (schema.type == "object" or schema.type == "array" or schema.type == "string"):
194
194
  new_schema = self._add_schema(schema, title)
195
195
  return SchemaRef(ref=f"#/schemas/{new_schema.title}")
196
196
  raise AssertionError(f"schema is not a complex object: {schema}")
@@ -199,7 +199,7 @@ class Flow(Node):
199
199
  self._refactor_spec_to_schemaref(node.spec)
200
200
 
201
201
  def _refactor_spec_to_schemaref(self, spec: NodeSpec):
202
- if spec.input_schema:
202
+ if spec.input_schema and (spec.input_schema.type == "object" or spec.input_schema.type == "array") :
203
203
  if isinstance(spec.input_schema, ToolRequestBody):
204
204
  spec.input_schema = self._add_schema_ref(JsonSchemaObject(type = spec.input_schema.type,
205
205
  properties= spec.input_schema.properties,
@@ -535,7 +535,7 @@ class Flow(Node):
535
535
  "text_extraction" : TextExtractionResponse
536
536
  }
537
537
  # create input spec
538
- input_schema_obj = _get_json_schema_obj(parameter_name = "input", type_def = File)
538
+ input_schema_obj = _get_json_schema_obj(parameter_name = "input", type_def = DocProcInput)
539
539
  output_schema_obj = _get_json_schema_obj("output", output_schema_dict[task])
540
540
  if "$defs" in output_schema_obj.model_extra:
541
541
  output_schema_obj.model_extra.pop("$defs")
@@ -1060,8 +1060,8 @@ class FlowFactory(BaseModel):
1060
1060
  raise ValueError("Only functions with @flow_spec can be used to create a Flow specification.")
1061
1061
  return Flow(spec = flow_spec)
1062
1062
 
1063
- # create input spec
1064
1063
  input_schema_obj = _get_json_schema_obj(parameter_name = "input", type_def = input_schema)
1064
+ # create input spec
1065
1065
  output_schema_obj = _get_json_schema_obj("output", output_schema)
1066
1066
  if initiators is None:
1067
1067
  initiators = []
@@ -5,11 +5,14 @@ import numbers
5
5
  import inspect
6
6
  import logging
7
7
  from typing import (
8
- Any, Callable, Self, cast, Literal, List, NamedTuple, Optional, Sequence, Union
8
+ Annotated, Any, Callable, Self, cast, Literal, List, NamedTuple, Optional, Sequence, Union, NewType
9
9
  )
10
+ from typing_extensions import Doc
10
11
 
11
12
  import docstring_parser
12
- from pydantic import BaseModel, Field
13
+ from pydantic import BaseModel, Field, GetCoreSchemaHandler, GetJsonSchemaHandler, RootModel
14
+ from pydantic_core import core_schema
15
+ from pydantic.json_schema import JsonSchemaValue
13
16
 
14
17
  from langchain_core.tools.base import create_schema_from_function
15
18
  from langchain_core.utils.json_schema import dereference_refs
@@ -86,7 +89,11 @@ def _to_json_from_input_schema(schema: Union[ToolRequestBody, SchemaRef]) -> dic
86
89
  model_spec["properties"] = {}
87
90
  for prop_name, prop_schema in request_body.properties.items():
88
91
  model_spec["properties"][prop_name] = _to_json_from_json_schema(prop_schema)
89
- model_spec["required"] = request_body.required
92
+ model_spec["required"] = request_body.required if request_body.required else []
93
+ if schema.model_extra:
94
+ for k, v in schema.model_extra.items():
95
+ model_spec[k] = v
96
+
90
97
  elif isinstance(schema, SchemaRef):
91
98
  model_spec["$ref"] = schema.ref
92
99
 
@@ -182,7 +189,10 @@ class LanguageCode(StrEnum):
182
189
  en = auto()
183
190
  fr = auto()
184
191
 
185
- class DocExtSpec(NodeSpec):
192
+ class DocProcCommonNodeSpec(NodeSpec):
193
+ enable_hw: bool | None = Field(description="Boolean value indicating if hand-written feature is enabled.", title="Enable handwritten", default=False)
194
+
195
+ class DocExtSpec(DocProcCommonNodeSpec):
186
196
  version : str = Field(description="A version of the spec")
187
197
  config : DocExtConfig
188
198
 
@@ -196,14 +206,63 @@ class DocExtSpec(NodeSpec):
196
206
  model_spec["config"] = self.config.model_dump()
197
207
  return model_spec
198
208
 
209
+ class DocProcField(BaseModel):
210
+ description: str = Field(description="A description of the field to extract from the document.")
211
+ example: str = Field(description="An example of the field to extract from the document.", default='')
212
+ default: Optional[str] = Field(description="A default value for the field to extract from the document.", default='')
213
+
214
+ class DocProcTable(BaseModel):
215
+ type: Literal["array"]
216
+ description: str = Field(description="A description of the table to extract from the document.")
217
+ columns: dict[str,DocProcField] = Field(description="The columns to extract from the table. These are the keys in the table extraction result.")
218
+
219
+ class DocProcKVPSchema(BaseModel):
220
+ document_type: str = Field(description="A label for the kind of documents we want to extract")
221
+ document_description: str = Field(description="A description of the kind of documents we want to extractI. This is used to select which schema to use for extraction.")
222
+ fields: dict[str, DocProcField | DocProcTable] = Field(description="The fields to extract from the document. These are the keys in the KVP extraction result.")
223
+
224
+ class DocProcBoundingBox(BaseModel):
225
+ x: float = Field(description="The x coordinate of the bounding box.")
226
+ y: float = Field(description="The y coordinate of the bounding box.")
227
+ width: float = Field(description="The width of the bounding box.")
228
+ height: float = Field(description="The height of the bounding box.")
229
+ page_number: int = Field(description="The page number of the bounding box in the document.")
230
+
231
+ class KVPBaseEntry(BaseModel):
232
+ id: str = Field(description="A unique identifier.")
233
+ raw_text: str = Field(description="The raw text.")
234
+ normalized_text: Optional[str] = Field(description="The normalized text.", default=None)
235
+ confidence_score: Optional[float] = Field(description="The confidence score.", default=None)
236
+ bbox: Optional[DocProcBoundingBox] = Field(description="The bounding box in the document.", default=None)
237
+
238
+ class DocProcKey(KVPBaseEntry):
239
+ semantic_label: str = Field(description="A semantic label for the key.")
240
+
241
+ class DocProcValue(KVPBaseEntry):
242
+ pass
243
+
244
+ class DocProcKVP(BaseModel):
245
+ id: str = Field(description="A unique identifier for the key-value pair.")
246
+ type: Literal["key_value","only_value"]
247
+ key: DocProcKey = Field(description="The key of the key-value pair.")
248
+ value: DocProcValue = Field(description="The value of the key-value pair.")
249
+ group_id: Optional[str] = Field(default=None, description="The group id of the key-value pair. This is used to group key-value pairs together.")
250
+ table_id: Optional[str] = Field(default=None, description="The table id of the key-value pair. This is used to group key-value pairs together in a table.")
251
+ table_name: Optional[str] = Field(default=None, description="The name of the table the key-value pair belongs to. This is used to group key-value pairs together in a table.")
252
+ table_row_index: Optional[int] = Field(default=None, description="The index of the row in the table the key-value pair belongs to. This is used to group key-value pairs together in a table.")
253
+
199
254
  class DocProcTask(StrEnum):
200
255
  '''
201
256
  Possible names for the Document processing task parameter
202
257
  '''
203
258
  text_extraction = auto()
204
259
 
205
- class DocProcSpec(NodeSpec):
260
+ class DocProcSpec(DocProcCommonNodeSpec):
206
261
  task: DocProcTask = Field(description='The document processing operation name', default=DocProcTask.text_extraction)
262
+ kvp_schema: List[DocProcKVPSchema] | None = Field(
263
+ title='KVP schemas',
264
+ description="Optional list of key-value pair schemas to use for extraction.",
265
+ default=None)
207
266
 
208
267
  def __init__(self, **data):
209
268
  super().__init__(**data)
@@ -777,34 +836,67 @@ class LanguageCode(StrEnum):
777
836
  fr = auto()
778
837
  en_hw = auto()
779
838
 
780
- class File(BaseModel):
839
+
840
+ class File(str):
841
+ @classmethod
842
+ def __get_pydantic_core_schema__(
843
+ cls, source_type: Any, handler: GetCoreSchemaHandler
844
+ ) -> core_schema.CoreSchema:
845
+ return core_schema.no_info_wrap_validator_function(
846
+ cls.validate,
847
+ core_schema.str_schema(),
848
+ serialization=core_schema.plain_serializer_function_ser_schema(lambda v: str(v))
849
+ )
850
+
851
+ @classmethod
852
+ def validate(cls, value: Any) -> "File":
853
+ if not isinstance(value, str):
854
+ raise TypeError("File must be a document reference (string)")
855
+ return cls(value)
856
+
857
+ @classmethod
858
+ def __get_pydantic_json_schema__(
859
+ cls, core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
860
+ ) -> JsonSchemaValue:
861
+ return {
862
+ "type": "string",
863
+ "title": "Document reference",
864
+ "format": "binary",
865
+ "description": "Either an ID or a URL identifying the document to be used.",
866
+ "wrap_data": False,
867
+ "required": []
868
+ }
869
+
870
+ class DocExtInput(BaseModel):
871
+ document_ref: bytes | File = Field(description="Either an ID or a URL identifying the document to be used.", title='Document reference', default=None, json_schema_extra={"format": "binary"})
872
+
873
+
874
+ class DocProcInput(BaseModel):
781
875
  '''
782
876
  This class represents the input of a Document processing task.
783
877
 
784
878
  Attributes:
785
879
  document_ref (bytes|str): This is either a URL to the location of the document bytes or an ID that we use to resolve the location of the document
786
880
  language (LanguageCode): Optional language code used when processing the input document
881
+ kvp_schemas (List[DocProcKVPSchema]): Optional list of key-value pair schemas to use for extraction. If not provided or None, no KVPs will be extracted. If an empty list is provided, we will use the internal schemas to extract KVPS.
787
882
  '''
788
883
  # This is declared as bytes but the runtime will understand if a URL is send in as input.
789
884
  # We need to use bytes here for Chat-with-doc to recognize the input as a File.
790
- document_ref: bytes | str = Field(
791
- description="Either an ID or a URL identifying the document to be used.",
792
- title='Document reference',
793
- default=None,
794
- json_schema_extra={"format": "binary"})
795
- language: Optional[LanguageCode] = Field(
796
- description='Optional language code of the document, defaults to "en"',
797
- title='Document language code',
798
- default=LanguageCode.en)
799
-
885
+ document_ref: bytes | File = Field(description="Either an ID or a URL identifying the document to be used.", title='Document reference', default=None, json_schema_extra={"format": "binary"})
886
+ kvp_schemas: Optional[List[DocProcKVPSchema]] = Field(
887
+ title='KVP schemas',
888
+ description="Optional list of key-value pair schemas to use for extraction.",
889
+ default=None)
800
890
 
801
891
  class TextExtractionResponse(BaseModel):
802
892
  '''
803
893
  The text extraction operation response.
804
894
  Attributes:
805
895
  text (str): the text extracted from the input document.
896
+ kvps (Optional[list[DocProcKVP]]): A list of key-value pairs extracted from the document. If no KVPs were extracted, this will be None.
806
897
  '''
807
- text : str = Field(description="the text extracted from the input document.")
898
+ text: str = Field(description='The text extracted from the input document', title='text')
899
+ kvps: Optional[list[DocProcKVP]] = Field(description="A list of key-value pairs extracted from the document.", default=None)
808
900
 
809
901
 
810
902
  class DecisionsCondition(BaseModel):
@@ -89,9 +89,13 @@ def _get_tool_request_body(schema_obj: JsonSchemaObject) -> ToolRequestBody:
89
89
  request_obj = ToolRequestBody(type='object', properties=schema_obj.properties, required=schema_obj.required)
90
90
  if schema_obj.model_extra:
91
91
  request_obj.__pydantic_extra__ = schema_obj.model_extra
92
- else: # we need to wrap a simple type with an object
93
- request_obj = ToolRequestBody(type='object', properties={}, required=[])
94
- request_obj.properties["data"] = schema_obj
92
+ else:
93
+ if schema_obj.wrap_data:
94
+ # we need to wrap a simple type with an object
95
+ request_obj = ToolRequestBody(type='object', properties={}, required=[])
96
+ request_obj.properties["data"] = schema_obj
97
+ else:
98
+ request_obj = ToolRequestBody(type=schema_obj.type, title=schema_obj.title, description=schema_obj.description, format=schema_obj.format)
95
99
  if schema_obj.model_extra:
96
100
  request_obj.__pydantic_extra__ = schema_obj.model_extra
97
101
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ibm-watsonx-orchestrate
3
- Version: 1.9.0b1
3
+ Version: 1.9.0b2
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=wenjO7SaJ_OKOQuhufZaqfd2aSi-hCVjmnDeyymUqj0,427
1
+ ibm_watsonx_orchestrate/__init__.py,sha256=qSsB-sI25lOiixDR8S9s8PpP3iB7TKKGjtr405WOdZI,427
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=lmZwaiWXD4Ea19nrMwZXaqCxFMG29xNS8vUoZtK3yI4,392
4
4
  ibm_watsonx_orchestrate/agent_builder/agents/agent.py,sha256=W0uya81fQPrYZFaO_tlsxBL56Bfpw0xrqdxQJhAZ6XI,983
@@ -13,11 +13,11 @@ ibm_watsonx_orchestrate/agent_builder/connections/connections.py,sha256=CD3QHI4d
13
13
  ibm_watsonx_orchestrate/agent_builder/connections/types.py,sha256=YOOlXXNKVxTZ6tK2ceeytWXUApZjwfi4mgdYwXoiqOk,9532
14
14
  ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base.py,sha256=_KuGF0RZpKpwdt31rzjlTjrhGRFz2RtLzleNkhMNX4k,1831
15
15
  ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base_requests.py,sha256=3xTfFMZR17EN8eYRhsVyBfOEzlTqyi0eYaMXyv0_ZtQ,862
16
- ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py,sha256=_jHu9ELQqj1qwDK6U7jqemzNFeM2O5APlykiZRsDOcY,7009
16
+ ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py,sha256=ILnIwjK-RqIUr9CeRRobIPg6qE1Sl4Br-qCMPvbHIVs,6985
17
17
  ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py,sha256=alJEjlneWlGpadmvOVlDjq5wulytKOmpkq3849fhKNc,131
18
18
  ibm_watsonx_orchestrate/agent_builder/model_policies/types.py,sha256=a6f9HP2OlZIe36k_PDRmFtefz2Ms2KBpzJ_jz8ggYbk,882
19
19
  ibm_watsonx_orchestrate/agent_builder/models/__init__.py,sha256=R5nTbyMBzahONdp5-bJFp-rbtTDnp2184k6doZqt67w,31
20
- ibm_watsonx_orchestrate/agent_builder/models/types.py,sha256=Zr0xHZpTVPZnaUSvlopc2iYVfKmhiqEuvaVe37HVxlw,9457
20
+ ibm_watsonx_orchestrate/agent_builder/models/types.py,sha256=bWKrKeBMByjhEvkXieJUYOxVr1Px6mk8v4GsvjRrvo8,9812
21
21
  ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py,sha256=KXRPgBK-F9Qa6IYqEslkN3ANj3cmZoZQnlSiy_-iXCk,1054
22
22
  ibm_watsonx_orchestrate/agent_builder/toolkits/types.py,sha256=yY-V4Hqct91-Rs4rJ3rY9OhzKkSMdOT63o224o-U9eg,959
23
23
  ibm_watsonx_orchestrate/agent_builder/tools/__init__.py,sha256=adkYX0wgB-RKFCUBw6LPJhNVelUjUdsxipGPk2ghLns,479
@@ -25,7 +25,7 @@ ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py,sha256=0vwMIAyKyB8v1QmN
25
25
  ibm_watsonx_orchestrate/agent_builder/tools/flow_tool.py,sha256=DJWYVmIjw1O_cbzPpwU0a_vIZGvo0mj8UsjW9zkKMlA,2589
26
26
  ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py,sha256=h9ma18GUQHt88UIakd6QZHic822bAXzYokh6sfqAMZk,19410
27
27
  ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py,sha256=FDY-y9jy4bNy88i7JG85Zj_YrxnPfJPD0DjwvL9ITxc,12012
28
- ibm_watsonx_orchestrate/agent_builder/tools/types.py,sha256=SAyDEnWYuguTFk6WxgSDnMaONqDqcr6QhBAxD1u5FDU,8165
28
+ ibm_watsonx_orchestrate/agent_builder/tools/types.py,sha256=m2t4uXNp0DVwVFzd0Jf_se8tz6V8FzM5fYgFs7AlvHU,8251
29
29
  ibm_watsonx_orchestrate/agent_builder/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  ibm_watsonx_orchestrate/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  ibm_watsonx_orchestrate/cli/config.py,sha256=iXjDxymWhAmLSUu6eh7zJR20dYZDzbxcU5VoBdh3VIw,8318
@@ -41,9 +41,9 @@ ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_command.p
41
41
  ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_controller.py,sha256=CGfmKsCBX4E3HMZ8C0IXD-DHQNwe96V1Y_BxUZM2us0,8557
42
42
  ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py,sha256=Q9vg2Z5Fsunu6GQFY_TIsNRhUCa0SSGSPnK4jxSGK34,1581
43
43
  ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py,sha256=bZBzaaVMFmGY4Guk-JCknZqd8HvXY5L-FirxpxddQfc,10497
44
- ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py,sha256=_s1chAQ4Oqz-A0tQ4LkRAHL3-lGDtalbrLHFJ35lA_I,22293
44
+ ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py,sha256=diwoXiyh5VKmUv0E0KEx2WJnWyNWQnvpjw-Wff05t68,22395
45
45
  ibm_watsonx_orchestrate/cli/commands/copilot/copilot_command.py,sha256=IxasApIyQYWRMKPXKa38ZPVkUvOc4chggSmSGjgQGXc,2345
46
- ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py,sha256=fLnrBpO6avs-V3wnK_-8KPmT5iRSHejnLOyFhrthlbg,14752
46
+ ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py,sha256=SC2Tjq6r-tHIiyPBMajsxdMIY3BQpRWpkYGZS2XbJyU,18981
47
47
  ibm_watsonx_orchestrate/cli/commands/copilot/copilot_server_controller.py,sha256=AcBE97qNYsRN0ftY_E-AAjKFyVea4fHtU5eB2HsB42I,5619
48
48
  ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py,sha256=xwq7gdyjMtl2RYAnLAahGk2wDetr9BStt8yu7JkeBhk,3768
49
49
  ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py,sha256=oHZ7LONtPg3-SSnU_rRZryLi8N2mplz5h-LGg4XjzD4,10261
@@ -53,7 +53,7 @@ ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py,sha25
53
53
  ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py,sha256=hOzRcGVoqq7dTc4bSregKxH-kYbrVqaFdhBLawqnRNo,2668
54
54
  ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py,sha256=M19rRMFEEcAarPVw4fOr3S94Se1ZEo4hD7sCUr0xYTI,10115
55
55
  ibm_watsonx_orchestrate/cli/commands/login/login_command.py,sha256=xArMiojoozg7Exn6HTpbTcjDO2idZRA-y0WV-_Ic1Sk,651
56
- ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py,sha256=RVZfFCuPWiASkR9Mox61v5SZ1AoRxo4_g9stnbfjCkc,7994
56
+ ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py,sha256=mbvBR5o9M7W6OpTZyd6TtSEOIXq07dPYz4hv5zDrsd0,8129
57
57
  ibm_watsonx_orchestrate/cli/commands/models/models_command.py,sha256=PW-PIM5Nq0qdCopWjANGBWEuEoA3NLTFThYrN8ggGCI,6425
58
58
  ibm_watsonx_orchestrate/cli/commands/models/models_controller.py,sha256=eZSYQUg9TL_-8lgcPVpKIx7MtOE7K_NCvZW9Y9YsFA0,18466
59
59
  ibm_watsonx_orchestrate/cli/commands/server/server_command.py,sha256=9VM9i2g54UwK0wsQ7z1m3KSDItoAslSk693YKGXPq0s,43309
@@ -67,7 +67,7 @@ ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_co
67
67
  ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py,sha256=KI96Yexq4ZkM-VxcW88oMszjnOxbdU7quSxFtvf_ry4,4367
68
68
  ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py,sha256=3Jykp5-DzMM_At8kYJto171V6LesaqKdsk2nfg1TRpk,11949
69
69
  ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py,sha256=Cuo1ZvlfsymojqbadCqdwwS0HUjaWpe2XQrV70g61_s,3943
70
- ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py,sha256=uL0WHi0YD7NIYSLOui-CymVHj-h9Y0i3PxS7T2SXSvo,40408
70
+ ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py,sha256=4VnV_rm7uXA7gtAfmqdw7igb5tkVGyhcsoni21jMDFA,40407
71
71
  ibm_watsonx_orchestrate/cli/commands/tools/types.py,sha256=_md0GEa_cTH17NO_moWDY_LNdFvyEFQ1UVB9_FltYiA,173
72
72
  ibm_watsonx_orchestrate/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  ibm_watsonx_orchestrate/client/base_api_client.py,sha256=cSbQb7-K9KoMeFLEIiYGho4cQqf8TcPyYklju9X4cC4,5214
@@ -85,9 +85,9 @@ ibm_watsonx_orchestrate/client/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5
85
85
  ibm_watsonx_orchestrate/client/analytics/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py,sha256=0YS_BCpmf5oGFawpZkJ38cuz5ArhKsZIbSydWRd194s,1340
87
87
  ibm_watsonx_orchestrate/client/connections/__init__.py,sha256=J7TOyVg38h71AlaJjlFs5fOuAXTceHvELtOJ9oz4Mvg,207
88
- ibm_watsonx_orchestrate/client/connections/connections_client.py,sha256=8f_olWVgQVLi6xKO_DvV68zu_AMLe1DMhoQAhC-BG3g,7583
88
+ ibm_watsonx_orchestrate/client/connections/connections_client.py,sha256=UQMHxPDP9qqVUGoAAaCafcp2kMazeJsCNPn2NgrOQcI,8134
89
89
  ibm_watsonx_orchestrate/client/connections/utils.py,sha256=f6HsiDI6cycOqfYN6P4uZ3SQds83xlh83zTUioZPeYk,2618
90
- ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py,sha256=eGE5VJb47XZxiMszBVQ7u0NKTVeHPuGVyfRJ6qPKlVs,1939
90
+ ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py,sha256=-grsFXdxY8Cy2DbsWa1Akc93d-TRLJJYCdMDkCfmG3g,2102
91
91
  ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py,sha256=YjC16dcL_l0jd-6yZ6uH8anlL4yaIv9f-7Y_urPuXWM,2201
92
92
  ibm_watsonx_orchestrate/client/model_policies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  ibm_watsonx_orchestrate/client/model_policies/model_policies_client.py,sha256=Ddjraesv1MRPhZebB0PdBL0zgdsoWmnYpWTUci_6XFI,2258
@@ -96,8 +96,8 @@ ibm_watsonx_orchestrate/client/models/models_client.py,sha256=ZvP3iPgUFw_SXp41kJ
96
96
  ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py,sha256=TLFNS39EeBD_t4Y-rX9sGp4sWBDr--mE5qVtHq8Q2hk,3121
97
97
  ibm_watsonx_orchestrate/client/tools/tempus_client.py,sha256=24fKDZUOVHBW-Vj4mubnpnUmab5LgGn8u5hOVyJaozI,1804
98
98
  ibm_watsonx_orchestrate/client/tools/tool_client.py,sha256=d3i3alVwa0TCN72w9sWOrM20GCbNmnpTnqEOJVbBIFM,1994
99
- ibm_watsonx_orchestrate/docker/compose-lite.yml,sha256=JrBImiUmcIfk0BJfQe_LFgPlLKnfZ1B7PTH1IPfedt0,43150
100
- ibm_watsonx_orchestrate/docker/default.env,sha256=33zXK2uObFVZzJPZ6O53Zt7e2TKnugIWrUIeFz8jGhc,6087
99
+ ibm_watsonx_orchestrate/docker/compose-lite.yml,sha256=Mg8XqWLTxQS7Xl_tP32MGvkvEFyGiwEnug5FWyVjV7g,43616
100
+ ibm_watsonx_orchestrate/docker/default.env,sha256=wdBu50CfT3wg9FSJ9ekW6_OGtQVNGk4nrdfOgR_6Hk0,6128
101
101
  ibm_watsonx_orchestrate/docker/proxy-config-single.yaml,sha256=WEbK4ENFuTCYhzRu_QblWp1_GMARgZnx5vReQafkIG8,308
102
102
  ibm_watsonx_orchestrate/docker/start-up.sh,sha256=LTtwHp0AidVgjohis2LXGvZnkFQStOiUAxgGABOyeUI,1811
103
103
  ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl,sha256=Hi3-owh5OM0Jz2ihX9nLoojnr7Ky1TV-GelyqLcewLE,2047417
@@ -106,13 +106,13 @@ ibm_watsonx_orchestrate/docker/tempus/common-config.yaml,sha256=Zo3F36F5DV4VO_vU
106
106
  ibm_watsonx_orchestrate/flow_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
107
  ibm_watsonx_orchestrate/flow_builder/data_map.py,sha256=1brmWWFERDsNG2XGais-5-r58LKUUwBtqwdaLQIFRhE,503
108
108
  ibm_watsonx_orchestrate/flow_builder/node.py,sha256=l9J9bMyrvU5yKT2W0G9M-KM5rrfCeuG8jcANegQkrL8,5971
109
- ibm_watsonx_orchestrate/flow_builder/types.py,sha256=3KckhswqMPsFM7md28K-C93jYgH7LZW4dROeuEuHltU,38519
110
- ibm_watsonx_orchestrate/flow_builder/utils.py,sha256=OgJxIXeF4-qT3CMct4qi87IzXcUByOldwU0KqhIJ81E,11697
111
- ibm_watsonx_orchestrate/flow_builder/flows/__init__.py,sha256=dHS2fB-xbVS5yt_yNyZqYeuiAGs78lbCF65AX_VQlD4,1025
109
+ ibm_watsonx_orchestrate/flow_builder/types.py,sha256=muKjxiRQgjhgYqUHsumvy43ICuzzINyhdNKEnMBpBe4,44208
110
+ ibm_watsonx_orchestrate/flow_builder/utils.py,sha256=8q1jr5i_TzoJpoQxmLiO0g5Uv03BLbTUaRfw8_0VWIY,11931
111
+ ibm_watsonx_orchestrate/flow_builder/flows/__init__.py,sha256=jbCklY7l08KG8cbFihAnUWXSQKLLoTU6Mk_BmA4VksU,1041
112
112
  ibm_watsonx_orchestrate/flow_builder/flows/constants.py,sha256=-TGneZyjA4YiAtJJK7OmmjDHYQC4mw2e98MPAZqiB50,324
113
113
  ibm_watsonx_orchestrate/flow_builder/flows/decorators.py,sha256=lr4qSWq5PWqlGFf4fzUQZCVQDHBYflrYwZ24S89Aq80,2794
114
114
  ibm_watsonx_orchestrate/flow_builder/flows/events.py,sha256=VyaBm0sADwr15LWfKbcBQS1M80NKqzYDj3UlW3OpOf4,2984
115
- ibm_watsonx_orchestrate/flow_builder/flows/flow.py,sha256=NivtbU33urrE0oi0yGrirh757dz2s9_WZi68h3gf4hQ,56822
115
+ ibm_watsonx_orchestrate/flow_builder/flows/flow.py,sha256=uAk_uS2i1zH3toJQw7I_5zaSPVOdvAyEitGdM0rxrJI,56949
116
116
  ibm_watsonx_orchestrate/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  ibm_watsonx_orchestrate/run/connections.py,sha256=K-65GXPA8GEsVmRdPfMe_LB2G9RfXQUr95wvRUOhkS4,1828
118
118
  ibm_watsonx_orchestrate/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -121,8 +121,8 @@ ibm_watsonx_orchestrate/utils/utils.py,sha256=U7z_2iASoFiZ2zM0a_2Mc2Y-P5oOT7hOwu
121
121
  ibm_watsonx_orchestrate/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
122
  ibm_watsonx_orchestrate/utils/logging/logger.py,sha256=FzeGnidXAjC7yHrvIaj4KZPeaBBSCniZFlwgr5yV3oA,1037
123
123
  ibm_watsonx_orchestrate/utils/logging/logging.yaml,sha256=9_TKfuFr1barnOKP0fZT5D6MhddiwsXVTFjtRbcOO5w,314
124
- ibm_watsonx_orchestrate-1.9.0b1.dist-info/METADATA,sha256=Jxibq7aV6_Wqi15CpBEFfRnx8QckAtI2sEx4ZKBs0qA,1362
125
- ibm_watsonx_orchestrate-1.9.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
126
- ibm_watsonx_orchestrate-1.9.0b1.dist-info/entry_points.txt,sha256=SfIT02-Jen5e99OcLhzbcM9Bdyf8SGVOCtnSplgZdQI,69
127
- ibm_watsonx_orchestrate-1.9.0b1.dist-info/licenses/LICENSE,sha256=Shgxx7hTdCOkiVRmfGgp_1ISISrwQD7m2f0y8Hsapl4,1083
128
- ibm_watsonx_orchestrate-1.9.0b1.dist-info/RECORD,,
124
+ ibm_watsonx_orchestrate-1.9.0b2.dist-info/METADATA,sha256=vUmVmbH5irCvOWWPEcc9ckYadyPb1xtRTbGvAaq8K5o,1362
125
+ ibm_watsonx_orchestrate-1.9.0b2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
126
+ ibm_watsonx_orchestrate-1.9.0b2.dist-info/entry_points.txt,sha256=SfIT02-Jen5e99OcLhzbcM9Bdyf8SGVOCtnSplgZdQI,69
127
+ ibm_watsonx_orchestrate-1.9.0b2.dist-info/licenses/LICENSE,sha256=Shgxx7hTdCOkiVRmfGgp_1ISISrwQD7m2f0y8Hsapl4,1083
128
+ ibm_watsonx_orchestrate-1.9.0b2.dist-info/RECORD,,