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

uipath/_cli/__init__.py CHANGED
@@ -8,7 +8,7 @@ from .cli_auth import auth as auth
8
8
  from .cli_debug import debug as debug # type: ignore
9
9
  from .cli_deploy import deploy as deploy # type: ignore
10
10
  from .cli_dev import dev as dev
11
- from .cli_eval import eval as eval # type: ignore
11
+ from .cli_eval import eval as eval
12
12
  from .cli_init import init as init # type: ignore
13
13
  from .cli_invoke import invoke as invoke # type: ignore
14
14
  from .cli_new import new as new # type: ignore
@@ -434,7 +434,8 @@ def get_remote_debug_bridge(context: UiPathRuntimeContext) -> UiPathDebugBridge:
434
434
  if not context.trace_context:
435
435
  raise ValueError("trace_context is required for remote debugging")
436
436
 
437
- signalr_url = uipath_url + "/agenthub_/wsstunnel?jobId=" + context.job_id
437
+ signalr_url = f"{uipath_url.rstrip('/')}/orchestrator_/signalr/robotdebug?sessionId={context.job_id}"
438
+
438
439
  return SignalRDebugBridge(
439
440
  hub_url=signalr_url,
440
441
  access_token=os.environ.get("UIPATH_ACCESS_TOKEN"),
File without changes
@@ -0,0 +1,28 @@
1
+ from typing import TypeVar
2
+
3
+ from uipath._cli._evals._runtime import UiPathEvalContext, UiPathEvalRuntime
4
+ from uipath._cli._runtime._contracts import (
5
+ UiPathBaseRuntime,
6
+ UiPathRuntimeContext,
7
+ UiPathRuntimeFactory,
8
+ UiPathRuntimeResult,
9
+ )
10
+ from uipath._events._event_bus import EventBus
11
+
12
+ T = TypeVar("T", bound=UiPathBaseRuntime)
13
+ C = TypeVar("C", bound=UiPathRuntimeContext)
14
+
15
+
16
+ async def evaluate(
17
+ runtime_factory: UiPathRuntimeFactory[T, C],
18
+ eval_context: UiPathEvalContext,
19
+ event_bus: EventBus,
20
+ ) -> UiPathRuntimeResult:
21
+ async with UiPathEvalRuntime.from_eval_context(
22
+ factory=runtime_factory,
23
+ context=eval_context,
24
+ event_bus=event_bus,
25
+ ) as eval_runtime:
26
+ results = await eval_runtime.execute()
27
+ await event_bus.wait_for_all(timeout=10)
28
+ return results
@@ -176,7 +176,7 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
176
176
  ) -> "UiPathEvalRuntime[T, C]":
177
177
  return cls(context, factory, event_bus)
178
178
 
179
- async def execute(self) -> Optional[UiPathRuntimeResult]:
179
+ async def execute(self) -> UiPathRuntimeResult:
180
180
  if self.context.eval_set is None:
181
181
  raise ValueError("eval_set must be provided for evaluation runs")
182
182
 
@@ -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_eval.py CHANGED
@@ -1,4 +1,3 @@
1
- # type: ignore
2
1
  import ast
3
2
  import asyncio
4
3
  import os
@@ -7,10 +6,10 @@ from typing import List, Optional
7
6
  import click
8
7
 
9
8
  from uipath._cli._evals._console_progress_reporter import ConsoleProgressReporter
9
+ from uipath._cli._evals._evaluate import evaluate
10
10
  from uipath._cli._evals._progress_reporter import StudioWebProgressReporter
11
11
  from uipath._cli._evals._runtime import (
12
12
  UiPathEvalContext,
13
- UiPathEvalRuntime,
14
13
  )
15
14
  from uipath._cli._runtime._runtime_factory import generate_runtime_factory
16
15
  from uipath._cli._utils._constants import UIPATH_PROJECT_ID
@@ -46,9 +45,9 @@ def setup_reporting_prereq(no_report: bool) -> bool:
46
45
  )
47
46
  return False
48
47
  if not os.getenv("UIPATH_FOLDER_KEY"):
49
- os.environ["UIPATH_FOLDER_KEY"] = asyncio.run(
50
- get_personal_workspace_key_async()
51
- )
48
+ folder_key = asyncio.run(get_personal_workspace_key_async())
49
+ if folder_key:
50
+ os.environ["UIPATH_FOLDER_KEY"] = folder_key
52
51
  return True
53
52
 
54
53
 
@@ -141,17 +140,8 @@ def eval(
141
140
  runtime_factory = generate_runtime_factory()
142
141
  if eval_context.job_id:
143
142
  runtime_factory.add_span_exporter(LlmOpsHttpExporter())
143
+ asyncio.run(evaluate(runtime_factory, eval_context, event_bus))
144
144
 
145
- async def execute():
146
- async with UiPathEvalRuntime.from_eval_context(
147
- factory=runtime_factory,
148
- context=eval_context,
149
- event_bus=event_bus,
150
- ) as eval_runtime:
151
- await eval_runtime.execute()
152
- await event_bus.wait_for_all(timeout=10)
153
-
154
- asyncio.run(execute())
155
145
  except Exception as e:
156
146
  console.error(
157
147
  f"Error occurred: {e or 'Execution failed'}", include_traceback=True
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
 
@@ -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.102
3
+ Version: 2.1.104
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
@@ -5,12 +5,12 @@ uipath/_folder_context.py,sha256=D-bgxdwpwJP4b_QdVKcPODYh15kMDrOar2xNonmMSm4,186
5
5
  uipath/_uipath.py,sha256=fZfofFWw8JurY940j9qVuV6EQttCRZe_XvWCyC9oCns,4918
6
6
  uipath/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  uipath/_cli/README.md,sha256=GLtCfbeIKZKNnGTCsfSVqRQ27V1btT1i2bSAyW_xZl4,474
8
- uipath/_cli/__init__.py,sha256=RZtYzThMGEKEwmiUwwm6TUU5KxDpfTuez2qSFD78J8w,2345
8
+ uipath/_cli/__init__.py,sha256=ba7gNskJLgN_bNfCPzoGAk7OsHCxaFpWpOvahzcQEf8,2329
9
9
  uipath/_cli/cli_auth.py,sha256=CzetSRqSUvMs02PtI4w5Vi_0fv_ETA307bB2vXalWzY,2628
10
10
  uipath/_cli/cli_debug.py,sha256=-s6Nmy0DnDyITjZAf6f71hZ1YDDt0Yl57XklEkuL0FU,4068
11
11
  uipath/_cli/cli_deploy.py,sha256=KPCmQ0c_NYD5JofSDao5r6QYxHshVCRxlWDVnQvlp5w,645
12
12
  uipath/_cli/cli_dev.py,sha256=nEfpjw1PZ72O6jmufYWVrueVwihFxDPOeJakdvNHdOA,2146
13
- uipath/_cli/cli_eval.py,sha256=6evrUtaHnQ1NTEQKZKltgH7mpYOy6YP88L2LZcnnnfs,5139
13
+ uipath/_cli/cli_eval.py,sha256=GTTaCgGmmxw9FcVkGUje0VqQQx7ZdWuSBc9qLKo2Zcs,4858
14
14
  uipath/_cli/cli_init.py,sha256=hAPMV_0HGZD0cDh7KqHDwMRlUfLoJl2NCp4T3Ilw8y0,7487
15
15
  uipath/_cli/cli_invoke.py,sha256=m-te-EjhDpk_fhFDkt-yQFzmjEHGo5lQDGEQWxSXisQ,4395
16
16
  uipath/_cli/cli_new.py,sha256=9378NYUBc9j-qKVXV7oja-jahfJhXBg8zKVyaon7ctY,2102
@@ -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
@@ -32,7 +32,7 @@ uipath/_cli/_auth/auth_config.json,sha256=o8J5BBFwiEtjZLHpJ_64lvnTeYeRIHaJ-Bhg0Q
32
32
  uipath/_cli/_auth/index.html,sha256=uGK0CDTP8Rys_p4O_Pbd2x4tz0frKNVcumjrXnal5Nc,22814
33
33
  uipath/_cli/_auth/localhost.crt,sha256=oGl9oLLOiouHubAt39B4zEfylFvKEtbtr_43SIliXJc,1226
34
34
  uipath/_cli/_auth/localhost.key,sha256=X31VYXD8scZtmGA837dGX5l6G-LXHLo5ItWJhZXaz3c,1679
35
- uipath/_cli/_debug/_bridge.py,sha256=7_2IM4dhaYZ56dkNqPRQzdRojBDmDsJLa7zKs8KFZHg,16132
35
+ uipath/_cli/_debug/_bridge.py,sha256=3TORu0ArTJoNFzolx80RgTv3z_84G_SZOKnYa7sOC0s,16161
36
36
  uipath/_cli/_debug/_runtime.py,sha256=h4WRBJn46dorTVXNZ32KIqg_-Z0mcLq5BvXGXqHAT_o,4934
37
37
  uipath/_cli/_dev/_terminal/__init__.py,sha256=di_RiN9Mcp9wqyKRRqXag28vbSw8_78mCnQZNn9H-Ss,14027
38
38
  uipath/_cli/_dev/_terminal/_components/_chat.py,sha256=NLRoy49QScHiI-q0FGykkaU8ajv1d23fx7issSALcFA,4119
@@ -46,10 +46,12 @@ uipath/_cli/_dev/_terminal/_styles/terminal.tcss,sha256=ktVpKwXIXw2VZp8KIZD6fO9i
46
46
  uipath/_cli/_dev/_terminal/_utils/_chat.py,sha256=YUZxYVdmEManwHDuZsczJT1dWIYE1dVBgABlurwMFcE,8493
47
47
  uipath/_cli/_dev/_terminal/_utils/_exporter.py,sha256=oI6D_eMwrh_2aqDYUh4GrJg8VLGrLYhDahR-_o0uJns,4144
48
48
  uipath/_cli/_dev/_terminal/_utils/_logger.py,sha256=_ipTl_oAiMF9I7keGt2AAFAMz40DNLVMVkoiq-07UAU,2943
49
+ uipath/_cli/_evals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  uipath/_cli/_evals/_console_progress_reporter.py,sha256=HgB6pdMyoS6YVwuI3EpM2LBcH3U69nrdaTyNgPG8ssg,9304
51
+ uipath/_cli/_evals/_evaluate.py,sha256=yRVhZ6uV58EV5Fv5X_K6425ZGsseQslnLe6FpIKy-u8,833
50
52
  uipath/_cli/_evals/_evaluator_factory.py,sha256=Gycv94VtGOpMir_Gba-UoiAyrSRfbSfe8_pTfjzcA9Q,3875
51
53
  uipath/_cli/_evals/_progress_reporter.py,sha256=kX7rNSa-QCLXIzK-vb9Jjf-XLEtucdeiQPgPlSkpp2U,16778
52
- uipath/_cli/_evals/_runtime.py,sha256=9XwdDIN33LTbCTjSQvq1tWOrWn1Q42nTbuh-f7LFXEg,20761
54
+ uipath/_cli/_evals/_runtime.py,sha256=Ne9VBUFH36cSTUx-xsPU41T90vruVrBu0EliubLPijw,20751
53
55
  uipath/_cli/_evals/_span_collection.py,sha256=RoKoeDFG2XODdlgI27ionCjU7LLD_C0LJJ3gu0wab10,779
54
56
  uipath/_cli/_evals/_models/_evaluation_set.py,sha256=0I83I3HNu_BrgFz9miar2QTyXKb0dAaEpYMQrKUHP0U,4958
55
57
  uipath/_cli/_evals/_models/_evaluator.py,sha256=fuC3UOYwPD4d_wdynHeLSCzbu82golNAnnPnxC8Y4rk,3315
@@ -66,7 +68,7 @@ uipath/_cli/_evals/mocks/mocker_factory.py,sha256=V5QKSTtQxztTo4-fK1TyAaXw2Z3mHf
66
68
  uipath/_cli/_evals/mocks/mockito_mocker.py,sha256=AO2BmFwA6hz3Lte-STVr7aJDPvMCqKNKa4j2jeNZ_U4,2677
67
69
  uipath/_cli/_evals/mocks/mocks.py,sha256=HY0IaSqqO8hioBB3rp5XwAjSpQE4K5hoH6oJQ-sH72I,2207
68
70
  uipath/_cli/_push/sw_file_handler.py,sha256=DrGOpX7-dodrROh7YcjHlCBUuOEdVMh8o0550TL-ZYA,22520
69
- uipath/_cli/_runtime/_contracts.py,sha256=WqHEMBo5jM5a-yV-KD0FeOkei4M3qq-hQwza2hCe9Rk,34318
71
+ uipath/_cli/_runtime/_contracts.py,sha256=H7BeQ8MXB_-NsqqYDACDj5T1ra9eY7-YtHqRFVkmxjk,34355
70
72
  uipath/_cli/_runtime/_escalation.py,sha256=x3vI98qsfRA-fL_tNkRVTFXioM5Gv2w0GFcXJJ5eQtg,7981
71
73
  uipath/_cli/_runtime/_hitl.py,sha256=VKbM021nVg1HEDnTfucSLJ0LsDn83CKyUtVzofS2qTU,11369
72
74
  uipath/_cli/_runtime/_logging.py,sha256=srjAi3Cy6g7b8WNHiYNjaZT4t40F3XRqquuoGd2kh4Y,14019
@@ -98,7 +100,7 @@ uipath/_events/_event_bus.py,sha256=4-VzstyX69cr7wT1EY7ywp-Ndyz2CyemD3Wk_-QmRpo,
98
100
  uipath/_events/_events.py,sha256=eCgqEP4rzDgZShXMC9wgBVx-AcpwaJZlo2yiL7OyxdA,4441
99
101
  uipath/_resources/AGENTS.md,sha256=nRQNAVeEBaBvuMzXw8uXtMnGebLClUgwIMlgb8_qU9o,1039
100
102
  uipath/_resources/CLAUDE.md,sha256=kYsckFWTVe948z_fNWLysCHvi9_YpchBXl3s1Ek03lU,10
101
- uipath/_resources/CLI_REFERENCE.md,sha256=-eCe1hZSRvv9QGLltE3xl8muGWGNzmaHX8htRt3cgy8,6366
103
+ uipath/_resources/CLI_REFERENCE.md,sha256=M_SCtSjRhj1XwfgSFLfHJJahYXEd_CSQ_EnjLQAn-2Y,6470
102
104
  uipath/_resources/REQUIRED_STRUCTURE.md,sha256=3laqGiNa3kauJ7jRI1d7w_fWKUDkqYBjcTT_6_8FAGk,1417
103
105
  uipath/_resources/SDK_REFERENCE.md,sha256=4wX8a1W5EJCta-iEHy_cDRahn0ENpJykwn-w4k_Lh6s,23245
104
106
  uipath/_services/__init__.py,sha256=_LNy4u--VlhVtTO66bULbCoBjyJBTuyh9jnzjWrv-h4,1140
@@ -182,15 +184,15 @@ uipath/models/queues.py,sha256=gnbeEyYlHtdqdxBalio0lw8mq-78YBG9MPMSkv1BWOg,6934
182
184
  uipath/telemetry/__init__.py,sha256=Wna32UFzZR66D-RzTKlPWlvji9i2HJb82NhHjCCXRjY,61
183
185
  uipath/telemetry/_constants.py,sha256=uRDuEZayBYtBA0tMx-2AS_D-oiVA7oKgp9zid9jNats,763
184
186
  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
187
+ uipath/tracing/__init__.py,sha256=0oUuxJKOHE14iOL4SP93FOiEYRIFLTq-o0NwRcTB8Q4,317
188
+ uipath/tracing/_otel_exporters.py,sha256=LAtaQV5QN4PSLgEbIVvlmUETNbMYqTX87R-3mRKy_S8,12438
187
189
  uipath/tracing/_traced.py,sha256=yBIY05PCCrYyx50EIHZnwJaKNdHPNx-YTR1sHQl0a98,19901
188
190
  uipath/tracing/_utils.py,sha256=X-LFsyIxDeNOGuHPvkb6T5o9Y8ElYhr_rP3CEBJSu4s,13837
189
191
  uipath/utils/__init__.py,sha256=VD-KXFpF_oWexFg6zyiWMkxl2HM4hYJMIUDZ1UEtGx0,105
190
192
  uipath/utils/_endpoints_manager.py,sha256=tnF_FiCx8qI2XaJDQgYkMN_gl9V0VqNR1uX7iawuLp8,8230
191
193
  uipath/utils/dynamic_schema.py,sha256=w0u_54MoeIAB-mf3GmwX1A_X8_HDrRy6p998PvX9evY,3839
192
- uipath-2.1.102.dist-info/METADATA,sha256=PHCMM28vCj3vTI7svQmDPoKJkg7J-YlGWUyLPFDFD-s,6626
193
- uipath-2.1.102.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
194
- uipath-2.1.102.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
195
- uipath-2.1.102.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
196
- uipath-2.1.102.dist-info/RECORD,,
194
+ uipath-2.1.104.dist-info/METADATA,sha256=yowcY1GCYlwCrWHjeWIiqqRBvWSD1UAtLbLQNZJzYno,6626
195
+ uipath-2.1.104.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
196
+ uipath-2.1.104.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
197
+ uipath-2.1.104.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
198
+ uipath-2.1.104.dist-info/RECORD,,