uipath-langchain 0.0.89__tar.gz → 0.0.91__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.91}/.github/workflows/ci.yml +3 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.github/workflows/commitlint.yml +1 -3
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/PKG-INFO +2 -2
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/activate-apps.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/resume-condition.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/run-agent.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/start-job.png +0 -0
- uipath_langchain-0.0.91/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/pyproject.toml +2 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/README.md +6 -6
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/.env.example +1 -2
- uipath_langchain-0.0.91/samples/ticket-classification/README.md +206 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/main.py +4 -23
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/pyproject.toml +1 -1
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/uipath.json +2 -19
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/uv.lock +8 -8
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_input.py +7 -5
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_output.py +31 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_runtime.py +10 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/__init__.py +2 -2
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/__init__.py +2 -2
- uipath_langchain-0.0.91/src/uipath_langchain/tracers/_instrument_traceable.py +406 -0
- uipath_langchain-0.0.91/tests/__init__.py +1 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/tests/test_langchain_client.py +90 -1
- uipath_langchain-0.0.91/tests/tracers/__init__.py +1 -0
- uipath_langchain-0.0.91/tests/tracers/test_instrument_traceable.py +206 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/uv.lock +153 -5
- uipath_langchain-0.0.89/samples/ticket-classification/README.md +0 -68
- 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/src/uipath_langchain/tracers/_instrument_traceable.py +0 -285
- uipath_langchain-0.0.89/tests/conftest.py +0 -95
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.cursorrules +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.editorconfig +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.gitattributes +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.github/workflows/build.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.gitignore +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.python-version +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/.vscode/settings.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/LICENSE +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/docs/chat_models.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/docs/context_grounding_chain.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/docs/context_grounding_retriever.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/docs/interrupt_models.md +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.89/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/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.91}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_escalation.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/cli_init.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/cli_run.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/models.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/utils/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/utils/_chat_types.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/AsyncUiPathTracer.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/UiPathTracer.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/_events.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/_utils.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/__init__.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_settings.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
- {uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/tests/test_dummy.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.91
|
|
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.13
|
|
29
29
|
Provides-Extra: langchain
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
uipath_langchain-0.0.91/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
uipath_langchain-0.0.91/docs/sample_images/ticket-classification/navigate-to-solution-folder.png
ADDED
|
Binary file
|
|
Binary file
|
uipath_langchain-0.0.91/docs/sample_images/ticket-classification/solution-destination-folder.png
ADDED
|
Binary file
|
|
Binary file
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "uipath-langchain"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.91"
|
|
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.13, <2.1.0",
|
|
9
9
|
"langgraph>=0.2.70",
|
|
10
10
|
"langchain-core>=0.3.34",
|
|
11
11
|
"langgraph-checkpoint-sqlite>=2.0.3",
|
|
@@ -208,16 +208,16 @@ uipath run coder '{"messages":[{"content":"Let me help you state the Pythagorean
|
|
|
208
208
|
|
|
209
209
|
6. **Create Agent Processes in Orchestrator**
|
|
210
210
|
- **Planner Agent**
|
|
211
|
-

|
|
212
|
-

|
|
211
|
+

|
|
212
|
+

|
|
213
213
|
|
|
214
214
|
- **Researcher Agent**
|
|
215
|
-

|
|
216
|
-

|
|
215
|
+

|
|
216
|
+

|
|
217
217
|
|
|
218
218
|
- **Coder Agent**
|
|
219
|
-

|
|
220
|
-

|
|
219
|
+

|
|
220
|
+

|
|
221
221
|
|
|
222
222
|
> **Note:** Ensure that the display names for the coder and researcher agent processes are *coder-agent* and *researcher-agent*,
|
|
223
223
|
and that all 3 agents are placed in the same folder.
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Support Ticket Classification System
|
|
2
|
+
|
|
3
|
+
Use LangGraph with Azure OpenAI to automatically classify support tickets into predefined categories with confidence scores. UiPath Action Center integration for human approval step.
|
|
4
|
+
|
|
5
|
+
## Debug
|
|
6
|
+
|
|
7
|
+
1. Clone the repository:
|
|
8
|
+
```bash
|
|
9
|
+
git clone
|
|
10
|
+
cd samples\ticket-classification
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2. Install dependencies:
|
|
14
|
+
```bash
|
|
15
|
+
pip install uv
|
|
16
|
+
uv venv -p 3.11 .venv
|
|
17
|
+
.venv\Scripts\activate
|
|
18
|
+
uv sync
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
3. Create a `.env` file in the project root with the following configuration:
|
|
22
|
+
```env
|
|
23
|
+
UIPATH_URL=https://alpha.uipath.com/ada/byoa
|
|
24
|
+
UIPATH_ACCESS_TOKEN=xxx
|
|
25
|
+
AZURE_OPENAI_API_KEY=xxx
|
|
26
|
+
AZURE_OPENAI_ENDPOINT=xxx
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
uipath run <entrypoint> <input> [--resume]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Run
|
|
34
|
+
|
|
35
|
+
To classify a ticket, run the script using UiPath CLI:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uipath run agent '{"message": "GET Assets API does not enforce proper permissions Assets.View", "ticket_id": "TICKET-2345"}'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Resume
|
|
42
|
+
|
|
43
|
+
To resume the graph with approval:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
uipath run agent true --resume
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Input Format
|
|
50
|
+
|
|
51
|
+
The input ticket should be in the following format:
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"message": "The ticket message or description",
|
|
55
|
+
"ticket_id": "Unique ticket identifier",
|
|
56
|
+
"assignee"[optional]: "username or email of the person assigned to handle escalations"
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Output Format
|
|
61
|
+
|
|
62
|
+
The script outputs JSON with the classification results:
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"label": "security",
|
|
66
|
+
"confidence": 0.9
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Deployment Guide
|
|
71
|
+
|
|
72
|
+
This guide walks you through deploying and running the ticket classification agent on the UiPath Platform.
|
|
73
|
+
|
|
74
|
+
### Prerequisites
|
|
75
|
+
- Access to UiPath Platform
|
|
76
|
+
- Python 3.11 or higher
|
|
77
|
+
- Git
|
|
78
|
+
|
|
79
|
+
### 1. Repository Setup
|
|
80
|
+
```bash
|
|
81
|
+
# Clone the repository
|
|
82
|
+
git clone https://github.com/UiPath/uipath-langchain-python.git
|
|
83
|
+
cd uipath-langchain-python/samples/ticket-classification
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 2. Action App Deployment
|
|
87
|
+
|
|
88
|
+
The Ticket Classification Agent utilizes HITL (Human In The Loop) technology, allowing the system to incorporate feedback directly from supervisory personnel. We'll leverage UiPath [Action Center](https://docs.uipath.com/action-center/automation-suite/2023.4/user-guide/introduction) for this functionality.
|
|
89
|
+
|
|
90
|
+
Follow these steps to deploy the pre-built application using [UiPath Solutions Management](https://docs.uipath.com/solutions-management/automation-cloud/latest/user-guide/solutions-management-overview):
|
|
91
|
+
|
|
92
|
+
1. **Upload Solution Package**
|
|
93
|
+
- Navigate to UiPath Solutions Management
|
|
94
|
+
- Drag and drop [generic-escalation-app-solution-1.0.0.zip](escalation_app_solution/generic-escalation-app-solution-1.0.0.zip) to the upload area
|
|
95
|
+
- Click the _Upload_ button
|
|
96
|
+
|
|
97
|
+

|
|
98
|
+
|
|
99
|
+
2. **Initiate Deployment**
|
|
100
|
+
- Wait for the package to be processed and ready for deployment
|
|
101
|
+
|
|
102
|
+

|
|
103
|
+
|
|
104
|
+
3. **Select Destination**
|
|
105
|
+
- Choose a destination folder or install as root folder under tenant
|
|
106
|
+
|
|
107
|
+

|
|
108
|
+
|
|
109
|
+
4. **Complete Configuration**
|
|
110
|
+
- Follow the solution configuration wizard prompts
|
|
111
|
+
|
|
112
|
+

|
|
113
|
+
|
|
114
|
+
5. **Activate the Apps**
|
|
115
|
+
- After deployment, activate the apps following the [UiPath documentation](https://docs.uipath.com/apps/automation-cloud/latest/user-guide/apps-in-solutions-management)
|
|
116
|
+
|
|
117
|
+

|
|
118
|
+

|
|
119
|
+
|
|
120
|
+
6. **Verify and Configure**
|
|
121
|
+
- Navigate to the solution folder to verify the escalation app creation
|
|
122
|
+
|
|
123
|
+

|
|
124
|
+
|
|
125
|
+
- Copy the folder path for configuration
|
|
126
|
+
|
|
127
|
+

|
|
128
|
+
|
|
129
|
+
- Update the `_PLACEHOLDER` string in `main.py` (line 148) with the copied folder path
|
|
130
|
+
|
|
131
|
+
### 3. Agent Setup and Publishing
|
|
132
|
+
|
|
133
|
+
1. **Set Up Python Environment**
|
|
134
|
+
```bash
|
|
135
|
+
# Install UV package manager
|
|
136
|
+
pip install uv
|
|
137
|
+
|
|
138
|
+
# Create and activate virtual environment
|
|
139
|
+
uv venv -p 3.11 .venv
|
|
140
|
+
|
|
141
|
+
# Windows
|
|
142
|
+
.venv\Scripts\activate
|
|
143
|
+
|
|
144
|
+
# Unix-like Systems
|
|
145
|
+
source .venv/bin/activate
|
|
146
|
+
|
|
147
|
+
# Install dependencies
|
|
148
|
+
uv sync
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
2. **UiPath Authentication**
|
|
152
|
+
```bash
|
|
153
|
+
uipath auth
|
|
154
|
+
```
|
|
155
|
+
After successful authentication in the browser, select the tenant for publishing the agent package:
|
|
156
|
+
```
|
|
157
|
+
Received log data
|
|
158
|
+
Received authentication information
|
|
159
|
+
Available tenants:
|
|
160
|
+
0: cosmin
|
|
161
|
+
1: DefaultTenant
|
|
162
|
+
2: Demo
|
|
163
|
+
3: lucian
|
|
164
|
+
4: Solutions
|
|
165
|
+
5: SolutionsTest
|
|
166
|
+
6: Test
|
|
167
|
+
7: TestRoles
|
|
168
|
+
Select tenant: 2
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
3. **Package and Publish**
|
|
172
|
+
```bash
|
|
173
|
+
# Create and publish the package
|
|
174
|
+
uipath pack
|
|
175
|
+
uipath publish
|
|
176
|
+
```
|
|
177
|
+
Select your preferred feed type when prompted:
|
|
178
|
+
```
|
|
179
|
+
Select feed type:
|
|
180
|
+
0: Tenant package feed
|
|
181
|
+
1: Personal workspace
|
|
182
|
+
Select feed: 1
|
|
183
|
+
```
|
|
184
|
+
Note: When publishing to personal workspace feed, the process will be auto-created for you.
|
|
185
|
+
|
|
186
|
+
### 4. Running and Monitoring the Agent
|
|
187
|
+
|
|
188
|
+
1. **Start the Agent**
|
|
189
|
+
- Navigate to your agent in the UiPath workspace
|
|
190
|
+
- Click "Run" to start a new job
|
|
191
|
+
|
|
192
|
+

|
|
193
|
+

|
|
194
|
+
|
|
195
|
+
2. **Monitor Progress**
|
|
196
|
+
- Track the agent's progress using the details side panel
|
|
197
|
+
|
|
198
|
+

|
|
199
|
+
|
|
200
|
+
3. **Handle Human-in-the-Loop Tasks**
|
|
201
|
+
- When a ticket is classified, a _Resume Condition_ tab will appear
|
|
202
|
+
- Use this link to navigate to UiPath Action Center for human intervention
|
|
203
|
+
|
|
204
|
+

|
|
205
|
+
|
|
206
|
+
For detailed information about UiPath Action Center and its features, refer to the [official documentation](https://docs.uipath.com/action-center/automation-suite/2024.10/user-guide/introduction).
|
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
from typing import Literal, Optional, List
|
|
4
4
|
|
|
5
5
|
from langchain_core.messages import HumanMessage, SystemMessage
|
|
6
|
-
from langchain_openai import
|
|
6
|
+
from langchain_openai import ChatOpenAI
|
|
7
7
|
from langchain_core.output_parsers import PydanticOutputParser
|
|
8
8
|
from langgraph.graph import START, END, StateGraph, MessagesState
|
|
9
9
|
from langgraph.types import interrupt, Command
|
|
@@ -70,21 +70,6 @@ def prepare_input(graph_input: GraphInput) -> GraphState:
|
|
|
70
70
|
human_approval=None,
|
|
71
71
|
)
|
|
72
72
|
|
|
73
|
-
def get_azure_openai_api_key() -> str:
|
|
74
|
-
"""Get Azure OpenAI API key from environment or UiPath."""
|
|
75
|
-
api_key = os.getenv("AZURE_OPENAI_API_KEY")
|
|
76
|
-
|
|
77
|
-
if not api_key:
|
|
78
|
-
try:
|
|
79
|
-
api_key = uipath.assets.retrieve_credential("AZURE_OPENAI_API_KEY")
|
|
80
|
-
if not api_key:
|
|
81
|
-
raise ValueError("No API key found in credentials")
|
|
82
|
-
except Exception as e:
|
|
83
|
-
logger.error(f"Failed to get API key: {str(e)}")
|
|
84
|
-
raise RuntimeError("Failed to get Azure OpenAI API key")
|
|
85
|
-
|
|
86
|
-
return api_key
|
|
87
|
-
|
|
88
73
|
def decide_next_node(state: GraphState) -> Literal["classify", "notify_team"]:
|
|
89
74
|
if state["human_approval"] is True:
|
|
90
75
|
return "notify_team"
|
|
@@ -93,12 +78,7 @@ def decide_next_node(state: GraphState) -> Literal["classify", "notify_team"]:
|
|
|
93
78
|
|
|
94
79
|
async def classify(state: GraphState) -> Command:
|
|
95
80
|
"""Classify the support ticket using LLM."""
|
|
96
|
-
llm =
|
|
97
|
-
azure_deployment="gpt-4o-mini",
|
|
98
|
-
api_key=get_azure_openai_api_key(),
|
|
99
|
-
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
|
|
100
|
-
api_version="2024-10-21"
|
|
101
|
-
)
|
|
81
|
+
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
|
|
102
82
|
|
|
103
83
|
if state.get("last_predicted_category", None):
|
|
104
84
|
predicted_category = state["last_predicted_category"]
|
|
@@ -133,7 +113,7 @@ async def wait_for_human(state: GraphState) -> Command:
|
|
|
133
113
|
ticket_message = state["messages"][1].content
|
|
134
114
|
label = state["label"]
|
|
135
115
|
confidence = state["confidence"]
|
|
136
|
-
action_data = interrupt(CreateAction(
|
|
116
|
+
action_data = interrupt(CreateAction(app_name="escalation_agent_app",
|
|
137
117
|
title="Action Required: Review classification",
|
|
138
118
|
data={
|
|
139
119
|
"AgentOutput": (
|
|
@@ -145,6 +125,7 @@ async def wait_for_human(state: GraphState) -> Command:
|
|
|
145
125
|
"AgentName": "ticket-classification "},
|
|
146
126
|
app_version=1,
|
|
147
127
|
assignee=state.get("assignee", None),
|
|
128
|
+
app_folder_path="Shared/escalation_app",
|
|
148
129
|
))
|
|
149
130
|
|
|
150
131
|
return Command(
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/samples/ticket-classification/uipath.json
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"entryPoints": [
|
|
3
3
|
{
|
|
4
4
|
"filePath": "agent",
|
|
5
|
-
"uniqueId": "
|
|
5
|
+
"uniqueId": "f5678e12-7aa8-4a4c-bf62-b98dad8d9145",
|
|
6
6
|
"type": "agent",
|
|
7
7
|
"input": {
|
|
8
8
|
"type": "object",
|
|
@@ -54,23 +54,6 @@
|
|
|
54
54
|
],
|
|
55
55
|
"bindings": {
|
|
56
56
|
"version": "2.0",
|
|
57
|
-
"resources": [
|
|
58
|
-
{
|
|
59
|
-
"resource": "asset",
|
|
60
|
-
"key": "AZURE_OPENAI_API_KEY",
|
|
61
|
-
"value": {
|
|
62
|
-
"name": {
|
|
63
|
-
"defaultValue": "AZURE_OPENAI_API_KEY",
|
|
64
|
-
"isExpression": false,
|
|
65
|
-
"displayName": "Name"
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"metadata": {
|
|
69
|
-
"ActivityName": "retrieve_credential",
|
|
70
|
-
"BindingsVersion": "2.1",
|
|
71
|
-
"DisplayLabel": "FullName"
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
]
|
|
57
|
+
"resources": []
|
|
75
58
|
}
|
|
76
59
|
}
|
|
@@ -1653,7 +1653,7 @@ wheels = [
|
|
|
1653
1653
|
|
|
1654
1654
|
[[package]]
|
|
1655
1655
|
name = "ticket-classification-agent"
|
|
1656
|
-
version = "0.0.
|
|
1656
|
+
version = "0.0.1"
|
|
1657
1657
|
source = { virtual = "." }
|
|
1658
1658
|
dependencies = [
|
|
1659
1659
|
{ name = "aiohttp" },
|
|
@@ -1679,7 +1679,7 @@ requires-dist = [
|
|
|
1679
1679
|
{ name = "pydantic", specifier = ">=2.10.6" },
|
|
1680
1680
|
{ name = "python-dotenv", specifier = ">=1.0.1" },
|
|
1681
1681
|
{ name = "typing-extensions", specifier = ">=4.12.2" },
|
|
1682
|
-
{ name = "uipath-langchain", specifier = "==0.0.
|
|
1682
|
+
{ name = "uipath-langchain", specifier = "==0.0.90" },
|
|
1683
1683
|
]
|
|
1684
1684
|
|
|
1685
1685
|
[[package]]
|
|
@@ -1826,7 +1826,7 @@ wheels = [
|
|
|
1826
1826
|
|
|
1827
1827
|
[[package]]
|
|
1828
1828
|
name = "uipath"
|
|
1829
|
-
version = "2.0.
|
|
1829
|
+
version = "2.0.9"
|
|
1830
1830
|
source = { registry = "https://pypi.org/simple" }
|
|
1831
1831
|
dependencies = [
|
|
1832
1832
|
{ name = "click" },
|
|
@@ -1839,14 +1839,14 @@ dependencies = [
|
|
|
1839
1839
|
{ name = "tomli" },
|
|
1840
1840
|
{ name = "types-requests" },
|
|
1841
1841
|
]
|
|
1842
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1842
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ca/b2/4be1b45c55be25428fd4b229cf9554a46f6ecd2abc076c6cd7bed9903137/uipath-2.0.9.tar.gz", hash = "sha256:5de6678bd3dd4cc4e97f0e5635a8c7f41a9736b1a7a40ebd3888753764f85be3", size = 210455 }
|
|
1843
1843
|
wheels = [
|
|
1844
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1844
|
+
{ url = "https://files.pythonhosted.org/packages/d7/74/f34b9b7db516e0c2e569618bd693a116f37e7b5f5bdd73e3db3cdcdc34c7/uipath-2.0.9-py3-none-any.whl", hash = "sha256:37212e2494c300aef08a593f4dcbbb1234dc7c26d2d665c2fe671dcd486ee286", size = 86475 },
|
|
1845
1845
|
]
|
|
1846
1846
|
|
|
1847
1847
|
[[package]]
|
|
1848
1848
|
name = "uipath-langchain"
|
|
1849
|
-
version = "0.0.
|
|
1849
|
+
version = "0.0.90"
|
|
1850
1850
|
source = { registry = "https://pypi.org/simple" }
|
|
1851
1851
|
dependencies = [
|
|
1852
1852
|
{ name = "httpx" },
|
|
@@ -1863,9 +1863,9 @@ dependencies = [
|
|
|
1863
1863
|
{ name = "types-requests" },
|
|
1864
1864
|
{ name = "uipath" },
|
|
1865
1865
|
]
|
|
1866
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1866
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e7/d0/945364a318dd04363364be56db5e771e0996ac0ae8487ebc28518da1274a/uipath_langchain-0.0.90.tar.gz", hash = "sha256:9cc19b71c6a05223771f36f1906737852a0b1f607757b740e0afad7e131872ed", size = 1475658 }
|
|
1867
1867
|
wheels = [
|
|
1868
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1868
|
+
{ url = "https://files.pythonhosted.org/packages/20/42/2238adcdad8b1184e0ff716a0d14918ddd5ff9f833504aed99ac8b537c45/uipath_langchain-0.0.90-py3-none-any.whl", hash = "sha256:eddcb8d3e72ed09e89c79300e03b7793d8567edf47f3f3338c4ad55ce18540b6", size = 50995 },
|
|
1869
1869
|
]
|
|
1870
1870
|
|
|
1871
1871
|
[[package]]
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/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.91}/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.91}/src/uipath_langchain/_cli/_runtime/_runtime.py
RENAMED
|
@@ -15,7 +15,7 @@ from uipath._cli._runtime._contracts import (
|
|
|
15
15
|
UiPathRuntimeResult,
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
from ..._utils import
|
|
18
|
+
from ..._utils import _instrument_traceable_attributes
|
|
19
19
|
from ...tracers import AsyncUiPathTracer
|
|
20
20
|
from ._context import LangGraphRuntimeContext
|
|
21
21
|
from ._exception import LangGraphRuntimeError
|
|
@@ -45,7 +45,7 @@ class LangGraphRuntime(UiPathBaseRuntime):
|
|
|
45
45
|
Raises:
|
|
46
46
|
LangGraphRuntimeError: If execution fails
|
|
47
47
|
"""
|
|
48
|
-
|
|
48
|
+
_instrument_traceable_attributes()
|
|
49
49
|
|
|
50
50
|
await self.validate()
|
|
51
51
|
|
|
@@ -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,4 +1,4 @@
|
|
|
1
|
-
from ..tracers._instrument_traceable import
|
|
1
|
+
from ..tracers._instrument_traceable import _instrument_traceable_attributes
|
|
2
2
|
from ._request_mixin import UiPathRequestMixin
|
|
3
3
|
|
|
4
|
-
__all__ = ["UiPathRequestMixin", "
|
|
4
|
+
__all__ = ["UiPathRequestMixin", "_instrument_traceable_attributes"]
|
{uipath_langchain-0.0.89 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/__init__.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from ._instrument_traceable import
|
|
1
|
+
from ._instrument_traceable import _instrument_traceable_attributes
|
|
2
2
|
from .AsyncUiPathTracer import AsyncUiPathTracer
|
|
3
3
|
from .UiPathTracer import UiPathTracer
|
|
4
4
|
|
|
5
|
-
__all__ = ["AsyncUiPathTracer", "UiPathTracer", "
|
|
5
|
+
__all__ = ["AsyncUiPathTracer", "UiPathTracer", "_instrument_traceable_attributes"]
|