uipath-langchain 0.0.132__tar.gz → 0.0.134__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of uipath-langchain might be problematic. Click here for more details.
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/PKG-INFO +3 -2
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/pyproject.toml +3 -2
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/calculator-agent/uv.lock +8 -8
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/cli_eval.py +20 -6
- uipath_langchain-0.0.134/src/uipath_langchain/tools/__init__.py +0 -0
- uipath_langchain-0.0.134/src/uipath_langchain/tools/preconfigured.py +191 -0
- uipath_langchain-0.0.134/tests/tools/__init__.py +1 -0
- uipath_langchain-0.0.134/tests/tools/conftest.py +72 -0
- uipath_langchain-0.0.134/tests/tools/mocks/agent_definition.json +226 -0
- uipath_langchain-0.0.134/tests/tools/test_preconfigured.py +94 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/uv.lock +19 -5
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.cursorrules +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.editorconfig +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.gitattributes +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/ci.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/commitlint.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/integration_tests.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/lint-custom-version.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/publish-dev.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/publish-docs.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/publish-prior-stable-version.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/slack.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/test-custom-version.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.gitignore +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.python-version +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/.vscode/settings.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/LICENSE +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/chat_models.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/context_grounding.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/human_in_the_loop.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/quick_start.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/quick_start_images/cloud_env_var_light.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/quick_start_images/invoke_output_dark.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/quick_start_images/invoke_output_light.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-index-1.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-index-2.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-process.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/folder-path.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/job-info.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/output.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/process-page.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/researcher-1.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/researcher-2.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/run-process-1.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/run-process-2.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/run-agent.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/start-job.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/RAG-quiz-generator/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/calculator-agent/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/calculator-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/calculator-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/calculator-agent/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/chat-agent/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/.env.template +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/.python-version +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/.vscode/launch.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/email-organizer-agent/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/samples/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/cli_dev.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/cli_init.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/cli_new.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_cli/cli_run.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_tracing/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_tracing/_oteladapter.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_tracing/_utils.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_utils/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/builder/agent_config.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/chat/models.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/vectorstores/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/Dockerfile +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/common/print_output.sh +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/run.sh +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/src/assert.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/src/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/run.sh +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/src/assert.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/README.md +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/input.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/run.sh +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/src/assert.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/src/main.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/testcases/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/builder/test_config.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/cli/conftest.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/cli/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/cli/mocks/simple_agent.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/cli/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/cli/test_run.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/__init__.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/conftest.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/test_action_trigger.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/test_hitl_api_trigger.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/test_hitl_default_escalation.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/hitl/test_hitl_job_trigger.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/test_dummy.py +0 -0
- {uipath_langchain-0.0.132 → uipath_langchain-0.0.134}/tests/tracing/test_oteladapter.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uipath-langchain
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.134
|
|
4
4
|
Summary: UiPath Langchain
|
|
5
5
|
Project-URL: Homepage, https://uipath.com
|
|
6
6
|
Project-URL: Repository, https://github.com/UiPath/uipath-langchain-python
|
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Topic :: Software Development :: Build Tools
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Requires-Dist: httpx>=0.27.0
|
|
18
|
+
Requires-Dist: jsonschema-pydantic>=0.6
|
|
18
19
|
Requires-Dist: langchain-community>=0.3.21
|
|
19
20
|
Requires-Dist: langchain-core>=0.3.34
|
|
20
21
|
Requires-Dist: langchain-openai>=0.3.3
|
|
@@ -25,7 +26,7 @@ Requires-Dist: openai>=1.65.5
|
|
|
25
26
|
Requires-Dist: openinference-instrumentation-langchain>=0.1.50
|
|
26
27
|
Requires-Dist: pydantic-settings>=2.6.0
|
|
27
28
|
Requires-Dist: python-dotenv>=1.0.1
|
|
28
|
-
Requires-Dist: uipath<2.2.0,>=2.1.
|
|
29
|
+
Requires-Dist: uipath<2.2.0,>=2.1.64
|
|
29
30
|
Provides-Extra: langchain
|
|
30
31
|
Description-Content-Type: text/markdown
|
|
31
32
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "uipath-langchain"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.134"
|
|
4
4
|
description = "UiPath Langchain"
|
|
5
5
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
6
6
|
requires-python = ">=3.10"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"uipath>=2.1.
|
|
8
|
+
"uipath>=2.1.64, <2.2.0",
|
|
9
9
|
"langgraph>=0.5.0, <0.7.0",
|
|
10
10
|
"langchain-core>=0.3.34",
|
|
11
11
|
"langgraph-checkpoint-sqlite>=2.0.3",
|
|
@@ -17,6 +17,7 @@ dependencies = [
|
|
|
17
17
|
"httpx>=0.27.0",
|
|
18
18
|
"openai>=1.65.5",
|
|
19
19
|
"openinference-instrumentation-langchain>=0.1.50",
|
|
20
|
+
"jsonschema-pydantic>=0.6",
|
|
20
21
|
]
|
|
21
22
|
classifiers = [
|
|
22
23
|
"Development Status :: 3 - Alpha",
|
|
@@ -285,7 +285,7 @@ requires-dist = [
|
|
|
285
285
|
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.11.1" },
|
|
286
286
|
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6.1" },
|
|
287
287
|
{ name = "uipath", specifier = ">=2.1.54" },
|
|
288
|
-
{ name = "uipath-langchain",
|
|
288
|
+
{ name = "uipath-langchain", directory = "../../" },
|
|
289
289
|
]
|
|
290
290
|
provides-extras = ["dev"]
|
|
291
291
|
|
|
@@ -557,7 +557,7 @@ name = "exceptiongroup"
|
|
|
557
557
|
version = "1.3.0"
|
|
558
558
|
source = { registry = "https://pypi.org/simple" }
|
|
559
559
|
dependencies = [
|
|
560
|
-
{ name = "typing-extensions", marker = "python_full_version < '3.
|
|
560
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
|
|
561
561
|
]
|
|
562
562
|
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 }
|
|
563
563
|
wheels = [
|
|
@@ -2640,7 +2640,7 @@ wheels = [
|
|
|
2640
2640
|
|
|
2641
2641
|
[[package]]
|
|
2642
2642
|
name = "uipath"
|
|
2643
|
-
version = "2.1.
|
|
2643
|
+
version = "2.1.56"
|
|
2644
2644
|
source = { registry = "https://pypi.org/simple" }
|
|
2645
2645
|
dependencies = [
|
|
2646
2646
|
{ name = "azure-monitor-opentelemetry" },
|
|
@@ -2658,15 +2658,15 @@ dependencies = [
|
|
|
2658
2658
|
{ name = "tomli" },
|
|
2659
2659
|
{ name = "truststore" },
|
|
2660
2660
|
]
|
|
2661
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2661
|
+
sdist = { url = "https://files.pythonhosted.org/packages/73/bd/058b5f5c1e8b41db0c1f4fd3d8eb73c88eb9ead4edb538ae7b2304fa65e1/uipath-2.1.56.tar.gz", hash = "sha256:3afdcf7ebab02d88115d6700d93da19a7cf50b93123a3faf1755c25e6adffcd3", size = 2006943 }
|
|
2662
2662
|
wheels = [
|
|
2663
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2663
|
+
{ url = "https://files.pythonhosted.org/packages/17/0e/58e805e67788859a4a6811a224f723436990058ca085905b2f3b0dd6aa3a/uipath-2.1.56-py3-none-any.whl", hash = "sha256:0ea1c738da38c2c808bf03d4590cd715cd187187f2972e5c5f38d1034ad84245", size = 228414 },
|
|
2664
2664
|
]
|
|
2665
2665
|
|
|
2666
2666
|
[[package]]
|
|
2667
2667
|
name = "uipath-langchain"
|
|
2668
|
-
version = "0.0.
|
|
2669
|
-
source = {
|
|
2668
|
+
version = "0.0.132"
|
|
2669
|
+
source = { directory = "../../" }
|
|
2670
2670
|
dependencies = [
|
|
2671
2671
|
{ name = "httpx" },
|
|
2672
2672
|
{ name = "langchain" },
|
|
@@ -2695,7 +2695,7 @@ requires-dist = [
|
|
|
2695
2695
|
{ name = "openinference-instrumentation-langchain", specifier = ">=0.1.50" },
|
|
2696
2696
|
{ name = "pydantic-settings", specifier = ">=2.6.0" },
|
|
2697
2697
|
{ name = "python-dotenv", specifier = ">=1.0.1" },
|
|
2698
|
-
{ name = "uipath", specifier = ">=2.1.
|
|
2698
|
+
{ name = "uipath", specifier = ">=2.1.56,<2.2.0" },
|
|
2699
2699
|
{ name = "uipath-langchain", marker = "extra == 'langchain'", specifier = ">=0.0.2" },
|
|
2700
2700
|
]
|
|
2701
2701
|
provides-extras = ["langchain"]
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
import uuid
|
|
2
3
|
from typing import List, Optional
|
|
3
4
|
|
|
4
5
|
from openinference.instrumentation.langchain import (
|
|
5
6
|
LangChainInstrumentor,
|
|
6
7
|
get_current_span,
|
|
7
8
|
)
|
|
9
|
+
from uipath._cli._evals._progress_reporter import StudioWebProgressReporter
|
|
8
10
|
from uipath._cli._evals._runtime import UiPathEvalContext, UiPathEvalRuntime
|
|
9
11
|
from uipath._cli._runtime._contracts import (
|
|
10
12
|
UiPathRuntimeFactory,
|
|
11
13
|
)
|
|
12
14
|
from uipath._cli._utils._eval_set import EvalHelpers
|
|
13
15
|
from uipath._cli.middlewares import MiddlewareResult
|
|
16
|
+
from uipath._events._event_bus import EventBus
|
|
14
17
|
from uipath.eval._helpers import auto_discover_entrypoint
|
|
15
18
|
|
|
16
19
|
from uipath_langchain._cli._runtime._context import LangGraphRuntimeContext
|
|
@@ -31,14 +34,16 @@ def langgraph_eval_middleware(
|
|
|
31
34
|
should_continue=True
|
|
32
35
|
) # Continue with normal flow if no langgraph.json
|
|
33
36
|
|
|
34
|
-
eval_context = UiPathEvalContext.with_defaults(**kwargs)
|
|
35
|
-
eval_context.eval_set = eval_set or EvalHelpers.auto_discover_eval_set()
|
|
36
|
-
eval_context.eval_ids = eval_ids
|
|
37
|
-
|
|
38
37
|
try:
|
|
39
38
|
_instrument_traceable_attributes()
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
event_bus = EventBus()
|
|
41
|
+
|
|
42
|
+
if not kwargs.get("no_report", False):
|
|
43
|
+
progress_reporter = StudioWebProgressReporter(
|
|
44
|
+
spans_exporter=LangChainExporter()
|
|
45
|
+
)
|
|
46
|
+
asyncio.run(progress_reporter.subscribe_to_eval_runtime_events(event_bus))
|
|
42
47
|
|
|
43
48
|
def generate_runtime_context(
|
|
44
49
|
context_entrypoint: str, langgraph_config: LangGraphConfig, **context_kwargs
|
|
@@ -48,6 +53,14 @@ def langgraph_eval_middleware(
|
|
|
48
53
|
context.entrypoint = context_entrypoint
|
|
49
54
|
return context
|
|
50
55
|
|
|
56
|
+
runtime_entrypoint = entrypoint or auto_discover_entrypoint()
|
|
57
|
+
|
|
58
|
+
eval_context = UiPathEvalContext.with_defaults(
|
|
59
|
+
entrypoint=runtime_entrypoint, execution_id=str(uuid.uuid4()), **kwargs
|
|
60
|
+
)
|
|
61
|
+
eval_context.eval_set = eval_set or EvalHelpers.auto_discover_eval_set()
|
|
62
|
+
eval_context.eval_ids = eval_ids
|
|
63
|
+
|
|
51
64
|
runtime_factory = UiPathRuntimeFactory(
|
|
52
65
|
LangGraphRuntime,
|
|
53
66
|
LangGraphRuntimeContext,
|
|
@@ -65,9 +78,10 @@ def langgraph_eval_middleware(
|
|
|
65
78
|
|
|
66
79
|
async def execute():
|
|
67
80
|
async with UiPathEvalRuntime.from_eval_context(
|
|
68
|
-
factory=runtime_factory, context=eval_context
|
|
81
|
+
factory=runtime_factory, context=eval_context, event_bus=event_bus
|
|
69
82
|
) as eval_runtime:
|
|
70
83
|
await eval_runtime.execute()
|
|
84
|
+
await event_bus.wait_for_all()
|
|
71
85
|
|
|
72
86
|
asyncio.run(execute())
|
|
73
87
|
return MiddlewareResult(should_continue=False)
|
|
File without changes
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Iterable, Optional, Type
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
from jsonschema_pydantic import jsonschema_to_pydantic as create_model # type: ignore
|
|
7
|
+
from langchain_core.caches import BaseCache
|
|
8
|
+
from langchain_core.runnables.utils import Output
|
|
9
|
+
from langchain_core.tools import BaseTool, StructuredTool
|
|
10
|
+
from langgraph.types import interrupt
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
from uipath import UiPath
|
|
13
|
+
from uipath.agent.models.agent import (
|
|
14
|
+
AgentDefinition,
|
|
15
|
+
AgentEscalationChannel,
|
|
16
|
+
AgentEscalationResourceConfig,
|
|
17
|
+
AgentIntegrationToolResourceConfig,
|
|
18
|
+
AgentProcessToolResourceConfig,
|
|
19
|
+
AgentResourceConfig,
|
|
20
|
+
)
|
|
21
|
+
from uipath.models import CreateAction, InvokeProcess
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def create_process_tool(resource: AgentProcessToolResourceConfig) -> Iterable[BaseTool]:
|
|
27
|
+
async def process(**kwargs) -> BaseModel:
|
|
28
|
+
return interrupt(
|
|
29
|
+
InvokeProcess(
|
|
30
|
+
name=resource.name,
|
|
31
|
+
input_arguments=kwargs,
|
|
32
|
+
process_folder_path=resource.properties.folder_path,
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
input_schema = create_model(resource.input_schema)
|
|
37
|
+
|
|
38
|
+
class ProcessTool(StructuredTool):
|
|
39
|
+
@property
|
|
40
|
+
def OutputType(self) -> type[Output]:
|
|
41
|
+
return create_model(resource.output_schema)
|
|
42
|
+
|
|
43
|
+
yield ProcessTool(
|
|
44
|
+
name=resource.name,
|
|
45
|
+
args_schema=input_schema,
|
|
46
|
+
description=resource.description,
|
|
47
|
+
coroutine=process,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def create_escalation_tool_from_channel(channel: AgentEscalationChannel) -> BaseTool:
|
|
52
|
+
async def escalate(**kwargs) -> BaseModel:
|
|
53
|
+
recipients = channel.recipients
|
|
54
|
+
if len(recipients) > 1:
|
|
55
|
+
logger.warning(
|
|
56
|
+
"Received more than one recipient. Defaulting to first recipient."
|
|
57
|
+
)
|
|
58
|
+
assignee = recipients[0].value if recipients else None
|
|
59
|
+
return interrupt(
|
|
60
|
+
CreateAction(
|
|
61
|
+
title=channel.description,
|
|
62
|
+
data=kwargs,
|
|
63
|
+
assignee=assignee,
|
|
64
|
+
app_name=channel.properties.app_name,
|
|
65
|
+
app_folder_path=None, # Channels specify folder name but not folder path.
|
|
66
|
+
app_folder_key=channel.properties.resource_key,
|
|
67
|
+
app_key=channel.properties.resource_key,
|
|
68
|
+
app_version=channel.properties.app_version,
|
|
69
|
+
)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
input_schema = create_model(channel.input_schema)
|
|
73
|
+
|
|
74
|
+
class EscalationTool(StructuredTool):
|
|
75
|
+
@property
|
|
76
|
+
def OutputType(self) -> type[Output]:
|
|
77
|
+
return create_model(channel.output_schema)
|
|
78
|
+
|
|
79
|
+
return EscalationTool(
|
|
80
|
+
name=channel.name,
|
|
81
|
+
args_schema=input_schema,
|
|
82
|
+
description=channel.description,
|
|
83
|
+
coroutine=escalate,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def create_escalation_tool(
|
|
88
|
+
resource: AgentEscalationResourceConfig,
|
|
89
|
+
) -> Iterable[BaseTool]:
|
|
90
|
+
for channel in resource.channels:
|
|
91
|
+
yield create_escalation_tool_from_channel(channel)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def create_integration_tool(
|
|
95
|
+
resource: AgentIntegrationToolResourceConfig,
|
|
96
|
+
) -> Iterable[BaseTool]:
|
|
97
|
+
async def integration(**kwargs) -> BaseModel:
|
|
98
|
+
uipath = UiPath()
|
|
99
|
+
remote_connection = await uipath.connections.retrieve_async(
|
|
100
|
+
resource.properties.connection.id
|
|
101
|
+
)
|
|
102
|
+
token = await uipath.connections.retrieve_token_async(
|
|
103
|
+
resource.properties.connection.id
|
|
104
|
+
)
|
|
105
|
+
tool_url = f"{remote_connection.api_base_uri}/v3/element/instances/{remote_connection.element_instance_id}{resource.properties.tool_path}"
|
|
106
|
+
|
|
107
|
+
response = await httpx.AsyncClient().request(
|
|
108
|
+
resource.properties.method,
|
|
109
|
+
tool_url,
|
|
110
|
+
headers={"Authorization": f"Bearer {token.access_token}"},
|
|
111
|
+
content=json.dumps(kwargs),
|
|
112
|
+
)
|
|
113
|
+
return response.json()
|
|
114
|
+
|
|
115
|
+
input_schema = create_model(resource.input_schema)
|
|
116
|
+
|
|
117
|
+
class IntegrationTool(StructuredTool):
|
|
118
|
+
@property
|
|
119
|
+
def OutputType(self) -> type[Output]:
|
|
120
|
+
return create_model({})
|
|
121
|
+
|
|
122
|
+
yield IntegrationTool(
|
|
123
|
+
name=resource.name,
|
|
124
|
+
args_schema=input_schema,
|
|
125
|
+
description=resource.description,
|
|
126
|
+
coroutine=integration,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def create_cached_wrapper_from_tool(
|
|
131
|
+
wrapped: BaseTool, cache: Optional[BaseCache]
|
|
132
|
+
) -> BaseTool:
|
|
133
|
+
if cache is None:
|
|
134
|
+
return wrapped
|
|
135
|
+
else:
|
|
136
|
+
|
|
137
|
+
async def cached_invocation(**kwargs) -> BaseModel:
|
|
138
|
+
namespace = f"{wrapped.name}.tool_invoke"
|
|
139
|
+
key = str(kwargs)
|
|
140
|
+
cached = cache.lookup(namespace, key)
|
|
141
|
+
if cached:
|
|
142
|
+
return cached[0]
|
|
143
|
+
response = await wrapped.ainvoke(input=kwargs)
|
|
144
|
+
cache.update(namespace, key, [response])
|
|
145
|
+
return response
|
|
146
|
+
|
|
147
|
+
input_schema = wrapped.args_schema
|
|
148
|
+
|
|
149
|
+
class CachedTool(StructuredTool):
|
|
150
|
+
OutputType: Type[BaseModel] = wrapped.OutputType
|
|
151
|
+
|
|
152
|
+
return CachedTool(
|
|
153
|
+
name=wrapped.name,
|
|
154
|
+
args_schema=input_schema,
|
|
155
|
+
description=wrapped.description,
|
|
156
|
+
coroutine=cached_invocation,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def create_cached_wrapper(
|
|
161
|
+
tools: Iterable[BaseTool], cache: Optional[BaseCache]
|
|
162
|
+
) -> Iterable[BaseTool]:
|
|
163
|
+
for wrapped in tools:
|
|
164
|
+
yield create_cached_wrapper_from_tool(wrapped, cache)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def create_resource_tool(
|
|
168
|
+
resource: AgentResourceConfig, cache: Optional[BaseCache] = None
|
|
169
|
+
) -> Iterable[BaseTool]:
|
|
170
|
+
match resource:
|
|
171
|
+
case AgentProcessToolResourceConfig():
|
|
172
|
+
return create_cached_wrapper(create_process_tool(resource), cache)
|
|
173
|
+
case AgentIntegrationToolResourceConfig():
|
|
174
|
+
return create_cached_wrapper(create_integration_tool(resource), cache)
|
|
175
|
+
case AgentEscalationResourceConfig():
|
|
176
|
+
return create_cached_wrapper(create_escalation_tool(resource), cache)
|
|
177
|
+
case _:
|
|
178
|
+
raise NotImplementedError()
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def safe_extract_tools(
|
|
182
|
+
agent_definition: AgentDefinition, cache: Optional[BaseCache] = None
|
|
183
|
+
) -> list[BaseTool]:
|
|
184
|
+
tools = []
|
|
185
|
+
for resource in agent_definition.resources:
|
|
186
|
+
try:
|
|
187
|
+
for structured_tool in create_resource_tool(resource, cache):
|
|
188
|
+
tools.append(structured_tool)
|
|
189
|
+
except NotImplementedError:
|
|
190
|
+
logger.warning(f"Unable to convert {resource.name} into a tool.")
|
|
191
|
+
return tools
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Init file to make the tests directory a package
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from contextlib import contextmanager
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def get_file_path(file_name: str) -> str:
|
|
6
|
+
"""
|
|
7
|
+
Get the path to a mock file, checking multiple possible locations.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
file_name: Name of the file to locate
|
|
11
|
+
|
|
12
|
+
Returns:
|
|
13
|
+
Absolute path to the file
|
|
14
|
+
"""
|
|
15
|
+
if os.path.isfile(f"mocks/{file_name}"):
|
|
16
|
+
return os.path.abspath(f"mocks/{file_name}")
|
|
17
|
+
else:
|
|
18
|
+
return os.path.abspath(f"tests/tools/mocks/{file_name}")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@contextmanager
|
|
22
|
+
def uipath_connection_mock(httpx_mock, response):
|
|
23
|
+
httpx_mock.add_response(
|
|
24
|
+
url="https://example.com/api/v1/Connections/connection-id",
|
|
25
|
+
method="GET",
|
|
26
|
+
json=response,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
yield
|
|
31
|
+
finally:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@contextmanager
|
|
36
|
+
def uipath_token_mock(httpx_mock, response):
|
|
37
|
+
httpx_mock.add_response(
|
|
38
|
+
url="https://example.com/api/v1/Connections/connection-id/token?tokenType=direct",
|
|
39
|
+
method="GET",
|
|
40
|
+
json=response,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
yield
|
|
45
|
+
finally:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@contextmanager
|
|
50
|
+
def uipath_integration_mock(httpx_mock, response):
|
|
51
|
+
httpx_mock.add_response(
|
|
52
|
+
url="https://example.uipath.com//v3/element/instances/0/integration",
|
|
53
|
+
method="POST",
|
|
54
|
+
json=response,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
yield
|
|
59
|
+
finally:
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@contextmanager
|
|
64
|
+
def uipath_interrupt_mock(mocker, tool_response):
|
|
65
|
+
mocker.patch(
|
|
66
|
+
"uipath_langchain.tools.preconfigured.interrupt", return_value=tool_response
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
yield
|
|
71
|
+
finally:
|
|
72
|
+
pass
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "agent-id",
|
|
3
|
+
"name": "agent-name",
|
|
4
|
+
"inputSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"query": {
|
|
8
|
+
"type": "string"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"outputSchema": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"content": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Output content"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"version": "1.0.0",
|
|
22
|
+
"resources": [
|
|
23
|
+
{
|
|
24
|
+
"name": "Integration",
|
|
25
|
+
"description": "Integration.",
|
|
26
|
+
"$resourceType": "tool",
|
|
27
|
+
"inputSchema": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"query": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Query.",
|
|
33
|
+
"title": "Query"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"required": [
|
|
37
|
+
"query"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"type": "integration",
|
|
41
|
+
"properties": {
|
|
42
|
+
"toolPath": "/integration",
|
|
43
|
+
"objectName": "v2::integration",
|
|
44
|
+
"toolDisplayName": "Integration",
|
|
45
|
+
"toolDescription": "Integration.",
|
|
46
|
+
"method": "POST",
|
|
47
|
+
"connection": {
|
|
48
|
+
"id": "connection-id",
|
|
49
|
+
"name": "integration",
|
|
50
|
+
"owner": null,
|
|
51
|
+
"createTime": null,
|
|
52
|
+
"updateTime": null,
|
|
53
|
+
"state": "enabled",
|
|
54
|
+
"apiBaseUri": "https://example.uipath.com/",
|
|
55
|
+
"elementInstanceId": 0,
|
|
56
|
+
"connector": {
|
|
57
|
+
"key": "connector-key",
|
|
58
|
+
"name": "connector-name",
|
|
59
|
+
"image": "connector-image",
|
|
60
|
+
"enabled": true
|
|
61
|
+
},
|
|
62
|
+
"isDefault": false,
|
|
63
|
+
"lastUsedTime": null,
|
|
64
|
+
"connectionIdentity": null,
|
|
65
|
+
"pollingIntervalInMinutes": null,
|
|
66
|
+
"folder": {
|
|
67
|
+
"key": "folder-key",
|
|
68
|
+
"path": "folder-path"
|
|
69
|
+
},
|
|
70
|
+
"elementVersion": null,
|
|
71
|
+
"solutionProperties": {
|
|
72
|
+
"resourceKey": "solution-resource-key"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"bodyStructure": {
|
|
76
|
+
"contentType": "json"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"location": "external",
|
|
80
|
+
"settings": {},
|
|
81
|
+
"guardrail": {
|
|
82
|
+
"policies": []
|
|
83
|
+
},
|
|
84
|
+
"iconUrl": "icon-url",
|
|
85
|
+
"id": "resource-1",
|
|
86
|
+
"isPreview": false
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "Escalation",
|
|
90
|
+
"description": "Human review.",
|
|
91
|
+
"$resourceType": "escalation",
|
|
92
|
+
"channels": [
|
|
93
|
+
{
|
|
94
|
+
"id": "escalation",
|
|
95
|
+
"name": "Channel",
|
|
96
|
+
"type": "actionCenter",
|
|
97
|
+
"description": "Channel description",
|
|
98
|
+
"inputSchema": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"properties": {
|
|
101
|
+
"name": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"description": "Name."
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"required": [
|
|
107
|
+
"name"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"outputSchema": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"status": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "Escalation status."
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"required": [
|
|
119
|
+
"status"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"properties": {
|
|
123
|
+
"appName": "ActionApp",
|
|
124
|
+
"appVersion": 1,
|
|
125
|
+
"folderName": null,
|
|
126
|
+
"resourceKey": "resource-key",
|
|
127
|
+
"isActionableMessageEnabled": false,
|
|
128
|
+
"actionableMessageMetaData": null
|
|
129
|
+
},
|
|
130
|
+
"recipients": [
|
|
131
|
+
{
|
|
132
|
+
"type": 2,
|
|
133
|
+
"value": "test-group-id",
|
|
134
|
+
"displayName": "test-group"
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"inputSchemaDotnetTypeMapping": {
|
|
138
|
+
"name": "System.String"
|
|
139
|
+
},
|
|
140
|
+
"outputSchemaDotnetTypeMapping": {
|
|
141
|
+
"status": "System.String"
|
|
142
|
+
},
|
|
143
|
+
"outcomeMapping": {
|
|
144
|
+
"Submit": "continue"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"isAgentMemoryEnabled": false,
|
|
149
|
+
"id": "resource-2",
|
|
150
|
+
"governanceProperties": {
|
|
151
|
+
"isEscalatedAtRuntime": false
|
|
152
|
+
},
|
|
153
|
+
"escalationType": 0,
|
|
154
|
+
"vsEscalationProperties": null
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "Agent",
|
|
158
|
+
"description": "Agent.",
|
|
159
|
+
"$resourceType": "tool",
|
|
160
|
+
"inputSchema": {
|
|
161
|
+
"type": "object",
|
|
162
|
+
"properties": {
|
|
163
|
+
"name": {
|
|
164
|
+
"type": "string"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"type": "agent",
|
|
169
|
+
"outputSchema": {
|
|
170
|
+
"type": "object",
|
|
171
|
+
"properties": {
|
|
172
|
+
"content": {
|
|
173
|
+
"type": "str",
|
|
174
|
+
"description": "Output content"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"required": [
|
|
178
|
+
"content"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
"properties": {
|
|
182
|
+
"folderPath": "solution-folder",
|
|
183
|
+
"processName": "process-name"
|
|
184
|
+
},
|
|
185
|
+
"settings": {
|
|
186
|
+
"maxAttempts": null,
|
|
187
|
+
"retryDelay": null,
|
|
188
|
+
"timeout": null
|
|
189
|
+
},
|
|
190
|
+
"location": "external",
|
|
191
|
+
"guardrail": {
|
|
192
|
+
"policies": []
|
|
193
|
+
},
|
|
194
|
+
"id": "resource-3",
|
|
195
|
+
"referenceKey": "resource-3-reference-key"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"name": "Unknown",
|
|
199
|
+
"description": "Unknown.",
|
|
200
|
+
"$resourceType": "unknown"
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"type": "lowCode",
|
|
204
|
+
"messages": [
|
|
205
|
+
{
|
|
206
|
+
"role": "system",
|
|
207
|
+
"content": "System Prompt"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"role": "user",
|
|
211
|
+
"content": "User Prompt"
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
"features": [],
|
|
215
|
+
"settings": {
|
|
216
|
+
"engine": "basic-v1",
|
|
217
|
+
"model": "model-1",
|
|
218
|
+
"max_tokens": 16384,
|
|
219
|
+
"temperature": 0.0
|
|
220
|
+
},
|
|
221
|
+
"metadata": {
|
|
222
|
+
"storageVersion": "22.0.0",
|
|
223
|
+
"isConversational": false
|
|
224
|
+
},
|
|
225
|
+
"guardrails": []
|
|
226
|
+
}
|