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.
- {uipath-2.1.74 → uipath-2.1.76}/CONTRIBUTING.md +15 -1
- {uipath-2.1.74 → uipath-2.1.76}/PKG-INFO +1 -1
- {uipath-2.1.74 → uipath-2.1.76}/pyproject.toml +1 -1
- {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/evals/eval-sets/default.json +2 -1
- uipath-2.1.76/samples/calculator/evals/evaluators/llm-as-a-judge.json +13 -0
- uipath-2.1.76/src/uipath/_cli/_evals/_console_progress_reporter.py +241 -0
- uipath-2.1.76/src/uipath/_cli/_evals/_models/_exceptions.py +5 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_output.py +2 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_progress_reporter.py +11 -5
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_runtime.py +150 -57
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_contracts.py +4 -2
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_logging.py +29 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_eval.py +25 -10
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/middlewares.py +3 -3
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/_events.py +18 -2
- uipath-2.1.76/src/uipath/_services/connections_service.py +430 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_uipath.py +10 -1
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_infer_bindings.py +4 -2
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/_track.py +2 -2
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_connections_service.py +343 -3
- {uipath-2.1.74 → uipath-2.1.76}/uv.lock +1 -1
- uipath-2.1.74/src/uipath/_services/connections_service.py +0 -215
- {uipath-2.1.74 → uipath-2.1.76}/.cursorrules +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.editorconfig +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.gitattributes +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/labeler.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.github/workflows/test.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.gitignore +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.python-version +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.vscode/extensions.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.vscode/launch.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/.vscode/settings.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/LICENSE +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/README.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/FAQ.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/assets/favicon.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/cli/index.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/actions.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/assets.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/attachments.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/buckets.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/connections.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/documents.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/documents_models.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/getting_started.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/jobs.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/processes.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/queues.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/core/traced.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/hooks.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/index.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/main.html +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/release_policy.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/justfile +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/mkdocs.yml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/py.typed +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/README.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/evals/evaluators/equality.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/scripts/debug_test.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/_models/_trajectory_span.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_config.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/job.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/py.typed +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/__init__.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/conftest.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_init.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_new.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_push.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_run.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/conftest.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.74 → uipath-2.1.76}/tests/tracing/test_traced.py +0 -0
- {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. **
|
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.
|
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.
|
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"
|
@@ -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
|
+
)
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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:
|