Skip to content

Commit cf67632

Browse files
committed
fix: keep workspace mapping dependency-safe
1 parent 75d1ab2 commit cf67632

5 files changed

Lines changed: 21 additions & 12 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""Shared client-side tool types."""
2+
3+
from typing import Any, TypedDict
4+
5+
6+
class ClientSideToolInfo(TypedDict):
7+
"""Schemas exposed for a client-side tool."""
8+
9+
input_schema: dict[str, Any] | None
10+
output_schema: dict[str, Any] | None
11+
12+
13+
__all__ = ["ClientSideToolInfo"]

src/uipath_langchain/agent/tools/client_side_tool.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import json
44
from contextvars import ContextVar
5-
from typing import Annotated, Any, TypedDict
5+
from typing import Annotated, Any
66

77
from langchain_core.messages import ToolMessage
88
from langchain_core.tools import InjectedToolCallId, StructuredTool
99
from uipath.agent.models.agent import AgentClientSideToolResourceConfig
1010
from uipath.eval.mocks import mockable
1111

12+
from uipath_langchain._client_side_tool_types import (
13+
ClientSideToolInfo as ClientSideToolInfo,
14+
)
1215
from uipath_langchain._utils.durable_interrupt import durable_interrupt
1316
from uipath_langchain.agent.react.jsonschema_pydantic_converter import (
1417
create_model as create_model_from_schema,
@@ -26,11 +29,6 @@
2629
UIPATH_CLIENT_SIDE_TOOLS_INPUT_KEY = "uipath__client_side_tools"
2730

2831

29-
class ClientSideToolInfo(TypedDict):
30-
input_schema: dict[str, Any] | None
31-
output_schema: dict[str, Any] | None
32-
33-
3432
def apply_tool_filter(
3533
declared_tools: list[str | dict[str, Any]],
3634
agent_tools: dict[str, ClientSideToolInfo],

src/uipath_langchain/runtime/messages.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
)
4141
from uipath.runtime import UiPathRuntimeStorageProtocol
4242

43-
from uipath_langchain.agent.tools.client_side_tool import ClientSideToolInfo
43+
from uipath_langchain._client_side_tool_types import ClientSideToolInfo
4444
from uipath_langchain.chat.hitl import IS_CONVERSATIONAL_CLIENT_SIDE_TOOL
4545

4646
from ._citations import (
@@ -188,9 +188,7 @@ def _map_messages_internal(
188188
)
189189
)
190190
elif isinstance(data, UiPathExternalValue):
191-
part_metadata = getattr(
192-
uipath_content_part, "metadata", None
193-
)
191+
part_metadata = getattr(uipath_content_part, "metadata", None)
194192
has_workspace_metadata = (
195193
isinstance(part_metadata, dict)
196194
and part_metadata.get("fileKind") == "workspace"

src/uipath_langchain/runtime/runtime.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
)
3333
from uipath.runtime.schema import UiPathRuntimeSchema
3434

35-
from uipath_langchain.agent.tools.client_side_tool import ClientSideToolInfo
35+
from uipath_langchain._client_side_tool_types import ClientSideToolInfo
3636
from uipath_langchain.chat.hitl import (
3737
IS_CONVERSATIONAL_CLIENT_SIDE_TOOL,
3838
get_confirmation_schema,

tests/runtime/test_chat_message_mapper_workspace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def test_assistant_file_parts_are_skipped() -> None:
4141
data=UiPathInlineValue(inline="done, see the plan"),
4242
citations=[],
4343
),
44-
_file_part("p2", "plan/todo.md", metadata={"fileKind": "workspace"}),
44+
_file_part("ws-a1-0", "plan/todo.md", metadata={"fileKind": "workspace"}),
4545
],
4646
tool_calls=[],
4747
)

0 commit comments

Comments
 (0)