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