uipath 2.1.119__tar.gz → 2.1.122__tar.gz

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.

Files changed (452) hide show
  1. {uipath-2.1.119 → uipath-2.1.122}/PKG-INFO +1 -1
  2. {uipath-2.1.119 → uipath-2.1.122}/pyproject.toml +1 -1
  3. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_progress_reporter.py +10 -8
  4. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_runtime.py +2 -0
  5. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/input_mocker.py +1 -1
  6. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/llm_mocker.py +1 -1
  7. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_constants.py +0 -2
  8. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_eval.py +14 -3
  9. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_init.py +2 -3
  10. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_pack.py +3 -3
  11. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_pull.py +2 -4
  12. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_push.py +2 -5
  13. uipath-2.1.122/src/uipath/_config.py +44 -0
  14. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_events/_events.py +1 -0
  15. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_resources/CLI_REFERENCE.md +2 -0
  16. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/constants.py +2 -0
  17. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/tracing/_otel_exporters.py +58 -22
  18. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/tracing/_traced.py +33 -18
  19. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/tracing/_utils.py +64 -60
  20. uipath-2.1.122/tests/cli/eval/test_evaluate.py +201 -0
  21. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/eval/test_progress_reporter.py +110 -1
  22. {uipath-2.1.119 → uipath-2.1.122}/tests/tracing/test_otel_exporters.py +137 -26
  23. {uipath-2.1.119 → uipath-2.1.122}/tests/tracing/test_span_utils.py +62 -1
  24. {uipath-2.1.119 → uipath-2.1.122}/tests/tracing/test_traced.py +88 -0
  25. {uipath-2.1.119 → uipath-2.1.122}/uv.lock +1 -1
  26. uipath-2.1.119/src/uipath/_config.py +0 -6
  27. uipath-2.1.119/tests/cli/eval/test_evaluate.py +0 -60
  28. {uipath-2.1.119 → uipath-2.1.122}/.claude/agents/command-tester.md +0 -0
  29. {uipath-2.1.119 → uipath-2.1.122}/.claude/agents/test-reporter.md +0 -0
  30. {uipath-2.1.119 → uipath-2.1.122}/.claude/commands/prepare-pr.md +0 -0
  31. {uipath-2.1.119 → uipath-2.1.122}/.cursorrules +0 -0
  32. {uipath-2.1.119 → uipath-2.1.122}/.editorconfig +0 -0
  33. {uipath-2.1.119 → uipath-2.1.122}/.gitattributes +0 -0
  34. {uipath-2.1.119 → uipath-2.1.122}/.github/labeler.yml +0 -0
  35. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/auto-label.yml +0 -0
  36. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/cd.yml +0 -0
  37. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/ci.yml +0 -0
  38. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/commitlint.yml +0 -0
  39. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/integration_tests.yml +0 -0
  40. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/lint.yml +0 -0
  41. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/publish-dev.yml +0 -0
  42. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/publish-docs.yml +0 -0
  43. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/slack.yml +0 -0
  44. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/test-uipath-langchain.yml +0 -0
  45. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  46. {uipath-2.1.119 → uipath-2.1.122}/.github/workflows/test.yml +0 -0
  47. {uipath-2.1.119 → uipath-2.1.122}/.gitignore +0 -0
  48. {uipath-2.1.119 → uipath-2.1.122}/.pre-commit-config.yaml +0 -0
  49. {uipath-2.1.119 → uipath-2.1.122}/.python-version +0 -0
  50. {uipath-2.1.119 → uipath-2.1.122}/.vscode/extensions.json +0 -0
  51. {uipath-2.1.119 → uipath-2.1.122}/.vscode/launch.json +0 -0
  52. {uipath-2.1.119 → uipath-2.1.122}/.vscode/settings.json +0 -0
  53. {uipath-2.1.119 → uipath-2.1.122}/CONTRIBUTING.md +0 -0
  54. {uipath-2.1.119 → uipath-2.1.122}/LICENSE +0 -0
  55. {uipath-2.1.119 → uipath-2.1.122}/README.md +0 -0
  56. {uipath-2.1.119 → uipath-2.1.122}/docs/AutomationSuite.md +0 -0
  57. {uipath-2.1.119 → uipath-2.1.122}/docs/CONTRIBUTING.md +0 -0
  58. {uipath-2.1.119 → uipath-2.1.122}/docs/FAQ.md +0 -0
  59. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/env-preparation-failed-dark.png +0 -0
  60. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/env-preparation-failed-light.png +0 -0
  61. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/favicon.png +0 -0
  62. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/llms.txt +0 -0
  63. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/logo-dark.svg +0 -0
  64. {uipath-2.1.119 → uipath-2.1.122}/docs/assets/logo-light.svg +0 -0
  65. {uipath-2.1.119 → uipath-2.1.122}/docs/cli/index.md +0 -0
  66. {uipath-2.1.119 → uipath-2.1.122}/docs/core/actions.md +0 -0
  67. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  68. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/cloud_env_var_light.gif +0 -0
  69. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  70. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  71. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/copy_path_dark.png +0 -0
  72. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets/copy_path_light.png +0 -0
  73. {uipath-2.1.119 → uipath-2.1.122}/docs/core/assets.md +0 -0
  74. {uipath-2.1.119 → uipath-2.1.122}/docs/core/attachments.md +0 -0
  75. {uipath-2.1.119 → uipath-2.1.122}/docs/core/buckets.md +0 -0
  76. {uipath-2.1.119 → uipath-2.1.122}/docs/core/connections.md +0 -0
  77. {uipath-2.1.119 → uipath-2.1.122}/docs/core/context_grounding.md +0 -0
  78. {uipath-2.1.119 → uipath-2.1.122}/docs/core/documents.md +0 -0
  79. {uipath-2.1.119 → uipath-2.1.122}/docs/core/documents_models.md +0 -0
  80. {uipath-2.1.119 → uipath-2.1.122}/docs/core/environment_variables.md +0 -0
  81. {uipath-2.1.119 → uipath-2.1.122}/docs/core/getting_started.md +0 -0
  82. {uipath-2.1.119 → uipath-2.1.122}/docs/core/jobs.md +0 -0
  83. {uipath-2.1.119 → uipath-2.1.122}/docs/core/llm_gateway.md +0 -0
  84. {uipath-2.1.119 → uipath-2.1.122}/docs/core/processes.md +0 -0
  85. {uipath-2.1.119 → uipath-2.1.122}/docs/core/queues.md +0 -0
  86. {uipath-2.1.119 → uipath-2.1.122}/docs/core/traced.md +0 -0
  87. {uipath-2.1.119 → uipath-2.1.122}/docs/hooks.py +0 -0
  88. {uipath-2.1.119 → uipath-2.1.122}/docs/index.md +0 -0
  89. {uipath-2.1.119 → uipath-2.1.122}/docs/javascripts/extra.js +0 -0
  90. {uipath-2.1.119 → uipath-2.1.122}/docs/overrides/main.html +0 -0
  91. {uipath-2.1.119 → uipath-2.1.122}/docs/overrides/partials/actions.html +0 -0
  92. {uipath-2.1.119 → uipath-2.1.122}/docs/overrides/partials/logo.html +0 -0
  93. {uipath-2.1.119 → uipath-2.1.122}/docs/release_policy.md +0 -0
  94. {uipath-2.1.119 → uipath-2.1.122}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  95. {uipath-2.1.119 → uipath-2.1.122}/docs/stylesheets/extra.css +0 -0
  96. {uipath-2.1.119 → uipath-2.1.122}/justfile +0 -0
  97. {uipath-2.1.119 → uipath-2.1.122}/mkdocs.yml +0 -0
  98. {uipath-2.1.119 → uipath-2.1.122}/py.typed +0 -0
  99. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/.env.example +0 -0
  100. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/README.md +0 -0
  101. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/input.json +0 -0
  102. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/main.py +0 -0
  103. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/pyproject.toml +0 -0
  104. {uipath-2.1.119 → uipath-2.1.122}/samples/asset-modifier-agent/uv.lock +0 -0
  105. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/README.md +0 -0
  106. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/eval-sets/default.json +0 -0
  107. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/eval-sets/legacy.json +0 -0
  108. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/contains.json +0 -0
  109. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/correct-operator-evaluator.json +0 -0
  110. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/custom/correct_operator.py +0 -0
  111. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/custom/types/correct-operator-evaluator-types.json +0 -0
  112. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/exact-match.json +0 -0
  113. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/json-similarity.json +0 -0
  114. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/legacy-equality.json +0 -0
  115. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/legacy-json-similarity.json +0 -0
  116. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/legacy-llm-as-a-judge.json +0 -0
  117. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/legacy-trajectory.json +0 -0
  118. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/llm-judge-semantic-similarity.json +0 -0
  119. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/llm-judge-strict-json-similarity.json +0 -0
  120. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/evals/evaluators/trajectory.json +0 -0
  121. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/main.py +0 -0
  122. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/pyproject.toml +0 -0
  123. {uipath-2.1.119 → uipath-2.1.122}/samples/calculator/uipath.json +0 -0
  124. {uipath-2.1.119 → uipath-2.1.122}/samples/event-trigger/.python-version +0 -0
  125. {uipath-2.1.119 → uipath-2.1.122}/samples/event-trigger/README.md +0 -0
  126. {uipath-2.1.119 → uipath-2.1.122}/samples/event-trigger/main.py +0 -0
  127. {uipath-2.1.119 → uipath-2.1.122}/samples/event-trigger/pyproject.toml +0 -0
  128. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/.env.example +0 -0
  129. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/README.md +0 -0
  130. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/input.json +0 -0
  131. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  132. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  133. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/pyproject.toml +0 -0
  134. {uipath-2.1.119 → uipath-2.1.122}/samples/google-ADK-agent/uv.lock +0 -0
  135. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/README.md +0 -0
  136. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/TOOL_EVALUATORS.md +0 -0
  137. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/eval-sets/default.json +0 -0
  138. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/evaluators/tool-call-args.json +0 -0
  139. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/evaluators/tool-call-count.json +0 -0
  140. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/evaluators/tool-call-order.json +0 -0
  141. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/evaluators/tool-call-output.json +0 -0
  142. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/evals/evaluators/trajectory.json +0 -0
  143. {uipath-2.1.119 → uipath-2.1.122}/samples/weather_tools/main.py +0 -0
  144. {uipath-2.1.119 → uipath-2.1.122}/scripts/debug_test.py +0 -0
  145. {uipath-2.1.119 → uipath-2.1.122}/scripts/lint_httpx_client.py +0 -0
  146. {uipath-2.1.119 → uipath-2.1.122}/scripts/update_agents_md.py +0 -0
  147. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/__init__.py +0 -0
  148. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/README.md +0 -0
  149. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/__init__.py +0 -0
  150. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  151. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  152. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_models.py +0 -0
  153. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  154. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  155. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  156. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/_utils.py +0 -0
  157. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/auth_config_25_10.json +0 -0
  158. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/auth_config_cloud.json +0 -0
  159. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/index.html +0 -0
  160. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/localhost.crt +0 -0
  161. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_auth/localhost.key +0 -0
  162. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_debug/_bridge.py +0 -0
  163. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_debug/_runtime.py +0 -0
  164. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  165. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  166. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  167. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  168. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  169. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  170. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  171. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  172. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  173. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  174. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  175. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  176. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/__init__.py +0 -0
  177. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  178. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_evaluate.py +0 -0
  179. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  180. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_helpers.py +0 -0
  181. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  182. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  183. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  184. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  185. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  186. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  187. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  188. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  189. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  190. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  191. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  192. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  193. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  194. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_push/models.py +0 -0
  195. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  196. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  197. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  198. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  199. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_logging.py +0 -0
  200. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  201. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
  202. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  203. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  204. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/.rels.template +0 -0
  205. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  206. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/custom_evaluator.py.template +0 -0
  207. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/main.py.template +0 -0
  208. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  209. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_common.py +0 -0
  210. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_console.py +0 -0
  211. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_debug.py +0 -0
  212. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  213. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_folders.py +0 -0
  214. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_input_args.py +0 -0
  215. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  216. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_processes.py +0 -0
  217. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_project_files.py +0 -0
  218. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_resources.py +0 -0
  219. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  220. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_tracing.py +0 -0
  221. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  222. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_add.py +0 -0
  223. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_auth.py +0 -0
  224. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_debug.py +0 -0
  225. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_deploy.py +0 -0
  226. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_dev.py +0 -0
  227. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_invoke.py +0 -0
  228. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_new.py +0 -0
  229. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_publish.py +0 -0
  230. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_register.py +0 -0
  231. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/cli_run.py +0 -0
  232. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/middlewares.py +0 -0
  233. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/models/__init__.py +0 -0
  234. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/models/runtime_schema.py +0 -0
  235. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_cli/spinner.py +0 -0
  236. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_events/__init__.py +0 -0
  237. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_events/_event_bus.py +0 -0
  238. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_execution_context.py +0 -0
  239. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_folder_context.py +0 -0
  240. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_resources/AGENTS.md +0 -0
  241. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_resources/CLAUDE.md +0 -0
  242. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
  243. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
  244. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/__init__.py +0 -0
  245. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/_base_service.py +0 -0
  246. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/actions_service.py +0 -0
  247. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/api_client.py +0 -0
  248. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/assets_service.py +0 -0
  249. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/attachments_service.py +0 -0
  250. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/buckets_service.py +0 -0
  251. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/connections_service.py +0 -0
  252. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/context_grounding_service.py +0 -0
  253. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/documents_service.py +0 -0
  254. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/entities_service.py +0 -0
  255. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/external_application_service.py +0 -0
  256. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/folder_service.py +0 -0
  257. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/guardrails_service.py +0 -0
  258. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/jobs_service.py +0 -0
  259. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/llm_gateway_service.py +0 -0
  260. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/processes_service.py +0 -0
  261. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_services/queues_service.py +0 -0
  262. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_uipath.py +0 -0
  263. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/__init__.py +0 -0
  264. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_auth.py +0 -0
  265. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_endpoint.py +0 -0
  266. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_infer_bindings.py +0 -0
  267. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_logs.py +0 -0
  268. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_read_overwrites.py +0 -0
  269. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_request_override.py +0 -0
  270. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_request_spec.py +0 -0
  271. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_ssl_context.py +0 -0
  272. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_url.py +0 -0
  273. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/_utils/_user_agent.py +0 -0
  274. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/_utils.py +0 -0
  275. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/__init__.py +0 -0
  276. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/async_stream.py +0 -0
  277. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/citation.py +0 -0
  278. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/content.py +0 -0
  279. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/conversation.py +0 -0
  280. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/event.py +0 -0
  281. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/exchange.py +0 -0
  282. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/message.py +0 -0
  283. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/meta.py +0 -0
  284. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/conversation/tool.py +0 -0
  285. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/models/agent.py +0 -0
  286. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/models/evals.py +0 -0
  287. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/react/__init__.py +0 -0
  288. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/react/prompts.py +0 -0
  289. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/agent/react/tools.py +0 -0
  290. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/_helpers/__init__.py +0 -0
  291. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/_helpers/evaluators_helpers.py +0 -0
  292. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/_helpers/helpers.py +0 -0
  293. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/__init__.py +0 -0
  294. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  295. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/contains_evaluator.py +0 -0
  296. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  297. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  298. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_base_evaluator.py +0 -0
  299. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_deterministic_evaluator_base.py +0 -0
  300. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_exact_match_evaluator.py +0 -0
  301. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_json_similarity_evaluator.py +0 -0
  302. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_llm_as_judge_evaluator.py +0 -0
  303. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/legacy_trajectory_evaluator.py +0 -0
  304. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  305. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/llm_judge_output_evaluator.py +0 -0
  306. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/llm_judge_trajectory_evaluator.py +0 -0
  307. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/output_evaluator.py +0 -0
  308. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/tool_call_args_evaluator.py +0 -0
  309. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/tool_call_count_evaluator.py +0 -0
  310. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/tool_call_order_evaluator.py +0 -0
  311. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators/tool_call_output_evaluator.py +0 -0
  312. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ContainsEvaluator.json +0 -0
  313. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ExactMatchEvaluator.json +0 -0
  314. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/JsonSimilarityEvaluator.json +0 -0
  315. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/LLMJudgeOutputEvaluator.json +0 -0
  316. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/LLMJudgeSimulationTrajectoryEvaluator.json +0 -0
  317. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/LLMJudgeStrictJSONSimilarityOutputEvaluator.json +0 -0
  318. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/LLMJudgeTrajectoryEvaluator.json +0 -0
  319. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ToolCallArgsEvaluator.json +0 -0
  320. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ToolCallCountEvaluator.json +0 -0
  321. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ToolCallOrderEvaluator.json +0 -0
  322. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/ToolCallOutputEvaluator.json +0 -0
  323. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/evaluators_types/generate_types.py +0 -0
  324. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/mocks/__init__.py +0 -0
  325. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/mocks/mockable.py +0 -0
  326. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/models/__init__.py +0 -0
  327. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/models/llm_judge_types.py +0 -0
  328. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/eval/models/models.py +0 -0
  329. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/__init__.py +0 -0
  330. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/action_schema.py +0 -0
  331. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/actions.py +0 -0
  332. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/assets.py +0 -0
  333. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/attachment.py +0 -0
  334. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/auth.py +0 -0
  335. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/buckets.py +0 -0
  336. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/connections.py +0 -0
  337. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/context_grounding.py +0 -0
  338. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/context_grounding_index.py +0 -0
  339. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/documents.py +0 -0
  340. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/entities.py +0 -0
  341. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/errors.py +0 -0
  342. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/exceptions.py +0 -0
  343. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/guardrails.py +0 -0
  344. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/interrupt_models.py +0 -0
  345. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/job.py +0 -0
  346. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/llm_gateway.py +0 -0
  347. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/processes.py +0 -0
  348. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/models/queues.py +0 -0
  349. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/py.typed +0 -0
  350. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/telemetry/__init__.py +0 -0
  351. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/telemetry/_constants.py +0 -0
  352. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/telemetry/_track.py +0 -0
  353. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/tracing/__init__.py +0 -0
  354. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/utils/__init__.py +0 -0
  355. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/utils/_endpoints_manager.py +0 -0
  356. {uipath-2.1.119 → uipath-2.1.122}/src/uipath/utils/dynamic_schema.py +0 -0
  357. {uipath-2.1.119 → uipath-2.1.122}/testcases/apicalls-testcase/main.py +0 -0
  358. {uipath-2.1.119 → uipath-2.1.122}/testcases/apicalls-testcase/pyproject.toml +0 -0
  359. {uipath-2.1.119 → uipath-2.1.122}/testcases/apicalls-testcase/run.sh +0 -0
  360. {uipath-2.1.119 → uipath-2.1.122}/testcases/apicalls-testcase/src/assert.py +0 -0
  361. {uipath-2.1.119 → uipath-2.1.122}/testcases/basic-testcase/main.py +0 -0
  362. {uipath-2.1.119 → uipath-2.1.122}/testcases/basic-testcase/pyproject.toml +0 -0
  363. {uipath-2.1.119 → uipath-2.1.122}/testcases/basic-testcase/run.sh +0 -0
  364. {uipath-2.1.119 → uipath-2.1.122}/testcases/basic-testcase/src/assert.py +0 -0
  365. {uipath-2.1.119 → uipath-2.1.122}/testcases/common/validate_output.sh +0 -0
  366. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/agent.mermaid +0 -0
  367. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/langgraph.json +0 -0
  368. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/pyproject.toml +0 -0
  369. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/run.sh +0 -0
  370. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/src/assert.py +0 -0
  371. {uipath-2.1.119 → uipath-2.1.122}/testcases/langchain-cross/src/main.py +0 -0
  372. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/agent.mermaid +0 -0
  373. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/llama_index.json +0 -0
  374. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/pyproject.toml +0 -0
  375. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/run.sh +0 -0
  376. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/src/assert.py +0 -0
  377. {uipath-2.1.119 → uipath-2.1.122}/testcases/llamaindex-cross/src/main.py +0 -0
  378. {uipath-2.1.119 → uipath-2.1.122}/testcases/tools-evals/pyproject.toml +0 -0
  379. {uipath-2.1.119 → uipath-2.1.122}/testcases/tools-evals/run.sh +0 -0
  380. {uipath-2.1.119 → uipath-2.1.122}/testcases/tools-evals/src/assert.py +0 -0
  381. {uipath-2.1.119 → uipath-2.1.122}/tests/__init__.py +0 -0
  382. {uipath-2.1.119 → uipath-2.1.122}/tests/agent/models/test_agent.py +0 -0
  383. {uipath-2.1.119 → uipath-2.1.122}/tests/agent/models/test_evals.py +0 -0
  384. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/conftest.py +0 -0
  385. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/eval/evals/eval-sets/default.json +0 -0
  386. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/eval/evals/evaluators/equality.json +0 -0
  387. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
  388. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/eval/mocks/test_mocks.py +0 -0
  389. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  390. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/mocks/bindings_script.py +0 -0
  391. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/mocks/pyproject.toml +0 -0
  392. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/mocks/simple_script.py +0 -0
  393. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/mocks/uipath-mock.json +0 -0
  394. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  395. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/models/test_runtime_schema.py +0 -0
  396. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_auth.py +0 -0
  397. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_hitl.py +0 -0
  398. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_init.py +0 -0
  399. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_init_agents_md.py +0 -0
  400. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_input_args.py +0 -0
  401. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_invoke.py +0 -0
  402. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_new.py +0 -0
  403. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_oidc_utils.py +0 -0
  404. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_pack.py +0 -0
  405. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  406. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_portal_service_refresh_token.py +0 -0
  407. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_publish.py +0 -0
  408. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_pull.py +0 -0
  409. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_push.py +0 -0
  410. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_run.py +0 -0
  411. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/test_utils.py +0 -0
  412. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/utils/common.py +0 -0
  413. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/utils/project_details.py +0 -0
  414. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/utils/test_dynamic_schema.py +0 -0
  415. {uipath-2.1.119 → uipath-2.1.122}/tests/cli/utils/uipath_json.py +0 -0
  416. {uipath-2.1.119 → uipath-2.1.122}/tests/conftest.py +0 -0
  417. {uipath-2.1.119 → uipath-2.1.122}/tests/evaluators/__init__.py +0 -0
  418. {uipath-2.1.119 → uipath-2.1.122}/tests/evaluators/test_evaluator_aggregation.py +0 -0
  419. {uipath-2.1.119 → uipath-2.1.122}/tests/evaluators/test_evaluator_helpers.py +0 -0
  420. {uipath-2.1.119 → uipath-2.1.122}/tests/evaluators/test_evaluator_methods.py +0 -0
  421. {uipath-2.1.119 → uipath-2.1.122}/tests/evaluators/test_evaluator_schemas.py +0 -0
  422. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/conftest.py +0 -0
  423. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_actions_service.py +0 -0
  424. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_api_client.py +0 -0
  425. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_assets_service.py +0 -0
  426. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_attachments_service.py +0 -0
  427. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_base_service.py +0 -0
  428. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_buckets_service.py +0 -0
  429. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_connections_service.py +0 -0
  430. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_context_grounding_service.py +0 -0
  431. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_documents_service.py +0 -0
  432. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_entities_service.py +0 -0
  433. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_external_application_service.py +0 -0
  434. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_folder_service.py +0 -0
  435. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_guardrails_service.py +0 -0
  436. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_jobs_service.py +0 -0
  437. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_llm_integration.py +0 -0
  438. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  439. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_llm_service.py +0 -0
  440. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_processes_service.py +0 -0
  441. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_queues_service.py +0 -0
  442. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  443. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/tests_data/documents_service/classification_response.json +0 -0
  444. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  445. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/tests_data/documents_service/ixp_extraction_response.json +0 -0
  446. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/tests_data/documents_service/modern_extraction_response.json +0 -0
  447. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  448. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/test_bindings_inference.py +0 -0
  449. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/test_config.py +0 -0
  450. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/test_overwrites.py +0 -0
  451. {uipath-2.1.119 → uipath-2.1.122}/tests/sdk/test_uipath_caching.py +0 -0
  452. {uipath-2.1.119 → uipath-2.1.122}/tests/tracing/test_tracing_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.119
3
+ Version: 2.1.122
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uipath"
3
- version = "2.1.119"
3
+ version = "2.1.122"
4
4
  description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
@@ -210,7 +210,7 @@ class StudioWebProgressReporter:
210
210
  }
211
211
 
212
212
  @gracefully_handle_errors
213
- async def create_eval_set_run(
213
+ async def create_eval_set_run_sw(
214
214
  self,
215
215
  eval_set_id: str,
216
216
  agent_snapshot: StudioWebAgentSnapshot,
@@ -352,13 +352,15 @@ class StudioWebProgressReporter:
352
352
  is_coded = self._is_coded_evaluator(payload.evaluators)
353
353
  self.is_coded_eval[payload.execution_id] = is_coded
354
354
 
355
- eval_set_run_id = await self.create_eval_set_run(
356
- eval_set_id=payload.eval_set_id,
357
- agent_snapshot=self._extract_agent_snapshot(payload.entrypoint),
358
- no_of_evals=payload.no_of_evals,
359
- evaluators=payload.evaluators,
360
- is_coded=is_coded,
361
- )
355
+ eval_set_run_id = payload.eval_set_run_id
356
+ if not eval_set_run_id:
357
+ eval_set_run_id = await self.create_eval_set_run_sw(
358
+ eval_set_id=payload.eval_set_id,
359
+ agent_snapshot=self._extract_agent_snapshot(payload.entrypoint),
360
+ no_of_evals=payload.no_of_evals,
361
+ evaluators=payload.evaluators,
362
+ is_coded=is_coded,
363
+ )
362
364
  self.eval_set_run_ids[payload.execution_id] = eval_set_run_id
363
365
  current_span = trace.get_current_span()
364
366
  if current_span.is_recording():
@@ -151,6 +151,7 @@ class UiPathEvalContext(UiPathRuntimeContext):
151
151
  workers: Optional[int] = 1
152
152
  eval_set: Optional[str] = None
153
153
  eval_ids: Optional[List[str]] = None
154
+ eval_set_run_id: Optional[str] = None
154
155
  verbose: bool = False
155
156
 
156
157
 
@@ -214,6 +215,7 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
214
215
  EvalSetRunCreatedEvent(
215
216
  execution_id=self.execution_id,
216
217
  entrypoint=self.context.entrypoint or "",
218
+ eval_set_run_id=self.context.eval_set_run_id,
217
219
  eval_set_id=evaluation_set.id,
218
220
  no_of_evals=len(evaluation_set.evaluations),
219
221
  evaluators=evaluators,
@@ -52,7 +52,7 @@ Based on the above information, provide a realistic input to the LLM agent. Your
52
52
  OUTPUT: ONLY the simulated agent input in the exact format of the INPUT_SCHEMA in valid JSON. Do not include any explanations, quotation marks, or markdown."""
53
53
 
54
54
 
55
- @traced(name="__mocker__")
55
+ @traced(name="__mocker__", recording=False)
56
56
  async def generate_llm_input(
57
57
  evaluation_item: AnyEvaluationItem,
58
58
  input_schema: Dict[str, Any],
@@ -82,7 +82,7 @@ class LLMMocker(Mocker):
82
82
  self.evaluation_item = evaluation_item
83
83
  assert isinstance(self.evaluation_item.mocking_strategy, LLMMockingStrategy)
84
84
 
85
- @traced(name="__mocker__")
85
+ @traced(name="__mocker__", recording=False)
86
86
  async def response(
87
87
  self, func: Callable[[T], R], params: dict[str, Any], *args: T, **kwargs
88
88
  ) -> R:
@@ -45,8 +45,6 @@ PYTHON_BINARY_EXTENSIONS = {".pickle", ".pkl"}
45
45
 
46
46
  SPECIAL_EXTENSIONS = {""} # Extensionless binary files
47
47
 
48
- UIPATH_PROJECT_ID = "UIPATH_PROJECT_ID"
49
-
50
48
  # Pre-compute the union for optimal performance
51
49
  BINARY_EXTENSIONS = (
52
50
  IMAGE_EXTENSIONS
@@ -12,9 +12,9 @@ from uipath._cli._evals._runtime import (
12
12
  UiPathEvalContext,
13
13
  )
14
14
  from uipath._cli._runtime._runtime_factory import generate_runtime_factory
15
- from uipath._cli._utils._constants import UIPATH_PROJECT_ID
16
15
  from uipath._cli._utils._folders import get_personal_workspace_key_async
17
16
  from uipath._cli.middlewares import Middlewares
17
+ from uipath._config import UiPathConfig
18
18
  from uipath._events._event_bus import EventBus
19
19
  from uipath.eval._helpers import auto_discover_entrypoint
20
20
  from uipath.tracing import LlmOpsHttpExporter
@@ -39,12 +39,13 @@ def setup_reporting_prereq(no_report: bool) -> bool:
39
39
  if no_report:
40
40
  return False
41
41
 
42
- if not os.getenv(UIPATH_PROJECT_ID, False):
42
+ if not UiPathConfig.is_studio_project:
43
43
  console.warning(
44
44
  "UIPATH_PROJECT_ID environment variable not set. Results will no be reported to Studio Web."
45
45
  )
46
46
  return False
47
- if not os.getenv("UIPATH_FOLDER_KEY"):
47
+
48
+ if not UiPathConfig.folder_key:
48
49
  folder_key = asyncio.run(get_personal_workspace_key_async())
49
50
  if folder_key:
50
51
  os.environ["UIPATH_FOLDER_KEY"] = folder_key
@@ -55,6 +56,12 @@ def setup_reporting_prereq(no_report: bool) -> bool:
55
56
  @click.argument("entrypoint", required=False)
56
57
  @click.argument("eval_set", required=False)
57
58
  @click.option("--eval-ids", cls=LiteralOption, default="[]")
59
+ @click.option(
60
+ "--eval-set-run-id",
61
+ required=False,
62
+ type=str,
63
+ help="Custom evaluation set run ID (if not provided, a UUID will be generated)",
64
+ )
58
65
  @click.option(
59
66
  "--no-report",
60
67
  is_flag=True,
@@ -78,6 +85,7 @@ def eval(
78
85
  entrypoint: Optional[str],
79
86
  eval_set: Optional[str],
80
87
  eval_ids: List[str],
88
+ eval_set_run_id: Optional[str],
81
89
  no_report: bool,
82
90
  workers: int,
83
91
  output_file: Optional[str],
@@ -88,6 +96,7 @@ def eval(
88
96
  entrypoint: Path to the agent script to evaluate (optional, will auto-discover if not specified)
89
97
  eval_set: Path to the evaluation set JSON file (optional, will auto-discover if not specified)
90
98
  eval_ids: Optional list of evaluation IDs
99
+ eval_set_run_id: Custom evaluation set run ID (optional, will generate UUID if not specified)
91
100
  workers: Number of parallel workers for running evaluations
92
101
  no_report: Do not report the evaluation results
93
102
  """
@@ -95,6 +104,7 @@ def eval(
95
104
  "entrypoint": entrypoint or auto_discover_entrypoint(),
96
105
  "eval_set": eval_set,
97
106
  "eval_ids": eval_ids,
107
+ "eval_set_run_id": eval_set_run_id,
98
108
  "workers": workers,
99
109
  "no_report": no_report,
100
110
  "output_file": output_file,
@@ -130,6 +140,7 @@ def eval(
130
140
 
131
141
  eval_context.no_report = no_report
132
142
  eval_context.workers = workers
143
+ eval_context.eval_set_run_id = eval_set_run_id
133
144
 
134
145
  # Load eval set to resolve the path
135
146
  eval_set_path = eval_set or EvalHelpers.auto_discover_eval_set()
@@ -10,6 +10,7 @@ from typing import Any, Dict, Optional
10
10
 
11
11
  import click
12
12
 
13
+ from .._config import UiPathConfig
13
14
  from .._utils.constants import ENV_TELEMETRY_ENABLED
14
15
  from ..telemetry import track
15
16
  from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
@@ -43,9 +44,7 @@ def create_telemetry_config_file(target_directory: str) -> None:
43
44
  return
44
45
 
45
46
  os.makedirs(uipath_dir, exist_ok=True)
46
- telemetry_data = {
47
- _PROJECT_KEY: os.getenv("UIPATH_PROJECT_ID", None) or str(uuid.uuid4())
48
- }
47
+ telemetry_data = {_PROJECT_KEY: UiPathConfig.project_id or str(uuid.uuid4())}
49
48
 
50
49
  with open(telemetry_file, "w") as f:
51
50
  json.dump(telemetry_data, f, indent=4)
@@ -8,8 +8,8 @@ from string import Template
8
8
  import click
9
9
  from pydantic import TypeAdapter
10
10
 
11
- from uipath._cli._utils._constants import UIPATH_PROJECT_ID
12
11
  from uipath._cli.models.runtime_schema import Bindings, RuntimeSchema
12
+ from uipath._config import UiPathConfig
13
13
 
14
14
  from ..telemetry import track
15
15
  from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
@@ -35,8 +35,8 @@ def get_project_id() -> str:
35
35
  Project ID string (either from telemetry file or newly generated).
36
36
  """
37
37
  # first check if this is a studio project
38
- if os.getenv(UIPATH_PROJECT_ID, None):
39
- return os.getenv(UIPATH_PROJECT_ID)
38
+ if project_id := UiPathConfig.project_id:
39
+ return project_id
40
40
 
41
41
  telemetry_file = os.path.join(".uipath", _TELEMETRY_CONFIG_FILE)
42
42
 
@@ -11,14 +11,13 @@ It handles:
11
11
 
12
12
  # type: ignore
13
13
  import asyncio
14
- import os
15
14
  from pathlib import Path
16
15
 
17
16
  import click
18
17
 
18
+ from .._config import UiPathConfig
19
19
  from ..telemetry import track
20
20
  from ._utils._console import ConsoleLogger
21
- from ._utils._constants import UIPATH_PROJECT_ID
22
21
  from ._utils._project_files import ProjectPullError, pull_project
23
22
 
24
23
  console = ConsoleLogger()
@@ -49,10 +48,9 @@ def pull(root: Path) -> None:
49
48
  $ uipath pull
50
49
  $ uipath pull /path/to/project
51
50
  """
52
- project_id = os.getenv(UIPATH_PROJECT_ID)
51
+ project_id = UiPathConfig.project_id
53
52
  if not project_id:
54
53
  console.error("UIPATH_PROJECT_ID environment variable not found.")
55
- return
56
54
 
57
55
  download_configuration = {
58
56
  "source_code": root,
@@ -1,6 +1,5 @@
1
1
  # type: ignore
2
2
  import asyncio
3
- import os
4
3
  from typing import Any, AsyncIterator, Optional
5
4
  from urllib.parse import urlparse
6
5
 
@@ -8,12 +7,10 @@ import click
8
7
 
9
8
  from uipath.models.exceptions import EnrichedException
10
9
 
10
+ from .._config import UiPathConfig
11
11
  from ..telemetry import track
12
12
  from ._push.sw_file_handler import FileOperationUpdate, SwFileHandler
13
13
  from ._utils._console import ConsoleLogger
14
- from ._utils._constants import (
15
- UIPATH_PROJECT_ID,
16
- )
17
14
  from ._utils._project_files import (
18
15
  ensure_config_file,
19
16
  get_project_config,
@@ -99,7 +96,7 @@ def push(root: str, nolock: bool) -> None:
99
96
  config = get_project_config(root)
100
97
  validate_config(config)
101
98
 
102
- project_id = os.getenv(UIPATH_PROJECT_ID)
99
+ project_id = UiPathConfig.project_id
103
100
  if not project_id:
104
101
  console.error("UIPATH_PROJECT_ID environment variable not found.")
105
102
 
@@ -0,0 +1,44 @@
1
+ import os
2
+ from pathlib import Path
3
+ from typing import Optional
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ class Config(BaseModel):
9
+ base_url: str
10
+ secret: str
11
+
12
+
13
+ class ConfigurationManager:
14
+ _instance = None
15
+
16
+ def __new__(cls):
17
+ if cls._instance is None:
18
+ cls._instance = super().__new__(cls)
19
+ return cls._instance
20
+
21
+ @property
22
+ def bindings_file_path(self) -> Path:
23
+ from uipath._utils.constants import UIPATH_BINDINGS_FILE
24
+
25
+ return Path(UIPATH_BINDINGS_FILE)
26
+
27
+ @property
28
+ def project_id(self) -> Optional[str]:
29
+ from uipath._utils.constants import ENV_UIPATH_PROJECT_ID
30
+
31
+ return os.getenv(ENV_UIPATH_PROJECT_ID, None)
32
+
33
+ @property
34
+ def folder_key(self) -> Optional[str]:
35
+ from uipath._utils.constants import ENV_FOLDER_KEY
36
+
37
+ return os.getenv(ENV_FOLDER_KEY, None)
38
+
39
+ @property
40
+ def is_studio_project(self) -> bool:
41
+ return self.project_id is not None
42
+
43
+
44
+ UiPathConfig = ConfigurationManager()
@@ -20,6 +20,7 @@ class EvalSetRunCreatedEvent(BaseModel):
20
20
  execution_id: str
21
21
  entrypoint: str
22
22
  eval_set_id: str
23
+ eval_set_run_id: Optional[str] = None
23
24
  no_of_evals: int
24
25
  # skip validation to avoid abstract class instantiation
25
26
  evaluators: SkipValidation[List[AnyEvaluator]]
@@ -100,6 +100,7 @@ uv run uipath run --resume
100
100
  entrypoint: Path to the agent script to evaluate (optional, will auto-discover if not specified)
101
101
  eval_set: Path to the evaluation set JSON file (optional, will auto-discover if not specified)
102
102
  eval_ids: Optional list of evaluation IDs
103
+ eval_set_run_id: Custom evaluation set run ID (optional, will generate UUID if not specified)
103
104
  workers: Number of parallel workers for running evaluations
104
105
  no_report: Do not report the evaluation results
105
106
 
@@ -115,6 +116,7 @@ uv run uipath run --resume
115
116
 
116
117
  | Option | Type | Default | Description |
117
118
  |--------|------|---------|-------------|
119
+ | `--eval-set-run-id` | value | `Sentinel.UNSET` | Custom evaluation set run ID (if not provided, a UUID will be generated) |
118
120
  | `--no-report` | flag | false | Do not report the evaluation results |
119
121
  | `--workers` | value | `1` | Number of parallel workers for running evaluations (default: 1) |
120
122
  | `--output-file` | value | `Sentinel.UNSET` | File path where the output will be written |
@@ -12,6 +12,7 @@ ENV_ROBOT_KEY = "UIPATH_ROBOT_KEY"
12
12
  ENV_TENANT_ID = "UIPATH_TENANT_ID"
13
13
  ENV_ORGANIZATION_ID = "UIPATH_ORGANIZATION_ID"
14
14
  ENV_TELEMETRY_ENABLED = "UIPATH_TELEMETRY_ENABLED"
15
+ ENV_UIPATH_PROJECT_ID = "UIPATH_PROJECT_ID"
15
16
 
16
17
  # Headers
17
18
  HEADER_FOLDER_KEY = "x-uipath-folderkey"
@@ -47,6 +48,7 @@ COMMUNITY_agents_SUFFIX = "-community-agents"
47
48
 
48
49
  # File names
49
50
  UIPATH_CONFIG_FILE = "uipath.json"
51
+ UIPATH_BINDINGS_FILE = "bindings.json"
50
52
 
51
53
  # Evaluators
52
54
  CUSTOM_EVALUATOR_PREFIX = "file://"
@@ -32,20 +32,25 @@ def _get_llm_messages(attributes: Dict[str, Any], prefix: str) -> List[Dict[str,
32
32
  """Extracts and reconstructs LLM messages from flattened attributes."""
33
33
  messages: dict[int, dict[str, Any]] = {}
34
34
  message_prefix = f"{prefix}."
35
+ prefix_len = len(message_prefix)
35
36
 
36
37
  for key, value in attributes.items():
37
38
  if key.startswith(message_prefix):
38
- parts = key[len(message_prefix) :].split(".")
39
+ # Avoid repeated string slicing and splits
40
+ parts = key[prefix_len:].split(".")
39
41
  if len(parts) >= 2 and parts[0].isdigit():
40
42
  index = int(parts[0])
41
43
  if index not in messages:
42
44
  messages[index] = {}
43
45
  current: Any = messages[index]
44
46
 
45
- for i, part in enumerate(parts[1:-1]):
47
+ # Traverse parts except the last one
48
+ parts_len = len(parts)
49
+ for i in range(1, parts_len - 1):
50
+ part = parts[i]
46
51
  key_part: str | int = part
47
52
  if part.isdigit() and (
48
- i + 2 < len(parts) and parts[i + 2].isdigit()
53
+ i + 2 < parts_len and parts[i + 2].isdigit()
49
54
  ):
50
55
  key_part = int(part)
51
56
 
@@ -60,6 +65,10 @@ def _get_llm_messages(attributes: Dict[str, Any], prefix: str) -> List[Dict[str,
60
65
 
61
66
  current[parts[-1]] = value
62
67
 
68
+ # Convert dict to list, ordered by index, avoid sorted() if we can use range
69
+ if not messages:
70
+ return []
71
+
63
72
  # Convert dict to list, ordered by index
64
73
  return [messages[i] for i in sorted(messages.keys())]
65
74
 
@@ -112,18 +121,30 @@ class LlmOpsHttpExporter(SpanExporter):
112
121
  f"Exporting {len(spans)} spans to {self.base_url}/llmopstenant_/api/Traces/spans"
113
122
  )
114
123
 
124
+ # Use optimized path: keep attributes as dict for processing
125
+ # Only serialize at the very end
115
126
  span_list = [
116
127
  _SpanUtils.otel_span_to_uipath_span(
117
- span, custom_trace_id=self.trace_id
118
- ).to_dict()
128
+ span, custom_trace_id=self.trace_id, serialize_attributes=False
129
+ ).to_dict(serialize_attributes=False)
119
130
  for span in spans
120
131
  ]
132
+
121
133
  url = self._build_url(span_list)
122
134
 
135
+ # Process spans in-place if needed - work directly with dict
123
136
  if self._extra_process_spans:
124
- span_list = [self._process_span_attributes(span) for span in span_list]
137
+ for span_data in span_list:
138
+ self._process_span_attributes(span_data)
125
139
 
126
- logger.debug("Payload: %s", json.dumps(span_list))
140
+ # Serialize attributes once at the very end
141
+ for span_data in span_list:
142
+ if isinstance(span_data.get("Attributes"), dict):
143
+ span_data["Attributes"] = json.dumps(span_data["Attributes"])
144
+
145
+ # Only serialize for logging if debug is enabled to avoid allocation
146
+ if logger.isEnabledFor(logging.DEBUG):
147
+ logger.debug("Payload: %s", json.dumps(span_list))
127
148
 
128
149
  return self._send_with_retries(url, span_list)
129
150
 
@@ -133,7 +154,8 @@ class LlmOpsHttpExporter(SpanExporter):
133
154
 
134
155
  def _map_llm_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
135
156
  """Maps attributes for LLM calls, handling flattened keys."""
136
- result = attributes.copy() # Keep original attributes including basic mappings
157
+ # Modify attributes in place to avoid copy
158
+ result = attributes
137
159
 
138
160
  # Token Usage
139
161
  token_keys = {
@@ -202,7 +224,8 @@ class LlmOpsHttpExporter(SpanExporter):
202
224
 
203
225
  def _map_tool_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
204
226
  """Maps attributes for tool calls."""
205
- result = attributes.copy() # Keep original attributes
227
+ # Modify attributes in place to avoid copy
228
+ result = attributes
206
229
 
207
230
  result["type"] = "toolCall"
208
231
  result["callId"] = attributes.get("call_id") or attributes.get("id")
@@ -225,22 +248,32 @@ class LlmOpsHttpExporter(SpanExporter):
225
248
  return self.Status.ERROR
226
249
  return self.Status.SUCCESS
227
250
 
228
- def _process_span_attributes(self, span_data: Dict[str, Any]) -> Dict[str, Any]:
229
- """Extracts, transforms, and maps attributes for a span."""
251
+ def _process_span_attributes(self, span_data: Dict[str, Any]) -> None:
252
+ """Extracts, transforms, and maps attributes for a span in-place.
253
+
254
+ Args:
255
+ span_data: Span dict with Attributes as dict or JSON string
256
+
257
+ Note:
258
+ Modifies span_data in-place. When optimized path is used (dict),
259
+ modifies dict directly. When legacy path is used (str), parse → modify → serialize.
260
+ """
230
261
  if "Attributes" not in span_data:
231
- return span_data
262
+ return
232
263
 
233
264
  attributes_val = span_data["Attributes"]
234
265
  if isinstance(attributes_val, str):
266
+ # Legacy path: parse JSON string
235
267
  try:
236
268
  attributes: Dict[str, Any] = json.loads(attributes_val)
237
269
  except json.JSONDecodeError as e:
238
270
  logger.warning(f"Failed to parse attributes JSON: {e}")
239
- return span_data
271
+ return
240
272
  elif isinstance(attributes_val, dict):
273
+ # Optimized path: work directly with dict
241
274
  attributes = attributes_val
242
275
  else:
243
- return span_data
276
+ return
244
277
 
245
278
  # Determine SpanType
246
279
  if "openinference.span.kind" in attributes:
@@ -258,23 +291,23 @@ class LlmOpsHttpExporter(SpanExporter):
258
291
  attributes[new_key] = attributes[old_key]
259
292
 
260
293
  # Apply detailed mapping based on SpanType
294
+ # Modify attributes dict in place to avoid allocations
261
295
  span_type = span_data.get("SpanType")
262
296
  if span_type == "completion":
263
- processed_attributes = self._map_llm_call_attributes(attributes)
297
+ self._map_llm_call_attributes(attributes)
264
298
  elif span_type == "toolCall":
265
- processed_attributes = self._map_tool_call_attributes(attributes)
266
- else:
267
- processed_attributes = attributes.copy()
299
+ self._map_tool_call_attributes(attributes)
268
300
 
269
- span_data["Attributes"] = json.dumps(processed_attributes)
301
+ # If attributes were a string (legacy path), serialize back
302
+ # If dict (optimized path), leave as dict - caller will serialize once at the end
303
+ if isinstance(attributes_val, str):
304
+ span_data["Attributes"] = json.dumps(attributes)
270
305
 
271
306
  # Determine status based on error information
272
307
  error = attributes.get("error") or attributes.get("exception.message")
273
308
  status = self._determine_status(error)
274
309
  span_data["Status"] = status
275
310
 
276
- return span_data
277
-
278
311
  def _build_url(self, span_list: list[Dict[str, Any]]) -> str:
279
312
  """Construct the URL for the API request."""
280
313
  trace_id = str(span_list[0]["TraceId"])
@@ -323,7 +356,10 @@ class JsonLinesFileExporter(SpanExporter):
323
356
  def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
324
357
  try:
325
358
  uipath_spans = [
326
- _SpanUtils.otel_span_to_uipath_span(span).to_dict() for span in spans
359
+ _SpanUtils.otel_span_to_uipath_span(
360
+ span, serialize_attributes=True
361
+ ).to_dict(serialize_attributes=True)
362
+ for span in spans
327
363
  ]
328
364
 
329
365
  with open(self.file_path, "a") as f:
@@ -7,7 +7,7 @@ from functools import wraps
7
7
  from typing import Any, Callable, List, Optional, Tuple
8
8
 
9
9
  from opentelemetry import context, trace
10
- from opentelemetry.trace import set_span_in_context
10
+ from opentelemetry.trace import NonRecordingSpan, set_span_in_context
11
11
 
12
12
  from ._utils import _SpanUtils
13
13
 
@@ -175,6 +175,7 @@ def _opentelemetry_traced(
175
175
  span_type: Optional[str] = None,
176
176
  input_processor: Optional[Callable[..., Any]] = None,
177
177
  output_processor: Optional[Callable[..., Any]] = None,
178
+ recording: bool = True,
178
179
  ):
179
180
  """Default tracer implementation using OpenTelemetry."""
180
181
 
@@ -184,7 +185,10 @@ def _opentelemetry_traced(
184
185
  def get_parent_context():
185
186
  """Return a context object for starting the new span."""
186
187
  current_span = _active_traced_span.get()
187
- if current_span is not None and current_span.get_span_context().is_valid:
188
+ if current_span is not None and (
189
+ current_span.get_span_context().is_valid
190
+ or isinstance(current_span, NonRecordingSpan)
191
+ ):
188
192
  return set_span_in_context(current_span)
189
193
 
190
194
  if TracingManager._current_span_provider is not None:
@@ -197,12 +201,22 @@ def _opentelemetry_traced(
197
201
 
198
202
  return context.get_current()
199
203
 
204
+ def get_span():
205
+ if recording and not isinstance(
206
+ _active_traced_span.get(), NonRecordingSpan
207
+ ):
208
+ ctx = get_parent_context()
209
+ span_cm = get_tracer().start_as_current_span(trace_name, context=ctx)
210
+ span = span_cm.__enter__()
211
+ else:
212
+ span_cm = None
213
+ span = NonRecordingSpan(trace.INVALID_SPAN_CONTEXT)
214
+ return span_cm, span
215
+
200
216
  # --------- Sync wrapper ---------
201
217
  @wraps(func)
202
218
  def sync_wrapper(*args, **kwargs):
203
- ctx = get_parent_context()
204
- span_cm = get_tracer().start_as_current_span(trace_name, context=ctx)
205
- span = span_cm.__enter__()
219
+ span_cm, span = get_span()
206
220
  token = _active_traced_span.set(span)
207
221
  try:
208
222
  span.set_attribute("span_type", span_type or "function_call_sync")
@@ -241,14 +255,13 @@ def _opentelemetry_traced(
241
255
  raise
242
256
  finally:
243
257
  _active_traced_span.reset(token)
244
- span_cm.__exit__(None, None, None)
258
+ if span_cm:
259
+ span_cm.__exit__(None, None, None)
245
260
 
246
261
  # --------- Async wrapper ---------
247
262
  @wraps(func)
248
263
  async def async_wrapper(*args, **kwargs):
249
- ctx = get_parent_context()
250
- span_cm = get_tracer().start_as_current_span(trace_name, context=ctx)
251
- span = span_cm.__enter__()
264
+ span_cm, span = get_span()
252
265
  token = _active_traced_span.set(span)
253
266
  try:
254
267
  span.set_attribute("span_type", span_type or "function_call_async")
@@ -287,14 +300,13 @@ def _opentelemetry_traced(
287
300
  raise
288
301
  finally:
289
302
  _active_traced_span.reset(token)
290
- span_cm.__exit__(None, None, None)
303
+ if span_cm:
304
+ span_cm.__exit__(None, None, None)
291
305
 
292
306
  # --------- Generator wrapper ---------
293
307
  @wraps(func)
294
308
  def generator_wrapper(*args, **kwargs):
295
- ctx = get_parent_context()
296
- span_cm = get_tracer().start_as_current_span(trace_name, context=ctx)
297
- span = span_cm.__enter__()
309
+ span_cm, span = get_span()
298
310
  token = _active_traced_span.set(span)
299
311
  try:
300
312
  span.set_attribute(
@@ -330,14 +342,13 @@ def _opentelemetry_traced(
330
342
  raise
331
343
  finally:
332
344
  _active_traced_span.reset(token)
333
- span_cm.__exit__(None, None, None)
345
+ if span_cm:
346
+ span_cm.__exit__(None, None, None)
334
347
 
335
348
  # --------- Async generator wrapper ---------
336
349
  @wraps(func)
337
350
  async def async_generator_wrapper(*args, **kwargs):
338
- ctx = get_parent_context()
339
- span_cm = get_tracer().start_as_current_span(trace_name, context=ctx)
340
- span = span_cm.__enter__()
351
+ span_cm, span = get_span()
341
352
  token = _active_traced_span.set(span)
342
353
  try:
343
354
  span.set_attribute(
@@ -373,7 +384,8 @@ def _opentelemetry_traced(
373
384
  raise
374
385
  finally:
375
386
  _active_traced_span.reset(token)
376
- span_cm.__exit__(None, None, None)
387
+ if span_cm:
388
+ span_cm.__exit__(None, None, None)
377
389
 
378
390
  if inspect.iscoroutinefunction(func):
379
391
  return async_wrapper
@@ -425,6 +437,7 @@ def traced(
425
437
  output_processor: Optional[Callable[..., Any]] = None,
426
438
  hide_input: bool = False,
427
439
  hide_output: bool = False,
440
+ recording: bool = True,
428
441
  ):
429
442
  """Decorator that will trace function invocations.
430
443
 
@@ -437,6 +450,7 @@ def traced(
437
450
  Should accept the function output and return a processed value
438
451
  hide_input: If True, don't log any input data
439
452
  hide_output: If True, don't log any output data
453
+ recording: If False, current span and all child spans are not captured regardless of their recording status.
440
454
  """
441
455
  # Apply default processors selectively based on hide flags
442
456
  if hide_input:
@@ -451,6 +465,7 @@ def traced(
451
465
  "span_type": span_type,
452
466
  "input_processor": input_processor,
453
467
  "output_processor": output_processor,
468
+ "recording": recording,
454
469
  }
455
470
 
456
471
  # Check for custom implementation first