Skip to content

Commit fb053c9

Browse files
authored
Merge pull request #298 from UiPath/akshaya/update_output_schema
feat(ReturnDicts): tools to return dicts
2 parents b949f3a + c9c0f85 commit fb053c9

File tree

5 files changed

+1799
-1816
lines changed

5 files changed

+1799
-1816
lines changed

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
[project]
22
name = "uipath-langchain"
3-
version = "0.1.8"
3+
version = "0.1.9"
44
description = "UiPath Langchain"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"
77
dependencies = [
88
"uipath-runtime>=0.1.2, <0.2.0",
9-
"uipath>=2.2.8, <2.3.0",
9+
"uipath>=2.2.11, <2.3.0",
1010
"langgraph>=1.0.0, <2.0.0",
1111
"langchain-core>=1.0.0, <2.0.0",
1212
"langgraph-checkpoint-sqlite>=3.0.0, <4.0.0",

src/uipath_langchain/agent/tools/context_tool.py

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

33
from __future__ import annotations
44

5+
from typing import Any
6+
57
from langchain_core.documents import Document
68
from langchain_core.tools import StructuredTool
79
from pydantic import BaseModel, Field
@@ -40,11 +42,8 @@ class ContextOutputSchemaModel(BaseModel):
4042
input_schema=input_model.model_json_schema(),
4143
output_schema=output_model.model_json_schema(),
4244
)
43-
async def context_tool_fn(query: str) -> ContextOutputSchemaModel:
44-
documents = await retriever.ainvoke(query)
45-
return ContextOutputSchemaModel(
46-
documents=documents,
47-
)
45+
async def context_tool_fn(query: str) -> dict[str, Any]:
46+
return {"documents": await retriever.ainvoke(query)}
4847

4948
return StructuredTool(
5049
name=tool_name,

src/uipath_langchain/agent/tools/integration_tool.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from jsonschema_pydantic_converter import transform as create_model
88
from langchain_core.tools import StructuredTool
9-
from pydantic import TypeAdapter
109
from uipath.agent.models.agent import AgentIntegrationToolResourceConfig
1110
from uipath.eval.mocks import mockable
1211
from uipath.platform import UiPath
@@ -137,17 +136,12 @@ def sanitize_for_serialization(args: dict[str, Any]) -> dict[str, Any]:
137136
input_schema=input_model.model_json_schema(),
138137
output_schema=output_model.model_json_schema(),
139138
)
140-
async def integration_tool_fn(**kwargs: Any) -> output_model:
141-
try:
142-
result = await sdk.connections.invoke_activity_async(
143-
activity_metadata=activity_metadata,
144-
connection_id=connection_id,
145-
activity_input=sanitize_for_serialization(kwargs),
146-
)
147-
except Exception:
148-
raise
149-
150-
return TypeAdapter(output_model).validate_python(result)
139+
async def integration_tool_fn(**kwargs: Any):
140+
return await sdk.connections.invoke_activity_async(
141+
activity_metadata=activity_metadata,
142+
connection_id=connection_id,
143+
activity_input=sanitize_for_serialization(kwargs),
144+
)
151145

152146
tool = StructuredTool(
153147
name=tool_name,
@@ -156,6 +150,4 @@ async def integration_tool_fn(**kwargs: Any) -> output_model:
156150
coroutine=integration_tool_fn,
157151
)
158152

159-
tool.__dict__["OutputType"] = output_model
160-
161153
return tool

src/uipath_langchain/agent/tools/process_tool.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
from jsonschema_pydantic_converter import transform as create_model
88
from langchain_core.tools import StructuredTool
9-
from langgraph.types import interrupt
10-
from pydantic import TypeAdapter
119
from uipath.agent.models.agent import AgentProcessToolResourceConfig
1210
from uipath.eval.mocks import mockable
1311
from uipath.platform.common import InvokeProcess
@@ -30,25 +28,19 @@ def create_process_tool(resource: AgentProcessToolResourceConfig) -> StructuredT
3028
input_schema=input_model.model_json_schema(),
3129
output_schema=output_model.model_json_schema(),
3230
)
33-
async def process_tool_fn(**kwargs: Any) -> output_model:
34-
result = interrupt(
35-
InvokeProcess(
36-
name=process_name,
37-
input_arguments=kwargs,
38-
process_folder_path=folder_path,
39-
process_folder_key=None,
40-
)
31+
async def process_tool_fn(**kwargs: Any):
32+
return InvokeProcess(
33+
name=process_name,
34+
input_arguments=kwargs,
35+
process_folder_path=folder_path,
36+
process_folder_key=None,
4137
)
4238

43-
return TypeAdapter(output_model).validate_python(result)
44-
4539
tool = StructuredTool(
4640
name=tool_name,
4741
description=resource.description,
4842
args_schema=input_model,
4943
coroutine=process_tool_fn,
5044
)
5145

52-
tool.__dict__["OutputType"] = output_model
53-
5446
return tool

0 commit comments

Comments
 (0)