uipath 2.1.57__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.
Files changed (305) hide show
  1. {uipath-2.1.57 → uipath-2.1.58}/PKG-INFO +1 -1
  2. {uipath-2.1.57 → uipath-2.1.58}/pyproject.toml +1 -1
  3. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/tracing/_traced.py +24 -8
  4. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/tracing/_utils.py +54 -13
  5. {uipath-2.1.57 → uipath-2.1.58}/tests/tracing/test_traced.py +105 -27
  6. {uipath-2.1.57 → uipath-2.1.58}/uv.lock +1 -1
  7. {uipath-2.1.57 → uipath-2.1.58}/.cursorrules +0 -0
  8. {uipath-2.1.57 → uipath-2.1.58}/.editorconfig +0 -0
  9. {uipath-2.1.57 → uipath-2.1.58}/.gitattributes +0 -0
  10. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/cd.yml +0 -0
  11. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/ci.yml +0 -0
  12. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/commitlint.yml +0 -0
  13. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/integration_tests.yml +0 -0
  14. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/lint.yml +0 -0
  15. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/publish-dev.yml +0 -0
  16. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/publish-docs.yml +0 -0
  17. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/slack.yml +0 -0
  18. {uipath-2.1.57 → uipath-2.1.58}/.github/workflows/test.yml +0 -0
  19. {uipath-2.1.57 → uipath-2.1.58}/.gitignore +0 -0
  20. {uipath-2.1.57 → uipath-2.1.58}/.pre-commit-config.yaml +0 -0
  21. {uipath-2.1.57 → uipath-2.1.58}/.python-version +0 -0
  22. {uipath-2.1.57 → uipath-2.1.58}/.vscode/extensions.json +0 -0
  23. {uipath-2.1.57 → uipath-2.1.58}/.vscode/launch.json +0 -0
  24. {uipath-2.1.57 → uipath-2.1.58}/.vscode/settings.json +0 -0
  25. {uipath-2.1.57 → uipath-2.1.58}/CONTRIBUTING.md +0 -0
  26. {uipath-2.1.57 → uipath-2.1.58}/LICENSE +0 -0
  27. {uipath-2.1.57 → uipath-2.1.58}/README.md +0 -0
  28. {uipath-2.1.57 → uipath-2.1.58}/docs/CONTRIBUTING.md +0 -0
  29. {uipath-2.1.57 → uipath-2.1.58}/docs/FAQ.md +0 -0
  30. {uipath-2.1.57 → uipath-2.1.58}/docs/assets/env-preparation-failed-dark.png +0 -0
  31. {uipath-2.1.57 → uipath-2.1.58}/docs/assets/env-preparation-failed-light.png +0 -0
  32. {uipath-2.1.57 → uipath-2.1.58}/docs/assets/favicon.png +0 -0
  33. {uipath-2.1.57 → uipath-2.1.58}/docs/assets/logo-dark.svg +0 -0
  34. {uipath-2.1.57 → uipath-2.1.58}/docs/assets/logo-light.svg +0 -0
  35. {uipath-2.1.57 → uipath-2.1.58}/docs/cli/index.md +0 -0
  36. {uipath-2.1.57 → uipath-2.1.58}/docs/core/actions.md +0 -0
  37. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  38. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/cloud_env_var_light.gif +0 -0
  39. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  40. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  41. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/copy_path_dark.png +0 -0
  42. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets/copy_path_light.png +0 -0
  43. {uipath-2.1.57 → uipath-2.1.58}/docs/core/assets.md +0 -0
  44. {uipath-2.1.57 → uipath-2.1.58}/docs/core/attachments.md +0 -0
  45. {uipath-2.1.57 → uipath-2.1.58}/docs/core/buckets.md +0 -0
  46. {uipath-2.1.57 → uipath-2.1.58}/docs/core/connections.md +0 -0
  47. {uipath-2.1.57 → uipath-2.1.58}/docs/core/context_grounding.md +0 -0
  48. {uipath-2.1.57 → uipath-2.1.58}/docs/core/environment_variables.md +0 -0
  49. {uipath-2.1.57 → uipath-2.1.58}/docs/core/getting_started.md +0 -0
  50. {uipath-2.1.57 → uipath-2.1.58}/docs/core/jobs.md +0 -0
  51. {uipath-2.1.57 → uipath-2.1.58}/docs/core/llm_gateway.md +0 -0
  52. {uipath-2.1.57 → uipath-2.1.58}/docs/core/processes.md +0 -0
  53. {uipath-2.1.57 → uipath-2.1.58}/docs/core/queues.md +0 -0
  54. {uipath-2.1.57 → uipath-2.1.58}/docs/core/traced.md +0 -0
  55. {uipath-2.1.57 → uipath-2.1.58}/docs/hooks.py +0 -0
  56. {uipath-2.1.57 → uipath-2.1.58}/docs/index.md +0 -0
  57. {uipath-2.1.57 → uipath-2.1.58}/docs/javascripts/extra.js +0 -0
  58. {uipath-2.1.57 → uipath-2.1.58}/docs/overrides/main.html +0 -0
  59. {uipath-2.1.57 → uipath-2.1.58}/docs/overrides/partials/actions.html +0 -0
  60. {uipath-2.1.57 → uipath-2.1.58}/docs/overrides/partials/logo.html +0 -0
  61. {uipath-2.1.57 → uipath-2.1.58}/docs/release_policy.md +0 -0
  62. {uipath-2.1.57 → uipath-2.1.58}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  63. {uipath-2.1.57 → uipath-2.1.58}/docs/stylesheets/extra.css +0 -0
  64. {uipath-2.1.57 → uipath-2.1.58}/justfile +0 -0
  65. {uipath-2.1.57 → uipath-2.1.58}/mkdocs.yml +0 -0
  66. {uipath-2.1.57 → uipath-2.1.58}/py.typed +0 -0
  67. {uipath-2.1.57 → uipath-2.1.58}/samples/calculator/README.md +0 -0
  68. {uipath-2.1.57 → uipath-2.1.58}/samples/calculator/main.py +0 -0
  69. {uipath-2.1.57 → uipath-2.1.58}/samples/calculator/pyproject.toml +0 -0
  70. {uipath-2.1.57 → uipath-2.1.58}/samples/event-trigger/.python-version +0 -0
  71. {uipath-2.1.57 → uipath-2.1.58}/samples/event-trigger/README.md +0 -0
  72. {uipath-2.1.57 → uipath-2.1.58}/samples/event-trigger/main.py +0 -0
  73. {uipath-2.1.57 → uipath-2.1.58}/samples/event-trigger/pyproject.toml +0 -0
  74. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/.env.example +0 -0
  75. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/README.md +0 -0
  76. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/input.json +0 -0
  77. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  78. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  79. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/pyproject.toml +0 -0
  80. {uipath-2.1.57 → uipath-2.1.58}/samples/google-ADK-agent/uv.lock +0 -0
  81. {uipath-2.1.57 → uipath-2.1.58}/scripts/debug_test.py +0 -0
  82. {uipath-2.1.57 → uipath-2.1.58}/scripts/lint_httpx_client.py +0 -0
  83. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/__init__.py +0 -0
  84. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/README.md +0 -0
  85. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/__init__.py +0 -0
  86. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  87. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  88. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
  89. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_models.py +0 -0
  90. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  91. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  92. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  93. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/_utils.py +0 -0
  94. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/auth_config.json +0 -0
  95. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/index.html +0 -0
  96. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/localhost.crt +0 -0
  97. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_auth/localhost.key +0 -0
  98. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  99. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  100. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  101. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  102. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  103. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  104. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  105. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  106. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  107. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  108. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  109. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  110. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  111. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  112. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  113. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  114. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_evals/_runtime.py +0 -0
  115. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  116. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  117. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  118. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  119. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_logging.py +0 -0
  120. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  121. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  122. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  123. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_templates/.rels.template +0 -0
  124. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  125. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_templates/main.py.template +0 -0
  126. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  127. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_common.py +0 -0
  128. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_console.py +0 -0
  129. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_constants.py +0 -0
  130. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_debug.py +0 -0
  131. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  132. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_folders.py +0 -0
  133. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_input_args.py +0 -0
  134. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  135. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_processes.py +0 -0
  136. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_project_files.py +0 -0
  137. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  138. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_tracing.py +0 -0
  139. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  140. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_auth.py +0 -0
  141. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_deploy.py +0 -0
  142. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_dev.py +0 -0
  143. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_eval.py +0 -0
  144. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_init.py +0 -0
  145. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_invoke.py +0 -0
  146. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_new.py +0 -0
  147. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_pack.py +0 -0
  148. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_publish.py +0 -0
  149. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_pull.py +0 -0
  150. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_push.py +0 -0
  151. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/cli_run.py +0 -0
  152. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/middlewares.py +0 -0
  153. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_cli/spinner.py +0 -0
  154. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_config.py +0 -0
  155. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_execution_context.py +0 -0
  156. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_folder_context.py +0 -0
  157. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_resources/AGENTS.md +0 -0
  158. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/__init__.py +0 -0
  159. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/_base_service.py +0 -0
  160. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/actions_service.py +0 -0
  161. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/api_client.py +0 -0
  162. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/assets_service.py +0 -0
  163. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/attachments_service.py +0 -0
  164. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/buckets_service.py +0 -0
  165. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/connections_service.py +0 -0
  166. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/context_grounding_service.py +0 -0
  167. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/entities_service.py +0 -0
  168. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/folder_service.py +0 -0
  169. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/jobs_service.py +0 -0
  170. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/llm_gateway_service.py +0 -0
  171. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/processes_service.py +0 -0
  172. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_services/queues_service.py +0 -0
  173. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_uipath.py +0 -0
  174. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/__init__.py +0 -0
  175. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_endpoint.py +0 -0
  176. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_infer_bindings.py +0 -0
  177. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_logs.py +0 -0
  178. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_read_overwrites.py +0 -0
  179. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_request_override.py +0 -0
  180. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_request_spec.py +0 -0
  181. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_ssl_context.py +0 -0
  182. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_url.py +0 -0
  183. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/_user_agent.py +0 -0
  184. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/_utils/constants.py +0 -0
  185. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/_utils.py +0 -0
  186. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/__init__.py +0 -0
  187. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/async_stream.py +0 -0
  188. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/citation.py +0 -0
  189. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/content.py +0 -0
  190. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/conversation.py +0 -0
  191. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/event.py +0 -0
  192. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/exchange.py +0 -0
  193. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/message.py +0 -0
  194. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/meta.py +0 -0
  195. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/conversation/tool.py +0 -0
  196. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/agent/models/agent.py +0 -0
  197. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/_helpers/__init__.py +0 -0
  198. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/_helpers/helpers.py +0 -0
  199. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/__init__.py +0 -0
  200. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  201. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  202. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  203. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  204. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  205. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  206. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/models/__init__.py +0 -0
  207. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/eval/models/models.py +0 -0
  208. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/__init__.py +0 -0
  209. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/action_schema.py +0 -0
  210. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/actions.py +0 -0
  211. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/assets.py +0 -0
  212. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/attachment.py +0 -0
  213. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/buckets.py +0 -0
  214. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/connections.py +0 -0
  215. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/context_grounding.py +0 -0
  216. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/context_grounding_index.py +0 -0
  217. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/entities.py +0 -0
  218. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/errors.py +0 -0
  219. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/exceptions.py +0 -0
  220. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/interrupt_models.py +0 -0
  221. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/job.py +0 -0
  222. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/llm_gateway.py +0 -0
  223. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/processes.py +0 -0
  224. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/models/queues.py +0 -0
  225. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/py.typed +0 -0
  226. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/telemetry/__init__.py +0 -0
  227. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/telemetry/_constants.py +0 -0
  228. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/telemetry/_track.py +0 -0
  229. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/tracing/__init__.py +0 -0
  230. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/tracing/_otel_exporters.py +0 -0
  231. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/utils/__init__.py +0 -0
  232. {uipath-2.1.57 → uipath-2.1.58}/src/uipath/utils/_endpoints_manager.py +0 -0
  233. {uipath-2.1.57 → uipath-2.1.58}/testcases/apicalls-testcase/main.py +0 -0
  234. {uipath-2.1.57 → uipath-2.1.58}/testcases/apicalls-testcase/pyproject.toml +0 -0
  235. {uipath-2.1.57 → uipath-2.1.58}/testcases/apicalls-testcase/run.sh +0 -0
  236. {uipath-2.1.57 → uipath-2.1.58}/testcases/apicalls-testcase/src/assert.py +0 -0
  237. {uipath-2.1.57 → uipath-2.1.58}/testcases/basic-testcase/main.py +0 -0
  238. {uipath-2.1.57 → uipath-2.1.58}/testcases/basic-testcase/pyproject.toml +0 -0
  239. {uipath-2.1.57 → uipath-2.1.58}/testcases/basic-testcase/run.sh +0 -0
  240. {uipath-2.1.57 → uipath-2.1.58}/testcases/basic-testcase/src/assert.py +0 -0
  241. {uipath-2.1.57 → uipath-2.1.58}/testcases/common/validate_output.sh +0 -0
  242. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/agent.mermaid +0 -0
  243. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/langgraph.json +0 -0
  244. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/pyproject.toml +0 -0
  245. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/run.sh +0 -0
  246. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/src/assert.py +0 -0
  247. {uipath-2.1.57 → uipath-2.1.58}/testcases/langchain-cross/src/main.py +0 -0
  248. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/agent.mermaid +0 -0
  249. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/llama_index.json +0 -0
  250. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/pyproject.toml +0 -0
  251. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/run.sh +0 -0
  252. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/src/assert.py +0 -0
  253. {uipath-2.1.57 → uipath-2.1.58}/testcases/llamaindex-cross/src/main.py +0 -0
  254. {uipath-2.1.57 → uipath-2.1.58}/tests/__init__.py +0 -0
  255. {uipath-2.1.57 → uipath-2.1.58}/tests/agent/models/test_agent.py +0 -0
  256. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/conftest.py +0 -0
  257. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  258. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/mocks/bindings_script.py +0 -0
  259. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/mocks/pyproject.toml +0 -0
  260. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/mocks/simple_script.py +0 -0
  261. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/mocks/uipath-mock.json +0 -0
  262. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  263. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_auth.py +0 -0
  264. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_hitl.py +0 -0
  265. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_init.py +0 -0
  266. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_init_agents_md.py +0 -0
  267. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_input_args.py +0 -0
  268. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_invoke.py +0 -0
  269. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_new.py +0 -0
  270. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_pack.py +0 -0
  271. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  272. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_portal_service_refresh_token.py +0 -0
  273. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_publish.py +0 -0
  274. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_pull.py +0 -0
  275. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_push.py +0 -0
  276. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_run.py +0 -0
  277. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/test_utils.py +0 -0
  278. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/utils/common.py +0 -0
  279. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/utils/project_details.py +0 -0
  280. {uipath-2.1.57 → uipath-2.1.58}/tests/cli/utils/uipath_json.py +0 -0
  281. {uipath-2.1.57 → uipath-2.1.58}/tests/conftest.py +0 -0
  282. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/conftest.py +0 -0
  283. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_actions_service.py +0 -0
  284. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_api_client.py +0 -0
  285. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_assets_service.py +0 -0
  286. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_attachments_service.py +0 -0
  287. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_base_service.py +0 -0
  288. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_buckets_service.py +0 -0
  289. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_connections_service.py +0 -0
  290. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_context_grounding_service.py +0 -0
  291. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_entities_service.py +0 -0
  292. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_folder_service.py +0 -0
  293. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_jobs_service.py +0 -0
  294. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_llm_integration.py +0 -0
  295. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  296. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_llm_service.py +0 -0
  297. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_processes_service.py +0 -0
  298. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_queues_service.py +0 -0
  299. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  300. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/test_bindings_inference.py +0 -0
  301. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/test_config.py +0 -0
  302. {uipath-2.1.57 → uipath-2.1.58}/tests/sdk/test_overwrites.py +0 -0
  303. {uipath-2.1.57 → uipath-2.1.58}/tests/tracing/test_otel_exporters.py +0 -0
  304. {uipath-2.1.57 → uipath-2.1.58}/tests/tracing/test_span_utils.py +0 -0
  305. {uipath-2.1.57 → 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.57
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.57"
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"
@@ -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("inputs", inputs)
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("output", json.dumps(output, default=str))
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("inputs", inputs)
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("output", json.dumps(output, default=str))
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("inputs", inputs)
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("output", json.dumps(output, default=str))
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("inputs", inputs)
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("output", json.dumps(output, default=str))
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("inputs", None)
154
- original_outputs = attributes_dict.get("outputs", None)
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["inputs"] = json_inputs
192
+ attributes_dict["input.value"] = json_inputs
193
+ attributes_dict["input.mime_type"] = "application/json"
161
194
  else:
162
- attributes_dict["inputs"] = original_inputs
195
+ attributes_dict["input.value"] = original_inputs
163
196
  except Exception as e:
164
- print(f"Error parsing inputs: {e}")
165
- attributes_dict["inputs"] = str(original_inputs)
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["outputs"] = json_outputs
204
+ attributes_dict["output.value"] = json_outputs
205
+ attributes_dict["output.mime_type"] = "application/json"
172
206
  else:
173
- attributes_dict["outputs"] = original_outputs
207
+ attributes_dict["output.value"] = original_outputs
174
208
  except Exception as e:
175
- print(f"Error parsing outputs: {e}")
176
- attributes_dict["outputs"] = str(original_outputs)
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=str)
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(
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  from asyncio import sleep
3
3
  from dataclasses import asdict, dataclass
4
+ from enum import Enum
4
5
  from typing import Any, Dict, List, Sequence
5
6
 
6
7
  import pytest
@@ -70,9 +71,9 @@ def test_traced_sync_function(setup_tracer):
70
71
  span = spans[0]
71
72
  assert span.name == "sample_function"
72
73
  assert span.attributes["span_type"] == "function_call_sync"
73
- assert "inputs" in span.attributes
74
- assert "output" in span.attributes
75
- assert span.attributes["output"] == "5"
74
+ assert "input.value" in span.attributes
75
+ assert "output.value" in span.attributes
76
+ assert span.attributes["output.value"] == "5"
76
77
 
77
78
 
78
79
  @pytest.mark.asyncio
@@ -95,9 +96,9 @@ async def test_traced_async_function(setup_tracer):
95
96
  span = spans[0]
96
97
  assert span.name == "sample_async_function"
97
98
  assert span.attributes["span_type"] == "function_call_async"
98
- assert "inputs" in span.attributes
99
- assert "output" in span.attributes
100
- assert span.attributes["output"] == "6"
99
+ assert "input.value" in span.attributes
100
+ assert "output.value" in span.attributes
101
+ assert span.attributes["output.value"] == "6"
101
102
 
102
103
 
103
104
  def test_traced_generator_function(setup_tracer):
@@ -118,9 +119,9 @@ def test_traced_generator_function(setup_tracer):
118
119
  span = spans[0]
119
120
  assert span.name == "sample_generator_function"
120
121
  assert span.attributes["span_type"] == "function_call_generator_sync"
121
- assert "inputs" in span.attributes
122
- assert "output" in span.attributes
123
- assert span.attributes["output"] == "[0, 1, 2]"
122
+ assert "input.value" in span.attributes
123
+ assert "output.value" in span.attributes
124
+ assert span.attributes["output.value"] == "[0, 1, 2]"
124
125
 
125
126
 
126
127
  @pytest.mark.asyncio
@@ -142,9 +143,9 @@ async def test_traced_async_generator_function(setup_tracer):
142
143
  span = spans[0]
143
144
  assert span.name == "sample_async_generator_function"
144
145
  assert span.attributes["span_type"] == "function_call_generator_async"
145
- assert "inputs" in span.attributes
146
- assert "output" in span.attributes
147
- assert span.attributes["output"] == "[0, 1, 2]"
146
+ assert "input.value" in span.attributes
147
+ assert "output.value" in span.attributes
148
+ assert span.attributes["output.value"] == "[0, 1, 2]"
148
149
 
149
150
 
150
151
  def test_traced_with_basic_processors(setup_tracer):
@@ -178,13 +179,13 @@ def test_traced_with_basic_processors(setup_tracer):
178
179
  span = spans[0]
179
180
 
180
181
  # Check that input processor was applied (doubles the inputs)
181
- inputs_json = span.attributes["inputs"]
182
+ inputs_json = span.attributes["input.value"]
182
183
  inputs = json.loads(inputs_json)
183
184
  assert inputs["x"] == 6 # 3 doubled to 6
184
185
  assert inputs["y"] == 8 # 4 doubled to 8
185
186
 
186
187
  # Check that output processor was applied (formatted as string in dict)
187
- output_json = span.attributes["output"]
188
+ output_json = span.attributes["output.value"]
188
189
  output = json.loads(output_json)
189
190
  assert output == {"result": "12"} # Result wrapped in dict with string conversion
190
191
 
@@ -225,13 +226,13 @@ async def test_traced_async_with_basic_processors(setup_tracer):
225
226
  span = spans[0]
226
227
 
227
228
  # Check that input processor was applied
228
- inputs_json = span.attributes["inputs"]
229
+ inputs_json = span.attributes["input.value"]
229
230
  inputs = json.loads(inputs_json)
230
231
  assert inputs["message"] == "hello"
231
232
  assert inputs["context"] == "test" # Added by processor
232
233
 
233
234
  # Check that output processor was applied
234
- output_json = span.attributes["output"]
235
+ output_json = span.attributes["output.value"]
235
236
  output = json.loads(output_json)
236
237
  assert output["status"] == "completed"
237
238
  assert output["message"] == "hello"
@@ -345,7 +346,7 @@ def test_traced_with_input_processor(setup_tracer):
345
346
  assert span.name == "process_payment"
346
347
 
347
348
  # Verify inputs were processed
348
- inputs_json = span.attributes["inputs"]
349
+ inputs_json = span.attributes["input.value"]
349
350
  inputs = json.loads(inputs_json)
350
351
  assert "card_number" in inputs
351
352
  assert inputs["card_number"] == "**** **** **** 1111" # Should be masked
@@ -381,7 +382,7 @@ def test_traced_with_output_processor(setup_tracer):
381
382
  span = spans[0]
382
383
 
383
384
  # Verify output was processed for tracing
384
- output_json = span.attributes["output"]
385
+ output_json = span.attributes["output.value"]
385
386
  output = json.loads(output_json)
386
387
  assert output["user_info"]["name"] == "Anonymous User"
387
388
  assert output["user_info"]["email"] == "anonymous@example.com"
@@ -412,7 +413,7 @@ def test_traced_with_dataclass_output(setup_tracer):
412
413
  spans = exporter.get_exported_spans()
413
414
 
414
415
  # Verify the output was processed for tracing
415
- output_json = spans[0].attributes["output"]
416
+ output_json = spans[0].attributes["output.value"]
416
417
  output = json.loads(output_json)
417
418
  assert "email" in output
418
419
  assert output["email"] == "anonymous@example.com" # Masked in the trace
@@ -450,12 +451,12 @@ async def test_traced_async_with_processors(setup_tracer):
450
451
  span = spans[0]
451
452
 
452
453
  # Verify inputs were processed
453
- inputs_json = span.attributes["inputs"]
454
+ inputs_json = span.attributes["input.value"]
454
455
  inputs = json.loads(inputs_json)
455
456
  assert inputs["card_number"] == "**** **** **** 4444"
456
457
 
457
458
  # Verify outputs were processed
458
- output_json = span.attributes["output"]
459
+ output_json = span.attributes["output.value"]
459
460
  output = json.loads(output_json)
460
461
  assert output["user_info"]["name"] == "Anonymous User"
461
462
  assert output["user_info"]["email"] == "anonymous@example.com"
@@ -488,12 +489,12 @@ def test_traced_generator_with_processors(setup_tracer):
488
489
  span = spans[0]
489
490
 
490
491
  # Verify inputs were processed
491
- inputs_json = span.attributes["inputs"]
492
+ inputs_json = span.attributes["input.value"]
492
493
  inputs = json.loads(inputs_json)
493
494
  assert inputs["card_number"] == "**** **** **** 1111"
494
495
 
495
496
  # Verify outputs were processed
496
- output_json = span.attributes["output"]
497
+ output_json = span.attributes["output.value"]
497
498
  output = json.loads(output_json)
498
499
  assert len(output) == 3
499
500
  for transaction in output:
@@ -532,12 +533,12 @@ async def test_traced_async_generator_with_processors(setup_tracer):
532
533
  span = spans[0]
533
534
 
534
535
  # Verify inputs were processed
535
- inputs_json = span.attributes["inputs"]
536
+ inputs_json = span.attributes["input.value"]
536
537
  inputs = json.loads(inputs_json)
537
538
  assert inputs["card_number"] == "**** **** **** 4444"
538
539
 
539
540
  # Verify outputs were processed
540
- output_json = span.attributes["output"]
541
+ output_json = span.attributes["output.value"]
541
542
  output = json.loads(output_json)
542
543
  assert len(output) == 2
543
544
  for transaction in output:
@@ -565,10 +566,87 @@ def test_traced_with_hide_input_outputs(setup_tracer):
565
566
  span = spans[0]
566
567
 
567
568
  # Verify both inputs and outputs were redacted
568
- inputs_json = span.attributes["inputs"]
569
+ inputs_json = span.attributes["input.value"]
569
570
  inputs = json.loads(inputs_json)
570
571
  assert inputs == {"redacted": "Input data not logged for privacy/security"}
571
572
 
572
- output_json = span.attributes["output"]
573
+ output_json = span.attributes["output.value"]
573
574
  output = json.loads(output_json)
574
575
  assert output == {"redacted": "Output data not logged for privacy/security"}
576
+
577
+
578
+ class Operator(Enum):
579
+ ADD = "+"
580
+ SUBTRACT = "-"
581
+ MULTIPLY = "*"
582
+ DIVIDE = "/"
583
+
584
+
585
+ @dataclass
586
+ class CalculatorInput:
587
+ a: float = 0.0
588
+ b: float = 0.0
589
+ operator: Operator = Operator.ADD
590
+
591
+
592
+ @dataclass
593
+ class CalculatorOutput:
594
+ result: float = 0.0
595
+ operator: Operator = Operator.ADD
596
+
597
+
598
+ def test_traced_complex_input_serialization(setup_tracer):
599
+ """Test that traced decorator properly serializes complex inputs like dataclasses with enums."""
600
+ exporter, provider = setup_tracer
601
+
602
+ @traced()
603
+ def test_complex_input(input: CalculatorInput) -> CalculatorOutput:
604
+ assert isinstance(input.a, float)
605
+ assert isinstance(input.b, float)
606
+ assert isinstance(input.operator, Operator)
607
+ return CalculatorOutput(result=(input.a * input.b), operator=Operator.MULTIPLY)
608
+
609
+ # Create a complex input with dataclass and enum
610
+ calculator_input = CalculatorInput(a=10.5, b=5.2, operator=Operator.MULTIPLY)
611
+ test_complex_input(calculator_input)
612
+
613
+ provider.shutdown() # Ensure spans are flushed
614
+ spans = exporter.get_exported_spans()
615
+
616
+ assert len(spans) == 1
617
+ span = spans[0]
618
+ assert span.name == "test_complex_input"
619
+ assert span.attributes["span_type"] == "function_call_sync"
620
+
621
+ # Verify that inputs are properly serialized as JSON
622
+ assert "input.value" in span.attributes
623
+ inputs_json = span.attributes["input.value"]
624
+ inputs = json.loads(inputs_json)
625
+
626
+ # Debug: Print the actual inputs structure
627
+ print(f"Inputs JSON: {inputs_json}")
628
+ print(f"Parsed inputs: {inputs}")
629
+
630
+ # Check that the dataclass is properly serialized
631
+ assert "input" in inputs
632
+ input_data = inputs["input"]
633
+
634
+ # Verify the dataclass fields are properly serialized
635
+ assert input_data["a"] == 10.5
636
+ assert input_data["b"] == 5.2
637
+ # Verify the enum is serialized as its value
638
+ assert input_data["operator"] == "*"
639
+
640
+ # Verify that outputs are properly serialized as JSON
641
+ assert "output.value" in span.attributes
642
+ output_json = span.attributes["output.value"]
643
+ output = json.loads(output_json)
644
+
645
+ # Debug: Print the actual output structure
646
+ print(f"Output JSON: {output_json}")
647
+ print(f"Parsed output: {output}")
648
+
649
+ # Verify the output dataclass fields are properly serialized
650
+ assert output["result"] == 54.6 # 10.5 * 5.2 = 54.6
651
+ # Verify the enum is serialized as its value
652
+ assert output["operator"] == "*"
@@ -2092,7 +2092,7 @@ wheels = [
2092
2092
 
2093
2093
  [[package]]
2094
2094
  name = "uipath"
2095
- version = "2.1.57"
2095
+ version = "2.1.58"
2096
2096
  source = { editable = "." }
2097
2097
  dependencies = [
2098
2098
  { name = "azure-monitor-opentelemetry" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes