uipath 2.1.85__tar.gz → 2.1.86__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.

Files changed (354) hide show
  1. uipath-2.1.86/.github/workflows/test-uipath-langchain.yml +144 -0
  2. {uipath-2.1.85 → uipath-2.1.86}/PKG-INFO +1 -1
  3. {uipath-2.1.85 → uipath-2.1.86}/pyproject.toml +1 -1
  4. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_project_files.py +122 -0
  5. uipath-2.1.86/src/uipath/_cli/cli_pull.py +59 -0
  6. {uipath-2.1.85 → uipath-2.1.86}/testcases/apicalls-testcase/run.sh +1 -0
  7. {uipath-2.1.85 → uipath-2.1.86}/testcases/basic-testcase/run.sh +2 -0
  8. {uipath-2.1.85 → uipath-2.1.86}/testcases/common/validate_output.sh +2 -2
  9. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/run.sh +2 -0
  10. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/run.sh +2 -0
  11. {uipath-2.1.85 → uipath-2.1.86}/uv.lock +1 -1
  12. uipath-2.1.85/.github/workflows/test-uipath-langchain.yml +0 -184
  13. uipath-2.1.85/src/uipath/_cli/cli_pull.py +0 -199
  14. {uipath-2.1.85 → uipath-2.1.86}/.cursorrules +0 -0
  15. {uipath-2.1.85 → uipath-2.1.86}/.editorconfig +0 -0
  16. {uipath-2.1.85 → uipath-2.1.86}/.gitattributes +0 -0
  17. {uipath-2.1.85 → uipath-2.1.86}/.github/labeler.yml +0 -0
  18. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/auto-label.yml +0 -0
  19. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/cd.yml +0 -0
  20. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/ci.yml +0 -0
  21. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/commitlint.yml +0 -0
  22. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/integration_tests.yml +0 -0
  23. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/lint.yml +0 -0
  24. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/publish-dev.yml +0 -0
  25. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/publish-docs.yml +0 -0
  26. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/slack.yml +0 -0
  27. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  28. {uipath-2.1.85 → uipath-2.1.86}/.github/workflows/test.yml +0 -0
  29. {uipath-2.1.85 → uipath-2.1.86}/.gitignore +0 -0
  30. {uipath-2.1.85 → uipath-2.1.86}/.pre-commit-config.yaml +0 -0
  31. {uipath-2.1.85 → uipath-2.1.86}/.python-version +0 -0
  32. {uipath-2.1.85 → uipath-2.1.86}/.vscode/extensions.json +0 -0
  33. {uipath-2.1.85 → uipath-2.1.86}/.vscode/launch.json +0 -0
  34. {uipath-2.1.85 → uipath-2.1.86}/.vscode/settings.json +0 -0
  35. {uipath-2.1.85 → uipath-2.1.86}/CONTRIBUTING.md +0 -0
  36. {uipath-2.1.85 → uipath-2.1.86}/LICENSE +0 -0
  37. {uipath-2.1.85 → uipath-2.1.86}/README.md +0 -0
  38. {uipath-2.1.85 → uipath-2.1.86}/docs/CONTRIBUTING.md +0 -0
  39. {uipath-2.1.85 → uipath-2.1.86}/docs/FAQ.md +0 -0
  40. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/env-preparation-failed-dark.png +0 -0
  41. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/env-preparation-failed-light.png +0 -0
  42. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/favicon.png +0 -0
  43. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/llms.txt +0 -0
  44. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/logo-dark.svg +0 -0
  45. {uipath-2.1.85 → uipath-2.1.86}/docs/assets/logo-light.svg +0 -0
  46. {uipath-2.1.85 → uipath-2.1.86}/docs/cli/index.md +0 -0
  47. {uipath-2.1.85 → uipath-2.1.86}/docs/core/actions.md +0 -0
  48. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  49. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/cloud_env_var_light.gif +0 -0
  50. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  51. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  52. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/copy_path_dark.png +0 -0
  53. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets/copy_path_light.png +0 -0
  54. {uipath-2.1.85 → uipath-2.1.86}/docs/core/assets.md +0 -0
  55. {uipath-2.1.85 → uipath-2.1.86}/docs/core/attachments.md +0 -0
  56. {uipath-2.1.85 → uipath-2.1.86}/docs/core/buckets.md +0 -0
  57. {uipath-2.1.85 → uipath-2.1.86}/docs/core/connections.md +0 -0
  58. {uipath-2.1.85 → uipath-2.1.86}/docs/core/context_grounding.md +0 -0
  59. {uipath-2.1.85 → uipath-2.1.86}/docs/core/documents.md +0 -0
  60. {uipath-2.1.85 → uipath-2.1.86}/docs/core/documents_models.md +0 -0
  61. {uipath-2.1.85 → uipath-2.1.86}/docs/core/environment_variables.md +0 -0
  62. {uipath-2.1.85 → uipath-2.1.86}/docs/core/getting_started.md +0 -0
  63. {uipath-2.1.85 → uipath-2.1.86}/docs/core/jobs.md +0 -0
  64. {uipath-2.1.85 → uipath-2.1.86}/docs/core/llm_gateway.md +0 -0
  65. {uipath-2.1.85 → uipath-2.1.86}/docs/core/processes.md +0 -0
  66. {uipath-2.1.85 → uipath-2.1.86}/docs/core/queues.md +0 -0
  67. {uipath-2.1.85 → uipath-2.1.86}/docs/core/traced.md +0 -0
  68. {uipath-2.1.85 → uipath-2.1.86}/docs/hooks.py +0 -0
  69. {uipath-2.1.85 → uipath-2.1.86}/docs/index.md +0 -0
  70. {uipath-2.1.85 → uipath-2.1.86}/docs/javascripts/extra.js +0 -0
  71. {uipath-2.1.85 → uipath-2.1.86}/docs/overrides/main.html +0 -0
  72. {uipath-2.1.85 → uipath-2.1.86}/docs/overrides/partials/actions.html +0 -0
  73. {uipath-2.1.85 → uipath-2.1.86}/docs/overrides/partials/logo.html +0 -0
  74. {uipath-2.1.85 → uipath-2.1.86}/docs/release_policy.md +0 -0
  75. {uipath-2.1.85 → uipath-2.1.86}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  76. {uipath-2.1.85 → uipath-2.1.86}/docs/stylesheets/extra.css +0 -0
  77. {uipath-2.1.85 → uipath-2.1.86}/justfile +0 -0
  78. {uipath-2.1.85 → uipath-2.1.86}/mkdocs.yml +0 -0
  79. {uipath-2.1.85 → uipath-2.1.86}/py.typed +0 -0
  80. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/.env.example +0 -0
  81. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/README.md +0 -0
  82. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/input.json +0 -0
  83. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/main.py +0 -0
  84. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/pyproject.toml +0 -0
  85. {uipath-2.1.85 → uipath-2.1.86}/samples/asset-modifier-agent/uv.lock +0 -0
  86. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/README.md +0 -0
  87. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/evals/eval-sets/default.json +0 -0
  88. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/evals/evaluators/equality.json +0 -0
  89. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
  90. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/main.py +0 -0
  91. {uipath-2.1.85 → uipath-2.1.86}/samples/calculator/pyproject.toml +0 -0
  92. {uipath-2.1.85 → uipath-2.1.86}/samples/event-trigger/.python-version +0 -0
  93. {uipath-2.1.85 → uipath-2.1.86}/samples/event-trigger/README.md +0 -0
  94. {uipath-2.1.85 → uipath-2.1.86}/samples/event-trigger/main.py +0 -0
  95. {uipath-2.1.85 → uipath-2.1.86}/samples/event-trigger/pyproject.toml +0 -0
  96. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/.env.example +0 -0
  97. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/README.md +0 -0
  98. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/input.json +0 -0
  99. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  100. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  101. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/pyproject.toml +0 -0
  102. {uipath-2.1.85 → uipath-2.1.86}/samples/google-ADK-agent/uv.lock +0 -0
  103. {uipath-2.1.85 → uipath-2.1.86}/scripts/debug_test.py +0 -0
  104. {uipath-2.1.85 → uipath-2.1.86}/scripts/lint_httpx_client.py +0 -0
  105. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/__init__.py +0 -0
  106. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/README.md +0 -0
  107. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/__init__.py +0 -0
  108. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  109. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  110. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_models.py +0 -0
  111. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  112. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  113. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  114. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/_utils.py +0 -0
  115. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/auth_config.json +0 -0
  116. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/index.html +0 -0
  117. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/localhost.crt +0 -0
  118. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_auth/localhost.key +0 -0
  119. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  120. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  121. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  122. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  123. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  124. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  125. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  126. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  127. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  128. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  129. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  130. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  131. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  132. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  133. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  134. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  135. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  136. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  137. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  138. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  139. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  140. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  141. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_runtime.py +0 -0
  142. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  143. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  144. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  145. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  146. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  147. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  148. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  149. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  150. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  151. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  152. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  153. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_logging.py +0 -0
  154. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  155. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  156. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  157. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_templates/.rels.template +0 -0
  158. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  159. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_templates/main.py.template +0 -0
  160. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  161. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_common.py +0 -0
  162. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_console.py +0 -0
  163. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_constants.py +0 -0
  164. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_debug.py +0 -0
  165. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  166. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_folders.py +0 -0
  167. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_input_args.py +0 -0
  168. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  169. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_processes.py +0 -0
  170. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  171. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_tracing.py +0 -0
  172. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  173. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_auth.py +0 -0
  174. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_deploy.py +0 -0
  175. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_dev.py +0 -0
  176. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_eval.py +0 -0
  177. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_init.py +0 -0
  178. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_invoke.py +0 -0
  179. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_new.py +0 -0
  180. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_pack.py +0 -0
  181. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_publish.py +0 -0
  182. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_push.py +0 -0
  183. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/cli_run.py +0 -0
  184. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/middlewares.py +0 -0
  185. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_cli/spinner.py +0 -0
  186. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_config.py +0 -0
  187. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_events/__init__.py +0 -0
  188. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_events/_event_bus.py +0 -0
  189. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_events/_events.py +0 -0
  190. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_execution_context.py +0 -0
  191. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_folder_context.py +0 -0
  192. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_resources/AGENTS.md +0 -0
  193. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/__init__.py +0 -0
  194. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/_base_service.py +0 -0
  195. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/actions_service.py +0 -0
  196. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/api_client.py +0 -0
  197. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/assets_service.py +0 -0
  198. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/attachments_service.py +0 -0
  199. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/buckets_service.py +0 -0
  200. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/connections_service.py +0 -0
  201. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/context_grounding_service.py +0 -0
  202. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/documents_service.py +0 -0
  203. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/entities_service.py +0 -0
  204. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/external_application_service.py +0 -0
  205. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/folder_service.py +0 -0
  206. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/jobs_service.py +0 -0
  207. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/llm_gateway_service.py +0 -0
  208. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/processes_service.py +0 -0
  209. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_services/queues_service.py +0 -0
  210. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_uipath.py +0 -0
  211. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/__init__.py +0 -0
  212. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_auth.py +0 -0
  213. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_endpoint.py +0 -0
  214. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_infer_bindings.py +0 -0
  215. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_logs.py +0 -0
  216. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_read_overwrites.py +0 -0
  217. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_request_override.py +0 -0
  218. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_request_spec.py +0 -0
  219. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_ssl_context.py +0 -0
  220. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_url.py +0 -0
  221. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/_user_agent.py +0 -0
  222. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/_utils/constants.py +0 -0
  223. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/_utils.py +0 -0
  224. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/__init__.py +0 -0
  225. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/async_stream.py +0 -0
  226. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/citation.py +0 -0
  227. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/content.py +0 -0
  228. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/conversation.py +0 -0
  229. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/event.py +0 -0
  230. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/exchange.py +0 -0
  231. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/message.py +0 -0
  232. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/meta.py +0 -0
  233. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/conversation/tool.py +0 -0
  234. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/agent/models/agent.py +0 -0
  235. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/_helpers/__init__.py +0 -0
  236. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/_helpers/helpers.py +0 -0
  237. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/__init__.py +0 -0
  238. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  239. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  240. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  241. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  242. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  243. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  244. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/mocks/__init__.py +0 -0
  245. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/mocks/mockable.py +0 -0
  246. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/models/__init__.py +0 -0
  247. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/eval/models/models.py +0 -0
  248. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/__init__.py +0 -0
  249. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/action_schema.py +0 -0
  250. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/actions.py +0 -0
  251. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/assets.py +0 -0
  252. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/attachment.py +0 -0
  253. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/auth.py +0 -0
  254. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/buckets.py +0 -0
  255. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/connections.py +0 -0
  256. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/context_grounding.py +0 -0
  257. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/context_grounding_index.py +0 -0
  258. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/documents.py +0 -0
  259. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/entities.py +0 -0
  260. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/errors.py +0 -0
  261. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/exceptions.py +0 -0
  262. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/interrupt_models.py +0 -0
  263. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/job.py +0 -0
  264. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/llm_gateway.py +0 -0
  265. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/processes.py +0 -0
  266. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/models/queues.py +0 -0
  267. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/py.typed +0 -0
  268. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/telemetry/__init__.py +0 -0
  269. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/telemetry/_constants.py +0 -0
  270. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/telemetry/_track.py +0 -0
  271. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/tracing/__init__.py +0 -0
  272. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/tracing/_otel_exporters.py +0 -0
  273. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/tracing/_traced.py +0 -0
  274. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/tracing/_utils.py +0 -0
  275. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/utils/__init__.py +0 -0
  276. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/utils/_endpoints_manager.py +0 -0
  277. {uipath-2.1.85 → uipath-2.1.86}/src/uipath/utils/dynamic_schema.py +0 -0
  278. {uipath-2.1.85 → uipath-2.1.86}/testcases/apicalls-testcase/main.py +0 -0
  279. {uipath-2.1.85 → uipath-2.1.86}/testcases/apicalls-testcase/pyproject.toml +0 -0
  280. {uipath-2.1.85 → uipath-2.1.86}/testcases/apicalls-testcase/src/assert.py +0 -0
  281. {uipath-2.1.85 → uipath-2.1.86}/testcases/basic-testcase/main.py +0 -0
  282. {uipath-2.1.85 → uipath-2.1.86}/testcases/basic-testcase/pyproject.toml +0 -0
  283. {uipath-2.1.85 → uipath-2.1.86}/testcases/basic-testcase/src/assert.py +0 -0
  284. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/agent.mermaid +0 -0
  285. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/langgraph.json +0 -0
  286. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/pyproject.toml +0 -0
  287. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/src/assert.py +0 -0
  288. {uipath-2.1.85 → uipath-2.1.86}/testcases/langchain-cross/src/main.py +0 -0
  289. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/agent.mermaid +0 -0
  290. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/llama_index.json +0 -0
  291. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/pyproject.toml +0 -0
  292. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/src/assert.py +0 -0
  293. {uipath-2.1.85 → uipath-2.1.86}/testcases/llamaindex-cross/src/main.py +0 -0
  294. {uipath-2.1.85 → uipath-2.1.86}/tests/__init__.py +0 -0
  295. {uipath-2.1.85 → uipath-2.1.86}/tests/agent/models/test_agent.py +0 -0
  296. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/conftest.py +0 -0
  297. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/eval/mocks/test_mocks.py +0 -0
  298. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  299. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/mocks/bindings_script.py +0 -0
  300. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/mocks/pyproject.toml +0 -0
  301. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/mocks/simple_script.py +0 -0
  302. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/mocks/uipath-mock.json +0 -0
  303. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  304. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_auth.py +0 -0
  305. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_hitl.py +0 -0
  306. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_init.py +0 -0
  307. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_init_agents_md.py +0 -0
  308. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_input_args.py +0 -0
  309. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_invoke.py +0 -0
  310. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_new.py +0 -0
  311. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_oidc_utils.py +0 -0
  312. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_pack.py +0 -0
  313. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  314. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_portal_service_refresh_token.py +0 -0
  315. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_publish.py +0 -0
  316. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_pull.py +0 -0
  317. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_push.py +0 -0
  318. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_run.py +0 -0
  319. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/test_utils.py +0 -0
  320. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/utils/common.py +0 -0
  321. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/utils/project_details.py +0 -0
  322. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/utils/test_dynamic_schema.py +0 -0
  323. {uipath-2.1.85 → uipath-2.1.86}/tests/cli/utils/uipath_json.py +0 -0
  324. {uipath-2.1.85 → uipath-2.1.86}/tests/conftest.py +0 -0
  325. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/conftest.py +0 -0
  326. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_actions_service.py +0 -0
  327. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_api_client.py +0 -0
  328. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_assets_service.py +0 -0
  329. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_attachments_service.py +0 -0
  330. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_base_service.py +0 -0
  331. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_buckets_service.py +0 -0
  332. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_connections_service.py +0 -0
  333. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_context_grounding_service.py +0 -0
  334. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_documents_service.py +0 -0
  335. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_entities_service.py +0 -0
  336. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_external_application_service.py +0 -0
  337. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_folder_service.py +0 -0
  338. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_jobs_service.py +0 -0
  339. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_llm_integration.py +0 -0
  340. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  341. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_llm_service.py +0 -0
  342. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_processes_service.py +0 -0
  343. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_queues_service.py +0 -0
  344. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  345. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  346. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  347. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  348. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/test_bindings_inference.py +0 -0
  349. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/test_config.py +0 -0
  350. {uipath-2.1.85 → uipath-2.1.86}/tests/sdk/test_overwrites.py +0 -0
  351. {uipath-2.1.85 → uipath-2.1.86}/tests/tracing/test_otel_exporters.py +0 -0
  352. {uipath-2.1.85 → uipath-2.1.86}/tests/tracing/test_span_utils.py +0 -0
  353. {uipath-2.1.85 → uipath-2.1.86}/tests/tracing/test_traced.py +0 -0
  354. {uipath-2.1.85 → uipath-2.1.86}/tests/tracing/test_tracing_manager.py +0 -0
@@ -0,0 +1,144 @@
1
+ name: Test UiPath Langchain
2
+
3
+ on:
4
+ pull_request:
5
+ types: [ opened, synchronize, reopened, labeled ]
6
+
7
+ jobs:
8
+ test-uipath-langchain:
9
+ runs-on: ${{ matrix.os }}
10
+ strategy:
11
+ matrix:
12
+ python-version: [ "3.10", "3.11", "3.12", "3.13" ]
13
+ os: [ ubuntu-latest, windows-latest ]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ # Only run if PR has the test:uipath-langchain label
19
+ if: contains(github.event.pull_request.labels.*.name, 'test:uipath-langchain')
20
+
21
+ steps:
22
+ - name: Checkout uipath-python
23
+ uses: actions/checkout@v4
24
+ with:
25
+ path: 'uipath-python'
26
+
27
+ - name: Setup uv
28
+ uses: astral-sh/setup-uv@v5
29
+
30
+ - name: Setup Python
31
+ uses: actions/setup-python@v5
32
+ with:
33
+ python-version: ${{ matrix.python-version }}
34
+
35
+ - name: Build uipath-python package
36
+ working-directory: uipath-python
37
+ run: uv build
38
+
39
+ - name: Checkout uipath-langchain-python
40
+ uses: actions/checkout@v4
41
+ with:
42
+ repository: 'UiPath/uipath-langchain-python'
43
+ path: 'uipath-langchain-python'
44
+
45
+ - name: Update uipath-python version
46
+ shell: bash
47
+ working-directory: uipath-langchain-python
48
+ run: uv add ../uipath-python/dist/*.whl --dev
49
+
50
+ - name: Run uipath-langchain tests
51
+ working-directory: uipath-langchain-python
52
+ run: |
53
+ uv sync
54
+ uv run pytest
55
+
56
+ discover-testcases:
57
+ runs-on: ubuntu-latest
58
+ permissions:
59
+ contents: read
60
+ needs: [test-uipath-langchain]
61
+ outputs:
62
+ testcases: ${{ steps.discover.outputs.testcases }}
63
+ steps:
64
+ - name: Checkout uipath-langchain-python
65
+ uses: actions/checkout@v4
66
+ with:
67
+ repository: 'UiPath/uipath-langchain-python'
68
+ path: 'uipath-langchain-python'
69
+
70
+ - name: Discover testcases
71
+ id: discover
72
+ working-directory: uipath-langchain-python
73
+ run: |
74
+ # Find all testcase folders (excluding common folders like README, etc.)
75
+ testcase_dirs=$(find testcases -maxdepth 1 -type d -name "*-*" | sed 's|testcases/||' | sort)
76
+
77
+ echo "Found testcase directories:"
78
+ echo "$testcase_dirs"
79
+
80
+ # Convert to JSON array for matrix
81
+ testcases_json=$(echo "$testcase_dirs" | jq -R -s -c 'split("\n")[:-1]')
82
+ echo "testcases=$testcases_json" >> $GITHUB_OUTPUT
83
+
84
+ run-uipath-langchain-integration-tests:
85
+ runs-on: ubuntu-latest
86
+ needs: [discover-testcases]
87
+ container:
88
+ image: ghcr.io/astral-sh/uv:python3.12-bookworm
89
+ env:
90
+ UIPATH_JOB_KEY: "3a03d5cb-fa21-4021-894d-a8e2eda0afe0"
91
+ permissions:
92
+ contents: read
93
+ strategy:
94
+ fail-fast: false
95
+ matrix:
96
+ testcase: ${{ fromJson(needs.discover-testcases.outputs.testcases) }}
97
+ environment: [alpha, staging] # temporary disable [cloud]
98
+ use_azure_chat: [true, false]
99
+
100
+ name: "${{ matrix.testcase }} / ${{ matrix.environment }} / ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
101
+
102
+ steps:
103
+ - name: Checkout uipath-python
104
+ uses: actions/checkout@v4
105
+ with:
106
+ path: 'uipath-python'
107
+
108
+ - name: Build uipath-python package
109
+ working-directory: uipath-python
110
+ run: uv build
111
+
112
+ - name: Checkout uipath-langchain-python
113
+ uses: actions/checkout@v4
114
+ with:
115
+ repository: 'UiPath/uipath-langchain-python'
116
+ path: 'uipath-langchain-python'
117
+
118
+ - name: Update uipath-python version
119
+ shell: bash
120
+ working-directory: uipath-langchain-python
121
+ run: uv add ../uipath-python/dist/*.whl
122
+
123
+ - name: Install dependencies
124
+ working-directory: uipath-langchain-python
125
+ run: uv sync
126
+
127
+ - name: Run testcase
128
+ env:
129
+ CLIENT_ID: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_ID || matrix.environment == 'staging' && secrets.STAGING_TEST_CLIENT_ID || matrix.environment == 'cloud' && secrets.CLOUD_TEST_CLIENT_ID }}
130
+ CLIENT_SECRET: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_SECRET || matrix.environment == 'staging' && secrets.STAGING_TEST_CLIENT_SECRET || matrix.environment == 'cloud' && secrets.CLOUD_TEST_CLIENT_SECRET }}
131
+ BASE_URL: ${{ matrix.environment == 'alpha' && secrets.ALPHA_BASE_URL || matrix.environment == 'staging' && secrets.STAGING_BASE_URL || matrix.environment == 'cloud' && secrets.CLOUD_BASE_URL }}
132
+ USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}
133
+ UV_PYTHON: "3.12"
134
+ working-directory: uipath-langchain-python/testcases/${{ matrix.testcase }}
135
+ run: |
136
+ echo "Running testcase: ${{ matrix.testcase }}"
137
+ echo "Environment: ${{ matrix.environment }}"
138
+ echo "LLM: ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
139
+ echo "USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}"
140
+
141
+ # Execute the testcase run script directly
142
+ bash run.sh
143
+ bash ../common/validate_output.sh
144
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.85
3
+ Version: 2.1.86
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.85"
3
+ version = "2.1.86"
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"
@@ -1,13 +1,22 @@
1
1
  # type: ignore
2
+ import hashlib
2
3
  import json
3
4
  import os
4
5
  import re
6
+ from pathlib import Path
5
7
  from typing import Any, Dict, Optional, Tuple
6
8
 
9
+ import click
7
10
  from pydantic import BaseModel
8
11
 
9
12
  from .._utils._console import ConsoleLogger
10
13
  from ._constants import is_binary_file
14
+ from ._studio_project import (
15
+ ProjectFile,
16
+ ProjectFolder,
17
+ StudioClient,
18
+ get_folder_by_name,
19
+ )
11
20
 
12
21
  try:
13
22
  import tomllib
@@ -431,3 +440,116 @@ def files_to_include(
431
440
  )
432
441
  )
433
442
  return extra_files
443
+
444
+
445
+ def compute_normalized_hash(content: str) -> str:
446
+ """Compute hash of normalized content.
447
+
448
+ Args:
449
+ content: Content to hash
450
+
451
+ Returns:
452
+ str: SHA256 hash of the normalized content
453
+ """
454
+ try:
455
+ # Try to parse as JSON to handle formatting
456
+ json_content = json.loads(content)
457
+ normalized = json.dumps(json_content, indent=2)
458
+ except json.JSONDecodeError:
459
+ # Not JSON, normalize line endings
460
+ normalized = content.replace("\r\n", "\n").replace("\r", "\n")
461
+
462
+ return hashlib.sha256(normalized.encode("utf-8")).hexdigest()
463
+
464
+
465
+ def collect_files_from_folder(
466
+ folder: ProjectFolder, base_path: str, files_dict: Dict[str, ProjectFile]
467
+ ) -> None:
468
+ """Recursively collect all files from a folder and its subfolders.
469
+
470
+ Args:
471
+ folder: The folder to collect files from
472
+ base_path: Base path for file paths
473
+ files_dict: Dictionary to store collected files
474
+ """
475
+ # Add files from current folder
476
+ for file in folder.files:
477
+ file_path = os.path.join(base_path, file.name)
478
+ files_dict[file_path] = file
479
+
480
+ # Recursively process subfolders
481
+ for subfolder in folder.folders:
482
+ subfolder_path = os.path.join(base_path, subfolder.name)
483
+ collect_files_from_folder(subfolder, subfolder_path, files_dict)
484
+
485
+
486
+ async def download_folder_files(
487
+ studio_client: StudioClient,
488
+ folder: ProjectFolder,
489
+ base_path: Path,
490
+ ) -> None:
491
+ """Download files from a folder recursively.
492
+
493
+ Args:
494
+ studio_client: Studio client
495
+ folder: The folder to download files from
496
+ base_path: Base path for local file storage
497
+ """
498
+ files_dict: Dict[str, ProjectFile] = {}
499
+ collect_files_from_folder(folder, "", files_dict)
500
+ for file_path, remote_file in files_dict.items():
501
+ local_path = base_path / file_path
502
+ local_path.parent.mkdir(parents=True, exist_ok=True)
503
+
504
+ # Download remote file
505
+ response = await studio_client.download_file_async(remote_file.id)
506
+ remote_content = response.read().decode("utf-8")
507
+ remote_hash = compute_normalized_hash(remote_content)
508
+
509
+ if os.path.exists(local_path):
510
+ # Read and hash local file
511
+ with open(local_path, "r", encoding="utf-8") as f:
512
+ local_content = f.read()
513
+ local_hash = compute_normalized_hash(local_content)
514
+
515
+ # Compare hashes
516
+ if local_hash != remote_hash:
517
+ styled_path = click.style(str(file_path), fg="cyan")
518
+ console.warning(f"File {styled_path}" + " differs from remote version.")
519
+ response = click.prompt("Do you want to overwrite it? (y/n)", type=str)
520
+ if response.lower() == "y":
521
+ with open(local_path, "w", encoding="utf-8", newline="\n") as f:
522
+ f.write(remote_content)
523
+ console.success(f"Updated {click.style(str(file_path), fg='cyan')}")
524
+ else:
525
+ console.info(f"Skipped {click.style(str(file_path), fg='cyan')}")
526
+ else:
527
+ console.info(
528
+ f"File {click.style(str(file_path), fg='cyan')} is up to date"
529
+ )
530
+ else:
531
+ # File doesn't exist locally, create it
532
+ with open(local_path, "w", encoding="utf-8", newline="\n") as f:
533
+ f.write(remote_content)
534
+ console.success(f"Downloaded {click.style(str(file_path), fg='cyan')}")
535
+
536
+
537
+ async def pull_project(project_id: str, download_configuration: dict[str, Path]):
538
+ studio_client = StudioClient(project_id)
539
+
540
+ with console.spinner("Pulling UiPath project files..."):
541
+ try:
542
+ structure = await studio_client.get_project_structure_async()
543
+ for source_key, destination in download_configuration.items():
544
+ source_folder = get_folder_by_name(structure, source_key)
545
+ if source_folder:
546
+ await download_folder_files(
547
+ studio_client,
548
+ source_folder,
549
+ destination,
550
+ )
551
+ else:
552
+ console.warning(f"No {source_key} folder found in remote project")
553
+
554
+ except Exception as e:
555
+ console.error(f"Failed to pull UiPath project: {str(e)}")
@@ -0,0 +1,59 @@
1
+ # type: ignore
2
+ """CLI command for pulling remote project files from UiPath StudioWeb solution.
3
+
4
+ This module provides functionality to pull remote project files from a UiPath StudioWeb solution.
5
+ It handles:
6
+ - File downloads from source_code and evals folders
7
+ - Maintaining folder structure locally
8
+ - File comparison using hashes
9
+ - Interactive confirmation for overwriting files
10
+ """
11
+
12
+ # type: ignore
13
+ import asyncio
14
+ import os
15
+ from pathlib import Path
16
+
17
+ import click
18
+
19
+ from ..telemetry import track
20
+ from ._utils._console import ConsoleLogger
21
+ from ._utils._constants import UIPATH_PROJECT_ID
22
+ from ._utils._project_files import pull_project
23
+
24
+ console = ConsoleLogger()
25
+
26
+
27
+ @click.command()
28
+ @click.argument(
29
+ "root",
30
+ type=click.Path(exists=False, file_okay=False, dir_okay=True, path_type=Path),
31
+ default=Path("."),
32
+ )
33
+ @track
34
+ def pull(root: Path) -> None:
35
+ """Pull remote project files from Studio Web Project.
36
+
37
+ This command pulls the remote project files from a UiPath Studio Web project.
38
+ It downloads files from the source_code and evals folders, maintaining the
39
+ folder structure locally. Files are compared using hashes before overwriting,
40
+ and user confirmation is required for differing files.
41
+
42
+ Args:
43
+ root: The root directory to pull files into
44
+
45
+ Environment Variables:
46
+ UIPATH_PROJECT_ID: Required. The ID of the UiPath Studio Web project
47
+
48
+ Example:
49
+ $ uipath pull
50
+ $ uipath pull /path/to/project
51
+ """
52
+ if not (project_id := os.getenv(UIPATH_PROJECT_ID, False)):
53
+ console.error("UIPATH_PROJECT_ID environment variable not found.")
54
+
55
+ default_download_configuration = {
56
+ "source_code": root,
57
+ "evals": root / "evals",
58
+ }
59
+ asyncio.run(pull_project(project_id, default_download_configuration))
@@ -1,4 +1,5 @@
1
1
  #!/bin/bash
2
+ set -e
2
3
 
3
4
  echo "Syncing dependencies..."
4
5
  uv sync
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ set -e
3
+
2
4
  echo "Syncing dependencies..."
3
5
  uv sync
4
6
 
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
 
3
3
  # Common utility to print UiPath output file
4
- # Usage: source /app/testcases/common/print_output.sh
4
+ # Usage: source /app/testcases/common/validate_output.sh
5
5
 
6
6
  debug_print_uipath_output() {
7
7
  echo "Printing output file..."
@@ -32,4 +32,4 @@ validate_output() {
32
32
  echo "Testcase completed successfully."
33
33
  }
34
34
 
35
- validate_output
35
+ validate_output
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ set -e
3
+
2
4
  echo "Syncing dependencies..."
3
5
  uv sync
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ set -e
3
+
2
4
  echo "Syncing dependencies..."
3
5
  uv sync
4
6
 
@@ -2146,7 +2146,7 @@ wheels = [
2146
2146
 
2147
2147
  [[package]]
2148
2148
  name = "uipath"
2149
- version = "2.1.85"
2149
+ version = "2.1.86"
2150
2150
  source = { editable = "." }
2151
2151
  dependencies = [
2152
2152
  { name = "azure-monitor-opentelemetry" },
@@ -1,184 +0,0 @@
1
- name: Test UiPath Langchain
2
-
3
- on:
4
- pull_request:
5
- types: [ opened, synchronize, reopened, labeled ]
6
-
7
- jobs:
8
- test-uipath-langchain:
9
- runs-on: ${{ matrix.os }}
10
- strategy:
11
- matrix:
12
- python-version: [ "3.10", "3.11", "3.12", "3.13" ]
13
- os: [ ubuntu-latest, windows-latest ]
14
-
15
- permissions:
16
- contents: read
17
-
18
- # Only run if PR has the test:uipath-langchain label
19
- if: contains(github.event.pull_request.labels.*.name, 'test:uipath-langchain')
20
-
21
- steps:
22
- - name: Checkout uipath-python
23
- uses: actions/checkout@v4
24
- with:
25
- path: 'uipath-python'
26
-
27
- - name: Setup uv
28
- uses: astral-sh/setup-uv@v5
29
-
30
- - name: Setup Python
31
- uses: actions/setup-python@v5
32
- with:
33
- python-version: ${{ matrix.python-version }}
34
-
35
- - name: Build uipath-python package
36
- run: |
37
- cd uipath-python
38
- uv build
39
-
40
- - name: Checkout uipath-langchain-python
41
- uses: actions/checkout@v4
42
- with:
43
- repository: 'UiPath/uipath-langchain-python'
44
- path: 'uipath-langchain-python'
45
-
46
- - name: Update uipath-python version
47
- shell: bash
48
- run: |
49
- cd uipath-langchain-python
50
- uv add ../uipath-python/dist/*.whl --dev
51
-
52
- - name: Run uipath-langchain tests
53
- run: |
54
- cd uipath-langchain-python
55
- uv sync
56
- uv run pytest
57
-
58
- discover-testcases:
59
- runs-on: ubuntu-latest
60
- permissions:
61
- contents: read
62
- needs: [test-uipath-langchain]
63
- outputs:
64
- testcases: ${{ steps.discover.outputs.testcases }}
65
- steps:
66
- - name: Checkout uipath-langchain-python
67
- uses: actions/checkout@v4
68
- with:
69
- repository: 'UiPath/uipath-langchain-python'
70
- path: 'uipath-langchain-python'
71
-
72
- - name: Discover testcases
73
- id: discover
74
- run: |
75
- cd uipath-langchain-python
76
-
77
- # Find all testcase folders (excluding common folders like README, etc.)
78
- testcase_dirs=$(find testcases -maxdepth 1 -type d -name "*-*" | sed 's|testcases/||' | sort)
79
-
80
- echo "Found testcase directories:"
81
- echo "$testcase_dirs"
82
-
83
- # Convert to JSON array for matrix
84
- testcases_json=$(echo "$testcase_dirs" | jq -R -s -c 'split("\n")[:-1]')
85
- echo "testcases=$testcases_json" >> $GITHUB_OUTPUT
86
-
87
- run-uipath-langchain-integration-tests:
88
- runs-on: ubuntu-latest
89
- needs: [discover-testcases]
90
- permissions:
91
- contents: read
92
- strategy:
93
- matrix:
94
- testcase: ${{ fromJson(needs.discover-testcases.outputs.testcases) }}
95
- environment: [alpha, cloud]
96
- use_azure_chat: [true, false]
97
- steps:
98
-
99
- - name: Checkout uipath-python
100
- uses: actions/checkout@v4
101
- with:
102
- path: 'uipath-python'
103
-
104
- - name: Setup uv
105
- uses: astral-sh/setup-uv@v5
106
-
107
- - name: Build uipath-python package
108
- run: |
109
- cd uipath-python
110
- uv build
111
-
112
- - name: Checkout uipath-langchain-python
113
- uses: actions/checkout@v4
114
- with:
115
- repository: 'UiPath/uipath-langchain-python'
116
- path: 'uipath-langchain-python'
117
-
118
- - name: Copy wheel to uipath-langchain
119
- run: |
120
- mkdir -p uipath-langchain-python/wheels
121
- cp uipath-python/dist/*.whl uipath-langchain-python/wheels/
122
-
123
- - name: Update uipath-python version
124
- shell: bash
125
- run: |
126
- cd uipath-langchain-python
127
- WHL=$(ls wheels/*.whl | head -n1)
128
- WHL_NAME=$(basename "$WHL")
129
- echo "Using wheel: $WHL_NAME"
130
- sed -i "s|uipath>=.*|uipath @ file:///app/wheels/$WHL_NAME\",|" pyproject.toml
131
-
132
- if ! grep -q '\[tool.hatch.metadata\]' pyproject.toml; then
133
- echo -e '\n[tool.hatch.metadata]\nallow-direct-references = true' >> pyproject.toml
134
- fi
135
-
136
- - name: Set up Docker Buildx
137
- uses: docker/setup-buildx-action@v3
138
-
139
- - name: Build Docker image
140
- run: |
141
- cd uipath-langchain-python
142
- echo "Building Docker image at $(date)"
143
- docker build -f testcases/Dockerfile \
144
- -t uipath-langchain-testbase:latest .
145
- echo "Docker image built at $(date)"
146
-
147
- - name: Run integration test
148
- env:
149
- ALPHA_TEST_CLIENT_ID: ${{ secrets.ALPHA_TEST_CLIENT_ID }}
150
- ALPHA_TEST_CLIENT_SECRET: ${{ secrets.ALPHA_TEST_CLIENT_SECRET }}
151
- ALPHA_BASE_URL: ${{ secrets.ALPHA_BASE_URL }}
152
- CLOUD_TEST_CLIENT_ID: ${{ secrets.CLOUD_TEST_CLIENT_ID }}
153
- CLOUD_TEST_CLIENT_SECRET: ${{ secrets.CLOUD_TEST_CLIENT_SECRET }}
154
- CLOUD_BASE_URL: ${{ secrets.CLOUD_BASE_URL }}
155
- run: |
156
- cd uipath-langchain-python
157
-
158
- testcase="${{ matrix.testcase }}"
159
- environment="${{ matrix.environment }}"
160
- use_azure_chat="${{ matrix.use_azure_chat }}"
161
-
162
- echo "Running testcase: $testcase"
163
- echo "Environment: $environment"
164
- echo "LLM: $( [ $use_azure_chat == "true" ] && echo "UiPathAzureChatOpenAI" || echo "UiPathChat" )"
165
- echo "USE_AZURE_CHAT: $use_azure_chat"
166
-
167
- if [ "$environment" == "alpha" ]; then
168
- CLIENT_ID=$ALPHA_TEST_CLIENT_ID
169
- CLIENT_SECRET=$ALPHA_TEST_CLIENT_SECRET
170
- BASE_URL=$ALPHA_BASE_URL
171
- else
172
- CLIENT_ID=$CLOUD_TEST_CLIENT_ID
173
- CLIENT_SECRET=$CLOUD_TEST_CLIENT_SECRET
174
- BASE_URL=$CLOUD_BASE_URL
175
- fi
176
-
177
- docker run --rm \
178
- -e CLIENT_ID="$CLIENT_ID" \
179
- -e CLIENT_SECRET="$CLIENT_SECRET" \
180
- -e BASE_URL="$BASE_URL" \
181
- -e USE_AZURE_CHAT="$use_azure_chat" \
182
- uipath-langchain-testbase:latest \
183
- bash "/app/testcases/$testcase/run.sh"
184
-