uipath-langchain 0.0.90__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.

Files changed (151) hide show
  1. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/PKG-INFO +2 -2
  2. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  3. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  4. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  5. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  6. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  7. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  8. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  9. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  10. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/run-agent.png +0 -0
  11. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  12. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/start-job.png +0 -0
  13. uipath_langchain-0.0.91/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  14. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/pyproject.toml +2 -2
  15. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/README.md +6 -6
  16. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/.env.example +1 -2
  17. uipath_langchain-0.0.91/samples/ticket-classification/README.md +206 -0
  18. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/main.py +4 -23
  19. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/pyproject.toml +1 -1
  20. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/uipath.json +2 -19
  21. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/uv.lock +8 -8
  22. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_runtime.py +2 -2
  23. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/__init__.py +2 -2
  24. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/__init__.py +2 -2
  25. uipath_langchain-0.0.91/src/uipath_langchain/tracers/_instrument_traceable.py +406 -0
  26. uipath_langchain-0.0.91/tests/__init__.py +1 -0
  27. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/tests/test_langchain_client.py +90 -1
  28. uipath_langchain-0.0.91/tests/tracers/__init__.py +1 -0
  29. uipath_langchain-0.0.91/tests/tracers/test_instrument_traceable.py +206 -0
  30. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/uv.lock +154 -5
  31. uipath_langchain-0.0.90/samples/ticket-classification/README.md +0 -68
  32. uipath_langchain-0.0.90/src/uipath_langchain/tracers/_instrument_traceable.py +0 -285
  33. uipath_langchain-0.0.90/tests/conftest.py +0 -95
  34. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.cursorrules +0 -0
  35. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.editorconfig +0 -0
  36. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.gitattributes +0 -0
  37. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/build.yml +0 -0
  38. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/cd.yml +0 -0
  39. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/ci.yml +0 -0
  40. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/commitlint.yml +0 -0
  41. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/lint.yml +0 -0
  42. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.github/workflows/test.yml +0 -0
  43. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.gitignore +0 -0
  44. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.pre-commit-config.yaml +0 -0
  45. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.python-version +0 -0
  46. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.vscode/extensions.json +0 -0
  47. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/.vscode/settings.json +0 -0
  48. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/CONTRIBUTING.md +0 -0
  49. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/LICENSE +0 -0
  50. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/README.md +0 -0
  51. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/docs/chat_models.md +0 -0
  52. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/docs/context_grounding_chain.md +0 -0
  53. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/docs/context_grounding_retriever.md +0 -0
  54. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/docs/interrupt_models.md +0 -0
  55. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/coder-agent-package-overview.png +0 -0
  56. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/coder-agent-process-configuration.png +0 -0
  57. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/planner-agent-package-overview.png +0 -0
  58. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/planner-agent-process-configuration.png +0 -0
  59. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/researcher-agent-package-overview.png +0 -0
  60. {uipath_langchain-0.0.90/docs/sample_images → uipath_langchain-0.0.91/docs/sample_images/multi-agent-distributed}/researcher-agent-process-configuration.png +0 -0
  61. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/.env.example +0 -0
  62. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/agent.mermaid +0 -0
  63. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/graph.py +0 -0
  64. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/langgraph.json +0 -0
  65. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/pyproject.toml +0 -0
  66. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/uipath.json +0 -0
  67. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/company-research-agent/uv.lock +0 -0
  68. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/database.py +0 -0
  69. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/main.py +0 -0
  70. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/models.py +0 -0
  71. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/pyproject.toml +0 -0
  72. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/schemas.py +0 -0
  73. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/templates/index.html +0 -0
  74. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/hitl-inbox-server/uv.lock +0 -0
  75. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  76. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  77. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  78. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  79. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  80. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  81. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  82. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  83. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  84. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  85. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  86. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  87. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  88. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  89. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  90. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  91. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  92. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  93. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  94. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/retrieval-chain/.env.example +0 -0
  95. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/retrieval-chain/README.md +0 -0
  96. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/retrieval-chain/main.py +0 -0
  97. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/retrieval-chain/pyproject.toml +0 -0
  98. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/retrieval-chain/uv.lock +0 -0
  99. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/.env.example +0 -0
  100. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/README.md +0 -0
  101. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/agent.mermaid +0 -0
  102. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/langgraph.json +0 -0
  103. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/pyproject.toml +0 -0
  104. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  105. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  106. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  107. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/uipath.json +0 -0
  108. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-local-mcp/uv.lock +0 -0
  109. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/.env.example +0 -0
  110. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/README.md +0 -0
  111. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/agent.mermaid +0 -0
  112. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/langgraph.json +0 -0
  113. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/main.py +0 -0
  114. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/pyproject.toml +0 -0
  115. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/uipath.json +0 -0
  116. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/simple-remote-mcp/uv.lock +0 -0
  117. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/agent.mermaid +0 -0
  118. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  119. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/samples/ticket-classification/langgraph.json +0 -0
  120. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/__init__.py +0 -0
  121. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/__init__.py +0 -0
  122. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  123. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_escalation.py +0 -0
  124. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  125. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
  126. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
  127. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  128. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/cli_init.py +0 -0
  129. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_cli/cli_run.py +0 -0
  130. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  131. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_settings.py +0 -0
  132. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  133. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/__init__.py +0 -0
  134. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/models.py +0 -0
  135. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/utils/__init__.py +0 -0
  136. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/chat/utils/_chat_types.py +0 -0
  137. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/embeddings/__init__.py +0 -0
  138. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  139. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/middlewares.py +0 -0
  140. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/retrievers/__init__.py +0 -0
  141. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  142. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/AsyncUiPathTracer.py +0 -0
  143. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/UiPathTracer.py +0 -0
  144. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/_events.py +0 -0
  145. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/tracers/_utils.py +0 -0
  146. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/__init__.py +0 -0
  147. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_request_mixin.py +0 -0
  148. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_settings.py +0 -0
  149. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/utils/_sleep_policy.py +0 -0
  150. {uipath_langchain-0.0.90 → uipath_langchain-0.0.91}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  151. {uipath_langchain-0.0.90 → 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.90
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.9
28
+ Requires-Dist: uipath<2.1.0,>=2.0.13
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.90"
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.9, <2.1.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
- ![planner-agent-package-overview](../../docs/sample_images/planner-agent-package-overview.png)
212
- ![planner-agent-process-configuration](../../docs/sample_images/planner-agent-process-configuration.png)
211
+ ![planner-agent-package-overview](../../docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png)
212
+ ![planner-agent-process-configuration](../../docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png)
213
213
 
214
214
  - **Researcher Agent**
215
- ![researcher-agent-package-overview](../../docs/sample_images/researcher-agent-package-overview.png)
216
- ![researcher-agent-process-configuration](../../docs/sample_images/researcher-agent-process-configuration.png)
215
+ ![researcher-agent-package-overview](../../docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png)
216
+ ![researcher-agent-process-configuration](../../docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png)
217
217
 
218
218
  - **Coder Agent**
219
- ![coder-agent-package-overview](../../docs/sample_images/coder-agent-package-overview.png)
220
- ![coder-agent-process-configuration](../../docs/sample_images/coder-agent-process-configuration.png)
219
+ ![coder-agent-package-overview](../../docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png)
220
+ ![coder-agent-process-configuration](../../docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png)
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.
@@ -1,4 +1,3 @@
1
1
  UIPATH_URL=https://alpha.uipath.com/ada/byoa
2
2
  UIPATH_ACCESS_TOKEN=xxx
3
- AZURE_OPENAI_API_KEY=xxx
4
- AZURE_OPENAI_ENDPOINT=xxx
3
+ OPENAI_API_KEY=xxx
@@ -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
+ ![upload-solution-package](../../docs/sample_images/ticket-classification/upload-solution-package.png)
98
+
99
+ 2. **Initiate Deployment**
100
+ - Wait for the package to be processed and ready for deployment
101
+
102
+ ![deploy-solution-package](../../docs/sample_images/ticket-classification/deploy-solution-package.png)
103
+
104
+ 3. **Select Destination**
105
+ - Choose a destination folder or install as root folder under tenant
106
+
107
+ ![choose-destination-folder](../../docs/sample_images/ticket-classification/solution-destination-folder.png)
108
+
109
+ 4. **Complete Configuration**
110
+ - Follow the solution configuration wizard prompts
111
+
112
+ ![solution-configuration-wizard](../../docs/sample_images/ticket-classification/deploy-solution-package-wizard.png)
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
+ ![activate-deployment](../../docs/sample_images/ticket-classification/activate-deployment.png)
118
+ ![activate-apps](../../docs/sample_images/ticket-classification/activate-apps.png)
119
+
120
+ 6. **Verify and Configure**
121
+ - Navigate to the solution folder to verify the escalation app creation
122
+
123
+ ![navigate-to-solution-folder](../../docs/sample_images/ticket-classification/navigate-to-solution-folder.png)
124
+
125
+ - Copy the folder path for configuration
126
+
127
+ ![copy-folder-path](../../docs/sample_images/ticket-classification/copy-folder-path.png)
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
+ ![run the agent](../../docs/sample_images/ticket-classification/run-agent.png)
193
+ ![start job](../../docs/sample_images/ticket-classification/start-job.png)
194
+
195
+ 2. **Monitor Progress**
196
+ - Track the agent's progress using the details side panel
197
+
198
+ ![monitor agent](../../docs/sample_images/ticket-classification/monitor-agent.png)
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
+ ![resume condition](../../docs/sample_images/ticket-classification/resume-condition.png)
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 AzureChatOpenAI
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 = AzureChatOpenAI(
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(name="escalation_agent_app",
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(
@@ -9,7 +9,7 @@ dependencies = [
9
9
  "langchain-openai>=0.3.9",
10
10
  "langgraph-checkpoint-sqlite>=2.0.3",
11
11
  "python-dotenv>=1.0.1",
12
- "uipath-langchain==0.0.88",
12
+ "uipath-langchain==0.0.90",
13
13
  "pydantic>=2.10.6",
14
14
  "aiohttp>=3.11.12",
15
15
  "typing-extensions>=4.12.2",
@@ -2,7 +2,7 @@
2
2
  "entryPoints": [
3
3
  {
4
4
  "filePath": "agent",
5
- "uniqueId": "525ea50d-c54f-4185-94e2-501fe9ab341a",
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.2"
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.88" },
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.4"
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/6c/0d/4ae746ca61ec42ca6ab449692bacfbb34e013a97224e6f175715b448ab9b/uipath-2.0.4.tar.gz", hash = "sha256:9ac7abbc2e1f53207e11cb1235e99efc6cf7c265595e0f1ac981512a443e70bc", size = 207150 }
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/0f/d9/e4c2d3ba7d87e59937ca5980f4bc2b7d06c68578df33a9a0d4eb99764d44/uipath-2.0.4-py3-none-any.whl", hash = "sha256:698680eb2f8fd885dbc9e13856028cdd10cfac525698375022ff484629f3f778", size = 85424 },
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.88"
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/80/0e/e05ecfc5a5b6b7f277dca18e61724c1a923ae4c9af39f71f2c8dce52343d/uipath_langchain-0.0.88.tar.gz", hash = "sha256:f06cc80c9499ae4309275119a9abf5d74c881aaef6731c6efb5b525a1291ef33", size = 1188502 }
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/3a/7a/68ec6fcb4698af7f27c30a2107c349fb6115b84373dba38413346e8c5a57/uipath_langchain-0.0.88-py3-none-any.whl", hash = "sha256:78c92bebbd4a3651adcf914d3563a551222bef86f54cb3eb270d93a39ede7d28", size = 50641 },
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]]
@@ -15,7 +15,7 @@ from uipath._cli._runtime._contracts import (
15
15
  UiPathRuntimeResult,
16
16
  )
17
17
 
18
- from ..._utils import _instrument_traceable
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
- _instrument_traceable()
48
+ _instrument_traceable_attributes()
49
49
 
50
50
  await self.validate()
51
51
 
@@ -1,4 +1,4 @@
1
- from ..tracers._instrument_traceable import _instrument_traceable
1
+ from ..tracers._instrument_traceable import _instrument_traceable_attributes
2
2
  from ._request_mixin import UiPathRequestMixin
3
3
 
4
- __all__ = ["UiPathRequestMixin", "_instrument_traceable"]
4
+ __all__ = ["UiPathRequestMixin", "_instrument_traceable_attributes"]
@@ -1,5 +1,5 @@
1
- from ._instrument_traceable import _instrument_traceable
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", "_instrument_traceable"]
5
+ __all__ = ["AsyncUiPathTracer", "UiPathTracer", "_instrument_traceable_attributes"]