uipath 2.1.88__tar.gz → 2.1.89__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.88 → uipath-2.1.89}/PKG-INFO +1 -1
- {uipath-2.1.88 → uipath-2.1.89}/pyproject.toml +1 -1
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluation_set.py +13 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_runtime.py +18 -0
- uipath-2.1.89/src/uipath/_cli/_evals/mocks/input_mocker.py +111 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocker.py +6 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_push/sw_file_handler.py +24 -40
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_logging.py +4 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_project_files.py +67 -37
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_pull.py +22 -1
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/_utils.py +14 -1
- uipath-2.1.89/src/uipath/agent/loop/__init__.py +17 -0
- uipath-2.1.89/src/uipath/agent/loop/prompts.py +57 -0
- uipath-2.1.89/src/uipath/agent/loop/tools.py +42 -0
- uipath-2.1.89/tests/cli/eval/mocks/test_input_mocker.py +106 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/eval/mocks/test_mocks.py +1 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_pull.py +7 -7
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_push.py +21 -21
- {uipath-2.1.88 → uipath-2.1.89}/uv.lock +1 -1
- {uipath-2.1.88 → uipath-2.1.89}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.cursorrules +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.editorconfig +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.gitattributes +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/labeler.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.github/workflows/test.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.gitignore +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.python-version +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.vscode/extensions.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.vscode/launch.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/.vscode/settings.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/CONTRIBUTING.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/LICENSE +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/FAQ.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/favicon.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/llms.txt +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/cli/index.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/actions.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/assets.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/attachments.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/buckets.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/connections.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/documents.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/documents_models.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/getting_started.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/jobs.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/processes.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/queues.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/core/traced.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/hooks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/index.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/overrides/main.html +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/release_policy.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/justfile +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/mkdocs.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/py.typed +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/evals/evaluators/equality.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/scripts/debug_test.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/scripts/update_agents_md.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_config.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/job.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/py.typed +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_init.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_run.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.88 → uipath-2.1.89}/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.89
|
|
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.89"
|
|
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"
|
|
@@ -44,6 +44,15 @@ class LLMMockingStrategy(BaseMockingStrategy):
|
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
class InputMockingStrategy(BaseModel):
|
|
48
|
+
prompt: str = Field(..., alias="prompt")
|
|
49
|
+
model: Optional[ModelSettings] = Field(None, alias="model")
|
|
50
|
+
|
|
51
|
+
model_config = ConfigDict(
|
|
52
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
47
56
|
class MockingArgument(BaseModel):
|
|
48
57
|
args: List[Any] = Field(default_factory=lambda: [], alias="args")
|
|
49
58
|
kwargs: Dict[str, Any] = Field(default_factory=lambda: {}, alias="kwargs")
|
|
@@ -110,6 +119,10 @@ class EvaluationItem(BaseModel):
|
|
|
110
119
|
default=None,
|
|
111
120
|
alias="mockingStrategy",
|
|
112
121
|
)
|
|
122
|
+
input_mocking_strategy: Optional[InputMockingStrategy] = Field(
|
|
123
|
+
default=None,
|
|
124
|
+
alias="inputMockingStrategy",
|
|
125
|
+
)
|
|
113
126
|
|
|
114
127
|
|
|
115
128
|
class EvaluationSet(BaseModel):
|
|
@@ -11,6 +11,10 @@ from opentelemetry import context as context_api
|
|
|
11
11
|
from opentelemetry.sdk.trace import ReadableSpan, Span
|
|
12
12
|
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
|
|
13
13
|
|
|
14
|
+
from uipath._cli._evals.mocks.input_mocker import (
|
|
15
|
+
generate_llm_input,
|
|
16
|
+
)
|
|
17
|
+
|
|
14
18
|
from ..._events._event_bus import EventBus
|
|
15
19
|
from ..._events._events import (
|
|
16
20
|
EvalItemExceptionDetails,
|
|
@@ -318,6 +322,10 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
|
|
|
318
322
|
evaluators: List[BaseEvaluator[Any]],
|
|
319
323
|
event_bus: EventBus,
|
|
320
324
|
) -> EvaluationRunResult:
|
|
325
|
+
# Generate LLM-based input if input_mocking_strategy is defined
|
|
326
|
+
if eval_item.input_mocking_strategy:
|
|
327
|
+
eval_item = await self._generate_input_for_eval(eval_item)
|
|
328
|
+
|
|
321
329
|
set_execution_context(eval_item, self.span_collector)
|
|
322
330
|
|
|
323
331
|
await event_bus.publish(
|
|
@@ -417,6 +425,16 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
|
|
|
417
425
|
|
|
418
426
|
return evaluation_run_results
|
|
419
427
|
|
|
428
|
+
async def _generate_input_for_eval(
|
|
429
|
+
self, eval_item: EvaluationItem
|
|
430
|
+
) -> EvaluationItem:
|
|
431
|
+
"""Use LLM to generate a mock input for an evaluation item."""
|
|
432
|
+
# TODO(bai): get the input schema from agent definition, once it is available there.
|
|
433
|
+
input_schema: dict[str, Any] = {}
|
|
434
|
+
generated_input = await generate_llm_input(eval_item, input_schema)
|
|
435
|
+
updated_eval_item = eval_item.model_copy(update={"inputs": generated_input})
|
|
436
|
+
return updated_eval_item
|
|
437
|
+
|
|
420
438
|
def _get_and_clear_execution_data(
|
|
421
439
|
self, execution_id: str
|
|
422
440
|
) -> tuple[List[ReadableSpan], list[logging.LogRecord]]:
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""LLM Input Mocker implementation."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from typing import Any, Dict
|
|
6
|
+
|
|
7
|
+
from uipath import UiPath
|
|
8
|
+
from uipath._cli._evals._models._evaluation_set import EvaluationItem
|
|
9
|
+
from uipath.tracing._traced import traced
|
|
10
|
+
|
|
11
|
+
from .mocker import UiPathInputMockingError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_input_mocking_prompt(
|
|
15
|
+
input_schema: str,
|
|
16
|
+
input_generation_instructions: str,
|
|
17
|
+
expected_behavior: str,
|
|
18
|
+
expected_output: str,
|
|
19
|
+
) -> str:
|
|
20
|
+
"""Generate the LLM input mocking prompt."""
|
|
21
|
+
current_datetime = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
|
22
|
+
|
|
23
|
+
return f"""You are simulating input for automated testing purposes of an Agent as part of a simulation run.
|
|
24
|
+
You will need to generate realistic input to a LLM agent which will call various tools to achieve a goal. This must be in the exact format of the INPUT_SCHEMA.
|
|
25
|
+
You may need to follow specific INPUT_GENERATION_INSTRUCTIONS. If no relevant instructions are provided pertaining to input generation, use the other provided information and your own judgement to generate input.
|
|
26
|
+
If the INPUT_GENERATION_INSTRUCTIONS are provided, you MUST follow them exactly. For example if the instructions say to generate a value for a field to be before a certain calendar date, you must generate a value that is before that date.
|
|
27
|
+
|
|
28
|
+
The current date and time is: {current_datetime}
|
|
29
|
+
|
|
30
|
+
#INPUT_SCHEMA: You MUST OUTPUT THIS EXACT JSON SCHEMA
|
|
31
|
+
{input_schema}
|
|
32
|
+
#END_INPUT_SCHEMA
|
|
33
|
+
|
|
34
|
+
#INPUT_GENERATION_INSTRUCTIONS
|
|
35
|
+
{input_generation_instructions}
|
|
36
|
+
#END_INPUT_GENERATION_INSTRUCTIONS
|
|
37
|
+
|
|
38
|
+
#EXPECTED_BEHAVIOR
|
|
39
|
+
{expected_behavior}
|
|
40
|
+
#END_EXPECTED_BEHAVIOR
|
|
41
|
+
|
|
42
|
+
#EXPECTED_OUTPUT
|
|
43
|
+
{expected_output}
|
|
44
|
+
#END_EXPECTED_OUTPUT
|
|
45
|
+
|
|
46
|
+
Based on the above information, provide a realistic input to the LLM agent. Your response should:
|
|
47
|
+
1. Match the expected input format according to the INPUT_SCHEMA exactly
|
|
48
|
+
2. Be consistent with the style and level of detail in the example inputs
|
|
49
|
+
3. Consider the context of the the agent being tested
|
|
50
|
+
4. Be realistic and representative of what a real user might say or ask
|
|
51
|
+
|
|
52
|
+
OUTPUT: ONLY the simulated agent input in the exact format of the INPUT_SCHEMA in valid JSON. Do not include any explanations, quotation marks, or markdown."""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@traced(name="__mocker__")
|
|
56
|
+
async def generate_llm_input(
|
|
57
|
+
evaluation_item: EvaluationItem,
|
|
58
|
+
input_schema: Dict[str, Any],
|
|
59
|
+
) -> Dict[str, Any]:
|
|
60
|
+
"""Generate synthetic input using an LLM based on the evaluation context."""
|
|
61
|
+
try:
|
|
62
|
+
llm = UiPath().llm
|
|
63
|
+
|
|
64
|
+
prompt = get_input_mocking_prompt(
|
|
65
|
+
input_schema=json.dumps(input_schema, indent=2),
|
|
66
|
+
input_generation_instructions=evaluation_item.input_mocking_strategy.prompt
|
|
67
|
+
if evaluation_item.input_mocking_strategy
|
|
68
|
+
else "",
|
|
69
|
+
expected_behavior=evaluation_item.expected_agent_behavior or "",
|
|
70
|
+
expected_output=json.dumps(evaluation_item.expected_output, indent=2)
|
|
71
|
+
if evaluation_item.expected_output
|
|
72
|
+
else "",
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
response_format = {
|
|
76
|
+
"type": "json_schema",
|
|
77
|
+
"json_schema": {
|
|
78
|
+
"name": "agent_input",
|
|
79
|
+
"strict": True,
|
|
80
|
+
"schema": input_schema,
|
|
81
|
+
},
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
model_parameters = (
|
|
85
|
+
evaluation_item.input_mocking_strategy.model
|
|
86
|
+
if evaluation_item.input_mocking_strategy
|
|
87
|
+
else None
|
|
88
|
+
)
|
|
89
|
+
completion_kwargs = (
|
|
90
|
+
model_parameters.model_dump(by_alias=False, exclude_none=True)
|
|
91
|
+
if model_parameters
|
|
92
|
+
else {}
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
response = await llm.chat_completions(
|
|
96
|
+
[{"role": "user", "content": prompt}],
|
|
97
|
+
response_format=response_format,
|
|
98
|
+
**completion_kwargs,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
generated_input_str = response.choices[0].message.content
|
|
102
|
+
|
|
103
|
+
return json.loads(generated_input_str)
|
|
104
|
+
except json.JSONDecodeError as e:
|
|
105
|
+
raise UiPathInputMockingError(
|
|
106
|
+
f"Failed to parse LLM response as JSON: {str(e)}"
|
|
107
|
+
) from e
|
|
108
|
+
except UiPathInputMockingError:
|
|
109
|
+
raise
|
|
110
|
+
except Exception as e:
|
|
111
|
+
raise UiPathInputMockingError(f"Failed to generate input: {str(e)}") from e
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
"""Studio Web File Handler for managing file operations in UiPath projects."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
+
import logging
|
|
4
5
|
import os
|
|
5
6
|
from datetime import datetime, timezone
|
|
6
7
|
from typing import Any, Dict, Optional, Set
|
|
7
8
|
|
|
8
|
-
import click
|
|
9
|
-
|
|
10
9
|
from ...models.exceptions import EnrichedException
|
|
11
|
-
from .._utils._console import ConsoleLogger
|
|
12
10
|
from .._utils._constants import (
|
|
13
11
|
AGENT_INITIAL_CODE_VERSION,
|
|
14
12
|
AGENT_STORAGE_VERSION,
|
|
@@ -30,6 +28,8 @@ from .._utils._studio_project import (
|
|
|
30
28
|
StudioClient,
|
|
31
29
|
)
|
|
32
30
|
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
33
|
|
|
34
34
|
class SwFileHandler:
|
|
35
35
|
"""Handler for Studio Web file operations.
|
|
@@ -58,7 +58,6 @@ class SwFileHandler:
|
|
|
58
58
|
"""
|
|
59
59
|
self.directory = directory
|
|
60
60
|
self.include_uv_lock = include_uv_lock
|
|
61
|
-
self.console = ConsoleLogger()
|
|
62
61
|
self._studio_client = StudioClient(project_id)
|
|
63
62
|
self._project_structure: Optional[ProjectStructure] = None
|
|
64
63
|
|
|
@@ -156,9 +155,7 @@ class SwFileHandler:
|
|
|
156
155
|
|
|
157
156
|
for local_file in local_files:
|
|
158
157
|
if not os.path.exists(local_file.file_path):
|
|
159
|
-
|
|
160
|
-
f"File not found: {click.style(local_file.file_path, fg='cyan')}"
|
|
161
|
-
)
|
|
158
|
+
logger.info(f"File not found: '{local_file.file_path}'")
|
|
162
159
|
continue
|
|
163
160
|
|
|
164
161
|
# Skip agent.json as it's handled separately
|
|
@@ -175,9 +172,7 @@ class SwFileHandler:
|
|
|
175
172
|
id=remote_file.id, content_file_path=local_file.file_path
|
|
176
173
|
)
|
|
177
174
|
)
|
|
178
|
-
|
|
179
|
-
f"Updating {click.style(local_file.file_name, fg='yellow')}"
|
|
180
|
-
)
|
|
175
|
+
logger.info(f"Updating '{local_file.file_name}'")
|
|
181
176
|
else:
|
|
182
177
|
parent_path = os.path.dirname(local_file.relative_path)
|
|
183
178
|
structural_migration.added_resources.append(
|
|
@@ -188,9 +183,7 @@ class SwFileHandler:
|
|
|
188
183
|
else "source_code",
|
|
189
184
|
)
|
|
190
185
|
)
|
|
191
|
-
|
|
192
|
-
f"Uploading {click.style(local_file.relative_path, fg='cyan')}"
|
|
193
|
-
)
|
|
186
|
+
logger.info(f"Uploading '{local_file.relative_path}'")
|
|
194
187
|
|
|
195
188
|
# identify and add deleted files
|
|
196
189
|
structural_migration.deleted_resources.extend(
|
|
@@ -236,9 +229,7 @@ class SwFileHandler:
|
|
|
236
229
|
for _, remote_file in source_code_files.items():
|
|
237
230
|
if remote_file.id not in processed_source_file_paths:
|
|
238
231
|
deleted_files.add(remote_file.id)
|
|
239
|
-
|
|
240
|
-
f"Deleting {click.style(remote_file.name, fg='bright_red')}"
|
|
241
|
-
)
|
|
232
|
+
logger.info(f"Deleting '{remote_file.name}'")
|
|
242
233
|
|
|
243
234
|
return deleted_files
|
|
244
235
|
|
|
@@ -263,16 +254,14 @@ class SwFileHandler:
|
|
|
263
254
|
for folder_info in empty_folder_ids:
|
|
264
255
|
try:
|
|
265
256
|
await self._studio_client.delete_item_async(folder_info["id"])
|
|
266
|
-
|
|
267
|
-
f"Deleted empty folder {click.style(folder_info['name'], fg='bright_red')}"
|
|
268
|
-
)
|
|
257
|
+
logger.info(f"Deleted empty folder '{folder_info['name']}'")
|
|
269
258
|
except Exception as e:
|
|
270
|
-
|
|
271
|
-
f"Failed to delete empty folder {folder_info['name']}: {str(e)}"
|
|
259
|
+
logger.warning(
|
|
260
|
+
f"Failed to delete empty folder '{folder_info['name']}': {str(e)}"
|
|
272
261
|
)
|
|
273
262
|
|
|
274
263
|
except Exception as e:
|
|
275
|
-
|
|
264
|
+
logger.warning(f"Failed to cleanup empty folders: {str(e)}")
|
|
276
265
|
|
|
277
266
|
def _collect_empty_folders(self, folder: ProjectFolder) -> list[dict[str, str]]:
|
|
278
267
|
"""Recursively collect IDs and names of empty folders.
|
|
@@ -335,8 +324,8 @@ class SwFileHandler:
|
|
|
335
324
|
entry_points_json["entryPoints"] = uipath_config["entryPoints"]
|
|
336
325
|
|
|
337
326
|
except Exception:
|
|
338
|
-
|
|
339
|
-
"Could not parse existing entry-points.json file, using default version"
|
|
327
|
+
logger.info(
|
|
328
|
+
"Could not parse existing 'entry-points.json' file, using default version"
|
|
340
329
|
)
|
|
341
330
|
structural_migration.modified_resources.append(
|
|
342
331
|
ModifiedResource(
|
|
@@ -344,12 +333,10 @@ class SwFileHandler:
|
|
|
344
333
|
content_string=json.dumps(entry_points_json),
|
|
345
334
|
)
|
|
346
335
|
)
|
|
347
|
-
|
|
348
|
-
f"Updating {click.style('entry-points.json', fg='yellow')}"
|
|
349
|
-
)
|
|
336
|
+
logger.info("Updating 'entry-points.json'")
|
|
350
337
|
|
|
351
338
|
else:
|
|
352
|
-
|
|
339
|
+
logger.info(
|
|
353
340
|
"'entry-points.json' file does not exist in Studio Web project, initializing using default version"
|
|
354
341
|
)
|
|
355
342
|
entry_points_json = {
|
|
@@ -363,9 +350,7 @@ class SwFileHandler:
|
|
|
363
350
|
content_string=json.dumps(entry_points_json),
|
|
364
351
|
)
|
|
365
352
|
)
|
|
366
|
-
|
|
367
|
-
f"Uploading {click.style('entry-points.json', fg='cyan')}"
|
|
368
|
-
)
|
|
353
|
+
logger.info("Uploading 'entry-points.json'")
|
|
369
354
|
|
|
370
355
|
async def _prepare_agent_json_migration(
|
|
371
356
|
self,
|
|
@@ -400,9 +385,10 @@ class SwFileHandler:
|
|
|
400
385
|
input_schema = uipath_config["entryPoints"][0]["input"]
|
|
401
386
|
output_schema = uipath_config["entryPoints"][0]["output"]
|
|
402
387
|
except (FileNotFoundError, KeyError) as e:
|
|
403
|
-
|
|
388
|
+
logger.error(
|
|
404
389
|
f"Unable to extract entrypoints from configuration file. Please run 'uipath init' : {str(e)}",
|
|
405
390
|
)
|
|
391
|
+
return
|
|
406
392
|
|
|
407
393
|
author = get_author_from_token_or_toml()
|
|
408
394
|
|
|
@@ -444,8 +430,8 @@ class SwFileHandler:
|
|
|
444
430
|
AGENT_INITIAL_CODE_VERSION[:-1] + "1"
|
|
445
431
|
)
|
|
446
432
|
except Exception:
|
|
447
|
-
|
|
448
|
-
"Could not parse existing agent.json file, using default version"
|
|
433
|
+
logger.info(
|
|
434
|
+
"Could not parse existing 'agent.json' file, using default version"
|
|
449
435
|
)
|
|
450
436
|
|
|
451
437
|
structural_migration.modified_resources.append(
|
|
@@ -454,9 +440,9 @@ class SwFileHandler:
|
|
|
454
440
|
content_string=json.dumps(agent_json),
|
|
455
441
|
)
|
|
456
442
|
)
|
|
457
|
-
|
|
443
|
+
logger.info("Updating 'agent.json'")
|
|
458
444
|
else:
|
|
459
|
-
|
|
445
|
+
logger.info(
|
|
460
446
|
"'agent.json' file does not exist in Studio Web project, initializing using default version"
|
|
461
447
|
)
|
|
462
448
|
structural_migration.added_resources.append(
|
|
@@ -465,7 +451,7 @@ class SwFileHandler:
|
|
|
465
451
|
content_string=json.dumps(agent_json),
|
|
466
452
|
)
|
|
467
453
|
)
|
|
468
|
-
|
|
454
|
+
logger.info("Uploading 'agent.json'")
|
|
469
455
|
|
|
470
456
|
async def upload_source_files(self, config_data: dict[str, Any]) -> None:
|
|
471
457
|
"""Main method to upload source files to the UiPath project.
|
|
@@ -502,9 +488,7 @@ class SwFileHandler:
|
|
|
502
488
|
if not source_code_folder:
|
|
503
489
|
await self._studio_client.create_folder_async("source_code")
|
|
504
490
|
|
|
505
|
-
|
|
506
|
-
f"Created {click.style('source_code', fg='cyan')} folder"
|
|
507
|
-
)
|
|
491
|
+
logger.info("Created 'source_code' folder.")
|
|
508
492
|
source_code_files = {}
|
|
509
493
|
|
|
510
494
|
# Get files to upload and process them
|
|
@@ -266,6 +266,10 @@ class LogsInterceptor:
|
|
|
266
266
|
def writable(self) -> bool:
|
|
267
267
|
return True
|
|
268
268
|
|
|
269
|
+
def __getattr__(self, name):
|
|
270
|
+
# Delegate any unknown attributes to the original file
|
|
271
|
+
return getattr(self.sys_file, name)
|
|
272
|
+
|
|
269
273
|
# Set up stdout and stderr loggers
|
|
270
274
|
stdout_logger = logging.getLogger("stdout")
|
|
271
275
|
stderr_logger = logging.getLogger("stderr")
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# type: ignore
|
|
2
2
|
import hashlib
|
|
3
3
|
import json
|
|
4
|
+
import logging
|
|
4
5
|
import os
|
|
5
6
|
import re
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import Any, Dict, Optional, Tuple
|
|
8
|
+
from typing import Any, Dict, Optional, Protocol, Tuple
|
|
8
9
|
|
|
9
|
-
import click
|
|
10
10
|
from pydantic import BaseModel
|
|
11
11
|
|
|
12
12
|
from .._utils._console import ConsoleLogger
|
|
@@ -22,6 +22,35 @@ try:
|
|
|
22
22
|
import tomllib
|
|
23
23
|
except ImportError:
|
|
24
24
|
import tomli as tomllib
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FileConflictHandler(Protocol):
|
|
29
|
+
"""Protocol for handling file conflicts."""
|
|
30
|
+
|
|
31
|
+
def should_overwrite(
|
|
32
|
+
self, file_path: str, local_hash: str, remote_hash: str
|
|
33
|
+
) -> bool:
|
|
34
|
+
"""Return True to overwrite, False to skip."""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AlwaysOverwriteHandler:
|
|
39
|
+
"""Handler that always overwrites files."""
|
|
40
|
+
|
|
41
|
+
def should_overwrite(
|
|
42
|
+
self, file_path: str, local_hash: str, remote_hash: str
|
|
43
|
+
) -> bool:
|
|
44
|
+
return True
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class AlwaysSkipHandler:
|
|
48
|
+
"""Handler that always skips conflicts."""
|
|
49
|
+
|
|
50
|
+
def should_overwrite(
|
|
51
|
+
self, file_path: str, local_hash: str, remote_hash: str
|
|
52
|
+
) -> bool:
|
|
53
|
+
return False
|
|
25
54
|
|
|
26
55
|
|
|
27
56
|
class FileInfo(BaseModel):
|
|
@@ -483,10 +512,37 @@ def collect_files_from_folder(
|
|
|
483
512
|
collect_files_from_folder(subfolder, subfolder_path, files_dict)
|
|
484
513
|
|
|
485
514
|
|
|
515
|
+
async def pull_project(
|
|
516
|
+
project_id: str,
|
|
517
|
+
download_configuration: dict[str, Path],
|
|
518
|
+
conflict_handler: Optional[FileConflictHandler] = None,
|
|
519
|
+
):
|
|
520
|
+
"""Pull project with configurable conflict handling."""
|
|
521
|
+
if conflict_handler is None:
|
|
522
|
+
conflict_handler = AlwaysOverwriteHandler()
|
|
523
|
+
|
|
524
|
+
studio_client = StudioClient(project_id)
|
|
525
|
+
|
|
526
|
+
try:
|
|
527
|
+
structure = await studio_client.get_project_structure_async()
|
|
528
|
+
for source_key, destination in download_configuration.items():
|
|
529
|
+
source_folder = get_folder_by_name(structure, source_key)
|
|
530
|
+
if source_folder:
|
|
531
|
+
await download_folder_files(
|
|
532
|
+
studio_client, source_folder, destination, conflict_handler
|
|
533
|
+
)
|
|
534
|
+
else:
|
|
535
|
+
logger.warning(f"No '{source_key}' folder found in remote project")
|
|
536
|
+
except Exception:
|
|
537
|
+
logger.exception("Failed to pull UiPath project")
|
|
538
|
+
raise
|
|
539
|
+
|
|
540
|
+
|
|
486
541
|
async def download_folder_files(
|
|
487
542
|
studio_client: StudioClient,
|
|
488
543
|
folder: ProjectFolder,
|
|
489
544
|
base_path: Path,
|
|
545
|
+
conflict_handler: FileConflictHandler,
|
|
490
546
|
) -> None:
|
|
491
547
|
"""Download files from a folder recursively.
|
|
492
548
|
|
|
@@ -494,62 +550,36 @@ async def download_folder_files(
|
|
|
494
550
|
studio_client: Studio client
|
|
495
551
|
folder: The folder to download files from
|
|
496
552
|
base_path: Base path for local file storage
|
|
553
|
+
conflict_handler: Handler for file conflicts
|
|
497
554
|
"""
|
|
498
555
|
files_dict: Dict[str, ProjectFile] = {}
|
|
499
556
|
collect_files_from_folder(folder, "", files_dict)
|
|
557
|
+
|
|
500
558
|
for file_path, remote_file in files_dict.items():
|
|
501
559
|
local_path = base_path / file_path
|
|
502
560
|
local_path.parent.mkdir(parents=True, exist_ok=True)
|
|
503
561
|
|
|
504
|
-
# Download remote file
|
|
505
562
|
response = await studio_client.download_file_async(remote_file.id)
|
|
506
563
|
remote_content = response.read().decode("utf-8")
|
|
507
564
|
remote_hash = compute_normalized_hash(remote_content)
|
|
508
565
|
|
|
509
566
|
if os.path.exists(local_path):
|
|
510
|
-
# Read and hash local file
|
|
511
567
|
with open(local_path, "r", encoding="utf-8") as f:
|
|
512
568
|
local_content = f.read()
|
|
513
569
|
local_hash = compute_normalized_hash(local_content)
|
|
514
570
|
|
|
515
|
-
# Compare hashes
|
|
516
571
|
if local_hash != remote_hash:
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
if response.lower() == "y":
|
|
572
|
+
if conflict_handler.should_overwrite(
|
|
573
|
+
file_path, local_hash, remote_hash
|
|
574
|
+
):
|
|
521
575
|
with open(local_path, "w", encoding="utf-8", newline="\n") as f:
|
|
522
576
|
f.write(remote_content)
|
|
523
|
-
|
|
577
|
+
logger.info(f"Updated '{file_path}'")
|
|
524
578
|
else:
|
|
525
|
-
|
|
579
|
+
logger.info(f"Skipped '{file_path}'")
|
|
526
580
|
else:
|
|
527
|
-
|
|
528
|
-
f"File {click.style(str(file_path), fg='cyan')} is up to date"
|
|
529
|
-
)
|
|
581
|
+
logger.info(f"File '{file_path}' is up to date")
|
|
530
582
|
else:
|
|
531
|
-
# File doesn't exist locally, create it
|
|
532
583
|
with open(local_path, "w", encoding="utf-8", newline="\n") as f:
|
|
533
584
|
f.write(remote_content)
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
async def pull_project(project_id: str, download_configuration: dict[str, Path]):
|
|
538
|
-
studio_client = StudioClient(project_id)
|
|
539
|
-
|
|
540
|
-
with console.spinner("Pulling UiPath project files..."):
|
|
541
|
-
try:
|
|
542
|
-
structure = await studio_client.get_project_structure_async()
|
|
543
|
-
for source_key, destination in download_configuration.items():
|
|
544
|
-
source_folder = get_folder_by_name(structure, source_key)
|
|
545
|
-
if source_folder:
|
|
546
|
-
await download_folder_files(
|
|
547
|
-
studio_client,
|
|
548
|
-
source_folder,
|
|
549
|
-
destination,
|
|
550
|
-
)
|
|
551
|
-
else:
|
|
552
|
-
console.warning(f"No {source_key} folder found in remote project")
|
|
553
|
-
|
|
554
|
-
except Exception as e:
|
|
555
|
-
console.error(f"Failed to pull UiPath project: {str(e)}")
|
|
585
|
+
logger.info(f"Downloaded '{file_path}'")
|
|
@@ -24,6 +24,20 @@ from ._utils._project_files import pull_project
|
|
|
24
24
|
console = ConsoleLogger()
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
class InteractiveConflictHandler:
|
|
28
|
+
"""Handler that prompts user for each conflict."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, console: ConsoleLogger):
|
|
31
|
+
self.console = console
|
|
32
|
+
|
|
33
|
+
def should_overwrite(
|
|
34
|
+
self, file_path: str, local_hash: str, remote_hash: str
|
|
35
|
+
) -> bool:
|
|
36
|
+
self.console.warning(f" File {file_path} differs from remote version.")
|
|
37
|
+
response = click.confirm("Do you want to overwrite it?", default=False)
|
|
38
|
+
return response
|
|
39
|
+
|
|
40
|
+
|
|
27
41
|
@click.command()
|
|
28
42
|
@click.argument(
|
|
29
43
|
"root",
|
|
@@ -56,4 +70,11 @@ def pull(root: Path) -> None:
|
|
|
56
70
|
"source_code": root,
|
|
57
71
|
"evals": root / "evals",
|
|
58
72
|
}
|
|
59
|
-
|
|
73
|
+
with console.spinner("Pulling UiPath project files..."):
|
|
74
|
+
asyncio.run(
|
|
75
|
+
pull_project(
|
|
76
|
+
project_id,
|
|
77
|
+
default_download_configuration,
|
|
78
|
+
InteractiveConflictHandler(console),
|
|
79
|
+
)
|
|
80
|
+
)
|
|
@@ -4,7 +4,10 @@ from pathlib import PurePath
|
|
|
4
4
|
from httpx import Response
|
|
5
5
|
from pydantic import TypeAdapter
|
|
6
6
|
|
|
7
|
-
from uipath._cli._evals._models._evaluation_set import
|
|
7
|
+
from uipath._cli._evals._models._evaluation_set import (
|
|
8
|
+
InputMockingStrategy,
|
|
9
|
+
LLMMockingStrategy,
|
|
10
|
+
)
|
|
8
11
|
from uipath._cli._push.sw_file_handler import SwFileHandler
|
|
9
12
|
from uipath._cli._utils._studio_project import (
|
|
10
13
|
ProjectFile,
|
|
@@ -137,4 +140,14 @@ async def load_agent_definition(project_id: str) -> AgentDefinition:
|
|
|
137
140
|
evaluation.mocking_strategy = LLMMockingStrategy(
|
|
138
141
|
prompt=prompt, tools_to_simulate=tools_to_simulate
|
|
139
142
|
)
|
|
143
|
+
|
|
144
|
+
if not evaluation.input_mocking_strategy:
|
|
145
|
+
# Migrate lowCode input mocking fields
|
|
146
|
+
if evaluation.model_extra.get("simulateInput", False):
|
|
147
|
+
prompt = evaluation.model_extra.get(
|
|
148
|
+
"inputGenerationInstructions",
|
|
149
|
+
)
|
|
150
|
+
evaluation.input_mocking_strategy = InputMockingStrategy(
|
|
151
|
+
prompt=prompt
|
|
152
|
+
)
|
|
140
153
|
return agent_definition
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""LowCode Agent Loop Constructs.
|
|
2
|
+
|
|
3
|
+
This module includes agentic loop constructs specific to LowCode Agent
|
|
4
|
+
such as prompts, tools
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from uipath.agent.loop.prompts import AGENT_SYSTEM_PROMPT_TEMPLATE
|
|
8
|
+
from uipath.agent.loop.tools import (
|
|
9
|
+
EndExecutionToolSchemaModel,
|
|
10
|
+
RaiseErrorToolSchemaModel,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"AGENT_SYSTEM_PROMPT_TEMPLATE",
|
|
15
|
+
"EndExecutionToolSchemaModel",
|
|
16
|
+
"RaiseErrorToolSchemaModel",
|
|
17
|
+
]
|