uipath 2.1.56__tar.gz → 2.1.58__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {uipath-2.1.56 → uipath-2.1.58}/PKG-INFO +1 -1
- {uipath-2.1.56 → uipath-2.1.58}/pyproject.toml +1 -1
- uipath-2.1.58/src/uipath/agent/_utils.py +55 -0
- uipath-2.1.58/src/uipath/agent/models/agent.py +344 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/tracing/_traced.py +24 -8
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/tracing/_utils.py +54 -13
- uipath-2.1.58/tests/agent/models/test_agent.py +416 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/tracing/test_traced.py +105 -27
- {uipath-2.1.56 → uipath-2.1.58}/uv.lock +888 -888
- {uipath-2.1.56 → uipath-2.1.58}/.cursorrules +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.editorconfig +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.gitattributes +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.github/workflows/test.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.gitignore +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.python-version +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.vscode/extensions.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.vscode/launch.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/.vscode/settings.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/CONTRIBUTING.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/LICENSE +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/README.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/FAQ.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/assets/favicon.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/cli/index.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/actions.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/assets.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/attachments.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/buckets.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/connections.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/getting_started.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/jobs.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/processes.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/queues.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/core/traced.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/hooks.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/index.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/overrides/main.html +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/release_policy.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/justfile +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/mkdocs.yml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/py.typed +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/calculator/README.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/calculator/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/scripts/debug_test.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_evals/_runtime.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_config.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/job.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/py.typed +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/__init__.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/conftest.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_init.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_new.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_push.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_run.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/conftest.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.56 → uipath-2.1.58}/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.58
|
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.58"
|
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"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import logging
|
2
|
+
from pathlib import PurePath
|
3
|
+
|
4
|
+
from httpx import Response
|
5
|
+
from pydantic import TypeAdapter
|
6
|
+
|
7
|
+
from uipath._cli._utils._studio_project import (
|
8
|
+
ProjectFile,
|
9
|
+
ProjectFolder,
|
10
|
+
StudioClient,
|
11
|
+
resolve_path,
|
12
|
+
)
|
13
|
+
from uipath.agent.models.agent import AgentDefinition
|
14
|
+
|
15
|
+
logger = logging.getLogger(__name__)
|
16
|
+
|
17
|
+
|
18
|
+
async def get_file(
|
19
|
+
folder: ProjectFolder, path: PurePath, studio_client: StudioClient
|
20
|
+
) -> Response:
|
21
|
+
resolved = resolve_path(folder, path)
|
22
|
+
assert isinstance(resolved, ProjectFile), "Path file not found."
|
23
|
+
return await studio_client.download_file_async(resolved.id)
|
24
|
+
|
25
|
+
|
26
|
+
async def load_agent_definition(project_id: str):
|
27
|
+
studio_client = StudioClient(project_id=project_id)
|
28
|
+
project_structure = await studio_client.get_project_structure_async()
|
29
|
+
|
30
|
+
agent = (
|
31
|
+
await get_file(project_structure, PurePath("agent.json"), studio_client)
|
32
|
+
).json()
|
33
|
+
|
34
|
+
resolved_path = resolve_path(project_structure, PurePath("resources"))
|
35
|
+
if isinstance(resolved_path, ProjectFolder):
|
36
|
+
resource_folders = resolved_path.folders
|
37
|
+
else:
|
38
|
+
logger.warning(
|
39
|
+
"Unable to read resource information from project. Defaulting to empty resources."
|
40
|
+
)
|
41
|
+
resource_folders = []
|
42
|
+
|
43
|
+
resources = []
|
44
|
+
for resource in resource_folders:
|
45
|
+
resources.append(
|
46
|
+
(await get_file(resource, PurePath("resource.json"), studio_client)).json()
|
47
|
+
)
|
48
|
+
|
49
|
+
agent_definition = {
|
50
|
+
"id": project_id,
|
51
|
+
"name": project_structure.name,
|
52
|
+
"resources": resources,
|
53
|
+
**agent,
|
54
|
+
}
|
55
|
+
return TypeAdapter(AgentDefinition).validate_python(agent_definition)
|
@@ -0,0 +1,344 @@
|
|
1
|
+
"""Agent Models."""
|
2
|
+
|
3
|
+
from enum import Enum
|
4
|
+
from typing import Annotated, Any, Dict, List, Literal, Optional, Union
|
5
|
+
|
6
|
+
from pydantic import BaseModel, ConfigDict, Discriminator, Field, Tag
|
7
|
+
|
8
|
+
from uipath.models import Connection
|
9
|
+
|
10
|
+
|
11
|
+
class AgentResourceType(str, Enum):
|
12
|
+
"""Enum for resource types."""
|
13
|
+
|
14
|
+
TOOL = "tool"
|
15
|
+
CONTEXT = "context"
|
16
|
+
ESCALATION = "escalation"
|
17
|
+
|
18
|
+
|
19
|
+
class BaseAgentResourceConfig(BaseModel):
|
20
|
+
"""Base resource model with common properties."""
|
21
|
+
|
22
|
+
name: str
|
23
|
+
description: str
|
24
|
+
|
25
|
+
model_config = ConfigDict(
|
26
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
27
|
+
)
|
28
|
+
|
29
|
+
|
30
|
+
class AgentUnknownResourceConfig(BaseAgentResourceConfig):
|
31
|
+
"""Fallback for unknown or future resource types."""
|
32
|
+
|
33
|
+
resource_type: str = Field(alias="$resourceType")
|
34
|
+
|
35
|
+
model_config = ConfigDict(extra="allow")
|
36
|
+
|
37
|
+
|
38
|
+
class BaseAgentToolResourceConfig(BaseAgentResourceConfig):
|
39
|
+
"""Tool resource with tool-specific properties."""
|
40
|
+
|
41
|
+
resource_type: Literal[AgentResourceType.TOOL] = Field(alias="$resourceType")
|
42
|
+
input_schema: Dict[str, Any] = Field(
|
43
|
+
..., alias="inputSchema", description="Input schema for the tool"
|
44
|
+
)
|
45
|
+
|
46
|
+
model_config = ConfigDict(
|
47
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
48
|
+
)
|
49
|
+
|
50
|
+
|
51
|
+
class AgentToolType(str, Enum):
|
52
|
+
"""Agent tool type."""
|
53
|
+
|
54
|
+
AGENT = "agent"
|
55
|
+
INTEGRATION = "integration"
|
56
|
+
|
57
|
+
|
58
|
+
class AgentToolSettings(BaseModel):
|
59
|
+
"""Settings for tool configuration."""
|
60
|
+
|
61
|
+
max_attempts: Optional[int] = Field(None, alias="maxAttempts")
|
62
|
+
retry_delay: Optional[int] = Field(None, alias="retryDelay")
|
63
|
+
timeout: Optional[int] = Field(None)
|
64
|
+
|
65
|
+
model_config = ConfigDict(
|
66
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
67
|
+
)
|
68
|
+
|
69
|
+
|
70
|
+
class AgentProcessToolProperties(BaseModel):
|
71
|
+
"""Properties specific to tool configuration."""
|
72
|
+
|
73
|
+
folder_path: Optional[str] = Field(None, alias="folderPath")
|
74
|
+
process_name: Optional[str] = Field(None, alias="processName")
|
75
|
+
|
76
|
+
model_config = ConfigDict(
|
77
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
78
|
+
)
|
79
|
+
|
80
|
+
|
81
|
+
class AgentProcessToolResourceConfig(BaseAgentToolResourceConfig):
|
82
|
+
"""Tool resource with tool-specific properties."""
|
83
|
+
|
84
|
+
type: Literal[AgentToolType.AGENT] = AgentToolType.AGENT
|
85
|
+
output_schema: Dict[str, Any] = Field(
|
86
|
+
..., alias="outputSchema", description="Output schema for the tool"
|
87
|
+
)
|
88
|
+
properties: AgentProcessToolProperties = Field(
|
89
|
+
..., description="Tool-specific properties"
|
90
|
+
)
|
91
|
+
settings: AgentToolSettings = Field(
|
92
|
+
default_factory=AgentToolSettings, description="Tool settings"
|
93
|
+
)
|
94
|
+
|
95
|
+
model_config = ConfigDict(
|
96
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
97
|
+
)
|
98
|
+
|
99
|
+
|
100
|
+
class AgentIntegrationToolProperties(BaseModel):
|
101
|
+
"""Properties specific to tool configuration."""
|
102
|
+
|
103
|
+
tool_path: str = Field(..., alias="toolPath")
|
104
|
+
object_name: str = Field(..., alias="objectName")
|
105
|
+
tool_display_name: str = Field(..., alias="toolDisplayName")
|
106
|
+
tool_description: str = Field(..., alias="toolDescription")
|
107
|
+
method: str = Field(..., alias="method")
|
108
|
+
connection: Connection = Field(..., alias="connection")
|
109
|
+
body_structure: dict[str, Any] = Field(..., alias="bodyStructure")
|
110
|
+
|
111
|
+
model_config = ConfigDict(
|
112
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
113
|
+
)
|
114
|
+
|
115
|
+
|
116
|
+
class AgentIntegrationToolResourceConfig(BaseAgentToolResourceConfig):
|
117
|
+
"""Tool resource with tool-specific properties."""
|
118
|
+
|
119
|
+
type: Literal[AgentToolType.INTEGRATION] = AgentToolType.INTEGRATION
|
120
|
+
properties: AgentIntegrationToolProperties
|
121
|
+
|
122
|
+
model_config = ConfigDict(
|
123
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
124
|
+
)
|
125
|
+
|
126
|
+
|
127
|
+
class AgentUnknownToolResourceConfig(BaseAgentToolResourceConfig):
|
128
|
+
"""Fallback for unknown or future tool types."""
|
129
|
+
|
130
|
+
resource_type: Literal[AgentResourceType.TOOL] = AgentResourceType.TOOL
|
131
|
+
type: str = Field(alias="$resourceType")
|
132
|
+
|
133
|
+
model_config = ConfigDict(extra="allow")
|
134
|
+
|
135
|
+
|
136
|
+
class AgentContextSettings(BaseModel):
|
137
|
+
"""Settings for context configuration."""
|
138
|
+
|
139
|
+
result_count: int = Field(alias="resultCount")
|
140
|
+
retrieval_mode: Literal["Semantic", "Structured"] = Field(alias="retrievalMode")
|
141
|
+
threshold: float = Field(default=0)
|
142
|
+
|
143
|
+
model_config = ConfigDict(
|
144
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
145
|
+
)
|
146
|
+
|
147
|
+
|
148
|
+
class AgentContextResourceConfig(BaseAgentResourceConfig):
|
149
|
+
"""Context resource with context-specific properties."""
|
150
|
+
|
151
|
+
resource_type: Literal[AgentResourceType.CONTEXT] = Field(alias="$resourceType")
|
152
|
+
folder_path: str = Field(alias="folderPath")
|
153
|
+
index_name: str = Field(alias="indexName")
|
154
|
+
settings: AgentContextSettings = Field(..., description="Context settings")
|
155
|
+
|
156
|
+
model_config = ConfigDict(
|
157
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
158
|
+
)
|
159
|
+
|
160
|
+
|
161
|
+
class AgentEscalationChannelProperties(BaseModel):
|
162
|
+
"""Agent escalation channel properties."""
|
163
|
+
|
164
|
+
app_name: str = Field(..., alias="appName")
|
165
|
+
app_version: int = Field(..., alias="appVersion")
|
166
|
+
folder_name: Optional[str] = Field(..., alias="folderName")
|
167
|
+
resource_key: str = Field(..., alias="resourceKey")
|
168
|
+
is_actionable_message_enabled: Optional[bool] = Field(
|
169
|
+
None, alias="isActionableMessageEnabled"
|
170
|
+
)
|
171
|
+
actionable_message_meta_data: Optional[Any] = Field(
|
172
|
+
None, alias="actionableMessageMetaData"
|
173
|
+
)
|
174
|
+
|
175
|
+
model_config = ConfigDict(
|
176
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
177
|
+
)
|
178
|
+
|
179
|
+
|
180
|
+
class AgentEscalationChannel(BaseModel):
|
181
|
+
"""Agent escalation channel."""
|
182
|
+
|
183
|
+
id: str = Field(..., alias="id")
|
184
|
+
name: str = Field(..., alias="name")
|
185
|
+
type: str = Field(alias="type")
|
186
|
+
description: str = Field(..., alias="description")
|
187
|
+
input_schema: Dict[str, Any] = Field(
|
188
|
+
..., alias="inputSchema", description="Input schema for the escalation channel"
|
189
|
+
)
|
190
|
+
output_schema: Dict[str, Any] = Field(
|
191
|
+
...,
|
192
|
+
alias="outputSchema",
|
193
|
+
description="Output schema for the escalation channel",
|
194
|
+
)
|
195
|
+
properties: AgentEscalationChannelProperties = Field(..., alias="properties")
|
196
|
+
|
197
|
+
model_config = ConfigDict(
|
198
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
199
|
+
)
|
200
|
+
|
201
|
+
|
202
|
+
class AgentEscalationResourceConfig(BaseAgentResourceConfig):
|
203
|
+
"""Escalation resource with escalation-specific properties."""
|
204
|
+
|
205
|
+
resource_type: Literal[AgentResourceType.ESCALATION] = Field(alias="$resourceType")
|
206
|
+
channels: List[AgentEscalationChannel] = Field(alias="channels")
|
207
|
+
|
208
|
+
# escalation_type: int = Field(..., alias="escalationType")
|
209
|
+
is_agent_memory_enabled: bool = Field(alias="isAgentMemoryEnabled")
|
210
|
+
|
211
|
+
model_config = ConfigDict(
|
212
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
213
|
+
)
|
214
|
+
|
215
|
+
|
216
|
+
def custom_discriminator(data: Any) -> str:
|
217
|
+
"""Discriminator for resource types. This is required due to multi-key discrimination requirements for resources."""
|
218
|
+
if isinstance(data, dict):
|
219
|
+
resource_type = data.get("$resourceType")
|
220
|
+
if resource_type == AgentResourceType.CONTEXT:
|
221
|
+
return "AgentContextResourceConfig"
|
222
|
+
elif resource_type == AgentResourceType.ESCALATION:
|
223
|
+
return "AgentEscalationResourceConfig"
|
224
|
+
elif resource_type == AgentResourceType.TOOL:
|
225
|
+
tool_type = data.get("type")
|
226
|
+
if tool_type == AgentToolType.AGENT:
|
227
|
+
return "AgentProcessToolResourceConfig"
|
228
|
+
elif tool_type == AgentToolType.INTEGRATION:
|
229
|
+
return "AgentIntegrationToolResourceConfig"
|
230
|
+
else:
|
231
|
+
return "AgentUnknownToolResourceConfig"
|
232
|
+
else:
|
233
|
+
return "AgentUnknownResourceConfig"
|
234
|
+
raise ValueError("Invalid discriminator values")
|
235
|
+
|
236
|
+
|
237
|
+
AgentResourceConfig = Annotated[
|
238
|
+
Union[
|
239
|
+
Annotated[
|
240
|
+
AgentProcessToolResourceConfig, Tag("AgentProcessToolResourceConfig")
|
241
|
+
],
|
242
|
+
Annotated[
|
243
|
+
AgentIntegrationToolResourceConfig,
|
244
|
+
Tag("AgentIntegrationToolResourceConfig"),
|
245
|
+
],
|
246
|
+
Annotated[
|
247
|
+
AgentUnknownToolResourceConfig, Tag("AgentUnknownToolResourceConfig")
|
248
|
+
],
|
249
|
+
Annotated[AgentContextResourceConfig, Tag("AgentContextResourceConfig")],
|
250
|
+
Annotated[AgentEscalationResourceConfig, Tag("AgentEscalationResourceConfig")],
|
251
|
+
Annotated[AgentUnknownResourceConfig, Tag("AgentUnknownResourceConfig")],
|
252
|
+
],
|
253
|
+
Field(discriminator=Discriminator(custom_discriminator)),
|
254
|
+
]
|
255
|
+
|
256
|
+
|
257
|
+
class BaseAgentDefinition(BaseModel):
|
258
|
+
"""Main agent model."""
|
259
|
+
|
260
|
+
id: str = Field(..., description="Agent id or project name")
|
261
|
+
name: str = Field(..., description="Agent name or project name")
|
262
|
+
input_schema: Dict[str, Any] = Field(
|
263
|
+
..., alias="inputSchema", description="JSON schema for input arguments"
|
264
|
+
)
|
265
|
+
output_schema: Dict[str, Any] = Field(
|
266
|
+
..., alias="outputSchema", description="JSON schema for output arguments"
|
267
|
+
)
|
268
|
+
version: str = Field("1.0.0", description="Agent version")
|
269
|
+
resources: List[AgentResourceConfig] = Field(
|
270
|
+
..., description="List of tools, context, and escalation resources"
|
271
|
+
)
|
272
|
+
|
273
|
+
model_config = ConfigDict(
|
274
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
275
|
+
)
|
276
|
+
|
277
|
+
|
278
|
+
class AgentType(str, Enum):
|
279
|
+
"""Agent type."""
|
280
|
+
|
281
|
+
LOW_CODE = "lowCode"
|
282
|
+
|
283
|
+
|
284
|
+
class AgentMessageRole(str, Enum):
|
285
|
+
"""Enum for message roles."""
|
286
|
+
|
287
|
+
SYSTEM = "system"
|
288
|
+
USER = "user"
|
289
|
+
|
290
|
+
|
291
|
+
class AgentMessage(BaseModel):
|
292
|
+
"""Message model for agent conversations."""
|
293
|
+
|
294
|
+
role: AgentMessageRole
|
295
|
+
content: str
|
296
|
+
|
297
|
+
model_config = ConfigDict(
|
298
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
299
|
+
)
|
300
|
+
|
301
|
+
|
302
|
+
class AgentSettings(BaseModel):
|
303
|
+
"""Settings for agent configuration."""
|
304
|
+
|
305
|
+
engine: str = Field(..., description="Engine type, e.g., 'basic-v1'")
|
306
|
+
model: str = Field(..., description="LLM model identifier")
|
307
|
+
max_tokens: int = Field(
|
308
|
+
..., alias="maxTokens", description="Maximum number of tokens"
|
309
|
+
)
|
310
|
+
temperature: float = Field(..., description="Temperature for response generation")
|
311
|
+
|
312
|
+
model_config = ConfigDict(
|
313
|
+
validate_by_name=True, validate_by_alias=True, extra="allow"
|
314
|
+
)
|
315
|
+
|
316
|
+
|
317
|
+
class LowCodeAgentDefinition(BaseAgentDefinition):
|
318
|
+
"""Low code agent definition."""
|
319
|
+
|
320
|
+
type: Literal[AgentType.LOW_CODE] = AgentType.LOW_CODE
|
321
|
+
messages: List[AgentMessage] = Field(
|
322
|
+
..., description="List of system and user messages"
|
323
|
+
)
|
324
|
+
features: List[Any] = Field(
|
325
|
+
default_factory=list, description="Currently empty feature list"
|
326
|
+
)
|
327
|
+
settings: AgentSettings = Field(..., description="Agent settings configuration")
|
328
|
+
|
329
|
+
|
330
|
+
KnownAgentDefinition = Annotated[
|
331
|
+
Union[LowCodeAgentDefinition,],
|
332
|
+
Field(discriminator="type"),
|
333
|
+
]
|
334
|
+
|
335
|
+
|
336
|
+
class UnknownAgentDefinition(BaseAgentDefinition):
|
337
|
+
"""Fallback for unknown agent definitions."""
|
338
|
+
|
339
|
+
type: str
|
340
|
+
|
341
|
+
model_config = ConfigDict(extra="allow")
|
342
|
+
|
343
|
+
|
344
|
+
AgentDefinition = Union[KnownAgentDefinition, UnknownAgentDefinition]
|
@@ -215,11 +215,15 @@ def _opentelemetry_traced(
|
|
215
215
|
if input_processor:
|
216
216
|
processed_inputs = input_processor(json.loads(inputs))
|
217
217
|
inputs = json.dumps(processed_inputs, default=str)
|
218
|
-
span.set_attribute("
|
218
|
+
span.set_attribute("input.mime_type", "application/json")
|
219
|
+
span.set_attribute("input.value", inputs)
|
219
220
|
|
220
221
|
result = func(*args, **kwargs)
|
221
222
|
output = output_processor(result) if output_processor else result
|
222
|
-
span.set_attribute(
|
223
|
+
span.set_attribute(
|
224
|
+
"output.value", _SpanUtils.format_object_for_trace_json(output)
|
225
|
+
)
|
226
|
+
span.set_attribute("output.mime_type", "application/json")
|
223
227
|
return result
|
224
228
|
except Exception as e:
|
225
229
|
span.record_exception(e)
|
@@ -249,11 +253,15 @@ def _opentelemetry_traced(
|
|
249
253
|
if input_processor:
|
250
254
|
processed_inputs = input_processor(json.loads(inputs))
|
251
255
|
inputs = json.dumps(processed_inputs, default=str)
|
252
|
-
span.set_attribute("
|
256
|
+
span.set_attribute("input.mime_type", "application/json")
|
257
|
+
span.set_attribute("input.value", inputs)
|
253
258
|
|
254
259
|
result = await func(*args, **kwargs)
|
255
260
|
output = output_processor(result) if output_processor else result
|
256
|
-
span.set_attribute(
|
261
|
+
span.set_attribute(
|
262
|
+
"output.value", _SpanUtils.format_object_for_trace_json(output)
|
263
|
+
)
|
264
|
+
span.set_attribute("output.mime_type", "application/json")
|
257
265
|
return result
|
258
266
|
except Exception as e:
|
259
267
|
span.record_exception(e)
|
@@ -285,7 +293,8 @@ def _opentelemetry_traced(
|
|
285
293
|
if input_processor:
|
286
294
|
processed_inputs = input_processor(json.loads(inputs))
|
287
295
|
inputs = json.dumps(processed_inputs, default=str)
|
288
|
-
span.set_attribute("
|
296
|
+
span.set_attribute("input.mime_type", "application/json")
|
297
|
+
span.set_attribute("input.value", inputs)
|
289
298
|
|
290
299
|
outputs = []
|
291
300
|
for item in func(*args, **kwargs):
|
@@ -293,7 +302,10 @@ def _opentelemetry_traced(
|
|
293
302
|
span.add_event(f"Yielded: {item}")
|
294
303
|
yield item
|
295
304
|
output = output_processor(outputs) if output_processor else outputs
|
296
|
-
span.set_attribute(
|
305
|
+
span.set_attribute(
|
306
|
+
"output.value", _SpanUtils.format_object_for_trace_json(output)
|
307
|
+
)
|
308
|
+
span.set_attribute("output.mime_type", "application/json")
|
297
309
|
except Exception as e:
|
298
310
|
span.record_exception(e)
|
299
311
|
span.set_status(
|
@@ -324,7 +336,8 @@ def _opentelemetry_traced(
|
|
324
336
|
if input_processor:
|
325
337
|
processed_inputs = input_processor(json.loads(inputs))
|
326
338
|
inputs = json.dumps(processed_inputs, default=str)
|
327
|
-
span.set_attribute("
|
339
|
+
span.set_attribute("input.mime_type", "application/json")
|
340
|
+
span.set_attribute("input.value", inputs)
|
328
341
|
|
329
342
|
outputs = []
|
330
343
|
async for item in func(*args, **kwargs):
|
@@ -332,7 +345,10 @@ def _opentelemetry_traced(
|
|
332
345
|
span.add_event(f"Yielded: {item}")
|
333
346
|
yield item
|
334
347
|
output = output_processor(outputs) if output_processor else outputs
|
335
|
-
span.set_attribute(
|
348
|
+
span.set_attribute(
|
349
|
+
"output.value", _SpanUtils.format_object_for_trace_json(output)
|
350
|
+
)
|
351
|
+
span.set_attribute("output.mime_type", "application/json")
|
336
352
|
except Exception as e:
|
337
353
|
span.record_exception(e)
|
338
354
|
span.set_status(
|
@@ -4,10 +4,12 @@ import logging
|
|
4
4
|
import os
|
5
5
|
import random
|
6
6
|
import uuid
|
7
|
-
from dataclasses import dataclass, field
|
8
|
-
from datetime import datetime
|
7
|
+
from dataclasses import asdict, dataclass, field, is_dataclass
|
8
|
+
from datetime import datetime, timezone
|
9
|
+
from enum import Enum
|
9
10
|
from os import environ as env
|
10
11
|
from typing import Any, Dict, Optional
|
12
|
+
from zoneinfo import ZoneInfo
|
11
13
|
|
12
14
|
from opentelemetry.sdk.trace import ReadableSpan
|
13
15
|
from opentelemetry.trace import StatusCode
|
@@ -15,6 +17,36 @@ from opentelemetry.trace import StatusCode
|
|
15
17
|
logger = logging.getLogger(__name__)
|
16
18
|
|
17
19
|
|
20
|
+
def _simple_serialize_defaults(obj):
|
21
|
+
if hasattr(obj, "model_dump"):
|
22
|
+
return obj.model_dump(exclude_none=True, mode="json")
|
23
|
+
if hasattr(obj, "dict"):
|
24
|
+
return obj.dict()
|
25
|
+
if hasattr(obj, "to_dict"):
|
26
|
+
return obj.to_dict()
|
27
|
+
|
28
|
+
# Handle dataclasses
|
29
|
+
if is_dataclass(obj) and not isinstance(obj, type):
|
30
|
+
return asdict(obj)
|
31
|
+
|
32
|
+
# Handle enums
|
33
|
+
if isinstance(obj, Enum):
|
34
|
+
return obj.value
|
35
|
+
|
36
|
+
if isinstance(obj, (set, tuple)):
|
37
|
+
if hasattr(obj, "_asdict") and callable(obj._asdict):
|
38
|
+
return obj._asdict()
|
39
|
+
return list(obj)
|
40
|
+
|
41
|
+
if isinstance(obj, datetime):
|
42
|
+
return obj.isoformat()
|
43
|
+
|
44
|
+
if isinstance(obj, (timezone, ZoneInfo)):
|
45
|
+
return obj.tzname(None)
|
46
|
+
|
47
|
+
return str(obj)
|
48
|
+
|
49
|
+
|
18
50
|
@dataclass
|
19
51
|
class UiPathSpan:
|
20
52
|
"""Represents a span in the UiPath tracing system."""
|
@@ -150,30 +182,32 @@ class _SpanUtils:
|
|
150
182
|
status = 2 # Error
|
151
183
|
attributes_dict["error"] = otel_span.status.description
|
152
184
|
|
153
|
-
original_inputs = attributes_dict.get("
|
154
|
-
original_outputs = attributes_dict.get("
|
185
|
+
original_inputs = attributes_dict.get("input", None)
|
186
|
+
original_outputs = attributes_dict.get("output", None)
|
155
187
|
|
156
188
|
if original_inputs:
|
157
189
|
try:
|
158
190
|
if isinstance(original_inputs, str):
|
159
191
|
json_inputs = json.loads(original_inputs)
|
160
|
-
attributes_dict["
|
192
|
+
attributes_dict["input.value"] = json_inputs
|
193
|
+
attributes_dict["input.mime_type"] = "application/json"
|
161
194
|
else:
|
162
|
-
attributes_dict["
|
195
|
+
attributes_dict["input.value"] = original_inputs
|
163
196
|
except Exception as e:
|
164
|
-
|
165
|
-
attributes_dict["
|
197
|
+
logger.warning(f"Error parsing inputs: {e}")
|
198
|
+
attributes_dict["input.value"] = str(original_inputs)
|
166
199
|
|
167
200
|
if original_outputs:
|
168
201
|
try:
|
169
202
|
if isinstance(original_outputs, str):
|
170
203
|
json_outputs = json.loads(original_outputs)
|
171
|
-
attributes_dict["
|
204
|
+
attributes_dict["output.value"] = json_outputs
|
205
|
+
attributes_dict["output.mime_type"] = "application/json"
|
172
206
|
else:
|
173
|
-
attributes_dict["
|
207
|
+
attributes_dict["output.value"] = original_outputs
|
174
208
|
except Exception as e:
|
175
|
-
|
176
|
-
attributes_dict["
|
209
|
+
logger.warning(f"Error parsing output: {e}")
|
210
|
+
attributes_dict["output.value"] = str(original_outputs)
|
177
211
|
|
178
212
|
# Add events as additional attributes if they exist
|
179
213
|
if otel_span.events:
|
@@ -233,7 +267,14 @@ class _SpanUtils:
|
|
233
267
|
) -> str:
|
234
268
|
"""Return a JSON string of inputs from the function signature."""
|
235
269
|
result = _SpanUtils.format_args_for_trace(signature, *args, **kwargs)
|
236
|
-
return json.dumps(result, default=
|
270
|
+
return json.dumps(result, default=_simple_serialize_defaults)
|
271
|
+
|
272
|
+
@staticmethod
|
273
|
+
def format_object_for_trace_json(
|
274
|
+
input_object: Any,
|
275
|
+
) -> str:
|
276
|
+
"""Return a JSON string of inputs from the function signature."""
|
277
|
+
return json.dumps(input_object, default=_simple_serialize_defaults)
|
237
278
|
|
238
279
|
@staticmethod
|
239
280
|
def format_args_for_trace(
|