Skip to content

Commit 6df4f17

Browse files
committed
feat: add confirmToolCall support to CAS chat bridge [JAR-8666]
1 parent a4a6cb9 commit 6df4f17

14 files changed

Lines changed: 47 additions & 286 deletions

File tree

.github/scripts/test_check_version_uniqueness.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import urllib.error
66
from unittest import mock
77

8-
import pytest
98

109
from check_version_uniqueness import (
1110
get_package_info,

packages/uipath-core/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath-core"
3-
version = "0.5.11"
3+
version = "0.5.13"
44
description = "UiPath Core abstractions"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"

packages/uipath-core/src/uipath/core/chat/__init__.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,6 @@
7777
UiPathConversationExchangeEvent,
7878
UiPathConversationExchangeStartEvent,
7979
)
80-
from .interrupt import (
81-
InterruptTypeEnum,
82-
UiPathConversationGenericInterruptEndEvent,
83-
UiPathConversationGenericInterruptStartEvent,
84-
UiPathConversationInterrupt,
85-
UiPathConversationInterruptData,
86-
UiPathConversationInterruptEndEvent,
87-
UiPathConversationInterruptEvent,
88-
UiPathConversationInterruptStartEvent,
89-
UiPathConversationToolCallConfirmationEndValue,
90-
UiPathConversationToolCallConfirmationInterruptEndEvent,
91-
UiPathConversationToolCallConfirmationInterruptStartEvent,
92-
UiPathConversationToolCallConfirmationValue,
93-
)
9480
from .message import (
9581
UiPathConversationMessage,
9682
UiPathConversationMessageData,
@@ -108,6 +94,7 @@
10894
)
10995
from .tool import (
11096
UiPathConversationToolCall,
97+
UiPathConversationToolCallConfirmationEvent,
11198
UiPathConversationToolCallData,
11299
UiPathConversationToolCallEndEvent,
113100
UiPathConversationToolCallEvent,
@@ -141,19 +128,6 @@
141128
"UiPathConversationMessageEvent",
142129
"UiPathConversationMessageData",
143130
"UiPathConversationMessage",
144-
# Interrupt
145-
"InterruptTypeEnum",
146-
"UiPathConversationInterruptStartEvent",
147-
"UiPathConversationInterruptEndEvent",
148-
"UiPathConversationInterruptEvent",
149-
"UiPathConversationToolCallConfirmationValue",
150-
"UiPathConversationToolCallConfirmationEndValue",
151-
"UiPathConversationToolCallConfirmationInterruptStartEvent",
152-
"UiPathConversationToolCallConfirmationInterruptEndEvent",
153-
"UiPathConversationGenericInterruptStartEvent",
154-
"UiPathConversationGenericInterruptEndEvent",
155-
"UiPathConversationInterruptData",
156-
"UiPathConversationInterrupt",
157131
# Content
158132
"UiPathConversationContentPartChunkEvent",
159133
"UiPathConversationContentPartStartEvent",
@@ -178,6 +152,7 @@
178152
# Tool
179153
"UiPathConversationToolCallStartEvent",
180154
"UiPathConversationToolCallEndEvent",
155+
"UiPathConversationToolCallConfirmationEvent",
181156
"UiPathConversationToolCallEvent",
182157
"UiPathConversationToolCallResult",
183158
"UiPathConversationToolCallData",

packages/uipath-core/src/uipath/core/chat/interrupt.py

Lines changed: 0 additions & 112 deletions
This file was deleted.

packages/uipath-core/src/uipath/core/chat/message.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@
1010
UiPathConversationContentPartEvent,
1111
)
1212
from .error import UiPathConversationErrorEvent
13-
from .interrupt import (
14-
UiPathConversationInterrupt,
15-
UiPathConversationInterruptData,
16-
UiPathConversationInterruptEvent,
17-
)
1813
from .tool import (
1914
UiPathConversationToolCall,
2015
UiPathConversationToolCallData,
@@ -53,7 +48,6 @@ class UiPathConversationMessageEvent(BaseModel):
5348
None, alias="contentPart"
5449
)
5550
tool_call: UiPathConversationToolCallEvent | None = Field(None, alias="toolCall")
56-
interrupt: UiPathConversationInterruptEvent | None = None
5751
meta_event: dict[str, Any] | None = Field(None, alias="metaEvent")
5852
error: UiPathConversationErrorEvent | None = Field(None, alias="messageError")
5953

@@ -68,7 +62,7 @@ class UiPathConversationMessageData(BaseModel):
6862
..., alias="contentParts"
6963
)
7064
tool_calls: Sequence[UiPathConversationToolCallData] = Field(..., alias="toolCalls")
71-
interrupts: Sequence[UiPathConversationInterruptData]
65+
interrupts: Sequence[Any] = Field(default_factory=list)
7266

7367
model_config = ConfigDict(validate_by_name=True, validate_by_alias=True)
7468

@@ -86,6 +80,5 @@ class UiPathConversationMessage(UiPathConversationMessageData):
8680
..., alias="contentParts"
8781
)
8882
tool_calls: Sequence[UiPathConversationToolCall] = Field(..., alias="toolCalls")
89-
interrupts: Sequence[UiPathConversationInterrupt]
9083

9184
model_config = ConfigDict(validate_by_name=True, validate_by_alias=True)

packages/uipath-core/src/uipath/core/chat/tool.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class UiPathConversationToolCallStartEvent(BaseModel):
2525
timestamp: str | None = None
2626
input: dict[str, Any] | None = None
2727
metadata: dict[str, Any] | None = Field(None, alias="metaData")
28+
require_confirmation: bool | None = Field(None, alias="requireConfirmation")
29+
input_schema: Any | None = Field(None, alias="inputSchema")
2830

2931
model_config = ConfigDict(validate_by_name=True, validate_by_alias=True)
3032

@@ -41,6 +43,15 @@ class UiPathConversationToolCallEndEvent(BaseModel):
4143
model_config = ConfigDict(validate_by_name=True, validate_by_alias=True)
4244

4345

46+
class UiPathConversationToolCallConfirmationEvent(BaseModel):
47+
"""Represents a tool call confirmation event (approve/reject)."""
48+
49+
approved: bool
50+
input: Any | None = None
51+
52+
model_config = ConfigDict(validate_by_name=True, validate_by_alias=True)
53+
54+
4455
class UiPathConversationToolCallEvent(BaseModel):
4556
"""Encapsulates the data related to a tool call event."""
4657

@@ -49,6 +60,9 @@ class UiPathConversationToolCallEvent(BaseModel):
4960
None, alias="startToolCall"
5061
)
5162
end: UiPathConversationToolCallEndEvent | None = Field(None, alias="endToolCall")
63+
confirm: UiPathConversationToolCallConfirmationEvent | None = Field(
64+
None, alias="confirmToolCall"
65+
)
5266
meta_event: dict[str, Any] | None = Field(None, alias="metaEvent")
5367
error: UiPathConversationErrorEvent | None = Field(None, alias="toolCallError")
5468

packages/uipath-core/uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/uipath-platform/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath-platform"
3-
version = "0.1.26"
3+
version = "0.1.25"
44
description = "HTTP client library for programmatic access to UiPath Platform"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"

packages/uipath-platform/src/uipath/platform/entities/_entities_service.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,17 +1115,12 @@ def _list_records_spec(
11151115
start: Optional[int] = None,
11161116
limit: Optional[int] = None,
11171117
) -> RequestSpec:
1118-
params: dict[str, Any] = {}
1119-
if start is not None:
1120-
params["start"] = start
1121-
if limit is not None:
1122-
params["limit"] = limit
11231118
return RequestSpec(
11241119
method="GET",
11251120
endpoint=Endpoint(
11261121
f"datafabric_/api/EntityService/entity/{entity_key}/read"
11271122
),
1128-
params=params,
1123+
params=({"start": start, "limit": limit}),
11291124
)
11301125

11311126
def _query_entity_records_spec(

packages/uipath-platform/tests/services/test_entities_service.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -267,41 +267,6 @@ def test_retrieve_records_with_optional_fields(
267267
limit=1,
268268
)
269269

270-
def test_retrieve_records_without_start_and_limit(
271-
self,
272-
httpx_mock: HTTPXMock,
273-
service: EntitiesService,
274-
base_url: str,
275-
org: str,
276-
tenant: str,
277-
version: str,
278-
) -> None:
279-
entity_key = uuid.uuid4()
280-
httpx_mock.add_response(
281-
url=f"{base_url}{org}{tenant}/datafabric_/api/EntityService/entity/{str(entity_key)}/read",
282-
status_code=200,
283-
json={
284-
"totalCount": 1,
285-
"value": [
286-
{"Id": "12345", "name": "record_name", "integer_field": 10},
287-
],
288-
},
289-
)
290-
291-
records = service.list_records(entity_key=str(entity_key))
292-
293-
sent_request = httpx_mock.get_request()
294-
if sent_request is None:
295-
raise Exception("No request was sent")
296-
297-
# Verify no start or limit query params are sent
298-
assert "start" not in str(sent_request.url.params)
299-
assert "limit" not in str(sent_request.url.params)
300-
301-
assert isinstance(records, list)
302-
assert len(records) == 1
303-
assert records[0].id == "12345"
304-
305270
@pytest.mark.parametrize(
306271
"sql_query",
307272
[

0 commit comments

Comments
 (0)