uipath 2.1.75__tar.gz → 2.1.76__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.
Files changed (337) hide show
  1. {uipath-2.1.75 → uipath-2.1.76}/CONTRIBUTING.md +15 -1
  2. {uipath-2.1.75 → uipath-2.1.76}/PKG-INFO +1 -1
  3. {uipath-2.1.75 → uipath-2.1.76}/pyproject.toml +1 -1
  4. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_console_progress_reporter.py +36 -36
  5. uipath-2.1.76/src/uipath/_cli/_evals/_models/_exceptions.py +5 -0
  6. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_runtime.py +51 -25
  7. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_eval.py +20 -5
  8. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_events/_events.py +16 -2
  9. uipath-2.1.76/src/uipath/_services/connections_service.py +430 -0
  10. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_uipath.py +10 -1
  11. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_infer_bindings.py +4 -2
  12. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/telemetry/_track.py +2 -2
  13. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_connections_service.py +343 -3
  14. {uipath-2.1.75 → uipath-2.1.76}/uv.lock +1 -1
  15. uipath-2.1.75/src/uipath/_services/connections_service.py +0 -215
  16. {uipath-2.1.75 → uipath-2.1.76}/.cursorrules +0 -0
  17. {uipath-2.1.75 → uipath-2.1.76}/.editorconfig +0 -0
  18. {uipath-2.1.75 → uipath-2.1.76}/.gitattributes +0 -0
  19. {uipath-2.1.75 → uipath-2.1.76}/.github/labeler.yml +0 -0
  20. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/auto-label.yml +0 -0
  21. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/cd.yml +0 -0
  22. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/ci.yml +0 -0
  23. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/commitlint.yml +0 -0
  24. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/integration_tests.yml +0 -0
  25. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/lint.yml +0 -0
  26. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/publish-dev.yml +0 -0
  27. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/publish-docs.yml +0 -0
  28. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/slack.yml +0 -0
  29. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/test-uipath-langchain.yml +0 -0
  30. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  31. {uipath-2.1.75 → uipath-2.1.76}/.github/workflows/test.yml +0 -0
  32. {uipath-2.1.75 → uipath-2.1.76}/.gitignore +0 -0
  33. {uipath-2.1.75 → uipath-2.1.76}/.pre-commit-config.yaml +0 -0
  34. {uipath-2.1.75 → uipath-2.1.76}/.python-version +0 -0
  35. {uipath-2.1.75 → uipath-2.1.76}/.vscode/extensions.json +0 -0
  36. {uipath-2.1.75 → uipath-2.1.76}/.vscode/launch.json +0 -0
  37. {uipath-2.1.75 → uipath-2.1.76}/.vscode/settings.json +0 -0
  38. {uipath-2.1.75 → uipath-2.1.76}/LICENSE +0 -0
  39. {uipath-2.1.75 → uipath-2.1.76}/README.md +0 -0
  40. {uipath-2.1.75 → uipath-2.1.76}/docs/CONTRIBUTING.md +0 -0
  41. {uipath-2.1.75 → uipath-2.1.76}/docs/FAQ.md +0 -0
  42. {uipath-2.1.75 → uipath-2.1.76}/docs/assets/env-preparation-failed-dark.png +0 -0
  43. {uipath-2.1.75 → uipath-2.1.76}/docs/assets/env-preparation-failed-light.png +0 -0
  44. {uipath-2.1.75 → uipath-2.1.76}/docs/assets/favicon.png +0 -0
  45. {uipath-2.1.75 → uipath-2.1.76}/docs/assets/logo-dark.svg +0 -0
  46. {uipath-2.1.75 → uipath-2.1.76}/docs/assets/logo-light.svg +0 -0
  47. {uipath-2.1.75 → uipath-2.1.76}/docs/cli/index.md +0 -0
  48. {uipath-2.1.75 → uipath-2.1.76}/docs/core/actions.md +0 -0
  49. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  50. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/cloud_env_var_light.gif +0 -0
  51. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  52. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  53. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/copy_path_dark.png +0 -0
  54. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets/copy_path_light.png +0 -0
  55. {uipath-2.1.75 → uipath-2.1.76}/docs/core/assets.md +0 -0
  56. {uipath-2.1.75 → uipath-2.1.76}/docs/core/attachments.md +0 -0
  57. {uipath-2.1.75 → uipath-2.1.76}/docs/core/buckets.md +0 -0
  58. {uipath-2.1.75 → uipath-2.1.76}/docs/core/connections.md +0 -0
  59. {uipath-2.1.75 → uipath-2.1.76}/docs/core/context_grounding.md +0 -0
  60. {uipath-2.1.75 → uipath-2.1.76}/docs/core/documents.md +0 -0
  61. {uipath-2.1.75 → uipath-2.1.76}/docs/core/documents_models.md +0 -0
  62. {uipath-2.1.75 → uipath-2.1.76}/docs/core/environment_variables.md +0 -0
  63. {uipath-2.1.75 → uipath-2.1.76}/docs/core/getting_started.md +0 -0
  64. {uipath-2.1.75 → uipath-2.1.76}/docs/core/jobs.md +0 -0
  65. {uipath-2.1.75 → uipath-2.1.76}/docs/core/llm_gateway.md +0 -0
  66. {uipath-2.1.75 → uipath-2.1.76}/docs/core/processes.md +0 -0
  67. {uipath-2.1.75 → uipath-2.1.76}/docs/core/queues.md +0 -0
  68. {uipath-2.1.75 → uipath-2.1.76}/docs/core/traced.md +0 -0
  69. {uipath-2.1.75 → uipath-2.1.76}/docs/hooks.py +0 -0
  70. {uipath-2.1.75 → uipath-2.1.76}/docs/index.md +0 -0
  71. {uipath-2.1.75 → uipath-2.1.76}/docs/javascripts/extra.js +0 -0
  72. {uipath-2.1.75 → uipath-2.1.76}/docs/overrides/main.html +0 -0
  73. {uipath-2.1.75 → uipath-2.1.76}/docs/overrides/partials/actions.html +0 -0
  74. {uipath-2.1.75 → uipath-2.1.76}/docs/overrides/partials/logo.html +0 -0
  75. {uipath-2.1.75 → uipath-2.1.76}/docs/release_policy.md +0 -0
  76. {uipath-2.1.75 → uipath-2.1.76}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  77. {uipath-2.1.75 → uipath-2.1.76}/docs/stylesheets/extra.css +0 -0
  78. {uipath-2.1.75 → uipath-2.1.76}/justfile +0 -0
  79. {uipath-2.1.75 → uipath-2.1.76}/mkdocs.yml +0 -0
  80. {uipath-2.1.75 → uipath-2.1.76}/py.typed +0 -0
  81. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/README.md +0 -0
  82. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/evals/eval-sets/default.json +0 -0
  83. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/evals/evaluators/equality.json +0 -0
  84. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
  85. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/main.py +0 -0
  86. {uipath-2.1.75 → uipath-2.1.76}/samples/calculator/pyproject.toml +0 -0
  87. {uipath-2.1.75 → uipath-2.1.76}/samples/event-trigger/.python-version +0 -0
  88. {uipath-2.1.75 → uipath-2.1.76}/samples/event-trigger/README.md +0 -0
  89. {uipath-2.1.75 → uipath-2.1.76}/samples/event-trigger/main.py +0 -0
  90. {uipath-2.1.75 → uipath-2.1.76}/samples/event-trigger/pyproject.toml +0 -0
  91. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/.env.example +0 -0
  92. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/README.md +0 -0
  93. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/input.json +0 -0
  94. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  95. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  96. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/pyproject.toml +0 -0
  97. {uipath-2.1.75 → uipath-2.1.76}/samples/google-ADK-agent/uv.lock +0 -0
  98. {uipath-2.1.75 → uipath-2.1.76}/scripts/debug_test.py +0 -0
  99. {uipath-2.1.75 → uipath-2.1.76}/scripts/lint_httpx_client.py +0 -0
  100. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/__init__.py +0 -0
  101. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/README.md +0 -0
  102. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/__init__.py +0 -0
  103. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  104. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  105. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
  106. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_models.py +0 -0
  107. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  108. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  109. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  110. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/_utils.py +0 -0
  111. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/auth_config.json +0 -0
  112. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/index.html +0 -0
  113. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.crt +0 -0
  114. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.key +0 -0
  115. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  116. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  117. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  118. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  119. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  120. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  121. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  122. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  123. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  124. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  125. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  126. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  127. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  128. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  129. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  130. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  131. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  132. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  133. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_trajectory_span.py +0 -0
  134. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  135. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  136. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  137. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  138. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  139. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  140. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  141. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  142. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  143. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  144. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  145. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_logging.py +0 -0
  146. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  147. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  148. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  149. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_templates/.rels.template +0 -0
  150. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  151. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_templates/main.py.template +0 -0
  152. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  153. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_common.py +0 -0
  154. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_console.py +0 -0
  155. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_constants.py +0 -0
  156. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_debug.py +0 -0
  157. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  158. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_folders.py +0 -0
  159. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_input_args.py +0 -0
  160. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  161. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_processes.py +0 -0
  162. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_project_files.py +0 -0
  163. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  164. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_tracing.py +0 -0
  165. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  166. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_auth.py +0 -0
  167. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_deploy.py +0 -0
  168. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_dev.py +0 -0
  169. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_init.py +0 -0
  170. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_invoke.py +0 -0
  171. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_new.py +0 -0
  172. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_pack.py +0 -0
  173. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_publish.py +0 -0
  174. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_pull.py +0 -0
  175. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_push.py +0 -0
  176. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/cli_run.py +0 -0
  177. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/middlewares.py +0 -0
  178. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_cli/spinner.py +0 -0
  179. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_config.py +0 -0
  180. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_events/__init__.py +0 -0
  181. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_events/_event_bus.py +0 -0
  182. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_execution_context.py +0 -0
  183. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_folder_context.py +0 -0
  184. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_resources/AGENTS.md +0 -0
  185. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/__init__.py +0 -0
  186. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/_base_service.py +0 -0
  187. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/actions_service.py +0 -0
  188. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/api_client.py +0 -0
  189. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/assets_service.py +0 -0
  190. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/attachments_service.py +0 -0
  191. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/buckets_service.py +0 -0
  192. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/context_grounding_service.py +0 -0
  193. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/documents_service.py +0 -0
  194. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/entities_service.py +0 -0
  195. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/folder_service.py +0 -0
  196. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/jobs_service.py +0 -0
  197. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/llm_gateway_service.py +0 -0
  198. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/processes_service.py +0 -0
  199. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_services/queues_service.py +0 -0
  200. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/__init__.py +0 -0
  201. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_endpoint.py +0 -0
  202. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_logs.py +0 -0
  203. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_read_overwrites.py +0 -0
  204. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_request_override.py +0 -0
  205. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_request_spec.py +0 -0
  206. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_ssl_context.py +0 -0
  207. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_url.py +0 -0
  208. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/_user_agent.py +0 -0
  209. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/_utils/constants.py +0 -0
  210. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/_utils.py +0 -0
  211. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/__init__.py +0 -0
  212. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/async_stream.py +0 -0
  213. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/citation.py +0 -0
  214. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/content.py +0 -0
  215. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/conversation.py +0 -0
  216. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/event.py +0 -0
  217. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/exchange.py +0 -0
  218. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/message.py +0 -0
  219. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/meta.py +0 -0
  220. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/conversation/tool.py +0 -0
  221. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/agent/models/agent.py +0 -0
  222. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/_helpers/__init__.py +0 -0
  223. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/_helpers/helpers.py +0 -0
  224. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/__init__.py +0 -0
  225. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  226. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  227. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  228. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  229. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  230. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  231. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/models/__init__.py +0 -0
  232. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/eval/models/models.py +0 -0
  233. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/__init__.py +0 -0
  234. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/action_schema.py +0 -0
  235. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/actions.py +0 -0
  236. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/assets.py +0 -0
  237. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/attachment.py +0 -0
  238. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/buckets.py +0 -0
  239. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/connections.py +0 -0
  240. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/context_grounding.py +0 -0
  241. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/context_grounding_index.py +0 -0
  242. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/documents.py +0 -0
  243. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/entities.py +0 -0
  244. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/errors.py +0 -0
  245. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/exceptions.py +0 -0
  246. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/interrupt_models.py +0 -0
  247. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/job.py +0 -0
  248. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/llm_gateway.py +0 -0
  249. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/processes.py +0 -0
  250. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/models/queues.py +0 -0
  251. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/py.typed +0 -0
  252. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/telemetry/__init__.py +0 -0
  253. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/telemetry/_constants.py +0 -0
  254. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/tracing/__init__.py +0 -0
  255. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/tracing/_otel_exporters.py +0 -0
  256. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/tracing/_traced.py +0 -0
  257. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/tracing/_utils.py +0 -0
  258. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/utils/__init__.py +0 -0
  259. {uipath-2.1.75 → uipath-2.1.76}/src/uipath/utils/_endpoints_manager.py +0 -0
  260. {uipath-2.1.75 → uipath-2.1.76}/testcases/apicalls-testcase/main.py +0 -0
  261. {uipath-2.1.75 → uipath-2.1.76}/testcases/apicalls-testcase/pyproject.toml +0 -0
  262. {uipath-2.1.75 → uipath-2.1.76}/testcases/apicalls-testcase/run.sh +0 -0
  263. {uipath-2.1.75 → uipath-2.1.76}/testcases/apicalls-testcase/src/assert.py +0 -0
  264. {uipath-2.1.75 → uipath-2.1.76}/testcases/basic-testcase/main.py +0 -0
  265. {uipath-2.1.75 → uipath-2.1.76}/testcases/basic-testcase/pyproject.toml +0 -0
  266. {uipath-2.1.75 → uipath-2.1.76}/testcases/basic-testcase/run.sh +0 -0
  267. {uipath-2.1.75 → uipath-2.1.76}/testcases/basic-testcase/src/assert.py +0 -0
  268. {uipath-2.1.75 → uipath-2.1.76}/testcases/common/validate_output.sh +0 -0
  269. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/agent.mermaid +0 -0
  270. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/langgraph.json +0 -0
  271. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/pyproject.toml +0 -0
  272. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/run.sh +0 -0
  273. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/src/assert.py +0 -0
  274. {uipath-2.1.75 → uipath-2.1.76}/testcases/langchain-cross/src/main.py +0 -0
  275. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/agent.mermaid +0 -0
  276. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/llama_index.json +0 -0
  277. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/pyproject.toml +0 -0
  278. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/run.sh +0 -0
  279. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/src/assert.py +0 -0
  280. {uipath-2.1.75 → uipath-2.1.76}/testcases/llamaindex-cross/src/main.py +0 -0
  281. {uipath-2.1.75 → uipath-2.1.76}/tests/__init__.py +0 -0
  282. {uipath-2.1.75 → uipath-2.1.76}/tests/agent/models/test_agent.py +0 -0
  283. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/conftest.py +0 -0
  284. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/eval/mocks/test_mocks.py +0 -0
  285. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  286. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/mocks/bindings_script.py +0 -0
  287. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/mocks/pyproject.toml +0 -0
  288. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/mocks/simple_script.py +0 -0
  289. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/mocks/uipath-mock.json +0 -0
  290. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  291. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_auth.py +0 -0
  292. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_hitl.py +0 -0
  293. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_init.py +0 -0
  294. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_init_agents_md.py +0 -0
  295. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_input_args.py +0 -0
  296. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_invoke.py +0 -0
  297. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_new.py +0 -0
  298. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_pack.py +0 -0
  299. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  300. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_portal_service_refresh_token.py +0 -0
  301. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_publish.py +0 -0
  302. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_pull.py +0 -0
  303. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_push.py +0 -0
  304. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_run.py +0 -0
  305. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/test_utils.py +0 -0
  306. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/utils/common.py +0 -0
  307. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/utils/project_details.py +0 -0
  308. {uipath-2.1.75 → uipath-2.1.76}/tests/cli/utils/uipath_json.py +0 -0
  309. {uipath-2.1.75 → uipath-2.1.76}/tests/conftest.py +0 -0
  310. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/conftest.py +0 -0
  311. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_actions_service.py +0 -0
  312. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_api_client.py +0 -0
  313. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_assets_service.py +0 -0
  314. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_attachments_service.py +0 -0
  315. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_base_service.py +0 -0
  316. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_buckets_service.py +0 -0
  317. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_context_grounding_service.py +0 -0
  318. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_documents_service.py +0 -0
  319. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_entities_service.py +0 -0
  320. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_folder_service.py +0 -0
  321. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_jobs_service.py +0 -0
  322. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_llm_integration.py +0 -0
  323. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  324. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_llm_service.py +0 -0
  325. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_processes_service.py +0 -0
  326. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_queues_service.py +0 -0
  327. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  328. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  329. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  330. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  331. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/test_bindings_inference.py +0 -0
  332. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/test_config.py +0 -0
  333. {uipath-2.1.75 → uipath-2.1.76}/tests/sdk/test_overwrites.py +0 -0
  334. {uipath-2.1.75 → uipath-2.1.76}/tests/tracing/test_otel_exporters.py +0 -0
  335. {uipath-2.1.75 → uipath-2.1.76}/tests/tracing/test_span_utils.py +0 -0
  336. {uipath-2.1.75 → uipath-2.1.76}/tests/tracing/test_traced.py +0 -0
  337. {uipath-2.1.75 → uipath-2.1.76}/tests/tracing/test_tracing_manager.py +0 -0
@@ -21,7 +21,21 @@
21
21
  uv venv
22
22
  ```
23
23
 
24
- 4. **Install dependencies**:
24
+ 4. **Activate the virtual environment**:
25
+ - Linux/Mac
26
+ ```sh
27
+ source .venv/bin/activate
28
+ ```
29
+ - Windows Powershell
30
+ ```sh
31
+ .venv\Scripts\Activate.ps1
32
+ ```
33
+ - Windows Bash
34
+ ```sh
35
+ source .venv/Scripts/activate
36
+ ```
37
+
38
+ 5. **Install dependencies**:
25
39
  ```sh
26
40
  uv sync --all-extras --no-cache
27
41
  ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.75
3
+ Version: 2.1.76
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.75"
3
+ version = "2.1.76"
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"
@@ -75,15 +75,10 @@ class ConsoleProgressReporter:
75
75
  result.append(" - No evaluators", style="dim")
76
76
  self.console.print(result)
77
77
 
78
- def _extract_error_message(self, eval_item_payload) -> str:
79
- """Extract clean error message from evaluation item."""
80
- if hasattr(eval_item_payload, "_error_message"):
81
- error_message = getattr(eval_item_payload, "_error_message", None)
82
- if error_message:
83
- return str(error_message) or "Execution failed"
84
- return "Execution failed"
85
-
86
- def _display_failed_evaluation(self, eval_name: str, error_msg: str) -> None:
78
+ def _extract_error_message(self, payload: EvalRunUpdatedEvent) -> str:
79
+ return str(payload.exception_details.exception) or "Execution failed" # type: ignore
80
+
81
+ def _display_failed_evaluation(self, eval_name: str) -> None:
87
82
  """Display results for a failed evaluation."""
88
83
  from rich.text import Text
89
84
 
@@ -92,11 +87,6 @@ class ConsoleProgressReporter:
92
87
  result.append(eval_name, style="bold white")
93
88
  self.console.print(result)
94
89
 
95
- error_text = Text()
96
- error_text.append(" ", style="")
97
- error_text.append(error_msg, style="red")
98
- self.console.print(error_text)
99
-
100
90
  def start_display(self):
101
91
  """Start the display."""
102
92
  if not self.display_started:
@@ -122,37 +112,47 @@ class ConsoleProgressReporter:
122
112
  except Exception as e:
123
113
  logger.error(f"Failed to handle create eval run event: {e}")
124
114
 
115
+ def _display_logs_panel(self, eval_name: str, logs, error_msg: str = "") -> None:
116
+ """Display execution logs panel with optional exception at the end."""
117
+ self.console.print(
118
+ Rule(
119
+ f"[dim italic]Execution Logs: {eval_name}[/dim italic]",
120
+ style="dim",
121
+ align="center",
122
+ )
123
+ )
124
+
125
+ if logs:
126
+ for record in logs:
127
+ self.console.print(f" [dim]{record.getMessage()}[/dim]")
128
+ elif not error_msg:
129
+ self.console.print(" [dim italic]No execution logs[/dim italic]")
130
+
131
+ if error_msg:
132
+ self.console.print(f" [red]{error_msg}[/red]")
133
+
134
+ self.console.print(Rule(style="dim"))
135
+
125
136
  async def handle_update_eval_run(self, payload: EvalRunUpdatedEvent) -> None:
126
137
  """Handle evaluation run updates."""
127
138
  try:
128
139
  if payload.success:
129
- # Store results for final display
130
140
  self.eval_results_by_name[payload.eval_item.name] = payload.eval_results
131
141
  self._display_successful_evaluation(
132
142
  payload.eval_item.name, payload.eval_results
133
143
  )
144
+ self._display_logs_panel(payload.eval_item.name, payload.logs)
134
145
  else:
135
- error_msg = self._extract_error_message(payload.eval_item)
136
- self._display_failed_evaluation(payload.eval_item.name, error_msg)
137
-
138
- logs = payload.logs
139
-
140
- self.console.print(
141
- Rule(
142
- f"[dim italic]Execution Logs: {payload.eval_item.name}[/dim italic]",
143
- style="dim",
144
- align="center",
145
- )
146
- )
147
-
148
- if len(logs) > 0:
149
- for record in logs:
150
- log_line = f" [dim]{record.getMessage()}[/dim]"
151
- self.console.print(log_line)
152
- else:
153
- self.console.print(" [dim italic]No execution logs[/dim italic]")
154
-
155
- self.console.print(Rule(style="dim"))
146
+ error_msg = self._extract_error_message(payload)
147
+ self._display_failed_evaluation(payload.eval_item.name)
148
+
149
+ if payload.exception_details.runtime_exception: # type: ignore
150
+ self._display_logs_panel(
151
+ payload.eval_item.name, payload.logs, error_msg
152
+ )
153
+ else:
154
+ self.console.print(f" [red]{error_msg}[/red]")
155
+ self.console.print()
156
156
  except Exception as e:
157
157
  logger.error(f"Console reporter error: {e}")
158
158
 
@@ -0,0 +1,5 @@
1
+ class EvaluationRuntimeException(Exception):
2
+ def __init__(self, spans, logs, root_exception):
3
+ self.spans = spans
4
+ self.logs = logs
5
+ self.root_exception = root_exception
@@ -11,6 +11,7 @@ from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
11
11
 
12
12
  from ..._events._event_bus import EventBus
13
13
  from ..._events._events import (
14
+ EvalItemExceptionDetails,
14
15
  EvalRunCreatedEvent,
15
16
  EvalRunUpdatedEvent,
16
17
  EvalSetRunCreatedEvent,
@@ -31,6 +32,7 @@ from .._runtime._logging import ExecutionLogHandler
31
32
  from .._utils._eval_set import EvalHelpers
32
33
  from ._evaluator_factory import EvaluatorFactory
33
34
  from ._models._evaluation_set import EvaluationItem, EvaluationSet
35
+ from ._models._exceptions import EvaluationRuntimeException
34
36
  from ._models._output import (
35
37
  EvaluationResultDto,
36
38
  EvaluationRunResult,
@@ -232,8 +234,7 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
232
234
  wait_for_completion=False,
233
235
  )
234
236
  except Exception as e:
235
- error_msg = str(e)
236
- eval_item._error_message = error_msg # type: ignore[attr-defined]
237
+ exception_details = EvalItemExceptionDetails(exception=e)
237
238
 
238
239
  for evaluator in evaluators:
239
240
  evaluator_counts[evaluator.id] += 1
@@ -242,18 +243,28 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
242
243
  0.0 - evaluator_averages[evaluator.id]
243
244
  ) / count
244
245
 
246
+ eval_run_updated_event = EvalRunUpdatedEvent(
247
+ execution_id=self.execution_id,
248
+ eval_item=eval_item,
249
+ eval_results=[],
250
+ success=False,
251
+ agent_output={},
252
+ agent_execution_time=0.0,
253
+ exception_details=exception_details,
254
+ spans=[],
255
+ logs=[],
256
+ )
257
+ if isinstance(e, EvaluationRuntimeException):
258
+ eval_run_updated_event.spans = e.spans
259
+ eval_run_updated_event.logs = e.logs
260
+ eval_run_updated_event.exception_details.exception = ( # type: ignore
261
+ e.root_exception
262
+ )
263
+ eval_run_updated_event.exception_details.runtime_exception = True # type: ignore
264
+
245
265
  await event_bus.publish(
246
266
  EvaluationEvents.UPDATE_EVAL_RUN,
247
- EvalRunUpdatedEvent(
248
- execution_id=self.execution_id,
249
- eval_item=eval_item,
250
- eval_results=[],
251
- success=False,
252
- agent_output={},
253
- agent_execution_time=0.0,
254
- spans=[],
255
- logs=[],
256
- ),
267
+ eval_run_updated_event,
257
268
  wait_for_completion=False,
258
269
  )
259
270
 
@@ -274,6 +285,17 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
274
285
  )
275
286
  return self.context.result
276
287
 
288
+ def _get_and_clear_execution_data(
289
+ self, execution_id: str
290
+ ) -> tuple[List[ReadableSpan], list[logging.LogRecord]]:
291
+ spans = self.span_exporter.get_spans(execution_id)
292
+ self.span_exporter.clear(execution_id)
293
+
294
+ logs = self.logs_exporter.get_logs(execution_id)
295
+ self.logs_exporter.clear(execution_id)
296
+
297
+ return spans, logs
298
+
277
299
  async def execute_runtime(
278
300
  self, eval_item: EvaluationItem
279
301
  ) -> UiPathEvalRunExecutionOutput:
@@ -284,6 +306,9 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
284
306
  is_eval_run=True,
285
307
  log_handler=self._setup_execution_logging(eval_item_id),
286
308
  )
309
+ if runtime_context.execution_id is None:
310
+ raise ValueError("execution_id must be set for eval runs")
311
+
287
312
  attributes = {
288
313
  "evalId": eval_item.id,
289
314
  "span_type": "eval",
@@ -292,21 +317,22 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
292
317
  attributes["execution.id"] = runtime_context.execution_id
293
318
 
294
319
  start_time = time()
295
-
296
- result = await self.factory.execute_in_root_span(
297
- runtime_context, root_span=eval_item.name, attributes=attributes
298
- )
320
+ try:
321
+ result = await self.factory.execute_in_root_span(
322
+ runtime_context, root_span=eval_item.name, attributes=attributes
323
+ )
324
+ except Exception as e:
325
+ spans, logs = self._get_and_clear_execution_data(
326
+ runtime_context.execution_id
327
+ )
328
+ raise EvaluationRuntimeException(
329
+ spans=spans,
330
+ logs=logs,
331
+ root_exception=e,
332
+ ) from e
299
333
 
300
334
  end_time = time()
301
-
302
- if runtime_context.execution_id is None:
303
- raise ValueError("execution_id must be set for eval runs")
304
-
305
- spans = self.span_exporter.get_spans(runtime_context.execution_id)
306
- self.span_exporter.clear(runtime_context.execution_id)
307
-
308
- logs = self.logs_exporter.get_logs(runtime_context.execution_id)
309
- self.logs_exporter.clear(runtime_context.execution_id)
335
+ spans, logs = self._get_and_clear_execution_data(runtime_context.execution_id)
310
336
 
311
337
  if result is None:
312
338
  raise ValueError("Execution result cannot be None for eval runs")
@@ -17,6 +17,7 @@ from uipath._cli._runtime._contracts import (
17
17
  UiPathRuntimeFactory,
18
18
  )
19
19
  from uipath._cli._runtime._runtime import UiPathScriptRuntime
20
+ from uipath._cli._utils._constants import UIPATH_PROJECT_ID
20
21
  from uipath._cli._utils._folders import get_personal_workspace_key_async
21
22
  from uipath._cli.middlewares import Middlewares
22
23
  from uipath._events._event_bus import EventBus
@@ -39,6 +40,22 @@ class LiteralOption(click.Option):
39
40
  raise click.BadParameter(value) from e
40
41
 
41
42
 
43
+ def setup_reporting_prereq(no_report: bool) -> bool:
44
+ if no_report:
45
+ return False
46
+
47
+ if not os.getenv(UIPATH_PROJECT_ID, False):
48
+ console.warning(
49
+ "UIPATH_PROJECT_ID environment variable not set. Results will no be reported to Studio Web."
50
+ )
51
+ return False
52
+ if not os.getenv("UIPATH_FOLDER_KEY"):
53
+ os.environ["UIPATH_FOLDER_KEY"] = asyncio.run(
54
+ get_personal_workspace_key_async()
55
+ )
56
+ return True
57
+
58
+
42
59
  @click.command()
43
60
  @click.argument("entrypoint", required=False)
44
61
  @click.argument("eval_set", required=False)
@@ -79,10 +96,7 @@ def eval(
79
96
  workers: Number of parallel workers for running evaluations
80
97
  no_report: Do not report the evaluation results
81
98
  """
82
- if not no_report and not os.getenv("UIPATH_FOLDER_KEY"):
83
- os.environ["UIPATH_FOLDER_KEY"] = asyncio.run(
84
- get_personal_workspace_key_async()
85
- )
99
+ should_register_progress_reporter = setup_reporting_prereq(no_report)
86
100
 
87
101
  result = Middlewares.next(
88
102
  "eval",
@@ -92,6 +106,7 @@ def eval(
92
106
  no_report=no_report,
93
107
  workers=workers,
94
108
  execution_output_file=output_file,
109
+ register_progress_reporter=should_register_progress_reporter,
95
110
  )
96
111
 
97
112
  if result.error_message:
@@ -100,7 +115,7 @@ def eval(
100
115
  if result.should_continue:
101
116
  event_bus = EventBus()
102
117
 
103
- if not no_report:
118
+ if should_register_progress_reporter:
104
119
  progress_reporter = StudioWebProgressReporter(LlmOpsHttpExporter())
105
120
  asyncio.run(progress_reporter.subscribe_to_eval_runtime_events(event_bus))
106
121
 
@@ -1,9 +1,9 @@
1
1
  import enum
2
2
  import logging
3
- from typing import Any, List, Union
3
+ from typing import Any, List, Optional, Union
4
4
 
5
5
  from opentelemetry.sdk.trace import ReadableSpan
6
- from pydantic import BaseModel, ConfigDict
6
+ from pydantic import BaseModel, ConfigDict, model_validator
7
7
 
8
8
  from uipath._cli._evals._models._evaluation_set import EvaluationItem
9
9
  from uipath.eval.models import EvalItemResult
@@ -29,6 +29,13 @@ class EvalRunCreatedEvent(BaseModel):
29
29
  eval_item: EvaluationItem
30
30
 
31
31
 
32
+ class EvalItemExceptionDetails(BaseModel):
33
+ model_config = ConfigDict(arbitrary_types_allowed=True)
34
+
35
+ runtime_exception: bool = False
36
+ exception: Exception
37
+
38
+
32
39
  class EvalRunUpdatedEvent(BaseModel):
33
40
  model_config = ConfigDict(arbitrary_types_allowed=True)
34
41
 
@@ -40,6 +47,13 @@ class EvalRunUpdatedEvent(BaseModel):
40
47
  agent_execution_time: float
41
48
  spans: List[ReadableSpan]
42
49
  logs: List[logging.LogRecord]
50
+ exception_details: Optional[EvalItemExceptionDetails] = None
51
+
52
+ @model_validator(mode="after")
53
+ def validate_exception_details(self):
54
+ if not self.success and self.exception_details is None:
55
+ raise ValueError("exception_details must be provided when success is False")
56
+ return self
43
57
 
44
58
 
45
59
  class EvalSetRunUpdatedEvent(BaseModel):