Skip to content

Commit 26d3299

Browse files
deeleeramonegithub-actions[bot]dependabot[bot]
authored
[Release] PyWry V2.0.5 (#102)
* [Release] pywry-v2.0.4 (#78) (#79) * chore(sync): merge main into develop (#66) * update sbom workflow * Release/pywry 2.0.1 (#41) * patch release * missed file in commit * Fix SBOM step * Fix pip install command for dependencies * Prepare Python package artifacts for PyPI publishing Add step to prepare Python package artifacts for publishing. --------- Co-authored-by: deeleeramone <> * Release/pywry 2.0.2 (#56) * chore(sync): merge main into develop (#43) * update sbom workflow * Release/pywry 2.0.1 (#41) * patch release * missed file in commit * Fix SBOM step * Fix pip install command for dependencies * Prepare Python package artifacts for PyPI publishing Add step to prepare Python package artifacts for publishing. --------- Co-authored-by: deeleeramone <> --------- * chore(lockfiles): refresh uv.lock and package-lock.json * build(deps): bump python-multipart (#45) Bumps the uv group with 1 update in the /pywry directory: [python-multipart](https://github.com/Kludex/python-multipart). Updates `python-multipart` from 0.0.26 to 0.0.27 - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md) - [Commits](Kludex/python-multipart@0.0.26...0.0.27) --- updated-dependencies: - dependency-name: python-multipart dependency-version: 0.0.27 dependency-type: indirect dependency-group: uv ... * build(deps): bump langchain-core (#46) Bumps the uv group with 1 update in the /pywry directory: [langchain-core](https://github.com/langchain-ai/langchain). Updates `langchain-core` from 1.3.2 to 1.3.3 - [Release notes](https://github.com/langchain-ai/langchain/releases) - [Commits](langchain-ai/langchain@langchain-core==1.3.2...langchain-core==1.3.3) --- updated-dependencies: - dependency-name: langchain-core dependency-version: 1.3.3 dependency-type: indirect dependency-group: uv ... * build(deps): update pydantic requirement in /pywry/docs (#47) Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md) - [Commits](pydantic/pydantic@v2.13.3...v2.13.4) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.13.4 dependency-type: direct:production ... * build(deps): update pydantic-settings requirement in /pywry/docs (#48) Updates the requirements on [pydantic-settings](https://github.com/pydantic/pydantic-settings) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.1 dependency-type: direct:production ... * build(deps): bump pydantic from 2.13.3 to 2.13.4 in /pywry (#49) Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.13.3 to 2.13.4. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md) - [Commits](pydantic/pydantic@v2.13.3...v2.13.4) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.13.4 dependency-type: direct:production update-type: version-update:semver-patch ... * build(deps-dev): bump agent-client-protocol in /pywry (#50) Bumps [agent-client-protocol](https://github.com/agentclientprotocol/python-sdk) from 0.9.0 to 0.10.0. - [Release notes](https://github.com/agentclientprotocol/python-sdk/releases) - [Commits](agentclientprotocol/python-sdk@0.9.0...0.10.0) --- updated-dependencies: - dependency-name: agent-client-protocol dependency-version: 0.10.0 dependency-type: direct:development update-type: version-update:semver-minor ... * build(deps): bump pydantic-settings from 2.14.0 to 2.14.1 in /pywry (#51) Bumps [pydantic-settings](https://github.com/pydantic/pydantic-settings) from 2.14.0 to 2.14.1. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.1 dependency-type: direct:production update-type: version-update:semver-patch ... * build(deps-dev): bump openai from 2.33.0 to 2.36.0 in /pywry (#52) Bumps [openai](https://github.com/openai/openai-python) from 2.33.0 to 2.36.0. - [Release notes](https://github.com/openai/openai-python/releases) - [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md) - [Commits](openai/openai-python@v2.33.0...v2.36.0) --- updated-dependencies: - dependency-name: openai dependency-version: 2.36.0 dependency-type: direct:development update-type: version-update:semver-minor ... * build(deps-dev): bump cryptography from 47.0.0 to 48.0.0 in /pywry (#53) Bumps [cryptography](https://github.com/pyca/cryptography) from 47.0.0 to 48.0.0. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](pyca/cryptography@47.0.0...48.0.0) --- updated-dependencies: - dependency-name: cryptography dependency-version: 48.0.0 dependency-type: direct:development update-type: version-update:semver-major ... * build(deps): bump urllib3 in /pywry in the uv group across 1 directory (#54) Bumps the uv group with 1 update in the /pywry directory: [urllib3](https://github.com/urllib3/urllib3). Updates `urllib3` from 2.6.3 to 2.7.0 - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.6.3...2.7.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.7.0 dependency-type: indirect dependency-group: uv ... * Bugfix/chat handler (#55) * fix chart handler getting swallowed * version bump * claude marketplace version * claude marketplace version * claude changelog --------- Co-authored-by: deeleeramone <> * chore(lockfiles): refresh uv.lock and package-lock.json --------- Co-authored-by: deeleeramone <> --------- * build(deps): update pydantic-settings requirement in /pywry/docs (#58) Updates the requirements on [pydantic-settings](https://github.com/pydantic/pydantic-settings) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.1 dependency-type: direct:production ... * build(deps-dev): bump authlib from 1.7.1 to 1.7.2 in /pywry (#59) Bumps [authlib](https://github.com/authlib/authlib) from 1.7.1 to 1.7.2. - [Release notes](https://github.com/authlib/authlib/releases) - [Commits](authlib/authlib@1.7.1...v1.7.2) --- updated-dependencies: - dependency-name: authlib dependency-version: 1.7.2 dependency-type: direct:development update-type: version-update:semver-patch ... * build(deps): bump uvicorn from 0.46.0 to 0.47.0 in /pywry (#60) Bumps [uvicorn](https://github.com/Kludex/uvicorn) from 0.46.0 to 0.47.0. - [Release notes](https://github.com/Kludex/uvicorn/releases) - [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md) - [Commits](Kludex/uvicorn@0.46.0...0.47.0) --- updated-dependencies: - dependency-name: uvicorn dependency-version: 0.47.0 dependency-type: direct:production update-type: version-update:semver-minor ... * build(deps-dev): bump anthropic from 0.97.0 to 0.102.0 in /pywry (#61) Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.97.0 to 0.102.0. - [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md) - [Commits](anthropics/anthropic-sdk-python@v0.97.0...v0.102.0) --- updated-dependencies: - dependency-name: anthropic dependency-version: 0.102.0 dependency-type: direct:development update-type: version-update:semver-minor ... * fix flakey test * fix flakey test * build(deps-dev): bump fastmcp from 3.2.4 to 3.3.1 in /pywry (#62) Bumps [fastmcp](https://github.com/PrefectHQ/fastmcp) from 3.2.4 to 3.3.1. - [Release notes](https://github.com/PrefectHQ/fastmcp/releases) - [Changelog](https://github.com/PrefectHQ/fastmcp/blob/main/docs/changelog.mdx) - [Commits](PrefectHQ/fastmcp@v3.2.4...v3.3.1) --- updated-dependencies: - dependency-name: fastmcp dependency-version: 3.3.1 dependency-type: direct:development update-type: version-update:semver-minor ... * build(deps): bump the uv group across 1 directory with 3 updates (#65) Bumps the uv group with 3 updates in the /pywry directory: [idna](https://github.com/kjd/idna), [langsmith](https://github.com/langchain-ai/langsmith-sdk) and [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions). Updates `idna` from 3.13 to 3.15 - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md) - [Commits](kjd/idna@v3.13...v3.15) Updates `langsmith` from 0.7.36 to 0.8.0 - [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases) - [Commits](langchain-ai/langsmith-sdk@v0.7.36...v0.8.0) Updates `pymdown-extensions` from 10.21.2 to 10.21.3 - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](facelessuser/pymdown-extensions@10.21.2...10.21.3) --- updated-dependencies: - dependency-name: idna dependency-version: '3.15' dependency-type: indirect dependency-group: uv - dependency-name: langsmith dependency-version: 0.8.0 dependency-type: indirect dependency-group: uv - dependency-name: pymdown-extensions dependency-version: 10.21.3 dependency-type: indirect dependency-group: uv ... * build(deps-dev): bump ty from 0.0.34 to 0.0.40 in /pywry (#67) Bumps [ty](https://github.com/astral-sh/ty) from 0.0.34 to 0.0.40. - [Release notes](https://github.com/astral-sh/ty/releases) - [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md) - [Commits](astral-sh/ty@0.0.34...0.0.40) --- updated-dependencies: - dependency-name: ty dependency-version: 0.0.39 dependency-type: direct:development update-type: version-update:semver-patch ... * build(deps): bump fastapi from 0.136.1 to 0.136.3 in /pywry (#68) Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.136.1 to 0.136.3. - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](fastapi/fastapi@0.136.1...0.136.3) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.136.3 dependency-type: direct:production update-type: version-update:semver-patch ... * build(deps-dev): bump ruff from 0.15.12 to 0.15.14 in /pywry (#69) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.12 to 0.15.14. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.15.12...0.15.14) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.14 dependency-type: direct:development update-type: version-update:semver-patch ... * build(deps): bump starlette in /pywry in the uv group across 1 directory (#75) Bumps the uv group with 1 update in the /pywry directory: [starlette](https://github.com/Kludex/starlette). Updates `starlette` from 1.0.0 to 1.0.1 - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@1.0.0...1.0.1) --- updated-dependencies: - dependency-name: starlette dependency-version: 1.0.1 dependency-type: indirect dependency-group: uv ... * build(deps-dev): bump pytest-asyncio from 1.3.0 to 1.4.0 in /pywry (#74) Bumps [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) from 1.3.0 to 1.4.0. - [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases) - [Commits](pytest-dev/pytest-asyncio@v1.3.0...v1.4.0) --- updated-dependencies: - dependency-name: pytest-asyncio dependency-version: 1.4.0 dependency-type: direct:development update-type: version-update:semver-minor ... * build(deps-dev): bump ruff from 0.15.14 to 0.15.15 in /pywry (#73) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.14 to 0.15.15. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.15.14...0.15.15) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.15 dependency-type: direct:development update-type: version-update:semver-patch ... * build(deps): bump uvicorn from 0.47.0 to 0.48.0 in /pywry (#72) Bumps [uvicorn](https://github.com/Kludex/uvicorn) from 0.47.0 to 0.48.0. - [Release notes](https://github.com/Kludex/uvicorn/releases) - [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md) - [Commits](Kludex/uvicorn@0.47.0...0.48.0) --- updated-dependencies: - dependency-name: uvicorn dependency-version: 0.48.0 dependency-type: direct:production update-type: version-update:semver-minor ... * build(deps-dev): bump openai from 2.36.0 to 2.40.0 in /pywry (#70) Bumps [openai](https://github.com/openai/openai-python) from 2.36.0 to 2.40.0. - [Release notes](https://github.com/openai/openai-python/releases) - [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md) - [Commits](openai/openai-python@v2.36.0...v2.40.0) --- updated-dependencies: - dependency-name: openai dependency-version: 2.40.0 dependency-type: direct:development update-type: version-update:semver-minor ... * build(deps): bump tornado in /pywry in the uv group across 1 directory (#76) Bumps the uv group with 1 update in the /pywry directory: [tornado](https://github.com/tornadoweb/tornado). Updates `tornado` from 6.5.5 to 6.5.6 - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](tornadoweb/tornado@v6.5.5...v6.5.6) --- updated-dependencies: - dependency-name: tornado dependency-version: 6.5.6 dependency-type: indirect dependency-group: uv ... * fix missing tv inline mixin (#77) Co-authored-by: deeleeramone <> * chore(lockfiles): refresh uv.lock and package-lock.json * label positional * chore(lockfiles): refresh uv.lock and package-lock.json --------- Co-authored-by: deeleeramone <> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [Feature] Improve Test Coverage (#85) * merge branch develop * improve test coverage * lint fixes * more fixes * more fixes --------- Co-authored-by: deeleeramone <> * merge branch develop * build(deps-dev): bump ipykernel from 7.2.0 to 7.3.0 in /pywry (#80) Bumps [ipykernel](https://github.com/ipython/ipykernel) from 7.2.0 to 7.3.0. - [Release notes](https://github.com/ipython/ipykernel/releases) - [Changelog](https://github.com/ipython/ipykernel/blob/main/CHANGELOG.md) - [Commits](ipython/ipykernel@v7.2.0...v7.3.0) --- updated-dependencies: - dependency-name: ipykernel dependency-version: 7.3.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * build(deps): bump redis from 7.4.0 to 8.0.0 in /pywry (#81) Bumps [redis](https://github.com/redis/redis-py) from 7.4.0 to 8.0.0. - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](redis/redis-py@v7.4.0...v8.0.0) --- updated-dependencies: - dependency-name: redis dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * build(deps-dev): bump cryptography from 48.0.0 to 49.0.0 in /pywry (#84) Bumps [cryptography](https://github.com/pyca/cryptography) from 48.0.0 to 49.0.0. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](pyca/cryptography@48.0.0...49.0.0) --- updated-dependencies: - dependency-name: cryptography dependency-version: 49.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * build(deps): bump pyjwt in /pywry in the uv group across 1 directory (#86) Bumps the uv group with 1 update in the /pywry directory: [pyjwt](https://github.com/jpadilla/pyjwt). Updates `pyjwt` from 2.12.1 to 2.13.0 - [Release notes](https://github.com/jpadilla/pyjwt/releases) - [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst) - [Commits](jpadilla/pyjwt@2.12.1...2.13.0) --- updated-dependencies: - dependency-name: pyjwt dependency-version: 2.13.0 dependency-type: indirect dependency-group: uv ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): update pydantic-settings requirement in /pywry/docs (#88) Updates the requirements on [pydantic-settings](https://github.com/pydantic/pydantic-settings) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.1...v2.14.2) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump langchain-mcp-adapters in /pywry (#83) Bumps [langchain-mcp-adapters](https://github.com/langchain-ai/langchain-mcp-adapters) from 0.2.2 to 0.3.0. - [Release notes](https://github.com/langchain-ai/langchain-mcp-adapters/releases) - [Commits](langchain-ai/langchain-mcp-adapters@langchain-mcp-adapters==0.2.2...langchain-mcp-adapters==0.3.0) --- updated-dependencies: - dependency-name: langchain-mcp-adapters dependency-version: 0.3.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): update griffe requirement in /pywry/docs (#87) Updates the requirements on [griffe](https://github.com/mkdocstrings/griffe) to permit the latest version. - [Release notes](https://github.com/mkdocstrings/griffe/releases) - [Changelog](https://github.com/mkdocstrings/griffe/blob/main/CHANGELOG.md) - [Commits](mkdocstrings/griffe@2.0.2...2.1.0) --- updated-dependencies: - dependency-name: griffe dependency-version: 2.1.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump plotly from 6.7.0 to 6.8.0 in /pywry (#82) Bumps [plotly](https://github.com/plotly/plotly.py) from 6.7.0 to 6.8.0. - [Release notes](https://github.com/plotly/plotly.py/releases) - [Changelog](https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md) - [Commits](plotly/plotly.py@v6.7.0...v6.8.0) --- updated-dependencies: - dependency-name: plotly dependency-version: 6.8.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * build(deps): bump anyio from 4.13.0 to 4.14.1 in /pywry (#91) Bumps [anyio](https://github.com/agronholm/anyio) from 4.13.0 to 4.14.1. - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](agronholm/anyio@4.13.0...4.14.1) --- updated-dependencies: - dependency-name: anyio dependency-version: 4.14.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump pyinstaller from 6.20.0 to 6.21.0 in /pywry (#90) Bumps [pyinstaller](https://github.com/pyinstaller/pyinstaller) from 6.20.0 to 6.21.0. - [Release notes](https://github.com/pyinstaller/pyinstaller/releases) - [Changelog](https://github.com/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst) - [Commits](pyinstaller/pyinstaller@v6.20.0...v6.21.0) --- updated-dependencies: - dependency-name: pyinstaller dependency-version: 6.21.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump pytest from 9.0.3 to 9.1.1 in /pywry (#93) Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.3 to 9.1.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](pytest-dev/pytest@9.0.3...9.1.1) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.1.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump griffe from 2.0.2 to 2.1.0 in /pywry (#92) Bumps [griffe](https://github.com/mkdocstrings/griffe) from 2.0.2 to 2.1.0. - [Release notes](https://github.com/mkdocstrings/griffe/releases) - [Changelog](https://github.com/mkdocstrings/griffe/blob/main/CHANGELOG.md) - [Commits](mkdocstrings/griffe@2.0.2...2.1.0) --- updated-dependencies: - dependency-name: griffe dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix workflow file * fix workflow file * ruff format * ty * build(deps): bump the uv group across 1 directory with 8 updates (#89) Bumps the uv group with 8 updates in the /pywry directory: | Package | From | To | | --- | --- | --- | | [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.14.2` | | [joserfc](https://github.com/authlib/joserfc) | `1.6.4` | `1.6.7` | | [langgraph-checkpoint](https://github.com/langchain-ai/langgraph) | `4.0.2` | `4.1.1` | | [langgraph-sdk](https://github.com/langchain-ai/langgraph) | `0.3.13` | `0.3.15` | | [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.0` | `0.8.18` | | [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.31` | | [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.3.1` | | [tornado](https://github.com/tornadoweb/tornado) | `6.5.6` | `6.5.7` | Updates `pydantic-settings` from 2.14.1 to 2.14.2 - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.1...v2.14.2) Updates `joserfc` from 1.6.4 to 1.6.7 - [Release notes](https://github.com/authlib/joserfc/releases) - [Changelog](https://github.com/authlib/joserfc/blob/main/docs/changelog.rst) - [Commits](authlib/joserfc@1.6.4...1.6.7) Updates `langgraph-checkpoint` from 4.0.2 to 4.1.1 - [Release notes](https://github.com/langchain-ai/langgraph/releases) - [Commits](langchain-ai/langgraph@checkpoint==4.0.2...checkpoint==4.1.1) Updates `langgraph-sdk` from 0.3.13 to 0.3.15 - [Release notes](https://github.com/langchain-ai/langgraph/releases) - [Commits](langchain-ai/langgraph@0.3.13...0.3.15) Updates `langsmith` from 0.8.0 to 0.8.18 - [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases) - [Commits](langchain-ai/langsmith-sdk@v0.8.0...v0.8.18) Updates `python-multipart` from 0.0.27 to 0.0.31 - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md) - [Commits](Kludex/python-multipart@0.0.27...0.0.31) Updates `starlette` from 1.0.1 to 1.3.1 - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@1.0.1...1.3.1) Updates `tornado` from 6.5.6 to 6.5.7 - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](tornadoweb/tornado@v6.5.6...v6.5.7) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.2 dependency-type: direct:production dependency-group: uv - dependency-name: joserfc dependency-version: 1.6.7 dependency-type: indirect dependency-group: uv - dependency-name: langgraph-checkpoint dependency-version: 4.1.1 dependency-type: indirect dependency-group: uv - dependency-name: langgraph-sdk dependency-version: 0.3.15 dependency-type: indirect dependency-group: uv - dependency-name: langsmith dependency-version: 0.8.18 dependency-type: indirect dependency-group: uv - dependency-name: python-multipart dependency-version: 0.0.31 dependency-type: indirect dependency-group: uv - dependency-name: starlette dependency-version: 1.3.1 dependency-type: indirect dependency-group: uv - dependency-name: tornado dependency-version: 6.5.7 dependency-type: indirect dependency-group: uv ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix tv indicator crud chart resolving (#100) Co-authored-by: deeleeramone <> * chore(lockfiles): refresh uv.lock and package-lock.json * build(deps): bump joserfc in /pywry in the uv group across 1 directory (#101) Bumps the uv group with 1 update in the /pywry directory: [joserfc](https://github.com/authlib/joserfc). Updates `joserfc` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/authlib/joserfc/releases) - [Changelog](https://github.com/authlib/joserfc/blob/main/docs/changelog.rst) - [Commits](authlib/joserfc@1.6.7...1.6.8) --- updated-dependencies: - dependency-name: joserfc dependency-version: 1.6.8 dependency-type: indirect dependency-group: uv ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump agent-client-protocol in /pywry (#95) Bumps [agent-client-protocol](https://github.com/agentclientprotocol/python-sdk) from 0.10.0 to 0.11.0. - [Release notes](https://github.com/agentclientprotocol/python-sdk/releases) - [Commits](agentclientprotocol/python-sdk@0.10.0...0.11.0) --- updated-dependencies: - dependency-name: agent-client-protocol dependency-version: 0.11.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * build(deps-dev): bump ty from 0.0.40 to 0.0.57 in /pywry (#97) Bumps [ty](https://github.com/astral-sh/ty) from 0.0.40 to 0.0.57. - [Release notes](https://github.com/astral-sh/ty/releases) - [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md) - [Commits](astral-sh/ty@0.0.40...0.0.57) --- updated-dependencies: - dependency-name: ty dependency-version: 0.0.56 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump fastmcp from 3.3.1 to 3.4.3 in /pywry (#98) Bumps [fastmcp](https://github.com/PrefectHQ/fastmcp) from 3.3.1 to 3.4.3. - [Release notes](https://github.com/PrefectHQ/fastmcp/releases) - [Changelog](https://github.com/PrefectHQ/fastmcp/blob/main/docs/changelog.mdx) - [Commits](PrefectHQ/fastmcp@v3.3.1...v3.4.3) --- updated-dependencies: - dependency-name: fastmcp dependency-version: 3.4.3 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump openai from 2.40.0 to 2.44.0 in /pywry (#99) Bumps [openai](https://github.com/openai/openai-python) from 2.40.0 to 2.44.0. - [Release notes](https://github.com/openai/openai-python/releases) - [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md) - [Commits](openai/openai-python@v2.40.0...v2.44.0) --- updated-dependencies: - dependency-name: openai dependency-version: 2.44.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * publish release for 2.0.5 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: deeleeramone <>
1 parent 5e9e3d6 commit 26d3299

122 files changed

Lines changed: 44823 additions & 8951 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/test-pywry.yml

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,16 @@ jobs:
3333
cache: 'pip'
3434
cache-dependency-path: pywry/pyproject.toml
3535

36+
- name: Set up uv
37+
uses: astral-sh/setup-uv@v6
38+
3639
- name: Install dependencies
40+
shell: bash
3741
run: |
3842
python -m pip install --upgrade pip
39-
pip install -e ".[notebook,auth,mcp,acp,deepagent,openai,anthropic,magentic]"
40-
pip install ruff ty pytauri-wheel plotly pandas cryptography
43+
uv export --frozen --all-extras --group dev --format requirements-txt --no-hashes --output-file "$RUNNER_TEMP/ci-dev-requirements.txt"
44+
pip install -r "$RUNNER_TEMP/ci-dev-requirements.txt"
45+
pip install -e .
4146
4247
- name: Run Ruff linter
4348
run: ruff check pywry/ tests/
@@ -57,21 +62,18 @@ jobs:
5762
run:
5863
working-directory: ${{ github.workspace }}
5964
outputs:
60-
matrix: ${{ steps.matrix.outputs.matrix }}
65+
full-matrix: ${{ steps.matrix.outputs.full-matrix }}
66+
pr-matrix: ${{ steps.matrix.outputs.pr-matrix }}
6167
pytest-targets: ${{ steps.targets.outputs.targets }}
68+
is-scoped: ${{ steps.targets.outputs.is-scoped }}
6269
steps:
6370
- id: matrix
6471
shell: bash
65-
env:
66-
IS_PR: ${{ github.event_name == 'pull_request' }}
67-
HAS_FULL_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'full-test') }}
6872
run: |
69-
if [[ "$IS_PR" == "true" && "$HAS_FULL_LABEL" != "true" ]]; then
70-
MATRIX='{"include":[{"os":"ubuntu-24.04","python-version":"3.14"},{"os":"windows-2025","python-version":"3.14"},{"os":"macos-15-intel","python-version":"3.14"},{"os":"ubuntu-24.04-arm","python-version":"3.14"},{"os":"windows-11-arm","python-version":"3.14"},{"os":"macos-latest","python-version":"3.14"}]}'
71-
else
72-
MATRIX='{"include":[{"os":"ubuntu-24.04","python-version":"3.11"},{"os":"ubuntu-24.04","python-version":"3.14"},{"os":"windows-2025","python-version":"3.11"},{"os":"windows-2025","python-version":"3.14"},{"os":"macos-15-intel","python-version":"3.11"},{"os":"macos-15-intel","python-version":"3.14"},{"os":"ubuntu-24.04-arm","python-version":"3.11"},{"os":"ubuntu-24.04-arm","python-version":"3.14"},{"os":"windows-11-arm","python-version":"3.12"},{"os":"windows-11-arm","python-version":"3.14"},{"os":"macos-latest","python-version":"3.11"},{"os":"macos-latest","python-version":"3.14"}]}'
73-
fi
74-
echo "matrix=$MATRIX" >> "$GITHUB_OUTPUT"
73+
FULL_MATRIX='{"include":[{"os":"ubuntu-24.04","python-version":"3.11"},{"os":"ubuntu-24.04","python-version":"3.14"},{"os":"windows-2025","python-version":"3.11"},{"os":"windows-2025","python-version":"3.14"},{"os":"macos-15-intel","python-version":"3.11"},{"os":"macos-15-intel","python-version":"3.14"},{"os":"ubuntu-24.04-arm","python-version":"3.11"},{"os":"ubuntu-24.04-arm","python-version":"3.14"},{"os":"windows-11-arm","python-version":"3.12"},{"os":"windows-11-arm","python-version":"3.14"},{"os":"macos-latest","python-version":"3.11"},{"os":"macos-latest","python-version":"3.14"}]}'
74+
PR_MATRIX='{"include":[{"os":"ubuntu-24.04","python-version":"3.14"}]}'
75+
echo "full-matrix=$FULL_MATRIX" >> "$GITHUB_OUTPUT"
76+
echo "pr-matrix=$PR_MATRIX" >> "$GITHUB_OUTPUT"
7577
7678
- name: Checkout for diff
7779
if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'full-test')
@@ -90,6 +92,7 @@ jobs:
9092
if [[ "$IS_PR" != "true" || "$HAS_FULL_LABEL" == "true" ]]; then
9193
echo "Full suite (dispatch or full-test label)"
9294
echo "targets=tests/" >> "$GITHUB_OUTPUT"
95+
echo "is-scoped=false" >> "$GITHUB_OUTPUT"
9396
exit 0
9497
fi
9598
@@ -107,13 +110,16 @@ jobs:
107110
if [[ -n "$SOURCE_NON_TEST" || -n "$WORKFLOW_SELF" || -n "$INFRA_TEST" ]]; then
108111
echo "Full suite (source/workflow/test-infra changes)"
109112
echo "targets=tests/" >> "$GITHUB_OUTPUT"
113+
echo "is-scoped=false" >> "$GITHUB_OUTPUT"
110114
elif [[ -n "$TEST_FILES" ]]; then
111115
T=$(echo "$TEST_FILES" | sed 's|^pywry/||' | tr '\n' ' ' | sed 's/ *$//')
112116
echo "Scoped to changed test files: $T"
113117
echo "targets=$T" >> "$GITHUB_OUTPUT"
118+
echo "is-scoped=true" >> "$GITHUB_OUTPUT"
114119
else
115120
echo "No pywry source/test changes; skipping pytest selection"
116121
echo "targets=__skip__" >> "$GITHUB_OUTPUT"
122+
echo "is-scoped=false" >> "$GITHUB_OUTPUT"
117123
fi
118124
119125
test:
@@ -125,12 +131,7 @@ jobs:
125131
contents: read
126132
strategy:
127133
fail-fast: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'full-test') }}
128-
# ``deepagents`` (pulled in by ``.[dev]`` → ``features``) hard-
129-
# requires Python >=3.11 — 3.10 can't resolve the dev extra.
130-
# ``sqlcipher3`` is a source build against the SQLCipher C
131-
# library installed in the ``Build SQLCipher`` step below, so
132-
# any Python ABI works (no binary-wheel coverage gaps).
133-
matrix: ${{ fromJSON(needs.gen-matrix.outputs.matrix) }}
134+
matrix: ${{ fromJSON((github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'full-test') && needs.gen-matrix.outputs.pr-matrix) || needs.gen-matrix.outputs.full-matrix) }}
134135

135136
steps:
136137
- uses: actions/checkout@v5
@@ -143,6 +144,9 @@ jobs:
143144
cache: 'pip'
144145
cache-dependency-path: pywry/pyproject.toml
145146

147+
- name: Set up uv
148+
uses: astral-sh/setup-uv@v6
149+
146150
- name: Set up Rust (Linux only)
147151
if: runner.os == 'Linux'
148152
uses: dtolnay/rust-toolchain@stable
@@ -272,9 +276,13 @@ jobs:
272276
python -c "from cryptography.hazmat.bindings._rust import openssl; print('cryptography OK')"
273277
274278
- name: Install dependencies
279+
shell: bash
275280
run: |
276281
python -m pip install --upgrade pip
277-
pip install -e ".[dev]"
282+
uv export --frozen --all-extras --group dev --format requirements-txt --no-hashes --output-file "$RUNNER_TEMP/ci-dev-requirements.txt"
283+
pip install -r "$RUNNER_TEMP/ci-dev-requirements.txt"
284+
pip install -e .
285+
pip install pytest-xdist
278286
279287
- name: Verify Docker (Linux)
280288
if: runner.os == 'Linux'
@@ -327,7 +335,7 @@ jobs:
327335
NO_AT_BRIDGE: "1"
328336
PYTEST_TARGETS: ${{ needs.gen-matrix.outputs.pytest-targets }}
329337
run: |
330-
dbus-run-session -- xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python -m pytest -c pytest.ini $PYTEST_TARGETS -v --tb=short
338+
dbus-run-session -- xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python -m pytest -c pytest.ini $PYTEST_TARGETS -n auto -v --tb=short
331339
rc=$?
332340
# Exit 5 = no tests collected after platform filtering on a scoped run; treat as success.
333341
if [[ $rc -eq 5 && "$PYTEST_TARGETS" != "tests/" ]]; then rc=0; fi
@@ -342,7 +350,7 @@ jobs:
342350
PYTEST_TARGETS: ${{ needs.gen-matrix.outputs.pytest-targets }}
343351
shell: pwsh
344352
run: |
345-
python -m pytest -c pytest.ini $env:PYTEST_TARGETS.Split(' ') -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py -m "not redis and not container"
353+
python -m pytest -c pytest.ini $env:PYTEST_TARGETS.Split(' ') -n auto -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py -m "not redis and not container"
346354
if ($LASTEXITCODE -eq 5 -and $env:PYTEST_TARGETS -ne 'tests/') { exit 0 }
347355
exit $LASTEXITCODE
348356
@@ -355,7 +363,7 @@ jobs:
355363
PYTEST_TARGETS: ${{ needs.gen-matrix.outputs.pytest-targets }}
356364
shell: pwsh
357365
run: |
358-
python -m pytest -c pytest.ini $env:PYTEST_TARGETS.Split(' ') -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py --ignore=tests/test_inline_ssl.py -m "not redis and not container"
366+
python -m pytest -c pytest.ini $env:PYTEST_TARGETS.Split(' ') -n auto -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py --ignore=tests/test_inline_ssl.py -m "not redis and not container"
359367
if ($LASTEXITCODE -eq 5 -and $env:PYTEST_TARGETS -ne 'tests/') { exit 0 }
360368
exit $LASTEXITCODE
361369
@@ -365,7 +373,7 @@ jobs:
365373
PYWRY_HEADLESS: "1"
366374
PYTEST_TARGETS: ${{ needs.gen-matrix.outputs.pytest-targets }}
367375
run: |
368-
python -m pytest -c pytest.ini $PYTEST_TARGETS -v --tb=short
376+
python -m pytest -c pytest.ini $PYTEST_TARGETS -n auto -v --tb=short
369377
rc=$?
370378
if [[ $rc -eq 5 && "$PYTEST_TARGETS" != "tests/" ]]; then rc=0; fi
371379
exit $rc
@@ -377,7 +385,7 @@ jobs:
377385
PYWRY_DEPLOY__STATE_BACKEND: "memory"
378386
PYTEST_TARGETS: ${{ needs.gen-matrix.outputs.pytest-targets }}
379387
run: |
380-
python -m pytest -c pytest.ini $PYTEST_TARGETS -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py -m "not redis and not container"
388+
python -m pytest -c pytest.ini $PYTEST_TARGETS -n auto -v --tb=short --ignore=tests/test_state_redis_integration.py --ignore=tests/test_auth_rbac_integration.py --ignore=tests/test_deploy_mode_integration.py --ignore=tests/test_e2e_deploy_mode.py --ignore=tests/test_e2e_rbac_widgets.py -m "not redis and not container"
381389
rc=$?
382390
if [[ $rc -eq 5 && "$PYTEST_TARGETS" != "tests/" ]]; then rc=0; fi
383391
exit $rc

pywry/docs/requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ mkdocs-autorefs>=1.4.4
55

66
# Auto-generated API documentation from source
77
mkdocstrings[python]>=1.0.4
8-
griffe>=2.0.2
8+
griffe>=2.1.0
99

1010
# For cross-references
1111
mkdocs-gen-files>=0.6.1
@@ -14,4 +14,4 @@ mkdocs-section-index>=0.3.12
1414

1515
# Needed for building docs (dependencies of pywry)
1616
pydantic>=2.13.4
17-
pydantic-settings>=2.14.1
17+
pydantic-settings>=2.14.2

pywry/pyproject.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[project]
22
name = "pywry"
3-
version = "2.0.4"
3+
version = "2.0.5"
44
description = "A lightweight and blazingly fast, cross-platform, WebView rendering engine and desktop UI toolkit for Python. Batteries included."
55
authors = [{ name = "PyWry", email = "pywry2@gmail.com" }]
66
license = { text = "Apache 2.0" }
77
readme = "README.md"
8-
requires-python = ">=3.10"
8+
requires-python = ">=3.10,<3.15"
99
classifiers = [
1010
"License :: OSI Approved :: Apache Software License",
1111
"Operating System :: OS Independent",
@@ -33,7 +33,7 @@ dependencies = [
3333
"uvicorn>=0.40.0",
3434
"watchdog>=3.0.0",
3535
"setproctitle>=1.3.0",
36-
"websockets>=16.0.0",
36+
"websockets>=15.0.0",
3737
]
3838

3939
[project.scripts]
@@ -79,7 +79,7 @@ features = [
7979
"anywidget>=0.9.0",
8080
"authlib>=1.3.0",
8181
"cryptography>=46.0.0",
82-
"deepagents>=0.1.0; python_version >= '3.11'",
82+
"deepagents>=0.6.12; python_version >= '3.11'",
8383
"fastmcp>=3.2.2",
8484
"ipykernel>=7.2.0",
8585
"keyring>=24.0",
@@ -89,7 +89,7 @@ features = [
8989
"pandas>=1.5.3",
9090
"plotly>=6.5.0",
9191
"sqlcipher3>=0.5.4",
92-
"websockets>=16.0.0",
92+
"websockets>=15.0.0",
9393
]
9494
dev = [
9595
{ include-group = "test" },
@@ -129,11 +129,11 @@ dev = [
129129
"magentic>=0.39.0",
130130
"openai>=1.0.0",
131131
"pyinstaller>=6.0",
132-
"websockets>=16.0.0",
132+
"websockets>=15.0.0",
133133
"pandas>=1.5.3",
134134
"sqlcipher3>=0.5.4",
135135
"agent-client-protocol>=0.1.0",
136-
"deepagents>=0.1.0; python_version >= '3.11'",
136+
"deepagents>=0.6.12; python_version >= '3.11'",
137137
"langchain-mcp-adapters>=0.1.0",
138138
]
139139
openai = [
@@ -173,7 +173,7 @@ all = [
173173
"anthropic>=0.34.0",
174174
"anywidget>=0.9.0",
175175
"authlib>=1.3.0",
176-
"deepagents>=0.1.0; python_version >= '3.11'",
176+
"deepagents>=0.6.12; python_version >= '3.11'",
177177
"fastmcp>=3.2.2",
178178
"ipykernel>=7.2.0",
179179
"keyring>=24.0",

pywry/pywry/chat/manager.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,23 +1160,26 @@ async def _handle_async_stream(
11601160
"""Stream from an async generator."""
11611161
state = _StreamState(message_id)
11621162
typing_hidden = False
1163-
async for item in agen:
1163+
try:
1164+
async for item in agen:
1165+
if not typing_hidden:
1166+
typing_hidden = True
1167+
self._emit(
1168+
"chat:typing-indicator",
1169+
{"typing": False, "threadId": thread_id},
1170+
)
1171+
if cancel.is_set():
1172+
self._handle_cancel(state, thread_id)
1173+
return
1174+
self._process_handler_item(item, state, thread_id, ctx)
11641175
if not typing_hidden:
1165-
typing_hidden = True
11661176
self._emit(
11671177
"chat:typing-indicator",
11681178
{"typing": False, "threadId": thread_id},
11691179
)
1170-
if cancel.is_set():
1171-
self._handle_cancel(state, thread_id)
1172-
return
1173-
self._process_handler_item(item, state, thread_id, ctx)
1174-
if not typing_hidden:
1175-
self._emit(
1176-
"chat:typing-indicator",
1177-
{"typing": False, "threadId": thread_id},
1178-
)
1179-
self._finalize_stream(state, thread_id)
1180+
self._finalize_stream(state, thread_id)
1181+
finally:
1182+
await agen.aclose()
11801183

11811184
def _inject_context(
11821185
self,

pywry/pywry/chat/providers/anthropic.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
if TYPE_CHECKING:
1717
import asyncio
1818

19-
from collections.abc import AsyncIterator
19+
from collections.abc import AsyncIterator, Awaitable, Callable
2020

2121
from ..models import ContentBlock
2222
from ..session import AgentCapabilities, ClientCapabilities
@@ -137,10 +137,16 @@ async def prompt(
137137
temperature=session.get("temperature", 0.7),
138138
max_tokens=session.get("max_tokens", 4096),
139139
) as stream:
140-
async for text in stream.text_stream:
141-
if cancel_event and cancel_event.is_set():
142-
raise GenerationCancelledError()
143-
yield AgentMessageUpdate(text=text)
140+
text_stream = stream.text_stream
141+
try:
142+
async for text in text_stream:
143+
if cancel_event and cancel_event.is_set():
144+
raise GenerationCancelledError()
145+
yield AgentMessageUpdate(text=text)
146+
finally:
147+
close_stream = getattr(text_stream, "aclose", None)
148+
if close_stream is not None:
149+
await cast("Callable[[], Awaitable[None]]", close_stream)()
144150

145151
async def cancel(self, session_id: str) -> None:
146152
"""Cancel is handled cooperatively via ``cancel_event``.

pywry/pywry/chat/providers/callback.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,14 @@ def _wrap(item: Any) -> Any:
143143
return AgentMessageUpdate(text=item) if isinstance(item, str) else item
144144

145145
if hasattr(result, "__aiter__"):
146-
async for item in result:
147-
if cancel_event and cancel_event.is_set():
148-
raise GenerationCancelledError()
149-
yield _wrap(item)
146+
try:
147+
async for item in result:
148+
if cancel_event and cancel_event.is_set():
149+
raise GenerationCancelledError()
150+
yield _wrap(item)
151+
finally:
152+
if hasattr(result, "aclose"):
153+
await result.aclose()
150154
elif hasattr(result, "__iter__"):
151155
for item in result:
152156
if cancel_event and cancel_event.is_set():

0 commit comments

Comments
 (0)