uipath-langchain 0.0.139__tar.gz → 0.0.140__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 (280) hide show
  1. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/integration_tests.yml +20 -27
  2. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.gitignore +2 -2
  3. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/PKG-INFO +1 -1
  4. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/pyproject.toml +1 -1
  5. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/chat/models.py +137 -3
  6. uipath_langchain-0.0.139/testcases/common/print_output.sh → uipath_langchain-0.0.140/testcases/common/validate_output.sh +14 -2
  7. uipath_langchain-0.0.140/testcases/company-research-agent/run.sh +21 -0
  8. uipath_langchain-0.0.140/testcases/company-research-agent/src/assert.py +46 -0
  9. uipath_langchain-0.0.140/testcases/init-flow/input.json +3 -0
  10. uipath_langchain-0.0.140/testcases/init-flow/pyproject.toml +13 -0
  11. uipath_langchain-0.0.140/testcases/init-flow/run.sh +32 -0
  12. uipath_langchain-0.0.140/testcases/init-flow/src/assert.py +46 -0
  13. uipath_langchain-0.0.140/testcases/simple-local-mcp/run.sh +21 -0
  14. uipath_langchain-0.0.140/testcases/simple-local-mcp/src/assert.py +46 -0
  15. uipath_langchain-0.0.140/testcases/ticket-classification/run.sh +25 -0
  16. uipath_langchain-0.0.140/testcases/ticket-classification/src/assert.py +51 -0
  17. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/uv.lock +1 -1
  18. uipath_langchain-0.0.139/testcases/Dockerfile +0 -16
  19. uipath_langchain-0.0.139/testcases/README.md +0 -22
  20. uipath_langchain-0.0.139/testcases/company-research-agent/.env.example +0 -5
  21. uipath_langchain-0.0.139/testcases/company-research-agent/agent.mermaid +0 -23
  22. uipath_langchain-0.0.139/testcases/company-research-agent/run.sh +0 -28
  23. uipath_langchain-0.0.139/testcases/company-research-agent/src/assert.py +0 -61
  24. uipath_langchain-0.0.139/testcases/company-research-agent/uipath.json +0 -37
  25. uipath_langchain-0.0.139/testcases/simple-local-mcp/.env.example +0 -5
  26. uipath_langchain-0.0.139/testcases/simple-local-mcp/README.md +0 -95
  27. uipath_langchain-0.0.139/testcases/simple-local-mcp/agent.mermaid +0 -17
  28. uipath_langchain-0.0.139/testcases/simple-local-mcp/run.sh +0 -28
  29. uipath_langchain-0.0.139/testcases/simple-local-mcp/src/assert.py +0 -61
  30. uipath_langchain-0.0.139/testcases/simple-local-mcp/uipath.json +0 -145
  31. uipath_langchain-0.0.139/testcases/ticket-classification/.env.example +0 -7
  32. uipath_langchain-0.0.139/testcases/ticket-classification/README.md +0 -22
  33. uipath_langchain-0.0.139/testcases/ticket-classification/agent.mermaid +0 -21
  34. uipath_langchain-0.0.139/testcases/ticket-classification/run.sh +0 -34
  35. uipath_langchain-0.0.139/testcases/ticket-classification/src/assert.py +0 -71
  36. uipath_langchain-0.0.139/testcases/ticket-classification/uipath.json +0 -50
  37. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.cursorrules +0 -0
  38. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.editorconfig +0 -0
  39. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.gitattributes +0 -0
  40. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/cd.yml +0 -0
  41. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/ci.yml +0 -0
  42. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/commitlint.yml +0 -0
  43. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/lint-custom-version.yml +0 -0
  44. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/lint.yml +0 -0
  45. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-dev.yml +0 -0
  46. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-docs.yml +0 -0
  47. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-prior-stable-version.yml +0 -0
  48. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/slack.yml +0 -0
  49. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/test-custom-version.yml +0 -0
  50. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/test.yml +0 -0
  51. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.pre-commit-config.yaml +0 -0
  52. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.python-version +0 -0
  53. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.vscode/extensions.json +0 -0
  54. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.vscode/settings.json +0 -0
  55. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/CONTRIBUTING.md +0 -0
  56. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/LICENSE +0 -0
  57. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/README.md +0 -0
  58. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/chat_models.md +0 -0
  59. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/context_grounding.md +0 -0
  60. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/human_in_the_loop.md +0 -0
  61. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start.md +0 -0
  62. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
  63. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/cloud_env_var_light.png +0 -0
  64. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/invoke_output_dark.png +0 -0
  65. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/invoke_output_light.png +0 -0
  66. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
  67. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-index-1.png +0 -0
  68. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-index-2.png +0 -0
  69. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-process.png +0 -0
  70. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
  71. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
  72. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
  73. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/folder-path.png +0 -0
  74. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/job-info.png +0 -0
  75. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/output.png +0 -0
  76. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/process-page.png +0 -0
  77. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/researcher-1.png +0 -0
  78. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/researcher-2.png +0 -0
  79. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/run-process-1.png +0 -0
  80. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/run-process-2.png +0 -0
  81. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
  82. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  83. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  84. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  85. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  86. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  87. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  88. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  89. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  90. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  91. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  92. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  93. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  94. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  95. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  96. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  97. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  98. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/start-job.png +0 -0
  99. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  100. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/README.md +0 -0
  101. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/env.example +0 -0
  102. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
  103. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
  104. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/langgraph.json +0 -0
  105. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/pyproject.toml +0 -0
  106. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
  107. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
  108. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
  109. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
  110. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/uipath.json +0 -0
  111. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/uv.lock +0 -0
  112. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/README.md +0 -0
  113. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/graph.py +0 -0
  114. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/langgraph.json +0 -0
  115. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/pyproject.toml +0 -0
  116. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/uipath.json +0 -0
  117. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/uv.lock +0 -0
  118. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/.env.example +0 -0
  119. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/agent.mermaid +0 -0
  120. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/graph.py +0 -0
  121. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/langgraph.json +0 -0
  122. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/pyproject.toml +0 -0
  123. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/uipath.json +0 -0
  124. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/uv.lock +0 -0
  125. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/.env.example +0 -0
  126. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/agent.mermaid +0 -0
  127. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/graph.py +0 -0
  128. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/langgraph.json +0 -0
  129. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/pyproject.toml +0 -0
  130. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/uipath.json +0 -0
  131. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/uv.lock +0 -0
  132. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.env.template +0 -0
  133. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.python-version +0 -0
  134. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.vscode/launch.json +0 -0
  135. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/README.md +0 -0
  136. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/agent.mermaid +0 -0
  137. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/input.json +0 -0
  138. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/langgraph.json +0 -0
  139. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/pyproject.toml +0 -0
  140. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
  141. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
  142. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
  143. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/uipath.json +0 -0
  144. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/uv.lock +0 -0
  145. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/database.py +0 -0
  146. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/main.py +0 -0
  147. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/models.py +0 -0
  148. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/pyproject.toml +0 -0
  149. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/schemas.py +0 -0
  150. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/templates/index.html +0 -0
  151. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/uv.lock +0 -0
  152. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  153. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  154. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  155. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  156. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  157. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  158. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  159. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  160. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  161. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  162. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  163. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  164. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  165. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  166. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  167. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  168. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  169. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  170. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  171. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  172. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/.env.example +0 -0
  173. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/README.md +0 -0
  174. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/main.py +0 -0
  175. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/pyproject.toml +0 -0
  176. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/uipath.json +0 -0
  177. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/uv.lock +0 -0
  178. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/.env.example +0 -0
  179. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/README.md +0 -0
  180. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/agent.mermaid +0 -0
  181. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/langgraph.json +0 -0
  182. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/pyproject.toml +0 -0
  183. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  184. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  185. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  186. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/uipath.json +0 -0
  187. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/uv.lock +0 -0
  188. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/.env.example +0 -0
  189. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/README.md +0 -0
  190. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/agent.mermaid +0 -0
  191. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/langgraph.json +0 -0
  192. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/main.py +0 -0
  193. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/pyproject.toml +0 -0
  194. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/uipath.json +0 -0
  195. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/uv.lock +0 -0
  196. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/.env.example +0 -0
  197. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/README.md +0 -0
  198. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/agent.mermaid +0 -0
  199. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  200. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/langgraph.json +0 -0
  201. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/main.py +0 -0
  202. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/pyproject.toml +0 -0
  203. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/uipath.json +0 -0
  204. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/uv.lock +0 -0
  205. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/__init__.py +0 -0
  206. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/__init__.py +0 -0
  207. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  208. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
  209. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  210. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +0 -0
  211. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
  212. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
  213. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -0
  214. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
  215. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
  216. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  217. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_dev.py +0 -0
  218. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_eval.py +0 -0
  219. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_init.py +0 -0
  220. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_new.py +0 -0
  221. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_run.py +0 -0
  222. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/__init__.py +0 -0
  223. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
  224. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_oteladapter.py +0 -0
  225. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_utils.py +0 -0
  226. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/__init__.py +0 -0
  227. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  228. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_settings.py +0 -0
  229. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  230. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/chat/__init__.py +0 -0
  231. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/embeddings/__init__.py +0 -0
  232. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  233. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/middlewares.py +0 -0
  234. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/retrievers/__init__.py +0 -0
  235. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  236. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/tools/__init__.py +0 -0
  237. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/tools/preconfigured.py +0 -0
  238. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/vectorstores/__init__.py +0 -0
  239. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  240. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/input.json +0 -0
  241. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/langgraph.json +0 -0
  242. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/pyproject.toml +0 -0
  243. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/src/graph.py +0 -0
  244. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/uv.lock +0 -0
  245. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/input.json +0 -0
  246. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/langgraph.json +0 -0
  247. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/pyproject.toml +0 -0
  248. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  249. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  250. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  251. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/uv.lock +0 -0
  252. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/input.json +0 -0
  253. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/langgraph.json +0 -0
  254. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/pyproject.toml +0 -0
  255. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/src/main.py +0 -0
  256. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/uv.lock +0 -0
  257. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/__init__.py +0 -0
  258. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/conftest.py +0 -0
  259. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/langgraph.json +0 -0
  260. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/simple_agent.py +0 -0
  261. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/uipath.json +0 -0
  262. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/test_run.py +0 -0
  263. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/__init__.py +0 -0
  264. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/conftest.py +0 -0
  265. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
  266. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
  267. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
  268. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/langgraph.json +0 -0
  269. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
  270. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/uipath.json +0 -0
  271. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_action_trigger.py +0 -0
  272. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_api_trigger.py +0 -0
  273. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_default_escalation.py +0 -0
  274. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_job_trigger.py +0 -0
  275. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/test_dummy.py +0 -0
  276. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/__init__.py +0 -0
  277. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/conftest.py +0 -0
  278. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/mocks/agent_definition.json +0 -0
  279. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/test_preconfigured.py +0 -0
  280. {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/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
@@ -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.140
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.0.139"
3
+ version = "0.0.140"
4
4
  description = "UiPath Langchain"
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
@@ -1,15 +1,15 @@
1
1
  import json
2
2
  import logging
3
- from typing import Any, Dict, List, Literal, Optional, Union
3
+ from typing import Any, AsyncIterator, Dict, Iterator, List, Literal, Optional, Union
4
4
 
5
5
  from langchain_core.callbacks import (
6
6
  AsyncCallbackManagerForLLMRun,
7
7
  CallbackManagerForLLMRun,
8
8
  )
9
9
  from langchain_core.language_models import LanguageModelInput
10
- from langchain_core.messages import AIMessage, BaseMessage
10
+ from langchain_core.messages import AIMessage, AIMessageChunk, BaseMessage
11
11
  from langchain_core.messages.ai import UsageMetadata
12
- from langchain_core.outputs import ChatGeneration, ChatResult
12
+ from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResult
13
13
  from langchain_core.runnables import Runnable
14
14
  from langchain_openai.chat_models import AzureChatOpenAI
15
15
  from pydantic import BaseModel
@@ -49,6 +49,54 @@ class UiPathAzureChatOpenAI(UiPathRequestMixin, AzureChatOpenAI):
49
49
  response = await self._acall(self.url, payload, self.auth_headers)
50
50
  return self._create_chat_result(response)
51
51
 
52
+ def _stream(
53
+ self,
54
+ messages: List[BaseMessage],
55
+ stop: Optional[List[str]] = None,
56
+ run_manager: Optional[CallbackManagerForLLMRun] = None,
57
+ **kwargs: Any,
58
+ ) -> Iterator[ChatGenerationChunk]:
59
+ if "tools" in kwargs and not kwargs["tools"]:
60
+ del kwargs["tools"]
61
+ payload = self._get_request_payload(messages, stop=stop, **kwargs)
62
+ response = self._call(self.url, payload, self.auth_headers)
63
+
64
+ # For non-streaming response, yield single chunk
65
+ chat_result = self._create_chat_result(response)
66
+ chunk = ChatGenerationChunk(
67
+ message=AIMessageChunk(
68
+ content=chat_result.generations[0].message.content,
69
+ additional_kwargs=chat_result.generations[0].message.additional_kwargs,
70
+ response_metadata=chat_result.generations[0].message.response_metadata,
71
+ usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
72
+ )
73
+ )
74
+ yield chunk
75
+
76
+ async def _astream(
77
+ self,
78
+ messages: List[BaseMessage],
79
+ stop: Optional[List[str]] = None,
80
+ run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
81
+ **kwargs: Any,
82
+ ) -> AsyncIterator[ChatGenerationChunk]:
83
+ if "tools" in kwargs and not kwargs["tools"]:
84
+ del kwargs["tools"]
85
+ payload = self._get_request_payload(messages, stop=stop, **kwargs)
86
+ response = await self._acall(self.url, payload, self.auth_headers)
87
+
88
+ # For non-streaming response, yield single chunk
89
+ chat_result = self._create_chat_result(response)
90
+ chunk = ChatGenerationChunk(
91
+ message=AIMessageChunk(
92
+ content=chat_result.generations[0].message.content,
93
+ additional_kwargs=chat_result.generations[0].message.additional_kwargs,
94
+ response_metadata=chat_result.generations[0].message.response_metadata,
95
+ usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
96
+ )
97
+ )
98
+ yield chunk
99
+
52
100
  def with_structured_output(
53
101
  self,
54
102
  schema: Optional[Any] = None,
@@ -217,6 +265,92 @@ class UiPathChat(UiPathRequestMixin, AzureChatOpenAI):
217
265
  response = await self._acall(self.url, payload, self.auth_headers)
218
266
  return self._create_chat_result(response)
219
267
 
268
+ def _stream(
269
+ self,
270
+ messages: List[BaseMessage],
271
+ stop: Optional[List[str]] = None,
272
+ run_manager: Optional[CallbackManagerForLLMRun] = None,
273
+ **kwargs: Any,
274
+ ) -> Iterator[ChatGenerationChunk]:
275
+ """Stream the LLM on a given prompt.
276
+
277
+ Args:
278
+ messages: the prompt composed of a list of messages.
279
+ stop: a list of strings on which the model should stop generating.
280
+ run_manager: A run manager with callbacks for the LLM.
281
+ **kwargs: Additional keyword arguments.
282
+
283
+ Returns:
284
+ An iterator of ChatGenerationChunk objects.
285
+ """
286
+ if kwargs.get("tools"):
287
+ kwargs["tools"] = [tool["function"] for tool in kwargs["tools"]]
288
+ if "tool_choice" in kwargs and kwargs["tool_choice"]["type"] == "function":
289
+ kwargs["tool_choice"] = {
290
+ "type": "tool",
291
+ "name": kwargs["tool_choice"]["function"]["name"],
292
+ }
293
+ payload = self._get_request_payload(messages, stop=stop, **kwargs)
294
+ response = self._call(self.url, payload, self.auth_headers)
295
+
296
+ # For non-streaming response, yield single chunk
297
+ chat_result = self._create_chat_result(response)
298
+ chunk = ChatGenerationChunk(
299
+ message=AIMessageChunk(
300
+ content=chat_result.generations[0].message.content,
301
+ additional_kwargs=chat_result.generations[0].message.additional_kwargs,
302
+ response_metadata=chat_result.generations[0].message.response_metadata,
303
+ usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
304
+ tool_calls=getattr(
305
+ chat_result.generations[0].message, "tool_calls", None
306
+ ),
307
+ )
308
+ )
309
+ yield chunk
310
+
311
+ async def _astream(
312
+ self,
313
+ messages: List[BaseMessage],
314
+ stop: Optional[List[str]] = None,
315
+ run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
316
+ **kwargs: Any,
317
+ ) -> AsyncIterator[ChatGenerationChunk]:
318
+ """Async stream the LLM on a given prompt.
319
+
320
+ Args:
321
+ messages: the prompt composed of a list of messages.
322
+ stop: a list of strings on which the model should stop generating.
323
+ run_manager: A run manager with callbacks for the LLM.
324
+ **kwargs: Additional keyword arguments.
325
+
326
+ Returns:
327
+ An async iterator of ChatGenerationChunk objects.
328
+ """
329
+ if kwargs.get("tools"):
330
+ kwargs["tools"] = [tool["function"] for tool in kwargs["tools"]]
331
+ if "tool_choice" in kwargs and kwargs["tool_choice"]["type"] == "function":
332
+ kwargs["tool_choice"] = {
333
+ "type": "tool",
334
+ "name": kwargs["tool_choice"]["function"]["name"],
335
+ }
336
+ payload = self._get_request_payload(messages, stop=stop, **kwargs)
337
+ response = await self._acall(self.url, payload, self.auth_headers)
338
+
339
+ # For non-streaming response, yield single chunk
340
+ chat_result = self._create_chat_result(response)
341
+ chunk = ChatGenerationChunk(
342
+ message=AIMessageChunk(
343
+ content=chat_result.generations[0].message.content,
344
+ additional_kwargs=chat_result.generations[0].message.additional_kwargs,
345
+ response_metadata=chat_result.generations[0].message.response_metadata,
346
+ usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
347
+ tool_calls=getattr(
348
+ chat_result.generations[0].message, "tool_calls", None
349
+ ),
350
+ )
351
+ )
352
+ yield chunk
353
+
220
354
  def with_structured_output(
221
355
  self,
222
356
  schema: Optional[Any] = None,
@@ -1,9 +1,9 @@
1
1
  #!/bin/bash
2
2
 
3
3
  # Common utility to print UiPath output file
4
- # Usage: source /app/testcases/common/print_output.sh
4
+ # Usage: source /app/testcases/common/validate_output.sh
5
5
 
6
- print_uipath_output() {
6
+ debug_print_uipath_output() {
7
7
  echo "Printing output file..."
8
8
  if [ -f "__uipath/output.json" ]; then
9
9
  echo "=== OUTPUT FILE CONTENT ==="
@@ -21,3 +21,15 @@ print_uipath_output() {
21
21
  fi
22
22
  fi
23
23
  }
24
+
25
+ validate_output() {
26
+ echo "Printing output file for validation..."
27
+ debug_print_uipath_output
28
+
29
+ echo "Validating output..."
30
+ python src/assert.py || { echo "Validation failed!"; exit 1; }
31
+
32
+ echo "Testcase completed successfully."
33
+ }
34
+
35
+ validate_output
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "Syncing dependencies..."
5
+ uv sync
6
+
7
+ echo "Authenticating with UiPath..."
8
+ uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
9
+
10
+ echo "Initializing the project..."
11
+ uv run uipath init
12
+
13
+ echo "Packing agent..."
14
+ uv run uipath pack
15
+
16
+ echo "Running agent..."
17
+ uv run uipath run agent --file input.json
18
+
19
+ echo "Running agent again with empty UIPATH_JOB_KEY..."
20
+ export UIPATH_JOB_KEY=""
21
+ uv run uipath run agent --file input.json >> local_run_output.log
@@ -0,0 +1,46 @@
1
+ import os
2
+ import json
3
+
4
+ print("Checking company research agent output...")
5
+
6
+ # Check NuGet package
7
+ uipath_dir = ".uipath"
8
+ assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
9
+
10
+ nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
11
+ assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
12
+
13
+ print(f"NuGet package found: {nupkg_files[0]}")
14
+
15
+ # Check agent output file
16
+ output_file = "__uipath/output.json"
17
+ assert os.path.isfile(output_file), "Agent output file not found"
18
+
19
+ print("Agent output file found")
20
+
21
+ # Check status and required fields
22
+ with open(output_file, 'r', encoding='utf-8') as f:
23
+ output_data = json.load(f)
24
+
25
+ # Check status
26
+ status = output_data.get("status")
27
+ assert status == "successful", f"Agent execution failed with status: {status}"
28
+
29
+ print("Agent execution status: successful")
30
+
31
+ # Check required fields for company research agent
32
+ assert "output" in output_data, "Missing 'output' field in agent response"
33
+
34
+ output_content = output_data["output"]
35
+ assert "response" in output_content, "Missing 'response' field in output"
36
+
37
+ response = output_content["response"]
38
+ assert response and response.strip() != "", "Response field is empty"
39
+
40
+ with open("local_run_output.log", 'r', encoding='utf-8') as f:
41
+ local_run_output = f.read()
42
+
43
+ # Check if response contains 'Successful execution.'
44
+ assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
45
+
46
+ print("Required fields validation passed")
@@ -0,0 +1,3 @@
1
+ {
2
+ "topic": "uipath"
3
+ }
@@ -0,0 +1,13 @@
1
+ [project]
2
+ name = "agent"
3
+ version = "0.0.1"
4
+ description = "agent"
5
+ authors = [{ name = "John Doe", email = "john.doe@myemail.com" }]
6
+ dependencies = [
7
+ "langchain-anthropic>=0.3.8",
8
+ "uipath-langchain",
9
+ ]
10
+ requires-python = ">=3.10"
11
+
12
+ [tool.uv.sources]
13
+ uipath-langchain = { path = "../../", editable = true }
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "Syncing dependencies..."
5
+ uv sync
6
+
7
+ echo "Backing up pyproject.toml..."
8
+ cp pyproject.toml pyproject-overwrite.toml
9
+
10
+ echo "Creating new UiPath agent..."
11
+ uv run uipath new agent
12
+
13
+ # uipath new overwrites pyproject.toml, so we need to copy it back
14
+ echo "Restoring pyproject.toml..."
15
+ cp pyproject-overwrite.toml pyproject.toml
16
+ uv sync
17
+
18
+ echo "Authenticating with UiPath..."
19
+ uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
20
+
21
+ echo "Initializing UiPath..."
22
+ uv run uipath init
23
+
24
+ echo "Packing agent..."
25
+ uv run uipath pack
26
+
27
+ echo "Input from input.json file"
28
+ uv run uipath run agent --file input.json
29
+
30
+ echo "Running agent again with empty UIPATH_JOB_KEY..."
31
+ export UIPATH_JOB_KEY=""
32
+ uv run uipath run agent --file input.json >> local_run_output.log
@@ -0,0 +1,46 @@
1
+ import os
2
+ import json
3
+
4
+ print("Checking init-flow output...")
5
+
6
+ # Check NuGet package
7
+ uipath_dir = ".uipath"
8
+ assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
9
+
10
+ nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
11
+ assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
12
+
13
+ print(f"NuGet package found: {nupkg_files[0]}")
14
+
15
+ # Check agent output file
16
+ output_file = "__uipath/output.json"
17
+ assert os.path.isfile(output_file), "Agent output file not found"
18
+
19
+ print("Agent output file found")
20
+
21
+ # Check status and required fields
22
+ with open(output_file, 'r', encoding='utf-8') as f:
23
+ output_data = json.load(f)
24
+
25
+ # Check status
26
+ status = output_data.get("status")
27
+ assert status == "successful", f"Agent execution failed with status: {status}"
28
+
29
+ print("Agent execution status: successful")
30
+
31
+ # Check required fields for simple local MCP agent
32
+ assert "output" in output_data, "Missing 'output' field in agent response"
33
+
34
+ output_content = output_data["output"]
35
+ assert "report" in output_content, "Missing 'report' field in output"
36
+
37
+ report = output_content["report"]
38
+ assert report and isinstance(report, str), "Report field is empty or not a string"
39
+
40
+ with open("local_run_output.log", 'r', encoding='utf-8') as f:
41
+ local_run_output = f.read()
42
+
43
+ # Check if response contains 'Successful execution.'
44
+ assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
45
+
46
+ print("Required fields validation passed")
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "Syncing dependencies..."
5
+ uv sync
6
+
7
+ echo "Authenticating with UiPath..."
8
+ uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
9
+
10
+ echo "Initializing the project..."
11
+ uv run uipath init
12
+
13
+ echo "Packing agent..."
14
+ uv run uipath pack
15
+
16
+ echo "Running agent..."
17
+ uv run uipath run agent --file input.json
18
+
19
+ echo "Running agent again with empty UIPATH_JOB_KEY..."
20
+ export UIPATH_JOB_KEY=""
21
+ uv run uipath run agent --file input.json >> local_run_output.log
@@ -0,0 +1,46 @@
1
+ import os
2
+ import json
3
+
4
+ print("Checking simple local MCP agent output...")
5
+
6
+ # Check NuGet package
7
+ uipath_dir = ".uipath"
8
+ assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
9
+
10
+ nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
11
+ assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
12
+
13
+ print(f"NuGet package found: {nupkg_files[0]}")
14
+
15
+ # Check agent output file
16
+ output_file = "__uipath/output.json"
17
+ assert os.path.isfile(output_file), "Agent output file not found"
18
+
19
+ print("Agent output file found")
20
+
21
+ # Check status and required fields
22
+ with open(output_file, 'r', encoding='utf-8') as f:
23
+ output_data = json.load(f)
24
+
25
+ # Check status
26
+ status = output_data.get("status")
27
+ assert status == "successful", f"Agent execution failed with status: {status}"
28
+
29
+ print("Agent execution status: successful")
30
+
31
+ # Check required fields for simple local MCP agent
32
+ assert "output" in output_data, "Missing 'output' field in agent response"
33
+
34
+ output_content = output_data["output"]
35
+ assert "messages" in output_content, "Missing 'messages' field in output"
36
+
37
+ messages = output_content["messages"]
38
+ assert messages and isinstance(messages, list), "Messages field is empty or not a list"
39
+
40
+ with open("local_run_output.log", 'r', encoding='utf-8') as f:
41
+ local_run_output = f.read()
42
+
43
+ # Check if response contains 'Successful execution.'
44
+ assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
45
+
46
+ print("Required fields validation passed")
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "Syncing dependencies..."
5
+ uv sync
6
+
7
+ echo "Authenticating with UiPath..."
8
+ uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
9
+
10
+ echo "Initializing the project..."
11
+ uv run uipath init
12
+
13
+ echo "Packing agent..."
14
+ uv run uipath pack
15
+
16
+ echo "Input from input.json file"
17
+ uv run uipath run agent --file input.json
18
+
19
+ echo "Resuming agent run by default with {'Answer': true}..."
20
+ uv run uipath run agent '{"Answer": true}' --resume;
21
+
22
+ echo "Running agent again with empty UIPATH_JOB_KEY..."
23
+ export UIPATH_JOB_KEY=""
24
+ uv run uipath run agent --file input.json >> local_run_output.log
25
+ uv run uipath run agent '{"Answer": true}' --resume >> local_run_output.log
@@ -0,0 +1,51 @@
1
+ import os
2
+ import json
3
+
4
+ print("Checking ticket classification agent output...")
5
+
6
+ # Check NuGet package
7
+ uipath_dir = ".uipath"
8
+ assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
9
+
10
+ nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
11
+ assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
12
+
13
+ print(f"NuGet package found: {nupkg_files[0]}")
14
+
15
+ # Check agent output file
16
+ output_file = "__uipath/output.json"
17
+ assert os.path.isfile(output_file), "Agent output file not found"
18
+
19
+ print("Agent output file found")
20
+
21
+ # Check status and required fields
22
+ with open(output_file, 'r', encoding='utf-8') as f:
23
+ output_data = json.load(f)
24
+
25
+ # Check status
26
+ status = output_data.get("status")
27
+ assert status == "successful", f"Agent execution failed with status: {status}"
28
+
29
+ print("Agent execution status: successful")
30
+
31
+ # Check required fields for ticket classification agent
32
+ assert "output" in output_data, "Missing 'output' field in agent response"
33
+
34
+ output_content = output_data["output"]
35
+ assert "label" in output_content, "Missing 'label' field in output"
36
+
37
+ label = output_content["label"]
38
+ assert label and label.strip() != "", "Label field is empty"
39
+
40
+ assert "confidence" in output_content, "Missing 'confidence' field in output"
41
+
42
+ confidence = output_content["confidence"]
43
+ assert confidence is not None and confidence != "", "Confidence field is empty"
44
+
45
+ with open("local_run_output.log", 'r', encoding='utf-8') as f:
46
+ local_run_output = f.read()
47
+
48
+ # Check if response contains 'Successful execution.'
49
+ assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
50
+
51
+ print("Required fields validation passed")
@@ -2840,7 +2840,7 @@ wheels = [
2840
2840
 
2841
2841
  [[package]]
2842
2842
  name = "uipath-langchain"
2843
- version = "0.0.139"
2843
+ version = "0.0.140"
2844
2844
  source = { editable = "." }
2845
2845
  dependencies = [
2846
2846
  { name = "httpx" },
@@ -1,16 +0,0 @@
1
- FROM ghcr.io/astral-sh/uv:python3.12-bookworm
2
-
3
- WORKDIR /app
4
-
5
- COPY . .
6
-
7
- # Install dependencies for all testcases
8
- RUN uv sync
9
-
10
-
11
- # Set environment variables for runtime
12
- ENV TAVILY_API_KEY=${TAVILY_API_KEY:-""}
13
- ENV UIPATH_TENANT_ID=${UIPATH_TENANT_ID:-""}
14
- ENV UIPATH_JOB_KEY=3a03d5cb-fa21-4021-894d-a8e2eda0afe0
15
-
16
- CMD ["bash"]