uipath-langchain 0.1.39__tar.gz → 0.1.42__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.
Files changed (510) hide show
  1. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/PKG-INFO +2 -2
  2. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/pyproject.toml +2 -2
  3. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/escalate_action.py +105 -36
  4. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/guardrail_nodes.py +19 -5
  5. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/guardrails_factory.py +12 -10
  6. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/utils.py +27 -31
  7. uipath_langchain-0.1.42/src/uipath_langchain/agent/react/file_type_handler.py +123 -0
  8. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/guardrails/guardrails_subgraph.py +57 -6
  9. uipath_langchain-0.1.42/src/uipath_langchain/agent/react/llm_with_files.py +76 -0
  10. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_escalate_action.py +235 -198
  11. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_agent_init_guardrails_subgraph.py +14 -14
  12. uipath_langchain-0.1.42/tests/agent/guardrails/test_extraction_utils.py +153 -0
  13. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrails_factory.py +2 -2
  14. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/uv.lock +5 -5
  15. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.cursorrules +0 -0
  16. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.editorconfig +0 -0
  17. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.gitattributes +0 -0
  18. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/copilot-instructions.md +0 -0
  19. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/cd.yml +0 -0
  20. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/ci.yml +0 -0
  21. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/commitlint.yml +0 -0
  22. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/integration_tests.yml +0 -0
  23. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/lint-custom-version.yml +0 -0
  24. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/lint.yml +0 -0
  25. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-dev.yml +0 -0
  26. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-docs.yml +0 -0
  27. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-prior-stable-version.yml +0 -0
  28. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/slack.yml +0 -0
  29. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/test-custom-version.yml +0 -0
  30. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/test.yml +0 -0
  31. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.gitignore +0 -0
  32. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pipelines/security-scans.yml +0 -0
  33. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pipelines/variables.yml +0 -0
  34. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pre-commit-config.yaml +0 -0
  35. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.python-version +0 -0
  36. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.vscode/extensions.json +0 -0
  37. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.vscode/settings.json +0 -0
  38. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/CONTRIBUTING.md +0 -0
  39. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/LICENSE +0 -0
  40. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/README.md +0 -0
  41. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/chat_models.md +0 -0
  42. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/context_grounding.md +0 -0
  43. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/human_in_the_loop.md +0 -0
  44. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start.md +0 -0
  45. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
  46. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/cloud_env_var_light.png +0 -0
  47. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/invoke_output_dark.png +0 -0
  48. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/invoke_output_light.png +0 -0
  49. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
  50. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-index-1.png +0 -0
  51. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-index-2.png +0 -0
  52. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-process.png +0 -0
  53. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
  54. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
  55. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
  56. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/folder-path.png +0 -0
  57. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/job-info.png +0 -0
  58. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/output.png +0 -0
  59. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/process-page.png +0 -0
  60. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/researcher-1.png +0 -0
  61. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/researcher-2.png +0 -0
  62. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/run-process-1.png +0 -0
  63. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/run-process-2.png +0 -0
  64. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
  65. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  66. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  67. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  68. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  69. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  70. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  71. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  72. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  73. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  74. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  75. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  76. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  77. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  78. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  79. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  80. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  81. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/start-job.png +0 -0
  82. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  83. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/CLI_REFERENCE.md +0 -0
  84. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/REQUIRED_STRUCTURE.md +0 -0
  85. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/SDK_REFERENCE.md +0 -0
  86. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/AGENTS.md +0 -0
  87. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/CLAUDE.md +0 -0
  88. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/README.md +0 -0
  89. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/bindings.json +0 -0
  90. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/entry-points.json +0 -0
  91. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/env.example +0 -0
  92. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
  93. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
  94. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/langgraph.json +0 -0
  95. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/pyproject.toml +0 -0
  96. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
  97. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
  98. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
  99. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
  100. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/uipath.json +0 -0
  101. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/uv.lock +0 -0
  102. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/README.md +0 -0
  103. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/CLI_REFERENCE.md +0 -0
  104. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  105. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/SDK_REFERENCE.md +0 -0
  106. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/AGENTS.md +0 -0
  107. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/CLAUDE.md +0 -0
  108. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/README.md +0 -0
  109. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/agent.mermaid +0 -0
  110. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/bindings.json +0 -0
  111. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/entry-points.json +0 -0
  112. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/graph.py +0 -0
  113. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/langgraph.json +0 -0
  114. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/pyproject.toml +0 -0
  115. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/uipath.json +0 -0
  116. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/uv.lock +0 -0
  117. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/CLI_REFERENCE.md +0 -0
  118. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  119. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/SDK_REFERENCE.md +0 -0
  120. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.env.example +0 -0
  121. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/AGENTS.md +0 -0
  122. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/CLAUDE.md +0 -0
  123. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/README.md +0 -0
  124. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/agent.mermaid +0 -0
  125. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/bindings.json +0 -0
  126. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/entry-points.json +0 -0
  127. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/graph.py +0 -0
  128. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/langgraph.json +0 -0
  129. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/pyproject.toml +0 -0
  130. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/uipath.json +0 -0
  131. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/uv.lock +0 -0
  132. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/CLI_REFERENCE.md +0 -0
  133. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  134. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/SDK_REFERENCE.md +0 -0
  135. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.env.example +0 -0
  136. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/AGENTS.md +0 -0
  137. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/CLAUDE.md +0 -0
  138. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/README.md +0 -0
  139. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/agent.mermaid +0 -0
  140. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/bindings.json +0 -0
  141. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/entry-points.json +0 -0
  142. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/graph.py +0 -0
  143. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/langgraph.json +0 -0
  144. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/pyproject.toml +0 -0
  145. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/uipath.json +0 -0
  146. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/uv.lock +0 -0
  147. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/CLI_REFERENCE.md +0 -0
  148. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  149. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/SDK_REFERENCE.md +0 -0
  150. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.env.example +0 -0
  151. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/AGENTS.md +0 -0
  152. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/CLAUDE.md +0 -0
  153. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/README.md +0 -0
  154. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/agent.mermaid +0 -0
  155. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/bindings.json +0 -0
  156. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/entry-points.json +0 -0
  157. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/graph.py +0 -0
  158. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/langgraph.json +0 -0
  159. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/pyproject.toml +0 -0
  160. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/uipath.json +0 -0
  161. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/uv.lock +0 -0
  162. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/CLI_REFERENCE.md +0 -0
  163. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  164. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/SDK_REFERENCE.md +0 -0
  165. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/AGENTS.md +0 -0
  166. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/CLAUDE.md +0 -0
  167. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/README.md +0 -0
  168. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/agent.mermaid +0 -0
  169. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/bindings.json +0 -0
  170. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/entry-points.json +0 -0
  171. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/graph.py +0 -0
  172. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/langgraph.json +0 -0
  173. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/pyproject.toml +0 -0
  174. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/uipath.json +0 -0
  175. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/uv.lock +0 -0
  176. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/CLI_REFERENCE.md +0 -0
  177. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  178. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/SDK_REFERENCE.md +0 -0
  179. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.env.template +0 -0
  180. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.python-version +0 -0
  181. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.vscode/launch.json +0 -0
  182. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/AGENTS.md +0 -0
  183. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/CLAUDE.md +0 -0
  184. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/README.md +0 -0
  185. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/agent.mermaid +0 -0
  186. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/bindings.json +0 -0
  187. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/entry-points.json +0 -0
  188. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/input.json +0 -0
  189. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/langgraph.json +0 -0
  190. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/pyproject.toml +0 -0
  191. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
  192. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
  193. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
  194. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/uipath.json +0 -0
  195. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/uv.lock +0 -0
  196. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/CLI_REFERENCE.md +0 -0
  197. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/REQUIRED_STRUCTURE.md +0 -0
  198. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/SDK_REFERENCE.md +0 -0
  199. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/AGENTS.md +0 -0
  200. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/CLAUDE.md +0 -0
  201. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/README.md +0 -0
  202. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/bindings.json +0 -0
  203. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/database.py +0 -0
  204. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/entry-points.json +0 -0
  205. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/main.py +0 -0
  206. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/models.py +0 -0
  207. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/pyproject.toml +0 -0
  208. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/schemas.py +0 -0
  209. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/templates/index.html +0 -0
  210. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/uipath.json +0 -0
  211. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/uv.lock +0 -0
  212. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/CLI_REFERENCE.md +0 -0
  213. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/REQUIRED_STRUCTURE.md +0 -0
  214. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/SDK_REFERENCE.md +0 -0
  215. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  216. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/AGENTS.md +0 -0
  217. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/CLAUDE.md +0 -0
  218. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  219. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/bindings.json +0 -0
  220. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  221. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/entry-points.json +0 -0
  222. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  223. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  224. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  225. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  226. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  227. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  228. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  229. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  230. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  231. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/CLI_REFERENCE.md +0 -0
  232. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/REQUIRED_STRUCTURE.md +0 -0
  233. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/SDK_REFERENCE.md +0 -0
  234. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  235. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/AGENTS.md +0 -0
  236. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/CLAUDE.md +0 -0
  237. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  238. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  239. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/bindings.json +0 -0
  240. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/entry-points.json +0 -0
  241. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  242. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  243. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  244. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  245. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  246. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/CLI_REFERENCE.md +0 -0
  247. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
  248. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/SDK_REFERENCE.md +0 -0
  249. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.env.example +0 -0
  250. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/AGENTS.md +0 -0
  251. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/CLAUDE.md +0 -0
  252. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/README.md +0 -0
  253. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/agent.mermaid +0 -0
  254. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/bindings.json +0 -0
  255. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/entry-points.json +0 -0
  256. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/input.json +0 -0
  257. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/langgraph.json +0 -0
  258. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/main.py +0 -0
  259. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/pyproject.toml +0 -0
  260. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/uipath.json +0 -0
  261. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/uv.lock +0 -0
  262. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/CLI_REFERENCE.md +0 -0
  263. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/REQUIRED_STRUCTURE.md +0 -0
  264. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/SDK_REFERENCE.md +0 -0
  265. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.env.example +0 -0
  266. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/AGENTS.md +0 -0
  267. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/CLAUDE.md +0 -0
  268. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/README.md +0 -0
  269. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/bindings.json +0 -0
  270. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/entry-points.json +0 -0
  271. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/main.py +0 -0
  272. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/pyproject.toml +0 -0
  273. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/uipath.json +0 -0
  274. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/uv.lock +0 -0
  275. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/CLI_REFERENCE.md +0 -0
  276. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/REQUIRED_STRUCTURE.md +0 -0
  277. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/SDK_REFERENCE.md +0 -0
  278. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.env.example +0 -0
  279. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/AGENTS.md +0 -0
  280. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/CLAUDE.md +0 -0
  281. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/README.md +0 -0
  282. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/agent.mermaid +0 -0
  283. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/bindings.json +0 -0
  284. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/entry-points.json +0 -0
  285. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/graph.py +0 -0
  286. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/langgraph.json +0 -0
  287. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/pyproject.toml +0 -0
  288. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/uipath.json +0 -0
  289. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/uv.lock +0 -0
  290. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/CLI_REFERENCE.md +0 -0
  291. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/REQUIRED_STRUCTURE.md +0 -0
  292. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/SDK_REFERENCE.md +0 -0
  293. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.env.example +0 -0
  294. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/AGENTS.md +0 -0
  295. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/CLAUDE.md +0 -0
  296. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/README.md +0 -0
  297. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/agent.mermaid +0 -0
  298. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/bindings.json +0 -0
  299. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/entry-points.json +0 -0
  300. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/langgraph.json +0 -0
  301. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/pyproject.toml +0 -0
  302. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  303. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  304. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  305. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/uipath.json +0 -0
  306. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/uv.lock +0 -0
  307. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/CLI_REFERENCE.md +0 -0
  308. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/REQUIRED_STRUCTURE.md +0 -0
  309. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/SDK_REFERENCE.md +0 -0
  310. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.env.example +0 -0
  311. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/AGENTS.md +0 -0
  312. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/CLAUDE.md +0 -0
  313. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/README.md +0 -0
  314. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/agent.mermaid +0 -0
  315. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/bindings.json +0 -0
  316. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/entry-points.json +0 -0
  317. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/langgraph.json +0 -0
  318. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/main.py +0 -0
  319. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/pyproject.toml +0 -0
  320. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/uipath.json +0 -0
  321. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/uv.lock +0 -0
  322. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/CLI_REFERENCE.md +0 -0
  323. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/REQUIRED_STRUCTURE.md +0 -0
  324. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/SDK_REFERENCE.md +0 -0
  325. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.env.example +0 -0
  326. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/AGENTS.md +0 -0
  327. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/CLAUDE.md +0 -0
  328. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/README.md +0 -0
  329. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/agent.mermaid +0 -0
  330. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/bindings.json +0 -0
  331. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/entry-points.json +0 -0
  332. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  333. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/langgraph.json +0 -0
  334. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/main.py +0 -0
  335. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/pyproject.toml +0 -0
  336. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/uipath.json +0 -0
  337. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/uv.lock +0 -0
  338. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/scripts/lint_httpx_client.py +0 -0
  339. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/__init__.py +0 -0
  340. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/__init__.py +0 -0
  341. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
  342. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
  343. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/cli_init.py +0 -0
  344. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/cli_new.py +0 -0
  345. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_resources/AGENTS.md +0 -0
  346. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_resources/REQUIRED_STRUCTURE.md +0 -0
  347. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_tracing/__init__.py +0 -0
  348. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
  349. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/__init__.py +0 -0
  350. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  351. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_settings.py +0 -0
  352. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  353. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/exceptions/__init__.py +0 -0
  354. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/exceptions/exceptions.py +0 -0
  355. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/__init__.py +0 -0
  356. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/__init__.py +0 -0
  357. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/base_action.py +0 -0
  358. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/block_action.py +0 -0
  359. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/filter_action.py +0 -0
  360. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/log_action.py +0 -0
  361. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/types.py +0 -0
  362. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/__init__.py +0 -0
  363. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/agent.py +0 -0
  364. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/constants.py +0 -0
  365. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/init_node.py +0 -0
  366. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/llm_node.py +0 -0
  367. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/router.py +0 -0
  368. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/terminate_node.py +0 -0
  369. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/tools/__init__.py +0 -0
  370. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/tools/tools.py +0 -0
  371. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/types.py +0 -0
  372. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/utils.py +0 -0
  373. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/__init__.py +0 -0
  374. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/context_tool.py +0 -0
  375. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/escalation_tool.py +0 -0
  376. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/integration_tool.py +0 -0
  377. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/mcp_tool.py +0 -0
  378. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/process_tool.py +0 -0
  379. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/static_args.py +0 -0
  380. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/structured_tool_with_output_type.py +0 -0
  381. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/tool_factory.py +0 -0
  382. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/tool_node.py +0 -0
  383. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/utils.py +0 -0
  384. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/wrappers/__init__.py +0 -0
  385. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/wrappers/static_args_wrapper.py +0 -0
  386. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/__init__.py +0 -0
  387. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/bedrock.py +0 -0
  388. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/mapper.py +0 -0
  389. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/models.py +0 -0
  390. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/openai.py +0 -0
  391. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/supported_models.py +0 -0
  392. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/vertex.py +0 -0
  393. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/embeddings/__init__.py +0 -0
  394. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  395. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/middlewares.py +0 -0
  396. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/py.typed +0 -0
  397. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/retrievers/__init__.py +0 -0
  398. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  399. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/__init__.py +0 -0
  400. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/_serialize.py +0 -0
  401. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/config.py +0 -0
  402. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/errors.py +0 -0
  403. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/factory.py +0 -0
  404. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/graph.py +0 -0
  405. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/runtime.py +0 -0
  406. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/schema.py +0 -0
  407. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/storage.py +0 -0
  408. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/vectorstores/__init__.py +0 -0
  409. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  410. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/expected_traces.json +0 -0
  411. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/input.json +0 -0
  412. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/langgraph.json +0 -0
  413. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/pyproject.toml +0 -0
  414. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/run.sh +0 -0
  415. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/src/assert.py +0 -0
  416. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/src/main.py +0 -0
  417. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/__init__.py +0 -0
  418. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/console.py +0 -0
  419. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/trace_assert.py +0 -0
  420. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/validate_output.sh +0 -0
  421. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/expected_raw.json +0 -0
  422. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/expected_traces.json +0 -0
  423. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/input.json +0 -0
  424. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/langgraph.json +0 -0
  425. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/pyproject.toml +0 -0
  426. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/run.sh +0 -0
  427. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/src/assert.py +0 -0
  428. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/src/graph.py +0 -0
  429. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/uv.lock +0 -0
  430. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/bindings.json +0 -0
  431. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/entry-points.json +0 -0
  432. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/expected_traces.json +0 -0
  433. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/input.json +0 -0
  434. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/langgraph.json +0 -0
  435. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/pyproject.toml +0 -0
  436. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/run.sh +0 -0
  437. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/assert.py +0 -0
  438. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/main.py +0 -0
  439. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/test_debug.py +0 -0
  440. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/bindings.json +0 -0
  441. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/input.json +0 -0
  442. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/langgraph.json +0 -0
  443. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/pyproject.toml +0 -0
  444. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/run.sh +0 -0
  445. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/assert.py +0 -0
  446. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/graph.py +0 -0
  447. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/test_dev.py +0 -0
  448. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/expected_traces.json +0 -0
  449. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/input.json +0 -0
  450. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/pyproject.toml +0 -0
  451. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/run.sh +0 -0
  452. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/src/assert.py +0 -0
  453. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/expected_traces.json +0 -0
  454. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/input.json +0 -0
  455. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/langgraph.json +0 -0
  456. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/pyproject.toml +0 -0
  457. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/run.sh +0 -0
  458. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/assert.py +0 -0
  459. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  460. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  461. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  462. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/uv.lock +0 -0
  463. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/expected_traces.json +0 -0
  464. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/input.json +0 -0
  465. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/langgraph.json +0 -0
  466. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/pyproject.toml +0 -0
  467. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/raw_traces.jsonl +0 -0
  468. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/run.sh +0 -0
  469. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/src/assert.py +0 -0
  470. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/src/main.py +0 -0
  471. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/uv.lock +0 -0
  472. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/__init__.py +0 -0
  473. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_block_action.py +0 -0
  474. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_filter_action.py +0 -0
  475. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_log_action.py +0 -0
  476. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_agent_terminate_guardrails_subgraph.py +0 -0
  477. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_nodes.py +0 -0
  478. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_stage_filtering.py +0 -0
  479. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_utils.py +0 -0
  480. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrails_utils.py +0 -0
  481. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_llm_guardrails_subgraph.py +0 -0
  482. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_tool_guardrails_subgraph.py +0 -0
  483. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/react/__init__.py +0 -0
  484. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/react/test_utils.py +0 -0
  485. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_integration_tool.py +0 -0
  486. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_static_args.py +0 -0
  487. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_tool_node.py +0 -0
  488. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_utils.py +0 -0
  489. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/chat/__init__.py +0 -0
  490. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/chat/test_openai_url_rewrite.py +0 -0
  491. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/conftest.py +0 -0
  492. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/langgraph.json +0 -0
  493. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/simple_agent.py +0 -0
  494. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/uipath.json +0 -0
  495. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_graph.py +0 -0
  496. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_init.py +0 -0
  497. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_run.py +0 -0
  498. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_schema.py +0 -0
  499. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/__init__.py +0 -0
  500. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/conftest.py +0 -0
  501. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
  502. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
  503. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
  504. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/langgraph.json +0 -0
  505. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
  506. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/uipath.json +0 -0
  507. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_action_trigger.py +0 -0
  508. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_hitl_api_trigger.py +0 -0
  509. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_hitl_job_trigger.py +0 -0
  510. {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/test_dummy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.1.39
3
+ Version: 0.1.42
4
4
  Summary: Python SDK that enables developers to build and deploy LangGraph agents to the UiPath Cloud Platform
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-langchain-python
@@ -27,7 +27,7 @@ Requires-Dist: mcp==1.24.0
27
27
  Requires-Dist: openinference-instrumentation-langchain>=0.1.56
28
28
  Requires-Dist: pydantic-settings>=2.6.0
29
29
  Requires-Dist: python-dotenv>=1.0.1
30
- Requires-Dist: uipath<2.3.0,>=2.2.35
30
+ Requires-Dist: uipath<2.3.0,>=2.2.41
31
31
  Provides-Extra: bedrock
32
32
  Requires-Dist: boto3-stubs>=1.41.4; extra == 'bedrock'
33
33
  Requires-Dist: langchain-aws>=0.2.35; extra == 'bedrock'
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.1.39"
3
+ version = "0.1.42"
4
4
  description = "Python SDK that enables developers to build and deploy LangGraph agents to the UiPath Cloud Platform"
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.11"
7
7
  dependencies = [
8
- "uipath>=2.2.35, <2.3.0",
8
+ "uipath>=2.2.41, <2.3.0",
9
9
  "langgraph>=1.0.0, <2.0.0",
10
10
  "langchain-core>=1.0.0, <2.0.0",
11
11
  "aiosqlite==0.21.0",
@@ -90,15 +90,20 @@ class EscalateAction(GuardrailAction):
90
90
  # PRE_EXECUTION: Only Inputs field from last message
91
91
  input_content = _extract_escalation_content(
92
92
  state.messages[-1],
93
+ state,
93
94
  scope,
94
95
  execution_stage,
95
96
  guarded_component_name,
96
97
  )
97
98
  data["Inputs"] = input_content
98
99
  else: # POST_EXECUTION
99
- # Extract Inputs from second-to-last message using PRE_EXECUTION logic
100
+ if scope == GuardrailScope.AGENT:
101
+ input_message = state.messages[1]
102
+ else:
103
+ input_message = state.messages[-2]
100
104
  input_content = _extract_escalation_content(
101
- state.messages[-2],
105
+ input_message,
106
+ state,
102
107
  scope,
103
108
  ExecutionStage.PRE_EXECUTION,
104
109
  guarded_component_name,
@@ -107,6 +112,7 @@ class EscalateAction(GuardrailAction):
107
112
  # Extract Outputs from last message using POST_EXECUTION logic
108
113
  output_content = _extract_escalation_content(
109
114
  state.messages[-1],
115
+ state,
110
116
  scope,
111
117
  execution_stage,
112
118
  guarded_component_name,
@@ -119,7 +125,7 @@ class EscalateAction(GuardrailAction):
119
125
  CreateEscalation(
120
126
  app_name=self.app_name,
121
127
  app_folder_path=self.app_folder_path,
122
- title=self.app_name,
128
+ title="Agents Guardrail Task",
123
129
  data=data,
124
130
  assignee=self.assignee,
125
131
  )
@@ -137,7 +143,7 @@ class EscalateAction(GuardrailAction):
137
143
  raise AgentTerminationException(
138
144
  code=UiPathErrorCode.EXECUTION_ERROR,
139
145
  title="Escalation rejected",
140
- detail=f"Action was rejected after reviewing the task created by guardrail [{guardrail.name}]. Please contact your administrator.",
146
+ detail=f"Please contact your administrator. Action was rejected after reviewing the task created by guardrail [{guardrail.name}], with reason: {escalation_result.data['Reason']}",
141
147
  )
142
148
 
143
149
  return node_name, _node
@@ -179,8 +185,8 @@ def _validate_message_count(
179
185
  def _get_node_name(
180
186
  execution_stage: ExecutionStage, guardrail: BaseGuardrail, scope: GuardrailScope
181
187
  ) -> str:
182
- sanitized = re.sub(r"\W+", "_", guardrail.name).strip("_").lower()
183
- node_name = f"{sanitized}_hitl_{execution_stage.name.lower()}_{scope.lower()}"
188
+ raw_node_name = f"{scope.name}_{execution_stage.name}_{guardrail.name}_hitl"
189
+ node_name = re.sub(r"\W+", "_", raw_node_name.lower()).strip("_")
184
190
  return node_name
185
191
 
186
192
 
@@ -200,8 +206,8 @@ def _process_escalation_response(
200
206
  execution_stage: The execution stage (PRE_EXECUTION or POST_EXECUTION).
201
207
 
202
208
  Returns:
203
- For LLM/TOOL scope: Command to update messages with reviewed inputs/outputs, or empty dict.
204
- For AGENT scope: Empty dict (no message alteration).
209
+ Command updates for the state (e.g., updating messages / tool calls / agent_result),
210
+ or an empty dict if no update is needed.
205
211
  """
206
212
  match scope:
207
213
  case GuardrailScope.LLM:
@@ -213,8 +219,71 @@ def _process_escalation_response(
213
219
  state, escalation_result, execution_stage, guarded_node_name
214
220
  )
215
221
  case GuardrailScope.AGENT:
222
+ return _process_agent_escalation_response(
223
+ state, escalation_result, execution_stage
224
+ )
225
+
226
+
227
+ def _process_agent_escalation_response(
228
+ state: AgentGuardrailsGraphState,
229
+ escalation_result: Dict[str, Any],
230
+ execution_stage: ExecutionStage,
231
+ ) -> Dict[str, Any] | Command[Any]:
232
+ """Process escalation response for AGENT scope guardrails.
233
+
234
+ For AGENT scope:
235
+ - PRE_EXECUTION: updates the last message content using `ReviewedInputs`
236
+ - POST_EXECUTION: updates `agent_result` using `ReviewedOutputs`
237
+
238
+ Args:
239
+ state: The current agent graph state.
240
+ escalation_result: The result from the escalation interrupt containing reviewed inputs/outputs.
241
+ execution_stage: The execution stage (PRE_EXECUTION or POST_EXECUTION).
242
+
243
+ Returns:
244
+ Command to update state, or empty dict if no updates are needed.
245
+
246
+ Raises:
247
+ AgentTerminationException: If escalation response processing fails.
248
+ """
249
+ try:
250
+ reviewed_field = get_reviewed_field_name(execution_stage)
251
+ if reviewed_field not in escalation_result:
252
+ return {}
253
+
254
+ reviewed_value = escalation_result.get(reviewed_field)
255
+ if not reviewed_value:
216
256
  return {}
217
257
 
258
+ try:
259
+ parsed = json.loads(reviewed_value)
260
+ except json.JSONDecodeError:
261
+ parsed = reviewed_value
262
+
263
+ if execution_stage == ExecutionStage.PRE_EXECUTION:
264
+ msgs = state.messages.copy()
265
+ if not msgs:
266
+ return {}
267
+ msgs[-1].content = parsed
268
+ return Command(update={"messages": msgs})
269
+
270
+ # POST_EXECUTION: update agent_result
271
+ return Command(update={"agent_result": parsed})
272
+ except Exception as e:
273
+ raise AgentTerminationException(
274
+ code=UiPathErrorCode.EXECUTION_ERROR,
275
+ title="Escalation rejected",
276
+ detail=str(e),
277
+ ) from e
278
+
279
+
280
+ def get_reviewed_field_name(execution_stage):
281
+ return (
282
+ "ReviewedInputs"
283
+ if execution_stage == ExecutionStage.PRE_EXECUTION
284
+ else "ReviewedOutputs"
285
+ )
286
+
218
287
 
219
288
  def _process_llm_escalation_response(
220
289
  state: AgentGuardrailsGraphState,
@@ -237,11 +306,7 @@ def _process_llm_escalation_response(
237
306
  AgentTerminationException: If escalation response processing fails.
238
307
  """
239
308
  try:
240
- reviewed_field = (
241
- "ReviewedInputs"
242
- if execution_stage == ExecutionStage.PRE_EXECUTION
243
- else "ReviewedOutputs"
244
- )
309
+ reviewed_field = get_reviewed_field_name(execution_stage)
245
310
 
246
311
  msgs = state.messages.copy()
247
312
  if not msgs or reviewed_field not in escalation_result:
@@ -342,11 +407,7 @@ def _process_tool_escalation_response(
342
407
  AgentTerminationException: If escalation response processing fails.
343
408
  """
344
409
  try:
345
- reviewed_field = (
346
- "ReviewedInputs"
347
- if execution_stage == ExecutionStage.PRE_EXECUTION
348
- else "ReviewedOutputs"
349
- )
410
+ reviewed_field = get_reviewed_field_name(execution_stage)
350
411
 
351
412
  msgs = state.messages.copy()
352
413
  if not msgs or reviewed_field not in escalation_result:
@@ -404,6 +465,7 @@ def _process_tool_escalation_response(
404
465
 
405
466
  def _extract_escalation_content(
406
467
  message: BaseMessage,
468
+ state: AgentGuardrailsGraphState,
407
469
  scope: GuardrailScope,
408
470
  execution_stage: ExecutionStage,
409
471
  guarded_node_name: str,
@@ -424,13 +486,36 @@ def _extract_escalation_content(
424
486
  case GuardrailScope.LLM:
425
487
  return _extract_llm_escalation_content(message, execution_stage)
426
488
  case GuardrailScope.AGENT:
427
- return _extract_agent_escalation_content(message, execution_stage)
489
+ return _extract_agent_escalation_content(message, state, execution_stage)
428
490
  case GuardrailScope.TOOL:
429
491
  return _extract_tool_escalation_content(
430
492
  message, execution_stage, guarded_node_name
431
493
  )
432
494
 
433
495
 
496
+ def _extract_agent_escalation_content(
497
+ message: BaseMessage,
498
+ state: AgentGuardrailsGraphState,
499
+ execution_stage: ExecutionStage,
500
+ ) -> str | list[str | Dict[str, Any]]:
501
+ """Extract escalation content for AGENT scope guardrails.
502
+
503
+ Args:
504
+ message: The message used to extract the agent input content.
505
+ state: The current agent guardrails graph state. Used to read `agent_result` for POST_EXECUTION.
506
+ execution_stage: PRE_EXECUTION or POST_EXECUTION.
507
+
508
+ Returns:
509
+ - PRE_EXECUTION: the agent input string (from message content).
510
+ - POST_EXECUTION: a JSON-serialized representation of `state.agent_result`.
511
+ """
512
+ if execution_stage == ExecutionStage.PRE_EXECUTION:
513
+ return get_message_content(cast(AnyMessage, message))
514
+
515
+ output_content = state.agent_result or ""
516
+ return json.dumps(output_content)
517
+
518
+
434
519
  def _extract_llm_escalation_content(
435
520
  message: BaseMessage, execution_stage: ExecutionStage
436
521
  ) -> str | list[str | Dict[str, Any]]:
@@ -449,8 +534,7 @@ def _extract_llm_escalation_content(
449
534
  if isinstance(message, ToolMessage):
450
535
  return message.content
451
536
 
452
- content = get_message_content(cast(AnyMessage, message))
453
- return json.dumps(content) if content else ""
537
+ return get_message_content(cast(AnyMessage, message))
454
538
 
455
539
  # For AI messages, process tool calls if present
456
540
  if isinstance(message, AIMessage):
@@ -470,21 +554,6 @@ def _extract_llm_escalation_content(
470
554
  return get_message_content(cast(AnyMessage, message))
471
555
 
472
556
 
473
- def _extract_agent_escalation_content(
474
- message: BaseMessage, execution_stage: ExecutionStage
475
- ) -> str | list[str | Dict[str, Any]]:
476
- """Extract escalation content for AGENT scope guardrails.
477
-
478
- Args:
479
- message: The message to extract content from.
480
- execution_stage: The execution stage (PRE_EXECUTION or POST_EXECUTION).
481
-
482
- Returns:
483
- str: Empty string (AGENT scope guardrails do not extract escalation content).
484
- """
485
- return ""
486
-
487
-
488
557
  def _extract_tool_escalation_content(
489
558
  message: BaseMessage, execution_stage: ExecutionStage, tool_name: str
490
559
  ) -> str | list[str | Dict[str, Any]]:
@@ -18,8 +18,9 @@ from uipath.runtime.errors import UiPathErrorCode
18
18
 
19
19
  from uipath_langchain.agent.guardrails.types import ExecutionStage
20
20
  from uipath_langchain.agent.guardrails.utils import (
21
- _extract_tool_input_data,
21
+ _extract_tool_args_from_message,
22
22
  _extract_tool_output_data,
23
+ _extract_tools_args_from_message,
23
24
  get_message_content,
24
25
  )
25
26
  from uipath_langchain.agent.react.types import AgentGuardrailsGraphState
@@ -188,7 +189,11 @@ def create_llm_guardrail_node(
188
189
  def _payload_generator(state: AgentGuardrailsGraphState) -> str:
189
190
  if not state.messages:
190
191
  return ""
191
- return get_message_content(state.messages[-1])
192
+ match execution_stage:
193
+ case ExecutionStage.PRE_EXECUTION:
194
+ return get_message_content(state.messages[-1])
195
+ case ExecutionStage.POST_EXECUTION:
196
+ return json.dumps(_extract_tools_args_from_message(state.messages[-1]))
192
197
 
193
198
  return _create_guardrail_node(
194
199
  guardrail,
@@ -273,8 +278,8 @@ def create_tool_guardrail_node(
273
278
  return ""
274
279
 
275
280
  if execution_stage == ExecutionStage.PRE_EXECUTION:
276
- # Extract tool args as dict and convert to JSON string
277
- args_dict = _extract_tool_input_data(state, tool_name, execution_stage)
281
+ last_message = state.messages[-1]
282
+ args_dict = _extract_tool_args_from_message(last_message, tool_name)
278
283
  if args_dict:
279
284
  return json.dumps(args_dict)
280
285
 
@@ -282,7 +287,16 @@ def create_tool_guardrail_node(
282
287
 
283
288
  # Create closures for input/output data extraction (for deterministic guardrails)
284
289
  def _input_data_extractor(state: AgentGuardrailsGraphState) -> dict[str, Any]:
285
- return _extract_tool_input_data(state, tool_name, execution_stage)
290
+ if execution_stage == ExecutionStage.PRE_EXECUTION:
291
+ if len(state.messages) < 1:
292
+ return {}
293
+ message = state.messages[-1]
294
+ else: # POST_EXECUTION
295
+ if len(state.messages) < 2:
296
+ return {}
297
+ message = state.messages[-2]
298
+
299
+ return _extract_tool_args_from_message(message, tool_name)
286
300
 
287
301
  def _output_data_extractor(state: AgentGuardrailsGraphState) -> dict[str, Any]:
288
302
  return _extract_tool_output_data(state)
@@ -17,6 +17,7 @@ from uipath.agent.models.agent import (
17
17
  AgentUnknownGuardrail,
18
18
  AgentWordOperator,
19
19
  AgentWordRule,
20
+ StandardRecipient,
20
21
  )
21
22
  from uipath.core.guardrails import (
22
23
  BooleanRule,
@@ -273,17 +274,18 @@ def build_guardrails_with_actions(
273
274
  )
274
275
  )
275
276
  elif isinstance(action, AgentGuardrailEscalateAction):
276
- result.append(
277
- (
278
- converted_guardrail,
279
- EscalateAction(
280
- app_name=action.app.name,
281
- app_folder_path=action.app.folder_name,
282
- version=action.app.version,
283
- assignee=action.recipient.value,
284
- ),
277
+ if isinstance(action.recipient, StandardRecipient):
278
+ result.append(
279
+ (
280
+ converted_guardrail,
281
+ EscalateAction(
282
+ app_name=action.app.name,
283
+ app_folder_path=action.app.folder_name,
284
+ version=action.app.version,
285
+ assignee=action.recipient.value,
286
+ ),
287
+ )
285
288
  )
286
- )
287
289
  elif isinstance(action, AgentGuardrailFilterAction):
288
290
  result.append((converted_guardrail, FilterAction(fields=action.fields)))
289
291
  return result
@@ -10,7 +10,6 @@ from langchain_core.messages import (
10
10
  ToolMessage,
11
11
  )
12
12
 
13
- from uipath_langchain.agent.guardrails.types import ExecutionStage
14
13
  from uipath_langchain.agent.react.types import AgentGuardrailsGraphState
15
14
  from uipath_langchain.agent.tools.utils import sanitize_tool_name
16
15
 
@@ -61,45 +60,42 @@ def _extract_tool_args_from_message(
61
60
  return parsed
62
61
  except json.JSONDecodeError:
63
62
  logger.warning(
64
- "Failed to parse tool args as JSON for tool '%s': %s",
65
- tool_name,
66
- args[:100] if len(args) > 100 else args,
63
+ "Failed to parse tool args as JSON for tool '%s'", tool_name
67
64
  )
68
65
  return {}
69
66
 
70
67
  return {}
71
68
 
72
69
 
73
- def _extract_tool_input_data(
74
- state: AgentGuardrailsGraphState, tool_name: str, execution_stage: ExecutionStage
75
- ) -> dict[str, Any]:
76
- """Extract tool call arguments as dict for deterministic guardrails.
70
+ def _extract_tools_args_from_message(message: AnyMessage) -> list[dict[str, Any]]:
71
+ if not isinstance(message, AIMessage):
72
+ return []
77
73
 
78
- Args:
79
- state: The current agent graph state.
80
- tool_name: Name of the tool to extract arguments from.
81
- execution_stage: PRE_EXECUTION or POST_EXECUTION.
74
+ if not message.tool_calls:
75
+ return []
82
76
 
83
- Returns:
84
- Dict containing tool call arguments, or empty dict if not found.
85
- - For PRE_EXECUTION: extracts from last message
86
- - For POST_EXECUTION: extracts from second-to-last message
87
- """
88
- if not state.messages:
89
- return {}
77
+ result: list[dict[str, Any]] = []
90
78
 
91
- # For PRE_EXECUTION, look at last message
92
- # For POST_EXECUTION, look at second-to-last message (before the ToolMessage)
93
- if execution_stage == ExecutionStage.PRE_EXECUTION:
94
- if len(state.messages) < 1:
95
- return {}
96
- message = state.messages[-1]
97
- else: # POST_EXECUTION
98
- if len(state.messages) < 2:
99
- return {}
100
- message = state.messages[-2]
101
-
102
- return _extract_tool_args_from_message(message, tool_name)
79
+ for tool_call in message.tool_calls:
80
+ args = (
81
+ tool_call.get("args")
82
+ if isinstance(tool_call, dict)
83
+ else getattr(tool_call, "args", None)
84
+ )
85
+ if args is not None:
86
+ # Args should already be a dict
87
+ if isinstance(args, dict):
88
+ result.append(args)
89
+ # If it's a JSON string, parse it
90
+ elif isinstance(args, str):
91
+ try:
92
+ parsed = json.loads(args)
93
+ if isinstance(parsed, dict):
94
+ result.append(parsed)
95
+ except json.JSONDecodeError:
96
+ logger.warning("Failed to parse tool args as JSON")
97
+
98
+ return result
103
99
 
104
100
 
105
101
  def _extract_tool_output_data(state: AgentGuardrailsGraphState) -> dict[str, Any]:
@@ -0,0 +1,123 @@
1
+ import base64
2
+ from enum import StrEnum
3
+ from typing import Any
4
+
5
+ import httpx
6
+ from uipath._utils._ssl_context import get_httpx_client_kwargs
7
+
8
+ IMAGE_MIME_TYPES: set[str] = {
9
+ "image/png",
10
+ "image/jpeg",
11
+ "image/gif",
12
+ "image/webp",
13
+ }
14
+
15
+
16
+ class LlmProvider(StrEnum):
17
+ OPENAI = "openai"
18
+ BEDROCK = "bedrock"
19
+ VERTEX = "vertex"
20
+ UNKNOWN = "unknown"
21
+
22
+
23
+ def is_pdf(mime_type: str) -> bool:
24
+ """Check if the MIME type represents a PDF document."""
25
+ return mime_type.lower() == "application/pdf"
26
+
27
+
28
+ def is_image(mime_type: str) -> bool:
29
+ """Check if the MIME type represents a supported image format (PNG, JPEG, GIF, WebP)."""
30
+ return mime_type.lower() in IMAGE_MIME_TYPES
31
+
32
+
33
+ def detect_provider(model_name: str) -> LlmProvider:
34
+ """Detect the LLM provider (Bedrock, OpenAI, or Vertex) based on the model name."""
35
+ if not model_name:
36
+ raise ValueError(f"Unsupported model: {model_name}")
37
+
38
+ model_lower = model_name.lower()
39
+
40
+ if "anthropic" in model_lower or "claude" in model_lower:
41
+ return LlmProvider.BEDROCK
42
+
43
+ if "gpt" in model_lower:
44
+ return LlmProvider.OPENAI
45
+
46
+ if "gemini" in model_lower:
47
+ return LlmProvider.VERTEX
48
+
49
+ raise ValueError(f"Unsupported model: {model_name}")
50
+
51
+
52
+ async def _download_file(url: str) -> str:
53
+ """Download a file from a URL and return its content as a base64 string."""
54
+ async with httpx.AsyncClient(**get_httpx_client_kwargs()) as client:
55
+ response = await client.get(url)
56
+ response.raise_for_status()
57
+ file_content = response.content
58
+
59
+ return base64.b64encode(file_content).decode("utf-8")
60
+
61
+
62
+ async def build_message_content_part_from_data(
63
+ url: str,
64
+ filename: str,
65
+ mime_type: str,
66
+ model: str,
67
+ ) -> dict[str, Any]:
68
+ """Download a file and build a provider-specific message content part.
69
+
70
+ The format varies based on the detected provider (Bedrock, OpenAI, or Vertex).
71
+ """
72
+ provider = detect_provider(model)
73
+
74
+ if provider == LlmProvider.BEDROCK:
75
+ raise ValueError("Anthropic models are not yet supported for file attachments")
76
+
77
+ if provider == LlmProvider.OPENAI:
78
+ return await _build_openai_content_part_from_data(
79
+ url, mime_type, filename, False
80
+ )
81
+
82
+ if provider == LlmProvider.VERTEX:
83
+ raise ValueError("Gemini models are not yet supported for file attachments")
84
+
85
+ raise ValueError(f"Unsupported provider: {provider}")
86
+
87
+
88
+ async def _build_openai_content_part_from_data(
89
+ url: str,
90
+ mime_type: str,
91
+ filename: str,
92
+ download_image: bool,
93
+ ) -> dict[str, Any]:
94
+ """Build a content part for OpenAI models (base64-encoded or URL reference)."""
95
+ if download_image:
96
+ base64_content = await _download_file(url)
97
+ if is_image(mime_type):
98
+ data_url = f"data:{mime_type};base64,{base64_content}"
99
+ return {
100
+ "type": "input_image",
101
+ "image_url": data_url,
102
+ }
103
+
104
+ if is_pdf(mime_type):
105
+ return {
106
+ "type": "input_file",
107
+ "filename": filename,
108
+ "file_data": base64_content,
109
+ }
110
+
111
+ elif is_image(mime_type):
112
+ return {
113
+ "type": "input_image",
114
+ "image_url": url,
115
+ }
116
+
117
+ elif is_pdf(mime_type):
118
+ return {
119
+ "type": "input_file",
120
+ "file_url": url,
121
+ }
122
+
123
+ raise ValueError(f"Unsupported mime_type: {mime_type}")
@@ -204,6 +204,16 @@ def create_llm_guardrails_subgraph(
204
204
  llm_node: tuple[str, Any],
205
205
  guardrails: Sequence[tuple[BaseGuardrail, GuardrailAction]] | None,
206
206
  ):
207
+ """Create a guarded LLM node.
208
+
209
+ Args:
210
+ llm_node: Tuple of (node_name, node_callable) for the LLM node.
211
+ guardrails: Optional sequence of (guardrail, action) tuples.
212
+
213
+ Returns:
214
+ Either the original node callable (if no applicable guardrails) or a compiled
215
+ LangGraph subgraph that enforces the configured guardrails.
216
+ """
207
217
  applicable_guardrails = [
208
218
  (guardrail, _)
209
219
  for (guardrail, _) in (guardrails or [])
@@ -226,8 +236,14 @@ def create_tools_guardrails_subgraph(
226
236
  tool_nodes: Mapping[str, RunnableCallable],
227
237
  guardrails: Sequence[tuple[BaseGuardrail, GuardrailAction]] | None,
228
238
  ) -> dict[str, RunnableCallable]:
229
- """Create tool nodes with guardrails.
239
+ """Create tool nodes with guardrails applied.
230
240
  Args:
241
+ tool_nodes: Mapping of tool name to a LangGraph `ToolNode`.
242
+ guardrails: Optional sequence of (guardrail, action) tuples.
243
+
244
+ Returns:
245
+ A mapping of tool name to either the original `ToolNode` or a compiled subgraph
246
+ that enforces the matching tool guardrails.
231
247
  """
232
248
  result: dict[str, RunnableCallable] = {}
233
249
  for tool_name, tool_node in tool_nodes.items():
@@ -243,24 +259,49 @@ def create_tools_guardrails_subgraph(
243
259
  def create_agent_init_guardrails_subgraph(
244
260
  init_node: tuple[str, Any],
245
261
  guardrails: Sequence[tuple[BaseGuardrail, GuardrailAction]] | None,
246
- ):
247
- """Create a subgraph for INIT node that applies guardrails on the state messages."""
262
+ ) -> Any:
263
+ """Create a subgraph for the INIT node and apply AGENT guardrails after INIT.
264
+
265
+ This subgraph intentionally **runs the INIT node first** (so it can seed/normalize
266
+ the agent state), and then evaluates guardrails as **PRE_EXECUTION**. This lets
267
+ guardrails intended to run "before agent execution" validate the post-init state.
268
+
269
+ Args:
270
+ init_node: Tuple of (node_name, node_callable) for the INIT node.
271
+ guardrails: Optional sequence of (guardrail, action) tuples.
272
+
273
+ Returns:
274
+ Either the original node callable (if no applicable guardrails) or a compiled
275
+ LangGraph subgraph that runs INIT then enforces PRE_EXECUTION AGENT guardrails.
276
+ """
248
277
  applicable_guardrails = [
249
278
  (guardrail, _)
250
279
  for (guardrail, _) in (guardrails or [])
251
280
  if GuardrailScope.AGENT in guardrail.selector.scopes
252
281
  and not isinstance(guardrail, DeterministicGuardrail)
253
282
  ]
283
+ applicable_guardrails = _filter_guardrails_by_stage(
284
+ applicable_guardrails, ExecutionStage.PRE_EXECUTION
285
+ )
254
286
  if applicable_guardrails is None or len(applicable_guardrails) == 0:
255
287
  return init_node[1]
256
288
 
257
- return _create_guardrails_subgraph(
258
- main_inner_node=init_node,
289
+ inner_name, inner_node = init_node
290
+ subgraph = StateGraph(AgentGuardrailsGraphState)
291
+ subgraph.add_node(inner_name, inner_node)
292
+ subgraph.add_edge(START, inner_name)
293
+
294
+ first_guardrail_node = _build_guardrail_node_chain(
295
+ subgraph=subgraph,
259
296
  guardrails=applicable_guardrails,
260
297
  scope=GuardrailScope.AGENT,
261
- execution_stages=[ExecutionStage.POST_EXECUTION],
298
+ execution_stage=ExecutionStage.PRE_EXECUTION,
262
299
  node_factory=create_agent_init_guardrail_node,
300
+ next_node=END,
301
+ guarded_node_name=inner_name,
263
302
  )
303
+ subgraph.add_edge(inner_name, first_guardrail_node)
304
+ return subgraph.compile()
264
305
 
265
306
 
266
307
  def create_agent_terminate_guardrails_subgraph(
@@ -306,6 +347,16 @@ def create_tool_guardrails_subgraph(
306
347
  tool_node: tuple[str, Any],
307
348
  guardrails: Sequence[tuple[BaseGuardrail, GuardrailAction]] | None,
308
349
  ):
350
+ """Create a guarded tool node.
351
+
352
+ Args:
353
+ tool_node: Tuple of (tool_name, tool_node_callable).
354
+ guardrails: Optional sequence of (guardrail, action) tuples.
355
+
356
+ Returns:
357
+ Either the original tool node callable (if no matching guardrails) or a compiled
358
+ LangGraph subgraph that enforces the matching tool guardrails.
359
+ """
309
360
  tool_name, _ = tool_node
310
361
  applicable_guardrails = [
311
362
  (guardrail, action)