uipath 2.1.74__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.74 → uipath-2.1.76}/CONTRIBUTING.md +15 -1
  2. {uipath-2.1.74 → uipath-2.1.76}/PKG-INFO +1 -1
  3. {uipath-2.1.74 → uipath-2.1.76}/pyproject.toml +1 -1
  4. {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/evals/eval-sets/default.json +2 -1
  5. uipath-2.1.76/samples/calculator/evals/evaluators/llm-as-a-judge.json +13 -0
  6. uipath-2.1.76/src/uipath/_cli/_evals/_console_progress_reporter.py +241 -0
  7. uipath-2.1.76/src/uipath/_cli/_evals/_models/_exceptions.py +5 -0
  8. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_output.py +2 -0
  9. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_progress_reporter.py +11 -5
  10. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_runtime.py +150 -57
  11. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_contracts.py +4 -2
  12. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_logging.py +29 -0
  13. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_eval.py +25 -10
  14. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/middlewares.py +3 -3
  15. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/_events.py +18 -2
  16. uipath-2.1.76/src/uipath/_services/connections_service.py +430 -0
  17. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_uipath.py +10 -1
  18. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_infer_bindings.py +4 -2
  19. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/_track.py +2 -2
  20. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_connections_service.py +343 -3
  21. {uipath-2.1.74 → uipath-2.1.76}/uv.lock +1 -1
  22. uipath-2.1.74/src/uipath/_services/connections_service.py +0 -215
  23. {uipath-2.1.74 → uipath-2.1.76}/.cursorrules +0 -0
  24. {uipath-2.1.74 → uipath-2.1.76}/.editorconfig +0 -0
  25. {uipath-2.1.74 → uipath-2.1.76}/.gitattributes +0 -0
  26. {uipath-2.1.74 → uipath-2.1.76}/.github/labeler.yml +0 -0
  27. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/auto-label.yml +0 -0
  28. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/cd.yml +0 -0
  29. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/ci.yml +0 -0
  30. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/commitlint.yml +0 -0
  31. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/integration_tests.yml +0 -0
  32. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/lint.yml +0 -0
  33. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/publish-dev.yml +0 -0
  34. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/publish-docs.yml +0 -0
  35. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/slack.yml +0 -0
  36. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test-uipath-langchain.yml +0 -0
  37. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  38. {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test.yml +0 -0
  39. {uipath-2.1.74 → uipath-2.1.76}/.gitignore +0 -0
  40. {uipath-2.1.74 → uipath-2.1.76}/.pre-commit-config.yaml +0 -0
  41. {uipath-2.1.74 → uipath-2.1.76}/.python-version +0 -0
  42. {uipath-2.1.74 → uipath-2.1.76}/.vscode/extensions.json +0 -0
  43. {uipath-2.1.74 → uipath-2.1.76}/.vscode/launch.json +0 -0
  44. {uipath-2.1.74 → uipath-2.1.76}/.vscode/settings.json +0 -0
  45. {uipath-2.1.74 → uipath-2.1.76}/LICENSE +0 -0
  46. {uipath-2.1.74 → uipath-2.1.76}/README.md +0 -0
  47. {uipath-2.1.74 → uipath-2.1.76}/docs/CONTRIBUTING.md +0 -0
  48. {uipath-2.1.74 → uipath-2.1.76}/docs/FAQ.md +0 -0
  49. {uipath-2.1.74 → uipath-2.1.76}/docs/assets/env-preparation-failed-dark.png +0 -0
  50. {uipath-2.1.74 → uipath-2.1.76}/docs/assets/env-preparation-failed-light.png +0 -0
  51. {uipath-2.1.74 → uipath-2.1.76}/docs/assets/favicon.png +0 -0
  52. {uipath-2.1.74 → uipath-2.1.76}/docs/assets/logo-dark.svg +0 -0
  53. {uipath-2.1.74 → uipath-2.1.76}/docs/assets/logo-light.svg +0 -0
  54. {uipath-2.1.74 → uipath-2.1.76}/docs/cli/index.md +0 -0
  55. {uipath-2.1.74 → uipath-2.1.76}/docs/core/actions.md +0 -0
  56. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  57. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_light.gif +0 -0
  58. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  59. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  60. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/copy_path_dark.png +0 -0
  61. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/copy_path_light.png +0 -0
  62. {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets.md +0 -0
  63. {uipath-2.1.74 → uipath-2.1.76}/docs/core/attachments.md +0 -0
  64. {uipath-2.1.74 → uipath-2.1.76}/docs/core/buckets.md +0 -0
  65. {uipath-2.1.74 → uipath-2.1.76}/docs/core/connections.md +0 -0
  66. {uipath-2.1.74 → uipath-2.1.76}/docs/core/context_grounding.md +0 -0
  67. {uipath-2.1.74 → uipath-2.1.76}/docs/core/documents.md +0 -0
  68. {uipath-2.1.74 → uipath-2.1.76}/docs/core/documents_models.md +0 -0
  69. {uipath-2.1.74 → uipath-2.1.76}/docs/core/environment_variables.md +0 -0
  70. {uipath-2.1.74 → uipath-2.1.76}/docs/core/getting_started.md +0 -0
  71. {uipath-2.1.74 → uipath-2.1.76}/docs/core/jobs.md +0 -0
  72. {uipath-2.1.74 → uipath-2.1.76}/docs/core/llm_gateway.md +0 -0
  73. {uipath-2.1.74 → uipath-2.1.76}/docs/core/processes.md +0 -0
  74. {uipath-2.1.74 → uipath-2.1.76}/docs/core/queues.md +0 -0
  75. {uipath-2.1.74 → uipath-2.1.76}/docs/core/traced.md +0 -0
  76. {uipath-2.1.74 → uipath-2.1.76}/docs/hooks.py +0 -0
  77. {uipath-2.1.74 → uipath-2.1.76}/docs/index.md +0 -0
  78. {uipath-2.1.74 → uipath-2.1.76}/docs/javascripts/extra.js +0 -0
  79. {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/main.html +0 -0
  80. {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/partials/actions.html +0 -0
  81. {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/partials/logo.html +0 -0
  82. {uipath-2.1.74 → uipath-2.1.76}/docs/release_policy.md +0 -0
  83. {uipath-2.1.74 → uipath-2.1.76}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  84. {uipath-2.1.74 → uipath-2.1.76}/docs/stylesheets/extra.css +0 -0
  85. {uipath-2.1.74 → uipath-2.1.76}/justfile +0 -0
  86. {uipath-2.1.74 → uipath-2.1.76}/mkdocs.yml +0 -0
  87. {uipath-2.1.74 → uipath-2.1.76}/py.typed +0 -0
  88. {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/README.md +0 -0
  89. {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/evals/evaluators/equality.json +0 -0
  90. {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/main.py +0 -0
  91. {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/pyproject.toml +0 -0
  92. {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/.python-version +0 -0
  93. {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/README.md +0 -0
  94. {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/main.py +0 -0
  95. {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/pyproject.toml +0 -0
  96. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/.env.example +0 -0
  97. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/README.md +0 -0
  98. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/input.json +0 -0
  99. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  100. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  101. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/pyproject.toml +0 -0
  102. {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/uv.lock +0 -0
  103. {uipath-2.1.74 → uipath-2.1.76}/scripts/debug_test.py +0 -0
  104. {uipath-2.1.74 → uipath-2.1.76}/scripts/lint_httpx_client.py +0 -0
  105. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/__init__.py +0 -0
  106. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/README.md +0 -0
  107. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/__init__.py +0 -0
  108. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  109. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  110. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
  111. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_models.py +0 -0
  112. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  113. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  114. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  115. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_utils.py +0 -0
  116. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/auth_config.json +0 -0
  117. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/index.html +0 -0
  118. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.crt +0 -0
  119. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.key +0 -0
  120. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  121. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  122. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  123. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  124. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  125. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  126. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  127. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  128. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  129. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  130. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  131. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  132. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  133. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  134. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  135. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  136. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  137. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_trajectory_span.py +0 -0
  138. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  139. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  140. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  141. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  142. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  143. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  144. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  145. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  146. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  147. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  148. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  149. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  150. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/.rels.template +0 -0
  151. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  152. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/main.py.template +0 -0
  153. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  154. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_common.py +0 -0
  155. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_console.py +0 -0
  156. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_constants.py +0 -0
  157. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_debug.py +0 -0
  158. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  159. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_folders.py +0 -0
  160. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_input_args.py +0 -0
  161. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  162. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_processes.py +0 -0
  163. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_project_files.py +0 -0
  164. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  165. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_tracing.py +0 -0
  166. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  167. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_auth.py +0 -0
  168. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_deploy.py +0 -0
  169. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_dev.py +0 -0
  170. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_init.py +0 -0
  171. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_invoke.py +0 -0
  172. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_new.py +0 -0
  173. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_pack.py +0 -0
  174. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_publish.py +0 -0
  175. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_pull.py +0 -0
  176. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_push.py +0 -0
  177. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_run.py +0 -0
  178. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/spinner.py +0 -0
  179. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_config.py +0 -0
  180. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/__init__.py +0 -0
  181. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/_event_bus.py +0 -0
  182. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_execution_context.py +0 -0
  183. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_folder_context.py +0 -0
  184. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_resources/AGENTS.md +0 -0
  185. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/__init__.py +0 -0
  186. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/_base_service.py +0 -0
  187. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/actions_service.py +0 -0
  188. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/api_client.py +0 -0
  189. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/assets_service.py +0 -0
  190. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/attachments_service.py +0 -0
  191. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/buckets_service.py +0 -0
  192. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/context_grounding_service.py +0 -0
  193. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/documents_service.py +0 -0
  194. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/entities_service.py +0 -0
  195. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/folder_service.py +0 -0
  196. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/jobs_service.py +0 -0
  197. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/llm_gateway_service.py +0 -0
  198. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/processes_service.py +0 -0
  199. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/queues_service.py +0 -0
  200. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/__init__.py +0 -0
  201. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_endpoint.py +0 -0
  202. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_logs.py +0 -0
  203. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_read_overwrites.py +0 -0
  204. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_request_override.py +0 -0
  205. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_request_spec.py +0 -0
  206. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_ssl_context.py +0 -0
  207. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_url.py +0 -0
  208. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_user_agent.py +0 -0
  209. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/constants.py +0 -0
  210. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/_utils.py +0 -0
  211. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/__init__.py +0 -0
  212. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/async_stream.py +0 -0
  213. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/citation.py +0 -0
  214. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/content.py +0 -0
  215. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/conversation.py +0 -0
  216. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/event.py +0 -0
  217. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/exchange.py +0 -0
  218. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/message.py +0 -0
  219. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/meta.py +0 -0
  220. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/tool.py +0 -0
  221. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/models/agent.py +0 -0
  222. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/_helpers/__init__.py +0 -0
  223. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/_helpers/helpers.py +0 -0
  224. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/__init__.py +0 -0
  225. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  226. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  227. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  228. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  229. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  230. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  231. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/models/__init__.py +0 -0
  232. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/models/models.py +0 -0
  233. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/__init__.py +0 -0
  234. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/action_schema.py +0 -0
  235. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/actions.py +0 -0
  236. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/assets.py +0 -0
  237. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/attachment.py +0 -0
  238. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/buckets.py +0 -0
  239. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/connections.py +0 -0
  240. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/context_grounding.py +0 -0
  241. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/context_grounding_index.py +0 -0
  242. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/documents.py +0 -0
  243. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/entities.py +0 -0
  244. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/errors.py +0 -0
  245. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/exceptions.py +0 -0
  246. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/interrupt_models.py +0 -0
  247. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/job.py +0 -0
  248. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/llm_gateway.py +0 -0
  249. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/processes.py +0 -0
  250. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/queues.py +0 -0
  251. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/py.typed +0 -0
  252. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/__init__.py +0 -0
  253. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/_constants.py +0 -0
  254. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/__init__.py +0 -0
  255. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_otel_exporters.py +0 -0
  256. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_traced.py +0 -0
  257. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_utils.py +0 -0
  258. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/utils/__init__.py +0 -0
  259. {uipath-2.1.74 → uipath-2.1.76}/src/uipath/utils/_endpoints_manager.py +0 -0
  260. {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/main.py +0 -0
  261. {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/pyproject.toml +0 -0
  262. {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/run.sh +0 -0
  263. {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/src/assert.py +0 -0
  264. {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/main.py +0 -0
  265. {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/pyproject.toml +0 -0
  266. {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/run.sh +0 -0
  267. {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/src/assert.py +0 -0
  268. {uipath-2.1.74 → uipath-2.1.76}/testcases/common/validate_output.sh +0 -0
  269. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/agent.mermaid +0 -0
  270. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/langgraph.json +0 -0
  271. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/pyproject.toml +0 -0
  272. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/run.sh +0 -0
  273. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/src/assert.py +0 -0
  274. {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/src/main.py +0 -0
  275. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/agent.mermaid +0 -0
  276. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/llama_index.json +0 -0
  277. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/pyproject.toml +0 -0
  278. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/run.sh +0 -0
  279. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/src/assert.py +0 -0
  280. {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/src/main.py +0 -0
  281. {uipath-2.1.74 → uipath-2.1.76}/tests/__init__.py +0 -0
  282. {uipath-2.1.74 → uipath-2.1.76}/tests/agent/models/test_agent.py +0 -0
  283. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/conftest.py +0 -0
  284. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/eval/mocks/test_mocks.py +0 -0
  285. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  286. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/bindings_script.py +0 -0
  287. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/pyproject.toml +0 -0
  288. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/simple_script.py +0 -0
  289. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/uipath-mock.json +0 -0
  290. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  291. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_auth.py +0 -0
  292. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_hitl.py +0 -0
  293. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_init.py +0 -0
  294. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_init_agents_md.py +0 -0
  295. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_input_args.py +0 -0
  296. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_invoke.py +0 -0
  297. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_new.py +0 -0
  298. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_pack.py +0 -0
  299. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  300. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_portal_service_refresh_token.py +0 -0
  301. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_publish.py +0 -0
  302. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_pull.py +0 -0
  303. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_push.py +0 -0
  304. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_run.py +0 -0
  305. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_utils.py +0 -0
  306. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/common.py +0 -0
  307. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/project_details.py +0 -0
  308. {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/uipath_json.py +0 -0
  309. {uipath-2.1.74 → uipath-2.1.76}/tests/conftest.py +0 -0
  310. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/conftest.py +0 -0
  311. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_actions_service.py +0 -0
  312. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_api_client.py +0 -0
  313. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_assets_service.py +0 -0
  314. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_attachments_service.py +0 -0
  315. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_base_service.py +0 -0
  316. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_buckets_service.py +0 -0
  317. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_context_grounding_service.py +0 -0
  318. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_documents_service.py +0 -0
  319. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_entities_service.py +0 -0
  320. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_folder_service.py +0 -0
  321. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_jobs_service.py +0 -0
  322. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_integration.py +0 -0
  323. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  324. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_service.py +0 -0
  325. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_processes_service.py +0 -0
  326. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_queues_service.py +0 -0
  327. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  328. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  329. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  330. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  331. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_bindings_inference.py +0 -0
  332. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_config.py +0 -0
  333. {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_overwrites.py +0 -0
  334. {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_otel_exporters.py +0 -0
  335. {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_span_utils.py +0 -0
  336. {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_traced.py +0 -0
  337. {uipath-2.1.74 → 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.74
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.74"
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"
@@ -4,7 +4,8 @@
4
4
  "name": "Basic Calculator Evaluation Set",
5
5
  "batchSize": 10,
6
6
  "evaluatorRefs": [
7
- "equality"
7
+ "equality",
8
+ "llm-as-a-judge"
8
9
  ],
9
10
  "evaluations": [
10
11
  {
@@ -0,0 +1,13 @@
1
+ {
2
+ "fileName": "llm-as-a-judge.json",
3
+ "id": "llm-as-a-judge",
4
+ "name": "LLMAsAJudge Evaluator",
5
+ "description": "An evaluator that judges the agent based on it's run history and expected behavior",
6
+ "category": 3,
7
+ "type": 7,
8
+ "prompt": "As an expert evaluator, determine how well the agent did on a scale of 0-100. Focus on if the simulation was successful and if the agent behaved according to the expected output accounting for alternative valid expressions, and reasonable variations in language while maintaining high standards for accuracy and completeness. Provide your score with a justification, explaining briefly and concisely why you gave that score.\n----\nUserOrSyntheticInputGivenToAgent:\n{{UserOrSyntheticInput}}\n----\nSimulationInstructions:\n{{SimulationInstructions}}\n----\nExpectedAgentBehavior:\n{{ExpectedAgentBehavior}}\n----\nAgentRunHistory:\n{{AgentRunHistory}}\n",
9
+ "targetOutputKey": "*",
10
+ "model":"gpt-4.1-2025-04-14",
11
+ "createdAt": "2025-08-21T15:12:58.695Z",
12
+ "updatedAt": "2025-08-21T15:12:58.695Z"
13
+ }
@@ -0,0 +1,241 @@
1
+ """Console progress reporter for evaluation runs with line-by-line output."""
2
+
3
+ import logging
4
+ from typing import Any, Dict
5
+
6
+ from rich.console import Console
7
+ from rich.rule import Rule
8
+ from rich.table import Table
9
+
10
+ from uipath._events._event_bus import EventBus
11
+ from uipath._events._events import (
12
+ EvalRunCreatedEvent,
13
+ EvalRunUpdatedEvent,
14
+ EvalSetRunCreatedEvent,
15
+ EvalSetRunUpdatedEvent,
16
+ EvaluationEvents,
17
+ )
18
+ from uipath.eval.evaluators import BaseEvaluator
19
+ from uipath.eval.models import ScoreType
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class ConsoleProgressReporter:
25
+ """Handles displaying evaluation progress to the console with line-by-line output."""
26
+
27
+ def __init__(self):
28
+ self.console = Console()
29
+ self.evaluators: Dict[str, BaseEvaluator[Any]] = {}
30
+ self.display_started = False
31
+ self.eval_results_by_name: Dict[str, list[Any]] = {}
32
+
33
+ def _convert_score_to_numeric(self, eval_result) -> float:
34
+ """Convert evaluation result score to numeric value."""
35
+ score_value = eval_result.result.score
36
+ if eval_result.result.score_type == ScoreType.BOOLEAN:
37
+ score_value = 100 if score_value else 0
38
+ return score_value
39
+
40
+ def _get_evaluator_name(self, evaluator_id: str) -> str:
41
+ """Get evaluator name from ID, with fallback."""
42
+ return self.evaluators.get(
43
+ evaluator_id,
44
+ type(
45
+ "obj",
46
+ (object,),
47
+ {"name": f"Evaluator {evaluator_id[:8]}"},
48
+ )(),
49
+ ).name
50
+
51
+ def _display_successful_evaluation(self, eval_name: str, eval_results) -> None:
52
+ """Display results for a successful evaluation."""
53
+ from rich.text import Text
54
+
55
+ if eval_results:
56
+ result = Text()
57
+ result.append("▌", style="bold green")
58
+ result.append(" ", style="")
59
+ result.append(eval_name, style="bold green")
60
+ self.console.print(result)
61
+ table = Table(show_header=False, box=None, padding=(0, 2, 0, 2))
62
+
63
+ for eval_result in eval_results:
64
+ evaluator_name = self._get_evaluator_name(eval_result.evaluator_id)
65
+ score_value = self._convert_score_to_numeric(eval_result)
66
+ table.add_row(
67
+ f"{evaluator_name}", f"[bold cyan]{score_value:.1f}[/bold cyan]"
68
+ )
69
+
70
+ self.console.print(table)
71
+ else:
72
+ result = Text()
73
+ result.append(" ✓ ", style="bold green")
74
+ result.append(eval_name, style="bold white")
75
+ result.append(" - No evaluators", style="dim")
76
+ self.console.print(result)
77
+
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:
82
+ """Display results for a failed evaluation."""
83
+ from rich.text import Text
84
+
85
+ result = Text()
86
+ result.append(" ✗ ", style="bold red")
87
+ result.append(eval_name, style="bold white")
88
+ self.console.print(result)
89
+
90
+ def start_display(self):
91
+ """Start the display."""
92
+ if not self.display_started:
93
+ self.console.print()
94
+ self.console.print("→ [bold]Running Evaluations[/bold]")
95
+ self.console.print()
96
+ self.display_started = True
97
+
98
+ async def handle_create_eval_set_run(self, payload: EvalSetRunCreatedEvent) -> None:
99
+ """Handle evaluation set run creation."""
100
+ try:
101
+ self.evaluators = {eval.id: eval for eval in payload.evaluators}
102
+ except Exception as e:
103
+ logger.error(f"Failed to handle create eval set run event: {e}")
104
+
105
+ async def handle_create_eval_run(self, payload: EvalRunCreatedEvent) -> None:
106
+ """Handle individual evaluation run creation."""
107
+ try:
108
+ if not self.display_started:
109
+ self.start_display()
110
+
111
+ self.console.print(f" ○ [dim]{payload.eval_item.name}[/dim] - Running...")
112
+ except Exception as e:
113
+ logger.error(f"Failed to handle create eval run event: {e}")
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
+
136
+ async def handle_update_eval_run(self, payload: EvalRunUpdatedEvent) -> None:
137
+ """Handle evaluation run updates."""
138
+ try:
139
+ if payload.success:
140
+ self.eval_results_by_name[payload.eval_item.name] = payload.eval_results
141
+ self._display_successful_evaluation(
142
+ payload.eval_item.name, payload.eval_results
143
+ )
144
+ self._display_logs_panel(payload.eval_item.name, payload.logs)
145
+ else:
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
+ except Exception as e:
157
+ logger.error(f"Console reporter error: {e}")
158
+
159
+ async def handle_update_eval_set_run(self, payload: EvalSetRunUpdatedEvent) -> None:
160
+ """Handle evaluation set run completion."""
161
+ try:
162
+ self.final_results = payload.evaluator_scores
163
+ self.display_final_results()
164
+ except Exception as e:
165
+ logger.error(f"Console reporter error: {e}")
166
+
167
+ def display_final_results(self):
168
+ """Display final results summary."""
169
+ self.console.print()
170
+
171
+ if hasattr(self, "final_results") and self.final_results:
172
+ from rich.table import Table
173
+
174
+ # Group evaluators by ID to organize display
175
+ evaluator_ids = list(self.final_results.keys())
176
+
177
+ # Print title
178
+ self.console.print("[bold]Evaluation Results[/bold]")
179
+ self.console.print()
180
+
181
+ # Create single summary table
182
+ summary_table = Table(show_header=True, padding=(0, 2))
183
+ summary_table.add_column("Evaluation", style="cyan")
184
+
185
+ # Add column for each evaluator
186
+ for evaluator_id in evaluator_ids:
187
+ evaluator_name = self._get_evaluator_name(evaluator_id)
188
+ summary_table.add_column(evaluator_name, justify="right")
189
+
190
+ # Add row for each evaluation
191
+ for eval_name, eval_results in self.eval_results_by_name.items():
192
+ row_values = [eval_name]
193
+
194
+ # Get score for each evaluator
195
+ for evaluator_id in evaluator_ids:
196
+ score_found = False
197
+ for eval_result in eval_results:
198
+ if eval_result.evaluator_id == evaluator_id:
199
+ score_value = self._convert_score_to_numeric(eval_result)
200
+ row_values.append(f"{score_value:.1f}")
201
+ score_found = True
202
+ break
203
+
204
+ if not score_found:
205
+ row_values.append("-")
206
+
207
+ summary_table.add_row(*row_values)
208
+
209
+ # Add separator row before average
210
+ summary_table.add_section()
211
+
212
+ # Add average row
213
+ avg_row_values = ["[bold]Average[/bold]"]
214
+ for evaluator_id in evaluator_ids:
215
+ avg_score = self.final_results[evaluator_id]
216
+ avg_row_values.append(f"[bold]{avg_score:.1f}[/bold]")
217
+
218
+ summary_table.add_row(*avg_row_values)
219
+
220
+ self.console.print(summary_table)
221
+ self.console.print()
222
+ else:
223
+ self.console.print(
224
+ "→ [bold green]All evaluations completed successfully![/bold green]"
225
+ )
226
+ self.console.print()
227
+
228
+ async def subscribe_to_eval_runtime_events(self, event_bus: EventBus) -> None:
229
+ """Subscribe to evaluation runtime events."""
230
+ event_bus.subscribe(
231
+ EvaluationEvents.CREATE_EVAL_SET_RUN, self.handle_create_eval_set_run
232
+ )
233
+ event_bus.subscribe(
234
+ EvaluationEvents.CREATE_EVAL_RUN, self.handle_create_eval_run
235
+ )
236
+ event_bus.subscribe(
237
+ EvaluationEvents.UPDATE_EVAL_RUN, self.handle_update_eval_run
238
+ )
239
+ event_bus.subscribe(
240
+ EvaluationEvents.UPDATE_EVAL_SET_RUN, self.handle_update_eval_set_run
241
+ )
@@ -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
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  from typing import List, Optional
2
3
 
3
4
  from opentelemetry.sdk.trace import ReadableSpan
@@ -15,6 +16,7 @@ class UiPathEvalRunExecutionOutput(BaseModel):
15
16
 
16
17
  execution_time: float
17
18
  spans: list[ReadableSpan]
19
+ logs: list[logging.LogRecord]
18
20
  result: UiPathRuntimeResult
19
21
 
20
22
 
@@ -7,6 +7,7 @@ import os
7
7
  from typing import Any, Dict, List
8
8
 
9
9
  from opentelemetry import trace
10
+ from rich.console import Console
10
11
 
11
12
  from uipath import UiPath
12
13
  from uipath._cli._evals._models._evaluation_set import EvaluationItem, EvaluationStatus
@@ -68,6 +69,7 @@ class StudioWebProgressReporter:
68
69
 
69
70
  self._client = uipath.api_client
70
71
  self._console = console_logger
72
+ self._rich_console = Console()
71
73
  self._project_id = os.getenv("UIPATH_PROJECT_ID", None)
72
74
  if not self._project_id:
73
75
  logger.warning(
@@ -79,6 +81,10 @@ class StudioWebProgressReporter:
79
81
  self.evaluator_scores: Dict[str, List[float]] = {}
80
82
  self.eval_run_ids: Dict[str, str] = {}
81
83
 
84
+ def _format_error_message(self, error: Exception, context: str) -> None:
85
+ """Helper method to format and display error messages consistently."""
86
+ self._rich_console.print(f" • \u26a0 [dim]{context}: {error}[/dim]")
87
+
82
88
  @gracefully_handle_errors
83
89
  async def create_eval_set_run(
84
90
  self,
@@ -182,7 +188,7 @@ class StudioWebProgressReporter:
182
188
  logger.debug(f"Created eval set run with ID: {eval_set_run_id}")
183
189
 
184
190
  except Exception as e:
185
- logger.error(f"Failed to handle create eval set run event: {e}")
191
+ self._format_error_message(e, "StudioWeb create eval set run error")
186
192
 
187
193
  async def handle_create_eval_run(self, payload: EvalRunCreatedEvent) -> None:
188
194
  try:
@@ -197,7 +203,7 @@ class StudioWebProgressReporter:
197
203
  logger.warning("Cannot create eval run: eval_set_run_id not available")
198
204
 
199
205
  except Exception as e:
200
- logger.error(f"Failed to handle create eval run event: {e}")
206
+ self._format_error_message(e, "StudioWeb create eval run error")
201
207
 
202
208
  async def handle_update_eval_run(self, payload: EvalRunUpdatedEvent) -> None:
203
209
  try:
@@ -238,7 +244,7 @@ class StudioWebProgressReporter:
238
244
  logger.debug(f"Updated eval run with ID: {eval_run_id}")
239
245
 
240
246
  except Exception as e:
241
- logger.error(f"Failed to handle update eval run event: {e}")
247
+ self._format_error_message(e, "StudioWeb reporting error")
242
248
 
243
249
  async def handle_update_eval_set_run(self, payload: EvalSetRunUpdatedEvent) -> None:
244
250
  try:
@@ -254,7 +260,7 @@ class StudioWebProgressReporter:
254
260
  )
255
261
 
256
262
  except Exception as e:
257
- logger.error(f"Failed to handle update eval set run event: {e}")
263
+ self._format_error_message(e, "StudioWeb update eval set run error")
258
264
 
259
265
  async def subscribe_to_eval_runtime_events(self, event_bus: EventBus) -> None:
260
266
  event_bus.subscribe(
@@ -270,7 +276,7 @@ class StudioWebProgressReporter:
270
276
  EvaluationEvents.UPDATE_EVAL_SET_RUN, self.handle_update_eval_set_run
271
277
  )
272
278
 
273
- logger.info("StudioWeb progress reporter subscribed to evaluation events")
279
+ logger.debug("StudioWeb progress reporter subscribed to evaluation events")
274
280
 
275
281
  def _extract_agent_snapshot(self, entrypoint: str) -> StudioWebAgentSnapshot:
276
282
  try: