uipath 2.1.69__tar.gz → 2.1.71__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 (321) hide show
  1. {uipath-2.1.69 → uipath-2.1.71}/PKG-INFO +1 -1
  2. {uipath-2.1.69 → uipath-2.1.71}/pyproject.toml +1 -1
  3. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/__init__.py +15 -1
  4. uipath-2.1.71/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +98 -0
  5. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/context_grounding_service.py +304 -22
  6. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/constants.py +12 -0
  7. uipath-2.1.71/tests/sdk/services/test_context_grounding_service.py +875 -0
  8. {uipath-2.1.69 → uipath-2.1.71}/uv.lock +1 -1
  9. uipath-2.1.69/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -32
  10. uipath-2.1.69/tests/sdk/services/test_context_grounding_service.py +0 -334
  11. {uipath-2.1.69 → uipath-2.1.71}/.cursorrules +0 -0
  12. {uipath-2.1.69 → uipath-2.1.71}/.editorconfig +0 -0
  13. {uipath-2.1.69 → uipath-2.1.71}/.gitattributes +0 -0
  14. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/cd.yml +0 -0
  15. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/ci.yml +0 -0
  16. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/commitlint.yml +0 -0
  17. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/integration_tests.yml +0 -0
  18. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/lint.yml +0 -0
  19. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/publish-dev.yml +0 -0
  20. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/publish-docs.yml +0 -0
  21. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/slack.yml +0 -0
  22. {uipath-2.1.69 → uipath-2.1.71}/.github/workflows/test.yml +0 -0
  23. {uipath-2.1.69 → uipath-2.1.71}/.gitignore +0 -0
  24. {uipath-2.1.69 → uipath-2.1.71}/.pre-commit-config.yaml +0 -0
  25. {uipath-2.1.69 → uipath-2.1.71}/.python-version +0 -0
  26. {uipath-2.1.69 → uipath-2.1.71}/.vscode/extensions.json +0 -0
  27. {uipath-2.1.69 → uipath-2.1.71}/.vscode/launch.json +0 -0
  28. {uipath-2.1.69 → uipath-2.1.71}/.vscode/settings.json +0 -0
  29. {uipath-2.1.69 → uipath-2.1.71}/CONTRIBUTING.md +0 -0
  30. {uipath-2.1.69 → uipath-2.1.71}/LICENSE +0 -0
  31. {uipath-2.1.69 → uipath-2.1.71}/README.md +0 -0
  32. {uipath-2.1.69 → uipath-2.1.71}/docs/CONTRIBUTING.md +0 -0
  33. {uipath-2.1.69 → uipath-2.1.71}/docs/FAQ.md +0 -0
  34. {uipath-2.1.69 → uipath-2.1.71}/docs/assets/env-preparation-failed-dark.png +0 -0
  35. {uipath-2.1.69 → uipath-2.1.71}/docs/assets/env-preparation-failed-light.png +0 -0
  36. {uipath-2.1.69 → uipath-2.1.71}/docs/assets/favicon.png +0 -0
  37. {uipath-2.1.69 → uipath-2.1.71}/docs/assets/logo-dark.svg +0 -0
  38. {uipath-2.1.69 → uipath-2.1.71}/docs/assets/logo-light.svg +0 -0
  39. {uipath-2.1.69 → uipath-2.1.71}/docs/cli/index.md +0 -0
  40. {uipath-2.1.69 → uipath-2.1.71}/docs/core/actions.md +0 -0
  41. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  42. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/cloud_env_var_light.gif +0 -0
  43. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  44. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  45. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/copy_path_dark.png +0 -0
  46. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets/copy_path_light.png +0 -0
  47. {uipath-2.1.69 → uipath-2.1.71}/docs/core/assets.md +0 -0
  48. {uipath-2.1.69 → uipath-2.1.71}/docs/core/attachments.md +0 -0
  49. {uipath-2.1.69 → uipath-2.1.71}/docs/core/buckets.md +0 -0
  50. {uipath-2.1.69 → uipath-2.1.71}/docs/core/connections.md +0 -0
  51. {uipath-2.1.69 → uipath-2.1.71}/docs/core/context_grounding.md +0 -0
  52. {uipath-2.1.69 → uipath-2.1.71}/docs/core/documents.md +0 -0
  53. {uipath-2.1.69 → uipath-2.1.71}/docs/core/documents_models.md +0 -0
  54. {uipath-2.1.69 → uipath-2.1.71}/docs/core/environment_variables.md +0 -0
  55. {uipath-2.1.69 → uipath-2.1.71}/docs/core/getting_started.md +0 -0
  56. {uipath-2.1.69 → uipath-2.1.71}/docs/core/jobs.md +0 -0
  57. {uipath-2.1.69 → uipath-2.1.71}/docs/core/llm_gateway.md +0 -0
  58. {uipath-2.1.69 → uipath-2.1.71}/docs/core/processes.md +0 -0
  59. {uipath-2.1.69 → uipath-2.1.71}/docs/core/queues.md +0 -0
  60. {uipath-2.1.69 → uipath-2.1.71}/docs/core/traced.md +0 -0
  61. {uipath-2.1.69 → uipath-2.1.71}/docs/hooks.py +0 -0
  62. {uipath-2.1.69 → uipath-2.1.71}/docs/index.md +0 -0
  63. {uipath-2.1.69 → uipath-2.1.71}/docs/javascripts/extra.js +0 -0
  64. {uipath-2.1.69 → uipath-2.1.71}/docs/overrides/main.html +0 -0
  65. {uipath-2.1.69 → uipath-2.1.71}/docs/overrides/partials/actions.html +0 -0
  66. {uipath-2.1.69 → uipath-2.1.71}/docs/overrides/partials/logo.html +0 -0
  67. {uipath-2.1.69 → uipath-2.1.71}/docs/release_policy.md +0 -0
  68. {uipath-2.1.69 → uipath-2.1.71}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  69. {uipath-2.1.69 → uipath-2.1.71}/docs/stylesheets/extra.css +0 -0
  70. {uipath-2.1.69 → uipath-2.1.71}/justfile +0 -0
  71. {uipath-2.1.69 → uipath-2.1.71}/mkdocs.yml +0 -0
  72. {uipath-2.1.69 → uipath-2.1.71}/py.typed +0 -0
  73. {uipath-2.1.69 → uipath-2.1.71}/samples/calculator/README.md +0 -0
  74. {uipath-2.1.69 → uipath-2.1.71}/samples/calculator/main.py +0 -0
  75. {uipath-2.1.69 → uipath-2.1.71}/samples/calculator/pyproject.toml +0 -0
  76. {uipath-2.1.69 → uipath-2.1.71}/samples/event-trigger/.python-version +0 -0
  77. {uipath-2.1.69 → uipath-2.1.71}/samples/event-trigger/README.md +0 -0
  78. {uipath-2.1.69 → uipath-2.1.71}/samples/event-trigger/main.py +0 -0
  79. {uipath-2.1.69 → uipath-2.1.71}/samples/event-trigger/pyproject.toml +0 -0
  80. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/.env.example +0 -0
  81. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/README.md +0 -0
  82. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/input.json +0 -0
  83. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  84. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  85. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/pyproject.toml +0 -0
  86. {uipath-2.1.69 → uipath-2.1.71}/samples/google-ADK-agent/uv.lock +0 -0
  87. {uipath-2.1.69 → uipath-2.1.71}/scripts/debug_test.py +0 -0
  88. {uipath-2.1.69 → uipath-2.1.71}/scripts/lint_httpx_client.py +0 -0
  89. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/__init__.py +0 -0
  90. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/README.md +0 -0
  91. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/__init__.py +0 -0
  92. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  93. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  94. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
  95. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_models.py +0 -0
  96. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  97. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  98. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  99. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/_utils.py +0 -0
  100. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/auth_config.json +0 -0
  101. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/index.html +0 -0
  102. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/localhost.crt +0 -0
  103. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_auth/localhost.key +0 -0
  104. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  105. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  106. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  107. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  108. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  109. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  110. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  111. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  112. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  113. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  114. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  115. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  116. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  117. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  118. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  119. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_models/_trajectory_span.py +0 -0
  120. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  121. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_evals/_runtime.py +0 -0
  122. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  123. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  124. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  125. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  126. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_logging.py +0 -0
  127. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  128. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  129. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  130. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_templates/.rels.template +0 -0
  131. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  132. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_templates/main.py.template +0 -0
  133. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  134. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_common.py +0 -0
  135. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_console.py +0 -0
  136. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_constants.py +0 -0
  137. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_debug.py +0 -0
  138. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  139. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_folders.py +0 -0
  140. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_input_args.py +0 -0
  141. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  142. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_processes.py +0 -0
  143. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_project_files.py +0 -0
  144. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  145. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_tracing.py +0 -0
  146. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  147. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_auth.py +0 -0
  148. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_deploy.py +0 -0
  149. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_dev.py +0 -0
  150. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_eval.py +0 -0
  151. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_init.py +0 -0
  152. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_invoke.py +0 -0
  153. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_new.py +0 -0
  154. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_pack.py +0 -0
  155. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_publish.py +0 -0
  156. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_pull.py +0 -0
  157. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_push.py +0 -0
  158. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/cli_run.py +0 -0
  159. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/middlewares.py +0 -0
  160. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_cli/spinner.py +0 -0
  161. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_config.py +0 -0
  162. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_events/__init__.py +0 -0
  163. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_events/_event_bus.py +0 -0
  164. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_events/_events.py +0 -0
  165. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_execution_context.py +0 -0
  166. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_folder_context.py +0 -0
  167. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_resources/AGENTS.md +0 -0
  168. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/__init__.py +0 -0
  169. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/_base_service.py +0 -0
  170. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/actions_service.py +0 -0
  171. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/api_client.py +0 -0
  172. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/assets_service.py +0 -0
  173. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/attachments_service.py +0 -0
  174. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/buckets_service.py +0 -0
  175. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/connections_service.py +0 -0
  176. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/documents_service.py +0 -0
  177. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/entities_service.py +0 -0
  178. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/folder_service.py +0 -0
  179. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/jobs_service.py +0 -0
  180. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/llm_gateway_service.py +0 -0
  181. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/processes_service.py +0 -0
  182. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_services/queues_service.py +0 -0
  183. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_uipath.py +0 -0
  184. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/__init__.py +0 -0
  185. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_endpoint.py +0 -0
  186. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_infer_bindings.py +0 -0
  187. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_logs.py +0 -0
  188. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_read_overwrites.py +0 -0
  189. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_request_override.py +0 -0
  190. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_request_spec.py +0 -0
  191. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_ssl_context.py +0 -0
  192. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_url.py +0 -0
  193. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/_utils/_user_agent.py +0 -0
  194. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/_utils.py +0 -0
  195. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/__init__.py +0 -0
  196. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/async_stream.py +0 -0
  197. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/citation.py +0 -0
  198. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/content.py +0 -0
  199. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/conversation.py +0 -0
  200. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/event.py +0 -0
  201. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/exchange.py +0 -0
  202. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/message.py +0 -0
  203. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/meta.py +0 -0
  204. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/conversation/tool.py +0 -0
  205. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/agent/models/agent.py +0 -0
  206. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/_helpers/__init__.py +0 -0
  207. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/_helpers/helpers.py +0 -0
  208. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/__init__.py +0 -0
  209. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  210. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  211. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  212. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  213. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  214. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  215. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/models/__init__.py +0 -0
  216. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/eval/models/models.py +0 -0
  217. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/__init__.py +0 -0
  218. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/action_schema.py +0 -0
  219. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/actions.py +0 -0
  220. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/assets.py +0 -0
  221. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/attachment.py +0 -0
  222. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/buckets.py +0 -0
  223. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/connections.py +0 -0
  224. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/context_grounding.py +0 -0
  225. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/context_grounding_index.py +0 -0
  226. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/documents.py +0 -0
  227. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/entities.py +0 -0
  228. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/errors.py +0 -0
  229. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/exceptions.py +0 -0
  230. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/interrupt_models.py +0 -0
  231. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/job.py +0 -0
  232. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/llm_gateway.py +0 -0
  233. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/processes.py +0 -0
  234. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/models/queues.py +0 -0
  235. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/py.typed +0 -0
  236. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/telemetry/__init__.py +0 -0
  237. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/telemetry/_constants.py +0 -0
  238. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/telemetry/_track.py +0 -0
  239. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/tracing/__init__.py +0 -0
  240. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/tracing/_otel_exporters.py +0 -0
  241. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/tracing/_traced.py +0 -0
  242. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/tracing/_utils.py +0 -0
  243. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/utils/__init__.py +0 -0
  244. {uipath-2.1.69 → uipath-2.1.71}/src/uipath/utils/_endpoints_manager.py +0 -0
  245. {uipath-2.1.69 → uipath-2.1.71}/testcases/apicalls-testcase/main.py +0 -0
  246. {uipath-2.1.69 → uipath-2.1.71}/testcases/apicalls-testcase/pyproject.toml +0 -0
  247. {uipath-2.1.69 → uipath-2.1.71}/testcases/apicalls-testcase/run.sh +0 -0
  248. {uipath-2.1.69 → uipath-2.1.71}/testcases/apicalls-testcase/src/assert.py +0 -0
  249. {uipath-2.1.69 → uipath-2.1.71}/testcases/basic-testcase/main.py +0 -0
  250. {uipath-2.1.69 → uipath-2.1.71}/testcases/basic-testcase/pyproject.toml +0 -0
  251. {uipath-2.1.69 → uipath-2.1.71}/testcases/basic-testcase/run.sh +0 -0
  252. {uipath-2.1.69 → uipath-2.1.71}/testcases/basic-testcase/src/assert.py +0 -0
  253. {uipath-2.1.69 → uipath-2.1.71}/testcases/common/validate_output.sh +0 -0
  254. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/agent.mermaid +0 -0
  255. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/langgraph.json +0 -0
  256. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/pyproject.toml +0 -0
  257. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/run.sh +0 -0
  258. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/src/assert.py +0 -0
  259. {uipath-2.1.69 → uipath-2.1.71}/testcases/langchain-cross/src/main.py +0 -0
  260. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/agent.mermaid +0 -0
  261. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/llama_index.json +0 -0
  262. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/pyproject.toml +0 -0
  263. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/run.sh +0 -0
  264. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/src/assert.py +0 -0
  265. {uipath-2.1.69 → uipath-2.1.71}/testcases/llamaindex-cross/src/main.py +0 -0
  266. {uipath-2.1.69 → uipath-2.1.71}/tests/__init__.py +0 -0
  267. {uipath-2.1.69 → uipath-2.1.71}/tests/agent/models/test_agent.py +0 -0
  268. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/conftest.py +0 -0
  269. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  270. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/mocks/bindings_script.py +0 -0
  271. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/mocks/pyproject.toml +0 -0
  272. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/mocks/simple_script.py +0 -0
  273. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/mocks/uipath-mock.json +0 -0
  274. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  275. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_auth.py +0 -0
  276. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_hitl.py +0 -0
  277. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_init.py +0 -0
  278. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_init_agents_md.py +0 -0
  279. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_input_args.py +0 -0
  280. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_invoke.py +0 -0
  281. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_new.py +0 -0
  282. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_pack.py +0 -0
  283. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  284. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_portal_service_refresh_token.py +0 -0
  285. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_publish.py +0 -0
  286. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_pull.py +0 -0
  287. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_push.py +0 -0
  288. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_run.py +0 -0
  289. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/test_utils.py +0 -0
  290. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/utils/common.py +0 -0
  291. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/utils/project_details.py +0 -0
  292. {uipath-2.1.69 → uipath-2.1.71}/tests/cli/utils/uipath_json.py +0 -0
  293. {uipath-2.1.69 → uipath-2.1.71}/tests/conftest.py +0 -0
  294. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/conftest.py +0 -0
  295. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_actions_service.py +0 -0
  296. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_api_client.py +0 -0
  297. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_assets_service.py +0 -0
  298. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_attachments_service.py +0 -0
  299. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_base_service.py +0 -0
  300. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_buckets_service.py +0 -0
  301. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_connections_service.py +0 -0
  302. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_documents_service.py +0 -0
  303. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_entities_service.py +0 -0
  304. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_folder_service.py +0 -0
  305. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_jobs_service.py +0 -0
  306. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_llm_integration.py +0 -0
  307. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  308. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_llm_service.py +0 -0
  309. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_processes_service.py +0 -0
  310. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_queues_service.py +0 -0
  311. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  312. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  313. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  314. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  315. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/test_bindings_inference.py +0 -0
  316. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/test_config.py +0 -0
  317. {uipath-2.1.69 → uipath-2.1.71}/tests/sdk/test_overwrites.py +0 -0
  318. {uipath-2.1.69 → uipath-2.1.71}/tests/tracing/test_otel_exporters.py +0 -0
  319. {uipath-2.1.69 → uipath-2.1.71}/tests/tracing/test_span_utils.py +0 -0
  320. {uipath-2.1.69 → uipath-2.1.71}/tests/tracing/test_traced.py +0 -0
  321. {uipath-2.1.69 → uipath-2.1.71}/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.69
3
+ Version: 2.1.71
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.69"
3
+ version = "2.1.71"
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"
@@ -37,7 +37,7 @@ from ._models._execution import ExecutionRun
37
37
  from ._models._messages import LogMessage, TraceMessage
38
38
  from ._utils._chat import RunContextChatHandler, build_user_message_event
39
39
  from ._utils._exporter import RunContextExporter
40
- from ._utils._logger import RunContextLogHandler
40
+ from ._utils._logger import RunContextLogHandler, patch_textual_stderr
41
41
 
42
42
 
43
43
  class UiPathDevTerminal(App[Any]):
@@ -61,6 +61,8 @@ class UiPathDevTerminal(App[Any]):
61
61
  runtime_factory: UiPathRuntimeFactory[Any, Any],
62
62
  **kwargs,
63
63
  ):
64
+ self._stderr_write_fd: int = patch_textual_stderr(self._add_subprocess_log)
65
+
64
66
  super().__init__(**kwargs)
65
67
 
66
68
  self.initial_entrypoint: str = "main.py"
@@ -357,3 +359,15 @@ class UiPathDevTerminal(App[Any]):
357
359
  )
358
360
  log_msg = LogMessage(run.id, "ERROR", tb, timestamp)
359
361
  self._handle_log_message(log_msg)
362
+
363
+ def _add_subprocess_log(self, level: str, message: str) -> None:
364
+ """Handle a stderr line coming from subprocesses."""
365
+
366
+ def add_log() -> None:
367
+ details_panel = self.query_one("#details-panel", RunDetailsPanel)
368
+ run = getattr(details_panel, "current_run", None)
369
+ if run:
370
+ log_msg = LogMessage(run.id, level, message, datetime.now())
371
+ self._handle_log_message(log_msg)
372
+
373
+ self.call_from_thread(add_log)
@@ -0,0 +1,98 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import os
5
+ import re
6
+ import threading
7
+ from datetime import datetime
8
+ from typing import Callable, Pattern
9
+
10
+ from .._models._messages import LogMessage
11
+
12
+
13
+ class RunContextLogHandler(logging.Handler):
14
+ """Custom log handler that sends logs to CLI UI."""
15
+
16
+ def __init__(
17
+ self,
18
+ run_id: str,
19
+ callback: Callable[[LogMessage], None],
20
+ ):
21
+ super().__init__()
22
+ self.run_id = run_id
23
+ self.callback = callback
24
+
25
+ def emit(self, record: logging.LogRecord):
26
+ """Emit a log record to CLI UI."""
27
+ try:
28
+ log_msg = LogMessage(
29
+ run_id=self.run_id,
30
+ level=record.levelname,
31
+ message=self.format(record),
32
+ timestamp=datetime.fromtimestamp(record.created),
33
+ )
34
+ self.callback(log_msg)
35
+ except Exception:
36
+ # Don't let logging errors crash the app
37
+ pass
38
+
39
+
40
+ # A dispatcher is a callable that accepts (level, message) pairs
41
+ DispatchLog = Callable[[str, str], None]
42
+
43
+ LEVEL_PATTERNS: list[tuple[str, Pattern[str]]] = [
44
+ ("DEBUG", re.compile(r"^(DEBUG)[:\s-]+", re.I)),
45
+ ("INFO", re.compile(r"^(INFO)[:\s-]+", re.I)),
46
+ ("WARN", re.compile(r"^(WARNING|WARN)[:\s-]+", re.I)),
47
+ ("ERROR", re.compile(r"^(ERROR|ERRO)[:\s-]+", re.I)),
48
+ ]
49
+
50
+
51
+ def patch_textual_stderr(dispatch_log: DispatchLog) -> int:
52
+ """Redirect subprocess stderr into a provided dispatcher.
53
+
54
+ Args:
55
+ dispatch_log: Callable invoked with (level, message) for each stderr line.
56
+ This will be called from a background thread, so the caller
57
+ should use `App.call_from_thread` or equivalent.
58
+
59
+ Returns:
60
+ int: The write file descriptor for stderr (pass to subprocesses).
61
+ """
62
+ from textual.app import _PrintCapture
63
+
64
+ read_fd, write_fd = os.pipe()
65
+
66
+ # Patch fileno() so subprocesses can write to our pipe
67
+ _PrintCapture.fileno = lambda self: write_fd # type: ignore[method-assign]
68
+
69
+ def read_stderr_pipe() -> None:
70
+ with os.fdopen(read_fd, "r", buffering=1) as pipe_reader:
71
+ try:
72
+ for raw in pipe_reader:
73
+ text = raw.rstrip()
74
+ level: str = "ERROR"
75
+ message: str = text
76
+
77
+ # Try to parse a known level prefix
78
+ for lvl, pattern in LEVEL_PATTERNS:
79
+ m = pattern.match(text)
80
+ if m:
81
+ level = lvl
82
+ message = text[m.end() :]
83
+ break
84
+
85
+ dispatch_log(level, message)
86
+
87
+ except Exception:
88
+ # Never raise from thread
89
+ pass
90
+
91
+ thread = threading.Thread(
92
+ target=read_stderr_pipe,
93
+ daemon=True,
94
+ name="stderr-reader",
95
+ )
96
+ thread.start()
97
+
98
+ return write_fd
@@ -1,4 +1,5 @@
1
- from typing import Any, List, Optional, Tuple, Union
1
+ import json
2
+ from typing import Any, Dict, List, Optional, Tuple, Union
2
3
 
3
4
  import httpx
4
5
  from pydantic import TypeAdapter
@@ -9,6 +10,11 @@ from .._execution_context import ExecutionContext
9
10
  from .._folder_context import FolderContext
10
11
  from .._utils import Endpoint, RequestSpec, header_folder, infer_bindings
11
12
  from .._utils.constants import (
13
+ CONFLUENCE_DATA_SOURCE,
14
+ DROPBOX_DATA_SOURCE,
15
+ GOOGLE_DRIVE_DATA_SOURCE,
16
+ LLMV4,
17
+ ONEDRIVE_DATA_SOURCE,
12
18
  ORCHESTRATOR_STORAGE_BUCKET_DATA_SOURCE,
13
19
  )
14
20
  from ..models import IngestionInProgressException
@@ -312,6 +318,122 @@ class ContextGroundingService(FolderContext, BaseService):
312
318
 
313
319
  return response.json()
314
320
 
321
+ @traced(name="contextgrounding_create_index", run_type="uipath")
322
+ @infer_bindings(resource_type="index")
323
+ def create_index(
324
+ self,
325
+ name: str,
326
+ source: Dict[str, Any],
327
+ description: Optional[str] = None,
328
+ cron_expression: Optional[str] = None,
329
+ time_zone_id: Optional[str] = None,
330
+ advanced_ingestion: Optional[bool] = True,
331
+ preprocessing_request: Optional[str] = LLMV4,
332
+ folder_key: Optional[str] = None,
333
+ folder_path: Optional[str] = None,
334
+ ) -> ContextGroundingIndex:
335
+ """Create a new context grounding index.
336
+
337
+ Args:
338
+ name (str): The name of the index to create.
339
+ source (dict): Source configuration dictionary:
340
+ - For buckets: type="bucket", bucket_name, folder_path, directory_path="/" (optional), file_type (optional)
341
+ - For Google Drive: type="google", connection_name, connection_id, leaf_folder_id, directory_path, folder_path, file_type (optional)
342
+ - For Dropbox: type="dropbox", connection_name, connection_id, directory_path, folder_path, file_type (optional)
343
+ - For OneDrive: type="onedrive", connection_name, connection_id, leaf_folder_id, directory_path, folder_path, file_type (optional)
344
+ - For Confluence: type="confluence", connection_name, connection_id, space_id, directory_path, folder_path, file_type (optional)
345
+ description (Optional[str]): Description of the index.
346
+ cron_expression (Optional[str]): Cron expression for scheduled indexing (e.g., "0 0 18 ? * 2" for Tuesdays at 6 PM).
347
+ time_zone_id (Optional[str]): Valid Windows Timezone ID for the cron expression (e.g., "UTC", "Pacific Standard Time", "GTB Standard Time").
348
+ advanced_ingestion (Optional[bool]): Enable advanced ingestion with preprocessing. Defaults to True.
349
+ preprocessing_request (Optional[str]): The OData type for preprocessing request. Defaults to LLMV4.
350
+ folder_key (Optional[str]): The key of the folder where the index will be created.
351
+ folder_path (Optional[str]): The path of the folder where the index will be created.
352
+
353
+ Returns:
354
+ ContextGroundingIndex: The created index information.
355
+ """
356
+ spec = self._create_spec(
357
+ name=name,
358
+ description=description,
359
+ source=source,
360
+ cron_expression=cron_expression,
361
+ time_zone_id=time_zone_id,
362
+ advanced_ingestion=advanced_ingestion
363
+ if advanced_ingestion is not None
364
+ else True,
365
+ preprocessing_request=preprocessing_request or LLMV4,
366
+ folder_path=folder_path,
367
+ folder_key=folder_key,
368
+ )
369
+
370
+ response = self.request(
371
+ spec.method,
372
+ spec.endpoint,
373
+ content=spec.content,
374
+ headers=spec.headers,
375
+ )
376
+
377
+ return ContextGroundingIndex.model_validate(response.json())
378
+
379
+ @traced(name="contextgrounding_create_index", run_type="uipath")
380
+ @infer_bindings(resource_type="index")
381
+ async def create_index_async(
382
+ self,
383
+ name: str,
384
+ source: Dict[str, Any],
385
+ description: Optional[str] = None,
386
+ cron_expression: Optional[str] = None,
387
+ time_zone_id: Optional[str] = None,
388
+ advanced_ingestion: Optional[bool] = True,
389
+ preprocessing_request: Optional[str] = LLMV4,
390
+ folder_key: Optional[str] = None,
391
+ folder_path: Optional[str] = None,
392
+ ) -> ContextGroundingIndex:
393
+ """Create a new context grounding index.
394
+
395
+ Args:
396
+ name (str): The name of the index to create.
397
+ source (dict): Source configuration dictionary:
398
+ - For buckets: type="bucket", bucket_name, folder_path, directory_path="/" (optional), file_type (optional)
399
+ - For Google Drive: type="google_drive", connection_name, connection_id, leaf_folder_id, directory_path, folder_path, file_type (optional)
400
+ - For Dropbox: type="dropbox", connection_name, connection_id, directory_path, folder_path, file_type (optional)
401
+ - For OneDrive: type="onedrive", connection_name, connection_id, leaf_folder_id, directory_path, folder_path, file_type (optional)
402
+ - For Confluence: type="confluence", connection_name, connection_id, space_id, directory_path, folder_path, file_type (optional)
403
+ description (Optional[str]): Description of the index.
404
+ cron_expression (Optional[str]): Cron expression for scheduled indexing (e.g., "0 0 18 ? * 2" for Tuesdays at 6 PM).
405
+ time_zone_id (Optional[str]): Valid Windows Timezone ID for the cron expression (e.g., "UTC", "Pacific Standard Time", "GTB Standard Time").
406
+ advanced_ingestion (Optional[bool]): Enable advanced ingestion with preprocessing. Defaults to True.
407
+ preprocessing_request (Optional[str]): The OData type for preprocessing request. Defaults to LLMV4.
408
+ folder_key (Optional[str]): The key of the folder where the index will be created.
409
+ folder_path (Optional[str]): The path of the folder where the index will be created.
410
+
411
+ Returns:
412
+ ContextGroundingIndex: The created index information.
413
+ """
414
+ spec = self._create_spec(
415
+ name=name,
416
+ description=description,
417
+ source=source,
418
+ cron_expression=cron_expression,
419
+ time_zone_id=time_zone_id,
420
+ advanced_ingestion=advanced_ingestion
421
+ if advanced_ingestion is not None
422
+ else True,
423
+ preprocessing_request=preprocessing_request or LLMV4,
424
+ folder_path=folder_path,
425
+ folder_key=folder_key,
426
+ )
427
+
428
+ response = await self.request_async(
429
+ spec.method,
430
+ spec.endpoint,
431
+ content=spec.content,
432
+ headers=spec.headers,
433
+ )
434
+
435
+ return ContextGroundingIndex.model_validate(response.json())
436
+
315
437
  @traced(name="contextgrounding_search", run_type="uipath")
316
438
  def search(
317
439
  self,
@@ -575,40 +697,200 @@ class ContextGroundingService(FolderContext, BaseService):
575
697
  self,
576
698
  name: str,
577
699
  description: Optional[str],
578
- storage_bucket_name: Optional[str],
579
- file_name_glob: Optional[str],
580
- storage_bucket_folder_path: Optional[str],
700
+ source: Dict[str, Any],
701
+ advanced_ingestion: bool,
702
+ preprocessing_request: str,
703
+ cron_expression: Optional[str] = None,
704
+ time_zone_id: Optional[str] = None,
581
705
  folder_key: Optional[str] = None,
582
706
  folder_path: Optional[str] = None,
583
707
  ) -> RequestSpec:
708
+ """Create request spec for index creation.
709
+
710
+ Args:
711
+ name: Index name
712
+ description: Index description
713
+ source: Source configuration dictionary
714
+ cron_expression: Optional cron expression for scheduled indexing
715
+ time_zone_id: Optional timezone for cron expression
716
+ advanced_ingestion: Whether to enable advanced ingestion with preprocessing
717
+ preprocessing_request: OData type for preprocessing request
718
+ folder_key: Optional folder key
719
+ folder_path: Optional folder path
720
+
721
+ Returns:
722
+ RequestSpec for the create index request
723
+ """
724
+ source_type = source.get("type", "").lower()
725
+
584
726
  folder_key = self._resolve_folder_key(folder_key, folder_path)
727
+ file_type = source.get("file_type")
728
+ file_name_glob = f"**/*.{file_type}" if file_type else "**/*"
729
+
730
+ data_source = self._build_data_source(source_type, source, file_name_glob)
731
+
732
+ if cron_expression:
733
+ data_source["indexer"] = {
734
+ "cronExpression": cron_expression,
735
+ "timeZoneId": time_zone_id or "UTC",
736
+ }
737
+
738
+ payload = {
739
+ "name": name,
740
+ "description": description or "",
741
+ "dataSource": data_source,
742
+ }
743
+
744
+ if advanced_ingestion and preprocessing_request:
745
+ payload["preProcessing"] = {
746
+ "@odata.type": preprocessing_request,
747
+ }
585
748
 
586
- storage_bucket_folder_path = (
587
- storage_bucket_folder_path
588
- if storage_bucket_folder_path
589
- else self._folder_path
590
- )
591
749
  return RequestSpec(
592
750
  method="POST",
593
751
  endpoint=Endpoint("/ecs_/v2/indexes/create"),
594
- json={
595
- "name": name,
596
- "description": description,
597
- "dataSource": {
598
- "@odata.type": ORCHESTRATOR_STORAGE_BUCKET_DATA_SOURCE,
599
- "folder": storage_bucket_folder_path,
600
- "bucketName": storage_bucket_name,
601
- "fileNameGlob": file_name_glob
602
- if file_name_glob is not None
603
- else "*",
604
- "directoryPath": "/",
605
- },
606
- },
752
+ content=json.dumps(payload),
607
753
  headers={
608
754
  **header_folder(folder_key, None),
755
+ "Content-Type": "application/json",
609
756
  },
610
757
  )
611
758
 
759
+ def _build_data_source(
760
+ self, source_type: str, source: Dict[str, Any], file_name_glob: str
761
+ ) -> Dict[str, Any]:
762
+ """Build data source configuration based on type."""
763
+ if source_type == "bucket":
764
+ return self._build_bucket_data_source(source, file_name_glob)
765
+ elif source_type in ["google_drive"]:
766
+ return self._build_google_drive_data_source(source, file_name_glob)
767
+ elif source_type == "dropbox":
768
+ return self._build_dropbox_data_source(source, file_name_glob)
769
+ elif source_type == "onedrive":
770
+ return self._build_onedrive_data_source(source, file_name_glob)
771
+ elif source_type == "confluence":
772
+ return self._build_confluence_data_source(source, file_name_glob)
773
+ else:
774
+ raise ValueError(
775
+ f"Unsupported data source type: {source_type}. "
776
+ f"Supported types: bucket, google_drive, dropbox, onedrive, confluence"
777
+ )
778
+
779
+ def _build_bucket_data_source(
780
+ self, source: Dict[str, Any], file_name_glob: str
781
+ ) -> Dict[str, Any]:
782
+ """Build data source configuration for storage bucket."""
783
+ required_fields = ["bucket_name", "folder_path"]
784
+ for field in required_fields:
785
+ if not source.get(field):
786
+ raise ValueError(f"{field} is required for bucket data source")
787
+
788
+ return {
789
+ "@odata.type": ORCHESTRATOR_STORAGE_BUCKET_DATA_SOURCE,
790
+ "folder": source["folder_path"],
791
+ "bucketName": source["bucket_name"],
792
+ "fileNameGlob": file_name_glob,
793
+ "directoryPath": source.get("directory_path", "/"),
794
+ }
795
+
796
+ def _build_google_drive_data_source(
797
+ self, source: Dict[str, Any], file_name_glob: str
798
+ ) -> Dict[str, Any]:
799
+ """Build data source configuration for Google Drive."""
800
+ required_fields = [
801
+ "connection_id",
802
+ "connection_name",
803
+ "leaf_folder_id",
804
+ "directory_path",
805
+ "folder_path",
806
+ ]
807
+ for field in required_fields:
808
+ if not source.get(field):
809
+ raise ValueError(f"{field} is required for Google Drive data source")
810
+
811
+ return {
812
+ "@odata.type": GOOGLE_DRIVE_DATA_SOURCE,
813
+ "folder": source["folder_path"],
814
+ "connectionId": source["connection_id"],
815
+ "connectionName": source["connection_name"],
816
+ "leafFolderId": source["leaf_folder_id"],
817
+ "directoryPath": source["directory_path"],
818
+ "fileNameGlob": file_name_glob,
819
+ }
820
+
821
+ def _build_dropbox_data_source(
822
+ self, source: Dict[str, Any], file_name_glob: str
823
+ ) -> Dict[str, Any]:
824
+ """Build data source configuration for Dropbox."""
825
+ required_fields = [
826
+ "connection_id",
827
+ "connection_name",
828
+ "directory_path",
829
+ "folder_path",
830
+ ]
831
+ for field in required_fields:
832
+ if not source.get(field):
833
+ raise ValueError(f"{field} is required for Dropbox data source")
834
+
835
+ return {
836
+ "@odata.type": DROPBOX_DATA_SOURCE,
837
+ "folder": source["folder_path"],
838
+ "connectionId": source["connection_id"],
839
+ "connectionName": source["connection_name"],
840
+ "directoryPath": source["directory_path"],
841
+ "fileNameGlob": file_name_glob,
842
+ }
843
+
844
+ def _build_onedrive_data_source(
845
+ self, source: Dict[str, Any], file_name_glob: str
846
+ ) -> Dict[str, Any]:
847
+ """Build data source configuration for OneDrive."""
848
+ required_fields = [
849
+ "connection_id",
850
+ "connection_name",
851
+ "leaf_folder_id",
852
+ "directory_path",
853
+ "folder_path",
854
+ ]
855
+ for field in required_fields:
856
+ if not source.get(field):
857
+ raise ValueError(f"{field} is required for OneDrive data source")
858
+
859
+ return {
860
+ "@odata.type": ONEDRIVE_DATA_SOURCE,
861
+ "folder": source["folder_path"],
862
+ "connectionId": source["connection_id"],
863
+ "connectionName": source["connection_name"],
864
+ "leafFolderId": source["leaf_folder_id"],
865
+ "directoryPath": source["directory_path"],
866
+ "fileNameGlob": file_name_glob,
867
+ }
868
+
869
+ def _build_confluence_data_source(
870
+ self, source: Dict[str, Any], file_name_glob: str
871
+ ) -> Dict[str, Any]:
872
+ """Build data source configuration for Confluence."""
873
+ required_fields = [
874
+ "connection_id",
875
+ "connection_name",
876
+ "directory_path",
877
+ "folder_path",
878
+ "space_id",
879
+ ]
880
+ for field in required_fields:
881
+ if not source.get(field):
882
+ raise ValueError(f"{field} is required for Confluence data source")
883
+
884
+ return {
885
+ "@odata.type": CONFLUENCE_DATA_SOURCE,
886
+ "folder": source["folder_path"],
887
+ "connectionId": source["connection_id"],
888
+ "connectionName": source["connection_name"],
889
+ "directoryPath": source["directory_path"],
890
+ "fileNameGlob": file_name_glob,
891
+ "spaceId": source["space_id"],
892
+ }
893
+
612
894
  def _retrieve_by_id_spec(
613
895
  self,
614
896
  id: str,
@@ -25,6 +25,18 @@ HEADER_SW_LOCK_KEY = "x-uipath-sw-lockkey"
25
25
  ORCHESTRATOR_STORAGE_BUCKET_DATA_SOURCE = (
26
26
  "#UiPath.Vdbs.Domain.Api.V20Models.StorageBucketDataSourceRequest"
27
27
  )
28
+ CONFLUENCE_DATA_SOURCE = "#UiPath.Vdbs.Domain.Api.V20Models.ConfluenceDataSourceRequest"
29
+ DROPBOX_DATA_SOURCE = "#UiPath.Vdbs.Domain.Api.V20Models.DropboxDataSourceRequest"
30
+ GOOGLE_DRIVE_DATA_SOURCE = (
31
+ "#UiPath.Vdbs.Domain.Api.V20Models.GoogleDriveDataSourceRequest"
32
+ )
33
+ ONEDRIVE_DATA_SOURCE = "#UiPath.Vdbs.Domain.Api.V20Models.OneDriveDataSourceRequest"
34
+
35
+ # Preprocessing request types
36
+ LLMV3Mini = "#UiPath.Vdbs.Domain.Api.V20Models.LLMV3MiniPreProcessingRequest"
37
+ LLMV4 = "#UiPath.Vdbs.Domain.Api.V20Models.LLMV4PreProcessingRequest"
38
+ NativeV1 = "#UiPath.Vdbs.Domain.Api.V20Models.NativeV1PreProcessingRequest"
39
+
28
40
 
29
41
  # Local storage
30
42
  TEMP_ATTACHMENTS_FOLDER = "uipath_attachments"