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.
- ibm_watsonx_orchestrate/__init__.py +1 -1
- ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +2 -2
- ibm_watsonx_orchestrate/agent_builder/models/types.py +5 -0
- ibm_watsonx_orchestrate/agent_builder/tools/types.py +5 -3
- ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +5 -2
- ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +103 -20
- ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +17 -13
- ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +1 -1
- ibm_watsonx_orchestrate/client/connections/connections_client.py +14 -2
- ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py +5 -3
- ibm_watsonx_orchestrate/docker/compose-lite.yml +8 -1
- ibm_watsonx_orchestrate/docker/default.env +11 -10
- ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -2
- ibm_watsonx_orchestrate/flow_builder/flows/flow.py +6 -6
- ibm_watsonx_orchestrate/flow_builder/types.py +109 -17
- ibm_watsonx_orchestrate/flow_builder/utils.py +7 -3
- {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/METADATA +1 -1
- {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/RECORD +21 -21
- {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/WHEEL +0 -0
- {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/entry_points.txt +0 -0
- {ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/licenses/LICENSE +0 -0
@@ -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]] =
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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="
|
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 =
|
171
|
-
elif "
|
172
|
-
|
173
|
-
res["
|
174
|
-
|
175
|
-
|
176
|
-
|
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,
|
284
|
-
|
285
|
-
|
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(
|
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(
|
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,
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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.
|
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:
|
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:
|
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,
|
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
|
-
"
|
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.
|
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=
|
60
|
+
SERVER_TAG=01-08-2025
|
61
61
|
SERVER_REGISTRY=
|
62
62
|
|
63
|
-
WORKER_TAG=
|
63
|
+
WORKER_TAG=01-08-2025-v2
|
64
64
|
WORKER_REGISTRY=
|
65
65
|
|
66
|
-
AI_GATEWAY_TAG=
|
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=
|
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=
|
91
|
+
BUILDER_TAG=31-07-2025-d7145cb
|
92
92
|
BUILDER_REGISTRY=
|
93
93
|
|
94
|
-
FLOW_RUNTIME_TAG=
|
94
|
+
FLOW_RUNTIME_TAG=01-08-2025
|
95
95
|
FLOW_RUMTIME_REGISTRY=
|
96
96
|
|
97
97
|
|
98
|
-
AGENT_ANALYTICS_TAG=
|
98
|
+
AGENT_ANALYTICS_TAG=05-08-2025
|
99
99
|
AGENT_ANALYTICS_REGISTRY=
|
100
100
|
|
101
|
-
JAEGER_PROXY_TAG=
|
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=
|
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=
|
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,
|
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
|
-
"
|
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,
|
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 =
|
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
|
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(
|
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
|
-
|
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 |
|
791
|
-
|
792
|
-
title='
|
793
|
-
|
794
|
-
|
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
|
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:
|
93
|
-
|
94
|
-
|
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
|
|
{ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
ibm_watsonx_orchestrate/__init__.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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
|
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=
|
100
|
-
ibm_watsonx_orchestrate/docker/default.env,sha256=
|
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=
|
110
|
-
ibm_watsonx_orchestrate/flow_builder/utils.py,sha256=
|
111
|
-
ibm_watsonx_orchestrate/flow_builder/flows/__init__.py,sha256=
|
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=
|
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.
|
125
|
-
ibm_watsonx_orchestrate-1.9.
|
126
|
-
ibm_watsonx_orchestrate-1.9.
|
127
|
-
ibm_watsonx_orchestrate-1.9.
|
128
|
-
ibm_watsonx_orchestrate-1.9.
|
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,,
|
{ibm_watsonx_orchestrate-1.9.0b1.dist-info → ibm_watsonx_orchestrate-1.9.0b2.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|