uipath 2.1.56__py3-none-any.whl → 2.1.57__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.
uipath/agent/_utils.py ADDED
@@ -0,0 +1,55 @@
1
+ import logging
2
+ from pathlib import PurePath
3
+
4
+ from httpx import Response
5
+ from pydantic import TypeAdapter
6
+
7
+ from uipath._cli._utils._studio_project import (
8
+ ProjectFile,
9
+ ProjectFolder,
10
+ StudioClient,
11
+ resolve_path,
12
+ )
13
+ from uipath.agent.models.agent import AgentDefinition
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ async def get_file(
19
+ folder: ProjectFolder, path: PurePath, studio_client: StudioClient
20
+ ) -> Response:
21
+ resolved = resolve_path(folder, path)
22
+ assert isinstance(resolved, ProjectFile), "Path file not found."
23
+ return await studio_client.download_file_async(resolved.id)
24
+
25
+
26
+ async def load_agent_definition(project_id: str):
27
+ studio_client = StudioClient(project_id=project_id)
28
+ project_structure = await studio_client.get_project_structure_async()
29
+
30
+ agent = (
31
+ await get_file(project_structure, PurePath("agent.json"), studio_client)
32
+ ).json()
33
+
34
+ resolved_path = resolve_path(project_structure, PurePath("resources"))
35
+ if isinstance(resolved_path, ProjectFolder):
36
+ resource_folders = resolved_path.folders
37
+ else:
38
+ logger.warning(
39
+ "Unable to read resource information from project. Defaulting to empty resources."
40
+ )
41
+ resource_folders = []
42
+
43
+ resources = []
44
+ for resource in resource_folders:
45
+ resources.append(
46
+ (await get_file(resource, PurePath("resource.json"), studio_client)).json()
47
+ )
48
+
49
+ agent_definition = {
50
+ "id": project_id,
51
+ "name": project_structure.name,
52
+ "resources": resources,
53
+ **agent,
54
+ }
55
+ return TypeAdapter(AgentDefinition).validate_python(agent_definition)
@@ -0,0 +1,344 @@
1
+ """Agent Models."""
2
+
3
+ from enum import Enum
4
+ from typing import Annotated, Any, Dict, List, Literal, Optional, Union
5
+
6
+ from pydantic import BaseModel, ConfigDict, Discriminator, Field, Tag
7
+
8
+ from uipath.models import Connection
9
+
10
+
11
+ class AgentResourceType(str, Enum):
12
+ """Enum for resource types."""
13
+
14
+ TOOL = "tool"
15
+ CONTEXT = "context"
16
+ ESCALATION = "escalation"
17
+
18
+
19
+ class BaseAgentResourceConfig(BaseModel):
20
+ """Base resource model with common properties."""
21
+
22
+ name: str
23
+ description: str
24
+
25
+ model_config = ConfigDict(
26
+ validate_by_name=True, validate_by_alias=True, extra="allow"
27
+ )
28
+
29
+
30
+ class AgentUnknownResourceConfig(BaseAgentResourceConfig):
31
+ """Fallback for unknown or future resource types."""
32
+
33
+ resource_type: str = Field(alias="$resourceType")
34
+
35
+ model_config = ConfigDict(extra="allow")
36
+
37
+
38
+ class BaseAgentToolResourceConfig(BaseAgentResourceConfig):
39
+ """Tool resource with tool-specific properties."""
40
+
41
+ resource_type: Literal[AgentResourceType.TOOL] = Field(alias="$resourceType")
42
+ input_schema: Dict[str, Any] = Field(
43
+ ..., alias="inputSchema", description="Input schema for the tool"
44
+ )
45
+
46
+ model_config = ConfigDict(
47
+ validate_by_name=True, validate_by_alias=True, extra="allow"
48
+ )
49
+
50
+
51
+ class AgentToolType(str, Enum):
52
+ """Agent tool type."""
53
+
54
+ AGENT = "agent"
55
+ INTEGRATION = "integration"
56
+
57
+
58
+ class AgentToolSettings(BaseModel):
59
+ """Settings for tool configuration."""
60
+
61
+ max_attempts: Optional[int] = Field(None, alias="maxAttempts")
62
+ retry_delay: Optional[int] = Field(None, alias="retryDelay")
63
+ timeout: Optional[int] = Field(None)
64
+
65
+ model_config = ConfigDict(
66
+ validate_by_name=True, validate_by_alias=True, extra="allow"
67
+ )
68
+
69
+
70
+ class AgentProcessToolProperties(BaseModel):
71
+ """Properties specific to tool configuration."""
72
+
73
+ folder_path: Optional[str] = Field(None, alias="folderPath")
74
+ process_name: Optional[str] = Field(None, alias="processName")
75
+
76
+ model_config = ConfigDict(
77
+ validate_by_name=True, validate_by_alias=True, extra="allow"
78
+ )
79
+
80
+
81
+ class AgentProcessToolResourceConfig(BaseAgentToolResourceConfig):
82
+ """Tool resource with tool-specific properties."""
83
+
84
+ type: Literal[AgentToolType.AGENT] = AgentToolType.AGENT
85
+ output_schema: Dict[str, Any] = Field(
86
+ ..., alias="outputSchema", description="Output schema for the tool"
87
+ )
88
+ properties: AgentProcessToolProperties = Field(
89
+ ..., description="Tool-specific properties"
90
+ )
91
+ settings: AgentToolSettings = Field(
92
+ default_factory=AgentToolSettings, description="Tool settings"
93
+ )
94
+
95
+ model_config = ConfigDict(
96
+ validate_by_name=True, validate_by_alias=True, extra="allow"
97
+ )
98
+
99
+
100
+ class AgentIntegrationToolProperties(BaseModel):
101
+ """Properties specific to tool configuration."""
102
+
103
+ tool_path: str = Field(..., alias="toolPath")
104
+ object_name: str = Field(..., alias="objectName")
105
+ tool_display_name: str = Field(..., alias="toolDisplayName")
106
+ tool_description: str = Field(..., alias="toolDescription")
107
+ method: str = Field(..., alias="method")
108
+ connection: Connection = Field(..., alias="connection")
109
+ body_structure: dict[str, Any] = Field(..., alias="bodyStructure")
110
+
111
+ model_config = ConfigDict(
112
+ validate_by_name=True, validate_by_alias=True, extra="allow"
113
+ )
114
+
115
+
116
+ class AgentIntegrationToolResourceConfig(BaseAgentToolResourceConfig):
117
+ """Tool resource with tool-specific properties."""
118
+
119
+ type: Literal[AgentToolType.INTEGRATION] = AgentToolType.INTEGRATION
120
+ properties: AgentIntegrationToolProperties
121
+
122
+ model_config = ConfigDict(
123
+ validate_by_name=True, validate_by_alias=True, extra="allow"
124
+ )
125
+
126
+
127
+ class AgentUnknownToolResourceConfig(BaseAgentToolResourceConfig):
128
+ """Fallback for unknown or future tool types."""
129
+
130
+ resource_type: Literal[AgentResourceType.TOOL] = AgentResourceType.TOOL
131
+ type: str = Field(alias="$resourceType")
132
+
133
+ model_config = ConfigDict(extra="allow")
134
+
135
+
136
+ class AgentContextSettings(BaseModel):
137
+ """Settings for context configuration."""
138
+
139
+ result_count: int = Field(alias="resultCount")
140
+ retrieval_mode: Literal["Semantic", "Structured"] = Field(alias="retrievalMode")
141
+ threshold: float = Field(default=0)
142
+
143
+ model_config = ConfigDict(
144
+ validate_by_name=True, validate_by_alias=True, extra="allow"
145
+ )
146
+
147
+
148
+ class AgentContextResourceConfig(BaseAgentResourceConfig):
149
+ """Context resource with context-specific properties."""
150
+
151
+ resource_type: Literal[AgentResourceType.CONTEXT] = Field(alias="$resourceType")
152
+ folder_path: str = Field(alias="folderPath")
153
+ index_name: str = Field(alias="indexName")
154
+ settings: AgentContextSettings = Field(..., description="Context settings")
155
+
156
+ model_config = ConfigDict(
157
+ validate_by_name=True, validate_by_alias=True, extra="allow"
158
+ )
159
+
160
+
161
+ class AgentEscalationChannelProperties(BaseModel):
162
+ """Agent escalation channel properties."""
163
+
164
+ app_name: str = Field(..., alias="appName")
165
+ app_version: int = Field(..., alias="appVersion")
166
+ folder_name: Optional[str] = Field(..., alias="folderName")
167
+ resource_key: str = Field(..., alias="resourceKey")
168
+ is_actionable_message_enabled: Optional[bool] = Field(
169
+ None, alias="isActionableMessageEnabled"
170
+ )
171
+ actionable_message_meta_data: Optional[Any] = Field(
172
+ None, alias="actionableMessageMetaData"
173
+ )
174
+
175
+ model_config = ConfigDict(
176
+ validate_by_name=True, validate_by_alias=True, extra="allow"
177
+ )
178
+
179
+
180
+ class AgentEscalationChannel(BaseModel):
181
+ """Agent escalation channel."""
182
+
183
+ id: str = Field(..., alias="id")
184
+ name: str = Field(..., alias="name")
185
+ type: str = Field(alias="type")
186
+ description: str = Field(..., alias="description")
187
+ input_schema: Dict[str, Any] = Field(
188
+ ..., alias="inputSchema", description="Input schema for the escalation channel"
189
+ )
190
+ output_schema: Dict[str, Any] = Field(
191
+ ...,
192
+ alias="outputSchema",
193
+ description="Output schema for the escalation channel",
194
+ )
195
+ properties: AgentEscalationChannelProperties = Field(..., alias="properties")
196
+
197
+ model_config = ConfigDict(
198
+ validate_by_name=True, validate_by_alias=True, extra="allow"
199
+ )
200
+
201
+
202
+ class AgentEscalationResourceConfig(BaseAgentResourceConfig):
203
+ """Escalation resource with escalation-specific properties."""
204
+
205
+ resource_type: Literal[AgentResourceType.ESCALATION] = Field(alias="$resourceType")
206
+ channels: List[AgentEscalationChannel] = Field(alias="channels")
207
+
208
+ # escalation_type: int = Field(..., alias="escalationType")
209
+ is_agent_memory_enabled: bool = Field(alias="isAgentMemoryEnabled")
210
+
211
+ model_config = ConfigDict(
212
+ validate_by_name=True, validate_by_alias=True, extra="allow"
213
+ )
214
+
215
+
216
+ def custom_discriminator(data: Any) -> str:
217
+ """Discriminator for resource types. This is required due to multi-key discrimination requirements for resources."""
218
+ if isinstance(data, dict):
219
+ resource_type = data.get("$resourceType")
220
+ if resource_type == AgentResourceType.CONTEXT:
221
+ return "AgentContextResourceConfig"
222
+ elif resource_type == AgentResourceType.ESCALATION:
223
+ return "AgentEscalationResourceConfig"
224
+ elif resource_type == AgentResourceType.TOOL:
225
+ tool_type = data.get("type")
226
+ if tool_type == AgentToolType.AGENT:
227
+ return "AgentProcessToolResourceConfig"
228
+ elif tool_type == AgentToolType.INTEGRATION:
229
+ return "AgentIntegrationToolResourceConfig"
230
+ else:
231
+ return "AgentUnknownToolResourceConfig"
232
+ else:
233
+ return "AgentUnknownResourceConfig"
234
+ raise ValueError("Invalid discriminator values")
235
+
236
+
237
+ AgentResourceConfig = Annotated[
238
+ Union[
239
+ Annotated[
240
+ AgentProcessToolResourceConfig, Tag("AgentProcessToolResourceConfig")
241
+ ],
242
+ Annotated[
243
+ AgentIntegrationToolResourceConfig,
244
+ Tag("AgentIntegrationToolResourceConfig"),
245
+ ],
246
+ Annotated[
247
+ AgentUnknownToolResourceConfig, Tag("AgentUnknownToolResourceConfig")
248
+ ],
249
+ Annotated[AgentContextResourceConfig, Tag("AgentContextResourceConfig")],
250
+ Annotated[AgentEscalationResourceConfig, Tag("AgentEscalationResourceConfig")],
251
+ Annotated[AgentUnknownResourceConfig, Tag("AgentUnknownResourceConfig")],
252
+ ],
253
+ Field(discriminator=Discriminator(custom_discriminator)),
254
+ ]
255
+
256
+
257
+ class BaseAgentDefinition(BaseModel):
258
+ """Main agent model."""
259
+
260
+ id: str = Field(..., description="Agent id or project name")
261
+ name: str = Field(..., description="Agent name or project name")
262
+ input_schema: Dict[str, Any] = Field(
263
+ ..., alias="inputSchema", description="JSON schema for input arguments"
264
+ )
265
+ output_schema: Dict[str, Any] = Field(
266
+ ..., alias="outputSchema", description="JSON schema for output arguments"
267
+ )
268
+ version: str = Field("1.0.0", description="Agent version")
269
+ resources: List[AgentResourceConfig] = Field(
270
+ ..., description="List of tools, context, and escalation resources"
271
+ )
272
+
273
+ model_config = ConfigDict(
274
+ validate_by_name=True, validate_by_alias=True, extra="allow"
275
+ )
276
+
277
+
278
+ class AgentType(str, Enum):
279
+ """Agent type."""
280
+
281
+ LOW_CODE = "lowCode"
282
+
283
+
284
+ class AgentMessageRole(str, Enum):
285
+ """Enum for message roles."""
286
+
287
+ SYSTEM = "system"
288
+ USER = "user"
289
+
290
+
291
+ class AgentMessage(BaseModel):
292
+ """Message model for agent conversations."""
293
+
294
+ role: AgentMessageRole
295
+ content: str
296
+
297
+ model_config = ConfigDict(
298
+ validate_by_name=True, validate_by_alias=True, extra="allow"
299
+ )
300
+
301
+
302
+ class AgentSettings(BaseModel):
303
+ """Settings for agent configuration."""
304
+
305
+ engine: str = Field(..., description="Engine type, e.g., 'basic-v1'")
306
+ model: str = Field(..., description="LLM model identifier")
307
+ max_tokens: int = Field(
308
+ ..., alias="maxTokens", description="Maximum number of tokens"
309
+ )
310
+ temperature: float = Field(..., description="Temperature for response generation")
311
+
312
+ model_config = ConfigDict(
313
+ validate_by_name=True, validate_by_alias=True, extra="allow"
314
+ )
315
+
316
+
317
+ class LowCodeAgentDefinition(BaseAgentDefinition):
318
+ """Low code agent definition."""
319
+
320
+ type: Literal[AgentType.LOW_CODE] = AgentType.LOW_CODE
321
+ messages: List[AgentMessage] = Field(
322
+ ..., description="List of system and user messages"
323
+ )
324
+ features: List[Any] = Field(
325
+ default_factory=list, description="Currently empty feature list"
326
+ )
327
+ settings: AgentSettings = Field(..., description="Agent settings configuration")
328
+
329
+
330
+ KnownAgentDefinition = Annotated[
331
+ Union[LowCodeAgentDefinition,],
332
+ Field(discriminator="type"),
333
+ ]
334
+
335
+
336
+ class UnknownAgentDefinition(BaseAgentDefinition):
337
+ """Fallback for unknown agent definitions."""
338
+
339
+ type: str
340
+
341
+ model_config = ConfigDict(extra="allow")
342
+
343
+
344
+ AgentDefinition = Union[KnownAgentDefinition, UnknownAgentDefinition]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.56
3
+ Version: 2.1.57
4
4
  Summary: Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools.
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-python
@@ -101,6 +101,7 @@ uipath/_utils/_ssl_context.py,sha256=xSYitos0eJc9cPHzNtHISX9PBvL6D2vas5G_GiBdLp8
101
101
  uipath/_utils/_url.py,sha256=-4eluSrIZCUlnQ3qU17WPJkgaC2KwF9W5NeqGnTNGGo,2512
102
102
  uipath/_utils/_user_agent.py,sha256=pVJkFYacGwaQBomfwWVAvBQgdBUo62e4n3-fLIajWUU,563
103
103
  uipath/_utils/constants.py,sha256=defPi1_4sLojgKVsbdIjkfME8O8n-iLmJnj_-n4Ox8s,1108
104
+ uipath/agent/_utils.py,sha256=Z5x7TprkEudrd_aC9YI5ObyT8O05_WkmBJTpqkQKOGQ,1641
104
105
  uipath/agent/conversation/__init__.py,sha256=5hK-Iz131mnd9m6ANnpZZffxXZLVFDQ9GTg5z9ik1oQ,5265
105
106
  uipath/agent/conversation/async_stream.py,sha256=BA_8uU1DgE3VpU2KkJj0rkI3bAHLk_ZJKsajR0ipMpo,2055
106
107
  uipath/agent/conversation/citation.py,sha256=42dGv-wiYx3Lt7MPuPCFTkjAlSADFSzjyNXuZHdxqvo,2253
@@ -111,6 +112,7 @@ uipath/agent/conversation/exchange.py,sha256=nuk1tEMBHc_skrraT17d8U6AtyJ3h07ExGQ
111
112
  uipath/agent/conversation/message.py,sha256=1ZkEs146s79TrOAWCQwzBAEJvjAu4lQBpJ64tKXDgGE,2142
112
113
  uipath/agent/conversation/meta.py,sha256=3t0eS9UHoAPHre97QTUeVbjDhnMX4zj4-qG6ju0B8wY,315
113
114
  uipath/agent/conversation/tool.py,sha256=ol8XI8AVd-QNn5auXNBPcCzOkh9PPFtL7hTK3kqInkU,2191
115
+ uipath/agent/models/agent.py,sha256=jhBxZwNRsB-1F-aD6ZELWaX3cFzgGIJ25cCHIb-RzhE,10965
114
116
  uipath/eval/_helpers/__init__.py,sha256=GSmZMryjuO3Wo_zdxZdrHCRRsgOxsVFYkYgJ15YNC3E,86
115
117
  uipath/eval/_helpers/helpers.py,sha256=iE2HHdMiAdAMLqxHkPKHpfecEtAuN5BTBqvKFTI8ciE,1315
116
118
  uipath/eval/evaluators/__init__.py,sha256=DJAAhgv0I5UfBod4sGnSiKerfrz1iMmk7GNFb71V8eI,494
@@ -148,8 +150,8 @@ uipath/tracing/_traced.py,sha256=CsuNMy67R5HCunuu84LnRNwcadNLhtHLMEawGaNsTYs,184
148
150
  uipath/tracing/_utils.py,sha256=wJRELaPu69iY0AhV432Dk5QYf_N_ViRU4kAUG1BI1ew,10384
149
151
  uipath/utils/__init__.py,sha256=VD-KXFpF_oWexFg6zyiWMkxl2HM4hYJMIUDZ1UEtGx0,105
150
152
  uipath/utils/_endpoints_manager.py,sha256=iRTl5Q0XAm_YgcnMcJOXtj-8052sr6jpWuPNz6CgT0Q,8408
151
- uipath-2.1.56.dist-info/METADATA,sha256=FwOSIJ0R0gXGh9pIvx6xTl2GjTVElDiovjDpJ35X9ik,6482
152
- uipath-2.1.56.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
153
- uipath-2.1.56.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
154
- uipath-2.1.56.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
155
- uipath-2.1.56.dist-info/RECORD,,
153
+ uipath-2.1.57.dist-info/METADATA,sha256=LZV3q6VHuyZ0YY919szKSEItcd9Ir0p4wocixl1r7T0,6482
154
+ uipath-2.1.57.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
155
+ uipath-2.1.57.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
156
+ uipath-2.1.57.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
157
+ uipath-2.1.57.dist-info/RECORD,,