uipath-langchain 0.0.142__tar.gz → 0.0.144__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 (303) hide show
  1. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/PKG-INFO +2 -2
  2. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/pyproject.toml +3 -3
  3. uipath_langchain-0.0.144/src/uipath_langchain/_cli/_runtime/_exception.py +43 -0
  4. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +10 -12
  5. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_input.py +2 -2
  6. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_output.py +5 -8
  7. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_runtime.py +12 -6
  8. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_debug.py +5 -2
  9. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_eval.py +5 -3
  10. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_run.py +15 -3
  11. uipath_langchain-0.0.144/src/uipath_langchain/_tracing/__init__.py +5 -0
  12. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_utils/_request_mixin.py +5 -2
  13. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/__init__.py +12 -0
  14. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/agent.py +76 -0
  15. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/constants.py +2 -0
  16. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/exceptions.py +11 -0
  17. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/init_node.py +16 -0
  18. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/llm_node.py +44 -0
  19. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/router.py +97 -0
  20. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/state.py +18 -0
  21. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/terminate_node.py +53 -0
  22. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/tools/__init__.py +7 -0
  23. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/tools/tools.py +50 -0
  24. uipath_langchain-0.0.144/src/uipath_langchain/agent/react/utils.py +39 -0
  25. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/__init__.py +8 -0
  26. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/context_tool.py +42 -0
  27. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/process_tool.py +51 -0
  28. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/tool_factory.py +39 -0
  29. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/tool_node.py +22 -0
  30. uipath_langchain-0.0.144/src/uipath_langchain/agent/tools/utils.py +11 -0
  31. uipath_langchain-0.0.144/testcases/common/trace_assert.py +130 -0
  32. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/common/validate_output.sh +13 -9
  33. uipath_langchain-0.0.144/testcases/company-research-agent/expected_raw.json +861 -0
  34. uipath_langchain-0.0.144/testcases/company-research-agent/expected_traces.json +41 -0
  35. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/run.sh +1 -1
  36. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/src/assert.py +4 -1
  37. uipath_langchain-0.0.144/testcases/init-flow/expected_traces.json +32 -0
  38. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/init-flow/run.sh +1 -1
  39. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/init-flow/src/assert.py +5 -1
  40. uipath_langchain-0.0.144/testcases/simple-local-mcp/expected_traces.json +42 -0
  41. uipath_langchain-0.0.144/testcases/simple-local-mcp/input.json +12 -0
  42. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/run.sh +1 -1
  43. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/src/assert.py +5 -1
  44. uipath_langchain-0.0.144/testcases/ticket-classification/expected_traces.json +32 -0
  45. uipath_langchain-0.0.144/testcases/ticket-classification/raw_traces.jsonl +462 -0
  46. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/run.sh +2 -2
  47. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/src/assert.py +4 -1
  48. uipath_langchain-0.0.144/tests/agent/react/__init__.py +1 -0
  49. uipath_langchain-0.0.144/tests/agent/react/test_utils.py +135 -0
  50. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/uv.lock +131 -133
  51. uipath_langchain-0.0.142/src/uipath_langchain/_cli/_runtime/_exception.py +0 -17
  52. uipath_langchain-0.0.142/src/uipath_langchain/_tracing/__init__.py +0 -4
  53. uipath_langchain-0.0.142/src/uipath_langchain/_tracing/_oteladapter.py +0 -234
  54. uipath_langchain-0.0.142/testcases/simple-local-mcp/input.json +0 -1
  55. uipath_langchain-0.0.142/tests/tracing/test_oteladapter.py +0 -260
  56. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.cursorrules +0 -0
  57. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.editorconfig +0 -0
  58. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.gitattributes +0 -0
  59. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/cd.yml +0 -0
  60. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/ci.yml +0 -0
  61. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/commitlint.yml +0 -0
  62. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/integration_tests.yml +0 -0
  63. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/lint-custom-version.yml +0 -0
  64. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/lint.yml +0 -0
  65. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/publish-dev.yml +0 -0
  66. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/publish-docs.yml +0 -0
  67. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/publish-prior-stable-version.yml +0 -0
  68. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/slack.yml +0 -0
  69. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/test-custom-version.yml +0 -0
  70. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.github/workflows/test.yml +0 -0
  71. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.gitignore +0 -0
  72. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.pre-commit-config.yaml +0 -0
  73. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.python-version +0 -0
  74. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.vscode/extensions.json +0 -0
  75. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/.vscode/settings.json +0 -0
  76. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/CONTRIBUTING.md +0 -0
  77. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/LICENSE +0 -0
  78. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/README.md +0 -0
  79. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/chat_models.md +0 -0
  80. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/context_grounding.md +0 -0
  81. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/human_in_the_loop.md +0 -0
  82. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/quick_start.md +0 -0
  83. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
  84. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/quick_start_images/cloud_env_var_light.png +0 -0
  85. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/quick_start_images/invoke_output_dark.png +0 -0
  86. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/quick_start_images/invoke_output_light.png +0 -0
  87. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
  88. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-index-1.png +0 -0
  89. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-index-2.png +0 -0
  90. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-process.png +0 -0
  91. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
  92. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
  93. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
  94. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/folder-path.png +0 -0
  95. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/job-info.png +0 -0
  96. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/output.png +0 -0
  97. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/process-page.png +0 -0
  98. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/researcher-1.png +0 -0
  99. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/researcher-2.png +0 -0
  100. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/run-process-1.png +0 -0
  101. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/run-process-2.png +0 -0
  102. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
  103. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  104. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  105. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  106. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  107. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  108. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  109. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  110. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  111. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  112. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  113. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  114. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  115. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  116. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  117. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  118. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  119. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/start-job.png +0 -0
  120. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  121. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/README.md +0 -0
  122. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/env.example +0 -0
  123. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
  124. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
  125. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/langgraph.json +0 -0
  126. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/pyproject.toml +0 -0
  127. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
  128. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
  129. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
  130. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
  131. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/uipath.json +0 -0
  132. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/RAG-quiz-generator/uv.lock +0 -0
  133. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/README.md +0 -0
  134. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/calculator-agent/graph.py +0 -0
  135. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/calculator-agent/langgraph.json +0 -0
  136. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/calculator-agent/pyproject.toml +0 -0
  137. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/calculator-agent/uipath.json +0 -0
  138. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/calculator-agent/uv.lock +0 -0
  139. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/.env.example +0 -0
  140. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/agent.mermaid +0 -0
  141. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/graph.py +0 -0
  142. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/langgraph.json +0 -0
  143. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/pyproject.toml +0 -0
  144. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/uipath.json +0 -0
  145. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/chat-agent/uv.lock +0 -0
  146. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/.env.example +0 -0
  147. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/agent.mermaid +0 -0
  148. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/graph.py +0 -0
  149. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/langgraph.json +0 -0
  150. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/pyproject.toml +0 -0
  151. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/uipath.json +0 -0
  152. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/company-research-agent/uv.lock +0 -0
  153. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/.env.template +0 -0
  154. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/.python-version +0 -0
  155. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/.vscode/launch.json +0 -0
  156. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/README.md +0 -0
  157. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/agent.mermaid +0 -0
  158. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/input.json +0 -0
  159. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/langgraph.json +0 -0
  160. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/pyproject.toml +0 -0
  161. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
  162. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
  163. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
  164. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/uipath.json +0 -0
  165. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/email-organizer-agent/uv.lock +0 -0
  166. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/database.py +0 -0
  167. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/main.py +0 -0
  168. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/models.py +0 -0
  169. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/pyproject.toml +0 -0
  170. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/schemas.py +0 -0
  171. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/templates/index.html +0 -0
  172. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/hitl-inbox-server/uv.lock +0 -0
  173. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  174. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  175. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  176. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  177. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  178. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  179. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  180. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  181. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  182. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  183. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  184. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  185. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  186. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  187. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  188. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  189. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  190. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  191. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  192. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  193. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/.env.example +0 -0
  194. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/README.md +0 -0
  195. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/input.json +0 -0
  196. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/langgraph.json +0 -0
  197. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/main.py +0 -0
  198. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/pyproject.toml +0 -0
  199. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/oauth-external-apps-agent/uv.lock +0 -0
  200. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/.env.example +0 -0
  201. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/README.md +0 -0
  202. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/main.py +0 -0
  203. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/pyproject.toml +0 -0
  204. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/uipath.json +0 -0
  205. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/retrieval-chain/uv.lock +0 -0
  206. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/.env.example +0 -0
  207. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/README.md +0 -0
  208. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/agent.mermaid +0 -0
  209. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/langgraph.json +0 -0
  210. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/pyproject.toml +0 -0
  211. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  212. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  213. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  214. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/uipath.json +0 -0
  215. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-local-mcp/uv.lock +0 -0
  216. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/.env.example +0 -0
  217. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/README.md +0 -0
  218. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/agent.mermaid +0 -0
  219. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/langgraph.json +0 -0
  220. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/main.py +0 -0
  221. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/pyproject.toml +0 -0
  222. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/uipath.json +0 -0
  223. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/simple-remote-mcp/uv.lock +0 -0
  224. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/.env.example +0 -0
  225. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/README.md +0 -0
  226. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/agent.mermaid +0 -0
  227. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  228. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/langgraph.json +0 -0
  229. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/main.py +0 -0
  230. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/pyproject.toml +0 -0
  231. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/uipath.json +0 -0
  232. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/samples/ticket-classification/uv.lock +0 -0
  233. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/__init__.py +0 -0
  234. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/__init__.py +0 -0
  235. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  236. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
  237. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
  238. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
  239. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  240. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_dev.py +0 -0
  241. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_init.py +0 -0
  242. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_cli/cli_new.py +0 -0
  243. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_resources/AGENTS.md +0 -0
  244. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_resources/REQUIRED_STRUCTURE.md +0 -0
  245. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
  246. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_tracing/_utils.py +0 -0
  247. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_utils/__init__.py +0 -0
  248. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_utils/_settings.py +0 -0
  249. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  250. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/chat/__init__.py +0 -0
  251. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/chat/models.py +0 -0
  252. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/embeddings/__init__.py +0 -0
  253. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  254. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/middlewares.py +0 -0
  255. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/py.typed +0 -0
  256. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/retrievers/__init__.py +0 -0
  257. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  258. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/tools/__init__.py +0 -0
  259. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/tools/preconfigured.py +0 -0
  260. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/vectorstores/__init__.py +0 -0
  261. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  262. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/input.json +0 -0
  263. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/langgraph.json +0 -0
  264. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/pyproject.toml +0 -0
  265. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/src/graph.py +0 -0
  266. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/company-research-agent/uv.lock +0 -0
  267. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/init-flow/input.json +0 -0
  268. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/init-flow/pyproject.toml +0 -0
  269. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/langgraph.json +0 -0
  270. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/pyproject.toml +0 -0
  271. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  272. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  273. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  274. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/simple-local-mcp/uv.lock +0 -0
  275. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/input.json +0 -0
  276. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/langgraph.json +0 -0
  277. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/pyproject.toml +0 -0
  278. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/src/main.py +0 -0
  279. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/testcases/ticket-classification/uv.lock +0 -0
  280. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/__init__.py +0 -0
  281. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/conftest.py +0 -0
  282. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/mocks/langgraph.json +0 -0
  283. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/mocks/simple_agent.py +0 -0
  284. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/mocks/uipath.json +0 -0
  285. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/test_init.py +0 -0
  286. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/cli/test_run.py +0 -0
  287. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/__init__.py +0 -0
  288. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/conftest.py +0 -0
  289. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
  290. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
  291. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
  292. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/langgraph.json +0 -0
  293. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
  294. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/mocks/uipath.json +0 -0
  295. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/test_action_trigger.py +0 -0
  296. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/test_hitl_api_trigger.py +0 -0
  297. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/test_hitl_default_escalation.py +0 -0
  298. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/hitl/test_hitl_job_trigger.py +0 -0
  299. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/test_dummy.py +0 -0
  300. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/tools/__init__.py +0 -0
  301. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/tools/conftest.py +0 -0
  302. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/tools/mocks/agent_definition.json +0 -0
  303. {uipath_langchain-0.0.142 → uipath_langchain-0.0.144}/tests/tools/test_preconfigured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.142
3
+ Version: 0.0.144
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.101
29
+ Requires-Dist: uipath<2.2.0,>=2.1.103
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.142"
3
+ version = "0.0.144"
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.101, <2.2.0",
8
+ "uipath>=2.1.103, <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",
@@ -111,4 +111,4 @@ asyncio_mode = "auto"
111
111
  name = "testpypi"
112
112
  url = "https://test.pypi.org/simple/"
113
113
  publish-url = "https://test.pypi.org/legacy/"
114
- explicit = true
114
+ explicit = true
@@ -0,0 +1,43 @@
1
+ from enum import Enum
2
+ from typing import Optional, Union
3
+
4
+ from uipath._cli._runtime._contracts import (
5
+ UiPathBaseRuntimeError,
6
+ UiPathErrorCategory,
7
+ UiPathErrorCode,
8
+ )
9
+
10
+
11
+ class LangGraphErrorCode(Enum):
12
+ CONFIG_MISSING = "CONFIG_MISSING"
13
+ CONFIG_INVALID = "CONFIG_INVALID"
14
+
15
+ GRAPH_NOT_FOUND = "GRAPH_NOT_FOUND"
16
+ GRAPH_IMPORT_ERROR = "GRAPH_IMPORT_ERROR"
17
+ GRAPH_TYPE_ERROR = "GRAPH_TYPE_ERROR"
18
+ GRAPH_VALUE_ERROR = "GRAPH_VALUE_ERROR"
19
+ GRAPH_LOAD_ERROR = "GRAPH_LOAD_ERROR"
20
+ GRAPH_INVALID_UPDATE = "GRAPH_INVALID_UPDATE"
21
+ GRAPH_EMPTY_INPUT = "GRAPH_EMPTY_INPUT"
22
+
23
+ DB_QUERY_FAILED = "DB_QUERY_FAILED"
24
+ DB_TABLE_CREATION_FAILED = "DB_TABLE_CREATION_FAILED"
25
+ HITL_EVENT_CREATION_FAILED = "HITL_EVENT_CREATION_FAILED"
26
+ DB_INSERT_FAILED = "DB_INSERT_FAILED"
27
+ LICENSE_NOT_AVAILABLE = "LICENSE_NOT_AVAILABLE"
28
+
29
+
30
+ class LangGraphRuntimeError(UiPathBaseRuntimeError):
31
+ """Custom exception for LangGraph runtime errors with structured error information."""
32
+
33
+ def __init__(
34
+ self,
35
+ code: Union[LangGraphErrorCode, UiPathErrorCode],
36
+ title: str,
37
+ detail: str,
38
+ category: UiPathErrorCategory = UiPathErrorCategory.UNKNOWN,
39
+ status: Optional[int] = None,
40
+ ):
41
+ super().__init__(
42
+ code.value, title, detail, category, status, prefix="LANGGRAPH"
43
+ )
@@ -2,12 +2,10 @@ import asyncio
2
2
  from typing import Any, Awaitable, Callable, Optional
3
3
 
4
4
  from langgraph.graph.state import CompiledStateGraph, StateGraph
5
- from uipath._cli._runtime._contracts import (
6
- UiPathErrorCategory,
7
- )
5
+ from uipath._cli._runtime._contracts import UiPathErrorCategory, UiPathErrorCode
8
6
 
9
7
  from .._utils._graph import GraphConfig, LangGraphConfig
10
- from ._exception import LangGraphRuntimeError
8
+ from ._exception import LangGraphErrorCode, LangGraphRuntimeError
11
9
 
12
10
 
13
11
  class LangGraphJsonResolver:
@@ -36,7 +34,7 @@ class LangGraphJsonResolver:
36
34
  config = LangGraphConfig()
37
35
  if not config.exists:
38
36
  raise LangGraphRuntimeError(
39
- "CONFIG_MISSING",
37
+ LangGraphErrorCode.CONFIG_MISSING,
40
38
  "Invalid configuration",
41
39
  "Failed to load configuration",
42
40
  UiPathErrorCategory.DEPLOYMENT,
@@ -46,7 +44,7 @@ class LangGraphJsonResolver:
46
44
  config.load_config()
47
45
  except Exception as e:
48
46
  raise LangGraphRuntimeError(
49
- "CONFIG_INVALID",
47
+ LangGraphErrorCode.CONFIG_INVALID,
50
48
  "Invalid configuration",
51
49
  f"Failed to load configuration: {str(e)}",
52
50
  UiPathErrorCategory.DEPLOYMENT,
@@ -59,7 +57,7 @@ class LangGraphJsonResolver:
59
57
  elif not entrypoint:
60
58
  graph_names = ", ".join(g.name for g in graphs)
61
59
  raise LangGraphRuntimeError(
62
- "ENTRYPOINT_MISSING",
60
+ UiPathErrorCode.ENTRYPOINT_MISSING,
63
61
  "Entrypoint required",
64
62
  f"Multiple graphs available. Please specify one of: {graph_names}.",
65
63
  UiPathErrorCategory.DEPLOYMENT,
@@ -69,7 +67,7 @@ class LangGraphJsonResolver:
69
67
  self.graph_config = config.get_graph(entrypoint)
70
68
  if not self.graph_config:
71
69
  raise LangGraphRuntimeError(
72
- "GRAPH_NOT_FOUND",
70
+ LangGraphErrorCode.GRAPH_NOT_FOUND,
73
71
  "Graph not found",
74
72
  f"Graph '{entrypoint}' not found.",
75
73
  UiPathErrorCategory.DEPLOYMENT,
@@ -83,28 +81,28 @@ class LangGraphJsonResolver:
83
81
  )
84
82
  except ImportError as e:
85
83
  raise LangGraphRuntimeError(
86
- "GRAPH_IMPORT_ERROR",
84
+ LangGraphErrorCode.GRAPH_IMPORT_ERROR,
87
85
  "Graph import failed",
88
86
  f"Failed to import graph '{entrypoint}': {str(e)}",
89
87
  UiPathErrorCategory.USER,
90
88
  ) from e
91
89
  except TypeError as e:
92
90
  raise LangGraphRuntimeError(
93
- "GRAPH_TYPE_ERROR",
91
+ LangGraphErrorCode.GRAPH_TYPE_ERROR,
94
92
  "Invalid graph type",
95
93
  f"Graph '{entrypoint}' is not a valid StateGraph or CompiledStateGraph: {str(e)}",
96
94
  UiPathErrorCategory.USER,
97
95
  ) from e
98
96
  except ValueError as e:
99
97
  raise LangGraphRuntimeError(
100
- "GRAPH_VALUE_ERROR",
98
+ LangGraphErrorCode.GRAPH_VALUE_ERROR,
101
99
  "Invalid graph value",
102
100
  f"Invalid value in graph '{entrypoint}': {str(e)}",
103
101
  UiPathErrorCategory.USER,
104
102
  ) from e
105
103
  except Exception as e:
106
104
  raise LangGraphRuntimeError(
107
- "GRAPH_LOAD_ERROR",
105
+ LangGraphErrorCode.GRAPH_LOAD_ERROR,
108
106
  "Failed to load graph",
109
107
  f"Unexpected error loading graph '{entrypoint}': {str(e)}",
110
108
  UiPathErrorCategory.USER,
@@ -13,7 +13,7 @@ from uipath._cli._runtime._hitl import HitlReader
13
13
 
14
14
  from ._context import LangGraphRuntimeContext
15
15
  from ._conversation import uipath_to_human_messages
16
- from ._exception import LangGraphRuntimeError
16
+ from ._exception import LangGraphErrorCode, LangGraphRuntimeError
17
17
 
18
18
  logger = logging.getLogger(__name__)
19
19
 
@@ -140,7 +140,7 @@ async def _get_latest_trigger(
140
140
  return cast(tuple[str, str, str, str, str], tuple(result))
141
141
  except Exception as e:
142
142
  raise LangGraphRuntimeError(
143
- "DB_QUERY_FAILED",
143
+ LangGraphErrorCode.DB_QUERY_FAILED,
144
144
  "Database query failed",
145
145
  f"Error querying resume trigger information: {str(e)}",
146
146
  UiPathErrorCategory.SYSTEM,
@@ -3,13 +3,10 @@ import logging
3
3
  from typing import Any
4
4
 
5
5
  from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
6
- from uipath._cli._runtime._contracts import (
7
- UiPathErrorCategory,
8
- UiPathResumeTrigger,
9
- )
6
+ from uipath._cli._runtime._contracts import UiPathErrorCategory, UiPathResumeTrigger
10
7
  from uipath._cli._runtime._hitl import HitlProcessor
11
8
 
12
- from ._exception import LangGraphRuntimeError
9
+ from ._exception import LangGraphErrorCode, LangGraphRuntimeError
13
10
 
14
11
  logger = logging.getLogger(__name__)
15
12
 
@@ -93,7 +90,7 @@ async def create_and_save_resume_trigger(
93
90
  """)
94
91
  except Exception as e:
95
92
  raise LangGraphRuntimeError(
96
- "DB_TABLE_CREATION_FAILED",
93
+ LangGraphErrorCode.DB_TABLE_CREATION_FAILED,
97
94
  "Failed to create resume triggers table",
98
95
  f"Database error while creating table: {str(e)}",
99
96
  UiPathErrorCategory.SYSTEM,
@@ -104,7 +101,7 @@ async def create_and_save_resume_trigger(
104
101
  resume_trigger = await hitl_processor.create_resume_trigger()
105
102
  except Exception as e:
106
103
  raise LangGraphRuntimeError(
107
- "HITL_EVENT_CREATION_FAILED",
104
+ LangGraphErrorCode.HITL_EVENT_CREATION_FAILED,
108
105
  "Failed to process HITL request",
109
106
  f"Error while trying to process HITL request: {str(e)}",
110
107
  UiPathErrorCategory.SYSTEM,
@@ -139,7 +136,7 @@ async def create_and_save_resume_trigger(
139
136
  await memory.conn.commit()
140
137
  except Exception as e:
141
138
  raise LangGraphRuntimeError(
142
- "DB_INSERT_FAILED",
139
+ LangGraphErrorCode.DB_INSERT_FAILED,
143
140
  "Failed to save resume trigger",
144
141
  f"Database error while saving resume trigger: {str(e)}",
145
142
  UiPathErrorCategory.SYSTEM,
@@ -12,6 +12,7 @@ from uipath._cli._runtime._contracts import (
12
12
  UiPathBaseRuntime,
13
13
  UiPathBreakpointResult,
14
14
  UiPathErrorCategory,
15
+ UiPathErrorCode,
15
16
  UiPathResumeTrigger,
16
17
  UiPathRuntimeResult,
17
18
  UiPathRuntimeStatus,
@@ -23,7 +24,7 @@ from uipath._events._events import (
23
24
  )
24
25
 
25
26
  from ._context import LangGraphRuntimeContext
26
- from ._exception import LangGraphRuntimeError
27
+ from ._exception import LangGraphErrorCode, LangGraphRuntimeError
27
28
  from ._graph_resolver import AsyncResolver, LangGraphJsonResolver
28
29
  from ._input import get_graph_input
29
30
  from ._output import create_and_save_resume_trigger, serialize_output
@@ -79,7 +80,11 @@ class LangGraphRuntime(UiPathBaseRuntime):
79
80
  graph_config = self._get_graph_config()
80
81
 
81
82
  # Execute without streaming
82
- graph_output = await compiled_graph.ainvoke(graph_input, graph_config)
83
+ graph_output = await compiled_graph.ainvoke(
84
+ graph_input,
85
+ graph_config,
86
+ interrupt_before=self.context.breakpoints,
87
+ )
83
88
 
84
89
  # Get final state and create result
85
90
  self.context.result = await self._create_runtime_result(
@@ -140,6 +145,7 @@ class LangGraphRuntime(UiPathBaseRuntime):
140
145
  async for stream_chunk in compiled_graph.astream(
141
146
  graph_input,
142
147
  graph_config,
148
+ interrupt_before=self.context.breakpoints,
143
149
  stream_mode=["messages", "updates"],
144
150
  subgraphs=True,
145
151
  ):
@@ -426,7 +432,7 @@ class LangGraphRuntime(UiPathBaseRuntime):
426
432
 
427
433
  if isinstance(e, GraphRecursionError):
428
434
  return LangGraphRuntimeError(
429
- "GRAPH_RECURSION_ERROR",
435
+ LangGraphErrorCode.GRAPH_LOAD_ERROR,
430
436
  "Graph recursion limit exceeded",
431
437
  detail,
432
438
  UiPathErrorCategory.USER,
@@ -434,7 +440,7 @@ class LangGraphRuntime(UiPathBaseRuntime):
434
440
 
435
441
  if isinstance(e, InvalidUpdateError):
436
442
  return LangGraphRuntimeError(
437
- "GRAPH_INVALID_UPDATE",
443
+ LangGraphErrorCode.GRAPH_INVALID_UPDATE,
438
444
  str(e),
439
445
  detail,
440
446
  UiPathErrorCategory.USER,
@@ -442,14 +448,14 @@ class LangGraphRuntime(UiPathBaseRuntime):
442
448
 
443
449
  if isinstance(e, EmptyInputError):
444
450
  return LangGraphRuntimeError(
445
- "GRAPH_EMPTY_INPUT",
451
+ LangGraphErrorCode.GRAPH_EMPTY_INPUT,
446
452
  "The input data is empty",
447
453
  detail,
448
454
  UiPathErrorCategory.USER,
449
455
  )
450
456
 
451
457
  return LangGraphRuntimeError(
452
- "EXECUTION_ERROR",
458
+ UiPathErrorCode.EXECUTION_ERROR,
453
459
  "Graph execution failed",
454
460
  detail,
455
461
  UiPathErrorCategory.USER,
@@ -12,8 +12,9 @@ from uipath._cli._runtime._contracts import (
12
12
  UiPathRuntimeFactory,
13
13
  )
14
14
  from uipath._cli.middlewares import MiddlewareResult
15
+ from uipath.tracing import LlmOpsHttpExporter
15
16
 
16
- from .._tracing import LangChainExporter, _instrument_traceable_attributes
17
+ from .._tracing import _instrument_traceable_attributes
17
18
  from ._runtime._exception import LangGraphRuntimeError
18
19
  from ._runtime._runtime import ( # type: ignore[attr-defined]
19
20
  LangGraphRuntimeContext,
@@ -61,7 +62,9 @@ def langgraph_debug_middleware(
61
62
  )
62
63
 
63
64
  if context.job_id:
64
- runtime_factory.add_span_exporter(LangChainExporter())
65
+ runtime_factory.add_span_exporter(
66
+ LlmOpsHttpExporter(extra_process_spans=True)
67
+ )
65
68
 
66
69
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
67
70
 
@@ -15,12 +15,12 @@ from uipath._cli._utils._eval_set import EvalHelpers
15
15
  from uipath._cli.middlewares import MiddlewareResult
16
16
  from uipath._events._event_bus import EventBus
17
17
  from uipath.eval._helpers import auto_discover_entrypoint
18
+ from uipath.tracing import LlmOpsHttpExporter
18
19
 
19
20
  from uipath_langchain._cli._runtime._context import LangGraphRuntimeContext
20
21
  from uipath_langchain._cli._runtime._runtime import LangGraphScriptRuntime
21
22
  from uipath_langchain._cli._utils._graph import LangGraphConfig
22
23
  from uipath_langchain._tracing import (
23
- LangChainExporter,
24
24
  _instrument_traceable_attributes,
25
25
  )
26
26
 
@@ -41,7 +41,7 @@ def langgraph_eval_middleware(
41
41
 
42
42
  if kwargs.get("register_progress_reporter", False):
43
43
  progress_reporter = StudioWebProgressReporter(
44
- spans_exporter=LangChainExporter()
44
+ spans_exporter=LlmOpsHttpExporter(extra_process_spans=True)
45
45
  )
46
46
  asyncio.run(progress_reporter.subscribe_to_eval_runtime_events(event_bus))
47
47
  console_reporter = ConsoleProgressReporter()
@@ -76,7 +76,9 @@ def langgraph_eval_middleware(
76
76
  )
77
77
 
78
78
  if eval_context.job_id:
79
- runtime_factory.add_span_exporter(LangChainExporter())
79
+ runtime_factory.add_span_exporter(
80
+ LlmOpsHttpExporter(extra_process_spans=True)
81
+ )
80
82
 
81
83
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
82
84
 
@@ -13,8 +13,11 @@ from uipath._cli._runtime._contracts import (
13
13
  )
14
14
  from uipath._cli.middlewares import MiddlewareResult
15
15
  from uipath._events._events import UiPathAgentStateEvent
16
+ from uipath.tracing import JsonLinesFileExporter, LlmOpsHttpExporter
16
17
 
17
- from .._tracing import LangChainExporter, _instrument_traceable_attributes
18
+ from .._tracing import (
19
+ _instrument_traceable_attributes,
20
+ )
18
21
  from ._runtime._exception import LangGraphRuntimeError
19
22
  from ._runtime._runtime import ( # type: ignore[attr-defined]
20
23
  LangGraphRuntimeContext,
@@ -24,7 +27,11 @@ from ._utils._graph import LangGraphConfig
24
27
 
25
28
 
26
29
  def langgraph_run_middleware(
27
- entrypoint: Optional[str], input: Optional[str], resume: bool, **kwargs
30
+ entrypoint: Optional[str],
31
+ input: Optional[str],
32
+ resume: bool,
33
+ trace_file: Optional[str] = None,
34
+ **kwargs,
28
35
  ) -> MiddlewareResult:
29
36
  """Middleware to handle LangGraph execution"""
30
37
  config = LangGraphConfig()
@@ -61,8 +68,13 @@ def langgraph_run_middleware(
61
68
 
62
69
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
63
70
 
71
+ if trace_file:
72
+ runtime_factory.add_span_exporter(JsonLinesFileExporter(trace_file))
73
+
64
74
  if context.job_id:
65
- runtime_factory.add_span_exporter(LangChainExporter())
75
+ runtime_factory.add_span_exporter(
76
+ LlmOpsHttpExporter(extra_process_spans=True)
77
+ )
66
78
  await runtime_factory.execute(context)
67
79
  else:
68
80
  debug_bridge: UiPathDebugBridge = ConsoleDebugBridge()
@@ -0,0 +1,5 @@
1
+ from ._instrument_traceable import _instrument_traceable_attributes
2
+
3
+ __all__ = [
4
+ "_instrument_traceable_attributes",
5
+ ]
@@ -20,7 +20,10 @@ from tenacity import (
20
20
  from uipath._cli._runtime._contracts import UiPathErrorCategory, UiPathRuntimeError
21
21
  from uipath._utils._ssl_context import get_httpx_client_kwargs
22
22
 
23
- from uipath_langchain._cli._runtime._exception import LangGraphRuntimeError
23
+ from uipath_langchain._cli._runtime._exception import (
24
+ LangGraphErrorCode,
25
+ LangGraphRuntimeError,
26
+ )
24
27
  from uipath_langchain._utils._settings import (
25
28
  UiPathClientFactorySettings,
26
29
  UiPathClientSettings,
@@ -371,7 +374,7 @@ class UiPathRequestMixin(BaseModel):
371
374
  title = body.get("title", "").lower()
372
375
  if title == "license not available":
373
376
  raise LangGraphRuntimeError(
374
- code="LICENSE_NOT_AVAILABLE",
377
+ code=LangGraphErrorCode.LICENSE_NOT_AVAILABLE,
375
378
  title=body.get("title", "License Not Available"),
376
379
  detail=body.get(
377
380
  "detail", "License not available for this service"
@@ -0,0 +1,12 @@
1
+ """UiPath ReAct Agent implementation"""
2
+
3
+ from .agent import create_agent
4
+ from .state import AgentGraphNode, AgentGraphState
5
+ from .utils import resolve_output_model
6
+
7
+ __all__ = [
8
+ "create_agent",
9
+ "AgentGraphState",
10
+ "AgentGraphNode",
11
+ "resolve_output_model",
12
+ ]
@@ -0,0 +1,76 @@
1
+ import os
2
+ from typing import Sequence, Type
3
+
4
+ from langchain_core.language_models import BaseChatModel
5
+ from langchain_core.messages import HumanMessage, SystemMessage
6
+ from langchain_core.tools import BaseTool
7
+ from langgraph.constants import END, START
8
+ from langgraph.graph import StateGraph
9
+ from pydantic import BaseModel
10
+
11
+ from ..tools import create_tool_node
12
+ from .init_node import (
13
+ create_init_node,
14
+ )
15
+ from .llm_node import (
16
+ create_llm_node,
17
+ )
18
+ from .router import (
19
+ route_agent,
20
+ )
21
+ from .state import AgentGraphNode, AgentGraphState
22
+ from .terminate_node import (
23
+ create_terminate_node,
24
+ )
25
+ from .tools import create_flow_control_tools
26
+
27
+
28
+ def create_agent(
29
+ model: BaseChatModel,
30
+ tools: Sequence[BaseTool],
31
+ messages: Sequence[SystemMessage | HumanMessage],
32
+ *,
33
+ state_schema: Type[AgentGraphState] = AgentGraphState,
34
+ response_format: type[BaseModel] | None = None,
35
+ recursion_limit: int = 50,
36
+ ) -> StateGraph[AgentGraphState]:
37
+ """Build agent graph with INIT -> AGENT <-> TOOLS loop, terminated by control flow tools.
38
+
39
+ Control flow tools (end_execution, raise_error) are auto-injected alongside regular tools.
40
+ """
41
+ os.environ["LANGCHAIN_RECURSION_LIMIT"] = str(recursion_limit)
42
+
43
+ agent_tools = list(tools)
44
+ flow_control_tools: list[BaseTool] = create_flow_control_tools(response_format)
45
+ llm_tools: list[BaseTool] = [*agent_tools, *flow_control_tools]
46
+
47
+ init_node = create_init_node(messages)
48
+ agent_node = create_llm_node(model, llm_tools)
49
+ tool_nodes = create_tool_node(agent_tools)
50
+ terminate_node = create_terminate_node(response_format)
51
+
52
+ builder: StateGraph[AgentGraphState] = StateGraph(state_schema)
53
+ builder.add_node(AgentGraphNode.INIT, init_node)
54
+ builder.add_node(AgentGraphNode.AGENT, agent_node)
55
+
56
+ for tool_name, tool_node in tool_nodes.items():
57
+ builder.add_node(tool_name, tool_node)
58
+
59
+ builder.add_node(AgentGraphNode.TERMINATE, terminate_node)
60
+
61
+ builder.add_edge(START, AgentGraphNode.INIT)
62
+ builder.add_edge(AgentGraphNode.INIT, AgentGraphNode.AGENT)
63
+
64
+ tool_node_names = list(tool_nodes.keys())
65
+ builder.add_conditional_edges(
66
+ AgentGraphNode.AGENT,
67
+ route_agent,
68
+ [AgentGraphNode.AGENT, *tool_node_names, AgentGraphNode.TERMINATE],
69
+ )
70
+
71
+ for tool_name in tool_node_names:
72
+ builder.add_edge(tool_name, AgentGraphNode.AGENT)
73
+
74
+ builder.add_edge(AgentGraphNode.TERMINATE, END)
75
+
76
+ return builder
@@ -0,0 +1,2 @@
1
+ # Agent routing configuration
2
+ MAX_SUCCESSIVE_COMPLETIONS = 1
@@ -0,0 +1,11 @@
1
+ """Exceptions for the basic agent loop."""
2
+
3
+ from uipath._cli._runtime._contracts import UiPathRuntimeError
4
+
5
+
6
+ class AgentNodeRoutingException(Exception):
7
+ pass
8
+
9
+
10
+ class AgentTerminationException(UiPathRuntimeError):
11
+ pass
@@ -0,0 +1,16 @@
1
+ """State initialization node for the ReAct Agent graph."""
2
+
3
+ from typing import Sequence
4
+
5
+ from langchain_core.messages import HumanMessage, SystemMessage
6
+
7
+ from .state import AgentGraphState
8
+
9
+
10
+ def create_init_node(
11
+ messages: Sequence[SystemMessage | HumanMessage],
12
+ ):
13
+ def graph_state_init(_: AgentGraphState):
14
+ return {"messages": list(messages)}
15
+
16
+ return graph_state_init
@@ -0,0 +1,44 @@
1
+ """LLM node implementation for LangGraph."""
2
+
3
+ from typing import Sequence
4
+
5
+ from langchain_core.language_models import BaseChatModel
6
+ from langchain_core.messages import AIMessage, AnyMessage
7
+ from langchain_core.tools import BaseTool
8
+
9
+ from .constants import MAX_SUCCESSIVE_COMPLETIONS
10
+ from .state import AgentGraphState
11
+ from .utils import count_successive_completions
12
+
13
+
14
+ def create_llm_node(
15
+ model: BaseChatModel,
16
+ tools: Sequence[BaseTool] | None = None,
17
+ ):
18
+ """Invoke LLM with tools and dynamically control tool_choice based on successive completions.
19
+
20
+ When successive completions reach the limit, tool_choice is set to "required" to force
21
+ the LLM to use a tool and prevent infinite reasoning loops.
22
+ """
23
+ bindable_tools = list(tools) if tools else []
24
+ base_llm = model.bind_tools(bindable_tools) if bindable_tools else model
25
+
26
+ async def llm_node(state: AgentGraphState):
27
+ messages: list[AnyMessage] = state["messages"]
28
+
29
+ successive_completions = count_successive_completions(messages)
30
+
31
+ if successive_completions >= MAX_SUCCESSIVE_COMPLETIONS and bindable_tools:
32
+ llm = base_llm.bind(tool_choice="required")
33
+ else:
34
+ llm = base_llm
35
+
36
+ response = await llm.ainvoke(messages)
37
+ if not isinstance(response, AIMessage):
38
+ raise TypeError(
39
+ f"LLM returned {type(response).__name__} instead of AIMessage"
40
+ )
41
+
42
+ return {"messages": [response]}
43
+
44
+ return llm_node