uipath-langchain 0.0.145__tar.gz → 0.0.147__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.145 → uipath_langchain-0.0.147}/PKG-INFO +1 -1
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/pyproject.toml +1 -1
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_runtime.py +3 -3
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_utils/_schema.py +65 -13
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_init.py +10 -3
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/__init__.py +4 -3
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/agent.py +6 -3
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/init_node.py +1 -1
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/llm_node.py +1 -1
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/router.py +1 -1
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/terminate_node.py +1 -1
- uipath_langchain-0.0.145/src/uipath_langchain/agent/react/state.py → uipath_langchain-0.0.147/src/uipath_langchain/agent/react/types.py +7 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +89 -109
- uipath_langchain-0.0.147/tests/cli/test_schema.py +266 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/uv.lock +138 -124
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.cursorrules +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.editorconfig +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.gitattributes +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/cd.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/ci.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/commitlint.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/integration_tests.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/lint-custom-version.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/lint.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/publish-dev.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/publish-docs.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/publish-prior-stable-version.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/slack.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/test-custom-version.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.github/workflows/test.yml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.gitignore +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.pre-commit-config.yaml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.python-version +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.vscode/extensions.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/.vscode/settings.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/CONTRIBUTING.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/LICENSE +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/chat_models.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/context_grounding.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/human_in_the_loop.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/quick_start.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/quick_start_images/cloud_env_var_light.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/quick_start_images/invoke_output_dark.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/quick_start_images/invoke_output_light.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-index-1.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-index-2.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-process.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/folder-path.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/job-info.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/output.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/process-page.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/researcher-1.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/researcher-2.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/run-process-1.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/run-process-2.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/run-agent.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/start-job.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/RAG-quiz-generator/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/calculator-agent/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/calculator-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/calculator-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/calculator-agent/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/calculator-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/chat-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/.env.template +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/.python-version +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/.vscode/launch.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/email-organizer-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/database.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/models.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/schemas.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/templates/index.html +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/hitl-inbox-server/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/oauth-external-apps-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/retrieval-chain/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/simple-remote-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/.env.example +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/README.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/agent.mermaid +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/samples/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_debug.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_dev.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_eval.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_new.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/cli_run.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_resources/AGENTS.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_tracing/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_tracing/_utils.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_utils/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_utils/_settings.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/constants.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/exceptions.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/tools/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/tools/tools.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/utils.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/context_tool.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/process_tool.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/tool_factory.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/tool_node.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/tools/utils.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/chat/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/chat/models.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/embeddings/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/embeddings/embeddings.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/middlewares.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/py.typed +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/retrievers/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/runtime_factories.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/tools/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/tools/preconfigured.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/vectorstores/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/common/trace_assert.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/common/validate_output.sh +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/expected_raw.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/expected_traces.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/run.sh +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/src/assert.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/src/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/company-research-agent/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/init-flow/expected_traces.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/init-flow/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/init-flow/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/init-flow/run.sh +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/init-flow/src/assert.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/expected_traces.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/run.sh +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/src/assert.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/simple-local-mcp/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/expected_traces.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/input.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/pyproject.toml +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/raw_traces.jsonl +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/run.sh +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/src/assert.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/src/main.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/testcases/ticket-classification/uv.lock +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/agent/react/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/agent/react/test_utils.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/conftest.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/mocks/simple_agent.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/test_init.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/cli/test_run.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/conftest.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/langgraph.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/mocks/uipath.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/test_action_trigger.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/test_hitl_api_trigger.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/test_hitl_default_escalation.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/hitl/test_hitl_job_trigger.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/test_dummy.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/tools/__init__.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/tools/conftest.py +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/tools/mocks/agent_definition.json +0 -0
- {uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/tests/tools/test_preconfigured.py +0 -0
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_runtime/_runtime.py
RENAMED
|
@@ -490,14 +490,14 @@ class LangGraphScriptRuntime(LangGraphRuntime):
|
|
|
490
490
|
"""Get entrypoint for this LangGraph runtime."""
|
|
491
491
|
graph = await self.resolver()
|
|
492
492
|
compiled_graph = graph.compile()
|
|
493
|
-
|
|
493
|
+
schema_details = generate_schema_from_graph(compiled_graph)
|
|
494
494
|
|
|
495
495
|
return Entrypoint(
|
|
496
496
|
file_path=self.context.entrypoint, # type: ignore[call-arg]
|
|
497
497
|
unique_id=str(uuid4()),
|
|
498
498
|
type="agent",
|
|
499
|
-
input=schema["input"],
|
|
500
|
-
output=schema["output"],
|
|
499
|
+
input=schema_details.schema["input"],
|
|
500
|
+
output=schema_details.schema["output"],
|
|
501
501
|
)
|
|
502
502
|
|
|
503
503
|
async def cleanup(self) -> None:
|
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/_cli/_utils/_schema.py
RENAMED
|
@@ -1,27 +1,73 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
1
2
|
from typing import Any, Dict
|
|
2
3
|
|
|
3
4
|
from langgraph.graph.state import CompiledStateGraph
|
|
4
5
|
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
@dataclass
|
|
8
|
+
class SchemaDetails:
|
|
9
|
+
schema: dict[str, Any]
|
|
10
|
+
has_input_circular_dependency: bool
|
|
11
|
+
has_output_circular_dependency: bool
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def resolve_refs(schema, root=None, visited=None):
|
|
15
|
+
"""Recursively resolves $ref references in a JSON schema, handling circular references.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
tuple: (resolved_schema, has_circular_dependency)
|
|
19
|
+
"""
|
|
8
20
|
if root is None:
|
|
9
|
-
root = schema
|
|
21
|
+
root = schema
|
|
22
|
+
|
|
23
|
+
if visited is None:
|
|
24
|
+
visited = set()
|
|
25
|
+
|
|
26
|
+
has_circular = False
|
|
10
27
|
|
|
11
28
|
if isinstance(schema, dict):
|
|
12
29
|
if "$ref" in schema:
|
|
13
|
-
ref_path = schema["$ref"]
|
|
30
|
+
ref_path = schema["$ref"]
|
|
31
|
+
|
|
32
|
+
if ref_path in visited:
|
|
33
|
+
# Circular dependency detected
|
|
34
|
+
return {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": f"Circular reference to {ref_path}",
|
|
37
|
+
}, True
|
|
38
|
+
|
|
39
|
+
visited.add(ref_path)
|
|
40
|
+
|
|
41
|
+
# Resolve the reference
|
|
42
|
+
ref_parts = ref_path.lstrip("#/").split("/")
|
|
14
43
|
ref_schema = root
|
|
15
|
-
for part in
|
|
44
|
+
for part in ref_parts:
|
|
16
45
|
ref_schema = ref_schema.get(part, {})
|
|
17
|
-
return resolve_refs(ref_schema, root)
|
|
18
46
|
|
|
19
|
-
|
|
47
|
+
result, circular = resolve_refs(ref_schema, root, visited)
|
|
48
|
+
has_circular = has_circular or circular
|
|
49
|
+
|
|
50
|
+
# Remove from visited after resolution (allows the same ref in different branches)
|
|
51
|
+
visited.discard(ref_path)
|
|
52
|
+
|
|
53
|
+
return result, has_circular
|
|
54
|
+
|
|
55
|
+
resolved_dict = {}
|
|
56
|
+
for k, v in schema.items():
|
|
57
|
+
resolved_value, circular = resolve_refs(v, root, visited)
|
|
58
|
+
resolved_dict[k] = resolved_value
|
|
59
|
+
has_circular = has_circular or circular
|
|
60
|
+
return resolved_dict, has_circular
|
|
20
61
|
|
|
21
62
|
elif isinstance(schema, list):
|
|
22
|
-
|
|
63
|
+
resolved_list = []
|
|
64
|
+
for item in schema:
|
|
65
|
+
resolved_item, circular = resolve_refs(item, root, visited)
|
|
66
|
+
resolved_list.append(resolved_item)
|
|
67
|
+
has_circular = has_circular or circular
|
|
68
|
+
return resolved_list, has_circular
|
|
23
69
|
|
|
24
|
-
return schema
|
|
70
|
+
return schema, False
|
|
25
71
|
|
|
26
72
|
|
|
27
73
|
def process_nullable_types(
|
|
@@ -45,8 +91,10 @@ def process_nullable_types(
|
|
|
45
91
|
|
|
46
92
|
def generate_schema_from_graph(
|
|
47
93
|
graph: CompiledStateGraph[Any, Any, Any],
|
|
48
|
-
) ->
|
|
94
|
+
) -> SchemaDetails:
|
|
49
95
|
"""Extract input/output schema from a LangGraph graph"""
|
|
96
|
+
input_circular_dependency = False
|
|
97
|
+
output_circular_dependency = False
|
|
50
98
|
schema = {
|
|
51
99
|
"input": {"type": "object", "properties": {}, "required": []},
|
|
52
100
|
"output": {"type": "object", "properties": {}, "required": []},
|
|
@@ -55,7 +103,9 @@ def generate_schema_from_graph(
|
|
|
55
103
|
if hasattr(graph, "input_schema"):
|
|
56
104
|
if hasattr(graph.input_schema, "model_json_schema"):
|
|
57
105
|
input_schema = graph.input_schema.model_json_schema()
|
|
58
|
-
unpacked_ref_def_properties = resolve_refs(
|
|
106
|
+
unpacked_ref_def_properties, input_circular_dependency = resolve_refs(
|
|
107
|
+
input_schema
|
|
108
|
+
)
|
|
59
109
|
|
|
60
110
|
# Process the schema to handle nullable types
|
|
61
111
|
processed_properties = process_nullable_types(
|
|
@@ -70,7 +120,9 @@ def generate_schema_from_graph(
|
|
|
70
120
|
if hasattr(graph, "output_schema"):
|
|
71
121
|
if hasattr(graph.output_schema, "model_json_schema"):
|
|
72
122
|
output_schema = graph.output_schema.model_json_schema()
|
|
73
|
-
unpacked_ref_def_properties = resolve_refs(
|
|
123
|
+
unpacked_ref_def_properties, output_circular_dependency = resolve_refs(
|
|
124
|
+
output_schema
|
|
125
|
+
)
|
|
74
126
|
|
|
75
127
|
# Process the schema to handle nullable types
|
|
76
128
|
processed_properties = process_nullable_types(
|
|
@@ -82,4 +134,4 @@ def generate_schema_from_graph(
|
|
|
82
134
|
"required", []
|
|
83
135
|
)
|
|
84
136
|
|
|
85
|
-
return schema
|
|
137
|
+
return SchemaDetails(schema, input_circular_dependency, output_circular_dependency)
|
|
@@ -175,7 +175,7 @@ async def langgraph_init_middleware_async(
|
|
|
175
175
|
else loaded_graph
|
|
176
176
|
)
|
|
177
177
|
compiled_graph = state_graph.compile()
|
|
178
|
-
|
|
178
|
+
schema_details = generate_schema_from_graph(compiled_graph)
|
|
179
179
|
|
|
180
180
|
mermaids[graph.name] = compiled_graph.get_graph(xray=1).draw_mermaid()
|
|
181
181
|
|
|
@@ -197,11 +197,17 @@ async def langgraph_init_middleware_async(
|
|
|
197
197
|
"filePath": graph.name,
|
|
198
198
|
"uniqueId": str(uuid.uuid4()),
|
|
199
199
|
"type": "agent",
|
|
200
|
-
"input":
|
|
201
|
-
"output":
|
|
200
|
+
"input": schema_details.schema["input"],
|
|
201
|
+
"output": schema_details.schema["output"],
|
|
202
202
|
}
|
|
203
203
|
entrypoints.append(new_entrypoint)
|
|
204
204
|
|
|
205
|
+
warning_circular_deps = f" schema of graph '{graph.name}' contains circular dependencies. Some types might not be correctly inferred."
|
|
206
|
+
if schema_details.has_input_circular_dependency:
|
|
207
|
+
console.warning("Input" + warning_circular_deps)
|
|
208
|
+
if schema_details.has_output_circular_dependency:
|
|
209
|
+
console.warning("Output" + warning_circular_deps)
|
|
210
|
+
|
|
205
211
|
except Exception as e:
|
|
206
212
|
console.error(f"Error during graph load: {e}")
|
|
207
213
|
return MiddlewareResult(
|
|
@@ -243,6 +249,7 @@ async def langgraph_init_middleware_async(
|
|
|
243
249
|
should_continue=False,
|
|
244
250
|
should_include_stacktrace=True,
|
|
245
251
|
)
|
|
252
|
+
|
|
246
253
|
console.success(f"Created {click.style(config_path, fg='cyan')} file.")
|
|
247
254
|
|
|
248
255
|
generate_agents_md_files(options)
|
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/__init__.py
RENAMED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"""UiPath ReAct Agent implementation"""
|
|
2
2
|
|
|
3
3
|
from .agent import create_agent
|
|
4
|
-
from .
|
|
4
|
+
from .types import AgentGraphConfig, AgentGraphNode, AgentGraphState
|
|
5
5
|
from .utils import resolve_output_model
|
|
6
6
|
|
|
7
7
|
__all__ = [
|
|
8
8
|
"create_agent",
|
|
9
|
-
"AgentGraphState",
|
|
10
|
-
"AgentGraphNode",
|
|
11
9
|
"resolve_output_model",
|
|
10
|
+
"AgentGraphNode",
|
|
11
|
+
"AgentGraphState",
|
|
12
|
+
"AgentGraphConfig",
|
|
12
13
|
]
|
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/agent.py
RENAMED
|
@@ -18,11 +18,11 @@ from .llm_node import (
|
|
|
18
18
|
from .router import (
|
|
19
19
|
route_agent,
|
|
20
20
|
)
|
|
21
|
-
from .state import AgentGraphNode, AgentGraphState
|
|
22
21
|
from .terminate_node import (
|
|
23
22
|
create_terminate_node,
|
|
24
23
|
)
|
|
25
24
|
from .tools import create_flow_control_tools
|
|
25
|
+
from .types import AgentGraphConfig, AgentGraphNode, AgentGraphState
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def create_agent(
|
|
@@ -32,13 +32,16 @@ def create_agent(
|
|
|
32
32
|
*,
|
|
33
33
|
state_schema: Type[AgentGraphState] = AgentGraphState,
|
|
34
34
|
response_format: type[BaseModel] | None = None,
|
|
35
|
-
|
|
35
|
+
config: AgentGraphConfig | None = None,
|
|
36
36
|
) -> StateGraph[AgentGraphState]:
|
|
37
37
|
"""Build agent graph with INIT -> AGENT <-> TOOLS loop, terminated by control flow tools.
|
|
38
38
|
|
|
39
39
|
Control flow tools (end_execution, raise_error) are auto-injected alongside regular tools.
|
|
40
40
|
"""
|
|
41
|
-
|
|
41
|
+
if config is None:
|
|
42
|
+
config = AgentGraphConfig()
|
|
43
|
+
|
|
44
|
+
os.environ["LANGCHAIN_RECURSION_LIMIT"] = str(config.recursion_limit)
|
|
42
45
|
|
|
43
46
|
agent_tools = list(tools)
|
|
44
47
|
flow_control_tools: list[BaseTool] = create_flow_control_tools(response_format)
|
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/llm_node.py
RENAMED
|
@@ -7,7 +7,7 @@ from langchain_core.messages import AIMessage, AnyMessage
|
|
|
7
7
|
from langchain_core.tools import BaseTool
|
|
8
8
|
|
|
9
9
|
from .constants import MAX_SUCCESSIVE_COMPLETIONS
|
|
10
|
-
from .
|
|
10
|
+
from .types import AgentGraphState
|
|
11
11
|
from .utils import count_successive_completions
|
|
12
12
|
|
|
13
13
|
|
{uipath_langchain-0.0.145 → uipath_langchain-0.0.147}/src/uipath_langchain/agent/react/router.py
RENAMED
|
@@ -7,7 +7,7 @@ from uipath.agent.react import END_EXECUTION_TOOL, RAISE_ERROR_TOOL
|
|
|
7
7
|
|
|
8
8
|
from .constants import MAX_SUCCESSIVE_COMPLETIONS
|
|
9
9
|
from .exceptions import AgentNodeRoutingException
|
|
10
|
-
from .
|
|
10
|
+
from .types import AgentGraphNode, AgentGraphState
|
|
11
11
|
from .utils import count_successive_completions
|
|
12
12
|
|
|
13
13
|
FLOW_CONTROL_TOOLS = [END_EXECUTION_TOOL.name, RAISE_ERROR_TOOL.name]
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from enum import StrEnum
|
|
4
4
|
|
|
5
5
|
from langgraph.graph import MessagesState
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class AgentGraphState(MessagesState):
|
|
@@ -16,3 +17,9 @@ class AgentGraphNode(StrEnum):
|
|
|
16
17
|
AGENT = "agent"
|
|
17
18
|
TOOLS = "tools"
|
|
18
19
|
TERMINATE = "terminate"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AgentGraphConfig(BaseModel):
|
|
23
|
+
recursion_limit: int = Field(
|
|
24
|
+
default=50, ge=1, description="Maximum recursion limit for the agent graph"
|
|
25
|
+
)
|
|
@@ -2,23 +2,17 @@
|
|
|
2
2
|
Vector store implementation that connects to UiPath Context Grounding as a backend.
|
|
3
3
|
|
|
4
4
|
This is a read-only vector store that uses the UiPath Context Grounding API to retrieve documents.
|
|
5
|
-
|
|
6
|
-
You need to set the following environment variables (also see .env.example):
|
|
7
|
-
### - UIPATH_URL="https://alpha.uipath.com/{ORG_ID}/{TENANT_ID}"
|
|
8
|
-
### - UIPATH_ACCESS_TOKEN={BEARER_TOKEN_WITH_CONTEXT_GROUNDING_PERMISSIONS}
|
|
9
|
-
### - UIPATH_FOLDER_PATH="" - this can be left empty
|
|
10
|
-
### - UIPATH_FOLDER_KEY="" - this can be left empty
|
|
11
5
|
"""
|
|
12
6
|
|
|
13
7
|
from collections.abc import Iterable
|
|
14
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Self
|
|
15
9
|
|
|
16
10
|
from langchain_core.documents import Document
|
|
17
11
|
from langchain_core.embeddings import Embeddings
|
|
18
12
|
from langchain_core.vectorstores import VectorStore
|
|
13
|
+
from typing_extensions import override
|
|
19
14
|
from uipath import UiPath
|
|
20
|
-
|
|
21
|
-
VST = TypeVar("VST", bound="ContextGroundingVectorStore")
|
|
15
|
+
from uipath.models.context_grounding import ContextGroundingQueryResponse
|
|
22
16
|
|
|
23
17
|
|
|
24
18
|
class ContextGroundingVectorStore(VectorStore):
|
|
@@ -26,42 +20,32 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
26
20
|
|
|
27
21
|
This class provides a straightforward implementation that connects to the
|
|
28
22
|
UiPath Context Grounding API for semantic searching.
|
|
29
|
-
|
|
30
|
-
Example:
|
|
31
|
-
.. code-block:: python
|
|
32
|
-
|
|
33
|
-
from uipath_agents_gym.tools.ecs_vectorstore import ContextGroundingVectorStore
|
|
34
|
-
|
|
35
|
-
# Initialize the vector store with an index name
|
|
36
|
-
vectorstore = ContextGroundingVectorStore(index_name="ECCN")
|
|
37
|
-
|
|
38
|
-
# Perform similarity search
|
|
39
|
-
docs_with_scores = vectorstore.similarity_search_with_score(
|
|
40
|
-
"How do I process an invoice?", k=5
|
|
41
|
-
)
|
|
42
23
|
"""
|
|
43
24
|
|
|
44
25
|
def __init__(
|
|
45
26
|
self,
|
|
46
27
|
index_name: str,
|
|
47
|
-
|
|
48
|
-
|
|
28
|
+
uipath_sdk: UiPath | None = None,
|
|
29
|
+
folder_path: str | None = None,
|
|
49
30
|
):
|
|
50
31
|
"""Initialize the ContextGroundingVectorStore.
|
|
51
32
|
|
|
52
33
|
Args:
|
|
53
|
-
index_name: Name of the context grounding index to use
|
|
54
|
-
uipath_sdk: Optional SDK instance
|
|
34
|
+
index_name: Name of the context grounding index to use (schema name)
|
|
35
|
+
uipath_sdk: Optional UiPath SDK instance.
|
|
36
|
+
folder_path: Optional folder path for folder-scoped operations
|
|
55
37
|
"""
|
|
56
38
|
self.index_name = index_name
|
|
57
39
|
self.folder_path = folder_path
|
|
58
40
|
self.sdk = uipath_sdk or UiPath()
|
|
59
41
|
|
|
42
|
+
# VectorStore implementation methods
|
|
43
|
+
|
|
44
|
+
@override
|
|
60
45
|
def similarity_search_with_score(
|
|
61
46
|
self, query: str, k: int = 4, **kwargs: Any
|
|
62
47
|
) -> list[tuple[Document, float]]:
|
|
63
48
|
"""Return documents most similar to the query along with the distances.
|
|
64
|
-
The distance is 1 - score, where score is the relevance score returned by the Context Grounding API.
|
|
65
49
|
|
|
66
50
|
Args:
|
|
67
51
|
query: The query string
|
|
@@ -70,52 +54,24 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
70
54
|
Returns:
|
|
71
55
|
list of tuples of (document, score)
|
|
72
56
|
"""
|
|
73
|
-
#
|
|
74
|
-
results =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# Convert the results to Documents with scores
|
|
82
|
-
docs_with_scores = []
|
|
83
|
-
for result in results:
|
|
84
|
-
# Create metadata from result fields
|
|
85
|
-
metadata = {
|
|
86
|
-
"source": result.source,
|
|
87
|
-
"id": result.id,
|
|
88
|
-
"reference": result.reference,
|
|
89
|
-
"page_number": result.page_number,
|
|
90
|
-
"source_document_id": result.source_document_id,
|
|
91
|
-
"caption": result.caption,
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
# Add any operation metadata if available
|
|
95
|
-
if result.metadata:
|
|
96
|
-
metadata["operation_id"] = result.metadata.operation_id
|
|
97
|
-
metadata["strategy"] = result.metadata.strategy
|
|
98
|
-
|
|
99
|
-
# Create a Document with the content and metadata
|
|
100
|
-
doc = Document(
|
|
101
|
-
page_content=result.content,
|
|
102
|
-
metadata=metadata,
|
|
57
|
+
# Use the context grounding service to perform search
|
|
58
|
+
results: list[ContextGroundingQueryResponse] = (
|
|
59
|
+
self.sdk.context_grounding.search(
|
|
60
|
+
name=self.index_name,
|
|
61
|
+
query=query,
|
|
62
|
+
number_of_results=k,
|
|
63
|
+
folder_path=self.folder_path,
|
|
103
64
|
)
|
|
65
|
+
)
|
|
104
66
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
docs_with_scores.append((doc, score))
|
|
108
|
-
|
|
109
|
-
return docs_with_scores
|
|
67
|
+
return self._convert_results_to_documents(results)
|
|
110
68
|
|
|
69
|
+
@override
|
|
111
70
|
def similarity_search_with_relevance_scores(
|
|
112
71
|
self, query: str, k: int = 4, **kwargs: Any
|
|
113
72
|
) -> list[tuple[Document, float]]:
|
|
114
73
|
"""Return documents along with their relevance scores on a scale from 0 to 1.
|
|
115
74
|
|
|
116
|
-
This directly uses the scores provided by the Context Grounding API,
|
|
117
|
-
which are already normalized between 0 and 1.
|
|
118
|
-
|
|
119
75
|
Args:
|
|
120
76
|
query: The query string
|
|
121
77
|
k: Number of documents to return (default=4)
|
|
@@ -128,6 +84,7 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
128
84
|
for doc, score in self.similarity_search_with_score(query, k, **kwargs)
|
|
129
85
|
]
|
|
130
86
|
|
|
87
|
+
@override
|
|
131
88
|
async def asimilarity_search_with_score(
|
|
132
89
|
self, query: str, k: int = 4, **kwargs: Any
|
|
133
90
|
) -> list[tuple[Document, float]]:
|
|
@@ -140,52 +97,23 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
140
97
|
Returns:
|
|
141
98
|
list of tuples of (document, score)
|
|
142
99
|
"""
|
|
143
|
-
#
|
|
144
|
-
results
|
|
100
|
+
# Use the context grounding service to perform async search
|
|
101
|
+
results: list[
|
|
102
|
+
ContextGroundingQueryResponse
|
|
103
|
+
] = await self.sdk.context_grounding.search_async(
|
|
145
104
|
name=self.index_name,
|
|
146
105
|
query=query,
|
|
147
106
|
number_of_results=k,
|
|
148
107
|
folder_path=self.folder_path,
|
|
149
108
|
)
|
|
150
109
|
|
|
151
|
-
|
|
152
|
-
docs_with_scores = []
|
|
153
|
-
for result in results:
|
|
154
|
-
# Create metadata from result fields
|
|
155
|
-
metadata = {
|
|
156
|
-
"source": result.source,
|
|
157
|
-
"id": result.id,
|
|
158
|
-
"reference": result.reference,
|
|
159
|
-
"page_number": result.page_number,
|
|
160
|
-
"source_document_id": result.source_document_id,
|
|
161
|
-
"caption": result.caption,
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
# Add any operation metadata if available
|
|
165
|
-
if result.metadata:
|
|
166
|
-
metadata["operation_id"] = result.metadata.operation_id
|
|
167
|
-
metadata["strategy"] = result.metadata.strategy
|
|
168
|
-
|
|
169
|
-
# Create a Document with the content and metadata
|
|
170
|
-
doc = Document(
|
|
171
|
-
page_content=result.content,
|
|
172
|
-
metadata=metadata,
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
# Get the distance score as 1 - ecs_score
|
|
176
|
-
score = 1.0 - float(result.score)
|
|
177
|
-
|
|
178
|
-
docs_with_scores.append((doc, score))
|
|
179
|
-
|
|
180
|
-
return docs_with_scores
|
|
110
|
+
return self._convert_results_to_documents(results)
|
|
181
111
|
|
|
112
|
+
@override
|
|
182
113
|
async def asimilarity_search_with_relevance_scores(
|
|
183
114
|
self, query: str, k: int = 4, **kwargs: Any
|
|
184
115
|
) -> list[tuple[Document, float]]:
|
|
185
|
-
"""Asynchronously return documents along with their relevance scores
|
|
186
|
-
|
|
187
|
-
This directly uses the scores provided by the Context Grounding API,
|
|
188
|
-
which are already normalized between 0 and 1.
|
|
116
|
+
"""Asynchronously return documents along with their relevance scores.
|
|
189
117
|
|
|
190
118
|
Args:
|
|
191
119
|
query: The query string
|
|
@@ -201,6 +129,7 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
201
129
|
)
|
|
202
130
|
]
|
|
203
131
|
|
|
132
|
+
@override
|
|
204
133
|
def similarity_search(
|
|
205
134
|
self, query: str, k: int = 4, **kwargs: Any
|
|
206
135
|
) -> list[Document]:
|
|
@@ -216,6 +145,7 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
216
145
|
docs_and_scores = self.similarity_search_with_score(query, k, **kwargs)
|
|
217
146
|
return [doc for doc, _ in docs_and_scores]
|
|
218
147
|
|
|
148
|
+
@override
|
|
219
149
|
async def asimilarity_search(
|
|
220
150
|
self, query: str, k: int = 4, **kwargs: Any
|
|
221
151
|
) -> list[Document]:
|
|
@@ -231,14 +161,64 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
231
161
|
docs_and_scores = await self.asimilarity_search_with_score(query, k, **kwargs)
|
|
232
162
|
return [doc for doc, _ in docs_and_scores]
|
|
233
163
|
|
|
164
|
+
def _convert_results_to_documents(
|
|
165
|
+
self, results: list[ContextGroundingQueryResponse]
|
|
166
|
+
) -> list[tuple[Document, float]]:
|
|
167
|
+
"""Convert API results to Document objects with scores.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
results: List of ContextGroundingQueryResponse objects
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
List of tuples containing (Document, score)
|
|
174
|
+
"""
|
|
175
|
+
docs_with_scores = []
|
|
176
|
+
|
|
177
|
+
for result in results:
|
|
178
|
+
# Create metadata from result fields
|
|
179
|
+
metadata = {}
|
|
180
|
+
|
|
181
|
+
# Add string fields with proper defaults
|
|
182
|
+
if result.source:
|
|
183
|
+
metadata["source"] = str(result.source)
|
|
184
|
+
if result.reference:
|
|
185
|
+
metadata["reference"] = str(result.reference)
|
|
186
|
+
if result.page_number:
|
|
187
|
+
metadata["page_number"] = str(result.page_number)
|
|
188
|
+
if result.source_document_id:
|
|
189
|
+
metadata["source_document_id"] = str(result.source_document_id)
|
|
190
|
+
if result.caption:
|
|
191
|
+
metadata["caption"] = str(result.caption)
|
|
192
|
+
|
|
193
|
+
# Add any operation metadata if available
|
|
194
|
+
if result.metadata:
|
|
195
|
+
if result.metadata.operation_id:
|
|
196
|
+
metadata["operation_id"] = str(result.metadata.operation_id)
|
|
197
|
+
if result.metadata.strategy:
|
|
198
|
+
metadata["strategy"] = str(result.metadata.strategy)
|
|
199
|
+
|
|
200
|
+
# Create a Document with the content and metadata
|
|
201
|
+
doc = Document(
|
|
202
|
+
page_content=result.content or "",
|
|
203
|
+
metadata=metadata,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# Convert score to distance (1 - score)
|
|
207
|
+
score = 1.0 - float(result.score or 0.0)
|
|
208
|
+
|
|
209
|
+
docs_with_scores.append((doc, score))
|
|
210
|
+
|
|
211
|
+
return docs_with_scores
|
|
212
|
+
|
|
234
213
|
@classmethod
|
|
214
|
+
@override
|
|
235
215
|
def from_texts(
|
|
236
|
-
cls
|
|
216
|
+
cls,
|
|
237
217
|
texts: list[str],
|
|
238
218
|
embedding: Embeddings,
|
|
239
|
-
metadatas:
|
|
219
|
+
metadatas: list[dict[str, Any]] | None = None,
|
|
240
220
|
**kwargs: Any,
|
|
241
|
-
) ->
|
|
221
|
+
) -> Self:
|
|
242
222
|
"""This method is required by the VectorStore abstract class, but is not supported
|
|
243
223
|
by ContextGroundingVectorStore which is read-only.
|
|
244
224
|
|
|
@@ -246,15 +226,14 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
246
226
|
NotImplementedError: This method is not supported by ContextGroundingVectorStore
|
|
247
227
|
"""
|
|
248
228
|
raise NotImplementedError(
|
|
249
|
-
"ContextGroundingVectorStore is a read-only wrapper for UiPath Context Grounding.
|
|
250
|
-
"Creating a vector store from texts is not supported."
|
|
229
|
+
"ContextGroundingVectorStore is a read-only wrapper for UiPath Context Grounding."
|
|
251
230
|
)
|
|
252
231
|
|
|
253
|
-
|
|
232
|
+
@override
|
|
254
233
|
def add_texts(
|
|
255
234
|
self,
|
|
256
235
|
texts: Iterable[str],
|
|
257
|
-
metadatas:
|
|
236
|
+
metadatas: list[dict[str, Any]] | None = None,
|
|
258
237
|
**kwargs: Any,
|
|
259
238
|
) -> list[str]:
|
|
260
239
|
"""Not implemented for ContextGroundingVectorStore as this is a read-only wrapper."""
|
|
@@ -262,7 +241,8 @@ class ContextGroundingVectorStore(VectorStore):
|
|
|
262
241
|
"ContextGroundingVectorStore is a read-only wrapper for UiPath Context Grounding."
|
|
263
242
|
)
|
|
264
243
|
|
|
265
|
-
|
|
244
|
+
@override
|
|
245
|
+
def delete(self, ids: list[str] | None = None, **kwargs: Any) -> bool | None:
|
|
266
246
|
"""Not implemented for ContextGroundingVectorStore as this is a read-only wrapper."""
|
|
267
247
|
raise NotImplementedError(
|
|
268
248
|
"ContextGroundingVectorStore is a read-only wrapper for UiPath Context Grounding."
|