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

@@ -326,7 +326,8 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
326
326
  if eval_item.input_mocking_strategy:
327
327
  eval_item = await self._generate_input_for_eval(eval_item)
328
328
 
329
- set_execution_context(eval_item, self.span_collector)
329
+ execution_id = str(uuid.uuid4())
330
+ set_execution_context(eval_item, self.span_collector, execution_id)
330
331
 
331
332
  await event_bus.publish(
332
333
  EvaluationEvents.CREATE_EVAL_RUN,
@@ -341,7 +342,7 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
341
342
  )
342
343
 
343
344
  try:
344
- agent_execution_output = await self.execute_runtime(eval_item)
345
+ agent_execution_output = await self.execute_runtime(eval_item, execution_id)
345
346
  evaluation_item_results: list[EvalItemResult] = []
346
347
 
347
348
  for evaluator in evaluators:
@@ -448,9 +449,8 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
448
449
  return spans, logs
449
450
 
450
451
  async def execute_runtime(
451
- self, eval_item: EvaluationItem
452
+ self, eval_item: EvaluationItem, execution_id: str
452
453
  ) -> UiPathEvalRunExecutionOutput:
453
- execution_id = str(uuid.uuid4())
454
454
  runtime_context: C = self.factory.new_context(
455
455
  execution_id=execution_id,
456
456
  input_json=eval_item.inputs,
@@ -96,7 +96,11 @@ class LLMMocker(Mocker):
96
96
  from uipath import UiPath
97
97
  from uipath._services.llm_gateway_service import _cleanup_schema
98
98
 
99
- from .mocks import evaluation_context, span_collector_context
99
+ from .mocks import (
100
+ evaluation_context,
101
+ execution_id_context,
102
+ span_collector_context,
103
+ )
100
104
 
101
105
  llm = UiPath().llm
102
106
  return_type: Any = func.__annotations__.get("return", None)
@@ -126,8 +130,9 @@ class LLMMocker(Mocker):
126
130
  test_run_history = "(empty)"
127
131
  eval_item = evaluation_context.get()
128
132
  span_collector = span_collector_context.get()
129
- if eval_item and span_collector:
130
- spans = span_collector.get_spans(eval_item.id)
133
+ execution_id = execution_id_context.get()
134
+ if eval_item and span_collector and execution_id:
135
+ spans = span_collector.get_spans(execution_id)
131
136
  test_run_history = _SpanUtils.spans_to_llm_context(spans)
132
137
 
133
138
  prompt_input: dict[str, Any] = {
@@ -21,11 +21,16 @@ span_collector_context: ContextVar[Optional[ExecutionSpanCollector]] = ContextVa
21
21
  "span_collector", default=None
22
22
  )
23
23
 
24
+ # Execution ID for the current evaluation item
25
+ execution_id_context: ContextVar[Optional[str]] = ContextVar(
26
+ "execution_id", default=None
27
+ )
28
+
24
29
  logger = logging.getLogger(__name__)
25
30
 
26
31
 
27
32
  def set_execution_context(
28
- eval_item: EvaluationItem, span_collector: ExecutionSpanCollector
33
+ eval_item: EvaluationItem, span_collector: ExecutionSpanCollector, execution_id: str
29
34
  ) -> None:
30
35
  """Set the execution context for an evaluation run for mocking and trace access."""
31
36
  evaluation_context.set(eval_item)
@@ -40,6 +45,7 @@ def set_execution_context(
40
45
  mocker_context.set(None)
41
46
 
42
47
  span_collector_context.set(span_collector)
48
+ execution_id_context.set(execution_id)
43
49
 
44
50
 
45
51
  def clear_execution_context() -> None:
@@ -47,6 +53,7 @@ def clear_execution_context() -> None:
47
53
  evaluation_context.set(None)
48
54
  mocker_context.set(None)
49
55
  span_collector_context.set(None)
56
+ execution_id_context.set(None)
50
57
 
51
58
 
52
59
  async def get_mocked_response(
@@ -453,7 +453,7 @@ class SwFileHandler:
453
453
  )
454
454
  logger.info("Uploading 'agent.json'")
455
455
 
456
- async def upload_source_files(self, config_data: dict[str, Any]) -> None:
456
+ async def upload_source_files(self, settings: Optional[dict[str, Any]]) -> None:
457
457
  """Main method to upload source files to the UiPath project.
458
458
 
459
459
  - Gets project structure
@@ -462,7 +462,7 @@ class SwFileHandler:
462
462
  - Deletes removed files
463
463
 
464
464
  Args:
465
- config_data: Project configuration data
465
+ settings: File handling settings
466
466
 
467
467
  Returns:
468
468
  Dict[str, ProjectFileExtended]: Root level files for agent.json handling
@@ -493,7 +493,7 @@ class SwFileHandler:
493
493
 
494
494
  # Get files to upload and process them
495
495
  files = files_to_include(
496
- config_data,
496
+ settings,
497
497
  self.directory,
498
498
  self.include_uv_lock,
499
499
  directories_to_ignore=["evals"],
@@ -13,6 +13,7 @@ from ..._services import (
13
13
  ProcessesService,
14
14
  )
15
15
  from ..._utils import get_inferred_bindings_names
16
+ from ..models.runtime_schema import BindingResource, BindingResourceValue, Bindings
16
17
  from ._constants import BINDINGS_VERSION
17
18
 
18
19
 
@@ -428,7 +429,7 @@ def parse_sdk_usage(
428
429
  return results
429
430
 
430
431
 
431
- def convert_to_bindings_format(sdk_usage_data):
432
+ def convert_to_bindings_format(sdk_usage_data) -> Bindings:
432
433
  """Convert the output of parse_sdk_usage to a structure similar to bindings_v2.json.
433
434
 
434
435
  Args:
@@ -437,7 +438,7 @@ def convert_to_bindings_format(sdk_usage_data):
437
438
  Returns:
438
439
  Dictionary in bindings_v2.json format
439
440
  """
440
- bindings = {"version": "2.0", "resources": []}
441
+ bindings = Bindings(version="2.0", resources=[])
441
442
 
442
443
  for resource_type, components in sdk_usage_data.items():
443
444
  for component in components:
@@ -448,24 +449,24 @@ def convert_to_bindings_format(sdk_usage_data):
448
449
  )
449
450
  is_connection_id_expression = connection_id.startswith("EXPR$")
450
451
  connection_id = connection_id.replace("EXPR$", "")
451
- resource_entry = {
452
- "resource": "connection",
453
- "key": connection_id,
454
- "value": {
455
- "ConnectionId": {
456
- "defaultValue": connection_id,
457
- "isExpression": is_connection_id_expression,
458
- "displayName": "Connection",
459
- }
452
+ resource_entry = BindingResource(
453
+ resource="connection",
454
+ key=connection_id,
455
+ value={
456
+ "ConnectionId": BindingResourceValue(
457
+ default_value=connection_id,
458
+ is_expression=is_connection_id_expression,
459
+ display_name="Connection",
460
+ ),
460
461
  },
461
- "metadata": {
462
+ metadata={
462
463
  "BindingsVersion": BINDINGS_VERSION,
463
464
  "Connector": connector_name,
464
465
  "UseConnectionService": "True",
465
466
  },
466
- }
467
+ )
467
468
 
468
- bindings["resources"].append(resource_entry)
469
+ bindings.resources.append(resource_entry)
469
470
  continue
470
471
 
471
472
  resource_name = component.get("name", "")
@@ -481,36 +482,61 @@ def convert_to_bindings_format(sdk_usage_data):
481
482
  key = name
482
483
  if folder_path:
483
484
  key = f"{folder_path}.{name}"
484
- resource_entry = {
485
- "resource": service_name_resource_mapping[resource_type],
486
- "key": key,
487
- "value": {
488
- "name": {
489
- "defaultValue": name,
490
- "isExpression": is_expression,
491
- "displayName": "Name",
492
- }
485
+ resource_entry = BindingResource(
486
+ resource=service_name_resource_mapping[resource_type],
487
+ key=key,
488
+ value={
489
+ "name": BindingResourceValue(
490
+ default_value=name,
491
+ is_expression=is_expression,
492
+ display_name="Name",
493
+ ),
493
494
  },
494
- "metadata": {
495
+ metadata={
495
496
  "ActivityName": method_name,
496
497
  "BindingsVersion": BINDINGS_VERSION,
497
498
  "DisplayLabel": "FullName",
498
499
  },
499
- }
500
+ )
500
501
 
501
502
  if folder_path:
502
- resource_entry["value"]["folderPath"] = {
503
- "defaultValue": folder_path,
504
- "isExpression": is_folder_path_expression,
505
- "displayName": "Folder Path",
506
- }
503
+ resource_entry.value["folderPath"] = BindingResourceValue(
504
+ default_value=folder_path,
505
+ is_expression=is_folder_path_expression,
506
+ display_name="Folder Path",
507
+ )
507
508
 
508
- bindings["resources"].append(resource_entry)
509
+ bindings.resources.append(resource_entry)
509
510
 
510
511
  return bindings
511
512
 
512
513
 
513
- def generate_bindings_json(file_path: str) -> str:
514
+ def generate_bindings_json(file_path: str) -> dict[str, Any]:
515
+ """Generate bindings JSON from a Python file.
516
+
517
+ Args:
518
+ file_path: Path to the Python file to analyze
519
+
520
+ Returns:
521
+ JSON string representation of the bindings
522
+ """
523
+ try:
524
+ with open(file_path, "r") as f:
525
+ source_code = f.read()
526
+
527
+ # Get the base directory for resolving imports
528
+ base_dir = os.path.dirname(os.path.abspath(file_path))
529
+
530
+ sdk_usage = parse_sdk_usage(source_code, base_dir)
531
+ bindings = convert_to_bindings_format(sdk_usage)
532
+
533
+ return bindings.model_dump(by_alias=True)
534
+
535
+ except Exception as e:
536
+ raise Exception(f"Error generating bindings JSON: {e}") from e
537
+
538
+
539
+ def generate_bindings(file_path: str) -> Bindings:
514
540
  """Generate bindings JSON from a Python file.
515
541
 
516
542
  Args:
@@ -7,9 +7,10 @@ import re
7
7
  from pathlib import Path
8
8
  from typing import Any, Dict, Optional, Protocol, Tuple
9
9
 
10
- from pydantic import BaseModel
10
+ from pydantic import BaseModel, TypeAdapter
11
11
 
12
12
  from .._utils._console import ConsoleLogger
13
+ from ..models.runtime_schema import RuntimeSchema
13
14
  from ._constants import is_binary_file
14
15
  from ._studio_project import (
15
16
  ProjectFile,
@@ -93,21 +94,19 @@ def get_project_config(directory: str) -> dict[str, str]:
93
94
  console.error("pyproject.toml not found.")
94
95
 
95
96
  with open(config_path, "r") as config_file:
96
- config_data = json.load(config_file)
97
-
98
- validate_config_structure(config_data)
97
+ config_data = TypeAdapter(RuntimeSchema).validate_python(json.load(config_file))
99
98
 
100
99
  toml_data = read_toml_project(toml_path)
101
100
 
102
101
  return {
103
102
  "project_name": toml_data["name"],
104
103
  "description": toml_data["description"],
105
- "entryPoints": config_data["entryPoints"],
104
+ "entryPoints": [ep.model_dump(by_alias=True) for ep in config_data.entrypoints],
106
105
  "version": toml_data["version"],
107
106
  "authors": toml_data["authors"],
108
107
  "dependencies": toml_data.get("dependencies", {}),
109
108
  "requires-python": toml_data.get("requires-python", None),
110
- "settings": config_data.get("settings", {}),
109
+ "settings": config_data.settings or {},
111
110
  }
112
111
 
113
112
 
@@ -347,7 +346,7 @@ def read_toml_project(file_path: str) -> dict:
347
346
 
348
347
 
349
348
  def files_to_include(
350
- config_data: Optional[dict[Any, Any]],
349
+ settings: Optional[dict[str, Any]],
351
350
  directory: str,
352
351
  include_uv_lock: bool = True,
353
352
  directories_to_ignore: list[str] | None = None,
@@ -358,7 +357,7 @@ def files_to_include(
358
357
  and explicit inclusion rules. Skips virtual environments and hidden directories.
359
358
 
360
359
  Args:
361
- config_data: Configuration containing file inclusion rules
360
+ settings: File handling settings
362
361
  directory: Root directory to search for files
363
362
  include_uv_lock: Whether to include uv.lock file
364
363
  directories_to_ignore: List of directories to ignore
@@ -374,8 +373,7 @@ def files_to_include(
374
373
  directories_to_ignore = []
375
374
  if include_uv_lock:
376
375
  files_included += ["uv.lock"]
377
- if "settings" in config_data:
378
- settings = config_data["settings"]
376
+ if settings is not None:
379
377
  if "fileExtensionsIncluded" in settings:
380
378
  file_extensions_included.extend(settings["fileExtensionsIncluded"])
381
379
  if "filesIncluded" in settings:
uipath/_cli/cli_init.py CHANGED
@@ -15,8 +15,9 @@ from ..telemetry import track
15
15
  from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
16
16
  from ._utils._console import ConsoleLogger
17
17
  from ._utils._input_args import generate_args
18
- from ._utils._parse_ast import generate_bindings_json
18
+ from ._utils._parse_ast import generate_bindings
19
19
  from .middlewares import Middlewares
20
+ from .models.runtime_schema import Bindings, Entrypoint, RuntimeSchema
20
21
 
21
22
  console = ConsoleLogger()
22
23
  logger = logging.getLogger(__name__)
@@ -152,13 +153,17 @@ def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optiona
152
153
  return None
153
154
 
154
155
 
155
- def write_config_file(config_data: Dict[str, Any]) -> None:
156
+ def write_config_file(config_data: Dict[str, Any] | RuntimeSchema) -> None:
156
157
  existing_settings = get_existing_settings(CONFIG_PATH)
157
158
  if existing_settings is not None:
158
- config_data["settings"] = existing_settings
159
+ config_data.settings = existing_settings
159
160
 
160
161
  with open(CONFIG_PATH, "w") as config_file:
161
- json.dump(config_data, config_file, indent=4)
162
+ if isinstance(config_data, RuntimeSchema):
163
+ json_object = config_data.model_dump(by_alias=True, exclude_unset=True)
164
+ else:
165
+ json_object = config_data
166
+ json.dump(json_object, config_file, indent=4)
162
167
 
163
168
  return CONFIG_PATH
164
169
 
@@ -208,30 +213,29 @@ def init(entrypoint: str, infer_bindings: bool) -> None:
208
213
  args = generate_args(script_path)
209
214
 
210
215
  relative_path = Path(script_path).relative_to(current_directory).as_posix()
211
-
212
- config_data = {
213
- "entryPoints": [
214
- {
215
- "filePath": relative_path,
216
- "uniqueId": str(uuid.uuid4()),
217
- # "type": "process", OR BE doesn't offer json schema support for type: Process
218
- "type": "agent",
219
- "input": args["input"],
220
- "output": args["output"],
221
- }
222
- ]
223
- }
224
-
225
- # Generate bindings JSON based on the script path
226
- try:
227
- if infer_bindings:
228
- bindings_data = generate_bindings_json(script_path)
229
- else:
230
- bindings_data = {}
231
- # Add bindings to the config data
232
- config_data["bindings"] = bindings_data
233
- except Exception as e:
234
- console.warning(f"Warning: Could not generate bindings: {str(e)}")
216
+ bindings = None
217
+ if infer_bindings:
218
+ try:
219
+ bindings = generate_bindings(script_path)
220
+ except Exception as e:
221
+ console.warning(f"Warning: Could not generate bindings: {str(e)}")
222
+ if bindings is None:
223
+ bindings = Bindings(
224
+ version="2.0",
225
+ resources=[],
226
+ )
227
+ config_data = RuntimeSchema(
228
+ entrypoints=[
229
+ Entrypoint(
230
+ file_path=relative_path,
231
+ unique_id=str(uuid.uuid4()),
232
+ type="agent",
233
+ input=args["input"],
234
+ output=args["output"],
235
+ )
236
+ ],
237
+ bindings=bindings,
238
+ )
235
239
 
236
240
  config_path = write_config_file(config_data)
237
241
  console.success(f"Created '{config_path}' file.")
uipath/_cli/cli_pack.py CHANGED
@@ -6,8 +6,10 @@ import zipfile
6
6
  from string import Template
7
7
 
8
8
  import click
9
+ from pydantic import TypeAdapter
9
10
 
10
11
  from uipath._cli._utils._constants import UIPATH_PROJECT_ID
12
+ from uipath._cli.models.runtime_schema import Bindings, RuntimeSchema
11
13
 
12
14
  from ..telemetry import track
13
15
  from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
@@ -101,10 +103,11 @@ def generate_entrypoints_file(entryPoints):
101
103
  return entrypoint_json_data
102
104
 
103
105
 
104
- def generate_bindings_content():
105
- bindings_content = {"version": "2.0", "resources": []}
106
-
107
- return bindings_content
106
+ def generate_bindings_content() -> Bindings:
107
+ return Bindings(
108
+ version="2.0",
109
+ resources=[],
110
+ )
108
111
 
109
112
 
110
113
  def generate_content_types_content():
@@ -214,11 +217,7 @@ def pack_fn(
214
217
  console.error("uipath.json not found, please run `uipath init`.")
215
218
 
216
219
  with open(config_path, "r") as f:
217
- config_data = json.load(f)
218
- if "bindings" in config_data:
219
- bindings_content = config_data["bindings"]
220
- else:
221
- bindings_content = generate_bindings_content()
220
+ config_data = TypeAdapter(RuntimeSchema).validate_python(json.load(f))
222
221
 
223
222
  content_types_content = generate_content_types_content()
224
223
  [psmdcp_file_name, psmdcp_content] = generate_psmdcp_content(
@@ -249,11 +248,14 @@ def pack_fn(
249
248
  )
250
249
  z.writestr("content/operate.json", json.dumps(operate_file, indent=4))
251
250
  z.writestr("content/entry-points.json", json.dumps(entrypoints_file, indent=4))
252
- z.writestr("content/bindings_v2.json", json.dumps(bindings_content, indent=4))
251
+ z.writestr(
252
+ "content/bindings_v2.json",
253
+ json.dumps(config_data.bindings.model_dump(by_alias=True), indent=4),
254
+ )
253
255
  z.writestr(f"{projectName}.nuspec", nuspec_content)
254
256
  z.writestr("_rels/.rels", rels_content)
255
257
 
256
- files = files_to_include(config_data, directory, include_uv_lock)
258
+ files = files_to_include(config_data.settings, directory, include_uv_lock)
257
259
 
258
260
  for file in files:
259
261
  if file.is_binary:
uipath/_cli/cli_push.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # type: ignore
2
2
  import asyncio
3
3
  import os
4
- from typing import Any
4
+ from typing import Any, Optional
5
5
  from urllib.parse import urlparse
6
6
 
7
7
  import click
@@ -32,7 +32,7 @@ def get_org_scoped_url(base_url: str) -> str:
32
32
 
33
33
  async def upload_source_files_to_project(
34
34
  project_id: str,
35
- config_data: dict[Any, str],
35
+ settings: Optional[dict[str, Any]],
36
36
  directory: str,
37
37
  include_uv_lock: bool = True,
38
38
  ) -> None:
@@ -50,7 +50,7 @@ async def upload_source_files_to_project(
50
50
  include_uv_lock=include_uv_lock,
51
51
  )
52
52
 
53
- await sw_file_handler.upload_source_files(config_data)
53
+ await sw_file_handler.upload_source_files(settings)
54
54
 
55
55
 
56
56
  @click.command()
@@ -99,7 +99,7 @@ def push(root: str, nolock: bool) -> None:
99
99
  asyncio.run(
100
100
  upload_source_files_to_project(
101
101
  os.getenv(UIPATH_PROJECT_ID),
102
- config,
102
+ config.get("settings", {}),
103
103
  root,
104
104
  include_uv_lock=not nolock,
105
105
  )
File without changes
@@ -0,0 +1,71 @@
1
+ from typing import Any, Dict, List, Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ COMMON_MODEL_SCHEMA = ConfigDict(
6
+ validate_by_name=True,
7
+ validate_by_alias=True,
8
+ use_enum_values=True,
9
+ arbitrary_types_allowed=True,
10
+ extra="allow",
11
+ )
12
+
13
+
14
+ class Entrypoint(BaseModel):
15
+ file_path: str = Field(..., alias="filePath")
16
+ unique_id: str = Field(..., alias="uniqueId")
17
+ type: str = Field(..., alias="type")
18
+ input: Dict[str, Any] = Field(..., alias="input")
19
+ output: Dict[str, Any] = Field(..., alias="output")
20
+
21
+ model_config = COMMON_MODEL_SCHEMA
22
+
23
+
24
+ class BindingResourceValue(BaseModel):
25
+ default_value: str = Field(..., alias="defaultValue")
26
+ is_expression: bool = Field(..., alias="isExpression")
27
+ display_name: str = Field(..., alias="displayName")
28
+
29
+ model_config = COMMON_MODEL_SCHEMA
30
+
31
+
32
+ # TODO: create stronger binding resource definition with discriminator based on resource enum.
33
+ class BindingResource(BaseModel):
34
+ resource: str = Field(..., alias="resource")
35
+ key: str = Field(..., alias="key")
36
+ value: dict[str, BindingResourceValue] = Field(..., alias="value")
37
+ metadata: Any = Field(..., alias="metadata")
38
+
39
+ model_config = COMMON_MODEL_SCHEMA
40
+
41
+
42
+ class Bindings(BaseModel):
43
+ version: str = Field(..., alias="version")
44
+ resources: List[BindingResource] = Field(..., alias="resources")
45
+
46
+ model_config = COMMON_MODEL_SCHEMA
47
+
48
+
49
+ class RuntimeInternalArguments(BaseModel):
50
+ resource_overwrites: dict[str, Any] = Field(..., alias="resourceOverwrites")
51
+
52
+ model_config = COMMON_MODEL_SCHEMA
53
+
54
+
55
+ class RuntimeArguments(BaseModel):
56
+ internal_arguments: Optional[RuntimeInternalArguments] = Field(
57
+ default=None, alias="internalArguments"
58
+ )
59
+
60
+ model_config = COMMON_MODEL_SCHEMA
61
+
62
+
63
+ class RuntimeSchema(BaseModel):
64
+ runtime: Optional[RuntimeArguments] = Field(default=None, alias="runtime")
65
+ entrypoints: List[Entrypoint] = Field(..., alias="entryPoints")
66
+ bindings: Bindings = Field(
67
+ default=Bindings(version="2.0", resources=[]), alias="bindings"
68
+ )
69
+ settings: Optional[Dict[str, Any]] = Field(default=None, alias="setting")
70
+
71
+ model_config = COMMON_MODEL_SCHEMA
@@ -3,11 +3,8 @@
3
3
  from enum import Enum
4
4
  from typing import Annotated, Any, Dict, List, Literal, Optional, Union
5
5
 
6
- from pydantic import BaseModel, ConfigDict, Discriminator, Field, Tag
6
+ from pydantic import BaseModel, ConfigDict, Discriminator, Field, Tag, field_validator
7
7
 
8
- from uipath._cli._evals._models._evaluation_set import EvaluationSet
9
- from uipath._cli._evals._models._evaluator import Evaluator
10
- from uipath._cli._evals._models._mocks import ExampleCall
11
8
  from uipath.models import Connection
12
9
 
13
10
 
@@ -17,6 +14,7 @@ class AgentResourceType(str, Enum):
17
14
  TOOL = "tool"
18
15
  CONTEXT = "context"
19
16
  ESCALATION = "escalation"
17
+ MCP = "mcp"
20
18
 
21
19
 
22
20
  class BaseAgentResourceConfig(BaseModel):
@@ -55,12 +53,14 @@ class AgentToolType(str, Enum):
55
53
  """Agent tool type."""
56
54
 
57
55
  AGENT = "agent"
58
- INTEGRATION = "integration"
59
56
  PROCESS = "process"
57
+ API = "api"
58
+ PROCESS_ORCHESTRATION = "processorchestration"
59
+ INTEGRATION = "integration"
60
60
 
61
61
 
62
62
  class AgentToolSettings(BaseModel):
63
- """Settings for tool configuration."""
63
+ """Settings for tool."""
64
64
 
65
65
  max_attempts: Optional[int] = Field(None, alias="maxAttempts")
66
66
  retry_delay: Optional[int] = Field(None, alias="retryDelay")
@@ -74,7 +74,9 @@ class AgentToolSettings(BaseModel):
74
74
  class BaseResourceProperties(BaseModel):
75
75
  """Base resource properties."""
76
76
 
77
- example_calls: Optional[List[ExampleCall]] = Field(None, alias="exampleCalls")
77
+ model_config = ConfigDict(
78
+ validate_by_name=True, validate_by_alias=True, extra="allow"
79
+ )
78
80
 
79
81
 
80
82
  class AgentProcessToolProperties(BaseResourceProperties):
@@ -91,7 +93,12 @@ class AgentProcessToolProperties(BaseResourceProperties):
91
93
  class AgentProcessToolResourceConfig(BaseAgentToolResourceConfig):
92
94
  """Tool resource with tool-specific properties."""
93
95
 
94
- type: Literal[AgentToolType.AGENT] = AgentToolType.AGENT
96
+ type: Literal[
97
+ AgentToolType.AGENT,
98
+ AgentToolType.PROCESS,
99
+ AgentToolType.API,
100
+ AgentToolType.PROCESS_ORCHESTRATION,
101
+ ]
95
102
  output_schema: Dict[str, Any] = Field(
96
103
  ..., alias="outputSchema", description="Output schema for the tool"
97
104
  )
@@ -101,6 +108,17 @@ class AgentProcessToolResourceConfig(BaseAgentToolResourceConfig):
101
108
  settings: AgentToolSettings = Field(
102
109
  default_factory=AgentToolSettings, description="Tool settings"
103
110
  )
111
+ arguments: Dict[str, Any] = Field(
112
+ default_factory=dict, description="Tool arguments"
113
+ )
114
+
115
+ @field_validator("type", mode="before")
116
+ @classmethod
117
+ def normalize_type(cls, v: Any) -> str:
118
+ """Normalize tool type to lowercase format."""
119
+ if isinstance(v, str):
120
+ return v.lower()
121
+ return v
104
122
 
105
123
  model_config = ConfigDict(
106
124
  validate_by_name=True, validate_by_alias=True, extra="allow"
@@ -133,7 +151,7 @@ class AgentIntegrationToolParameter(BaseModel):
133
151
 
134
152
 
135
153
  class AgentIntegrationToolProperties(BaseResourceProperties):
136
- """Properties specific to tool configuration."""
154
+ """Properties specific to tool."""
137
155
 
138
156
  tool_path: str = Field(..., alias="toolPath")
139
157
  object_name: str = Field(..., alias="objectName")
@@ -141,7 +159,7 @@ class AgentIntegrationToolProperties(BaseResourceProperties):
141
159
  tool_description: str = Field(..., alias="toolDescription")
142
160
  method: str = Field(..., alias="method")
143
161
  connection: Connection = Field(..., alias="connection")
144
- body_structure: dict[str, Any] = Field(..., alias="bodyStructure")
162
+ body_structure: Optional[dict[str, Any]] = Field(None, alias="bodyStructure")
145
163
  parameters: List[AgentIntegrationToolParameter] = Field([], alias="parameters")
146
164
 
147
165
  model_config = ConfigDict(
@@ -154,26 +172,93 @@ class AgentIntegrationToolResourceConfig(BaseAgentToolResourceConfig):
154
172
 
155
173
  type: Literal[AgentToolType.INTEGRATION] = AgentToolType.INTEGRATION
156
174
  properties: AgentIntegrationToolProperties
175
+ arguments: Optional[Dict[str, Any]] = Field(
176
+ default_factory=dict, description="Tool arguments"
177
+ )
178
+ is_enabled: Optional[bool] = Field(None, alias="isEnabled")
179
+
180
+ @field_validator("type", mode="before")
181
+ @classmethod
182
+ def normalize_type(cls, v: Any) -> str:
183
+ """Normalize tool type to lowercase format."""
184
+ if isinstance(v, str):
185
+ return v.lower()
186
+ return v
187
+
157
188
  model_config = ConfigDict(
158
189
  validate_by_name=True, validate_by_alias=True, extra="allow"
159
190
  )
160
191
 
161
192
 
162
- class AgentUnknownToolResourceConfig(BaseAgentToolResourceConfig):
193
+ class AgentUnknownToolResourceConfig(BaseAgentResourceConfig):
163
194
  """Fallback for unknown or future tool types."""
164
195
 
165
196
  resource_type: Literal[AgentResourceType.TOOL] = AgentResourceType.TOOL
166
197
  type: str = Field(alias="$resourceType")
198
+ arguments: Optional[Dict[str, Any]] = Field(
199
+ default_factory=dict, description="Tool arguments"
200
+ )
201
+ is_enabled: Optional[bool] = Field(None, alias="isEnabled")
167
202
 
168
203
  model_config = ConfigDict(extra="allow")
169
204
 
170
205
 
206
+ class AgentContextQuerySetting(BaseModel):
207
+ """Query setting for context configuration."""
208
+
209
+ description: Optional[str] = Field(None)
210
+ variant: Optional[str] = Field(None)
211
+
212
+ model_config = ConfigDict(
213
+ validate_by_name=True, validate_by_alias=True, extra="allow"
214
+ )
215
+
216
+
217
+ class AgentContextValueSetting(BaseModel):
218
+ """Generic value setting for context configuration."""
219
+
220
+ value: Any = Field(...)
221
+
222
+ model_config = ConfigDict(
223
+ validate_by_name=True, validate_by_alias=True, extra="allow"
224
+ )
225
+
226
+
227
+ class AgentContextOutputColumn(BaseModel):
228
+ """Output column configuration for Batch Transform."""
229
+
230
+ name: str = Field(...)
231
+ description: Optional[str] = Field(None)
232
+
233
+ model_config = ConfigDict(
234
+ validate_by_name=True, validate_by_alias=True, extra="allow"
235
+ )
236
+
237
+
171
238
  class AgentContextSettings(BaseModel):
172
- """Settings for context configuration."""
239
+ """Settings for context."""
173
240
 
174
241
  result_count: int = Field(alias="resultCount")
175
- retrieval_mode: Literal["Semantic", "Structured"] = Field(alias="retrievalMode")
242
+ retrieval_mode: Literal["Semantic", "Structured", "DeepRAG", "BatchTransform"] = (
243
+ Field(alias="retrievalMode")
244
+ )
176
245
  threshold: float = Field(default=0)
246
+ query: Optional[AgentContextQuerySetting] = Field(None)
247
+ folder_path_prefix: Optional[Union[Dict[str, Any], AgentContextValueSetting]] = (
248
+ Field(None, alias="folderPathPrefix")
249
+ )
250
+ file_extension: Optional[Union[Dict[str, Any], AgentContextValueSetting]] = Field(
251
+ None, alias="fileExtension"
252
+ )
253
+ citation_mode: Optional[AgentContextValueSetting] = Field(
254
+ None, alias="citationMode"
255
+ )
256
+ web_search_grounding: Optional[AgentContextValueSetting] = Field(
257
+ None, alias="webSearchGrounding"
258
+ )
259
+ output_columns: Optional[List[AgentContextOutputColumn]] = Field(
260
+ None, alias="outputColumns"
261
+ )
177
262
 
178
263
  model_config = ConfigDict(
179
264
  validate_by_name=True, validate_by_alias=True, extra="allow"
@@ -187,19 +272,67 @@ class AgentContextResourceConfig(BaseAgentResourceConfig):
187
272
  folder_path: str = Field(alias="folderPath")
188
273
  index_name: str = Field(alias="indexName")
189
274
  settings: AgentContextSettings = Field(..., description="Context settings")
275
+ is_enabled: Optional[bool] = Field(None, alias="isEnabled")
276
+
277
+ model_config = ConfigDict(
278
+ validate_by_name=True, validate_by_alias=True, extra="allow"
279
+ )
280
+
281
+
282
+ class AgentMcpTool(BaseModel):
283
+ """MCP available tool."""
284
+
285
+ name: str = Field(..., alias="name")
286
+ description: str = Field(..., alias="description")
287
+ input_schema: Dict[str, Any] = Field(..., alias="inputSchema")
190
288
 
191
289
  model_config = ConfigDict(
192
290
  validate_by_name=True, validate_by_alias=True, extra="allow"
193
291
  )
194
292
 
195
293
 
294
+ class AgentMcpResourceConfig(BaseAgentResourceConfig):
295
+ """MCP resource configuration."""
296
+
297
+ resource_type: Literal[AgentResourceType.MCP] = Field(alias="$resourceType")
298
+ folder_path: str = Field(alias="folderPath")
299
+ slug: str = Field(..., alias="slug")
300
+ available_tools: List[AgentMcpTool] = Field(..., alias="availableTools")
301
+ is_enabled: Optional[bool] = Field(None, alias="isEnabled")
302
+
303
+ model_config = ConfigDict(
304
+ validate_by_name=True, validate_by_alias=True, extra="allow"
305
+ )
306
+
307
+
308
+ class AgentEscalationRecipientType(str, Enum):
309
+ """Enum for escalation recipient types."""
310
+
311
+ USER_ID = "UserId"
312
+ GROUP_ID = "GroupId"
313
+ USER_EMAIL = "UserEmail"
314
+
315
+
196
316
  class AgentEscalationRecipient(BaseModel):
197
317
  """Recipient for escalation."""
198
318
 
199
- type: int = Field(..., alias="type")
319
+ type: Union[AgentEscalationRecipientType, str] = Field(..., alias="type")
200
320
  value: str = Field(..., alias="value")
201
321
  display_name: Optional[str] = Field(default=None, alias="displayName")
202
322
 
323
+ @field_validator("type", mode="before")
324
+ @classmethod
325
+ def normalize_type(cls, v: Any) -> str:
326
+ """Normalize recipient type from int (1=UserId, 2=GroupId, 3=UserEmail) or string. Unknown integers are converted to string."""
327
+ if isinstance(v, int):
328
+ mapping = {
329
+ 1: AgentEscalationRecipientType.USER_ID,
330
+ 2: AgentEscalationRecipientType.GROUP_ID,
331
+ 3: AgentEscalationRecipientType.USER_EMAIL,
332
+ }
333
+ return mapping.get(v, str(v))
334
+ return v
335
+
203
336
  model_config = ConfigDict(
204
337
  validate_by_name=True, validate_by_alias=True, extra="allow"
205
338
  )
@@ -227,7 +360,7 @@ class AgentEscalationChannelProperties(BaseResourceProperties):
227
360
  class AgentEscalationChannel(BaseModel):
228
361
  """Agent escalation channel."""
229
362
 
230
- id: str = Field(..., alias="id")
363
+ id: Optional[str] = Field(None, alias="id")
231
364
  name: str = Field(..., alias="name")
232
365
  type: str = Field(alias="type")
233
366
  description: str = Field(..., alias="description")
@@ -239,8 +372,12 @@ class AgentEscalationChannel(BaseModel):
239
372
  alias="outputSchema",
240
373
  description="Output schema for the escalation channel",
241
374
  )
375
+ outcome_mapping: Optional[Dict[str, str]] = Field(None, alias="outcomeMapping")
242
376
  properties: AgentEscalationChannelProperties = Field(..., alias="properties")
243
377
  recipients: List[AgentEscalationRecipient] = Field(..., alias="recipients")
378
+ task_title: Optional[str] = Field(default=None, alias="taskTitle")
379
+ priority: Optional[str] = None
380
+ labels: List[str] = Field(default_factory=list)
244
381
 
245
382
  model_config = ConfigDict(
246
383
  validate_by_name=True, validate_by_alias=True, extra="allow"
@@ -250,11 +387,11 @@ class AgentEscalationChannel(BaseModel):
250
387
  class AgentEscalationResourceConfig(BaseAgentResourceConfig):
251
388
  """Escalation resource with escalation-specific properties."""
252
389
 
390
+ id: Optional[str] = Field(None, alias="id")
253
391
  resource_type: Literal[AgentResourceType.ESCALATION] = Field(alias="$resourceType")
254
392
  channels: List[AgentEscalationChannel] = Field(alias="channels")
255
-
256
- # escalation_type: int = Field(..., alias="escalationType")
257
- is_agent_memory_enabled: bool = Field(alias="isAgentMemoryEnabled")
393
+ is_agent_memory_enabled: bool = Field(default=False, alias="isAgentMemoryEnabled")
394
+ escalation_type: int = Field(default=0, alias="escalationType")
258
395
 
259
396
  model_config = ConfigDict(
260
397
  validate_by_name=True, validate_by_alias=True, extra="allow"
@@ -269,9 +406,16 @@ def custom_discriminator(data: Any) -> str:
269
406
  return "AgentContextResourceConfig"
270
407
  elif resource_type == AgentResourceType.ESCALATION:
271
408
  return "AgentEscalationResourceConfig"
409
+ elif resource_type == AgentResourceType.MCP:
410
+ return "AgentMcpResourceConfig"
272
411
  elif resource_type == AgentResourceType.TOOL:
273
412
  tool_type = data.get("type")
274
- if tool_type == AgentToolType.AGENT:
413
+ if tool_type in [
414
+ AgentToolType.AGENT,
415
+ AgentToolType.PROCESS,
416
+ AgentToolType.API,
417
+ AgentToolType.PROCESS_ORCHESTRATION,
418
+ ]:
275
419
  return "AgentProcessToolResourceConfig"
276
420
  elif tool_type == AgentToolType.INTEGRATION:
277
421
  return "AgentIntegrationToolResourceConfig"
@@ -296,47 +440,24 @@ AgentResourceConfig = Annotated[
296
440
  ],
297
441
  Annotated[AgentContextResourceConfig, Tag("AgentContextResourceConfig")],
298
442
  Annotated[AgentEscalationResourceConfig, Tag("AgentEscalationResourceConfig")],
443
+ Annotated[AgentMcpResourceConfig, Tag("AgentMcpResourceConfig")],
299
444
  Annotated[AgentUnknownResourceConfig, Tag("AgentUnknownResourceConfig")],
300
445
  ],
301
446
  Field(discriminator=Discriminator(custom_discriminator)),
302
447
  ]
303
448
 
304
449
 
305
- class BaseAgentDefinition(BaseModel):
306
- """Main agent model."""
450
+ class AgentMetadata(BaseModel):
451
+ """Metadata for agent."""
307
452
 
308
- id: str = Field(..., description="Agent id or project name")
309
- name: str = Field(..., description="Agent name or project name")
310
- input_schema: Dict[str, Any] = Field(
311
- ..., alias="inputSchema", description="JSON schema for input arguments"
312
- )
313
- output_schema: Dict[str, Any] = Field(
314
- ..., alias="outputSchema", description="JSON schema for output arguments"
315
- )
316
- version: str = Field("1.0.0", description="Agent version")
317
- resources: List[AgentResourceConfig] = Field(
318
- ..., description="List of tools, context, and escalation resources"
319
- )
320
- evaluation_sets: Optional[List[EvaluationSet]] = Field(
321
- None,
322
- alias="evaluationSets",
323
- description="List of agent evaluation sets",
324
- )
325
- evaluators: Optional[List[Evaluator]] = Field(
326
- None, description="List of agent evaluators"
327
- )
453
+ is_conversational: bool = Field(alias="isConversational")
454
+ storage_version: str = Field(alias="storageVersion")
328
455
 
329
456
  model_config = ConfigDict(
330
457
  validate_by_name=True, validate_by_alias=True, extra="allow"
331
458
  )
332
459
 
333
460
 
334
- class AgentType(str, Enum):
335
- """Agent type."""
336
-
337
- LOW_CODE = "lowCode"
338
-
339
-
340
461
  class AgentMessageRole(str, Enum):
341
462
  """Enum for message roles."""
342
463
 
@@ -345,23 +466,31 @@ class AgentMessageRole(str, Enum):
345
466
 
346
467
 
347
468
  class AgentMessage(BaseModel):
348
- """Message model for agent conversations."""
469
+ """Message model for agent definition."""
349
470
 
350
- role: AgentMessageRole
471
+ role: Literal[AgentMessageRole.SYSTEM, AgentMessageRole.USER]
351
472
  content: str
352
473
 
474
+ @field_validator("role", mode="before")
475
+ @classmethod
476
+ def normalize_role(cls, v: Any) -> str:
477
+ """Normalize role to lowercase format."""
478
+ if isinstance(v, str):
479
+ return v.lower()
480
+ return v
481
+
353
482
  model_config = ConfigDict(
354
483
  validate_by_name=True, validate_by_alias=True, extra="allow"
355
484
  )
356
485
 
357
486
 
358
487
  class AgentSettings(BaseModel):
359
- """Settings for agent configuration."""
488
+ """Settings for agent."""
360
489
 
361
490
  engine: str = Field(..., description="Engine type, e.g., 'basic-v1'")
362
- model: str = Field(..., description="LLM model identifier")
491
+ model: str = Field(..., description="LLM model")
363
492
  max_tokens: int = Field(
364
- ..., alias="maxTokens", description="Maximum number of tokens"
493
+ ..., alias="maxTokens", description="Maximum number of tokens per completion"
365
494
  )
366
495
  temperature: float = Field(..., description="Temperature for response generation")
367
496
 
@@ -370,17 +499,60 @@ class AgentSettings(BaseModel):
370
499
  )
371
500
 
372
501
 
502
+ class BaseAgentDefinition(BaseModel):
503
+ """Agent definition model."""
504
+
505
+ input_schema: Dict[str, Any] = Field(
506
+ ..., alias="inputSchema", description="JSON schema for input arguments"
507
+ )
508
+ output_schema: Dict[str, Any] = Field(
509
+ ..., alias="outputSchema", description="JSON schema for output arguments"
510
+ )
511
+
512
+ model_config = ConfigDict(
513
+ validate_by_name=True, validate_by_alias=True, extra="allow"
514
+ )
515
+
516
+
517
+ class AgentType(str, Enum):
518
+ """Agent type."""
519
+
520
+ LOW_CODE = "lowCode"
521
+ CODED = "coded"
522
+
523
+
373
524
  class LowCodeAgentDefinition(BaseAgentDefinition):
374
525
  """Low code agent definition."""
375
526
 
376
527
  type: Literal[AgentType.LOW_CODE] = AgentType.LOW_CODE
528
+
529
+ id: str = Field(..., description="Agent id or project name")
530
+ name: str = Field(..., description="Agent name or project name")
531
+ metadata: Optional[AgentMetadata] = Field(None, description="Agent metadata")
377
532
  messages: List[AgentMessage] = Field(
378
533
  ..., description="List of system and user messages"
379
534
  )
380
- features: List[Any] = Field(
381
- default_factory=list, description="Currently empty feature list"
535
+
536
+ version: str = Field("1.0.0", description="Agent version")
537
+ resources: List[AgentResourceConfig] = Field(
538
+ ..., description="List of tools, context, mcp and escalation resources"
539
+ )
540
+ features: List[Any] = Field(default_factory=list, description="Agent feature list")
541
+ settings: AgentSettings = Field(..., description="Agent settings")
542
+
543
+ model_config = ConfigDict(
544
+ validate_by_name=True, validate_by_alias=True, extra="allow"
545
+ )
546
+
547
+
548
+ class CodedAgentDefinition(BaseAgentDefinition):
549
+ """Coded agent definition."""
550
+
551
+ type: Literal[AgentType.CODED] = AgentType.CODED
552
+
553
+ model_config = ConfigDict(
554
+ validate_by_name=True, validate_by_alias=True, extra="allow"
382
555
  )
383
- settings: AgentSettings = Field(..., description="Agent settings configuration")
384
556
 
385
557
 
386
558
  KnownAgentDefinition = Annotated[
@@ -0,0 +1,56 @@
1
+ """Agent Evaluation Models.
2
+
3
+ These models extend the base agent models with evaluation and simulation-specific fields.
4
+ """
5
+
6
+ from typing import List, Optional
7
+
8
+ from pydantic import Field
9
+
10
+ from uipath._cli._evals._models._evaluation_set import EvaluationSet
11
+ from uipath._cli._evals._models._evaluator import Evaluator
12
+ from uipath._cli._evals._models._mocks import ExampleCall
13
+ from uipath.agent.models.agent import (
14
+ AgentEscalationChannelProperties,
15
+ AgentIntegrationToolProperties,
16
+ AgentProcessToolProperties,
17
+ BaseResourceProperties,
18
+ LowCodeAgentDefinition,
19
+ )
20
+
21
+
22
+ class AgentEvalResourceProperties(BaseResourceProperties):
23
+ """Resource properties with simulation support."""
24
+
25
+ example_calls: Optional[List[ExampleCall]] = Field(None, alias="exampleCalls")
26
+
27
+
28
+ class AgentEvalProcessToolProperties(AgentProcessToolProperties):
29
+ """Process tool properties with simulation support."""
30
+
31
+ example_calls: Optional[List[ExampleCall]] = Field(None, alias="exampleCalls")
32
+
33
+
34
+ class AgentEvalIntegrationToolProperties(AgentIntegrationToolProperties):
35
+ """Integration tool properties with simulation support."""
36
+
37
+ example_calls: Optional[List[ExampleCall]] = Field(None, alias="exampleCalls")
38
+
39
+
40
+ class AgentEvalEscalationChannelProperties(AgentEscalationChannelProperties):
41
+ """Escalation channel properties with simulation support."""
42
+
43
+ example_calls: Optional[List[ExampleCall]] = Field(None, alias="exampleCalls")
44
+
45
+
46
+ class AgentEvalsDefinition(LowCodeAgentDefinition):
47
+ """Agent definition with evaluation sets and evaluators support."""
48
+
49
+ evaluation_sets: Optional[List[EvaluationSet]] = Field(
50
+ None,
51
+ alias="evaluationSets",
52
+ description="List of agent evaluation sets",
53
+ )
54
+ evaluators: Optional[List[Evaluator]] = Field(
55
+ None, description="List of agent evaluators"
56
+ )
@@ -95,6 +95,7 @@ class _TelemetryClient:
95
95
  "service.name=uipath-sdk,service.instance.id=" + version("uipath")
96
96
  )
97
97
  os.environ["OTEL_TRACES_EXPORTER"] = "none"
98
+ os.environ["APPLICATIONINSIGHTS_STATSBEAT_DISABLED_ALL"] = "true"
98
99
 
99
100
  configure_azure_monitor(
100
101
  connection_string=_CONNECTION_STRING,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.90
3
+ Version: 2.1.91
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
@@ -10,13 +10,13 @@ uipath/_cli/cli_auth.py,sha256=CzetSRqSUvMs02PtI4w5Vi_0fv_ETA307bB2vXalWzY,2628
10
10
  uipath/_cli/cli_deploy.py,sha256=KPCmQ0c_NYD5JofSDao5r6QYxHshVCRxlWDVnQvlp5w,645
11
11
  uipath/_cli/cli_dev.py,sha256=nEfpjw1PZ72O6jmufYWVrueVwihFxDPOeJakdvNHdOA,2146
12
12
  uipath/_cli/cli_eval.py,sha256=oOMywGSUrHDQ1W_54ccbekzCeduPf-KHRyu_r0Dezd0,5444
13
- uipath/_cli/cli_init.py,sha256=AUBQxUO1LWC2W-MaydkJBlhsg1m-H7eiXqu5jNhTgPQ,7673
13
+ uipath/_cli/cli_init.py,sha256=2OE9uF4uCEwOVE_MiPJGjEK0bCnlIjsBqOBHwB98X4c,7831
14
14
  uipath/_cli/cli_invoke.py,sha256=m-te-EjhDpk_fhFDkt-yQFzmjEHGo5lQDGEQWxSXisQ,4395
15
15
  uipath/_cli/cli_new.py,sha256=9378NYUBc9j-qKVXV7oja-jahfJhXBg8zKVyaon7ctY,2102
16
- uipath/_cli/cli_pack.py,sha256=NmwZTfwZ2fURiHyiX1BM0juAtBOjPB1Jmcpu-rD7p-4,11025
16
+ uipath/_cli/cli_pack.py,sha256=U5rXVbUnHFgdEsXyhkjmWza8dfob1wU9lyl4yrYnUss,11076
17
17
  uipath/_cli/cli_publish.py,sha256=DgyfcZjvfV05Ldy0Pk5y_Le_nT9JduEE_x-VpIc_Kq0,6471
18
18
  uipath/_cli/cli_pull.py,sha256=muX2gR-W-bSrNI3pIO0zbhZAP0VBOSsOY2-yrq8HgAw,2433
19
- uipath/_cli/cli_push.py,sha256=-j-gDIbT8GyU2SybLQqFl5L8KI9nu3CDijVtltDgX20,3132
19
+ uipath/_cli/cli_push.py,sha256=_JbjI45uJaobBDaz--NlzAXYJNwHX_XGLa8eC9wN-Cg,3166
20
20
  uipath/_cli/cli_run.py,sha256=1FKv20EjxrrP1I5rNSnL_HzbWtOAIMjB3M--4RPA_Yo,3709
21
21
  uipath/_cli/middlewares.py,sha256=0D9a-wphyetnH9T97F08o7-1OKWF1lMweFHHAR0xiOw,4979
22
22
  uipath/_cli/spinner.py,sha256=bS-U_HA5yne11ejUERu7CQoXmWdabUD2bm62EfEdV8M,1107
@@ -46,7 +46,7 @@ uipath/_cli/_dev/_terminal/_utils/_logger.py,sha256=_ipTl_oAiMF9I7keGt2AAFAMz40D
46
46
  uipath/_cli/_evals/_console_progress_reporter.py,sha256=HgB6pdMyoS6YVwuI3EpM2LBcH3U69nrdaTyNgPG8ssg,9304
47
47
  uipath/_cli/_evals/_evaluator_factory.py,sha256=Gycv94VtGOpMir_Gba-UoiAyrSRfbSfe8_pTfjzcA9Q,3875
48
48
  uipath/_cli/_evals/_progress_reporter.py,sha256=kX7rNSa-QCLXIzK-vb9Jjf-XLEtucdeiQPgPlSkpp2U,16778
49
- uipath/_cli/_evals/_runtime.py,sha256=eK32s4yWOFsiwYBbe5bml02oNarKT6q7bkSalTuoodY,20608
49
+ uipath/_cli/_evals/_runtime.py,sha256=JABvs_EhgG6qqpAsJcC2uTDRZw9JgYOhFrpejFGy2vA,20655
50
50
  uipath/_cli/_evals/_span_collection.py,sha256=RoKoeDFG2XODdlgI27ionCjU7LLD_C0LJJ3gu0wab10,779
51
51
  uipath/_cli/_evals/_models/_evaluation_set.py,sha256=0I83I3HNu_BrgFz9miar2QTyXKb0dAaEpYMQrKUHP0U,4958
52
52
  uipath/_cli/_evals/_models/_evaluator.py,sha256=fuC3UOYwPD4d_wdynHeLSCzbu82golNAnnPnxC8Y4rk,3315
@@ -57,12 +57,12 @@ uipath/_cli/_evals/_models/_output.py,sha256=4KPgXypO2qvWsDf37KbdMGmlYgaIfBSeGgK
57
57
  uipath/_cli/_evals/_models/_sw_reporting.py,sha256=tSBLQFAdOIun8eP0vsqt56K6bmCZz_uMaWI3hskg_24,536
58
58
  uipath/_cli/_evals/mocks/__init__.py,sha256=2WXwAy_oZw5bKp6L0HB13QygCJeftOB_Bget0AI6Gik,32
59
59
  uipath/_cli/_evals/mocks/input_mocker.py,sha256=imJLriJv1rFthoA-SnJewnNbN27yen8VP11vbv1I9-0,4150
60
- uipath/_cli/_evals/mocks/llm_mocker.py,sha256=VrjzkeOVAJNKfkrHntQ17MBEtHZhwszEzc_uuPH3Tbc,7355
60
+ uipath/_cli/_evals/mocks/llm_mocker.py,sha256=36WO2lWHTtaAfunSAZ_CGgNPYZthszxDRBvqbPBzwdE,7517
61
61
  uipath/_cli/_evals/mocks/mocker.py,sha256=VXCxuRAPqUK40kRUXpPmXZRckd7GrOY5ZzIYDe-NNfo,910
62
62
  uipath/_cli/_evals/mocks/mocker_factory.py,sha256=V5QKSTtQxztTo4-fK1TyAaXw2Z3mHf2UC5mXqwuUGTs,811
63
63
  uipath/_cli/_evals/mocks/mockito_mocker.py,sha256=AO2BmFwA6hz3Lte-STVr7aJDPvMCqKNKa4j2jeNZ_U4,2677
64
- uipath/_cli/_evals/mocks/mocks.py,sha256=jfenoCSnMPpaXEyAcRDVu5jIfb62eRredRenZDI_AzE,1965
65
- uipath/_cli/_push/sw_file_handler.py,sha256=gySENzKMcIDtE4u_MrXDK0g-h9wRz6jaJJht1LW54Nc,17877
64
+ uipath/_cli/_evals/mocks/mocks.py,sha256=HY0IaSqqO8hioBB3rp5XwAjSpQE4K5hoH6oJQ-sH72I,2207
65
+ uipath/_cli/_push/sw_file_handler.py,sha256=sPEopayYzjPNJA6fV9SZZtzE_cdHs1uSszh2IJTB35g,17874
66
66
  uipath/_cli/_runtime/_contracts.py,sha256=E8Is7EQfAu7_hCbeZI68gmTxSxo4X7_U4vcSl7D3Syg,28988
67
67
  uipath/_cli/_runtime/_escalation.py,sha256=x3vI98qsfRA-fL_tNkRVTFXioM5Gv2w0GFcXJJ5eQtg,7981
68
68
  uipath/_cli/_runtime/_hitl.py,sha256=VKbM021nVg1HEDnTfucSLJ0LsDn83CKyUtVzofS2qTU,11369
@@ -81,12 +81,14 @@ uipath/_cli/_utils/_debug.py,sha256=zamzIR4VgbdKADAE4gbmjxDsbgF7wvdr7C5Dqp744Oc,
81
81
  uipath/_cli/_utils/_eval_set.py,sha256=4aP8yAC-jMrNYaC62Yj8fHD2hNlotGwy63bciQrpdc4,2766
82
82
  uipath/_cli/_utils/_folders.py,sha256=RsYrXzF0NA1sPxgBoLkLlUY3jDNLg1V-Y8j71Q8a8HY,1357
83
83
  uipath/_cli/_utils/_input_args.py,sha256=AnbQ12D2ACIQFt0QHMaWleRn1ZgRTXuTSTN0ozJiSQg,5766
84
- uipath/_cli/_utils/_parse_ast.py,sha256=8Iohz58s6bYQ7rgWtOTjrEInLJ-ETikmOMZzZdIY2Co,20072
84
+ uipath/_cli/_utils/_parse_ast.py,sha256=24YL28qK5Ss2O26IlzZ2FgEC_ZazXld_u3vkj8zVxGA,20933
85
85
  uipath/_cli/_utils/_processes.py,sha256=q7DfEKHISDWf3pngci5za_z0Pbnf_shWiYEcTOTCiyk,1855
86
- uipath/_cli/_utils/_project_files.py,sha256=ueDUGQrig5EFSgEXUiaXmMGAgs1b_tX2yBpgaXsHcrA,20093
86
+ uipath/_cli/_utils/_project_files.py,sha256=_P42C8wJbN66gJYwt3yAnWsOMqbqFHv80kAoT8UGYuo,20112
87
87
  uipath/_cli/_utils/_studio_project.py,sha256=8WYwi_CiTPRqo8KV2bsvj0H_KBFxTEN0Q2cXoZb-NnM,17030
88
88
  uipath/_cli/_utils/_tracing.py,sha256=2igb03j3EHjF_A406UhtCKkPfudVfFPjUq5tXUEG4oo,1541
89
89
  uipath/_cli/_utils/_uv_helpers.py,sha256=6SvoLnZPoKIxW0sjMvD1-ENV_HOXDYzH34GjBqwT138,3450
90
+ uipath/_cli/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ uipath/_cli/models/runtime_schema.py,sha256=Po1SYFwTBlWZdmwIG2GvFy0WYbZnT5U1aGjfWcd8ZAA,2181
90
92
  uipath/_events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
93
  uipath/_events/_event_bus.py,sha256=4-VzstyX69cr7wT1EY7ywp-Ndyz2CyemD3Wk_-QmRpo,5496
92
94
  uipath/_events/_events.py,sha256=EzDfzpVm-EIH27Onad5mo8Go6-WB3S6_-6zZQ7qV58w,1811
@@ -138,7 +140,8 @@ uipath/agent/conversation/tool.py,sha256=ol8XI8AVd-QNn5auXNBPcCzOkh9PPFtL7hTK3kq
138
140
  uipath/agent/loop/__init__.py,sha256=EZlNqrh8xod0VtTJqc-1pyUofaeS6PKjbsDfWoveVtI,424
139
141
  uipath/agent/loop/prompts.py,sha256=qPwyd6Ple2m-Kt0m2foa6ZEmxD3kyCXOmGfXvzHi8Rc,3372
140
142
  uipath/agent/loop/tools.py,sha256=OsT3x431KqOEzLi2jLxy2B9xXbcFq16xMfmyAqFaqZQ,1351
141
- uipath/agent/models/agent.py,sha256=18NvqLtuQoEHYnrHiEApWjaka91PYCj_fJRFE72z4Uw,13236
143
+ uipath/agent/models/agent.py,sha256=dEUWZIzvTnxhdCQlMad6Pf6EphLP_W5ukHtczbXKYL0,18712
144
+ uipath/agent/models/evals.py,sha256=QMIqwCuwabD_vYF0KgJpip5BV0pFLf9ZKUd9AL5eU2w,1843
142
145
  uipath/eval/_helpers/__init__.py,sha256=GSmZMryjuO3Wo_zdxZdrHCRRsgOxsVFYkYgJ15YNC3E,86
143
146
  uipath/eval/_helpers/helpers.py,sha256=iE2HHdMiAdAMLqxHkPKHpfecEtAuN5BTBqvKFTI8ciE,1315
144
147
  uipath/eval/evaluators/__init__.py,sha256=DJAAhgv0I5UfBod4sGnSiKerfrz1iMmk7GNFb71V8eI,494
@@ -173,7 +176,7 @@ uipath/models/processes.py,sha256=bV31xTyF0hRWZmwy3bWj5L8dBD9wttWxfJjwzhjETmk,19
173
176
  uipath/models/queues.py,sha256=gnbeEyYlHtdqdxBalio0lw8mq-78YBG9MPMSkv1BWOg,6934
174
177
  uipath/telemetry/__init__.py,sha256=Wna32UFzZR66D-RzTKlPWlvji9i2HJb82NhHjCCXRjY,61
175
178
  uipath/telemetry/_constants.py,sha256=uRDuEZayBYtBA0tMx-2AS_D-oiVA7oKgp9zid9jNats,763
176
- uipath/telemetry/_track.py,sha256=zD39zSs0sWsWnFkqf15xCLwFKu6Ic8CfjdPACTvIOoQ,4709
179
+ uipath/telemetry/_track.py,sha256=3RZgJtY8y28Y5rfVmC432OyRu7N3pSxPouwa82KWFso,4787
177
180
  uipath/tracing/__init__.py,sha256=GKRINyWdHVrDsI-8mrZDLdf0oey6GHGlNZTOADK-kgc,224
178
181
  uipath/tracing/_otel_exporters.py,sha256=c0GKU_oUrAwrOrqbyu64c55z1TR6xk01d3y5fLUN1lU,3215
179
182
  uipath/tracing/_traced.py,sha256=yBIY05PCCrYyx50EIHZnwJaKNdHPNx-YTR1sHQl0a98,19901
@@ -181,8 +184,8 @@ uipath/tracing/_utils.py,sha256=X-LFsyIxDeNOGuHPvkb6T5o9Y8ElYhr_rP3CEBJSu4s,1383
181
184
  uipath/utils/__init__.py,sha256=VD-KXFpF_oWexFg6zyiWMkxl2HM4hYJMIUDZ1UEtGx0,105
182
185
  uipath/utils/_endpoints_manager.py,sha256=iRTl5Q0XAm_YgcnMcJOXtj-8052sr6jpWuPNz6CgT0Q,8408
183
186
  uipath/utils/dynamic_schema.py,sha256=w0u_54MoeIAB-mf3GmwX1A_X8_HDrRy6p998PvX9evY,3839
184
- uipath-2.1.90.dist-info/METADATA,sha256=GUdxOQ8RiDFdvNtyRByMvvA_q_Ionidg7VbtOEKzdQg,6593
185
- uipath-2.1.90.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
186
- uipath-2.1.90.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
187
- uipath-2.1.90.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
188
- uipath-2.1.90.dist-info/RECORD,,
187
+ uipath-2.1.91.dist-info/METADATA,sha256=4qk08PijcX8XCNXQJLdjg27DadfbidSqDiY5YWUc734,6593
188
+ uipath-2.1.91.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
189
+ uipath-2.1.91.dist-info/entry_points.txt,sha256=9C2_29U6Oq1ExFu7usihR-dnfIVNSKc-0EFbh0rskB4,43
190
+ uipath-2.1.91.dist-info/licenses/LICENSE,sha256=-KBavWXepyDjimmzH5fVAsi-6jNVpIKFc2kZs0Ri4ng,1058
191
+ uipath-2.1.91.dist-info/RECORD,,