uipath-langchain 0.0.139__tar.gz → 0.0.141__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-langchain might be problematic. Click here for more details.

Files changed (294) hide show
  1. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/integration_tests.yml +20 -27
  2. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/publish-dev.yml +29 -31
  3. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.gitignore +2 -2
  4. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/PKG-INFO +2 -2
  5. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/pyproject.toml +2 -2
  6. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/README.md +3 -0
  7. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/README.md +84 -0
  8. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/input.json +1 -0
  9. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/langgraph.json +7 -0
  10. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/main.py +95 -0
  11. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/pyproject.toml +17 -0
  12. uipath_langchain-0.0.141/samples/oauth-external-apps-agent/uv.lock +3770 -0
  13. uipath_langchain-0.0.141/src/uipath_langchain/_cli/_runtime/_context.py +10 -0
  14. uipath_langchain-0.0.141/src/uipath_langchain/_cli/_runtime/_input.py +147 -0
  15. uipath_langchain-0.0.141/src/uipath_langchain/_cli/_runtime/_output.py +148 -0
  16. uipath_langchain-0.0.141/src/uipath_langchain/_cli/_runtime/_runtime.py +481 -0
  17. uipath_langchain-0.0.139/src/uipath_langchain/_cli/cli_run.py → uipath_langchain-0.0.141/src/uipath_langchain/_cli/cli_debug.py +29 -15
  18. uipath_langchain-0.0.141/src/uipath_langchain/_cli/cli_run.py +94 -0
  19. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/chat/models.py +137 -3
  20. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/middlewares.py +2 -0
  21. uipath_langchain-0.0.141/src/uipath_langchain/py.typed +0 -0
  22. uipath_langchain-0.0.141/src/uipath_langchain/tools/__init__.py +0 -0
  23. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/tools/preconfigured.py +2 -2
  24. uipath_langchain-0.0.139/testcases/common/print_output.sh → uipath_langchain-0.0.141/testcases/common/validate_output.sh +14 -2
  25. uipath_langchain-0.0.141/testcases/company-research-agent/run.sh +21 -0
  26. uipath_langchain-0.0.141/testcases/company-research-agent/src/assert.py +46 -0
  27. uipath_langchain-0.0.141/testcases/init-flow/input.json +3 -0
  28. uipath_langchain-0.0.141/testcases/init-flow/pyproject.toml +13 -0
  29. uipath_langchain-0.0.141/testcases/init-flow/run.sh +32 -0
  30. uipath_langchain-0.0.141/testcases/init-flow/src/assert.py +46 -0
  31. uipath_langchain-0.0.141/testcases/simple-local-mcp/run.sh +21 -0
  32. uipath_langchain-0.0.141/testcases/simple-local-mcp/src/assert.py +46 -0
  33. uipath_langchain-0.0.141/testcases/ticket-classification/run.sh +25 -0
  34. uipath_langchain-0.0.141/testcases/ticket-classification/src/assert.py +51 -0
  35. uipath_langchain-0.0.141/uv.lock +3899 -0
  36. uipath_langchain-0.0.139/src/uipath_langchain/_cli/_runtime/_context.py +0 -16
  37. uipath_langchain-0.0.139/src/uipath_langchain/_cli/_runtime/_input.py +0 -139
  38. uipath_langchain-0.0.139/src/uipath_langchain/_cli/_runtime/_output.py +0 -234
  39. uipath_langchain-0.0.139/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -255
  40. uipath_langchain-0.0.139/testcases/Dockerfile +0 -16
  41. uipath_langchain-0.0.139/testcases/README.md +0 -22
  42. uipath_langchain-0.0.139/testcases/company-research-agent/.env.example +0 -5
  43. uipath_langchain-0.0.139/testcases/company-research-agent/agent.mermaid +0 -23
  44. uipath_langchain-0.0.139/testcases/company-research-agent/run.sh +0 -28
  45. uipath_langchain-0.0.139/testcases/company-research-agent/src/assert.py +0 -61
  46. uipath_langchain-0.0.139/testcases/company-research-agent/uipath.json +0 -37
  47. uipath_langchain-0.0.139/testcases/simple-local-mcp/.env.example +0 -5
  48. uipath_langchain-0.0.139/testcases/simple-local-mcp/README.md +0 -95
  49. uipath_langchain-0.0.139/testcases/simple-local-mcp/agent.mermaid +0 -17
  50. uipath_langchain-0.0.139/testcases/simple-local-mcp/run.sh +0 -28
  51. uipath_langchain-0.0.139/testcases/simple-local-mcp/src/assert.py +0 -61
  52. uipath_langchain-0.0.139/testcases/simple-local-mcp/uipath.json +0 -145
  53. uipath_langchain-0.0.139/testcases/ticket-classification/.env.example +0 -7
  54. uipath_langchain-0.0.139/testcases/ticket-classification/README.md +0 -22
  55. uipath_langchain-0.0.139/testcases/ticket-classification/agent.mermaid +0 -21
  56. uipath_langchain-0.0.139/testcases/ticket-classification/run.sh +0 -34
  57. uipath_langchain-0.0.139/testcases/ticket-classification/src/assert.py +0 -71
  58. uipath_langchain-0.0.139/testcases/ticket-classification/uipath.json +0 -50
  59. uipath_langchain-0.0.139/uv.lock +0 -3248
  60. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.cursorrules +0 -0
  61. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.editorconfig +0 -0
  62. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.gitattributes +0 -0
  63. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/cd.yml +0 -0
  64. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/ci.yml +0 -0
  65. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/commitlint.yml +0 -0
  66. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/lint-custom-version.yml +0 -0
  67. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/lint.yml +0 -0
  68. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/publish-docs.yml +0 -0
  69. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/publish-prior-stable-version.yml +0 -0
  70. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/slack.yml +0 -0
  71. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/test-custom-version.yml +0 -0
  72. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.github/workflows/test.yml +0 -0
  73. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.pre-commit-config.yaml +0 -0
  74. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.python-version +0 -0
  75. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.vscode/extensions.json +0 -0
  76. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/.vscode/settings.json +0 -0
  77. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/CONTRIBUTING.md +0 -0
  78. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/LICENSE +0 -0
  79. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/README.md +0 -0
  80. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/chat_models.md +0 -0
  81. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/context_grounding.md +0 -0
  82. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/human_in_the_loop.md +0 -0
  83. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/quick_start.md +0 -0
  84. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
  85. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/quick_start_images/cloud_env_var_light.png +0 -0
  86. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/quick_start_images/invoke_output_dark.png +0 -0
  87. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/quick_start_images/invoke_output_light.png +0 -0
  88. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
  89. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-index-1.png +0 -0
  90. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-index-2.png +0 -0
  91. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-process.png +0 -0
  92. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
  93. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
  94. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
  95. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/folder-path.png +0 -0
  96. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/job-info.png +0 -0
  97. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/output.png +0 -0
  98. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/process-page.png +0 -0
  99. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/researcher-1.png +0 -0
  100. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/researcher-2.png +0 -0
  101. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/run-process-1.png +0 -0
  102. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/run-process-2.png +0 -0
  103. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
  104. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  105. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  106. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  107. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  108. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  109. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  110. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  111. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  112. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  113. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  114. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  115. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  116. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  117. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  118. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  119. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  120. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/start-job.png +0 -0
  121. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  122. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/README.md +0 -0
  123. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/env.example +0 -0
  124. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
  125. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
  126. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/langgraph.json +0 -0
  127. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/pyproject.toml +0 -0
  128. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
  129. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
  130. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
  131. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
  132. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/uipath.json +0 -0
  133. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/RAG-quiz-generator/uv.lock +0 -0
  134. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/calculator-agent/graph.py +0 -0
  135. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/calculator-agent/langgraph.json +0 -0
  136. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/calculator-agent/pyproject.toml +0 -0
  137. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/calculator-agent/uipath.json +0 -0
  138. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/calculator-agent/uv.lock +0 -0
  139. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/.env.example +0 -0
  140. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/agent.mermaid +0 -0
  141. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/graph.py +0 -0
  142. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/langgraph.json +0 -0
  143. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/pyproject.toml +0 -0
  144. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/uipath.json +0 -0
  145. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/chat-agent/uv.lock +0 -0
  146. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/.env.example +0 -0
  147. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/agent.mermaid +0 -0
  148. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/graph.py +0 -0
  149. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/langgraph.json +0 -0
  150. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/pyproject.toml +0 -0
  151. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/uipath.json +0 -0
  152. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/company-research-agent/uv.lock +0 -0
  153. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/.env.template +0 -0
  154. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/.python-version +0 -0
  155. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/.vscode/launch.json +0 -0
  156. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/README.md +0 -0
  157. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/agent.mermaid +0 -0
  158. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/input.json +0 -0
  159. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/langgraph.json +0 -0
  160. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/pyproject.toml +0 -0
  161. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
  162. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
  163. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
  164. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/uipath.json +0 -0
  165. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/email-organizer-agent/uv.lock +0 -0
  166. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/database.py +0 -0
  167. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/main.py +0 -0
  168. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/models.py +0 -0
  169. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/pyproject.toml +0 -0
  170. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/schemas.py +0 -0
  171. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/templates/index.html +0 -0
  172. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/hitl-inbox-server/uv.lock +0 -0
  173. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  174. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  175. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  176. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  177. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  178. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  179. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  180. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  181. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  182. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  183. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  184. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  185. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  186. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  187. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  188. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  189. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  190. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  191. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  192. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  193. /uipath_langchain-0.0.139/src/uipath_langchain/tools/__init__.py → /uipath_langchain-0.0.141/samples/oauth-external-apps-agent/.env.example +0 -0
  194. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/.env.example +0 -0
  195. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/README.md +0 -0
  196. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/main.py +0 -0
  197. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/pyproject.toml +0 -0
  198. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/uipath.json +0 -0
  199. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/retrieval-chain/uv.lock +0 -0
  200. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/.env.example +0 -0
  201. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/README.md +0 -0
  202. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/agent.mermaid +0 -0
  203. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/langgraph.json +0 -0
  204. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/pyproject.toml +0 -0
  205. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  206. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  207. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  208. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/uipath.json +0 -0
  209. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-local-mcp/uv.lock +0 -0
  210. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/.env.example +0 -0
  211. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/README.md +0 -0
  212. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/agent.mermaid +0 -0
  213. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/langgraph.json +0 -0
  214. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/main.py +0 -0
  215. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/pyproject.toml +0 -0
  216. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/uipath.json +0 -0
  217. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/simple-remote-mcp/uv.lock +0 -0
  218. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/.env.example +0 -0
  219. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/README.md +0 -0
  220. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/agent.mermaid +0 -0
  221. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  222. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/langgraph.json +0 -0
  223. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/main.py +0 -0
  224. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/pyproject.toml +0 -0
  225. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/uipath.json +0 -0
  226. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/samples/ticket-classification/uv.lock +0 -0
  227. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/__init__.py +0 -0
  228. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/__init__.py +0 -0
  229. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
  230. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  231. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +0 -0
  232. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
  233. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
  234. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  235. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/cli_dev.py +0 -0
  236. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/cli_eval.py +0 -0
  237. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/cli_init.py +0 -0
  238. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_cli/cli_new.py +0 -0
  239. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_tracing/__init__.py +0 -0
  240. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
  241. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_tracing/_oteladapter.py +0 -0
  242. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_tracing/_utils.py +0 -0
  243. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_utils/__init__.py +0 -0
  244. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  245. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_utils/_settings.py +0 -0
  246. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  247. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/chat/__init__.py +0 -0
  248. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/embeddings/__init__.py +0 -0
  249. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  250. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/retrievers/__init__.py +0 -0
  251. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  252. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/vectorstores/__init__.py +0 -0
  253. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  254. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/company-research-agent/input.json +0 -0
  255. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/company-research-agent/langgraph.json +0 -0
  256. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/company-research-agent/pyproject.toml +0 -0
  257. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/company-research-agent/src/graph.py +0 -0
  258. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/company-research-agent/uv.lock +0 -0
  259. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/input.json +0 -0
  260. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/langgraph.json +0 -0
  261. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/pyproject.toml +0 -0
  262. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  263. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  264. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  265. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/simple-local-mcp/uv.lock +0 -0
  266. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/ticket-classification/input.json +0 -0
  267. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/ticket-classification/langgraph.json +0 -0
  268. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/ticket-classification/pyproject.toml +0 -0
  269. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/ticket-classification/src/main.py +0 -0
  270. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/testcases/ticket-classification/uv.lock +0 -0
  271. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/__init__.py +0 -0
  272. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/cli/conftest.py +0 -0
  273. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/cli/mocks/langgraph.json +0 -0
  274. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/cli/mocks/simple_agent.py +0 -0
  275. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/cli/mocks/uipath.json +0 -0
  276. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/cli/test_run.py +0 -0
  277. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/__init__.py +0 -0
  278. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/conftest.py +0 -0
  279. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
  280. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
  281. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
  282. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/langgraph.json +0 -0
  283. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
  284. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/mocks/uipath.json +0 -0
  285. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/test_action_trigger.py +0 -0
  286. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/test_hitl_api_trigger.py +0 -0
  287. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/test_hitl_default_escalation.py +0 -0
  288. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/hitl/test_hitl_job_trigger.py +0 -0
  289. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/test_dummy.py +0 -0
  290. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/tools/__init__.py +0 -0
  291. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/tools/conftest.py +0 -0
  292. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/tools/mocks/agent_definition.json +0 -0
  293. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/tools/test_preconfigured.py +0 -0
  294. {uipath_langchain-0.0.139 → uipath_langchain-0.0.141}/tests/tracing/test_oteladapter.py +0 -0
@@ -19,16 +19,16 @@ jobs:
19
19
  steps:
20
20
  - name: Checkout code
21
21
  uses: actions/checkout@v4
22
-
22
+
23
23
  - name: Discover testcases
24
24
  id: discover
25
25
  run: |
26
26
  # Find all testcase folders (excluding common folders like README, etc.)
27
27
  testcase_dirs=$(find testcases -maxdepth 1 -type d -name "*-*" | sed 's|testcases/||' | sort)
28
-
28
+
29
29
  echo "Found testcase directories:"
30
30
  echo "$testcase_dirs"
31
-
31
+
32
32
  # Convert to JSON array for matrix
33
33
  testcases_json=$(echo "$testcase_dirs" | jq -R -s -c 'split("\n")[:-1]')
34
34
  echo "testcases=$testcases_json" >> $GITHUB_OUTPUT
@@ -36,46 +36,39 @@ jobs:
36
36
  integration-tests:
37
37
  needs: [discover-testcases]
38
38
  runs-on: ubuntu-latest
39
+ container:
40
+ image: ghcr.io/astral-sh/uv:python3.12-bookworm
41
+ env:
42
+ UIPATH_JOB_KEY: "3a03d5cb-fa21-4021-894d-a8e2eda0afe0"
39
43
  strategy:
40
44
  fail-fast: false
41
45
  matrix:
42
46
  testcase: ${{ fromJson(needs.discover-testcases.outputs.testcases) }}
43
- environment: [alpha, cloud]
47
+ environment: [alpha, staging] # temporary disable [cloud]
44
48
  use_azure_chat: [true, false]
45
-
49
+
46
50
  name: "${{ matrix.testcase }} / ${{ matrix.environment }} / ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
47
-
51
+
48
52
  steps:
49
53
  - name: Checkout code
50
54
  uses: actions/checkout@v4
51
55
 
52
- - name: Set up Docker Buildx
53
- uses: docker/setup-buildx-action@v3
54
-
55
- - name: Build Docker image
56
- run: |
57
- echo "Building Docker image for ${{ matrix.testcase }} at $(date)"
58
- docker build -f testcases/Dockerfile \
59
- -t uipath-langchain-testbase:latest \
60
- .
61
- echo "Docker image built at $(date)"
56
+ - name: Install Dependencies
57
+ run: uv sync
62
58
 
63
59
  - name: Run testcase
64
60
  env:
65
- CLIENT_ID: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_ID || secrets.CLOUD_TEST_CLIENT_ID }}
66
- CLIENT_SECRET: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_SECRET || secrets.CLOUD_TEST_CLIENT_SECRET }}
67
- BASE_URL: ${{ matrix.environment == 'alpha' && secrets.ALPHA_BASE_URL || secrets.CLOUD_BASE_URL }}
61
+ 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 }}
62
+ 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 }}
63
+ BASE_URL: ${{ matrix.environment == 'alpha' && secrets.ALPHA_BASE_URL || matrix.environment == 'staging' && secrets.STAGING_BASE_URL || matrix.environment == 'cloud' && secrets.CLOUD_BASE_URL }}
68
64
  USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}
65
+ working-directory: testcases/${{ matrix.testcase }}
69
66
  run: |
70
67
  echo "Running testcase: ${{ matrix.testcase }}"
71
68
  echo "Environment: ${{ matrix.environment }}"
72
69
  echo "LLM: ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
73
70
  echo "USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}"
74
-
75
- docker run --rm \
76
- -e CLIENT_ID="$CLIENT_ID" \
77
- -e CLIENT_SECRET="$CLIENT_SECRET" \
78
- -e BASE_URL="$BASE_URL" \
79
- -e USE_AZURE_CHAT="$USE_AZURE_CHAT" \
80
- uipath-langchain-testbase:latest \
81
- bash /app/testcases/${{ matrix.testcase }}/run.sh
71
+
72
+ # Execute the testcase run script directly
73
+ bash run.sh
74
+ bash ../common/validate_output.sh
@@ -7,7 +7,6 @@ on:
7
7
  PYPI_TOKEN_NIGHTLY:
8
8
  required: true
9
9
 
10
-
11
10
  jobs:
12
11
  publish-dev:
13
12
  runs-on: ubuntu-latest
@@ -34,44 +33,43 @@ jobs:
34
33
 
35
34
  - name: Modify pyproject.toml for custom UiPath version
36
35
  if: contains(github.event.pull_request.labels.*.name, 'test-core-dev-version')
37
- shell: bash
36
+ shell: pwsh
37
+ env:
38
+ PR_TITLE: ${{ github.event.pull_request.title }}
38
39
  run: |
39
- # Backup original pyproject.toml
40
- cp pyproject.toml pyproject.toml.backup
41
-
42
- # Extract custom version from PR title
43
- PR_TITLE="${{ github.event.pull_request.title }}"
44
- VERSION=$(echo "$PR_TITLE" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.dev[0-9]+' | head -1)
45
-
46
- if [ -z "$VERSION" ]; then
47
- echo "No version found in PR title. Please include version like: 2.0.65.dev1004030443"
40
+ # Extract version from PR title (e.g., "2.0.65.dev1004030443")
41
+ if ($env:PR_TITLE -match '(\d+\.\d+\.\d+\.dev\d+)') {
42
+ $VERSION = $matches[1]
43
+ } else {
44
+ Write-Error "No version found in PR title. Example: 'chore: test (uipath version 2.0.65.dev1004030443)'"
48
45
  exit 1
49
- fi
46
+ }
50
47
 
51
- echo "Extracted version: $VERSION"
48
+ Write-Output "Using UiPath version: $VERSION"
52
49
 
53
- # Update the uipath dependency to the custom version (match both == and >= patterns)
54
- # Target only the dependency lines in dependencies arrays, not project name
55
- sed -i '/dependencies = \[/,/\]/ s|"uipath[=><^~!]*[^"]*"|"uipath=='$VERSION'"|' pyproject.toml
56
- sed -i '/\[project\.optional-dependencies\]/,/^\[/ s|"uipath[=><^~!]*[^"]*"|"uipath=='$VERSION'"|' pyproject.toml
50
+ # Update uipath dependency to exact version (only in dependency arrays, not project name)
51
+ $content = Get-Content pyproject.toml -Raw
57
52
 
53
+ # Replace in main dependencies array
54
+ $content = $content -replace '(?s)(dependencies\s*=\s*\[.*?\])', {
55
+ param($match)
56
+ $match.Value -replace '"uipath([>=<\s,][^"]*|)"', "`"uipath==$VERSION`""
57
+ }
58
58
 
59
+ # Replace in optional-dependencies section (from [project.optional-dependencies] to next [)
60
+ $content = $content -replace '(?s)(\[project\.optional-dependencies\].*?)(?=\n\[|\z)', {
61
+ param($match)
62
+ $match.Value -replace '"uipath([>=<\s,][^"]*|)"', "`"uipath==$VERSION`""
63
+ }
59
64
 
60
- # Add or update [tool.uv.sources] section if it doesn't exist
61
- if ! grep -q "\[tool\.uv\.sources\]" pyproject.toml; then
62
- echo "" >> pyproject.toml
63
- echo "[tool.uv.sources]" >> pyproject.toml
64
- echo 'uipath = { index = "testpypi" }' >> pyproject.toml
65
- else
66
- # Update existing sources if needed
67
- if ! grep -q 'uipath = { index = "testpypi" }' pyproject.toml; then
68
- sed -i '/\[tool\.uv\.sources\]/a uipath = { index = "testpypi" }' pyproject.toml
69
- fi
70
- fi
65
+ # Add [tool.uv.sources] if missing
66
+ if ($content -notmatch '\[tool\.uv\.sources\]') {
67
+ $content += "`n`n[tool.uv.sources]`n uipath = { index = `"testpypi`" }`n"
68
+ }
71
69
 
72
- echo "Modified pyproject.toml to use UiPath version $VERSION from testpypi"
73
- echo "=== Modified pyproject.toml content ==="
74
- grep -A5 -B5 "uipath\|testpypi" pyproject.toml || true
70
+ # Save changes
71
+ $content | Set-Content pyproject.toml -NoNewline
72
+ Write-Output " Updated pyproject.toml"
75
73
 
76
74
  - name: Install dependencies
77
75
  run: uv sync --all-extras
@@ -165,7 +165,7 @@ cython_debug/
165
165
  # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
166
  # and can be added to the global gitignore or merged into this file. For a more nuclear
167
167
  # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
- #.idea/
168
+ .idea/
169
169
 
170
170
  # Ruff stuff:
171
171
  .ruff_cache/
@@ -178,4 +178,4 @@ cython_debug/
178
178
  **/.uipath
179
179
  **/**.nupkg
180
180
  **/__uipath/
181
- **/.langgraph_api
181
+ **/.langgraph_api
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.139
3
+ Version: 0.0.141
4
4
  Summary: UiPath Langchain
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-langchain-python
@@ -26,7 +26,7 @@ Requires-Dist: openai>=1.65.5
26
26
  Requires-Dist: openinference-instrumentation-langchain>=0.1.50
27
27
  Requires-Dist: pydantic-settings>=2.6.0
28
28
  Requires-Dist: python-dotenv>=1.0.1
29
- Requires-Dist: uipath<2.2.0,>=2.1.76
29
+ Requires-Dist: uipath<2.2.0,>=2.1.96
30
30
  Provides-Extra: langchain
31
31
  Description-Content-Type: text/markdown
32
32
 
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.0.139"
3
+ version = "0.0.141"
4
4
  description = "UiPath Langchain"
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
7
7
  dependencies = [
8
- "uipath>=2.1.76, <2.2.0",
8
+ "uipath>=2.1.96, <2.2.0",
9
9
  "langgraph>=0.5.0, <0.7.0",
10
10
  "langchain-core>=0.3.34",
11
11
  "langgraph-checkpoint-sqlite>=2.0.3",
@@ -18,5 +18,8 @@ This sample shows how to create an agent using LangGraph with multiple tool serv
18
18
  ## [Simple remote MCP](simple-remote-mcp)
19
19
  This sample demonstrates the creation of an agent using LangGraph, which connects to a remote MCP (Model Context Protocol) Server.
20
20
 
21
+ ## [OAuth external apps agent](oauth-external-apps-agent)
22
+ This sample shows how to build a LangGraph agent that connects to a remote UiPath MCP server using OAuth authentication through an external UiPath application for dynamic access token management.
23
+
21
24
  ## [Ticket classification](ticket-classification)
22
25
  This sample demonstrates automatic classification of support tickets into categories. It includes a human approval step via UiPath Action Center.
@@ -0,0 +1,84 @@
1
+ # LangGraph Agent with OAuth and MCP Servers
2
+
3
+ This project demonstrates how to build a LangGraph agent that connects to a remote UiPath MCP server, using an external UiPath application to handle OAuth authentication.
4
+
5
+ ## Overview
6
+
7
+ The agent uses:
8
+ - UiPathChat with Claude 3.5 Sonnet as the language model
9
+ - LangGraph for orchestration
10
+ - Remote tool execution via UiPath MCP server
11
+ - Dynamic access token refresh through client credentials grant (OAuth)
12
+
13
+ ## Architecture
14
+
15
+ ```mermaid
16
+ ---
17
+ config:
18
+ flowchart:
19
+ curve: linear
20
+ ---
21
+ graph TD;
22
+ __start__([<p>__start__</p>]):::first
23
+ fetch_new_access_token(fetch_new_access_token)
24
+ connect_to_mcp(connect_to_mcp)
25
+ __end__([<p>__end__</p>]):::last
26
+ __start__ -.-> connect_to_mcp;
27
+ __start__ -.-> fetch_new_access_token;
28
+ fetch_new_access_token --> connect_to_mcp;
29
+ connect_to_mcp --> __end__;
30
+ classDef default fill:#f2f0ff,line-height:1.2
31
+ classDef first fill-opacity:0
32
+ classDef last fill:#bfb6fc
33
+ ```
34
+
35
+ The workflow follows a ReAct pattern:
36
+ 1. Query is sent to the agent
37
+ 2. The agent first attempts to connect to the remote MCP server using the current `UIPATH_ACCESS_TOKEN`.
38
+ 3. If the token is missing or expired, the workflow triggers a call to the UiPath external application endpoint to fetch a fresh token and stores it in the environment.
39
+ 4. Once connected, the MCP tools are loaded into the ReAct agent.
40
+ 5. The agent receives both system context and the human task, deciding whether to invoke tools or provide a direct answer.
41
+ 6. The process repeats until the agent has enough information to produce a final response.
42
+ 7. The response is collected and returned as the workflow output.
43
+
44
+ ## Prerequisites
45
+
46
+ - Python 3.10+
47
+ - `uipath-langchain`
48
+ - `langchain-mcp-adapters`
49
+ - `langgraph`
50
+ - `httpx`
51
+ - `python-dotenv`
52
+ - UiPath OAuth credentials and MCP server URL in environment
53
+ - UiPath external application configured with `OR.Jobs` scope (or appropriate scope for your MCP server)
54
+
55
+ ## Installation
56
+
57
+ ```bash
58
+ uv venv -p 3.11 .venv
59
+ .venv\Scripts\activate
60
+ uv sync
61
+ ```
62
+
63
+ Set your MCP Remote Server URL and client secret as environment variables in .env
64
+
65
+ ```bash
66
+ UIPATH_CLIENT_SECRET=your_client_secret
67
+ UIPATH_MCP_SERVER_URL=https://your-uipath-instance/account/tenant/mcp_/mcp/server_slug
68
+ ```
69
+
70
+ Configure the following constants in `main.py`:
71
+ - `UIPATH_CLIENT_ID` - Your external application client ID
72
+ - `UIPATH_URL` - Your UiPath instance base URL
73
+ - `UIPATH_SCOPE` - OAuth scope (default: `OR.Jobs`)
74
+
75
+ ## Debugging
76
+
77
+ For debugging issues:
78
+
79
+ 1. Check logs for any connection or runtime errors:
80
+ ```bash
81
+ uipath run agent --debug '{"task": "What is 2 + 2?"}'
82
+ ```
83
+
84
+
@@ -0,0 +1 @@
1
+ { "task": "What is 2+2" }
@@ -0,0 +1,7 @@
1
+ {
2
+ "dependencies": ["."],
3
+ "graphs": {
4
+ "agent": "./main.py:graph"
5
+ },
6
+ "env": ".env"
7
+ }
@@ -0,0 +1,95 @@
1
+ import os
2
+ import dotenv
3
+ import httpx
4
+ from contextlib import asynccontextmanager
5
+ from typing import Optional, Literal
6
+
7
+ from pydantic import BaseModel
8
+ from langgraph.graph import StateGraph, START, END
9
+ from langgraph.types import Command
10
+ from langgraph.prebuilt import create_react_agent
11
+ from langchain.schema import SystemMessage, HumanMessage
12
+
13
+ from uipath_langchain.chat.models import UiPathChat
14
+ from langchain_mcp_adapters.tools import load_mcp_tools
15
+ from mcp import ClientSession
16
+ from mcp.client.streamable_http import streamablehttp_client
17
+ from uipath import UiPath
18
+
19
+ dotenv.load_dotenv()
20
+
21
+ UIPATH_CLIENT_ID = "EXTERNAL_APP_CLIENT_ID_HERE"
22
+ UIPATH_CLIENT_SECRET = os.getenv("UIPATH_CLIENT_SECRET")
23
+ UIPATH_SCOPE = "OR.Jobs"
24
+ UIPATH_URL = "base_url"
25
+ UIPATH_MCP_SERVER_URL = os.getenv("UIPATH_MCP_SERVER_URL")
26
+
27
+ class GraphInput(BaseModel):
28
+ task: str
29
+
30
+ class GraphOutput(BaseModel):
31
+ result: str
32
+
33
+ class State(BaseModel):
34
+ task: str
35
+ access_token: Optional[str] = os.getenv("UIPATH_ACCESS_TOKEN")
36
+ result: Optional[str] = None
37
+
38
+ async def fetch_new_access_token(state: State) -> Command:
39
+ try:
40
+ UiPath(
41
+ base_url=UIPATH_URL,
42
+ client_id=UIPATH_CLIENT_ID,
43
+ client_secret=UIPATH_CLIENT_SECRET,
44
+ scope=UIPATH_SCOPE,
45
+ )
46
+ return Command(update={"access_token": os.getenv("UIPATH_ACCESS_TOKEN")})
47
+
48
+ except Exception as e:
49
+ raise Exception(f"Failed to initialize UiPath SDK: {str(e)}")
50
+
51
+ @asynccontextmanager
52
+ async def agent_mcp(access_token: str):
53
+ async with streamablehttp_client(
54
+ url=UIPATH_MCP_SERVER_URL,
55
+ headers={"Authorization": f"Bearer {access_token}"},
56
+ timeout=60,
57
+ ) as (read, write, _):
58
+ async with ClientSession(read, write) as session:
59
+ await session.initialize()
60
+ tools = await load_mcp_tools(session)
61
+ model = UiPathChat(model="anthropic.claude-3-5-sonnet-20240620-v1:0")
62
+ agent = create_react_agent(model, tools=tools)
63
+ yield agent
64
+
65
+ async def connect_to_mcp(state: State) -> Command:
66
+ try:
67
+ async with agent_mcp(state.access_token) as agent:
68
+ agent_response = await agent.ainvoke({
69
+ "messages": [
70
+ SystemMessage(content="You are a helpful assistant."),
71
+ HumanMessage(content=state.task),
72
+ ],
73
+ })
74
+ return Command(update={"result": agent_response["messages"][-1].content})
75
+ except ExceptionGroup as e:
76
+ for error in e.exceptions:
77
+ if isinstance(error, httpx.HTTPStatusError) and error.response.status_code == 401:
78
+ return Command(update={"access_token": None})
79
+ raise
80
+
81
+ def route_start(state: State) -> Literal["fetch_new_access_token", "connect_to_mcp"]:
82
+ return "fetch_new_access_token" if state.access_token is None else "connect_to_mcp"
83
+
84
+ def route_after_connect(state: State):
85
+ return "fetch_new_access_token" if state.access_token is None else END
86
+
87
+ builder = StateGraph(State, input=GraphInput, output=GraphOutput)
88
+ builder.add_node("fetch_new_access_token", fetch_new_access_token)
89
+ builder.add_node("connect_to_mcp", connect_to_mcp)
90
+
91
+ builder.add_conditional_edges(START, route_start)
92
+ builder.add_edge("fetch_new_access_token", "connect_to_mcp")
93
+ builder.add_conditional_edges("connect_to_mcp", route_after_connect)
94
+
95
+ graph = builder.compile()
@@ -0,0 +1,17 @@
1
+ [project]
2
+ name = "oauth-external-apps-agent"
3
+ version = "0.0.7"
4
+ description = "Agent that connects to an MCP server implementing OAuth using an external application."
5
+ authors = [{ name = "John Doe", email = "john.doe@myemail.com" }]
6
+ dependencies = [
7
+ "uipath-langchain>=0.0.140",
8
+ "langchain>=0.3.26",
9
+ "langchain-anthropic>=0.3.17",
10
+ "langgraph>=0.5.3",
11
+ "python-dotenv>=1.0.0",
12
+ "anthropic>=0.57.1",
13
+ "langchain-mcp-adapters>=0.1.9",
14
+ "mypy>=1.17.1",
15
+ "uipath>=2.1.38",
16
+ ]
17
+ requires-python = ">=3.10"