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.
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/PKG-INFO +2 -2
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/pyproject.toml +2 -2
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/escalate_action.py +105 -36
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/guardrail_nodes.py +19 -5
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/guardrails_factory.py +12 -10
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/utils.py +27 -31
- uipath_langchain-0.1.42/src/uipath_langchain/agent/react/file_type_handler.py +123 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/guardrails/guardrails_subgraph.py +57 -6
- uipath_langchain-0.1.42/src/uipath_langchain/agent/react/llm_with_files.py +76 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_escalate_action.py +235 -198
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_agent_init_guardrails_subgraph.py +14 -14
- uipath_langchain-0.1.42/tests/agent/guardrails/test_extraction_utils.py +153 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrails_factory.py +2 -2
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/uv.lock +5 -5
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.cursorrules +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.editorconfig +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.gitattributes +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/copilot-instructions.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/ci.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/commitlint.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/integration_tests.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/lint-custom-version.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-dev.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-docs.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/publish-prior-stable-version.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/slack.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/test-custom-version.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.gitignore +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pipelines/security-scans.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pipelines/variables.yml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.python-version +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/.vscode/settings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/LICENSE +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/chat_models.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/context_grounding.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/human_in_the_loop.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/cloud_env_var_light.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/invoke_output_dark.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/quick_start_images/invoke_output_light.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-index-1.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-index-2.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-process.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/folder-path.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/job-info.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/output.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/process-page.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/researcher-1.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/researcher-2.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/run-process-1.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/run-process-2.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/run-agent.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/start-job.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/RAG-quiz-generator/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/calculator-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/chat-hitl-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/debug-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.env.template +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.python-version +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/.vscode/launch.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/email-organizer-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {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
- {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
- {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
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/oauth-external-apps-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-deepagent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/CLI_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.agent/SDK_REFERENCE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/CLAUDE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/README.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/entry-points.json +0 -0
- {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
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/samples/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/scripts/lint_httpx_client.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/cli_init.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_cli/cli_new.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_resources/AGENTS.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_tracing/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/exceptions/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/exceptions/exceptions.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/base_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/block_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/filter_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/actions/log_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/types.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/agent.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/constants.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/init_node.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/llm_node.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/router.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/terminate_node.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/tools/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/tools/tools.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/types.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/react/utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/context_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/escalation_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/integration_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/mcp_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/process_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/static_args.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/structured_tool_with_output_type.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/tool_factory.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/tool_node.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/tools/utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/wrappers/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/wrappers/static_args_wrapper.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/bedrock.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/mapper.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/models.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/openai.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/supported_models.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/chat/vertex.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/py.typed +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/_serialize.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/config.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/errors.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/factory.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/runtime.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/schema.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/runtime/storage.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/vectorstores/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/chat-models/src/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/console.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/trace_assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/common/validate_output.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/expected_raw.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/src/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/entry-points.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/debug-breakpoints/src/test_debug.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/bindings.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/dev-console/src/test_dev.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/init-flow/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/expected_traces.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/input.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/raw_traces.jsonl +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/run.sh +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/src/assert.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/src/main.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/testcases/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_block_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_filter_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/actions/test_log_action.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_agent_terminate_guardrails_subgraph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_nodes.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_stage_filtering.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrail_utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_guardrails_utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_llm_guardrails_subgraph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/guardrails/test_tool_guardrails_subgraph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/react/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/react/test_utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_integration_tool.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_static_args.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_tool_node.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/agent/tools/test_utils.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/chat/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/chat/test_openai_url_rewrite.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/conftest.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/simple_agent.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/mocks/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_graph.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_init.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_run.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/cli/test_schema.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/__init__.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/conftest.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/langgraph.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/mocks/uipath.json +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_action_trigger.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_hitl_api_trigger.py +0 -0
- {uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/tests/hitl/test_hitl_job_trigger.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
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}]
|
|
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
|
-
|
|
183
|
-
node_name =
|
|
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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
277
|
-
args_dict =
|
|
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
|
-
|
|
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
|
-
|
|
277
|
-
(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
{uipath_langchain-0.1.39 → uipath_langchain-0.1.42}/src/uipath_langchain/agent/guardrails/utils.py
RENAMED
|
@@ -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'
|
|
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
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
|
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
|
-
|
|
258
|
-
|
|
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
|
-
|
|
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)
|