uipath 2.1.83__tar.gz → 2.1.85__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.83 → uipath-2.1.85}/PKG-INFO +1 -1
- {uipath-2.1.83 → uipath-2.1.85}/pyproject.toml +1 -1
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_runtime.py +4 -5
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_push/sw_file_handler.py +10 -1
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_studio_project.py +46 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/connections_service.py +67 -1
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/_utils.py +16 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/__init__.py +2 -1
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/connections.py +8 -0
- uipath-2.1.85/src/uipath/utils/dynamic_schema.py +111 -0
- uipath-2.1.85/tests/cli/utils/test_dynamic_schema.py +95 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_connections_service.py +246 -1
- {uipath-2.1.83 → uipath-2.1.85}/uv.lock +1 -1
- {uipath-2.1.83 → uipath-2.1.85}/.cursorrules +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.editorconfig +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.gitattributes +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/labeler.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.github/workflows/test.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.gitignore +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.python-version +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.vscode/extensions.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.vscode/launch.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/.vscode/settings.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/CONTRIBUTING.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/LICENSE +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/FAQ.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/favicon.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/llms.txt +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/cli/index.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/actions.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/assets.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/attachments.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/buckets.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/connections.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/documents.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/documents_models.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/getting_started.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/jobs.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/processes.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/queues.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/core/traced.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/hooks.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/index.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/overrides/main.html +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/release_policy.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/justfile +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/mkdocs.yml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/py.typed +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/evals/evaluators/equality.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/scripts/debug_test.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_config.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/job.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/py.typed +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/__init__.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/conftest.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_init.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_new.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_push.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_run.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/conftest.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.83 → uipath-2.1.85}/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.85
|
|
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.85"
|
|
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"
|
|
@@ -432,12 +432,12 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
|
|
|
432
432
|
async def execute_runtime(
|
|
433
433
|
self, eval_item: EvaluationItem
|
|
434
434
|
) -> UiPathEvalRunExecutionOutput:
|
|
435
|
-
|
|
435
|
+
execution_id = str(uuid.uuid4())
|
|
436
436
|
runtime_context: C = self.factory.new_context(
|
|
437
|
-
execution_id=
|
|
437
|
+
execution_id=execution_id,
|
|
438
438
|
input_json=eval_item.inputs,
|
|
439
439
|
is_eval_run=True,
|
|
440
|
-
log_handler=self._setup_execution_logging(
|
|
440
|
+
log_handler=self._setup_execution_logging(execution_id),
|
|
441
441
|
)
|
|
442
442
|
if runtime_context.execution_id is None:
|
|
443
443
|
raise ValueError("execution_id must be set for eval runs")
|
|
@@ -445,9 +445,8 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
|
|
|
445
445
|
attributes = {
|
|
446
446
|
"evalId": eval_item.id,
|
|
447
447
|
"span_type": "eval",
|
|
448
|
+
"execution.id": runtime_context.execution_id,
|
|
448
449
|
}
|
|
449
|
-
if runtime_context.execution_id:
|
|
450
|
-
attributes["execution.id"] = runtime_context.execution_id
|
|
451
450
|
|
|
452
451
|
start_time = time()
|
|
453
452
|
try:
|
|
@@ -7,6 +7,7 @@ from typing import Any, Dict, Optional, Set
|
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
|
|
10
|
+
from ...models.exceptions import EnrichedException
|
|
10
11
|
from .._utils._console import ConsoleLogger
|
|
11
12
|
from .._utils._constants import (
|
|
12
13
|
AGENT_INITIAL_CODE_VERSION,
|
|
@@ -483,7 +484,15 @@ class SwFileHandler:
|
|
|
483
484
|
Raises:
|
|
484
485
|
Exception: If any step in the process fails
|
|
485
486
|
"""
|
|
486
|
-
|
|
487
|
+
try:
|
|
488
|
+
structure = await self._studio_client.get_project_structure_async()
|
|
489
|
+
except EnrichedException as e:
|
|
490
|
+
if e.status_code == 404:
|
|
491
|
+
structure = ProjectStructure(name="", files=[], folders=[])
|
|
492
|
+
await self._studio_client._put_lock()
|
|
493
|
+
else:
|
|
494
|
+
raise
|
|
495
|
+
|
|
487
496
|
source_code_folder = self._get_folder_by_name(structure, "source_code")
|
|
488
497
|
root_files, source_code_files = self._get_remote_files(
|
|
489
498
|
structure, source_code_folder
|
|
@@ -224,6 +224,45 @@ def with_lock_retry(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
|
224
224
|
return wrapper
|
|
225
225
|
|
|
226
226
|
|
|
227
|
+
class StudioSolutionsClient:
|
|
228
|
+
def __init__(self, solution_id: str):
|
|
229
|
+
from uipath import UiPath
|
|
230
|
+
|
|
231
|
+
self.uipath: UiPath = UiPath()
|
|
232
|
+
self._solutions_base_url: str = f"/studio_/backend/api/Solution/{solution_id}"
|
|
233
|
+
|
|
234
|
+
async def create_project_async(
|
|
235
|
+
self,
|
|
236
|
+
project_name: str,
|
|
237
|
+
project_type: str = "Agent",
|
|
238
|
+
trigger_type: str = "Manual",
|
|
239
|
+
):
|
|
240
|
+
"""Create a new project in the specified solution.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
project_name: The name for the new project
|
|
244
|
+
project_type: The type of project to create (default: "Agent")
|
|
245
|
+
trigger_type: The trigger type for the project (default: "Manual")
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
dict: The created project details including project ID
|
|
249
|
+
"""
|
|
250
|
+
data = {
|
|
251
|
+
"createDefaultProjectCommand[projectType]": project_type,
|
|
252
|
+
"createDefaultProjectCommand[triggerType]": trigger_type,
|
|
253
|
+
"createDefaultProjectCommand[name]": project_name,
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
response = await self.uipath.api_client.request_async(
|
|
257
|
+
"POST",
|
|
258
|
+
url=f"{self._solutions_base_url}/projects",
|
|
259
|
+
data=data,
|
|
260
|
+
scoped="org",
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
return response.json()
|
|
264
|
+
|
|
265
|
+
|
|
227
266
|
class StudioClient:
|
|
228
267
|
def __init__(self, project_id: str):
|
|
229
268
|
from uipath import UiPath
|
|
@@ -464,3 +503,10 @@ class StudioClient:
|
|
|
464
503
|
scoped="org",
|
|
465
504
|
)
|
|
466
505
|
return LockInfo.model_validate(response.json())
|
|
506
|
+
|
|
507
|
+
async def _put_lock(self):
|
|
508
|
+
await self.uipath.api_client.request_async(
|
|
509
|
+
"PUT",
|
|
510
|
+
url=f"{self._lock_operations_base_url}/dummy-uuid-Shared?api-version=2",
|
|
511
|
+
scoped="org",
|
|
512
|
+
)
|
|
@@ -7,7 +7,7 @@ from httpx import Response
|
|
|
7
7
|
from .._config import Config
|
|
8
8
|
from .._execution_context import ExecutionContext
|
|
9
9
|
from .._utils import Endpoint, RequestSpec, header_folder, infer_bindings
|
|
10
|
-
from ..models import Connection, ConnectionToken, EventArguments
|
|
10
|
+
from ..models import Connection, ConnectionMetadata, ConnectionToken, EventArguments
|
|
11
11
|
from ..models.connections import ConnectionTokenType
|
|
12
12
|
from ..tracing._traced import traced
|
|
13
13
|
from ._base_service import BaseService
|
|
@@ -54,6 +54,31 @@ class ConnectionsService(BaseService):
|
|
|
54
54
|
response = self.request(spec.method, url=spec.endpoint)
|
|
55
55
|
return Connection.model_validate(response.json())
|
|
56
56
|
|
|
57
|
+
@traced(
|
|
58
|
+
name="connections_metadata",
|
|
59
|
+
run_type="uipath",
|
|
60
|
+
hide_output=True,
|
|
61
|
+
)
|
|
62
|
+
def metadata(
|
|
63
|
+
self, element_instance_id: int, tool_path: str, schema_mode: bool = True
|
|
64
|
+
) -> ConnectionMetadata:
|
|
65
|
+
"""Synchronously retrieve connection API metadata.
|
|
66
|
+
|
|
67
|
+
This method fetches the metadata for a connection,
|
|
68
|
+
which can be used to establish communication with an external service.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
element_instance_id (int): The element instance ID of the connection.
|
|
72
|
+
tool_path (str): The tool path to retrieve metadata for.
|
|
73
|
+
schema_mode (bool): Whether or not to represent the output schema in the response fields.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
ConnectionMetadata: The connection metadata.
|
|
77
|
+
"""
|
|
78
|
+
spec = self._metadata_spec(element_instance_id, tool_path, schema_mode)
|
|
79
|
+
response = self.request(spec.method, url=spec.endpoint, headers=spec.headers)
|
|
80
|
+
return ConnectionMetadata.model_validate(response.json())
|
|
81
|
+
|
|
57
82
|
@traced(name="connections_list", run_type="uipath")
|
|
58
83
|
def list(
|
|
59
84
|
self,
|
|
@@ -186,6 +211,33 @@ class ConnectionsService(BaseService):
|
|
|
186
211
|
response = await self.request_async(spec.method, url=spec.endpoint)
|
|
187
212
|
return Connection.model_validate(response.json())
|
|
188
213
|
|
|
214
|
+
@traced(
|
|
215
|
+
name="connections_metadata",
|
|
216
|
+
run_type="uipath",
|
|
217
|
+
hide_output=True,
|
|
218
|
+
)
|
|
219
|
+
async def metadata_async(
|
|
220
|
+
self, element_instance_id: int, tool_path: str, schema_mode: bool = True
|
|
221
|
+
) -> ConnectionMetadata:
|
|
222
|
+
"""Asynchronously retrieve connection API metadata.
|
|
223
|
+
|
|
224
|
+
This method fetches the metadata for a connection,
|
|
225
|
+
which can be used to establish communication with an external service.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
element_instance_id (int): The element instance ID of the connection.
|
|
229
|
+
tool_path (str): The tool path to retrieve metadata for.
|
|
230
|
+
schema_mode (bool): Whether or not to represent the output schema in the response fields.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
ConnectionMetadata: The connection metadata.
|
|
234
|
+
"""
|
|
235
|
+
spec = self._metadata_spec(element_instance_id, tool_path, schema_mode)
|
|
236
|
+
response = await self.request_async(
|
|
237
|
+
spec.method, url=spec.endpoint, headers=spec.headers
|
|
238
|
+
)
|
|
239
|
+
return ConnectionMetadata.model_validate(response.json())
|
|
240
|
+
|
|
189
241
|
@traced(
|
|
190
242
|
name="connections_retrieve_token",
|
|
191
243
|
run_type="uipath",
|
|
@@ -324,6 +376,20 @@ class ConnectionsService(BaseService):
|
|
|
324
376
|
endpoint=Endpoint(f"/connections_/api/v1/Connections/{key}"),
|
|
325
377
|
)
|
|
326
378
|
|
|
379
|
+
def _metadata_spec(
|
|
380
|
+
self, element_instance_id: int, tool_path: str, schema_mode: bool
|
|
381
|
+
) -> RequestSpec:
|
|
382
|
+
metadata_endpoint_url = f"/elements_/v3/element/instances/{element_instance_id}/elements/{tool_path}/metadata"
|
|
383
|
+
return RequestSpec(
|
|
384
|
+
method="GET",
|
|
385
|
+
endpoint=Endpoint(metadata_endpoint_url),
|
|
386
|
+
headers={
|
|
387
|
+
"accept": "application/schema+json"
|
|
388
|
+
if schema_mode
|
|
389
|
+
else "application/json"
|
|
390
|
+
},
|
|
391
|
+
)
|
|
392
|
+
|
|
327
393
|
def _retrieve_token_spec(
|
|
328
394
|
self, key: str, token_type: ConnectionTokenType = ConnectionTokenType.DIRECT
|
|
329
395
|
) -> RequestSpec:
|
|
@@ -5,10 +5,12 @@ from httpx import Response
|
|
|
5
5
|
from pydantic import TypeAdapter
|
|
6
6
|
|
|
7
7
|
from uipath._cli._evals._models._evaluation_set import LLMMockingStrategy
|
|
8
|
+
from uipath._cli._push.sw_file_handler import SwFileHandler
|
|
8
9
|
from uipath._cli._utils._studio_project import (
|
|
9
10
|
ProjectFile,
|
|
10
11
|
ProjectFolder,
|
|
11
12
|
StudioClient,
|
|
13
|
+
StudioSolutionsClient,
|
|
12
14
|
resolve_path,
|
|
13
15
|
)
|
|
14
16
|
from uipath.agent.models.agent import (
|
|
@@ -27,6 +29,20 @@ async def get_file(
|
|
|
27
29
|
return await studio_client.download_file_async(resolved.id)
|
|
28
30
|
|
|
29
31
|
|
|
32
|
+
async def create_agent_project(solution_id: str, project_name: str) -> str:
|
|
33
|
+
studio_client = StudioSolutionsClient(solution_id=solution_id)
|
|
34
|
+
project = await studio_client.create_project_async(project_name=project_name)
|
|
35
|
+
return project["id"]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def upload_project_files(project_id: str, root: str) -> None:
|
|
39
|
+
sw_file_handler = SwFileHandler(
|
|
40
|
+
project_id=project_id,
|
|
41
|
+
directory=root,
|
|
42
|
+
)
|
|
43
|
+
await sw_file_handler.upload_source_files({})
|
|
44
|
+
|
|
45
|
+
|
|
30
46
|
async def load_agent_definition(project_id: str) -> AgentDefinition:
|
|
31
47
|
studio_client = StudioClient(project_id=project_id)
|
|
32
48
|
project_structure = await studio_client.get_project_structure_async()
|
|
@@ -3,7 +3,7 @@ from .actions import Action
|
|
|
3
3
|
from .assets import Asset, UserAsset
|
|
4
4
|
from .attachment import Attachment
|
|
5
5
|
from .buckets import Bucket
|
|
6
|
-
from .connections import Connection, ConnectionToken, EventArguments
|
|
6
|
+
from .connections import Connection, ConnectionMetadata, ConnectionToken, EventArguments
|
|
7
7
|
from .context_grounding import ContextGroundingQueryResponse
|
|
8
8
|
from .context_grounding_index import ContextGroundingIndex
|
|
9
9
|
from .errors import BaseUrlMissingError, SecretMissingError
|
|
@@ -38,6 +38,7 @@ __all__ = [
|
|
|
38
38
|
"QueueItemPriority",
|
|
39
39
|
"TransactionItemResult",
|
|
40
40
|
"Connection",
|
|
41
|
+
"ConnectionMetadata",
|
|
41
42
|
"ConnectionToken",
|
|
42
43
|
"EventArguments",
|
|
43
44
|
"Job",
|
|
@@ -4,6 +4,14 @@ from typing import Any, Optional
|
|
|
4
4
|
from pydantic import BaseModel, ConfigDict, Field
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
class ConnectionMetadata(BaseModel):
|
|
8
|
+
"""Metadata about a connection."""
|
|
9
|
+
|
|
10
|
+
fields: dict[str, Any] = Field(default_factory=dict, alias="fields")
|
|
11
|
+
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
13
|
+
|
|
14
|
+
|
|
7
15
|
class Connection(BaseModel):
|
|
8
16
|
model_config = ConfigDict(
|
|
9
17
|
validate_by_name=True,
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Json schema to dynamic pydantic model."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Optional, Type, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field, create_model
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def jsonschema_to_pydantic(
|
|
9
|
+
schema: dict[str, Any],
|
|
10
|
+
definitions: Optional[dict[str, Any]] = None,
|
|
11
|
+
) -> Type[BaseModel]:
|
|
12
|
+
"""Convert a schema dict to a pydantic model.
|
|
13
|
+
|
|
14
|
+
Modified version of https://github.com/kreneskyp/jsonschema-pydantic to account for two unresolved issues.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
schema: JSON schema.
|
|
18
|
+
definitions: Definitions dict. Defaults to `$def`.
|
|
19
|
+
|
|
20
|
+
Returns: Pydantic model.
|
|
21
|
+
"""
|
|
22
|
+
title = schema.get("title", "DynamicModel")
|
|
23
|
+
assert isinstance(title, str), "Title of a model must be a string."
|
|
24
|
+
|
|
25
|
+
description = schema.get("description", None)
|
|
26
|
+
|
|
27
|
+
# top level schema provides definitions
|
|
28
|
+
if definitions is None:
|
|
29
|
+
if "$defs" in schema:
|
|
30
|
+
definitions = schema["$defs"]
|
|
31
|
+
elif "definitions" in schema:
|
|
32
|
+
definitions = schema["definitions"]
|
|
33
|
+
else:
|
|
34
|
+
definitions = {}
|
|
35
|
+
|
|
36
|
+
def convert_type(prop: dict[str, Any]) -> Any:
|
|
37
|
+
if "$ref" in prop:
|
|
38
|
+
ref_path = prop["$ref"].split("/")
|
|
39
|
+
ref = definitions[ref_path[-1]]
|
|
40
|
+
return jsonschema_to_pydantic(ref, definitions)
|
|
41
|
+
|
|
42
|
+
if "type" in prop:
|
|
43
|
+
type_mapping = {
|
|
44
|
+
"string": str,
|
|
45
|
+
"number": float,
|
|
46
|
+
"integer": int,
|
|
47
|
+
"boolean": bool,
|
|
48
|
+
"array": List,
|
|
49
|
+
"object": Dict[str, Any],
|
|
50
|
+
"null": None,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type_ = prop["type"]
|
|
54
|
+
|
|
55
|
+
if type_ == "array":
|
|
56
|
+
item_type: Any = convert_type(prop.get("items", {}))
|
|
57
|
+
assert isinstance(item_type, type)
|
|
58
|
+
return List[item_type] # noqa F821
|
|
59
|
+
elif type_ == "object":
|
|
60
|
+
if "properties" in prop:
|
|
61
|
+
return jsonschema_to_pydantic(prop, definitions)
|
|
62
|
+
else:
|
|
63
|
+
return Dict[str, Any]
|
|
64
|
+
else:
|
|
65
|
+
return type_mapping.get(type_, Any)
|
|
66
|
+
|
|
67
|
+
elif "allOf" in prop:
|
|
68
|
+
combined_fields = {}
|
|
69
|
+
for sub_schema in prop["allOf"]:
|
|
70
|
+
model = jsonschema_to_pydantic(sub_schema, definitions)
|
|
71
|
+
combined_fields.update(model.__annotations__)
|
|
72
|
+
return create_model("CombinedModel", **combined_fields)
|
|
73
|
+
|
|
74
|
+
elif "anyOf" in prop:
|
|
75
|
+
unioned_types = tuple(
|
|
76
|
+
convert_type(sub_schema) for sub_schema in prop["anyOf"]
|
|
77
|
+
)
|
|
78
|
+
return Union[unioned_types]
|
|
79
|
+
elif prop == {} or "type" not in prop:
|
|
80
|
+
return Any
|
|
81
|
+
else:
|
|
82
|
+
raise ValueError(f"Unsupported schema: {prop}")
|
|
83
|
+
|
|
84
|
+
fields: dict[str, Any] = {}
|
|
85
|
+
required_fields = schema.get("required", [])
|
|
86
|
+
|
|
87
|
+
for name, prop in schema.get("properties", {}).items():
|
|
88
|
+
pydantic_type = convert_type(prop)
|
|
89
|
+
field_kwargs = {}
|
|
90
|
+
if "default" in prop:
|
|
91
|
+
field_kwargs["default"] = prop["default"]
|
|
92
|
+
if name not in required_fields:
|
|
93
|
+
# Note that we do not make this optional. This is due to a limitation in Pydantic/Python.
|
|
94
|
+
# If we convert the Optional type back to json schema, it is represented as type | None.
|
|
95
|
+
# pydantic_type = Optional[pydantic_type]
|
|
96
|
+
|
|
97
|
+
if "default" not in field_kwargs:
|
|
98
|
+
field_kwargs["default"] = None
|
|
99
|
+
if "description" in prop:
|
|
100
|
+
field_kwargs["description"] = prop["description"]
|
|
101
|
+
if "title" in prop:
|
|
102
|
+
field_kwargs["title"] = prop["title"]
|
|
103
|
+
|
|
104
|
+
fields[name] = (pydantic_type, Field(**field_kwargs))
|
|
105
|
+
|
|
106
|
+
convert_type(schema.get("properties", {}).get("choices", {}))
|
|
107
|
+
|
|
108
|
+
model = create_model(title, **fields)
|
|
109
|
+
if description:
|
|
110
|
+
model.__doc__ = description
|
|
111
|
+
return model
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from uipath.utils.dynamic_schema import jsonschema_to_pydantic
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_dynamic_schema():
|
|
9
|
+
# Arrange
|
|
10
|
+
class InnerSchema(BaseModel):
|
|
11
|
+
"""Inner schema description."""
|
|
12
|
+
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
class Schema(BaseModel):
|
|
16
|
+
"""Schema description."""
|
|
17
|
+
|
|
18
|
+
string: str = Field(
|
|
19
|
+
default="", title="String Title", description="String Description"
|
|
20
|
+
)
|
|
21
|
+
optional_string: Optional[str] = Field(
|
|
22
|
+
default=None,
|
|
23
|
+
title="Optional String Title",
|
|
24
|
+
description="Optional String Description",
|
|
25
|
+
)
|
|
26
|
+
list_str: List[str] = Field(
|
|
27
|
+
default=[], title="List String", description="List String Description"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
integer: int = Field(
|
|
31
|
+
default=0, title="Integer Title", description="Integer Description"
|
|
32
|
+
)
|
|
33
|
+
optional_integer: Optional[int] = Field(
|
|
34
|
+
default=None,
|
|
35
|
+
title="Option Integer Title",
|
|
36
|
+
description="Option Integer Description",
|
|
37
|
+
)
|
|
38
|
+
list_integer: List[int] = Field(
|
|
39
|
+
default=[],
|
|
40
|
+
title="List Integer Title",
|
|
41
|
+
description="List Integer Description",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
floating: float = Field(
|
|
45
|
+
default=0.0, title="Floating Title", description="Floating Description"
|
|
46
|
+
)
|
|
47
|
+
optional_floating: Optional[float] = Field(
|
|
48
|
+
default=None,
|
|
49
|
+
title="Option Floating Title",
|
|
50
|
+
description="Option Floating Description",
|
|
51
|
+
)
|
|
52
|
+
list_floating: List[float] = Field(
|
|
53
|
+
default=[],
|
|
54
|
+
title="List Floating Title",
|
|
55
|
+
description="List Floating Description",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
boolean: bool = Field(
|
|
59
|
+
default=False, title="Boolean Title", description="Boolean Description"
|
|
60
|
+
)
|
|
61
|
+
optional_boolean: Optional[bool] = Field(
|
|
62
|
+
default=None,
|
|
63
|
+
title="Option Boolean Title",
|
|
64
|
+
description="Option Boolean Description",
|
|
65
|
+
)
|
|
66
|
+
list_boolean: List[bool] = Field(
|
|
67
|
+
default=[],
|
|
68
|
+
title="List Boolean Title",
|
|
69
|
+
description="List Boolean Description",
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
nested_object: InnerSchema = Field(
|
|
73
|
+
default=InnerSchema(),
|
|
74
|
+
title="Nested Object Title",
|
|
75
|
+
description="Nested Object Description",
|
|
76
|
+
)
|
|
77
|
+
optional_nested_object: Optional[InnerSchema] = Field(
|
|
78
|
+
default=None,
|
|
79
|
+
title="Optional Nested Object Title",
|
|
80
|
+
description="Optional Nested Object Description",
|
|
81
|
+
)
|
|
82
|
+
list_nested_object: List[InnerSchema] = Field(
|
|
83
|
+
default=[],
|
|
84
|
+
title="List Nested Object Title",
|
|
85
|
+
description="List Nested Object Description",
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
schema_json = Schema.model_json_schema()
|
|
89
|
+
|
|
90
|
+
# Act
|
|
91
|
+
dynamic_schema = jsonschema_to_pydantic(schema_json)
|
|
92
|
+
dynamic_schema_json = dynamic_schema.model_json_schema()
|
|
93
|
+
|
|
94
|
+
# Assert
|
|
95
|
+
assert dynamic_schema_json == schema_json
|