uipath-langchain 0.0.139__tar.gz → 0.0.140__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.139 → uipath_langchain-0.0.140}/.github/workflows/integration_tests.yml +20 -27
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.gitignore +2 -2
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/PKG-INFO +1 -1
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/pyproject.toml +1 -1
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/chat/models.py +137 -3
- uipath_langchain-0.0.139/testcases/common/print_output.sh → uipath_langchain-0.0.140/testcases/common/validate_output.sh +14 -2
- uipath_langchain-0.0.140/testcases/company-research-agent/run.sh +21 -0
- uipath_langchain-0.0.140/testcases/company-research-agent/src/assert.py +46 -0
- uipath_langchain-0.0.140/testcases/init-flow/input.json +3 -0
- uipath_langchain-0.0.140/testcases/init-flow/pyproject.toml +13 -0
- uipath_langchain-0.0.140/testcases/init-flow/run.sh +32 -0
- uipath_langchain-0.0.140/testcases/init-flow/src/assert.py +46 -0
- uipath_langchain-0.0.140/testcases/simple-local-mcp/run.sh +21 -0
- uipath_langchain-0.0.140/testcases/simple-local-mcp/src/assert.py +46 -0
- uipath_langchain-0.0.140/testcases/ticket-classification/run.sh +25 -0
- uipath_langchain-0.0.140/testcases/ticket-classification/src/assert.py +51 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/uv.lock +1 -1
- uipath_langchain-0.0.139/testcases/Dockerfile +0 -16
- uipath_langchain-0.0.139/testcases/README.md +0 -22
- uipath_langchain-0.0.139/testcases/company-research-agent/.env.example +0 -5
- uipath_langchain-0.0.139/testcases/company-research-agent/agent.mermaid +0 -23
- uipath_langchain-0.0.139/testcases/company-research-agent/run.sh +0 -28
- uipath_langchain-0.0.139/testcases/company-research-agent/src/assert.py +0 -61
- uipath_langchain-0.0.139/testcases/company-research-agent/uipath.json +0 -37
- uipath_langchain-0.0.139/testcases/simple-local-mcp/.env.example +0 -5
- uipath_langchain-0.0.139/testcases/simple-local-mcp/README.md +0 -95
- uipath_langchain-0.0.139/testcases/simple-local-mcp/agent.mermaid +0 -17
- uipath_langchain-0.0.139/testcases/simple-local-mcp/run.sh +0 -28
- uipath_langchain-0.0.139/testcases/simple-local-mcp/src/assert.py +0 -61
- uipath_langchain-0.0.139/testcases/simple-local-mcp/uipath.json +0 -145
- uipath_langchain-0.0.139/testcases/ticket-classification/.env.example +0 -7
- uipath_langchain-0.0.139/testcases/ticket-classification/README.md +0 -22
- uipath_langchain-0.0.139/testcases/ticket-classification/agent.mermaid +0 -21
- uipath_langchain-0.0.139/testcases/ticket-classification/run.sh +0 -34
- uipath_langchain-0.0.139/testcases/ticket-classification/src/assert.py +0 -71
- uipath_langchain-0.0.139/testcases/ticket-classification/uipath.json +0 -50
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.cursorrules +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.editorconfig +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.gitattributes +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/ci.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/commitlint.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/lint-custom-version.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-dev.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-docs.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/publish-prior-stable-version.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/slack.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/test-custom-version.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.python-version +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.vscode/settings.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/LICENSE +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/chat_models.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/context_grounding.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/human_in_the_loop.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/cloud_env_var_light.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/invoke_output_dark.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/quick_start_images/invoke_output_light.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-index-1.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-index-2.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-process.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/folder-path.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/job-info.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/output.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/process-page.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/researcher-1.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/researcher-2.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/run-process-1.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/run-process-2.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/run-agent.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/start-job.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/RAG-quiz-generator/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/calculator-agent/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/chat-agent/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.env.template +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.python-version +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/.vscode/launch.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/email-organizer-agent/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/README.md +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/samples/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_dev.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_eval.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_init.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_new.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_cli/cli_run.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_oteladapter.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_tracing/_utils.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/tools/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/tools/preconfigured.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/vectorstores/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/src/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/input.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/src/main.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/testcases/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/conftest.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/simple_agent.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/cli/test_run.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/conftest.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_action_trigger.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_api_trigger.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_default_escalation.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/hitl/test_hitl_job_trigger.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/test_dummy.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/__init__.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/conftest.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/mocks/agent_definition.json +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tools/test_preconfigured.py +0 -0
- {uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/tests/tracing/test_oteladapter.py +0 -0
{uipath_langchain-0.0.139 → uipath_langchain-0.0.140}/.github/workflows/integration_tests.yml
RENAMED
|
@@ -19,16 +19,16 @@ jobs:
|
|
|
19
19
|
steps:
|
|
20
20
|
- name: Checkout code
|
|
21
21
|
uses: actions/checkout@v4
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
- name: Discover testcases
|
|
24
24
|
id: discover
|
|
25
25
|
run: |
|
|
26
26
|
# Find all testcase folders (excluding common folders like README, etc.)
|
|
27
27
|
testcase_dirs=$(find testcases -maxdepth 1 -type d -name "*-*" | sed 's|testcases/||' | sort)
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
echo "Found testcase directories:"
|
|
30
30
|
echo "$testcase_dirs"
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
# Convert to JSON array for matrix
|
|
33
33
|
testcases_json=$(echo "$testcase_dirs" | jq -R -s -c 'split("\n")[:-1]')
|
|
34
34
|
echo "testcases=$testcases_json" >> $GITHUB_OUTPUT
|
|
@@ -36,46 +36,39 @@ jobs:
|
|
|
36
36
|
integration-tests:
|
|
37
37
|
needs: [discover-testcases]
|
|
38
38
|
runs-on: ubuntu-latest
|
|
39
|
+
container:
|
|
40
|
+
image: ghcr.io/astral-sh/uv:python3.12-bookworm
|
|
41
|
+
env:
|
|
42
|
+
UIPATH_JOB_KEY: "3a03d5cb-fa21-4021-894d-a8e2eda0afe0"
|
|
39
43
|
strategy:
|
|
40
44
|
fail-fast: false
|
|
41
45
|
matrix:
|
|
42
46
|
testcase: ${{ fromJson(needs.discover-testcases.outputs.testcases) }}
|
|
43
|
-
environment: [alpha, cloud]
|
|
47
|
+
environment: [alpha, staging] # temporary disable [cloud]
|
|
44
48
|
use_azure_chat: [true, false]
|
|
45
|
-
|
|
49
|
+
|
|
46
50
|
name: "${{ matrix.testcase }} / ${{ matrix.environment }} / ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
|
|
47
|
-
|
|
51
|
+
|
|
48
52
|
steps:
|
|
49
53
|
- name: Checkout code
|
|
50
54
|
uses: actions/checkout@v4
|
|
51
55
|
|
|
52
|
-
- name:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- name: Build Docker image
|
|
56
|
-
run: |
|
|
57
|
-
echo "Building Docker image for ${{ matrix.testcase }} at $(date)"
|
|
58
|
-
docker build -f testcases/Dockerfile \
|
|
59
|
-
-t uipath-langchain-testbase:latest \
|
|
60
|
-
.
|
|
61
|
-
echo "Docker image built at $(date)"
|
|
56
|
+
- name: Install Dependencies
|
|
57
|
+
run: uv sync
|
|
62
58
|
|
|
63
59
|
- name: Run testcase
|
|
64
60
|
env:
|
|
65
|
-
CLIENT_ID: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_ID || secrets.CLOUD_TEST_CLIENT_ID }}
|
|
66
|
-
CLIENT_SECRET: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_SECRET || secrets.CLOUD_TEST_CLIENT_SECRET }}
|
|
67
|
-
BASE_URL: ${{ matrix.environment == 'alpha' && secrets.ALPHA_BASE_URL || secrets.CLOUD_BASE_URL }}
|
|
61
|
+
CLIENT_ID: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_ID || matrix.environment == 'staging' && secrets.STAGING_TEST_CLIENT_ID || matrix.environment == 'cloud' && secrets.CLOUD_TEST_CLIENT_ID }}
|
|
62
|
+
CLIENT_SECRET: ${{ matrix.environment == 'alpha' && secrets.ALPHA_TEST_CLIENT_SECRET || matrix.environment == 'staging' && secrets.STAGING_TEST_CLIENT_SECRET || matrix.environment == 'cloud' && secrets.CLOUD_TEST_CLIENT_SECRET }}
|
|
63
|
+
BASE_URL: ${{ matrix.environment == 'alpha' && secrets.ALPHA_BASE_URL || matrix.environment == 'staging' && secrets.STAGING_BASE_URL || matrix.environment == 'cloud' && secrets.CLOUD_BASE_URL }}
|
|
68
64
|
USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}
|
|
65
|
+
working-directory: testcases/${{ matrix.testcase }}
|
|
69
66
|
run: |
|
|
70
67
|
echo "Running testcase: ${{ matrix.testcase }}"
|
|
71
68
|
echo "Environment: ${{ matrix.environment }}"
|
|
72
69
|
echo "LLM: ${{ matrix.use_azure_chat && 'UiPathAzureChatOpenAI' || 'UiPathChat' }}"
|
|
73
70
|
echo "USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
-e BASE_URL="$BASE_URL" \
|
|
79
|
-
-e USE_AZURE_CHAT="$USE_AZURE_CHAT" \
|
|
80
|
-
uipath-langchain-testbase:latest \
|
|
81
|
-
bash /app/testcases/${{ matrix.testcase }}/run.sh
|
|
71
|
+
|
|
72
|
+
# Execute the testcase run script directly
|
|
73
|
+
bash run.sh
|
|
74
|
+
bash ../common/validate_output.sh
|
|
@@ -165,7 +165,7 @@ cython_debug/
|
|
|
165
165
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
166
166
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
167
167
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
168
|
-
|
|
168
|
+
.idea/
|
|
169
169
|
|
|
170
170
|
# Ruff stuff:
|
|
171
171
|
.ruff_cache/
|
|
@@ -178,4 +178,4 @@ cython_debug/
|
|
|
178
178
|
**/.uipath
|
|
179
179
|
**/**.nupkg
|
|
180
180
|
**/__uipath/
|
|
181
|
-
**/.langgraph_api
|
|
181
|
+
**/.langgraph_api
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
-
from typing import Any, Dict, List, Literal, Optional, Union
|
|
3
|
+
from typing import Any, AsyncIterator, Dict, Iterator, List, Literal, Optional, Union
|
|
4
4
|
|
|
5
5
|
from langchain_core.callbacks import (
|
|
6
6
|
AsyncCallbackManagerForLLMRun,
|
|
7
7
|
CallbackManagerForLLMRun,
|
|
8
8
|
)
|
|
9
9
|
from langchain_core.language_models import LanguageModelInput
|
|
10
|
-
from langchain_core.messages import AIMessage, BaseMessage
|
|
10
|
+
from langchain_core.messages import AIMessage, AIMessageChunk, BaseMessage
|
|
11
11
|
from langchain_core.messages.ai import UsageMetadata
|
|
12
|
-
from langchain_core.outputs import ChatGeneration, ChatResult
|
|
12
|
+
from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResult
|
|
13
13
|
from langchain_core.runnables import Runnable
|
|
14
14
|
from langchain_openai.chat_models import AzureChatOpenAI
|
|
15
15
|
from pydantic import BaseModel
|
|
@@ -49,6 +49,54 @@ class UiPathAzureChatOpenAI(UiPathRequestMixin, AzureChatOpenAI):
|
|
|
49
49
|
response = await self._acall(self.url, payload, self.auth_headers)
|
|
50
50
|
return self._create_chat_result(response)
|
|
51
51
|
|
|
52
|
+
def _stream(
|
|
53
|
+
self,
|
|
54
|
+
messages: List[BaseMessage],
|
|
55
|
+
stop: Optional[List[str]] = None,
|
|
56
|
+
run_manager: Optional[CallbackManagerForLLMRun] = None,
|
|
57
|
+
**kwargs: Any,
|
|
58
|
+
) -> Iterator[ChatGenerationChunk]:
|
|
59
|
+
if "tools" in kwargs and not kwargs["tools"]:
|
|
60
|
+
del kwargs["tools"]
|
|
61
|
+
payload = self._get_request_payload(messages, stop=stop, **kwargs)
|
|
62
|
+
response = self._call(self.url, payload, self.auth_headers)
|
|
63
|
+
|
|
64
|
+
# For non-streaming response, yield single chunk
|
|
65
|
+
chat_result = self._create_chat_result(response)
|
|
66
|
+
chunk = ChatGenerationChunk(
|
|
67
|
+
message=AIMessageChunk(
|
|
68
|
+
content=chat_result.generations[0].message.content,
|
|
69
|
+
additional_kwargs=chat_result.generations[0].message.additional_kwargs,
|
|
70
|
+
response_metadata=chat_result.generations[0].message.response_metadata,
|
|
71
|
+
usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
yield chunk
|
|
75
|
+
|
|
76
|
+
async def _astream(
|
|
77
|
+
self,
|
|
78
|
+
messages: List[BaseMessage],
|
|
79
|
+
stop: Optional[List[str]] = None,
|
|
80
|
+
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
|
|
81
|
+
**kwargs: Any,
|
|
82
|
+
) -> AsyncIterator[ChatGenerationChunk]:
|
|
83
|
+
if "tools" in kwargs and not kwargs["tools"]:
|
|
84
|
+
del kwargs["tools"]
|
|
85
|
+
payload = self._get_request_payload(messages, stop=stop, **kwargs)
|
|
86
|
+
response = await self._acall(self.url, payload, self.auth_headers)
|
|
87
|
+
|
|
88
|
+
# For non-streaming response, yield single chunk
|
|
89
|
+
chat_result = self._create_chat_result(response)
|
|
90
|
+
chunk = ChatGenerationChunk(
|
|
91
|
+
message=AIMessageChunk(
|
|
92
|
+
content=chat_result.generations[0].message.content,
|
|
93
|
+
additional_kwargs=chat_result.generations[0].message.additional_kwargs,
|
|
94
|
+
response_metadata=chat_result.generations[0].message.response_metadata,
|
|
95
|
+
usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
yield chunk
|
|
99
|
+
|
|
52
100
|
def with_structured_output(
|
|
53
101
|
self,
|
|
54
102
|
schema: Optional[Any] = None,
|
|
@@ -217,6 +265,92 @@ class UiPathChat(UiPathRequestMixin, AzureChatOpenAI):
|
|
|
217
265
|
response = await self._acall(self.url, payload, self.auth_headers)
|
|
218
266
|
return self._create_chat_result(response)
|
|
219
267
|
|
|
268
|
+
def _stream(
|
|
269
|
+
self,
|
|
270
|
+
messages: List[BaseMessage],
|
|
271
|
+
stop: Optional[List[str]] = None,
|
|
272
|
+
run_manager: Optional[CallbackManagerForLLMRun] = None,
|
|
273
|
+
**kwargs: Any,
|
|
274
|
+
) -> Iterator[ChatGenerationChunk]:
|
|
275
|
+
"""Stream the LLM on a given prompt.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
messages: the prompt composed of a list of messages.
|
|
279
|
+
stop: a list of strings on which the model should stop generating.
|
|
280
|
+
run_manager: A run manager with callbacks for the LLM.
|
|
281
|
+
**kwargs: Additional keyword arguments.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
An iterator of ChatGenerationChunk objects.
|
|
285
|
+
"""
|
|
286
|
+
if kwargs.get("tools"):
|
|
287
|
+
kwargs["tools"] = [tool["function"] for tool in kwargs["tools"]]
|
|
288
|
+
if "tool_choice" in kwargs and kwargs["tool_choice"]["type"] == "function":
|
|
289
|
+
kwargs["tool_choice"] = {
|
|
290
|
+
"type": "tool",
|
|
291
|
+
"name": kwargs["tool_choice"]["function"]["name"],
|
|
292
|
+
}
|
|
293
|
+
payload = self._get_request_payload(messages, stop=stop, **kwargs)
|
|
294
|
+
response = self._call(self.url, payload, self.auth_headers)
|
|
295
|
+
|
|
296
|
+
# For non-streaming response, yield single chunk
|
|
297
|
+
chat_result = self._create_chat_result(response)
|
|
298
|
+
chunk = ChatGenerationChunk(
|
|
299
|
+
message=AIMessageChunk(
|
|
300
|
+
content=chat_result.generations[0].message.content,
|
|
301
|
+
additional_kwargs=chat_result.generations[0].message.additional_kwargs,
|
|
302
|
+
response_metadata=chat_result.generations[0].message.response_metadata,
|
|
303
|
+
usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
|
|
304
|
+
tool_calls=getattr(
|
|
305
|
+
chat_result.generations[0].message, "tool_calls", None
|
|
306
|
+
),
|
|
307
|
+
)
|
|
308
|
+
)
|
|
309
|
+
yield chunk
|
|
310
|
+
|
|
311
|
+
async def _astream(
|
|
312
|
+
self,
|
|
313
|
+
messages: List[BaseMessage],
|
|
314
|
+
stop: Optional[List[str]] = None,
|
|
315
|
+
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
|
|
316
|
+
**kwargs: Any,
|
|
317
|
+
) -> AsyncIterator[ChatGenerationChunk]:
|
|
318
|
+
"""Async stream the LLM on a given prompt.
|
|
319
|
+
|
|
320
|
+
Args:
|
|
321
|
+
messages: the prompt composed of a list of messages.
|
|
322
|
+
stop: a list of strings on which the model should stop generating.
|
|
323
|
+
run_manager: A run manager with callbacks for the LLM.
|
|
324
|
+
**kwargs: Additional keyword arguments.
|
|
325
|
+
|
|
326
|
+
Returns:
|
|
327
|
+
An async iterator of ChatGenerationChunk objects.
|
|
328
|
+
"""
|
|
329
|
+
if kwargs.get("tools"):
|
|
330
|
+
kwargs["tools"] = [tool["function"] for tool in kwargs["tools"]]
|
|
331
|
+
if "tool_choice" in kwargs and kwargs["tool_choice"]["type"] == "function":
|
|
332
|
+
kwargs["tool_choice"] = {
|
|
333
|
+
"type": "tool",
|
|
334
|
+
"name": kwargs["tool_choice"]["function"]["name"],
|
|
335
|
+
}
|
|
336
|
+
payload = self._get_request_payload(messages, stop=stop, **kwargs)
|
|
337
|
+
response = await self._acall(self.url, payload, self.auth_headers)
|
|
338
|
+
|
|
339
|
+
# For non-streaming response, yield single chunk
|
|
340
|
+
chat_result = self._create_chat_result(response)
|
|
341
|
+
chunk = ChatGenerationChunk(
|
|
342
|
+
message=AIMessageChunk(
|
|
343
|
+
content=chat_result.generations[0].message.content,
|
|
344
|
+
additional_kwargs=chat_result.generations[0].message.additional_kwargs,
|
|
345
|
+
response_metadata=chat_result.generations[0].message.response_metadata,
|
|
346
|
+
usage_metadata=chat_result.generations[0].message.usage_metadata, # type: ignore
|
|
347
|
+
tool_calls=getattr(
|
|
348
|
+
chat_result.generations[0].message, "tool_calls", None
|
|
349
|
+
),
|
|
350
|
+
)
|
|
351
|
+
)
|
|
352
|
+
yield chunk
|
|
353
|
+
|
|
220
354
|
def with_structured_output(
|
|
221
355
|
self,
|
|
222
356
|
schema: Optional[Any] = None,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
3
|
# Common utility to print UiPath output file
|
|
4
|
-
# Usage: source /app/testcases/common/
|
|
4
|
+
# Usage: source /app/testcases/common/validate_output.sh
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
debug_print_uipath_output() {
|
|
7
7
|
echo "Printing output file..."
|
|
8
8
|
if [ -f "__uipath/output.json" ]; then
|
|
9
9
|
echo "=== OUTPUT FILE CONTENT ==="
|
|
@@ -21,3 +21,15 @@ print_uipath_output() {
|
|
|
21
21
|
fi
|
|
22
22
|
fi
|
|
23
23
|
}
|
|
24
|
+
|
|
25
|
+
validate_output() {
|
|
26
|
+
echo "Printing output file for validation..."
|
|
27
|
+
debug_print_uipath_output
|
|
28
|
+
|
|
29
|
+
echo "Validating output..."
|
|
30
|
+
python src/assert.py || { echo "Validation failed!"; exit 1; }
|
|
31
|
+
|
|
32
|
+
echo "Testcase completed successfully."
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
validate_output
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "Syncing dependencies..."
|
|
5
|
+
uv sync
|
|
6
|
+
|
|
7
|
+
echo "Authenticating with UiPath..."
|
|
8
|
+
uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
|
|
9
|
+
|
|
10
|
+
echo "Initializing the project..."
|
|
11
|
+
uv run uipath init
|
|
12
|
+
|
|
13
|
+
echo "Packing agent..."
|
|
14
|
+
uv run uipath pack
|
|
15
|
+
|
|
16
|
+
echo "Running agent..."
|
|
17
|
+
uv run uipath run agent --file input.json
|
|
18
|
+
|
|
19
|
+
echo "Running agent again with empty UIPATH_JOB_KEY..."
|
|
20
|
+
export UIPATH_JOB_KEY=""
|
|
21
|
+
uv run uipath run agent --file input.json >> local_run_output.log
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
print("Checking company research agent output...")
|
|
5
|
+
|
|
6
|
+
# Check NuGet package
|
|
7
|
+
uipath_dir = ".uipath"
|
|
8
|
+
assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
|
|
9
|
+
|
|
10
|
+
nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
|
|
11
|
+
assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
|
|
12
|
+
|
|
13
|
+
print(f"NuGet package found: {nupkg_files[0]}")
|
|
14
|
+
|
|
15
|
+
# Check agent output file
|
|
16
|
+
output_file = "__uipath/output.json"
|
|
17
|
+
assert os.path.isfile(output_file), "Agent output file not found"
|
|
18
|
+
|
|
19
|
+
print("Agent output file found")
|
|
20
|
+
|
|
21
|
+
# Check status and required fields
|
|
22
|
+
with open(output_file, 'r', encoding='utf-8') as f:
|
|
23
|
+
output_data = json.load(f)
|
|
24
|
+
|
|
25
|
+
# Check status
|
|
26
|
+
status = output_data.get("status")
|
|
27
|
+
assert status == "successful", f"Agent execution failed with status: {status}"
|
|
28
|
+
|
|
29
|
+
print("Agent execution status: successful")
|
|
30
|
+
|
|
31
|
+
# Check required fields for company research agent
|
|
32
|
+
assert "output" in output_data, "Missing 'output' field in agent response"
|
|
33
|
+
|
|
34
|
+
output_content = output_data["output"]
|
|
35
|
+
assert "response" in output_content, "Missing 'response' field in output"
|
|
36
|
+
|
|
37
|
+
response = output_content["response"]
|
|
38
|
+
assert response and response.strip() != "", "Response field is empty"
|
|
39
|
+
|
|
40
|
+
with open("local_run_output.log", 'r', encoding='utf-8') as f:
|
|
41
|
+
local_run_output = f.read()
|
|
42
|
+
|
|
43
|
+
# Check if response contains 'Successful execution.'
|
|
44
|
+
assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
|
|
45
|
+
|
|
46
|
+
print("Required fields validation passed")
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "agent"
|
|
3
|
+
version = "0.0.1"
|
|
4
|
+
description = "agent"
|
|
5
|
+
authors = [{ name = "John Doe", email = "john.doe@myemail.com" }]
|
|
6
|
+
dependencies = [
|
|
7
|
+
"langchain-anthropic>=0.3.8",
|
|
8
|
+
"uipath-langchain",
|
|
9
|
+
]
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
|
|
12
|
+
[tool.uv.sources]
|
|
13
|
+
uipath-langchain = { path = "../../", editable = true }
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "Syncing dependencies..."
|
|
5
|
+
uv sync
|
|
6
|
+
|
|
7
|
+
echo "Backing up pyproject.toml..."
|
|
8
|
+
cp pyproject.toml pyproject-overwrite.toml
|
|
9
|
+
|
|
10
|
+
echo "Creating new UiPath agent..."
|
|
11
|
+
uv run uipath new agent
|
|
12
|
+
|
|
13
|
+
# uipath new overwrites pyproject.toml, so we need to copy it back
|
|
14
|
+
echo "Restoring pyproject.toml..."
|
|
15
|
+
cp pyproject-overwrite.toml pyproject.toml
|
|
16
|
+
uv sync
|
|
17
|
+
|
|
18
|
+
echo "Authenticating with UiPath..."
|
|
19
|
+
uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
|
|
20
|
+
|
|
21
|
+
echo "Initializing UiPath..."
|
|
22
|
+
uv run uipath init
|
|
23
|
+
|
|
24
|
+
echo "Packing agent..."
|
|
25
|
+
uv run uipath pack
|
|
26
|
+
|
|
27
|
+
echo "Input from input.json file"
|
|
28
|
+
uv run uipath run agent --file input.json
|
|
29
|
+
|
|
30
|
+
echo "Running agent again with empty UIPATH_JOB_KEY..."
|
|
31
|
+
export UIPATH_JOB_KEY=""
|
|
32
|
+
uv run uipath run agent --file input.json >> local_run_output.log
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
print("Checking init-flow output...")
|
|
5
|
+
|
|
6
|
+
# Check NuGet package
|
|
7
|
+
uipath_dir = ".uipath"
|
|
8
|
+
assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
|
|
9
|
+
|
|
10
|
+
nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
|
|
11
|
+
assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
|
|
12
|
+
|
|
13
|
+
print(f"NuGet package found: {nupkg_files[0]}")
|
|
14
|
+
|
|
15
|
+
# Check agent output file
|
|
16
|
+
output_file = "__uipath/output.json"
|
|
17
|
+
assert os.path.isfile(output_file), "Agent output file not found"
|
|
18
|
+
|
|
19
|
+
print("Agent output file found")
|
|
20
|
+
|
|
21
|
+
# Check status and required fields
|
|
22
|
+
with open(output_file, 'r', encoding='utf-8') as f:
|
|
23
|
+
output_data = json.load(f)
|
|
24
|
+
|
|
25
|
+
# Check status
|
|
26
|
+
status = output_data.get("status")
|
|
27
|
+
assert status == "successful", f"Agent execution failed with status: {status}"
|
|
28
|
+
|
|
29
|
+
print("Agent execution status: successful")
|
|
30
|
+
|
|
31
|
+
# Check required fields for simple local MCP agent
|
|
32
|
+
assert "output" in output_data, "Missing 'output' field in agent response"
|
|
33
|
+
|
|
34
|
+
output_content = output_data["output"]
|
|
35
|
+
assert "report" in output_content, "Missing 'report' field in output"
|
|
36
|
+
|
|
37
|
+
report = output_content["report"]
|
|
38
|
+
assert report and isinstance(report, str), "Report field is empty or not a string"
|
|
39
|
+
|
|
40
|
+
with open("local_run_output.log", 'r', encoding='utf-8') as f:
|
|
41
|
+
local_run_output = f.read()
|
|
42
|
+
|
|
43
|
+
# Check if response contains 'Successful execution.'
|
|
44
|
+
assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
|
|
45
|
+
|
|
46
|
+
print("Required fields validation passed")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "Syncing dependencies..."
|
|
5
|
+
uv sync
|
|
6
|
+
|
|
7
|
+
echo "Authenticating with UiPath..."
|
|
8
|
+
uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
|
|
9
|
+
|
|
10
|
+
echo "Initializing the project..."
|
|
11
|
+
uv run uipath init
|
|
12
|
+
|
|
13
|
+
echo "Packing agent..."
|
|
14
|
+
uv run uipath pack
|
|
15
|
+
|
|
16
|
+
echo "Running agent..."
|
|
17
|
+
uv run uipath run agent --file input.json
|
|
18
|
+
|
|
19
|
+
echo "Running agent again with empty UIPATH_JOB_KEY..."
|
|
20
|
+
export UIPATH_JOB_KEY=""
|
|
21
|
+
uv run uipath run agent --file input.json >> local_run_output.log
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
print("Checking simple local MCP agent output...")
|
|
5
|
+
|
|
6
|
+
# Check NuGet package
|
|
7
|
+
uipath_dir = ".uipath"
|
|
8
|
+
assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
|
|
9
|
+
|
|
10
|
+
nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
|
|
11
|
+
assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
|
|
12
|
+
|
|
13
|
+
print(f"NuGet package found: {nupkg_files[0]}")
|
|
14
|
+
|
|
15
|
+
# Check agent output file
|
|
16
|
+
output_file = "__uipath/output.json"
|
|
17
|
+
assert os.path.isfile(output_file), "Agent output file not found"
|
|
18
|
+
|
|
19
|
+
print("Agent output file found")
|
|
20
|
+
|
|
21
|
+
# Check status and required fields
|
|
22
|
+
with open(output_file, 'r', encoding='utf-8') as f:
|
|
23
|
+
output_data = json.load(f)
|
|
24
|
+
|
|
25
|
+
# Check status
|
|
26
|
+
status = output_data.get("status")
|
|
27
|
+
assert status == "successful", f"Agent execution failed with status: {status}"
|
|
28
|
+
|
|
29
|
+
print("Agent execution status: successful")
|
|
30
|
+
|
|
31
|
+
# Check required fields for simple local MCP agent
|
|
32
|
+
assert "output" in output_data, "Missing 'output' field in agent response"
|
|
33
|
+
|
|
34
|
+
output_content = output_data["output"]
|
|
35
|
+
assert "messages" in output_content, "Missing 'messages' field in output"
|
|
36
|
+
|
|
37
|
+
messages = output_content["messages"]
|
|
38
|
+
assert messages and isinstance(messages, list), "Messages field is empty or not a list"
|
|
39
|
+
|
|
40
|
+
with open("local_run_output.log", 'r', encoding='utf-8') as f:
|
|
41
|
+
local_run_output = f.read()
|
|
42
|
+
|
|
43
|
+
# Check if response contains 'Successful execution.'
|
|
44
|
+
assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
|
|
45
|
+
|
|
46
|
+
print("Required fields validation passed")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "Syncing dependencies..."
|
|
5
|
+
uv sync
|
|
6
|
+
|
|
7
|
+
echo "Authenticating with UiPath..."
|
|
8
|
+
uv run uipath auth --client-id="$CLIENT_ID" --client-secret="$CLIENT_SECRET" --base-url="$BASE_URL"
|
|
9
|
+
|
|
10
|
+
echo "Initializing the project..."
|
|
11
|
+
uv run uipath init
|
|
12
|
+
|
|
13
|
+
echo "Packing agent..."
|
|
14
|
+
uv run uipath pack
|
|
15
|
+
|
|
16
|
+
echo "Input from input.json file"
|
|
17
|
+
uv run uipath run agent --file input.json
|
|
18
|
+
|
|
19
|
+
echo "Resuming agent run by default with {'Answer': true}..."
|
|
20
|
+
uv run uipath run agent '{"Answer": true}' --resume;
|
|
21
|
+
|
|
22
|
+
echo "Running agent again with empty UIPATH_JOB_KEY..."
|
|
23
|
+
export UIPATH_JOB_KEY=""
|
|
24
|
+
uv run uipath run agent --file input.json >> local_run_output.log
|
|
25
|
+
uv run uipath run agent '{"Answer": true}' --resume >> local_run_output.log
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
print("Checking ticket classification agent output...")
|
|
5
|
+
|
|
6
|
+
# Check NuGet package
|
|
7
|
+
uipath_dir = ".uipath"
|
|
8
|
+
assert os.path.exists(uipath_dir), "NuGet package directory (.uipath) not found"
|
|
9
|
+
|
|
10
|
+
nupkg_files = [f for f in os.listdir(uipath_dir) if f.endswith('.nupkg')]
|
|
11
|
+
assert nupkg_files, "NuGet package file (.nupkg) not found in .uipath directory"
|
|
12
|
+
|
|
13
|
+
print(f"NuGet package found: {nupkg_files[0]}")
|
|
14
|
+
|
|
15
|
+
# Check agent output file
|
|
16
|
+
output_file = "__uipath/output.json"
|
|
17
|
+
assert os.path.isfile(output_file), "Agent output file not found"
|
|
18
|
+
|
|
19
|
+
print("Agent output file found")
|
|
20
|
+
|
|
21
|
+
# Check status and required fields
|
|
22
|
+
with open(output_file, 'r', encoding='utf-8') as f:
|
|
23
|
+
output_data = json.load(f)
|
|
24
|
+
|
|
25
|
+
# Check status
|
|
26
|
+
status = output_data.get("status")
|
|
27
|
+
assert status == "successful", f"Agent execution failed with status: {status}"
|
|
28
|
+
|
|
29
|
+
print("Agent execution status: successful")
|
|
30
|
+
|
|
31
|
+
# Check required fields for ticket classification agent
|
|
32
|
+
assert "output" in output_data, "Missing 'output' field in agent response"
|
|
33
|
+
|
|
34
|
+
output_content = output_data["output"]
|
|
35
|
+
assert "label" in output_content, "Missing 'label' field in output"
|
|
36
|
+
|
|
37
|
+
label = output_content["label"]
|
|
38
|
+
assert label and label.strip() != "", "Label field is empty"
|
|
39
|
+
|
|
40
|
+
assert "confidence" in output_content, "Missing 'confidence' field in output"
|
|
41
|
+
|
|
42
|
+
confidence = output_content["confidence"]
|
|
43
|
+
assert confidence is not None and confidence != "", "Confidence field is empty"
|
|
44
|
+
|
|
45
|
+
with open("local_run_output.log", 'r', encoding='utf-8') as f:
|
|
46
|
+
local_run_output = f.read()
|
|
47
|
+
|
|
48
|
+
# Check if response contains 'Successful execution.'
|
|
49
|
+
assert "Successful execution." in local_run_output, f"Response does not contain 'Successful execution.'. Actual response: {local_run_output}"
|
|
50
|
+
|
|
51
|
+
print("Required fields validation passed")
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
FROM ghcr.io/astral-sh/uv:python3.12-bookworm
|
|
2
|
-
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
|
|
5
|
-
COPY . .
|
|
6
|
-
|
|
7
|
-
# Install dependencies for all testcases
|
|
8
|
-
RUN uv sync
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# Set environment variables for runtime
|
|
12
|
-
ENV TAVILY_API_KEY=${TAVILY_API_KEY:-""}
|
|
13
|
-
ENV UIPATH_TENANT_ID=${UIPATH_TENANT_ID:-""}
|
|
14
|
-
ENV UIPATH_JOB_KEY=3a03d5cb-fa21-4021-894d-a8e2eda0afe0
|
|
15
|
-
|
|
16
|
-
CMD ["bash"]
|