uipath 2.1.119__tar.gz → 2.1.121__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.119 → uipath-2.1.121}/PKG-INFO +1 -1
- {uipath-2.1.119 → uipath-2.1.121}/pyproject.toml +1 -1
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_progress_reporter.py +10 -8
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_runtime.py +2 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_constants.py +0 -2
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_eval.py +14 -3
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_init.py +2 -3
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_pack.py +3 -3
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_pull.py +2 -4
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_push.py +2 -5
- uipath-2.1.121/src/uipath/_config.py +44 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_events/_events.py +1 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_resources/CLI_REFERENCE.md +2 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/constants.py +2 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/tracing/_otel_exporters.py +58 -22
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/tracing/_utils.py +64 -34
- uipath-2.1.121/tests/cli/eval/test_evaluate.py +201 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/eval/test_progress_reporter.py +110 -1
- {uipath-2.1.119 → uipath-2.1.121}/tests/tracing/test_otel_exporters.py +137 -26
- {uipath-2.1.119 → uipath-2.1.121}/tests/tracing/test_span_utils.py +62 -1
- {uipath-2.1.119 → uipath-2.1.121}/uv.lock +1 -1
- uipath-2.1.119/src/uipath/_config.py +0 -6
- uipath-2.1.119/tests/cli/eval/test_evaluate.py +0 -60
- {uipath-2.1.119 → uipath-2.1.121}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.claude/agents/test-reporter.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.cursorrules +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.editorconfig +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.gitattributes +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/labeler.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.github/workflows/test.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.gitignore +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.python-version +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.vscode/extensions.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.vscode/launch.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/.vscode/settings.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/CONTRIBUTING.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/LICENSE +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/AutomationSuite.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/FAQ.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/favicon.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/llms.txt +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/cli/index.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/actions.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/assets.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/attachments.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/buckets.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/connections.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/documents.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/documents_models.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/getting_started.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/jobs.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/processes.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/queues.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/core/traced.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/hooks.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/index.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/overrides/main.html +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/release_policy.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/justfile +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/mkdocs.yml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/py.typed +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/eval-sets/legacy.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/contains.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/correct-operator-evaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/custom/correct_operator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/custom/types/correct-operator-evaluator-types.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/exact-match.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/json-similarity.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/legacy-equality.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/legacy-json-similarity.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/legacy-llm-as-a-judge.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/legacy-trajectory.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/llm-judge-semantic-similarity.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/llm-judge-strict-json-similarity.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/TOOL_EVALUATORS.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/eval-sets/default.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/evaluators/tool-call-args.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/evaluators/tool-call-count.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/evaluators/tool-call-order.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/evaluators/tool-call-output.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/samples/weather_tools/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/scripts/debug_test.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/scripts/update_agents_md.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/auth_config_25_10.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/auth_config_cloud.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_debug/_bridge.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_debug/_runtime.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_evaluate.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_helpers.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_push/models.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/custom_evaluator.py.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_resources.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_add.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_debug.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_register.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/models/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/models/runtime_schema.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/guardrails_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/models/evals.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/react/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/react/prompts.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/agent/react/tools.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/_helpers/evaluators_helpers.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/contains_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_base_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_deterministic_evaluator_base.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_exact_match_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_json_similarity_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/legacy_trajectory_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/llm_judge_output_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/llm_judge_trajectory_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/output_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/tool_call_args_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/tool_call_count_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/tool_call_order_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators/tool_call_output_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ContainsEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ExactMatchEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/JsonSimilarityEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/LLMJudgeOutputEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/LLMJudgeSimulationTrajectoryEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/LLMJudgeStrictJSONSimilarityOutputEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/LLMJudgeTrajectoryEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ToolCallArgsEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ToolCallCountEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ToolCallOrderEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/ToolCallOutputEvaluator.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/evaluators_types/generate_types.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/models/llm_judge_types.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/guardrails.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/job.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/py.typed +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/tools-evals/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/tools-evals/run.sh +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/testcases/tools-evals/src/assert.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/agent/models/test_evals.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/conftest.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/eval/evals/eval-sets/default.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/eval/evals/evaluators/equality.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/models/test_runtime_schema.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_init.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_new.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_push.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_run.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/conftest.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/evaluators/__init__.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/evaluators/test_evaluator_aggregation.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/evaluators/test_evaluator_helpers.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/evaluators/test_evaluator_methods.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/evaluators/test_evaluator_schemas.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_guardrails_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/tests_data/documents_service/classification_response.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/tests_data/documents_service/ixp_extraction_response.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/tests_data/documents_service/modern_extraction_response.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/sdk/test_uipath_caching.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.119 → uipath-2.1.121}/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.121
|
|
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.121"
|
|
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"
|
|
@@ -210,7 +210,7 @@ class StudioWebProgressReporter:
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
@gracefully_handle_errors
|
|
213
|
-
async def
|
|
213
|
+
async def create_eval_set_run_sw(
|
|
214
214
|
self,
|
|
215
215
|
eval_set_id: str,
|
|
216
216
|
agent_snapshot: StudioWebAgentSnapshot,
|
|
@@ -352,13 +352,15 @@ class StudioWebProgressReporter:
|
|
|
352
352
|
is_coded = self._is_coded_evaluator(payload.evaluators)
|
|
353
353
|
self.is_coded_eval[payload.execution_id] = is_coded
|
|
354
354
|
|
|
355
|
-
eval_set_run_id =
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
355
|
+
eval_set_run_id = payload.eval_set_run_id
|
|
356
|
+
if not eval_set_run_id:
|
|
357
|
+
eval_set_run_id = await self.create_eval_set_run_sw(
|
|
358
|
+
eval_set_id=payload.eval_set_id,
|
|
359
|
+
agent_snapshot=self._extract_agent_snapshot(payload.entrypoint),
|
|
360
|
+
no_of_evals=payload.no_of_evals,
|
|
361
|
+
evaluators=payload.evaluators,
|
|
362
|
+
is_coded=is_coded,
|
|
363
|
+
)
|
|
362
364
|
self.eval_set_run_ids[payload.execution_id] = eval_set_run_id
|
|
363
365
|
current_span = trace.get_current_span()
|
|
364
366
|
if current_span.is_recording():
|
|
@@ -151,6 +151,7 @@ class UiPathEvalContext(UiPathRuntimeContext):
|
|
|
151
151
|
workers: Optional[int] = 1
|
|
152
152
|
eval_set: Optional[str] = None
|
|
153
153
|
eval_ids: Optional[List[str]] = None
|
|
154
|
+
eval_set_run_id: Optional[str] = None
|
|
154
155
|
verbose: bool = False
|
|
155
156
|
|
|
156
157
|
|
|
@@ -214,6 +215,7 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
|
|
|
214
215
|
EvalSetRunCreatedEvent(
|
|
215
216
|
execution_id=self.execution_id,
|
|
216
217
|
entrypoint=self.context.entrypoint or "",
|
|
218
|
+
eval_set_run_id=self.context.eval_set_run_id,
|
|
217
219
|
eval_set_id=evaluation_set.id,
|
|
218
220
|
no_of_evals=len(evaluation_set.evaluations),
|
|
219
221
|
evaluators=evaluators,
|
|
@@ -12,9 +12,9 @@ from uipath._cli._evals._runtime import (
|
|
|
12
12
|
UiPathEvalContext,
|
|
13
13
|
)
|
|
14
14
|
from uipath._cli._runtime._runtime_factory import generate_runtime_factory
|
|
15
|
-
from uipath._cli._utils._constants import UIPATH_PROJECT_ID
|
|
16
15
|
from uipath._cli._utils._folders import get_personal_workspace_key_async
|
|
17
16
|
from uipath._cli.middlewares import Middlewares
|
|
17
|
+
from uipath._config import UiPathConfig
|
|
18
18
|
from uipath._events._event_bus import EventBus
|
|
19
19
|
from uipath.eval._helpers import auto_discover_entrypoint
|
|
20
20
|
from uipath.tracing import LlmOpsHttpExporter
|
|
@@ -39,12 +39,13 @@ def setup_reporting_prereq(no_report: bool) -> bool:
|
|
|
39
39
|
if no_report:
|
|
40
40
|
return False
|
|
41
41
|
|
|
42
|
-
if not
|
|
42
|
+
if not UiPathConfig.is_studio_project:
|
|
43
43
|
console.warning(
|
|
44
44
|
"UIPATH_PROJECT_ID environment variable not set. Results will no be reported to Studio Web."
|
|
45
45
|
)
|
|
46
46
|
return False
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
if not UiPathConfig.folder_key:
|
|
48
49
|
folder_key = asyncio.run(get_personal_workspace_key_async())
|
|
49
50
|
if folder_key:
|
|
50
51
|
os.environ["UIPATH_FOLDER_KEY"] = folder_key
|
|
@@ -55,6 +56,12 @@ def setup_reporting_prereq(no_report: bool) -> bool:
|
|
|
55
56
|
@click.argument("entrypoint", required=False)
|
|
56
57
|
@click.argument("eval_set", required=False)
|
|
57
58
|
@click.option("--eval-ids", cls=LiteralOption, default="[]")
|
|
59
|
+
@click.option(
|
|
60
|
+
"--eval-set-run-id",
|
|
61
|
+
required=False,
|
|
62
|
+
type=str,
|
|
63
|
+
help="Custom evaluation set run ID (if not provided, a UUID will be generated)",
|
|
64
|
+
)
|
|
58
65
|
@click.option(
|
|
59
66
|
"--no-report",
|
|
60
67
|
is_flag=True,
|
|
@@ -78,6 +85,7 @@ def eval(
|
|
|
78
85
|
entrypoint: Optional[str],
|
|
79
86
|
eval_set: Optional[str],
|
|
80
87
|
eval_ids: List[str],
|
|
88
|
+
eval_set_run_id: Optional[str],
|
|
81
89
|
no_report: bool,
|
|
82
90
|
workers: int,
|
|
83
91
|
output_file: Optional[str],
|
|
@@ -88,6 +96,7 @@ def eval(
|
|
|
88
96
|
entrypoint: Path to the agent script to evaluate (optional, will auto-discover if not specified)
|
|
89
97
|
eval_set: Path to the evaluation set JSON file (optional, will auto-discover if not specified)
|
|
90
98
|
eval_ids: Optional list of evaluation IDs
|
|
99
|
+
eval_set_run_id: Custom evaluation set run ID (optional, will generate UUID if not specified)
|
|
91
100
|
workers: Number of parallel workers for running evaluations
|
|
92
101
|
no_report: Do not report the evaluation results
|
|
93
102
|
"""
|
|
@@ -95,6 +104,7 @@ def eval(
|
|
|
95
104
|
"entrypoint": entrypoint or auto_discover_entrypoint(),
|
|
96
105
|
"eval_set": eval_set,
|
|
97
106
|
"eval_ids": eval_ids,
|
|
107
|
+
"eval_set_run_id": eval_set_run_id,
|
|
98
108
|
"workers": workers,
|
|
99
109
|
"no_report": no_report,
|
|
100
110
|
"output_file": output_file,
|
|
@@ -130,6 +140,7 @@ def eval(
|
|
|
130
140
|
|
|
131
141
|
eval_context.no_report = no_report
|
|
132
142
|
eval_context.workers = workers
|
|
143
|
+
eval_context.eval_set_run_id = eval_set_run_id
|
|
133
144
|
|
|
134
145
|
# Load eval set to resolve the path
|
|
135
146
|
eval_set_path = eval_set or EvalHelpers.auto_discover_eval_set()
|
|
@@ -10,6 +10,7 @@ from typing import Any, Dict, Optional
|
|
|
10
10
|
|
|
11
11
|
import click
|
|
12
12
|
|
|
13
|
+
from .._config import UiPathConfig
|
|
13
14
|
from .._utils.constants import ENV_TELEMETRY_ENABLED
|
|
14
15
|
from ..telemetry import track
|
|
15
16
|
from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
|
|
@@ -43,9 +44,7 @@ def create_telemetry_config_file(target_directory: str) -> None:
|
|
|
43
44
|
return
|
|
44
45
|
|
|
45
46
|
os.makedirs(uipath_dir, exist_ok=True)
|
|
46
|
-
telemetry_data = {
|
|
47
|
-
_PROJECT_KEY: os.getenv("UIPATH_PROJECT_ID", None) or str(uuid.uuid4())
|
|
48
|
-
}
|
|
47
|
+
telemetry_data = {_PROJECT_KEY: UiPathConfig.project_id or str(uuid.uuid4())}
|
|
49
48
|
|
|
50
49
|
with open(telemetry_file, "w") as f:
|
|
51
50
|
json.dump(telemetry_data, f, indent=4)
|
|
@@ -8,8 +8,8 @@ from string import Template
|
|
|
8
8
|
import click
|
|
9
9
|
from pydantic import TypeAdapter
|
|
10
10
|
|
|
11
|
-
from uipath._cli._utils._constants import UIPATH_PROJECT_ID
|
|
12
11
|
from uipath._cli.models.runtime_schema import Bindings, RuntimeSchema
|
|
12
|
+
from uipath._config import UiPathConfig
|
|
13
13
|
|
|
14
14
|
from ..telemetry import track
|
|
15
15
|
from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
|
|
@@ -35,8 +35,8 @@ def get_project_id() -> str:
|
|
|
35
35
|
Project ID string (either from telemetry file or newly generated).
|
|
36
36
|
"""
|
|
37
37
|
# first check if this is a studio project
|
|
38
|
-
if
|
|
39
|
-
return
|
|
38
|
+
if project_id := UiPathConfig.project_id:
|
|
39
|
+
return project_id
|
|
40
40
|
|
|
41
41
|
telemetry_file = os.path.join(".uipath", _TELEMETRY_CONFIG_FILE)
|
|
42
42
|
|
|
@@ -11,14 +11,13 @@ It handles:
|
|
|
11
11
|
|
|
12
12
|
# type: ignore
|
|
13
13
|
import asyncio
|
|
14
|
-
import os
|
|
15
14
|
from pathlib import Path
|
|
16
15
|
|
|
17
16
|
import click
|
|
18
17
|
|
|
18
|
+
from .._config import UiPathConfig
|
|
19
19
|
from ..telemetry import track
|
|
20
20
|
from ._utils._console import ConsoleLogger
|
|
21
|
-
from ._utils._constants import UIPATH_PROJECT_ID
|
|
22
21
|
from ._utils._project_files import ProjectPullError, pull_project
|
|
23
22
|
|
|
24
23
|
console = ConsoleLogger()
|
|
@@ -49,10 +48,9 @@ def pull(root: Path) -> None:
|
|
|
49
48
|
$ uipath pull
|
|
50
49
|
$ uipath pull /path/to/project
|
|
51
50
|
"""
|
|
52
|
-
project_id =
|
|
51
|
+
project_id = UiPathConfig.project_id
|
|
53
52
|
if not project_id:
|
|
54
53
|
console.error("UIPATH_PROJECT_ID environment variable not found.")
|
|
55
|
-
return
|
|
56
54
|
|
|
57
55
|
download_configuration = {
|
|
58
56
|
"source_code": root,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# type: ignore
|
|
2
2
|
import asyncio
|
|
3
|
-
import os
|
|
4
3
|
from typing import Any, AsyncIterator, Optional
|
|
5
4
|
from urllib.parse import urlparse
|
|
6
5
|
|
|
@@ -8,12 +7,10 @@ import click
|
|
|
8
7
|
|
|
9
8
|
from uipath.models.exceptions import EnrichedException
|
|
10
9
|
|
|
10
|
+
from .._config import UiPathConfig
|
|
11
11
|
from ..telemetry import track
|
|
12
12
|
from ._push.sw_file_handler import FileOperationUpdate, SwFileHandler
|
|
13
13
|
from ._utils._console import ConsoleLogger
|
|
14
|
-
from ._utils._constants import (
|
|
15
|
-
UIPATH_PROJECT_ID,
|
|
16
|
-
)
|
|
17
14
|
from ._utils._project_files import (
|
|
18
15
|
ensure_config_file,
|
|
19
16
|
get_project_config,
|
|
@@ -99,7 +96,7 @@ def push(root: str, nolock: bool) -> None:
|
|
|
99
96
|
config = get_project_config(root)
|
|
100
97
|
validate_config(config)
|
|
101
98
|
|
|
102
|
-
project_id =
|
|
99
|
+
project_id = UiPathConfig.project_id
|
|
103
100
|
if not project_id:
|
|
104
101
|
console.error("UIPATH_PROJECT_ID environment variable not found.")
|
|
105
102
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Config(BaseModel):
|
|
9
|
+
base_url: str
|
|
10
|
+
secret: str
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ConfigurationManager:
|
|
14
|
+
_instance = None
|
|
15
|
+
|
|
16
|
+
def __new__(cls):
|
|
17
|
+
if cls._instance is None:
|
|
18
|
+
cls._instance = super().__new__(cls)
|
|
19
|
+
return cls._instance
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def bindings_file_path(self) -> Path:
|
|
23
|
+
from uipath._utils.constants import UIPATH_BINDINGS_FILE
|
|
24
|
+
|
|
25
|
+
return Path(UIPATH_BINDINGS_FILE)
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def project_id(self) -> Optional[str]:
|
|
29
|
+
from uipath._utils.constants import ENV_UIPATH_PROJECT_ID
|
|
30
|
+
|
|
31
|
+
return os.getenv(ENV_UIPATH_PROJECT_ID, None)
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def folder_key(self) -> Optional[str]:
|
|
35
|
+
from uipath._utils.constants import ENV_FOLDER_KEY
|
|
36
|
+
|
|
37
|
+
return os.getenv(ENV_FOLDER_KEY, None)
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def is_studio_project(self) -> bool:
|
|
41
|
+
return self.project_id is not None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
UiPathConfig = ConfigurationManager()
|
|
@@ -20,6 +20,7 @@ class EvalSetRunCreatedEvent(BaseModel):
|
|
|
20
20
|
execution_id: str
|
|
21
21
|
entrypoint: str
|
|
22
22
|
eval_set_id: str
|
|
23
|
+
eval_set_run_id: Optional[str] = None
|
|
23
24
|
no_of_evals: int
|
|
24
25
|
# skip validation to avoid abstract class instantiation
|
|
25
26
|
evaluators: SkipValidation[List[AnyEvaluator]]
|
|
@@ -100,6 +100,7 @@ uv run uipath run --resume
|
|
|
100
100
|
entrypoint: Path to the agent script to evaluate (optional, will auto-discover if not specified)
|
|
101
101
|
eval_set: Path to the evaluation set JSON file (optional, will auto-discover if not specified)
|
|
102
102
|
eval_ids: Optional list of evaluation IDs
|
|
103
|
+
eval_set_run_id: Custom evaluation set run ID (optional, will generate UUID if not specified)
|
|
103
104
|
workers: Number of parallel workers for running evaluations
|
|
104
105
|
no_report: Do not report the evaluation results
|
|
105
106
|
|
|
@@ -115,6 +116,7 @@ uv run uipath run --resume
|
|
|
115
116
|
|
|
116
117
|
| Option | Type | Default | Description |
|
|
117
118
|
|--------|------|---------|-------------|
|
|
119
|
+
| `--eval-set-run-id` | value | `Sentinel.UNSET` | Custom evaluation set run ID (if not provided, a UUID will be generated) |
|
|
118
120
|
| `--no-report` | flag | false | Do not report the evaluation results |
|
|
119
121
|
| `--workers` | value | `1` | Number of parallel workers for running evaluations (default: 1) |
|
|
120
122
|
| `--output-file` | value | `Sentinel.UNSET` | File path where the output will be written |
|
|
@@ -12,6 +12,7 @@ ENV_ROBOT_KEY = "UIPATH_ROBOT_KEY"
|
|
|
12
12
|
ENV_TENANT_ID = "UIPATH_TENANT_ID"
|
|
13
13
|
ENV_ORGANIZATION_ID = "UIPATH_ORGANIZATION_ID"
|
|
14
14
|
ENV_TELEMETRY_ENABLED = "UIPATH_TELEMETRY_ENABLED"
|
|
15
|
+
ENV_UIPATH_PROJECT_ID = "UIPATH_PROJECT_ID"
|
|
15
16
|
|
|
16
17
|
# Headers
|
|
17
18
|
HEADER_FOLDER_KEY = "x-uipath-folderkey"
|
|
@@ -47,6 +48,7 @@ COMMUNITY_agents_SUFFIX = "-community-agents"
|
|
|
47
48
|
|
|
48
49
|
# File names
|
|
49
50
|
UIPATH_CONFIG_FILE = "uipath.json"
|
|
51
|
+
UIPATH_BINDINGS_FILE = "bindings.json"
|
|
50
52
|
|
|
51
53
|
# Evaluators
|
|
52
54
|
CUSTOM_EVALUATOR_PREFIX = "file://"
|
|
@@ -32,20 +32,25 @@ def _get_llm_messages(attributes: Dict[str, Any], prefix: str) -> List[Dict[str,
|
|
|
32
32
|
"""Extracts and reconstructs LLM messages from flattened attributes."""
|
|
33
33
|
messages: dict[int, dict[str, Any]] = {}
|
|
34
34
|
message_prefix = f"{prefix}."
|
|
35
|
+
prefix_len = len(message_prefix)
|
|
35
36
|
|
|
36
37
|
for key, value in attributes.items():
|
|
37
38
|
if key.startswith(message_prefix):
|
|
38
|
-
|
|
39
|
+
# Avoid repeated string slicing and splits
|
|
40
|
+
parts = key[prefix_len:].split(".")
|
|
39
41
|
if len(parts) >= 2 and parts[0].isdigit():
|
|
40
42
|
index = int(parts[0])
|
|
41
43
|
if index not in messages:
|
|
42
44
|
messages[index] = {}
|
|
43
45
|
current: Any = messages[index]
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
# Traverse parts except the last one
|
|
48
|
+
parts_len = len(parts)
|
|
49
|
+
for i in range(1, parts_len - 1):
|
|
50
|
+
part = parts[i]
|
|
46
51
|
key_part: str | int = part
|
|
47
52
|
if part.isdigit() and (
|
|
48
|
-
i + 2 <
|
|
53
|
+
i + 2 < parts_len and parts[i + 2].isdigit()
|
|
49
54
|
):
|
|
50
55
|
key_part = int(part)
|
|
51
56
|
|
|
@@ -60,6 +65,10 @@ def _get_llm_messages(attributes: Dict[str, Any], prefix: str) -> List[Dict[str,
|
|
|
60
65
|
|
|
61
66
|
current[parts[-1]] = value
|
|
62
67
|
|
|
68
|
+
# Convert dict to list, ordered by index, avoid sorted() if we can use range
|
|
69
|
+
if not messages:
|
|
70
|
+
return []
|
|
71
|
+
|
|
63
72
|
# Convert dict to list, ordered by index
|
|
64
73
|
return [messages[i] for i in sorted(messages.keys())]
|
|
65
74
|
|
|
@@ -112,18 +121,30 @@ class LlmOpsHttpExporter(SpanExporter):
|
|
|
112
121
|
f"Exporting {len(spans)} spans to {self.base_url}/llmopstenant_/api/Traces/spans"
|
|
113
122
|
)
|
|
114
123
|
|
|
124
|
+
# Use optimized path: keep attributes as dict for processing
|
|
125
|
+
# Only serialize at the very end
|
|
115
126
|
span_list = [
|
|
116
127
|
_SpanUtils.otel_span_to_uipath_span(
|
|
117
|
-
span, custom_trace_id=self.trace_id
|
|
118
|
-
).to_dict()
|
|
128
|
+
span, custom_trace_id=self.trace_id, serialize_attributes=False
|
|
129
|
+
).to_dict(serialize_attributes=False)
|
|
119
130
|
for span in spans
|
|
120
131
|
]
|
|
132
|
+
|
|
121
133
|
url = self._build_url(span_list)
|
|
122
134
|
|
|
135
|
+
# Process spans in-place if needed - work directly with dict
|
|
123
136
|
if self._extra_process_spans:
|
|
124
|
-
|
|
137
|
+
for span_data in span_list:
|
|
138
|
+
self._process_span_attributes(span_data)
|
|
125
139
|
|
|
126
|
-
|
|
140
|
+
# Serialize attributes once at the very end
|
|
141
|
+
for span_data in span_list:
|
|
142
|
+
if isinstance(span_data.get("Attributes"), dict):
|
|
143
|
+
span_data["Attributes"] = json.dumps(span_data["Attributes"])
|
|
144
|
+
|
|
145
|
+
# Only serialize for logging if debug is enabled to avoid allocation
|
|
146
|
+
if logger.isEnabledFor(logging.DEBUG):
|
|
147
|
+
logger.debug("Payload: %s", json.dumps(span_list))
|
|
127
148
|
|
|
128
149
|
return self._send_with_retries(url, span_list)
|
|
129
150
|
|
|
@@ -133,7 +154,8 @@ class LlmOpsHttpExporter(SpanExporter):
|
|
|
133
154
|
|
|
134
155
|
def _map_llm_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
|
|
135
156
|
"""Maps attributes for LLM calls, handling flattened keys."""
|
|
136
|
-
|
|
157
|
+
# Modify attributes in place to avoid copy
|
|
158
|
+
result = attributes
|
|
137
159
|
|
|
138
160
|
# Token Usage
|
|
139
161
|
token_keys = {
|
|
@@ -202,7 +224,8 @@ class LlmOpsHttpExporter(SpanExporter):
|
|
|
202
224
|
|
|
203
225
|
def _map_tool_call_attributes(self, attributes: Dict[str, Any]) -> Dict[str, Any]:
|
|
204
226
|
"""Maps attributes for tool calls."""
|
|
205
|
-
|
|
227
|
+
# Modify attributes in place to avoid copy
|
|
228
|
+
result = attributes
|
|
206
229
|
|
|
207
230
|
result["type"] = "toolCall"
|
|
208
231
|
result["callId"] = attributes.get("call_id") or attributes.get("id")
|
|
@@ -225,22 +248,32 @@ class LlmOpsHttpExporter(SpanExporter):
|
|
|
225
248
|
return self.Status.ERROR
|
|
226
249
|
return self.Status.SUCCESS
|
|
227
250
|
|
|
228
|
-
def _process_span_attributes(self, span_data: Dict[str, Any]) ->
|
|
229
|
-
"""Extracts, transforms, and maps attributes for a span.
|
|
251
|
+
def _process_span_attributes(self, span_data: Dict[str, Any]) -> None:
|
|
252
|
+
"""Extracts, transforms, and maps attributes for a span in-place.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
span_data: Span dict with Attributes as dict or JSON string
|
|
256
|
+
|
|
257
|
+
Note:
|
|
258
|
+
Modifies span_data in-place. When optimized path is used (dict),
|
|
259
|
+
modifies dict directly. When legacy path is used (str), parse → modify → serialize.
|
|
260
|
+
"""
|
|
230
261
|
if "Attributes" not in span_data:
|
|
231
|
-
return
|
|
262
|
+
return
|
|
232
263
|
|
|
233
264
|
attributes_val = span_data["Attributes"]
|
|
234
265
|
if isinstance(attributes_val, str):
|
|
266
|
+
# Legacy path: parse JSON string
|
|
235
267
|
try:
|
|
236
268
|
attributes: Dict[str, Any] = json.loads(attributes_val)
|
|
237
269
|
except json.JSONDecodeError as e:
|
|
238
270
|
logger.warning(f"Failed to parse attributes JSON: {e}")
|
|
239
|
-
return
|
|
271
|
+
return
|
|
240
272
|
elif isinstance(attributes_val, dict):
|
|
273
|
+
# Optimized path: work directly with dict
|
|
241
274
|
attributes = attributes_val
|
|
242
275
|
else:
|
|
243
|
-
return
|
|
276
|
+
return
|
|
244
277
|
|
|
245
278
|
# Determine SpanType
|
|
246
279
|
if "openinference.span.kind" in attributes:
|
|
@@ -258,23 +291,23 @@ class LlmOpsHttpExporter(SpanExporter):
|
|
|
258
291
|
attributes[new_key] = attributes[old_key]
|
|
259
292
|
|
|
260
293
|
# Apply detailed mapping based on SpanType
|
|
294
|
+
# Modify attributes dict in place to avoid allocations
|
|
261
295
|
span_type = span_data.get("SpanType")
|
|
262
296
|
if span_type == "completion":
|
|
263
|
-
|
|
297
|
+
self._map_llm_call_attributes(attributes)
|
|
264
298
|
elif span_type == "toolCall":
|
|
265
|
-
|
|
266
|
-
else:
|
|
267
|
-
processed_attributes = attributes.copy()
|
|
299
|
+
self._map_tool_call_attributes(attributes)
|
|
268
300
|
|
|
269
|
-
|
|
301
|
+
# If attributes were a string (legacy path), serialize back
|
|
302
|
+
# If dict (optimized path), leave as dict - caller will serialize once at the end
|
|
303
|
+
if isinstance(attributes_val, str):
|
|
304
|
+
span_data["Attributes"] = json.dumps(attributes)
|
|
270
305
|
|
|
271
306
|
# Determine status based on error information
|
|
272
307
|
error = attributes.get("error") or attributes.get("exception.message")
|
|
273
308
|
status = self._determine_status(error)
|
|
274
309
|
span_data["Status"] = status
|
|
275
310
|
|
|
276
|
-
return span_data
|
|
277
|
-
|
|
278
311
|
def _build_url(self, span_list: list[Dict[str, Any]]) -> str:
|
|
279
312
|
"""Construct the URL for the API request."""
|
|
280
313
|
trace_id = str(span_list[0]["TraceId"])
|
|
@@ -323,7 +356,10 @@ class JsonLinesFileExporter(SpanExporter):
|
|
|
323
356
|
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
|
|
324
357
|
try:
|
|
325
358
|
uipath_spans = [
|
|
326
|
-
_SpanUtils.otel_span_to_uipath_span(
|
|
359
|
+
_SpanUtils.otel_span_to_uipath_span(
|
|
360
|
+
span, serialize_attributes=True
|
|
361
|
+
).to_dict(serialize_attributes=True)
|
|
362
|
+
for span in spans
|
|
327
363
|
]
|
|
328
364
|
|
|
329
365
|
with open(self.file_path, "a") as f:
|
|
@@ -63,12 +63,15 @@ def _simple_serialize_defaults(obj):
|
|
|
63
63
|
|
|
64
64
|
@dataclass
|
|
65
65
|
class UiPathSpan:
|
|
66
|
-
"""Represents a span in the UiPath tracing system.
|
|
66
|
+
"""Represents a span in the UiPath tracing system.
|
|
67
|
+
|
|
68
|
+
Note: attributes can be either a JSON string (backwards compatible) or a dict (optimized).
|
|
69
|
+
"""
|
|
67
70
|
|
|
68
71
|
id: uuid.UUID
|
|
69
72
|
trace_id: uuid.UUID
|
|
70
73
|
name: str
|
|
71
|
-
attributes: str
|
|
74
|
+
attributes: str | Dict[str, Any] # Support both str (legacy) and dict (optimized)
|
|
72
75
|
parent_id: Optional[uuid.UUID] = None
|
|
73
76
|
start_time: str = field(default_factory=lambda: datetime.now().isoformat())
|
|
74
77
|
end_time: str = field(default_factory=lambda: datetime.now().isoformat())
|
|
@@ -96,16 +99,32 @@ class UiPathSpan:
|
|
|
96
99
|
|
|
97
100
|
job_key: Optional[str] = field(default_factory=lambda: env.get("UIPATH_JOB_KEY"))
|
|
98
101
|
|
|
99
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
100
|
-
"""Convert the Span to a dictionary suitable for JSON serialization.
|
|
102
|
+
def to_dict(self, serialize_attributes: bool = True) -> Dict[str, Any]:
|
|
103
|
+
"""Convert the Span to a dictionary suitable for JSON serialization.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
serialize_attributes: If True and attributes is a dict, serialize to JSON string.
|
|
107
|
+
If False, keep attributes as-is (dict or str).
|
|
108
|
+
Default True for backwards compatibility.
|
|
109
|
+
"""
|
|
110
|
+
# Cache UUID string conversions to avoid repeated str() calls
|
|
111
|
+
id_str = str(self.id)
|
|
112
|
+
trace_id_str = str(self.trace_id)
|
|
113
|
+
parent_id_str = str(self.parent_id) if self.parent_id else None
|
|
114
|
+
|
|
115
|
+
# Handle attributes serialization
|
|
116
|
+
attributes_out = self.attributes
|
|
117
|
+
if serialize_attributes and isinstance(self.attributes, dict):
|
|
118
|
+
attributes_out = json.dumps(self.attributes)
|
|
119
|
+
|
|
101
120
|
return {
|
|
102
|
-
"Id":
|
|
103
|
-
"TraceId":
|
|
104
|
-
"ParentId":
|
|
121
|
+
"Id": id_str,
|
|
122
|
+
"TraceId": trace_id_str,
|
|
123
|
+
"ParentId": parent_id_str,
|
|
105
124
|
"Name": self.name,
|
|
106
125
|
"StartTime": self.start_time,
|
|
107
126
|
"EndTime": self.end_time,
|
|
108
|
-
"Attributes":
|
|
127
|
+
"Attributes": attributes_out,
|
|
109
128
|
"Status": self.status,
|
|
110
129
|
"CreatedAt": self.created_at,
|
|
111
130
|
"UpdatedAt": self.updated_at,
|
|
@@ -168,9 +187,18 @@ class _SpanUtils:
|
|
|
168
187
|
|
|
169
188
|
@staticmethod
|
|
170
189
|
def otel_span_to_uipath_span(
|
|
171
|
-
otel_span: ReadableSpan,
|
|
190
|
+
otel_span: ReadableSpan,
|
|
191
|
+
custom_trace_id: Optional[str] = None,
|
|
192
|
+
serialize_attributes: bool = True,
|
|
172
193
|
) -> UiPathSpan:
|
|
173
|
-
"""Convert an OpenTelemetry span to a UiPathSpan.
|
|
194
|
+
"""Convert an OpenTelemetry span to a UiPathSpan.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
otel_span: The OpenTelemetry span to convert
|
|
198
|
+
custom_trace_id: Optional custom trace ID to use
|
|
199
|
+
serialize_attributes: If True, serialize attributes to JSON string (backwards compatible).
|
|
200
|
+
If False, keep as dict for optimized processing. Default True.
|
|
201
|
+
"""
|
|
174
202
|
# Extract the context information from the OTel span
|
|
175
203
|
span_context = otel_span.get_span_context()
|
|
176
204
|
|
|
@@ -192,10 +220,11 @@ class _SpanUtils:
|
|
|
192
220
|
if parent_span_id_str:
|
|
193
221
|
parent_id = uuid.UUID(parent_span_id_str)
|
|
194
222
|
|
|
195
|
-
#
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
223
|
+
# Build attributes dict efficiently
|
|
224
|
+
# Use the otel attributes as base - we only add new keys, don't modify existing
|
|
225
|
+
otel_attrs = otel_span.attributes if otel_span.attributes else {}
|
|
226
|
+
# Only copy if we need to modify - we'll build attributes_dict lazily
|
|
227
|
+
attributes_dict: dict[str, Any] = dict(otel_attrs) if otel_attrs else {}
|
|
199
228
|
|
|
200
229
|
# Map status
|
|
201
230
|
status = 1 # Default to OK
|
|
@@ -203,32 +232,31 @@ class _SpanUtils:
|
|
|
203
232
|
status = 2 # Error
|
|
204
233
|
attributes_dict["error"] = otel_span.status.description
|
|
205
234
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
235
|
+
# Process inputs - avoid redundant parsing if already parsed
|
|
236
|
+
original_inputs = otel_attrs.get("input", None)
|
|
209
237
|
if original_inputs:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
attributes_dict["input.value"] = json_inputs
|
|
238
|
+
if isinstance(original_inputs, str):
|
|
239
|
+
try:
|
|
240
|
+
attributes_dict["input.value"] = json.loads(original_inputs)
|
|
214
241
|
attributes_dict["input.mime_type"] = "application/json"
|
|
215
|
-
|
|
242
|
+
except Exception as e:
|
|
243
|
+
logger.warning(f"Error parsing inputs: {e}")
|
|
216
244
|
attributes_dict["input.value"] = original_inputs
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
attributes_dict["input.value"] = str(original_inputs)
|
|
245
|
+
else:
|
|
246
|
+
attributes_dict["input.value"] = original_inputs
|
|
220
247
|
|
|
248
|
+
# Process outputs - avoid redundant parsing if already parsed
|
|
249
|
+
original_outputs = otel_attrs.get("output", None)
|
|
221
250
|
if original_outputs:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
attributes_dict["output.value"] = json_outputs
|
|
251
|
+
if isinstance(original_outputs, str):
|
|
252
|
+
try:
|
|
253
|
+
attributes_dict["output.value"] = json.loads(original_outputs)
|
|
226
254
|
attributes_dict["output.mime_type"] = "application/json"
|
|
227
|
-
|
|
255
|
+
except Exception as e:
|
|
256
|
+
logger.warning(f"Error parsing output: {e}")
|
|
228
257
|
attributes_dict["output.value"] = original_outputs
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
attributes_dict["output.value"] = str(original_outputs)
|
|
258
|
+
else:
|
|
259
|
+
attributes_dict["output.value"] = original_outputs
|
|
232
260
|
|
|
233
261
|
# Add events as additional attributes if they exist
|
|
234
262
|
if otel_span.events:
|
|
@@ -275,7 +303,9 @@ class _SpanUtils:
|
|
|
275
303
|
trace_id=trace_id,
|
|
276
304
|
parent_id=parent_id,
|
|
277
305
|
name=otel_span.name,
|
|
278
|
-
attributes=json.dumps(attributes_dict)
|
|
306
|
+
attributes=json.dumps(attributes_dict)
|
|
307
|
+
if serialize_attributes
|
|
308
|
+
else attributes_dict,
|
|
279
309
|
start_time=start_time,
|
|
280
310
|
end_time=end_time_str,
|
|
281
311
|
status=status,
|