uipath 2.1.101__py3-none-any.whl → 2.1.103__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.

Potentially problematic release.


This version of uipath might be problematic. Click here for more details.

@@ -341,6 +341,7 @@ class UiPathRuntimeContext(BaseModel):
341
341
  result: Optional[UiPathRuntimeResult] = None
342
342
  execution_output_file: Optional[str] = None
343
343
  input_file: Optional[str] = None
344
+ trace_file: Optional[str] = None
344
345
  is_eval_run: bool = False
345
346
  log_handler: Optional[logging.Handler] = None
346
347
  chat_handler: Optional[UiPathConversationHandler] = None
uipath/_cli/cli_run.py CHANGED
@@ -8,7 +8,7 @@ import click
8
8
 
9
9
  from uipath._cli._runtime._runtime_factory import generate_runtime_factory
10
10
  from uipath._cli._utils._debug import setup_debugging
11
- from uipath.tracing import LlmOpsHttpExporter
11
+ from uipath.tracing import JsonLinesFileExporter, LlmOpsHttpExporter
12
12
 
13
13
  from .._utils.constants import (
14
14
  ENV_JOB_ID,
@@ -44,6 +44,12 @@ console = ConsoleLogger()
44
44
  type=click.Path(exists=False),
45
45
  help="File path where the output will be written",
46
46
  )
47
+ @click.option(
48
+ "--trace-file",
49
+ required=False,
50
+ type=click.Path(exists=False),
51
+ help="File path where the trace spans will be written (JSON Lines format)",
52
+ )
47
53
  @click.option(
48
54
  "--debug",
49
55
  is_flag=True,
@@ -63,6 +69,7 @@ def run(
63
69
  file: Optional[str],
64
70
  input_file: Optional[str],
65
71
  output_file: Optional[str],
72
+ trace_file: Optional[str],
66
73
  debug: bool,
67
74
  debug_port: int,
68
75
  ) -> None:
@@ -73,6 +80,7 @@ def run(
73
80
  "resume": resume,
74
81
  "input_file": file or input_file,
75
82
  "execution_output_file": output_file,
83
+ "trace_file": trace_file,
76
84
  "debug": debug,
77
85
  }
78
86
  input_file = file or input_file
@@ -87,6 +95,7 @@ def run(
87
95
  resume,
88
96
  input_file=input_file,
89
97
  execution_output_file=output_file,
98
+ trace_file=trace_file,
90
99
  debug=debug,
91
100
  debug_port=debug_port,
92
101
  )
@@ -110,7 +119,12 @@ def run(
110
119
  context = runtime_factory.new_context(**context_args)
111
120
  if context.job_id:
112
121
  runtime_factory.add_span_exporter(LlmOpsHttpExporter())
122
+
123
+ if trace_file:
124
+ runtime_factory.add_span_exporter(JsonLinesFileExporter(trace_file))
125
+
113
126
  result = await runtime_factory.execute(context)
127
+
114
128
  if not context.job_id:
115
129
  console.info(result.output)
116
130
 
@@ -65,6 +65,7 @@ uv run uipath init --infer-bindings
65
65
  | `-f`, `--file` | value | none | File path for the .json input |
66
66
  | `--input-file` | value | none | Alias for '-f/--file' arguments |
67
67
  | `--output-file` | value | none | File path where the output will be written |
68
+ | `--trace-file` | value | none | File path where the trace spans will be written (JSON Lines format) |
68
69
  | `--debug` | flag | false | Enable debugging with debugpy. The process will wait for a debugger to attach. |
69
70
  | `--debug-port` | value | `5678` | Port for the debug server (default: 5678) |
70
71
 
@@ -53,11 +53,11 @@ class BaseAgentToolResourceConfig(BaseAgentResourceConfig):
53
53
  class AgentToolType(str, Enum):
54
54
  """Agent tool type."""
55
55
 
56
- AGENT = "agent"
57
- PROCESS = "process"
58
- API = "api"
59
- PROCESS_ORCHESTRATION = "processorchestration"
60
- INTEGRATION = "integration"
56
+ AGENT = "Agent"
57
+ PROCESS = "Process"
58
+ API = "Api"
59
+ PROCESS_ORCHESTRATION = "ProcessOrchestration"
60
+ INTEGRATION = "Integration"
61
61
 
62
62
 
63
63
  class AgentToolSettings(BaseModel):
@@ -116,9 +116,15 @@ class AgentProcessToolResourceConfig(BaseAgentToolResourceConfig):
116
116
  @field_validator("type", mode="before")
117
117
  @classmethod
118
118
  def normalize_type(cls, v: Any) -> str:
119
- """Normalize tool type to lowercase format."""
119
+ """Normalize tool type from lowercase to properly cased enum values."""
120
120
  if isinstance(v, str):
121
- return v.lower()
121
+ lowercase_mapping = {
122
+ "agent": AgentToolType.AGENT,
123
+ "process": AgentToolType.PROCESS,
124
+ "api": AgentToolType.API,
125
+ "processorchestration": AgentToolType.PROCESS_ORCHESTRATION,
126
+ }
127
+ return lowercase_mapping.get(v.lower(), v)
122
128
  return v
123
129
 
124
130
  model_config = ConfigDict(
@@ -173,6 +179,7 @@ class AgentIntegrationToolResourceConfig(BaseAgentToolResourceConfig):
173
179
 
174
180
  type: Literal[AgentToolType.INTEGRATION] = AgentToolType.INTEGRATION
175
181
  properties: AgentIntegrationToolProperties
182
+ settings: Optional[AgentToolSettings] = Field(None, description="Tool settings")
176
183
  arguments: Optional[Dict[str, Any]] = Field(
177
184
  default_factory=dict, description="Tool arguments"
178
185
  )
@@ -181,9 +188,9 @@ class AgentIntegrationToolResourceConfig(BaseAgentToolResourceConfig):
181
188
  @field_validator("type", mode="before")
182
189
  @classmethod
183
190
  def normalize_type(cls, v: Any) -> str:
184
- """Normalize tool type to lowercase format."""
185
- if isinstance(v, str):
186
- return v.lower()
191
+ """Normalize tool type from lowercase to properly cased enum values."""
192
+ if isinstance(v, str) and v.lower() == "integration":
193
+ return AgentToolType.INTEGRATION
187
194
  return v
188
195
 
189
196
  model_config = ConfigDict(
@@ -378,15 +385,20 @@ def custom_discriminator(data: Any) -> str:
378
385
  return "AgentMcpResourceConfig"
379
386
  elif resource_type == AgentResourceType.TOOL:
380
387
  tool_type = data.get("type")
381
- if tool_type in [
382
- AgentToolType.AGENT,
383
- AgentToolType.PROCESS,
384
- AgentToolType.API,
385
- AgentToolType.PROCESS_ORCHESTRATION,
386
- ]:
387
- return "AgentProcessToolResourceConfig"
388
- elif tool_type == AgentToolType.INTEGRATION:
389
- return "AgentIntegrationToolResourceConfig"
388
+ if isinstance(tool_type, str):
389
+ tool_type_lower = tool_type.lower()
390
+ process_tool_types = {
391
+ AgentToolType.AGENT.value.lower(),
392
+ AgentToolType.PROCESS.value.lower(),
393
+ AgentToolType.API.value.lower(),
394
+ AgentToolType.PROCESS_ORCHESTRATION.value.lower(),
395
+ }
396
+ if tool_type_lower in process_tool_types:
397
+ return "AgentProcessToolResourceConfig"
398
+ elif tool_type_lower == AgentToolType.INTEGRATION.value.lower():
399
+ return "AgentIntegrationToolResourceConfig"
400
+ else:
401
+ return "AgentUnknownToolResourceConfig"
390
402
  else:
391
403
  return "AgentUnknownToolResourceConfig"
392
404
  else:
@@ -0,0 +1,22 @@
1
+ """UiPath ReAct Agent Constructs.
2
+
3
+ This module includes UiPath ReAct Agent Loop constructs such as prompts, tools
4
+ """
5
+
6
+ from .prompts import AGENT_SYSTEM_PROMPT_TEMPLATE
7
+ from .tools import (
8
+ END_EXECUTION_TOOL,
9
+ RAISE_ERROR_TOOL,
10
+ EndExecutionToolSchemaModel,
11
+ FlowControlToolConfig,
12
+ RaiseErrorToolSchemaModel,
13
+ )
14
+
15
+ __all__ = [
16
+ "AGENT_SYSTEM_PROMPT_TEMPLATE",
17
+ "FlowControlToolConfig",
18
+ "END_EXECUTION_TOOL",
19
+ "RAISE_ERROR_TOOL",
20
+ "EndExecutionToolSchemaModel",
21
+ "RaiseErrorToolSchemaModel",
22
+ ]
@@ -1,4 +1,4 @@
1
- """LowCode Agent Prompts."""
1
+ """ReAct Agent Meta Prompts."""
2
2
 
3
3
  AGENT_SYSTEM_PROMPT_TEMPLATE = """
4
4
  You are an advanced automatic agent equipped with a variety of tools to assist users.
@@ -1,9 +1,28 @@
1
- """LowCode Agent Tools."""
1
+ """UiPath ReAct Agent Control Flow Tools."""
2
+
3
+ from dataclasses import dataclass
4
+ from enum import Enum
2
5
 
3
6
  from pydantic import BaseModel, ConfigDict, Field
4
7
 
5
- TOOL_FLOW_CONTROL_END_EXECUTION = "end_execution"
6
- TOOL_FLOW_CONTROL_RAISE_ERROR = "raise_error"
8
+
9
+ class FlowControlToolName(str, Enum):
10
+ """Names of control flow tools."""
11
+
12
+ END_EXECUTION = "end_execution"
13
+ RAISE_ERROR = "raise_error"
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class FlowControlToolConfig:
18
+ """Flow control tool configuration.
19
+
20
+ Encapsulates the information needed to create a flow control tool
21
+ """
22
+
23
+ name: str
24
+ description: str
25
+ args_schema: type[BaseModel]
7
26
 
8
27
 
9
28
  class EndExecutionToolSchemaModel(BaseModel):
@@ -40,3 +59,16 @@ class RaiseErrorToolSchemaModel(BaseModel):
40
59
  )
41
60
 
42
61
  model_config = ConfigDict(extra="forbid")
62
+
63
+
64
+ END_EXECUTION_TOOL = FlowControlToolConfig(
65
+ name=FlowControlToolName.END_EXECUTION,
66
+ description="Ends the execution of the agent",
67
+ args_schema=EndExecutionToolSchemaModel,
68
+ )
69
+
70
+ RAISE_ERROR_TOOL = FlowControlToolConfig(
71
+ name=FlowControlToolName.RAISE_ERROR,
72
+ description="Raises an error and ends the execution of the agent",
73
+ args_schema=RaiseErrorToolSchemaModel,
74
+ )
@@ -1,4 +1,13 @@
1
- from ._otel_exporters import LlmOpsHttpExporter # noqa: D104
1
+ from ._otel_exporters import ( # noqa: D104
2
+ JsonLinesFileExporter,
3
+ LlmOpsHttpExporter,
4
+ )
2
5
  from ._traced import TracingManager, traced, wait_for_tracers # noqa: D104
3
6
 
4
- __all__ = ["TracingManager", "traced", "wait_for_tracers", "LlmOpsHttpExporter"]
7
+ __all__ = [
8
+ "TracingManager",
9
+ "traced",
10
+ "wait_for_tracers",
11
+ "LlmOpsHttpExporter",
12
+ "JsonLinesFileExporter",
13
+ ]
@@ -2,7 +2,7 @@ import json
2
2
  import logging
3
3
  import os
4
4
  import time
5
- from typing import Any, Dict, Optional, Sequence
5
+ from typing import Any, Dict, List, Optional, Sequence
6
6
 
7
7
  import httpx
8
8
  from opentelemetry.sdk.trace import ReadableSpan
@@ -18,18 +18,88 @@ from ._utils import _SpanUtils
18
18
  logger = logging.getLogger(__name__)
19
19
 
20
20
 
21
+ def _safe_parse_json(s: Any) -> Any:
22
+ """Safely parse a JSON string, returning the original if not a string or on error."""
23
+ if not isinstance(s, str):
24
+ return s
25
+ try:
26
+ return json.loads(s)
27
+ except (json.JSONDecodeError, TypeError):
28
+ return s
29
+
30
+
31
+ def _get_llm_messages(attributes: Dict[str, Any], prefix: str) -> List[Dict[str, Any]]:
32
+ """Extracts and reconstructs LLM messages from flattened attributes."""
33
+ messages: dict[int, dict[str, Any]] = {}
34
+ message_prefix = f"{prefix}."
35
+
36
+ for key, value in attributes.items():
37
+ if key.startswith(message_prefix):
38
+ parts = key[len(message_prefix) :].split(".")
39
+ if len(parts) >= 2 and parts[0].isdigit():
40
+ index = int(parts[0])
41
+ if index not in messages:
42
+ messages[index] = {}
43
+ current: Any = messages[index]
44
+
45
+ for i, part in enumerate(parts[1:-1]):
46
+ key_part: str | int = part
47
+ if part.isdigit() and (
48
+ i + 2 < len(parts) and parts[i + 2].isdigit()
49
+ ):
50
+ key_part = int(part)
51
+
52
+ if isinstance(current, dict):
53
+ if key_part not in current:
54
+ current[key_part] = {}
55
+ current = current[key_part]
56
+ elif isinstance(current, list) and isinstance(key_part, int):
57
+ if key_part >= len(current):
58
+ current.append({})
59
+ current = current[key_part]
60
+
61
+ current[parts[-1]] = value
62
+
63
+ # Convert dict to list, ordered by index
64
+ return [messages[i] for i in sorted(messages.keys())]
65
+
66
+
21
67
  class LlmOpsHttpExporter(SpanExporter):
22
68
  """An OpenTelemetry span exporter that sends spans to UiPath LLM Ops."""
23
69
 
24
- def __init__(self, trace_id: Optional[str] = None, **client_kwargs):
70
+ ATTRIBUTE_MAPPING: dict[str, str | tuple[str, Any]] = {
71
+ "input.value": ("input", _safe_parse_json),
72
+ "output.value": ("output", _safe_parse_json),
73
+ "llm.model_name": "model",
74
+ }
75
+
76
+ # Mapping of span types
77
+ SPAN_TYPE_MAPPING: dict[str, str] = {
78
+ "LLM": "completion",
79
+ "TOOL": "toolCall",
80
+ # Add more mappings as needed
81
+ }
82
+
83
+ class Status:
84
+ SUCCESS = 1
85
+ ERROR = 2
86
+ INTERRUPTED = 3
87
+
88
+ def __init__(
89
+ self,
90
+ trace_id: Optional[str] = None,
91
+ extra_process_spans: Optional[bool] = False,
92
+ **kwargs,
93
+ ):
25
94
  """Initialize the exporter with the base URL and authentication token."""
26
- super().__init__(**client_kwargs)
95
+ super().__init__(**kwargs)
27
96
  self.base_url = self._get_base_url()
28
97
  self.auth_token = os.environ.get("UIPATH_ACCESS_TOKEN")
29
98
  self.headers = {
30
99
  "Content-Type": "application/json",
31
100
  "Authorization": f"Bearer {self.auth_token}",
32
101
  }
102
+ self._extra_process_spans = extra_process_spans
33
103
 
34
104
  client_kwargs = get_httpx_client_kwargs()
35
105
 
@@ -50,6 +120,9 @@ class LlmOpsHttpExporter(SpanExporter):
50
120
  ]
51
121
  url = self._build_url(span_list)
52
122
 
123
+ if self._extra_process_spans:
124
+ span_list = [self._process_span_attributes(span) for span in span_list]
125
+
53
126
  logger.debug("Payload: %s", json.dumps(span_list))
54
127
 
55
128
  return self._send_with_retries(url, span_list)
@@ -58,6 +131,150 @@ class LlmOpsHttpExporter(SpanExporter):
58
131
  """Force flush the exporter."""
59
132
  return True
60
133
 
134
+ def _map_llm_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
135
+ """Maps attributes for LLM calls, handling flattened keys."""
136
+ result = attributes.copy() # Keep original attributes including basic mappings
137
+
138
+ # Token Usage
139
+ token_keys = {
140
+ "llm.token_count.prompt": "promptTokens",
141
+ "llm.token_count.completion": "completionTokens",
142
+ "llm.token_count.total": "totalTokens",
143
+ }
144
+ usage = {
145
+ new_key: attributes.get(old_key)
146
+ for old_key, new_key in token_keys.items()
147
+ if old_key in attributes
148
+ }
149
+ if usage:
150
+ result["usage"] = usage
151
+
152
+ # Input/Output Messages
153
+ result["input"] = _get_llm_messages(attributes, "llm.input_messages")
154
+ output_messages = _get_llm_messages(attributes, "llm.output_messages")
155
+ result["output"] = output_messages
156
+
157
+ # Invocation Parameters
158
+ invocation_params = _safe_parse_json(
159
+ attributes.get("llm.invocation_parameters", "{}")
160
+ )
161
+ if isinstance(invocation_params, dict):
162
+ result["model"] = invocation_params.get("model", result.get("model"))
163
+ settings: dict[str, Any] = {}
164
+ if "max_tokens" in invocation_params:
165
+ settings["maxTokens"] = invocation_params["max_tokens"]
166
+ if "temperature" in invocation_params:
167
+ settings["temperature"] = invocation_params["temperature"]
168
+ if settings:
169
+ result["settings"] = settings
170
+
171
+ # Tool Calls
172
+ tool_calls: list[dict[str, Any]] = []
173
+ for msg in output_messages:
174
+ # Ensure msg is a dictionary before proceeding
175
+ if not isinstance(msg, dict):
176
+ continue
177
+ msg_tool_calls = msg.get("message", {}).get("tool_calls", [])
178
+
179
+ # Ensure msg_tool_calls is a list
180
+ if not isinstance(msg_tool_calls, list):
181
+ continue
182
+
183
+ for tc in msg_tool_calls:
184
+ if not isinstance(tc, dict):
185
+ continue
186
+ tool_call_data = tc.get("tool_call", {})
187
+ if not isinstance(tool_call_data, dict):
188
+ continue
189
+ tool_calls.append(
190
+ {
191
+ "id": tool_call_data.get("id"),
192
+ "name": tool_call_data.get("function", {}).get("name"),
193
+ "arguments": _safe_parse_json(
194
+ tool_call_data.get("function", {}).get("arguments", "{}")
195
+ ),
196
+ }
197
+ )
198
+ if tool_calls:
199
+ result["toolCalls"] = tool_calls
200
+
201
+ return result
202
+
203
+ def _map_tool_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
204
+ """Maps attributes for tool calls."""
205
+ result = attributes.copy() # Keep original attributes
206
+
207
+ result["type"] = "toolCall"
208
+ result["callId"] = attributes.get("call_id") or attributes.get("id")
209
+ result["toolName"] = attributes.get("tool.name")
210
+ result["arguments"] = _safe_parse_json(
211
+ attributes.get("input", attributes.get("input.value", "{}"))
212
+ )
213
+ result["toolType"] = "Integration"
214
+ result["result"] = _safe_parse_json(
215
+ attributes.get("output", attributes.get("output.value"))
216
+ )
217
+ result["error"] = None
218
+
219
+ return result
220
+
221
+ def _determine_status(self, error: Optional[str]) -> int:
222
+ if error:
223
+ if error and error.startswith("GraphInterrupt("):
224
+ return self.Status.INTERRUPTED
225
+ return self.Status.ERROR
226
+ return self.Status.SUCCESS
227
+
228
+ def _process_span_attributes(self, span_data: Dict[str, Any]) -> Dict[str, Any]:
229
+ """Extracts, transforms, and maps attributes for a span."""
230
+ if "Attributes" not in span_data:
231
+ return span_data
232
+
233
+ attributes_val = span_data["Attributes"]
234
+ if isinstance(attributes_val, str):
235
+ try:
236
+ attributes: Dict[str, Any] = json.loads(attributes_val)
237
+ except json.JSONDecodeError as e:
238
+ logger.warning(f"Failed to parse attributes JSON: {e}")
239
+ return span_data
240
+ elif isinstance(attributes_val, dict):
241
+ attributes = attributes_val
242
+ else:
243
+ return span_data
244
+
245
+ # Determine SpanType
246
+ if "openinference.span.kind" in attributes:
247
+ span_type = attributes["openinference.span.kind"]
248
+ span_data["SpanType"] = self.SPAN_TYPE_MAPPING.get(span_type, span_type)
249
+
250
+ # Apply basic attribute mapping
251
+ for old_key, mapping in self.ATTRIBUTE_MAPPING.items():
252
+ if old_key in attributes:
253
+ if isinstance(mapping, tuple):
254
+ new_key, func = mapping
255
+ attributes[new_key] = func(attributes[old_key])
256
+ else:
257
+ new_key = mapping
258
+ attributes[new_key] = attributes[old_key]
259
+
260
+ # Apply detailed mapping based on SpanType
261
+ span_type = span_data.get("SpanType")
262
+ if span_type == "completion":
263
+ processed_attributes = self._map_llm_call_attributes(attributes)
264
+ elif span_type == "toolCall":
265
+ processed_attributes = self._map_tool_call_attributes(attributes)
266
+ else:
267
+ processed_attributes = attributes.copy()
268
+
269
+ span_data["Attributes"] = json.dumps(processed_attributes)
270
+
271
+ # Determine status based on error information
272
+ error = attributes.get("error") or attributes.get("exception.message")
273
+ status = self._determine_status(error)
274
+ span_data["Status"] = status
275
+
276
+ return span_data
277
+
61
278
  def _build_url(self, span_list: list[Dict[str, Any]]) -> str:
62
279
  """Construct the URL for the API request."""
63
280
  trace_id = str(span_list[0]["TraceId"])
@@ -93,3 +310,30 @@ class LlmOpsHttpExporter(SpanExporter):
93
310
  uipath_url = uipath_url.rstrip("/")
94
311
 
95
312
  return uipath_url
313
+
314
+
315
+ class JsonLinesFileExporter(SpanExporter):
316
+ def __init__(self, file_path: str):
317
+ self.file_path = file_path
318
+ # Ensure the directory exists
319
+ dir_path = os.path.dirname(self.file_path)
320
+ if dir_path: # Only create if there's an actual directory path
321
+ os.makedirs(dir_path, exist_ok=True)
322
+
323
+ def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
324
+ try:
325
+ uipath_spans = [
326
+ _SpanUtils.otel_span_to_uipath_span(span).to_dict() for span in spans
327
+ ]
328
+
329
+ with open(self.file_path, "a") as f:
330
+ for span in uipath_spans:
331
+ f.write(json.dumps(span) + "\n")
332
+ return SpanExportResult.SUCCESS
333
+ except Exception as e:
334
+ logger.error(f"Failed to export spans to {self.file_path}: {e}")
335
+ return SpanExportResult.FAILURE
336
+
337
+ def shutdown(self) -> None:
338
+ """Shuts down the exporter."""
339
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.101
3
+ Version: 2.1.103
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
@@ -18,7 +18,7 @@ uipath/_cli/cli_pack.py,sha256=U5rXVbUnHFgdEsXyhkjmWza8dfob1wU9lyl4yrYnUss,11076
18
18
  uipath/_cli/cli_publish.py,sha256=DgyfcZjvfV05Ldy0Pk5y_Le_nT9JduEE_x-VpIc_Kq0,6471
19
19
  uipath/_cli/cli_pull.py,sha256=v0iL12Z0NGE2yZ_Ff1U1jEgOnbIGJatI63KhZRIVflg,2681
20
20
  uipath/_cli/cli_push.py,sha256=cwKUr30VTvb2jhGY9LPpPpILj2URMuEIl8ven6tCRFo,3727
21
- uipath/_cli/cli_run.py,sha256=4XEvJQEcFafDLJHbgd94cuYxeioprNFe1qwL7JeAplg,3789
21
+ uipath/_cli/cli_run.py,sha256=9vbmSG_FzS0x8KNNzSrST37FKjUOzhXPjl8xTm2ZEqQ,4203
22
22
  uipath/_cli/middlewares.py,sha256=tb0c4sU1SCYi0PNs956Qmk24NDk0C0mBfVQmTcyORE0,5000
23
23
  uipath/_cli/spinner.py,sha256=bS-U_HA5yne11ejUERu7CQoXmWdabUD2bm62EfEdV8M,1107
24
24
  uipath/_cli/_auth/_auth_server.py,sha256=v_b8KNwn0tAv8jxpeKdllOVzl31q9AcdwpE_koAK_w4,7235
@@ -66,7 +66,7 @@ uipath/_cli/_evals/mocks/mocker_factory.py,sha256=V5QKSTtQxztTo4-fK1TyAaXw2Z3mHf
66
66
  uipath/_cli/_evals/mocks/mockito_mocker.py,sha256=AO2BmFwA6hz3Lte-STVr7aJDPvMCqKNKa4j2jeNZ_U4,2677
67
67
  uipath/_cli/_evals/mocks/mocks.py,sha256=HY0IaSqqO8hioBB3rp5XwAjSpQE4K5hoH6oJQ-sH72I,2207
68
68
  uipath/_cli/_push/sw_file_handler.py,sha256=DrGOpX7-dodrROh7YcjHlCBUuOEdVMh8o0550TL-ZYA,22520
69
- uipath/_cli/_runtime/_contracts.py,sha256=WqHEMBo5jM5a-yV-KD0FeOkei4M3qq-hQwza2hCe9Rk,34318
69
+ uipath/_cli/_runtime/_contracts.py,sha256=H7BeQ8MXB_-NsqqYDACDj5T1ra9eY7-YtHqRFVkmxjk,34355
70
70
  uipath/_cli/_runtime/_escalation.py,sha256=x3vI98qsfRA-fL_tNkRVTFXioM5Gv2w0GFcXJJ5eQtg,7981
71
71
  uipath/_cli/_runtime/_hitl.py,sha256=VKbM021nVg1HEDnTfucSLJ0LsDn83CKyUtVzofS2qTU,11369
72
72
  uipath/_cli/_runtime/_logging.py,sha256=srjAi3Cy6g7b8WNHiYNjaZT4t40F3XRqquuoGd2kh4Y,14019
@@ -98,7 +98,7 @@ uipath/_events/_event_bus.py,sha256=4-VzstyX69cr7wT1EY7ywp-Ndyz2CyemD3Wk_-QmRpo,
98
98
  uipath/_events/_events.py,sha256=eCgqEP4rzDgZShXMC9wgBVx-AcpwaJZlo2yiL7OyxdA,4441
99
99
  uipath/_resources/AGENTS.md,sha256=nRQNAVeEBaBvuMzXw8uXtMnGebLClUgwIMlgb8_qU9o,1039
100
100
  uipath/_resources/CLAUDE.md,sha256=kYsckFWTVe948z_fNWLysCHvi9_YpchBXl3s1Ek03lU,10
101
- uipath/_resources/CLI_REFERENCE.md,sha256=-eCe1hZSRvv9QGLltE3xl8muGWGNzmaHX8htRt3cgy8,6366
101
+ uipath/_resources/CLI_REFERENCE.md,sha256=M_SCtSjRhj1XwfgSFLfHJJahYXEd_CSQ_EnjLQAn-2Y,6470
102
102
  uipath/_resources/REQUIRED_STRUCTURE.md,sha256=3laqGiNa3kauJ7jRI1d7w_fWKUDkqYBjcTT_6_8FAGk,1417
103
103
  uipath/_resources/SDK_REFERENCE.md,sha256=4wX8a1W5EJCta-iEHy_cDRahn0ENpJykwn-w4k_Lh6s,23245
104
104
  uipath/_services/__init__.py,sha256=_LNy4u--VlhVtTO66bULbCoBjyJBTuyh9jnzjWrv-h4,1140
@@ -141,11 +141,11 @@ uipath/agent/conversation/exchange.py,sha256=nuk1tEMBHc_skrraT17d8U6AtyJ3h07ExGQ
141
141
  uipath/agent/conversation/message.py,sha256=1ZkEs146s79TrOAWCQwzBAEJvjAu4lQBpJ64tKXDgGE,2142
142
142
  uipath/agent/conversation/meta.py,sha256=3t0eS9UHoAPHre97QTUeVbjDhnMX4zj4-qG6ju0B8wY,315
143
143
  uipath/agent/conversation/tool.py,sha256=ol8XI8AVd-QNn5auXNBPcCzOkh9PPFtL7hTK3kqInkU,2191
144
- uipath/agent/loop/__init__.py,sha256=EZlNqrh8xod0VtTJqc-1pyUofaeS6PKjbsDfWoveVtI,424
145
- uipath/agent/loop/prompts.py,sha256=qPwyd6Ple2m-Kt0m2foa6ZEmxD3kyCXOmGfXvzHi8Rc,3372
146
- uipath/agent/loop/tools.py,sha256=OsT3x431KqOEzLi2jLxy2B9xXbcFq16xMfmyAqFaqZQ,1351
147
- uipath/agent/models/agent.py,sha256=o_nkrFtZFQdSNMK5NH9rCo346ABZcQLfW5h2Wv9yUhg,17791
144
+ uipath/agent/models/agent.py,sha256=lCSXE2ctZOSQfK27dk7y5cl0VARE7iGb0UredBIigTM,18613
148
145
  uipath/agent/models/evals.py,sha256=QMIqwCuwabD_vYF0KgJpip5BV0pFLf9ZKUd9AL5eU2w,1843
146
+ uipath/agent/react/__init__.py,sha256=0Ci-uf0gSOReoHQyx3QImY-om3q_SgLT-bJUSlzS3B8,527
147
+ uipath/agent/react/prompts.py,sha256=0a06TJz2XqZuLK-yC_bvZV9ULXpY6UGtybjjbyVzXII,3375
148
+ uipath/agent/react/tools.py,sha256=X3t95LisIjkucfAxK5Au-RQ7_BYe4MTcr2IaQ656p58,2109
149
149
  uipath/eval/_helpers/__init__.py,sha256=GSmZMryjuO3Wo_zdxZdrHCRRsgOxsVFYkYgJ15YNC3E,86
150
150
  uipath/eval/_helpers/helpers.py,sha256=iE2HHdMiAdAMLqxHkPKHpfecEtAuN5BTBqvKFTI8ciE,1315
151
151
  uipath/eval/evaluators/__init__.py,sha256=DJAAhgv0I5UfBod4sGnSiKerfrz1iMmk7GNFb71V8eI,494
@@ -182,15 +182,15 @@ uipath/models/queues.py,sha256=gnbeEyYlHtdqdxBalio0lw8mq-78YBG9MPMSkv1BWOg,6934
182
182
  uipath/telemetry/__init__.py,sha256=Wna32UFzZR66D-RzTKlPWlvji9i2HJb82NhHjCCXRjY,61
183
183
  uipath/telemetry/_constants.py,sha256=uRDuEZayBYtBA0tMx-2AS_D-oiVA7oKgp9zid9jNats,763
184
184
  uipath/telemetry/_track.py,sha256=3RZgJtY8y28Y5rfVmC432OyRu7N3pSxPouwa82KWFso,4787
185
- uipath/tracing/__init__.py,sha256=GKRINyWdHVrDsI-8mrZDLdf0oey6GHGlNZTOADK-kgc,224
186
- uipath/tracing/_otel_exporters.py,sha256=c0GKU_oUrAwrOrqbyu64c55z1TR6xk01d3y5fLUN1lU,3215
185
+ uipath/tracing/__init__.py,sha256=0oUuxJKOHE14iOL4SP93FOiEYRIFLTq-o0NwRcTB8Q4,317
186
+ uipath/tracing/_otel_exporters.py,sha256=LAtaQV5QN4PSLgEbIVvlmUETNbMYqTX87R-3mRKy_S8,12438
187
187
  uipath/tracing/_traced.py,sha256=yBIY05PCCrYyx50EIHZnwJaKNdHPNx-YTR1sHQl0a98,19901
188
188
  uipath/tracing/_utils.py,sha256=X-LFsyIxDeNOGuHPvkb6T5o9Y8ElYhr_rP3CEBJSu4s,13837
189
189
  uipath/utils/__init__.py,sha256=VD-KXFpF_oWexFg6zyiWMkxl2HM4hYJMIUDZ1UEtGx0,105
190
190
  uipath/utils/_endpoints_manager.py,sha256=tnF_FiCx8qI2XaJDQgYkMN_gl9V0VqNR1uX7iawuLp8,8230
191
191
  uipath/utils/dynamic_schema.py,sha256=w0u_54MoeIAB-mf3GmwX1A_X8_HDrRy6p998PvX9evY,3839
192
- uipath-2.1.101.dist-info/METADATA,sha256=sAfz81Fb7m1qDTK7fBG_T10L_uR_YQETQFI_WFFG9gk,6626
193
- uipath-2.1.101.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
194
- uipath-2.1.101.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
195
- uipath-2.1.101.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
196
- uipath-2.1.101.dist-info/RECORD,,
192
+ uipath-2.1.103.dist-info/METADATA,sha256=lWydWnxXFj8zjUQgdUbcrWNJxfuOGM3RCqAoYPTL9oI,6626
193
+ uipath-2.1.103.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
194
+ uipath-2.1.103.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
195
+ uipath-2.1.103.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
196
+ uipath-2.1.103.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- """LowCode Agent Loop Constructs.
2
-
3
- This module includes agentic loop constructs specific to LowCode Agent
4
- such as prompts, tools
5
- """
6
-
7
- from uipath.agent.loop.prompts import AGENT_SYSTEM_PROMPT_TEMPLATE
8
- from uipath.agent.loop.tools import (
9
- EndExecutionToolSchemaModel,
10
- RaiseErrorToolSchemaModel,
11
- )
12
-
13
- __all__ = [
14
- "AGENT_SYSTEM_PROMPT_TEMPLATE",
15
- "EndExecutionToolSchemaModel",
16
- "RaiseErrorToolSchemaModel",
17
- ]