uipath-langchain 0.0.92__tar.gz → 0.0.94__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 (149) hide show
  1. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/PKG-INFO +2 -2
  2. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/chat_models.md +1 -1
  3. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/context_grounding_retriever.md +10 -2
  4. uipath_langchain-0.0.94/docs/context_grounding_vector_store.md +35 -0
  5. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/interrupt_models.md +6 -1
  6. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/pyproject.toml +2 -2
  7. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/graph.py +2 -2
  8. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +1 -1
  9. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +2 -2
  10. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +2 -2
  11. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +2 -2
  12. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +155 -7
  13. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/graph.py +6 -6
  14. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/cli_init.py +46 -14
  15. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/_instrument_traceable.py +17 -12
  16. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/uv.lock +1462 -1417
  17. uipath_langchain-0.0.92/docs/context_grounding_chain.md +0 -38
  18. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.cursorrules +0 -0
  19. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.editorconfig +0 -0
  20. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.gitattributes +0 -0
  21. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/build.yml +0 -0
  22. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/cd.yml +0 -0
  23. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/ci.yml +0 -0
  24. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/commitlint.yml +0 -0
  25. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/lint.yml +0 -0
  26. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.github/workflows/test.yml +0 -0
  27. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.gitignore +0 -0
  28. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.pre-commit-config.yaml +0 -0
  29. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.python-version +0 -0
  30. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.vscode/extensions.json +0 -0
  31. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/.vscode/settings.json +0 -0
  32. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/CONTRIBUTING.md +0 -0
  33. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/LICENSE +0 -0
  34. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/README.md +0 -0
  35. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  36. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  37. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  38. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  39. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  40. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  41. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  42. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  43. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  44. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  45. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  46. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  47. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  48. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  49. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  50. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  51. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/start-job.png +0 -0
  52. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  53. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/.env.example +0 -0
  54. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/agent.mermaid +0 -0
  55. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/langgraph.json +0 -0
  56. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/pyproject.toml +0 -0
  57. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/uipath.json +0 -0
  58. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/company-research-agent/uv.lock +0 -0
  59. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/database.py +0 -0
  60. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/main.py +0 -0
  61. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/models.py +0 -0
  62. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/pyproject.toml +0 -0
  63. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/schemas.py +0 -0
  64. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/templates/index.html +0 -0
  65. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/hitl-inbox-server/uv.lock +0 -0
  66. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  67. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  68. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  69. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  70. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  71. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  72. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  73. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  74. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  75. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  76. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  77. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  78. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  79. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  80. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/retrieval-chain/.env.example +0 -0
  81. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/retrieval-chain/README.md +0 -0
  82. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/retrieval-chain/main.py +0 -0
  83. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/retrieval-chain/pyproject.toml +0 -0
  84. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/retrieval-chain/uv.lock +0 -0
  85. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/.env.example +0 -0
  86. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/README.md +0 -0
  87. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/agent.mermaid +0 -0
  88. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/langgraph.json +0 -0
  89. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/pyproject.toml +0 -0
  90. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  91. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  92. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  93. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/uipath.json +0 -0
  94. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-local-mcp/uv.lock +0 -0
  95. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/.env.example +0 -0
  96. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/README.md +0 -0
  97. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/agent.mermaid +0 -0
  98. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/langgraph.json +0 -0
  99. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/main.py +0 -0
  100. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/pyproject.toml +0 -0
  101. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/uipath.json +0 -0
  102. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/simple-remote-mcp/uv.lock +0 -0
  103. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/.env.example +0 -0
  104. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/README.md +0 -0
  105. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/agent.mermaid +0 -0
  106. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  107. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/langgraph.json +0 -0
  108. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/main.py +0 -0
  109. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/pyproject.toml +0 -0
  110. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/uipath.json +0 -0
  111. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/samples/ticket-classification/uv.lock +0 -0
  112. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/__init__.py +0 -0
  113. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/__init__.py +0 -0
  114. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  115. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_escalation.py +0 -0
  116. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  117. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
  118. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
  119. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -0
  120. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  121. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_cli/cli_run.py +0 -0
  122. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_utils/__init__.py +0 -0
  123. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  124. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_utils/_settings.py +0 -0
  125. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  126. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/chat/__init__.py +0 -0
  127. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/chat/models.py +0 -0
  128. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/chat/utils/__init__.py +0 -0
  129. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/chat/utils/_chat_types.py +0 -0
  130. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/embeddings/__init__.py +0 -0
  131. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  132. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/middlewares.py +0 -0
  133. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/retrievers/__init__.py +0 -0
  134. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  135. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/AsyncUiPathTracer.py +0 -0
  136. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/UiPathTracer.py +0 -0
  137. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/__init__.py +0 -0
  138. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/_events.py +0 -0
  139. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/tracers/_utils.py +0 -0
  140. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/utils/__init__.py +0 -0
  141. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/utils/_request_mixin.py +0 -0
  142. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/utils/_settings.py +0 -0
  143. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/utils/_sleep_policy.py +0 -0
  144. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  145. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/tests/__init__.py +0 -0
  146. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/tests/test_dummy.py +0 -0
  147. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/tests/test_langchain_client.py +0 -0
  148. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/tests/tracers/__init__.py +0 -0
  149. {uipath_langchain-0.0.92 → uipath_langchain-0.0.94}/tests/tracers/test_instrument_traceable.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.92
3
+ Version: 0.0.94
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.14
28
+ Requires-Dist: uipath<2.1.0,>=2.0.23
29
29
  Provides-Extra: langchain
30
30
  Description-Content-Type: text/markdown
31
31
 
@@ -81,7 +81,7 @@ llm = UiPathNormalizedChatModel(
81
81
  )
82
82
  ```
83
83
 
84
- Currently the following models can be used with `UiPathAzureChatOpenAI` (this list can be updated in the future):
84
+ Currently the following models can be used with `UiPathNormalizedChatModel` (this list can be updated in the future):
85
85
  - `anthropic.claude-3-5-sonnet-20240620-v1:0`, `anthropic.claude-3-5-sonnet-20241022-v2:0`, `anthropic.claude-3-7-sonnet-20250219-v1:0`, `anthropic.claude-3-haiku-20240307-v1:0`, `gemini-1.5-pro-001`, `gemini-2.0-flash-001`, `gpt-4o-2024-05-13`, `gpt-4o-2024-08-06`, `gpt-4o-2024-11-20`, `gpt-4o-mini-2024-07-18`, `o3-mini-2025-01-31`
86
86
 
87
87
  ### Note
@@ -1,4 +1,4 @@
1
- # Context Grounding Retriever
1
+ # ContextGroundingRetriever
2
2
 
3
3
  The `ContextGroundingRetriever` is a document retrieval system that uses vector search to efficiently find and retrieve relevant information from your document store.
4
4
 
@@ -10,6 +10,8 @@ The `ContextGroundingRetriever` is a document retrieval system that uses vector
10
10
  - Retrieve context-relevant documents for various applications
11
11
 
12
12
 
13
+ You will need to create an index in `Context Grounding` to use this feature. To create an index go to organization `Admin` -> `AI Trust Layer` -> `Context Grounding`. There you can create a new index and add documents to it. See the full documentation [here](https://docs.uipath.com/automation-cloud/automation-cloud/latest/admin-guide/about-context-grounding) for more details.
14
+
13
15
  ## Basic Usage
14
16
 
15
17
  Create a simple retriever by specifying an index name:
@@ -18,7 +20,7 @@ Create a simple retriever by specifying an index name:
18
20
  from uipath_langchain.retrievers import ContextGroundingRetriever
19
21
 
20
22
  retriever = ContextGroundingRetriever(index_name = "Company Policy Context")
21
- pprint(retriever.invoke("What is the company policy on remote work?"))
23
+ print(retriever.invoke("What is the company policy on remote work?"))
22
24
  ```
23
25
 
24
26
  ## Integration with LangChain Tools
@@ -26,6 +28,7 @@ pprint(retriever.invoke("What is the company policy on remote work?"))
26
28
  You can easily integrate the retriever with LangChain's tool system:
27
29
 
28
30
  ```python
31
+ from langchain.agents import create_react_agent
29
32
  from langchain.tools.retriever import create_retriever_tool
30
33
  from uipath_langchain.retrievers import ContextGroundingRetriever
31
34
 
@@ -38,6 +41,11 @@ retriever_tool = create_retriever_tool(
38
41
  Use a meaningful query to load relevant information from the documents. Save the citation for later use.
39
42
  """
40
43
  )
44
+
45
+ # You can use the tool in your agents
46
+ model = OpenAI()
47
+ tools = [retriever_tool]
48
+ agent = create_react_agent(model, tools, prompt="Answer user questions as best as you can using the search tool.")
41
49
  ```
42
50
 
43
51
 
@@ -0,0 +1,35 @@
1
+ # ContextGroundingVectorStore
2
+
3
+ `ContextGroundingVectorStore` is a vector store implementation designed for context-aware document retrieval. It allows you to perform semantic searches and create retrieval chains with language models.
4
+
5
+ You will need to create an index in `Context Grounding` to use this feature. To create an index go to organization `Admin` -> `AI Trust Layer` -> `Context Grounding`. There you can create a new index and add documents to it. See the full documentation [here](https://docs.uipath.com/automation-cloud/automation-cloud/latest/admin-guide/about-context-grounding) for more details.
6
+
7
+
8
+ ## Searching Documents
9
+
10
+ The vector store supports various search methods:
11
+
12
+ ```python
13
+ from uipath_langchain.vectorstores.context_grounding_vectorstore import ContextGroundingVectorStore
14
+
15
+ vectorstore = ContextGroundingVectorStore(index_name="Company policy")
16
+
17
+ # Perform semantic searches with distance scores
18
+ docs_with_scores = vectorstore.asimilarity_search_with_score(query="What is the company policy on data storage?", k=5)
19
+
20
+ # Perform a similarity search with relevance scores
21
+ docs_with_relevance_scores = await vectorstore.asimilarity_search_with_relevance_scores(query=query, k=5)
22
+ ```
23
+
24
+ ## Creating a Retrieval Chain
25
+
26
+ You can integrate the vector store into a retrieval chain with a language model:
27
+
28
+ ```python
29
+ # Run a retrieval chain
30
+ model = UiPathAzureChatOpenAI(model="gpt-4o-2024-08-06", max_retries=3)
31
+ retrieval_chain = create_retrieval_chain(vectorstore=vectorstore, model=model)
32
+
33
+ query = "What is the ECCN for a laptop?"
34
+ result = retrieval_chain(query)
35
+ ```
@@ -19,10 +19,11 @@ Upon completion of the invoked process, the current agent will automatically res
19
19
 
20
20
  #### Example:
21
21
  ```python
22
+ from uipath.models import InvokeProcess
22
23
  process_output = interrupt(InvokeProcess(name="MyProcess", input_arguments={"arg1": "value1"}))
23
24
  ```
24
25
 
25
- For a practical implementation of the `InvokeProcess` model, refer to the sample usage in the [planner.py](../../samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py#L184) file. This example demonstrates how to invoke a process with dynamic input arguments, showcasing the integration of the interrupt functionality within a multi-agent system or a system where an agent integrates with RPA processes and API workflows.
26
+ For a practical implementation of the `InvokeProcess` model, refer to the sample usage in the [planner.py](../samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py#L181) file. This example demonstrates how to invoke a process with dynamic input arguments, showcasing the integration of the interrupt functionality within a multi-agent system or a system where an agent integrates with RPA processes and API workflows.
26
27
 
27
28
  ---
28
29
 
@@ -36,6 +37,7 @@ The `WaitJob` model is used to wait for a job completion. Unlike `InvokeProcess`
36
37
 
37
38
  #### Example:
38
39
  ```python
40
+ from uipath.models import WaitJob
39
41
  job_output = interrupt(WaitJob(job=my_job_instance))
40
42
  ```
41
43
 
@@ -57,8 +59,10 @@ For more information on UiPath apps, refer to the [UiPath Apps User Guide](https
57
59
 
58
60
  #### Example:
59
61
  ```python
62
+ from uipath.models import CreateAction
60
63
  action_output = interrupt(CreateAction(name="AppName", title="Escalate Issue", data={"key": "value"}, app_version=1, assignee="user@example.com"))
61
64
  ```
65
+ For a practical implementation of the `CreateAction` model, refer to the sample usage in the [ticket-classification/main.py](../samples/ticket-classification/main.py#L116) file. This example demonstrates how to create an action with dynamic input.
62
66
 
63
67
  ---
64
68
 
@@ -71,6 +75,7 @@ The `WaitAction` model is used to wait for an action to be handled. This model i
71
75
 
72
76
  #### Example:
73
77
  ```python
78
+ from uipath.models import WaitAction
74
79
  action_output = interrupt(WaitAction(action=my_action_instance))
75
80
  ```
76
81
 
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.0.92"
3
+ version = "0.0.94"
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.14, <2.1.0",
8
+ "uipath>=2.0.23, <2.1.0",
9
9
  "langgraph>=0.2.70",
10
10
  "langchain-core>=0.3.34",
11
11
  "langgraph-checkpoint-sqlite>=2.0.3",
@@ -43,7 +43,7 @@ class GraphOutput(BaseModel):
43
43
  response: str
44
44
 
45
45
 
46
- def research_node(state: GraphInput) -> GraphOutput:
46
+ async def research_node(state: GraphInput) -> GraphOutput:
47
47
  # Format the user message with the company name
48
48
  user_message = f"""Please provide a comprehensive analysis and outreach strategy for the company: {state.company_name}. Use the TavilySearchResults tool to gather information. Include detailed research on the company's background, organizational structure, key decision-makers, and a tailored outreach strategy. Format your response using the following section headers:
49
49
 
@@ -58,7 +58,7 @@ Ensure that each section is clearly labeled and contains relevant, concise infor
58
58
 
59
59
  new_state = MessagesState(messages=[{"role": "user", "content": user_message}])
60
60
 
61
- result = research_agent.invoke(new_state)
61
+ result = await research_agent.ainvoke(new_state)
62
62
 
63
63
  return GraphOutput(response=result["messages"][-1].content)
64
64
 
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "langchain-anthropic>=0.3.8",
13
13
  "langchain-experimental>=0.3.4",
14
14
  "tavily-python>=0.5.0",
15
- "uipath-langchain==0.0.88"
15
+ "uipath-langchain==0.0.90"
16
16
  ]
17
17
 
18
18
  [project.optional-dependencies]
@@ -36,8 +36,8 @@ def python_repl_tool(
36
36
  code_agent = create_react_agent(llm, tools=[python_repl_tool])
37
37
 
38
38
 
39
- def code_node(state: MessagesState) -> GraphOutput:
40
- result = code_agent.invoke(state)
39
+ async def code_node(state: MessagesState) -> GraphOutput:
40
+ result = await code_agent.ainvoke(state)
41
41
  return GraphOutput(answer=result["messages"][-1].content)
42
42
 
43
43
 
@@ -70,7 +70,7 @@ def input(state: GraphInput):
70
70
  llm = ChatAnthropic(model="claude-3-5-sonnet-latest")
71
71
 
72
72
 
73
- def create_plan(state: State) -> Command:
73
+ async def create_plan(state: State) -> Command:
74
74
  """Create an execution plan based on the user's question."""
75
75
  parser = PydanticOutputParser(pydantic_object=ExecutionPlan)
76
76
 
@@ -104,7 +104,7 @@ def create_plan(state: State) -> Command:
104
104
  format_instructions=parser.get_format_instructions(),
105
105
  )
106
106
 
107
- plan_response = llm.invoke(formatted_prompt)
107
+ plan_response = await llm.ainvoke(formatted_prompt)
108
108
 
109
109
  try:
110
110
  plan_output = parser.parse(plan_response.content)
@@ -18,8 +18,8 @@ class GraphOutput(BaseModel):
18
18
  answer: str
19
19
 
20
20
 
21
- def research_node(state: MessagesState) -> GraphOutput:
22
- result = research_agent.invoke(state)
21
+ async def research_node(state: MessagesState) -> GraphOutput:
22
+ result = await research_agent.ainvoke(state)
23
23
  return GraphOutput(answer=result["messages"][-1].content)
24
24
 
25
25
 
@@ -342,6 +342,18 @@ wheels = [
342
342
  { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686 },
343
343
  ]
344
344
 
345
+ [[package]]
346
+ name = "deprecated"
347
+ version = "1.2.18"
348
+ source = { registry = "https://pypi.org/simple" }
349
+ dependencies = [
350
+ { name = "wrapt" },
351
+ ]
352
+ sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744 }
353
+ wheels = [
354
+ { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 },
355
+ ]
356
+
345
357
  [[package]]
346
358
  name = "distro"
347
359
  version = "1.9.0"
@@ -535,6 +547,18 @@ wheels = [
535
547
  { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
536
548
  ]
537
549
 
550
+ [[package]]
551
+ name = "importlib-metadata"
552
+ version = "8.6.1"
553
+ source = { registry = "https://pypi.org/simple" }
554
+ dependencies = [
555
+ { name = "zipp" },
556
+ ]
557
+ sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767 }
558
+ wheels = [
559
+ { url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", size = 26971 },
560
+ ]
561
+
538
562
  [[package]]
539
563
  name = "iniconfig"
540
564
  version = "2.1.0"
@@ -863,7 +887,7 @@ requires-dist = [
863
887
  { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.11.1" },
864
888
  { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6.1" },
865
889
  { name = "tavily-python", specifier = ">=0.5.0" },
866
- { name = "uipath-langchain", specifier = "==0.0.88" },
890
+ { name = "uipath-langchain", specifier = "==0.0.90" },
867
891
  ]
868
892
  provides-extras = ["dev"]
869
893
 
@@ -1082,6 +1106,46 @@ wheels = [
1082
1106
  { url = "https://files.pythonhosted.org/packages/fd/34/cebce15f64eb4a3d609a83ac3568d43005cc9a1cba9d7fde5590fd415423/openai-1.68.2-py3-none-any.whl", hash = "sha256:24484cb5c9a33b58576fdc5acf0e5f92603024a4e39d0b99793dfa1eb14c2b36", size = 606073 },
1083
1107
  ]
1084
1108
 
1109
+ [[package]]
1110
+ name = "opentelemetry-api"
1111
+ version = "1.32.1"
1112
+ source = { registry = "https://pypi.org/simple" }
1113
+ dependencies = [
1114
+ { name = "deprecated" },
1115
+ { name = "importlib-metadata" },
1116
+ ]
1117
+ sdist = { url = "https://files.pythonhosted.org/packages/42/40/2359245cd33641c2736a0136a50813352d72f3fc209de28fb226950db4a1/opentelemetry_api-1.32.1.tar.gz", hash = "sha256:a5be71591694a4d9195caf6776b055aa702e964d961051a0715d05f8632c32fb", size = 64138 }
1118
+ wheels = [
1119
+ { url = "https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl", hash = "sha256:bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724", size = 65287 },
1120
+ ]
1121
+
1122
+ [[package]]
1123
+ name = "opentelemetry-sdk"
1124
+ version = "1.32.1"
1125
+ source = { registry = "https://pypi.org/simple" }
1126
+ dependencies = [
1127
+ { name = "opentelemetry-api" },
1128
+ { name = "opentelemetry-semantic-conventions" },
1129
+ { name = "typing-extensions" },
1130
+ ]
1131
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/65/2069caef9257fae234ca0040d945c741aa7afbd83a7298ee70fc0bc6b6f4/opentelemetry_sdk-1.32.1.tar.gz", hash = "sha256:8ef373d490961848f525255a42b193430a0637e064dd132fd2a014d94792a092", size = 161044 }
1132
+ wheels = [
1133
+ { url = "https://files.pythonhosted.org/packages/dc/00/d3976cdcb98027aaf16f1e980e54935eb820872792f0eaedd4fd7abb5964/opentelemetry_sdk-1.32.1-py3-none-any.whl", hash = "sha256:bba37b70a08038613247bc42beee5a81b0ddca422c7d7f1b097b32bf1c7e2f17", size = 118989 },
1134
+ ]
1135
+
1136
+ [[package]]
1137
+ name = "opentelemetry-semantic-conventions"
1138
+ version = "0.53b1"
1139
+ source = { registry = "https://pypi.org/simple" }
1140
+ dependencies = [
1141
+ { name = "deprecated" },
1142
+ { name = "opentelemetry-api" },
1143
+ ]
1144
+ sdist = { url = "https://files.pythonhosted.org/packages/5e/b6/3c56e22e9b51bcb89edab30d54830958f049760bbd9ab0a759cece7bca88/opentelemetry_semantic_conventions-0.53b1.tar.gz", hash = "sha256:4c5a6fede9de61211b2e9fc1e02e8acacce882204cd770177342b6a3be682992", size = 114350 }
1145
+ wheels = [
1146
+ { url = "https://files.pythonhosted.org/packages/27/6b/a8fb94760ef8da5ec283e488eb43235eac3ae7514385a51b6accf881e671/opentelemetry_semantic_conventions-0.53b1-py3-none-any.whl", hash = "sha256:21df3ed13f035f8f3ea42d07cbebae37020367a53b47f1ebee3b10a381a00208", size = 188443 },
1147
+ ]
1148
+
1085
1149
  [[package]]
1086
1150
  name = "orjson"
1087
1151
  version = "3.10.16"
@@ -1181,6 +1245,15 @@ wheels = [
1181
1245
  { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
1182
1246
  ]
1183
1247
 
1248
+ [[package]]
1249
+ name = "pathlib"
1250
+ version = "1.0.1"
1251
+ source = { registry = "https://pypi.org/simple" }
1252
+ sdist = { url = "https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz", hash = "sha256:6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f", size = 49298 }
1253
+ wheels = [
1254
+ { url = "https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl", hash = "sha256:f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147", size = 14363 },
1255
+ ]
1256
+
1184
1257
  [[package]]
1185
1258
  name = "pluggy"
1186
1259
  version = "1.5.0"
@@ -1818,11 +1891,13 @@ wheels = [
1818
1891
 
1819
1892
  [[package]]
1820
1893
  name = "uipath"
1821
- version = "2.0.4"
1894
+ version = "2.0.11"
1822
1895
  source = { registry = "https://pypi.org/simple" }
1823
1896
  dependencies = [
1824
1897
  { name = "click" },
1825
1898
  { name = "httpx" },
1899
+ { name = "opentelemetry-sdk" },
1900
+ { name = "pathlib" },
1826
1901
  { name = "pydantic" },
1827
1902
  { name = "pytest-asyncio" },
1828
1903
  { name = "python-dotenv" },
@@ -1831,14 +1906,14 @@ dependencies = [
1831
1906
  { name = "tomli" },
1832
1907
  { name = "types-requests" },
1833
1908
  ]
1834
- sdist = { url = "https://files.pythonhosted.org/packages/6c/0d/4ae746ca61ec42ca6ab449692bacfbb34e013a97224e6f175715b448ab9b/uipath-2.0.4.tar.gz", hash = "sha256:9ac7abbc2e1f53207e11cb1235e99efc6cf7c265595e0f1ac981512a443e70bc", size = 207150 }
1909
+ sdist = { url = "https://files.pythonhosted.org/packages/cf/e4/dbb4995755fd7b08cda1d8988cd592dbb7a5995b125f9f05a29d3e1a72af/uipath-2.0.11.tar.gz", hash = "sha256:e0f278c3a10f54f5f15985907b0ad3dadd6941e0b4a5ec0ef43337287238c2cc", size = 223460 }
1835
1910
  wheels = [
1836
- { url = "https://files.pythonhosted.org/packages/0f/d9/e4c2d3ba7d87e59937ca5980f4bc2b7d06c68578df33a9a0d4eb99764d44/uipath-2.0.4-py3-none-any.whl", hash = "sha256:698680eb2f8fd885dbc9e13856028cdd10cfac525698375022ff484629f3f778", size = 85424 },
1911
+ { url = "https://files.pythonhosted.org/packages/de/ff/151fb42ccdbd9339c1f916599564dcc5461644ae6febedf69c2017954f9f/uipath-2.0.11-py3-none-any.whl", hash = "sha256:24a60a7388823ae6f2960a47a0e3ab6dc13c24b164d2f46fb440307e231043d0", size = 92044 },
1837
1912
  ]
1838
1913
 
1839
1914
  [[package]]
1840
1915
  name = "uipath-langchain"
1841
- version = "0.0.88"
1916
+ version = "0.0.90"
1842
1917
  source = { registry = "https://pypi.org/simple" }
1843
1918
  dependencies = [
1844
1919
  { name = "httpx" },
@@ -1855,9 +1930,9 @@ dependencies = [
1855
1930
  { name = "types-requests" },
1856
1931
  { name = "uipath" },
1857
1932
  ]
1858
- sdist = { url = "https://files.pythonhosted.org/packages/80/0e/e05ecfc5a5b6b7f277dca18e61724c1a923ae4c9af39f71f2c8dce52343d/uipath_langchain-0.0.88.tar.gz", hash = "sha256:f06cc80c9499ae4309275119a9abf5d74c881aaef6731c6efb5b525a1291ef33", size = 1188502 }
1933
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/d0/945364a318dd04363364be56db5e771e0996ac0ae8487ebc28518da1274a/uipath_langchain-0.0.90.tar.gz", hash = "sha256:9cc19b71c6a05223771f36f1906737852a0b1f607757b740e0afad7e131872ed", size = 1475658 }
1859
1934
  wheels = [
1860
- { url = "https://files.pythonhosted.org/packages/3a/7a/68ec6fcb4698af7f27c30a2107c349fb6115b84373dba38413346e8c5a57/uipath_langchain-0.0.88-py3-none-any.whl", hash = "sha256:78c92bebbd4a3651adcf914d3563a551222bef86f54cb3eb270d93a39ede7d28", size = 50641 },
1935
+ { url = "https://files.pythonhosted.org/packages/20/42/2238adcdad8b1184e0ff716a0d14918ddd5ff9f833504aed99ac8b537c45/uipath_langchain-0.0.90-py3-none-any.whl", hash = "sha256:eddcb8d3e72ed09e89c79300e03b7793d8567edf47f3f3338c4ad55ce18540b6", size = 50995 },
1861
1936
  ]
1862
1937
 
1863
1938
  [[package]]
@@ -1869,6 +1944,70 @@ wheels = [
1869
1944
  { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
1870
1945
  ]
1871
1946
 
1947
+ [[package]]
1948
+ name = "wrapt"
1949
+ version = "1.17.2"
1950
+ source = { registry = "https://pypi.org/simple" }
1951
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 }
1952
+ wheels = [
1953
+ { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307 },
1954
+ { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486 },
1955
+ { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777 },
1956
+ { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314 },
1957
+ { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947 },
1958
+ { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778 },
1959
+ { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716 },
1960
+ { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548 },
1961
+ { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334 },
1962
+ { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427 },
1963
+ { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774 },
1964
+ { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308 },
1965
+ { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488 },
1966
+ { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776 },
1967
+ { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776 },
1968
+ { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420 },
1969
+ { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199 },
1970
+ { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307 },
1971
+ { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025 },
1972
+ { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879 },
1973
+ { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419 },
1974
+ { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773 },
1975
+ { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 },
1976
+ { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 },
1977
+ { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 },
1978
+ { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 },
1979
+ { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 },
1980
+ { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 },
1981
+ { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 },
1982
+ { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 },
1983
+ { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 },
1984
+ { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 },
1985
+ { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 },
1986
+ { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 },
1987
+ { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 },
1988
+ { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 },
1989
+ { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 },
1990
+ { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 },
1991
+ { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 },
1992
+ { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 },
1993
+ { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 },
1994
+ { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 },
1995
+ { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 },
1996
+ { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 },
1997
+ { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 },
1998
+ { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 },
1999
+ { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 },
2000
+ { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 },
2001
+ { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 },
2002
+ { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 },
2003
+ { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 },
2004
+ { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 },
2005
+ { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 },
2006
+ { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 },
2007
+ { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 },
2008
+ { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 },
2009
+ ]
2010
+
1872
2011
  [[package]]
1873
2012
  name = "xxhash"
1874
2013
  version = "3.5.0"
@@ -2020,6 +2159,15 @@ wheels = [
2020
2159
  { url = "https://files.pythonhosted.org/packages/f5/4b/a06e0ec3d155924f77835ed2d167ebd3b211a7b0853da1cf8d8414d784ef/yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", size = 45109 },
2021
2160
  ]
2022
2161
 
2162
+ [[package]]
2163
+ name = "zipp"
2164
+ version = "3.21.0"
2165
+ source = { registry = "https://pypi.org/simple" }
2166
+ sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 }
2167
+ wheels = [
2168
+ { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 },
2169
+ ]
2170
+
2023
2171
  [[package]]
2024
2172
  name = "zstandard"
2025
2173
  version = "0.23.0"
@@ -71,8 +71,8 @@ def input(state: GraphInput):
71
71
  "next": "",
72
72
  }
73
73
 
74
- def supervisor_node(state: State) -> Command[Literal[*members]] | GraphOutput:
75
- response = llm.with_structured_output(Router).invoke(state["messages"])
74
+ async def supervisor_node(state: State) -> Command[Literal[*members]] | GraphOutput:
75
+ response = await llm.with_structured_output(Router).ainvoke(state["messages"])
76
76
  goto = response["next"]
77
77
  if goto == "FINISH":
78
78
  return GraphOutput(answer=state["messages"][-1].content)
@@ -84,8 +84,8 @@ research_agent = create_react_agent(
84
84
  )
85
85
 
86
86
 
87
- def research_node(state: State) -> Command[Literal["supervisor"]]:
88
- result = research_agent.invoke(state)
87
+ async def research_node(state: State) -> Command[Literal["supervisor"]]:
88
+ result = await research_agent.ainvoke(state)
89
89
  return Command(
90
90
  update={
91
91
  "messages": [
@@ -100,8 +100,8 @@ def research_node(state: State) -> Command[Literal["supervisor"]]:
100
100
  code_agent = create_react_agent(llm, tools=[python_repl_tool])
101
101
 
102
102
 
103
- def code_node(state: State) -> Command[Literal["supervisor"]]:
104
- result = code_agent.invoke(state)
103
+ async def code_node(state: State) -> Command[Literal["supervisor"]]:
104
+ result = await code_agent.ainvoke(state)
105
105
  return Command(
106
106
  update={
107
107
  "messages": [