uipath 2.1.124__tar.gz → 2.1.125__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of uipath might be problematic. Click here for more details.
- {uipath-2.1.124 → uipath-2.1.125}/PKG-INFO +1 -1
- {uipath-2.1.124 → uipath-2.1.125}/pyproject.toml +1 -1
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_common.py +38 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_studio_project.py +233 -8
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_debug.py +18 -1
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_eval.py +21 -1
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_run.py +13 -1
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_config.py +12 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/_base_service.py +0 -3
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/assets_service.py +0 -2
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/__init__.py +1 -1
- uipath-2.1.125/src/uipath/_utils/_bindings.py +109 -0
- uipath-2.1.125/tests/sdk/test_bindings.py +326 -0
- {uipath-2.1.124 → uipath-2.1.125}/uv.lock +1 -1
- uipath-2.1.124/src/uipath/_utils/_infer_bindings.py +0 -51
- uipath-2.1.124/src/uipath/_utils/_read_overwrites.py +0 -144
- uipath-2.1.124/tests/sdk/test_bindings_inference.py +0 -54
- uipath-2.1.124/tests/sdk/test_overwrites.py +0 -121
- {uipath-2.1.124 → uipath-2.1.125}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.claude/agents/test-reporter.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.cursorrules +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.editorconfig +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.gitattributes +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/labeler.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.github/workflows/test.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.gitignore +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.python-version +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.vscode/extensions.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.vscode/launch.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/.vscode/settings.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/CONTRIBUTING.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/LICENSE +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/AutomationSuite.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/FAQ.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/favicon.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/llms.txt +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/cli/index.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/actions.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/assets.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/attachments.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/buckets.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/connections.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/documents.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/documents_models.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/getting_started.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/jobs.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/processes.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/queues.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/core/traced.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/hooks.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/index.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/overrides/main.html +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/release_policy.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/justfile +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/mkdocs.yml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/py.typed +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/eval-sets/legacy.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/contains.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/correct-operator-evaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/custom/correct_operator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/custom/types/correct-operator-evaluator-types.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/exact-match.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/json-similarity.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/legacy-equality.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/legacy-json-similarity.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/legacy-llm-as-a-judge.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/legacy-trajectory.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/llm-judge-semantic-similarity.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/llm-judge-strict-json-similarity.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/TOOL_EVALUATORS.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/eval-sets/default.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/evaluators/tool-call-args.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/evaluators/tool-call-count.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/evaluators/tool-call-order.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/evaluators/tool-call-output.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/samples/weather_tools/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/scripts/debug_test.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/scripts/update_agents_md.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/auth_config_25_10.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/auth_config_cloud.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_debug/_bridge.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_debug/_runtime.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_evaluate.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_helpers.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_runtime.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_push/models.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/custom_evaluator.py.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_resources.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_add.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/cli_register.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/models/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/models/runtime_schema.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/guardrails_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/models/evals.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/react/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/react/prompts.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/agent/react/tools.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/_helpers/evaluators_helpers.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/contains_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_base_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_deterministic_evaluator_base.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_exact_match_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_json_similarity_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/legacy_trajectory_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/llm_judge_output_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/llm_judge_trajectory_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/output_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/tool_call_args_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/tool_call_count_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/tool_call_order_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators/tool_call_output_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ContainsEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ExactMatchEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/JsonSimilarityEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/LLMJudgeOutputEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/LLMJudgeSimulationTrajectoryEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/LLMJudgeStrictJSONSimilarityOutputEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/LLMJudgeTrajectoryEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ToolCallArgsEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ToolCallCountEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ToolCallOrderEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/ToolCallOutputEvaluator.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/evaluators_types/generate_types.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/models/llm_judge_types.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/guardrails.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/job.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/py.typed +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/tools-evals/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/tools-evals/run.sh +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/testcases/tools-evals/src/assert.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/agent/models/test_evals.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/conftest.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/evals/eval-sets/default.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/evals/evaluators/equality.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/test_evaluate.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/eval/test_progress_reporter.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/models/test_runtime_schema.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_init.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_new.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_push.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_run.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/conftest.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/evaluators/__init__.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/evaluators/test_evaluator_aggregation.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/evaluators/test_evaluator_helpers.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/evaluators/test_evaluator_methods.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/evaluators/test_evaluator_schemas.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_guardrails_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/tests_data/documents_service/classification_response.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/tests_data/documents_service/ixp_extraction_response.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/tests_data/documents_service/modern_extraction_response.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/sdk/test_uipath_caching.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.124 → uipath-2.1.125}/tests/tracing/test_tracing_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uipath
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.125
|
|
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.125"
|
|
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"
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
3
|
+
from pathlib import Path
|
|
2
4
|
from typing import Optional
|
|
3
5
|
from urllib.parse import urlparse
|
|
4
6
|
|
|
5
7
|
import click
|
|
6
8
|
from dotenv import load_dotenv
|
|
7
9
|
|
|
10
|
+
from ..._config import UiPathConfig
|
|
11
|
+
from ..._utils._bindings import ResourceOverwrite
|
|
8
12
|
from ..._utils.constants import DOTENV_FILE
|
|
9
13
|
from ..spinner import Spinner
|
|
10
14
|
|
|
@@ -116,3 +120,37 @@ def clean_directory(directory: str) -> None:
|
|
|
116
120
|
|
|
117
121
|
def load_environment_variables():
|
|
118
122
|
load_dotenv(dotenv_path=os.path.join(os.getcwd(), DOTENV_FILE), override=True)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
async def read_resource_overwrites_from_file(
|
|
126
|
+
directory_path: Optional[Path] = None,
|
|
127
|
+
) -> dict[str, ResourceOverwrite]:
|
|
128
|
+
"""Read resource overwrites from a JSON file."""
|
|
129
|
+
config_file_name = UiPathConfig.config_file_name
|
|
130
|
+
if directory_path is not None:
|
|
131
|
+
file_path = Path(f"{directory_path}/{config_file_name}")
|
|
132
|
+
else:
|
|
133
|
+
file_path = Path(f"{config_file_name}")
|
|
134
|
+
|
|
135
|
+
overwrites_dict = {}
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
with open(file_path, "r") as f:
|
|
139
|
+
data = json.load(f)
|
|
140
|
+
resource_overwrites = (
|
|
141
|
+
data.get("runtime", {})
|
|
142
|
+
.get("internalArguments", {})
|
|
143
|
+
.get("resourceOverwrites", {})
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
for key, value in resource_overwrites.items():
|
|
147
|
+
overwrite = ResourceOverwrite.model_validate(value)
|
|
148
|
+
overwrites_dict[key] = overwrite
|
|
149
|
+
|
|
150
|
+
# Return empty dict if file doesn't exist or invalid json
|
|
151
|
+
except FileNotFoundError:
|
|
152
|
+
pass
|
|
153
|
+
except json.JSONDecodeError:
|
|
154
|
+
pass
|
|
155
|
+
|
|
156
|
+
return overwrites_dict
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
|
+
from enum import Enum
|
|
3
4
|
from functools import wraps
|
|
4
5
|
from pathlib import PurePath
|
|
5
6
|
from typing import Any, Callable, List, Optional, Union
|
|
6
7
|
|
|
8
|
+
import click
|
|
7
9
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
8
10
|
|
|
9
|
-
from uipath
|
|
11
|
+
from uipath import UiPath
|
|
12
|
+
from uipath._cli._utils._console import ConsoleLogger
|
|
13
|
+
from uipath._config import UiPathConfig
|
|
14
|
+
from uipath._utils._bindings import ResourceOverwrite
|
|
15
|
+
from uipath._utils.constants import ENV_TENANT_ID, HEADER_SW_LOCK_KEY, HEADER_TENANT_ID
|
|
10
16
|
from uipath.models.exceptions import EnrichedException
|
|
11
17
|
from uipath.tracing import traced
|
|
12
18
|
|
|
@@ -131,6 +137,54 @@ class LockInfo(BaseModel):
|
|
|
131
137
|
solution_lock_key: Optional[str] = Field(alias="solutionLockKey")
|
|
132
138
|
|
|
133
139
|
|
|
140
|
+
class Severity(str, Enum):
|
|
141
|
+
"""Severity level for virtual resource operation results."""
|
|
142
|
+
|
|
143
|
+
SUCCESS = "success"
|
|
144
|
+
ATTENTION = "attention"
|
|
145
|
+
WARN = "warn"
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class VirtualResourceRequest(BaseModel):
|
|
149
|
+
model_config = ConfigDict(
|
|
150
|
+
populate_by_name=True,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
kind: str = Field(alias="kind")
|
|
154
|
+
name: str = Field(alias="name")
|
|
155
|
+
type: Optional[str] = Field(default=None, alias="type")
|
|
156
|
+
activity_name: Optional[str] = Field(default=None, alias="activityName")
|
|
157
|
+
api_version: Optional[str] = Field(default=None, alias="apiVersion")
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class VirtualResourceResult(BaseModel):
|
|
161
|
+
"""Result of a virtual resource creation operation.
|
|
162
|
+
|
|
163
|
+
Attributes:
|
|
164
|
+
severity: The severity level (log, warn or attention)
|
|
165
|
+
message: The result message with styling
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
severity: Severity
|
|
169
|
+
message: str
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class ResourceOverwriteData(BaseModel):
|
|
173
|
+
"""Represents the overwrite details from the API response.
|
|
174
|
+
|
|
175
|
+
Attributes:
|
|
176
|
+
name: The name of the resource being overwritten
|
|
177
|
+
folder_path: The folder path of the overwrite resource
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
model_config = ConfigDict(
|
|
181
|
+
populate_by_name=True,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
name: str = Field(alias="name")
|
|
185
|
+
folder_path: str = Field(alias="folderPath")
|
|
186
|
+
|
|
187
|
+
|
|
134
188
|
def get_folder_by_name(
|
|
135
189
|
structure: ProjectStructure, folder_name: str
|
|
136
190
|
) -> Optional[ProjectFolder]:
|
|
@@ -232,9 +286,7 @@ def with_lock_retry(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
|
232
286
|
return await func(self, *args, **kwargs)
|
|
233
287
|
except EnrichedException as e:
|
|
234
288
|
if e.status_code == 423:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
console = ConsoleLogger()
|
|
289
|
+
console = ConsoleLogger().get_instance()
|
|
238
290
|
console.error(
|
|
239
291
|
"The project is temporarily locked. This could be due to modifications or active processes. Please wait a moment and try again."
|
|
240
292
|
)
|
|
@@ -284,16 +336,189 @@ class StudioSolutionsClient:
|
|
|
284
336
|
|
|
285
337
|
|
|
286
338
|
class StudioClient:
|
|
287
|
-
def __init__(self, project_id: str):
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
self.uipath: UiPath = UiPath()
|
|
339
|
+
def __init__(self, project_id: str, uipath: Optional[UiPath] = None):
|
|
340
|
+
self.uipath: UiPath = uipath or UiPath()
|
|
291
341
|
self.file_operations_base_url: str = (
|
|
292
342
|
f"/studio_/backend/api/Project/{project_id}/FileOperations"
|
|
293
343
|
)
|
|
294
344
|
self._lock_operations_base_url: str = (
|
|
295
345
|
f"/studio_/backend/api/Project/{project_id}/Lock"
|
|
296
346
|
)
|
|
347
|
+
self._project_id = project_id
|
|
348
|
+
self._solution_id_cache: Optional[str] = None
|
|
349
|
+
self._resources_cache: Optional[List[dict[str, Any]]] = None
|
|
350
|
+
|
|
351
|
+
async def _get_solution_id(self) -> str:
|
|
352
|
+
# implement property cache logic as coroutines are not supported
|
|
353
|
+
if self._solution_id_cache is not None:
|
|
354
|
+
return self._solution_id_cache
|
|
355
|
+
response = await self.uipath.api_client.request_async(
|
|
356
|
+
"GET",
|
|
357
|
+
url=f"/studio_/backend/api/Project/{self._project_id}",
|
|
358
|
+
scoped="org",
|
|
359
|
+
)
|
|
360
|
+
self._solution_id_cache = response.json()["solutionId"]
|
|
361
|
+
return self._solution_id_cache
|
|
362
|
+
|
|
363
|
+
async def _get_existing_resources(self) -> List[dict[str, Any]]:
|
|
364
|
+
if self._resources_cache is not None:
|
|
365
|
+
return self._resources_cache
|
|
366
|
+
|
|
367
|
+
solution_id = await self._get_solution_id()
|
|
368
|
+
response = await self.uipath.api_client.request_async(
|
|
369
|
+
"GET",
|
|
370
|
+
url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/entities",
|
|
371
|
+
scoped="org",
|
|
372
|
+
)
|
|
373
|
+
resources_data = response.json().get("resources", [])
|
|
374
|
+
self._resources_cache = [
|
|
375
|
+
{"name": r.get("name"), "kind": r.get("kind")} for r in resources_data
|
|
376
|
+
]
|
|
377
|
+
return self._resources_cache
|
|
378
|
+
|
|
379
|
+
async def get_resource_overwrites(self) -> dict[str, ResourceOverwrite]:
|
|
380
|
+
"""Get resource overwrites from the solution.
|
|
381
|
+
|
|
382
|
+
Returns:
|
|
383
|
+
dict[str, ResourceOverwrite]: Dict of resource overwrites
|
|
384
|
+
"""
|
|
385
|
+
if not os.path.exists(UiPathConfig.bindings_file_path):
|
|
386
|
+
return {}
|
|
387
|
+
|
|
388
|
+
with open(UiPathConfig.bindings_file_path, "rb") as f:
|
|
389
|
+
file_content = f.read()
|
|
390
|
+
|
|
391
|
+
solution_id = await self._get_solution_id()
|
|
392
|
+
tenant_id = os.getenv(ENV_TENANT_ID, None)
|
|
393
|
+
|
|
394
|
+
files = [
|
|
395
|
+
(
|
|
396
|
+
"file",
|
|
397
|
+
(
|
|
398
|
+
os.path.basename(UiPathConfig.bindings_file_path),
|
|
399
|
+
file_content,
|
|
400
|
+
"application/json",
|
|
401
|
+
),
|
|
402
|
+
)
|
|
403
|
+
]
|
|
404
|
+
|
|
405
|
+
response = await self.uipath.api_client.request_async(
|
|
406
|
+
"POST",
|
|
407
|
+
url=f"/studio_/backend/api/resourcebuilder/{solution_id}/binding-overwrites",
|
|
408
|
+
scoped="org",
|
|
409
|
+
headers={HEADER_TENANT_ID: tenant_id},
|
|
410
|
+
files=files,
|
|
411
|
+
)
|
|
412
|
+
data = response.json()
|
|
413
|
+
overwrites = {}
|
|
414
|
+
|
|
415
|
+
for key, value in data.items():
|
|
416
|
+
overwrites[key] = ResourceOverwrite.model_validate(value)
|
|
417
|
+
|
|
418
|
+
return overwrites
|
|
419
|
+
|
|
420
|
+
async def create_virtual_resource(
|
|
421
|
+
self, virtual_resource_request: VirtualResourceRequest
|
|
422
|
+
) -> VirtualResourceResult:
|
|
423
|
+
"""Create a virtual resource or return appropriate status if it already exists.
|
|
424
|
+
|
|
425
|
+
Args:
|
|
426
|
+
virtual_resource_request: The virtual resource request details
|
|
427
|
+
|
|
428
|
+
Returns:
|
|
429
|
+
VirtualResourceResult: Result indicating the operation status and a formatted message
|
|
430
|
+
"""
|
|
431
|
+
# Build base message with resource details
|
|
432
|
+
base_message_parts = [
|
|
433
|
+
f"Resource {click.style(virtual_resource_request.name, fg='cyan')}",
|
|
434
|
+
f" (kind: {click.style(virtual_resource_request.kind, fg='yellow')}",
|
|
435
|
+
]
|
|
436
|
+
|
|
437
|
+
if virtual_resource_request.type:
|
|
438
|
+
base_message_parts.append(
|
|
439
|
+
f", type: {click.style(virtual_resource_request.type, fg='yellow')}"
|
|
440
|
+
)
|
|
441
|
+
|
|
442
|
+
if virtual_resource_request.activity_name:
|
|
443
|
+
base_message_parts.append(
|
|
444
|
+
f", activity: {click.style(virtual_resource_request.activity_name, fg='yellow')}"
|
|
445
|
+
)
|
|
446
|
+
|
|
447
|
+
base_message_parts.append(")")
|
|
448
|
+
base_message = "".join(base_message_parts)
|
|
449
|
+
|
|
450
|
+
existing_resources = await self._get_existing_resources()
|
|
451
|
+
|
|
452
|
+
# Check if resource with same kind and name exists
|
|
453
|
+
existing_same_kind = next(
|
|
454
|
+
(
|
|
455
|
+
r
|
|
456
|
+
for r in existing_resources
|
|
457
|
+
if r["name"] == virtual_resource_request.name
|
|
458
|
+
and r["kind"] == virtual_resource_request.kind
|
|
459
|
+
),
|
|
460
|
+
None,
|
|
461
|
+
)
|
|
462
|
+
if existing_same_kind:
|
|
463
|
+
message = f"{base_message} already exists. Skipping..."
|
|
464
|
+
return VirtualResourceResult(severity=Severity.ATTENTION, message=message)
|
|
465
|
+
|
|
466
|
+
# Check if resource with same name but different kind exists
|
|
467
|
+
existing_diff_kind = next(
|
|
468
|
+
(
|
|
469
|
+
r
|
|
470
|
+
for r in existing_resources
|
|
471
|
+
if r["name"] == virtual_resource_request.name
|
|
472
|
+
and r["kind"] != virtual_resource_request.kind
|
|
473
|
+
),
|
|
474
|
+
None,
|
|
475
|
+
)
|
|
476
|
+
if existing_diff_kind:
|
|
477
|
+
message = (
|
|
478
|
+
f"Cannot create {base_message}. "
|
|
479
|
+
f"A resource with this name already exists with kind {click.style(existing_diff_kind['kind'], fg='yellow')}. "
|
|
480
|
+
f"Consider renaming the resource in code."
|
|
481
|
+
)
|
|
482
|
+
return VirtualResourceResult(severity=Severity.WARN, message=message)
|
|
483
|
+
|
|
484
|
+
# Create the virtual resource
|
|
485
|
+
solution_id = await self._get_solution_id()
|
|
486
|
+
response = await self.uipath.api_client.request_async(
|
|
487
|
+
"POST",
|
|
488
|
+
url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/resources/virtual",
|
|
489
|
+
scoped="org",
|
|
490
|
+
json=virtual_resource_request.model_dump(exclude_none=True),
|
|
491
|
+
)
|
|
492
|
+
resource_key = response.json()["key"]
|
|
493
|
+
await self._update_resource_specs(
|
|
494
|
+
resource_key, new_specs={"name": virtual_resource_request.name}
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
# Update cache with newly created resource
|
|
498
|
+
if self._resources_cache is not None:
|
|
499
|
+
self._resources_cache.append(
|
|
500
|
+
{
|
|
501
|
+
"name": virtual_resource_request.name,
|
|
502
|
+
"kind": virtual_resource_request.kind,
|
|
503
|
+
}
|
|
504
|
+
)
|
|
505
|
+
|
|
506
|
+
message = f"{base_message} created successfully."
|
|
507
|
+
return VirtualResourceResult(severity=Severity.SUCCESS, message=message)
|
|
508
|
+
|
|
509
|
+
async def _update_resource_specs(
|
|
510
|
+
self, resource_key: str, new_specs: dict[str, Any]
|
|
511
|
+
):
|
|
512
|
+
solution_id = await self._get_solution_id()
|
|
513
|
+
tenant_id = os.getenv(ENV_TENANT_ID, None)
|
|
514
|
+
|
|
515
|
+
await self.uipath.api_client.request_async(
|
|
516
|
+
"PATCH",
|
|
517
|
+
url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/resources/{resource_key}/configuration",
|
|
518
|
+
scoped="org",
|
|
519
|
+
json=new_specs,
|
|
520
|
+
headers={HEADER_TENANT_ID: tenant_id},
|
|
521
|
+
)
|
|
297
522
|
|
|
298
523
|
@traced(name="get_project_structure", run_type="uipath")
|
|
299
524
|
async def get_project_structure_async(self) -> ProjectStructure:
|
|
@@ -7,6 +7,9 @@ from typing import Optional
|
|
|
7
7
|
import click
|
|
8
8
|
|
|
9
9
|
from uipath._cli._utils._debug import setup_debugging
|
|
10
|
+
from uipath._cli._utils._studio_project import StudioClient
|
|
11
|
+
from uipath._config import UiPathConfig
|
|
12
|
+
from uipath._utils._bindings import ResourceOverwritesContext
|
|
10
13
|
from uipath.tracing import LlmOpsHttpExporter
|
|
11
14
|
|
|
12
15
|
from .._utils.constants import (
|
|
@@ -121,7 +124,7 @@ def debug(
|
|
|
121
124
|
if debug_context.job_id:
|
|
122
125
|
runtime_factory.add_span_exporter(LlmOpsHttpExporter())
|
|
123
126
|
|
|
124
|
-
async def
|
|
127
|
+
async def execute_debug_runtime():
|
|
125
128
|
async with UiPathDebugRuntime.from_debug_context(
|
|
126
129
|
factory=runtime_factory,
|
|
127
130
|
context=debug_context,
|
|
@@ -129,6 +132,20 @@ def debug(
|
|
|
129
132
|
) as debug_runtime:
|
|
130
133
|
await debug_runtime.execute()
|
|
131
134
|
|
|
135
|
+
async def execute():
|
|
136
|
+
project_id = UiPathConfig.project_id
|
|
137
|
+
|
|
138
|
+
if project_id:
|
|
139
|
+
studio_client = StudioClient(project_id)
|
|
140
|
+
|
|
141
|
+
async with ResourceOverwritesContext(
|
|
142
|
+
lambda: studio_client.get_resource_overwrites()
|
|
143
|
+
) as ctx:
|
|
144
|
+
console.info(f"Applied {ctx.overwrites_count} overwrite(s)")
|
|
145
|
+
await execute_debug_runtime()
|
|
146
|
+
else:
|
|
147
|
+
await execute_debug_runtime()
|
|
148
|
+
|
|
132
149
|
asyncio.run(execute())
|
|
133
150
|
except Exception as e:
|
|
134
151
|
console.error(
|
|
@@ -13,9 +13,11 @@ from uipath._cli._evals._runtime import (
|
|
|
13
13
|
)
|
|
14
14
|
from uipath._cli._runtime._runtime_factory import generate_runtime_factory
|
|
15
15
|
from uipath._cli._utils._folders import get_personal_workspace_key_async
|
|
16
|
+
from uipath._cli._utils._studio_project import StudioClient
|
|
16
17
|
from uipath._cli.middlewares import Middlewares
|
|
17
18
|
from uipath._config import UiPathConfig
|
|
18
19
|
from uipath._events._event_bus import EventBus
|
|
20
|
+
from uipath._utils._bindings import ResourceOverwritesContext
|
|
19
21
|
from uipath.eval._helpers import auto_discover_entrypoint
|
|
20
22
|
from uipath.tracing import LlmOpsHttpExporter
|
|
21
23
|
|
|
@@ -155,7 +157,25 @@ def eval(
|
|
|
155
157
|
runtime_factory = generate_runtime_factory()
|
|
156
158
|
if eval_context.job_id:
|
|
157
159
|
runtime_factory.add_span_exporter(LlmOpsHttpExporter())
|
|
158
|
-
|
|
160
|
+
|
|
161
|
+
async def execute_eval():
|
|
162
|
+
project_id = UiPathConfig.project_id
|
|
163
|
+
|
|
164
|
+
if project_id:
|
|
165
|
+
studio_client = StudioClient(project_id)
|
|
166
|
+
|
|
167
|
+
async with ResourceOverwritesContext(
|
|
168
|
+
lambda: studio_client.get_resource_overwrites()
|
|
169
|
+
) as ctx:
|
|
170
|
+
console.info(
|
|
171
|
+
f"Applied {ctx.overwrites_count} resource overwrite(s)"
|
|
172
|
+
)
|
|
173
|
+
await evaluate(runtime_factory, eval_context, event_bus)
|
|
174
|
+
else:
|
|
175
|
+
# Fall back to execution without overwrites
|
|
176
|
+
await evaluate(runtime_factory, eval_context, event_bus)
|
|
177
|
+
|
|
178
|
+
asyncio.run(execute_eval())
|
|
159
179
|
|
|
160
180
|
except Exception as e:
|
|
161
181
|
console.error(
|
|
@@ -7,7 +7,9 @@ from typing import Optional
|
|
|
7
7
|
import click
|
|
8
8
|
|
|
9
9
|
from uipath._cli._runtime._runtime_factory import generate_runtime_factory
|
|
10
|
+
from uipath._cli._utils._common import read_resource_overwrites_from_file
|
|
10
11
|
from uipath._cli._utils._debug import setup_debugging
|
|
12
|
+
from uipath._utils._bindings import ResourceOverwritesContext
|
|
11
13
|
from uipath.tracing import JsonLinesFileExporter, LlmOpsHttpExporter
|
|
12
14
|
|
|
13
15
|
from .._utils.constants import (
|
|
@@ -123,7 +125,17 @@ def run(
|
|
|
123
125
|
if trace_file:
|
|
124
126
|
runtime_factory.add_span_exporter(JsonLinesFileExporter(trace_file))
|
|
125
127
|
|
|
126
|
-
|
|
128
|
+
if context.job_id:
|
|
129
|
+
async with ResourceOverwritesContext(
|
|
130
|
+
lambda: read_resource_overwrites_from_file(context.runtime_dir)
|
|
131
|
+
) as ctx:
|
|
132
|
+
console.info(
|
|
133
|
+
f"Applied {ctx.overwrites_count} resource overwrite(s)"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
result = await runtime_factory.execute(context)
|
|
137
|
+
else:
|
|
138
|
+
result = await runtime_factory.execute(context)
|
|
127
139
|
|
|
128
140
|
if not context.job_id:
|
|
129
141
|
console.info(result.output)
|
|
@@ -24,6 +24,12 @@ class ConfigurationManager:
|
|
|
24
24
|
|
|
25
25
|
return Path(UIPATH_BINDINGS_FILE)
|
|
26
26
|
|
|
27
|
+
@property
|
|
28
|
+
def config_file_name(self) -> str:
|
|
29
|
+
from uipath._utils.constants import UIPATH_CONFIG_FILE
|
|
30
|
+
|
|
31
|
+
return UIPATH_CONFIG_FILE
|
|
32
|
+
|
|
27
33
|
@property
|
|
28
34
|
def project_id(self) -> Optional[str]:
|
|
29
35
|
from uipath._utils.constants import ENV_UIPATH_PROJECT_ID
|
|
@@ -40,5 +46,11 @@ class ConfigurationManager:
|
|
|
40
46
|
def is_studio_project(self) -> bool:
|
|
41
47
|
return self.project_id is not None
|
|
42
48
|
|
|
49
|
+
@property
|
|
50
|
+
def job_key(self) -> Optional[str]:
|
|
51
|
+
from uipath._utils.constants import ENV_JOB_KEY
|
|
52
|
+
|
|
53
|
+
return os.getenv(ENV_JOB_KEY, None)
|
|
54
|
+
|
|
43
55
|
|
|
44
56
|
UiPathConfig = ConfigurationManager()
|
|
@@ -19,8 +19,6 @@ from tenacity import (
|
|
|
19
19
|
wait_exponential,
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
from uipath._utils._read_overwrites import OverwritesManager
|
|
23
|
-
|
|
24
22
|
from .._config import Config
|
|
25
23
|
from .._execution_context import ExecutionContext
|
|
26
24
|
from .._utils import UiPathUrl, user_agent_value
|
|
@@ -56,7 +54,6 @@ class BaseService:
|
|
|
56
54
|
self._client = Client(**client_kwargs)
|
|
57
55
|
self._client_async = AsyncClient(**client_kwargs)
|
|
58
56
|
|
|
59
|
-
self._overwrites_manager = OverwritesManager()
|
|
60
57
|
self._logger.debug(f"HEADERS: {self.default_headers}")
|
|
61
58
|
|
|
62
59
|
super().__init__()
|
|
@@ -6,7 +6,6 @@ from .._config import Config
|
|
|
6
6
|
from .._execution_context import ExecutionContext
|
|
7
7
|
from .._folder_context import FolderContext
|
|
8
8
|
from .._utils import Endpoint, RequestSpec, header_folder, infer_bindings
|
|
9
|
-
from .._utils._read_overwrites import OverwritesManager
|
|
10
9
|
from ..models import Asset, UserAsset
|
|
11
10
|
from ..tracing._traced import traced
|
|
12
11
|
from ._base_service import BaseService
|
|
@@ -21,7 +20,6 @@ class AssetsService(FolderContext, BaseService):
|
|
|
21
20
|
|
|
22
21
|
def __init__(self, config: Config, execution_context: ExecutionContext) -> None:
|
|
23
22
|
super().__init__(config=config, execution_context=execution_context)
|
|
24
|
-
self._overwrites_manager = OverwritesManager()
|
|
25
23
|
self._base_url = "assets"
|
|
26
24
|
|
|
27
25
|
@traced(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
from ._bindings import get_inferred_bindings_names, infer_bindings
|
|
1
2
|
from ._endpoint import Endpoint
|
|
2
|
-
from ._infer_bindings import get_inferred_bindings_names, infer_bindings
|
|
3
3
|
from ._logs import setup_logging
|
|
4
4
|
from ._request_override import header_folder
|
|
5
5
|
from ._request_spec import RequestSpec
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import inspect
|
|
3
|
+
from contextvars import ContextVar, Token
|
|
4
|
+
from typing import Any, Callable, Coroutine, Optional, TypeVar
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
7
|
+
|
|
8
|
+
T = TypeVar("T")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ResourceOverwrite(BaseModel):
|
|
12
|
+
"""Represents a resource overwrite configuration.
|
|
13
|
+
|
|
14
|
+
Attributes:
|
|
15
|
+
overwrite_name: The name of the resource being overwritten
|
|
16
|
+
overwrite_folder_path: The folder path of the overwrite resource
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
model_config = ConfigDict(
|
|
20
|
+
populate_by_name=True,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
overwrite_name: str = Field(alias="name")
|
|
24
|
+
overwrite_folder_path: str = Field(alias="folderPath")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
_resource_overwrites: ContextVar[Optional[dict[str, ResourceOverwrite]]] = ContextVar(
|
|
28
|
+
"resource_overwrites", default=None
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ResourceOverwritesContext:
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
get_overwrites_callable: Callable[
|
|
36
|
+
[], Coroutine[Any, Any, dict[str, ResourceOverwrite]]
|
|
37
|
+
],
|
|
38
|
+
):
|
|
39
|
+
self.get_overwrites_callable = get_overwrites_callable
|
|
40
|
+
self._token: Optional[Token[Optional[dict[str, ResourceOverwrite]]]] = None
|
|
41
|
+
self.overwrites_count = 0
|
|
42
|
+
|
|
43
|
+
async def __aenter__(self) -> "ResourceOverwritesContext":
|
|
44
|
+
overwrites = await self.get_overwrites_callable()
|
|
45
|
+
self._token = _resource_overwrites.set(overwrites)
|
|
46
|
+
self.overwrites_count = len(overwrites)
|
|
47
|
+
return self
|
|
48
|
+
|
|
49
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
50
|
+
if self._token:
|
|
51
|
+
_resource_overwrites.reset(self._token)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def infer_bindings(
|
|
55
|
+
resource_type: str,
|
|
56
|
+
name: str = "name",
|
|
57
|
+
folder_path: str = "folder_path",
|
|
58
|
+
ignore: bool = False,
|
|
59
|
+
) -> Callable[..., Any]:
|
|
60
|
+
def decorator(func: Callable[..., Any]):
|
|
61
|
+
@functools.wraps(func)
|
|
62
|
+
def wrapper(*args, **kwargs):
|
|
63
|
+
# convert both args and kwargs to single dict
|
|
64
|
+
sig = inspect.signature(func)
|
|
65
|
+
bound = sig.bind_partial(*args, **kwargs)
|
|
66
|
+
bound.apply_defaults()
|
|
67
|
+
all_args = dict(bound.arguments)
|
|
68
|
+
|
|
69
|
+
# Get overwrites from context variable
|
|
70
|
+
context_overwrites = _resource_overwrites.get()
|
|
71
|
+
|
|
72
|
+
if context_overwrites is not None:
|
|
73
|
+
resource_name = all_args.get(name)
|
|
74
|
+
resource_folder_path = all_args.get(folder_path)
|
|
75
|
+
|
|
76
|
+
key = f"{resource_type}.{resource_name}"
|
|
77
|
+
# try to apply folder path, fallback to resource_type.resource_name
|
|
78
|
+
if resource_folder_path:
|
|
79
|
+
key = (
|
|
80
|
+
f"{key}.{resource_folder_path}"
|
|
81
|
+
if f"{key}.{resource_folder_path}" in context_overwrites
|
|
82
|
+
else key
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
matched_overwrite = context_overwrites.get(key)
|
|
86
|
+
|
|
87
|
+
# Apply the matched overwrite
|
|
88
|
+
if matched_overwrite is not None:
|
|
89
|
+
if name in sig.parameters:
|
|
90
|
+
all_args[name] = matched_overwrite.overwrite_name
|
|
91
|
+
if folder_path in sig.parameters:
|
|
92
|
+
all_args[folder_path] = matched_overwrite.overwrite_folder_path
|
|
93
|
+
|
|
94
|
+
return func(**all_args)
|
|
95
|
+
|
|
96
|
+
wrapper._should_infer_bindings = not ignore # type: ignore
|
|
97
|
+
wrapper._infer_bindings_mappings = {"name": name, "folder_path": folder_path} # type: ignore
|
|
98
|
+
return wrapper
|
|
99
|
+
|
|
100
|
+
return decorator
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_inferred_bindings_names(cls: T):
|
|
104
|
+
inferred_bindings = {}
|
|
105
|
+
for name, method in inspect.getmembers(cls, inspect.isfunction):
|
|
106
|
+
if hasattr(method, "_should_infer_bindings") and method._should_infer_bindings:
|
|
107
|
+
inferred_bindings[name] = method._infer_bindings_mappings # type: ignore
|
|
108
|
+
|
|
109
|
+
return inferred_bindings
|