uipath-langchain 0.0.89__tar.gz → 0.0.90__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 (144) hide show
  1. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/ci.yml +3 -0
  2. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/commitlint.yml +1 -3
  3. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/PKG-INFO +2 -2
  4. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/pyproject.toml +2 -2
  5. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_input.py +7 -5
  6. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_output.py +31 -2
  7. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_runtime.py +8 -0
  8. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/uv.lock +5 -6
  9. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/.env.example +0 -4
  10. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/README.md +0 -64
  11. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/agent.mermaid +0 -22
  12. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/langgraph.json +0 -9
  13. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/main.py +0 -101
  14. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/mcps/estate_mcp.py +0 -388
  15. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/mcps/travel_mcp.py +0 -356
  16. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/pyproject.toml +0 -20
  17. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/uipath.json +0 -37
  18. uipath_langchain-0.0.89/samples/travel-planner-local-mcp/uv.lock +0 -2256
  19. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.cursorrules +0 -0
  20. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.editorconfig +0 -0
  21. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.gitattributes +0 -0
  22. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/build.yml +0 -0
  23. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/cd.yml +0 -0
  24. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/lint.yml +0 -0
  25. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/test.yml +0 -0
  26. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.gitignore +0 -0
  27. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.pre-commit-config.yaml +0 -0
  28. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.python-version +0 -0
  29. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.vscode/extensions.json +0 -0
  30. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.vscode/settings.json +0 -0
  31. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/CONTRIBUTING.md +0 -0
  32. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/LICENSE +0 -0
  33. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/README.md +0 -0
  34. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/chat_models.md +0 -0
  35. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/context_grounding_chain.md +0 -0
  36. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/context_grounding_retriever.md +0 -0
  37. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/interrupt_models.md +0 -0
  38. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/coder-agent-package-overview.png +0 -0
  39. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/coder-agent-process-configuration.png +0 -0
  40. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/planner-agent-package-overview.png +0 -0
  41. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/planner-agent-process-configuration.png +0 -0
  42. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/researcher-agent-package-overview.png +0 -0
  43. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/researcher-agent-process-configuration.png +0 -0
  44. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/.env.example +0 -0
  45. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/agent.mermaid +0 -0
  46. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/graph.py +0 -0
  47. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/langgraph.json +0 -0
  48. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/pyproject.toml +0 -0
  49. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/uipath.json +0 -0
  50. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/uv.lock +0 -0
  51. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/database.py +0 -0
  52. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/main.py +0 -0
  53. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/models.py +0 -0
  54. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/pyproject.toml +0 -0
  55. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/schemas.py +0 -0
  56. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/templates/index.html +0 -0
  57. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/uv.lock +0 -0
  58. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  59. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  60. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  61. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  62. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  63. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  64. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  65. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  66. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  67. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  68. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  69. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  70. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  71. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  72. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  73. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  74. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  75. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  76. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  77. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  78. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/.env.example +0 -0
  79. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/README.md +0 -0
  80. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/main.py +0 -0
  81. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/pyproject.toml +0 -0
  82. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/uv.lock +0 -0
  83. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/.env.example +0 -0
  84. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/README.md +0 -0
  85. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/agent.mermaid +0 -0
  86. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/langgraph.json +0 -0
  87. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/pyproject.toml +0 -0
  88. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  89. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  90. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  91. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/uipath.json +0 -0
  92. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/uv.lock +0 -0
  93. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/.env.example +0 -0
  94. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/README.md +0 -0
  95. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/agent.mermaid +0 -0
  96. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/langgraph.json +0 -0
  97. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/main.py +0 -0
  98. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/pyproject.toml +0 -0
  99. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/uipath.json +0 -0
  100. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/uv.lock +0 -0
  101. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/.env.example +0 -0
  102. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/README.md +0 -0
  103. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/agent.mermaid +0 -0
  104. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  105. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/langgraph.json +0 -0
  106. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/main.py +0 -0
  107. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/pyproject.toml +0 -0
  108. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/uipath.json +0 -0
  109. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/uv.lock +0 -0
  110. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/__init__.py +0 -0
  111. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/__init__.py +0 -0
  112. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  113. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_escalation.py +0 -0
  114. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  115. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  116. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/cli_init.py +0 -0
  117. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/cli_run.py +0 -0
  118. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/__init__.py +0 -0
  119. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  120. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_settings.py +0 -0
  121. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  122. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/__init__.py +0 -0
  123. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/models.py +0 -0
  124. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/utils/__init__.py +0 -0
  125. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/utils/_chat_types.py +0 -0
  126. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/embeddings/__init__.py +0 -0
  127. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  128. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/middlewares.py +0 -0
  129. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/retrievers/__init__.py +0 -0
  130. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  131. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/AsyncUiPathTracer.py +0 -0
  132. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/UiPathTracer.py +0 -0
  133. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/__init__.py +0 -0
  134. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_events.py +0 -0
  135. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_instrument_traceable.py +0 -0
  136. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_utils.py +0 -0
  137. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/__init__.py +0 -0
  138. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_request_mixin.py +0 -0
  139. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_settings.py +0 -0
  140. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_sleep_policy.py +0 -0
  141. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  142. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/conftest.py +0 -0
  143. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/test_dummy.py +0 -0
  144. {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/test_langchain_client.py +0 -0
@@ -11,6 +11,9 @@ on:
11
11
 
12
12
 
13
13
  jobs:
14
+ commit-lint:
15
+ if: ${{ github.event_name == 'pull_request' }}
16
+ uses: ./.github/workflows/commitlint.yml
14
17
  lint:
15
18
  uses: ./.github/workflows/lint.yml
16
19
 
@@ -1,9 +1,7 @@
1
1
  name: Commit Lint
2
2
 
3
3
  on:
4
- pull_request:
5
- branches:
6
- - main
4
+ workflow_call:
7
5
 
8
6
  jobs:
9
7
  commit-lint:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.89
3
+ Version: 0.0.90
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
@@ -25,7 +25,7 @@ Requires-Dist: pydantic-settings>=2.6.0
25
25
  Requires-Dist: python-dotenv>=1.0.1
26
26
  Requires-Dist: requests>=2.23.3
27
27
  Requires-Dist: types-requests>=2.32.0.20241016
28
- Requires-Dist: uipath<2.1.0,>=2.0.7
28
+ Requires-Dist: uipath<2.1.0,>=2.0.9
29
29
  Provides-Extra: langchain
30
30
  Description-Content-Type: text/markdown
31
31
 
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.0.89"
3
+ version = "0.0.90"
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.0.7, <2.1.0",
8
+ "uipath>=2.0.9, <2.1.0",
9
9
  "langgraph>=0.2.70",
10
10
  "langchain-core>=0.3.34",
11
11
  "langgraph-checkpoint-sqlite>=2.0.3",
@@ -58,10 +58,12 @@ class LangGraphInputProcessor:
58
58
  if not trigger:
59
59
  return Command(resume=self.context.input_json)
60
60
 
61
- type, key = trigger
61
+ type, key, folder_path, folder_key, payload = trigger
62
62
  logger.debug(f"ResumeTrigger: {type} {key}")
63
63
  if type == UiPathResumeTriggerType.ACTION.value and key:
64
- action = self.uipath.actions.retrieve(key)
64
+ action = await self.uipath.actions.retrieve_async(
65
+ key, app_folder_key=folder_key, app_folder_path=folder_path
66
+ )
65
67
  logger.debug(f"Action: {action}")
66
68
  if action.data is None:
67
69
  return Command(resume={})
@@ -95,7 +97,7 @@ class LangGraphInputProcessor:
95
97
  return Command(resume=try_convert_to_json_format(job.output_arguments))
96
98
  return Command(resume=self.context.input_json)
97
99
 
98
- async def _get_latest_trigger(self) -> Optional[tuple[str, str]]:
100
+ async def _get_latest_trigger(self) -> Optional[tuple[str, str, str, str, str]]:
99
101
  """Fetch the most recent trigger from the database."""
100
102
  if self.context.memory is None:
101
103
  return None
@@ -106,7 +108,7 @@ class LangGraphInputProcessor:
106
108
  self.context.memory.conn.cursor() as cur,
107
109
  ):
108
110
  await cur.execute(f"""
109
- SELECT type, key
111
+ SELECT type, key, folder_path, folder_key, payload
110
112
  FROM {self.context.resume_triggers_table}
111
113
  ORDER BY timestamp DESC
112
114
  LIMIT 1
@@ -114,7 +116,7 @@ class LangGraphInputProcessor:
114
116
  result = await cur.fetchone()
115
117
  if result is None:
116
118
  return None
117
- return cast(tuple[str, str], tuple(result))
119
+ return cast(tuple[str, str, str, str, str], tuple(result))
118
120
  except Exception as e:
119
121
  raise LangGraphRuntimeError(
120
122
  "DB_QUERY_FAILED",
@@ -232,6 +232,9 @@ class LangGraphOutputProcessor:
232
232
  id INTEGER PRIMARY KEY AUTOINCREMENT,
233
233
  type TEXT NOT NULL,
234
234
  key TEXT,
235
+ folder_key TEXT,
236
+ folder_path TEXT,
237
+ payload TEXT,
235
238
  timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'utc'))
236
239
  )
237
240
  """)
@@ -280,6 +283,12 @@ class LangGraphOutputProcessor:
280
283
  app_name=self.interrupt_value.app_name
281
284
  if self.interrupt_value.app_name
282
285
  else "",
286
+ app_folder_path=self.interrupt_value.app_folder_path
287
+ if self.interrupt_value.app_folder_path
288
+ else "",
289
+ app_folder_key=self.interrupt_value.app_folder_key
290
+ if self.interrupt_value.app_folder_key
291
+ else "",
283
292
  app_key=self.interrupt_value.app_key
284
293
  if self.interrupt_value.app_key
285
294
  else "",
@@ -295,11 +304,25 @@ class LangGraphOutputProcessor:
295
304
  self._resume_trigger = UiPathResumeTrigger(
296
305
  trigger_type=UiPathResumeTriggerType.ACTION,
297
306
  item_key=action.key,
307
+ payload=self.interrupt_value.model_dump_json(),
308
+ folder_path=self.interrupt_value.app_folder_path
309
+ if self.interrupt_value.app_folder_path
310
+ else None,
311
+ folder_key=self.interrupt_value.app_folder_key
312
+ if self.interrupt_value.app_folder_key
313
+ else None,
298
314
  )
299
315
  elif isinstance(self.interrupt_value, WaitAction):
300
316
  self._resume_trigger = UiPathResumeTrigger(
301
317
  triggerType=UiPathResumeTriggerType.ACTION,
302
318
  itemKey=self.interrupt_value.action.key,
319
+ payload=self.interrupt_value.model_dump_json(),
320
+ folder_path=self.interrupt_value.app_folder_path
321
+ if self.interrupt_value.app_folder_path
322
+ else None,
323
+ folder_key=self.interrupt_value.app_folder_key
324
+ if self.interrupt_value.app_folder_key
325
+ else None,
303
326
  )
304
327
 
305
328
  except Exception as e:
@@ -324,8 +347,14 @@ class LangGraphOutputProcessor:
324
347
  try:
325
348
  logger.debug(f"ResumeTrigger: {trigger_type} {trigger_key}")
326
349
  await cur.execute(
327
- f"INSERT INTO {self.context.resume_triggers_table} (type, key) VALUES (?, ?)",
328
- (trigger_type, trigger_key),
350
+ f"INSERT INTO {self.context.resume_triggers_table} (type, key, payload, folder_path, folder_key) VALUES (?, ?, ?, ?, ?)",
351
+ (
352
+ trigger_type,
353
+ trigger_key,
354
+ self.resume_trigger.payload,
355
+ self.resume_trigger.folder_path,
356
+ self.resume_trigger.folder_key,
357
+ ),
329
358
  )
330
359
  await self.context.memory.conn.commit()
331
360
  except Exception as e:
@@ -94,6 +94,14 @@ class LangGraphRuntime(UiPathBaseRuntime):
94
94
  "callbacks": callbacks,
95
95
  }
96
96
 
97
+ recursion_limit = os.environ.get("LANGCHAIN_RECURSION_LIMIT", None)
98
+ max_concurrency = os.environ.get("LANGCHAIN_MAX_CONCURRENCY", None)
99
+
100
+ if recursion_limit is not None:
101
+ graph_config["recursion_limit"] = int(recursion_limit)
102
+ if max_concurrency is not None:
103
+ graph_config["max_concurrency"] = int(max_concurrency)
104
+
97
105
  # Stream the output at debug time
98
106
  if self.context.job_id is None:
99
107
  # Get final chunk while streaming
@@ -1,5 +1,4 @@
1
1
  version = 1
2
- revision = 1
3
2
  requires-python = ">=3.10"
4
3
  resolution-markers = [
5
4
  "python_full_version >= '3.12.4'",
@@ -1899,7 +1898,7 @@ wheels = [
1899
1898
 
1900
1899
  [[package]]
1901
1900
  name = "uipath"
1902
- version = "2.0.8"
1901
+ version = "2.0.9"
1903
1902
  source = { registry = "https://pypi.org/simple" }
1904
1903
  dependencies = [
1905
1904
  { name = "click" },
@@ -1912,14 +1911,14 @@ dependencies = [
1912
1911
  { name = "tomli" },
1913
1912
  { name = "types-requests" },
1914
1913
  ]
1915
- sdist = { url = "https://files.pythonhosted.org/packages/ae/44/d1dbb5a624731a157763a3f1dea2cd95cd0ffb2f7501cef72a35e7f018ac/uipath-2.0.8.tar.gz", hash = "sha256:1a312cd22673e307e60388133c78ca4ff91bb02f56083b758b7ae8c74d858d3f", size = 210033 }
1914
+ sdist = { url = "https://files.pythonhosted.org/packages/ca/b2/4be1b45c55be25428fd4b229cf9554a46f6ecd2abc076c6cd7bed9903137/uipath-2.0.9.tar.gz", hash = "sha256:5de6678bd3dd4cc4e97f0e5635a8c7f41a9736b1a7a40ebd3888753764f85be3", size = 210455 }
1916
1915
  wheels = [
1917
- { url = "https://files.pythonhosted.org/packages/94/16/09509a097d3e471b836afe9d26476543b4e930d76b3e39345f5995892d46/uipath-2.0.8-py3-none-any.whl", hash = "sha256:b4bbd2e2501bc55d911978b10e91dfeb9fb50005fe0bd33ca855a0d04d1835c8", size = 86232 },
1916
+ { url = "https://files.pythonhosted.org/packages/d7/74/f34b9b7db516e0c2e569618bd693a116f37e7b5f5bdd73e3db3cdcdc34c7/uipath-2.0.9-py3-none-any.whl", hash = "sha256:37212e2494c300aef08a593f4dcbbb1234dc7c26d2d665c2fe671dcd486ee286", size = 86475 },
1918
1917
  ]
1919
1918
 
1920
1919
  [[package]]
1921
1920
  name = "uipath-langchain"
1922
- version = "0.0.89"
1921
+ version = "0.0.90"
1923
1922
  source = { editable = "." }
1924
1923
  dependencies = [
1925
1924
  { name = "httpx" },
@@ -1962,7 +1961,7 @@ requires-dist = [
1962
1961
  { name = "python-dotenv", specifier = ">=1.0.1" },
1963
1962
  { name = "requests", specifier = ">=2.23.3" },
1964
1963
  { name = "types-requests", specifier = ">=2.32.0.20241016" },
1965
- { name = "uipath", specifier = ">=2.0.7,<2.1.0" },
1964
+ { name = "uipath", specifier = ">=2.0.9,<2.1.0" },
1966
1965
  { name = "uipath-langchain", marker = "extra == 'langchain'", specifier = ">=0.0.2" },
1967
1966
  ]
1968
1967
  provides-extras = ["langchain"]
@@ -1,4 +0,0 @@
1
- UIPATH_URL=https://alpha.uipath.com/ada/byoa
2
- UIPATH_ACCESS_TOKEN=xxx
3
- UIPATH_TENANT_ID=6961a069-3392-40ca-bf5d-276f4e54c8ff
4
- UIPATH_ORGANIZATION_ID=b7006b1c-11c3-4a80-802e-fee0ebf9c360
@@ -1,64 +0,0 @@
1
- # Travel planner agent with stdio mcp
2
-
3
- Use LangGrahp with UiPath LLMs to automatically create a travel plan.
4
- Shows the usage of stdio mcp.
5
-
6
- ## Debug
7
-
8
- 1. Clone the repository:
9
- ```bash
10
- git clone
11
- cd samples\travel-planner-local-mcp
12
- ```
13
-
14
- 2. Install dependencies:
15
- ```bash
16
- pip install uv
17
- uv venv -p 3.11 .venv
18
- .venv\Scripts\activate
19
- uv sync
20
- ```
21
-
22
- 3. Init uipath
23
- ```
24
- uipath init
25
- uipath auth
26
- ```
27
-
28
- 4. Create a `.env` file in the project root with the following configuration:
29
- ```env
30
- UIPATH_URL=https://alpha.uipath.com/ada/byoa
31
- UIPATH_ACCESS_TOKEN=xxx
32
- UIPATH_TENANT_ID=6961a069-3392-40ca-bf5d-276f4e54c8ff
33
- UIPATH_ORGANIZATION_ID=b7006b1c-11c3-4a80-802e-fee0ebf9c360
34
- ```
35
-
36
- ```bash
37
- uipath run <entrypoint> <input> [--resume]
38
- ```
39
-
40
- ### Run
41
-
42
- To classify a ticket, run the script using UiPath CLI:
43
-
44
- ```bash
45
- uipath run agent '{"message": "Help me plan a ski vacation on a hard track." }'
46
- ```
47
-
48
- ### Input JSON Format
49
-
50
- The input ticket should be in the following format:
51
- ```json
52
- {
53
- "message": "Plan a trip to...",
54
- }
55
- ```
56
-
57
- ### Output Format
58
-
59
- The script outputs JSON with a markdown summary:
60
- ```json
61
- {
62
- "summary": "# Final Report\n\n## Ski Vacation Options\n\n### 1. Aspen Snowmass\n- **Location:** Colorado, USA\n- **Elevation:** 12,510 ft\n- **Trails:** 362\n- **Best For:** Intermediate to advanced skiers\n- **Season:** November to April\n- **Highlights:** Aspen Snowmass features four mountains with varied terrain, luxury amenities, and a vibrant après-ski scene.\n- **Weather Forecast:** Currently unavailable, but typically sunny and around 75°F based on seasonal averages.\n\n### 2. Vail\n- **Location:** Colorado, USA\n- **Elevation:** 11,570 ft\n- **Trails:** 195\n- **Best For:** Intermediate to advanced skiers\n- **Season:** November to April\n- **Highlights:** Vail is known for its Back Bowls, European-style village, and extensive groomed terrain.\n- **Current Weather:** 25°F, Light Snow with 70% humidity and 8 mph winds. Current snow depth is 30 inches.\n\nBoth Aspen Snowmass and Vail offer excellent facilities and challenging tracks for advanced skiers. You can enjoy a mix of thrilling ski experiences and luxurious amenities. Vail currently has favorable skiing conditions with fresh snow, making it an attractive option for your ski vacation."
63
- }
64
- ```
@@ -1,22 +0,0 @@
1
- ---
2
- config:
3
- flowchart:
4
- curve: linear
5
- ---
6
- graph TD;
7
- __start__([<p>__start__</p>]):::first
8
- init(init)
9
- agent(agent)
10
- tools(tools)
11
- output_summary(output_summary)
12
- __end__([<p>__end__</p>]):::last
13
- __start__ --> init;
14
- init --> agent;
15
- output_summary --> __end__;
16
- tools --> agent;
17
- agent -.-> tools;
18
- agent -.-> output_summary;
19
- agent -.-> agent;
20
- classDef default fill:#f2f0ff,line-height:1.2
21
- classDef first fill-opacity:0
22
- classDef last fill:#bfb6fc
@@ -1,9 +0,0 @@
1
- {
2
- "dependencies": [
3
- "."
4
- ],
5
- "graphs": {
6
- "agent": "./main.py:make_graph"
7
- },
8
- "env": ".env"
9
- }
@@ -1,101 +0,0 @@
1
- import os
2
- import sys
3
- from contextlib import asynccontextmanager
4
-
5
- from langchain_core.messages import HumanMessage, SystemMessage
6
- from langchain_mcp_adapters.client import MultiServerMCPClient
7
- from langgraph.graph import END, START, MessagesState, StateGraph
8
- from langgraph.prebuilt import ToolNode
9
- from pydantic import BaseModel
10
- from uipath_langchain.chat.models import (
11
- UiPathNormalizedChatModel,
12
- )
13
-
14
-
15
- class GraphInput(BaseModel):
16
- message: str
17
-
18
-
19
- class GraphOutput(BaseModel):
20
- summary: str
21
-
22
-
23
- def get_file_path(filename):
24
- """Get absolute path to file in current directory."""
25
- return os.path.abspath(os.path.join(os.getcwd(), filename))
26
-
27
-
28
- mcp_config = {
29
- "travel_mcp": {
30
- "command": sys.executable,
31
- "args": [get_file_path("./mcps/travel_mcp.py")],
32
- "transport": "stdio",
33
- }
34
- }
35
-
36
-
37
- @asynccontextmanager
38
- async def make_graph():
39
- async with MultiServerMCPClient(mcp_config) as client:
40
- tools = client.get_tools()
41
- tool_node = ToolNode(tools)
42
-
43
- def init(state: GraphInput):
44
- return {
45
- "messages": [
46
- SystemMessage(
47
- content="You are a helpful travel planner assistant!. When you are done please write your report in markdown as a single message and begin with `# Final Report`"
48
- ),
49
- HumanMessage(content=state.message),
50
- ]
51
- }
52
-
53
- def should_continue(state: MessagesState):
54
- messages = state["messages"]
55
- last_message = messages[-1]
56
-
57
- # Check if the last message contains a final report indicator
58
- if hasattr(last_message, "content") and isinstance(
59
- last_message.content, str
60
- ):
61
- if "# final report" in last_message.content.lower():
62
- return "output_summary"
63
-
64
- if last_message.tool_calls:
65
- return "tools"
66
-
67
- return "agent"
68
-
69
- def output_summary(state: MessagesState):
70
- messages = state["messages"]
71
- last_message = messages[-1]
72
- return {"summary": last_message.content}
73
-
74
- async def call_model(state: MessagesState):
75
- messages = state["messages"]
76
-
77
- agent = UiPathNormalizedChatModel().bind_tools(tools)
78
- response = agent.invoke(messages)
79
-
80
- return {"messages": [response]}
81
-
82
- workflow = StateGraph(MessagesState, input=GraphInput, output=GraphOutput)
83
- # workflow = StateGraph(MessagesState)
84
-
85
- # Define the two nodes we will cycle between
86
- workflow.add_node("init", init)
87
- workflow.add_node("agent", call_model)
88
- workflow.add_node("tools", tool_node)
89
- workflow.add_node("output_summary", output_summary)
90
-
91
- workflow.add_edge(START, "init")
92
- workflow.add_edge("init", "agent")
93
- workflow.add_conditional_edges(
94
- "agent", should_continue, ["tools", "output_summary", "agent"]
95
- )
96
- workflow.add_edge("tools", "agent")
97
- workflow.add_edge("output_summary", END)
98
-
99
- graph = workflow.compile()
100
-
101
- yield graph