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.
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/ci.yml +3 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/commitlint.yml +1 -3
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/PKG-INFO +2 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/pyproject.toml +2 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_input.py +7 -5
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_output.py +31 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_runtime.py +8 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/uv.lock +5 -6
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/.env.example +0 -4
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/README.md +0 -64
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/agent.mermaid +0 -22
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/langgraph.json +0 -9
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/main.py +0 -101
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/mcps/estate_mcp.py +0 -388
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/mcps/travel_mcp.py +0 -356
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/pyproject.toml +0 -20
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/uipath.json +0 -37
- uipath_langchain-0.0.89/samples/travel-planner-local-mcp/uv.lock +0 -2256
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.cursorrules +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.editorconfig +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.gitattributes +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/build.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.gitignore +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.python-version +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/.vscode/settings.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/LICENSE +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/chat_models.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/context_grounding_chain.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/context_grounding_retriever.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/interrupt_models.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/docs/sample_images/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {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
- {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
- {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
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/agent.mermaid +0 -0
- {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
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/samples/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_escalation.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/cli_init.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/cli_run.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/models.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/utils/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/chat/utils/_chat_types.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/AsyncUiPathTracer.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/UiPathTracer.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_events.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_instrument_traceable.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/tracers/_utils.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_settings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/conftest.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/test_dummy.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/tests/test_langchain_client.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uipath-langchain
|
|
3
|
-
Version: 0.0.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_input.py
RENAMED
|
@@ -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.
|
|
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",
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_output.py
RENAMED
|
@@ -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
|
-
(
|
|
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:
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.90}/src/uipath_langchain/_cli/_runtime/_runtime.py
RENAMED
|
@@ -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.
|
|
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/
|
|
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/
|
|
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.
|
|
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.
|
|
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,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,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
|