From 51477b28e0bc7a6d510baf78f5ec1e9dcb785a10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:47:29 +0800 Subject: [PATCH 01/15] chore(deps-dev): bump ruff in the dev-dependencies group (#162) Bumps the dev-dependencies group with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.15.17 to 0.15.18 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.15.17...0.15.18) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index d1ef3c3..4469c74 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -604,7 +604,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "extra == \"pyseekdb\" and platform_system == \"Windows\"", dev = "sys_platform == \"win32\"", test = "sys_platform == \"win32\" or platform_system == \"Windows\""} +markers = {main = "extra == \"pyseekdb\" and platform_system == \"Windows\"", dev = "sys_platform == \"win32\"", test = "platform_system == \"Windows\" or sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -3705,30 +3705,30 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.15.17" +version = "0.15.18" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["lint"] files = [ - {file = "ruff-0.15.17-py3-none-linux_armv6l.whl", hash = "sha256:d9feddb927fc68bd295f5eebc587a7e42cfaf9b65f60ca4a2386febff575da8f"}, - {file = "ruff-0.15.17-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:25805a226d741c47d274a35ad5c10a7dde175fcddfa511d7cf3da0a21eb3eab7"}, - {file = "ruff-0.15.17-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f6ad73b14c2d18a3bf8ad7cb6974294d7f613a7898604826058e6ac64918ef4d"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ba0c1e4f95bcb3869d0d30cbd5917071ef2e28665abfec970cdab0492c713ed"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81647960f10bff57d2e51cadd0c3950fe598400c852863a038720ef5b8cca91e"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e01a84ddbc8c16c23055ba3924476850f1bbc1917cebbb9376665a63e74260d"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fe9f653152f8f294f9f7e03bf3a453d8b4a27f7a59c78c8666167f2b17b96c"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c0fe88a7676e7a05b73174d4d4a59cb2ac21ff8263583f87a81a6018475a978"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecfc3c7878fff94633ab0348524e093f9ce3243080416dd7d14f8ba400174719"}, - {file = "ruff-0.15.17-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:b8461180b22420b1bdc289909410930761629fddf2a5aaf60fae1ab26cedc4c4"}, - {file = "ruff-0.15.17-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6eccbe50a038b503e7140b441aa9c7fc8c1f36edf23ebef9f4165c2f28f568b7"}, - {file = "ruff-0.15.17-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:382fc0521025f5a8ad447d8bdd523545d0d7646adb718eb1c2dac5065ec27c0f"}, - {file = "ruff-0.15.17-py3-none-musllinux_1_2_i686.whl", hash = "sha256:456d41fcd1b2777ad63f09a6e7121d43f7b688bbc76a800c10f7f8fb1f912c3f"}, - {file = "ruff-0.15.17-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b1a04bcc94ae6194e9db05d16ad31f298a7194bfbcb08258bbe589cee1d587b8"}, - {file = "ruff-0.15.17-py3-none-win32.whl", hash = "sha256:596065960ab1ff593f744220c9fe6580eda00a95003cffa9f4048bb5b1bf0392"}, - {file = "ruff-0.15.17-py3-none-win_amd64.whl", hash = "sha256:6769e5fa1710b179b92e0bfa5a51735b35baea9013dadb06d5f44cbcf9547084"}, - {file = "ruff-0.15.17-py3-none-win_arm64.whl", hash = "sha256:f3be1fbb34bcdfd146240d8fb92a709d4c2c8191348580a3c044ec60fa0b4456"}, - {file = "ruff-0.15.17.tar.gz", hash = "sha256:2ec446937fd16c8c4de2674a209cc5af64d9c6f17d21fbf1151054fa0bcf5219"}, + {file = "ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df"}, + {file = "ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2"}, + {file = "ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d"}, + {file = "ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1"}, + {file = "ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff"}, + {file = "ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22"}, + {file = "ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809"}, + {file = "ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a"}, + {file = "ruff-0.15.18-py3-none-win32.whl", hash = "sha256:02299e6e9fa5b297a3f6d5d10d7bcd655c925b028bb8b9d4588214549c6b9ec4"}, + {file = "ruff-0.15.18-py3-none-win_amd64.whl", hash = "sha256:dac80dc8d26b2257dbefabed62f5d255c3937b4ccb122da1fc634794fa3578b3"}, + {file = "ruff-0.15.18-py3-none-win_arm64.whl", hash = "sha256:b2c9257fcbd4a3e5b977a1904e6facca016bafe2edc17df24db67cfaee03b4e4"}, + {file = "ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33"}, ] [[package]] @@ -4839,7 +4839,7 @@ files = [ ] [package.extras] -cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] +cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b0) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] [extras] pyseekdb = ["pylibseekdb", "pyseekdb"] From 3fa97de87f5b15607d1e74a823d9825eb72497a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:47:43 +0800 Subject: [PATCH 02/15] chore(deps-dev): bump virtualenv from 21.5.0 to 21.5.1 (#166) Bumps [virtualenv](https://github.com/pypa/virtualenv) from 21.5.0 to 21.5.1. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/21.5.0...21.5.1) --- updated-dependencies: - dependency-name: virtualenv dependency-version: 21.5.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4469c74..83be6c8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4164,14 +4164,14 @@ tests = ["aiohttp", "boto3", "cryptography", "httpbin", "httplib2", "httpx", "ht [[package]] name = "virtualenv" -version = "21.5.0" +version = "21.5.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "virtualenv-21.5.0-py3-none-any.whl", hash = "sha256:8f7c38605023688c89789f566959006af6d61c99eeeb9e58342eb780c5761e5e"}, - {file = "virtualenv-21.5.0.tar.gz", hash = "sha256:98847aadf5e2037e0e4d2e19528eb3aca6f23906422e59a510bff231a6d32fce"}, + {file = "virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783"}, + {file = "virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8"}, ] [package.dependencies] From d1425b8d5e5f7ec0b898832d7154a203138dc4fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:47:56 +0800 Subject: [PATCH 03/15] chore(deps-dev): bump dashscope from 1.25.21 to 1.26.0 (#167) Bumps [dashscope](https://dashscope.aliyun.com/) from 1.25.21 to 1.26.0. --- updated-dependencies: - dependency-name: dashscope dependency-version: 1.26.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83be6c8..33b206f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -838,13 +838,14 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "dashscope" -version = "1.25.21" +version = "1.26.0" description = "dashscope client sdk library" optional = false python-versions = ">=3.8.0" groups = ["test"] files = [ - {file = "dashscope-1.25.21-py3-none-any.whl", hash = "sha256:a730b3e9e41fb4261ab89192f667964aee2057779d87c26beaa9889aa07afbb9"}, + {file = "dashscope-1.26.0-py3-none-any.whl", hash = "sha256:ddfbda55a0196ec4c1a3cfc6be610b53310dfdb95ed4a293f6cc699809500ba4"}, + {file = "dashscope-1.26.0.tar.gz", hash = "sha256:2c806c6e735a47f1f31814e700f5cc073cd101a860302562bd8eaa210bdef991"}, ] [package.dependencies] From fa5554b8ea1840ba5ff63fcac6fb3da80ce5c978 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:48:08 +0800 Subject: [PATCH 04/15] chore(deps): bump actions/checkout from 5 to 7 (#168) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/python-publish.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b35bdc7..c88f246 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 @@ -192,7 +192,7 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 @@ -618,7 +618,7 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 @@ -675,7 +675,7 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Download all test artifacts uses: actions/download-artifact@v8 diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 5f75099..e452550 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 From bc4c57380ccdd1aa69031a4ff0a42bba693146e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:48:20 +0800 Subject: [PATCH 05/15] chore(deps): bump actions/cache from 5 to 6 (#169) Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c88f246..7b382af 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: virtualenvs-in-project: true - name: Load cached venv - uses: actions/cache@v5 + uses: actions/cache@v6 with: path: .venv key: venv-${{ runner.os }}-3.12-${{ hashFiles('**/poetry.lock') }} @@ -207,7 +207,7 @@ jobs: virtualenvs-in-project: true - name: Load cached venv - uses: actions/cache@v5 + uses: actions/cache@v6 with: path: .venv key: venv-${{ runner.os }}-3.12-${{ hashFiles('**/poetry.lock') }} @@ -633,7 +633,7 @@ jobs: virtualenvs-in-project: true - name: Load cached venv - uses: actions/cache@v5 + uses: actions/cache@v6 with: path: .venv key: venv-${{ runner.os }}-3.12-${{ hashFiles('**/poetry.lock') }} From de616805ccc404a87a482fb1848dd90b758e901a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:48:32 +0800 Subject: [PATCH 06/15] chore(deps): bump the production-dependencies group across 1 directory with 3 updates (#170) Bumps the production-dependencies group with 3 updates in the / directory: [langchain-core](https://github.com/langchain-ai/langchain), [langgraph](https://github.com/langchain-ai/langgraph) and [pyseekdb](https://github.com/oceanbase/pyseekdb). Updates `langchain-core` from 1.4.7 to 1.4.8 - [Release notes](https://github.com/langchain-ai/langchain/releases) - [Commits](https://github.com/langchain-ai/langchain/compare/langchain-core==1.4.7...langchain-core==1.4.8) Updates `langgraph` from 1.2.5 to 1.2.7 - [Release notes](https://github.com/langchain-ai/langgraph/releases) - [Commits](https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7) Updates `pyseekdb` from 1.3.0 to 1.4.0 - [Commits](https://github.com/oceanbase/pyseekdb/commits) --- updated-dependencies: - dependency-name: langchain-core dependency-version: 1.4.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: production-dependencies - dependency-name: langgraph dependency-version: 1.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: production-dependencies - dependency-name: pyseekdb dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: production-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 33b206f..9dbabeb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1655,19 +1655,19 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" [[package]] name = "langchain-core" -version = "1.4.7" +version = "1.4.8" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0.0,>=3.10.0" groups = ["main", "test"] files = [ - {file = "langchain_core-1.4.7-py3-none-any.whl", hash = "sha256:bcadd51951140ecdcba98311dbd931ba5de02a5ba8a2288dad5069c1eea2a13d"}, - {file = "langchain_core-1.4.7.tar.gz", hash = "sha256:7a825d77de0a3f39adbd9d09612a75e85527e14a52c1601089bcc062972d9f2b"}, + {file = "langchain_core-1.4.8-py3-none-any.whl", hash = "sha256:d84c28b05e3ba8d4271d0827aad5b592ccdaaf986e76768c23503f0a2045e8aa"}, + {file = "langchain_core-1.4.8.tar.gz", hash = "sha256:5bf1f8411077c904182ad8f975943d36adcbf579c4e017b3a118b719229ebf9a"}, ] [package.dependencies] jsonpatch = ">=1.33.0,<2.0.0" -langchain-protocol = ">=0.0.14" +langchain-protocol = ">=0.0.17" langsmith = ">=0.3.45,<1.0.0" packaging = ">=23.2.0" pydantic = ">=2.7.4,<3.0.0" @@ -1736,14 +1736,14 @@ langchain-core = ">=1.2.31,<2.0.0" [[package]] name = "langgraph" -version = "1.2.5" +version = "1.2.7" description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "langgraph-1.2.5-py3-none-any.whl", hash = "sha256:9286bb5def82fc865959c14378fe473518dc097d586225f622f029637a2a4bb9"}, - {file = "langgraph-1.2.5.tar.gz", hash = "sha256:09a3bdec6fdb3228623fc78b6f69a1400d383f66348d0b04d0efb692022cc6ef"}, + {file = "langgraph-1.2.7-py3-none-any.whl", hash = "sha256:249349a5d6a32cb0aa2304a8fb6529bd0cf56db8780d21db9e086e5383668f89"}, + {file = "langgraph-1.2.7.tar.gz", hash = "sha256:dcdf5b441bf8c7c7c154e603b302c9dbfbfd2d11e1b7ae7d93a5aba979dc87bd"}, ] [package.dependencies] @@ -3218,14 +3218,14 @@ dev = ["build", "flake8", "mypy", "pytest", "twine"] [[package]] name = "pyseekdb" -version = "1.3.0" +version = "1.4.0" description = "A unified Python client for seekdb that supports embedded, server, and OceanBase." optional = true python-versions = "<4,>=3.11" groups = ["main"] markers = "extra == \"pyseekdb\"" files = [ - {file = "pyseekdb-1.3.0-py3-none-any.whl", hash = "sha256:cd32c8e587fd1b128e10fbef5a18ffdf420aad06075eeb46e4a4ad3fde81216a"}, + {file = "pyseekdb-1.4.0-py3-none-any.whl", hash = "sha256:8d4069b5246fc3b08865171e7842fe58e17c3b74d66aec5c0ec46e17fa5ea0a1"}, ] [package.dependencies] From 8fea024821c55419ac8f1fc753ef4a820655f88b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:54:40 +0800 Subject: [PATCH 07/15] chore(deps-dev): bump ruff in the dev-dependencies group (#171) Bumps the dev-dependencies group with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.15.18 to 0.15.20 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.15.18...0.15.20) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9dbabeb..1034f04 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3706,30 +3706,30 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.15.18" +version = "0.15.20" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["lint"] files = [ - {file = "ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df"}, - {file = "ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2"}, - {file = "ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d"}, - {file = "ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1"}, - {file = "ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff"}, - {file = "ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22"}, - {file = "ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809"}, - {file = "ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a"}, - {file = "ruff-0.15.18-py3-none-win32.whl", hash = "sha256:02299e6e9fa5b297a3f6d5d10d7bcd655c925b028bb8b9d4588214549c6b9ec4"}, - {file = "ruff-0.15.18-py3-none-win_amd64.whl", hash = "sha256:dac80dc8d26b2257dbefabed62f5d255c3937b4ccb122da1fc634794fa3578b3"}, - {file = "ruff-0.15.18-py3-none-win_arm64.whl", hash = "sha256:b2c9257fcbd4a3e5b977a1904e6facca016bafe2edc17df24db67cfaee03b4e4"}, - {file = "ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33"}, + {file = "ruff-0.15.20-py3-none-linux_armv6l.whl", hash = "sha256:00e188c53e499c3c1637f73c91dcf2fb56d576cab76ce1be50a27c4e80e37078"}, + {file = "ruff-0.15.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9ebd1fd9b9c95fc0bd7b2761aebec1f030013d2e193a2901b224af68fe47251b"}, + {file = "ruff-0.15.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5b16cdd67ca108185cd36dce98c576350c03b1660a751de725fb049193a0632"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3413bb3c3d2ca6a8208f1f4809cd2dca3c6de6d0b491c0e70847672bde6e6efd"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd7ec42b3bb3da066488db093308a69c4ac5ee6d2af333a86ba6e2eb2e7dd44b"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1a36ad0eb77fba9aabfb69ede54de6f376d04ac18ebea022847046d340a8267"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6df3b1e4610432f0386dba04d853b5f08cbbc903410c6fcc02f620f05aff53c"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e89f198a1ea6ef0d727c1cf16088bc91a6cb0ab947dedc966715691647186eae"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309809086c2acb67624950a3c8133e80f32d0d3e27106c0cd60ff26657c9f24b"}, + {file = "ruff-0.15.20-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d2374caa2f2c2f9e2b7da0a50802cfb8b79f55a9b5e49379f564544fbf56487"}, + {file = "ruff-0.15.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a1ed17b65293e0c2f22fc387bc13198a5de94bf4429589b0ff6946b0feaf21a3"}, + {file = "ruff-0.15.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f701305e66b38ea6c91882490eb73459796808e4c6362a1b765255e0cdcd4053"}, + {file = "ruff-0.15.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b9c0c367ad8e5d0d5b5b8537864c469a0a0e55417aadfbeca41fa61333be9f4"}, + {file = "ruff-0.15.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:01cc00dd58f0df339d0e902219dd53990ea99996a0344e5d9cc8d45d5307e460"}, + {file = "ruff-0.15.20-py3-none-win32.whl", hash = "sha256:ed65ef510e43a137207e0f01cfcf998aeddb1aeeda5c9d35023e910284d7cf21"}, + {file = "ruff-0.15.20-py3-none-win_amd64.whl", hash = "sha256:a525c81c70fb0380344dd1d8745d8cc1c890b7fc94a58d5a07bd8eb9557b8415"}, + {file = "ruff-0.15.20-py3-none-win_arm64.whl", hash = "sha256:2f5b2a6d614e8700388806a14996c40fab2c47b819ef57d790a34878858ed9ca"}, + {file = "ruff-0.15.20.tar.gz", hash = "sha256:1416eb04349192646b54de98f146c4f59afe37d0decfc02c3cbbf396f3a28566"}, ] [[package]] From 11ea5f52c5a3d11e0ed884674a7b0fd147a72642 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:01:17 +0800 Subject: [PATCH 08/15] chore(deps-dev): bump dashscope from 1.26.0 to 1.26.2 (#172) Bumps [dashscope](https://dashscope.aliyun.com/) from 1.26.0 to 1.26.2. --- updated-dependencies: - dependency-name: dashscope dependency-version: 1.26.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1034f04..893b7b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -838,20 +838,22 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "dashscope" -version = "1.26.0" +version = "1.26.2" description = "dashscope client sdk library" optional = false python-versions = ">=3.8.0" groups = ["test"] files = [ - {file = "dashscope-1.26.0-py3-none-any.whl", hash = "sha256:ddfbda55a0196ec4c1a3cfc6be610b53310dfdb95ed4a293f6cc699809500ba4"}, - {file = "dashscope-1.26.0.tar.gz", hash = "sha256:2c806c6e735a47f1f31814e700f5cc073cd101a860302562bd8eaa210bdef991"}, + {file = "dashscope-1.26.2-py3-none-any.whl", hash = "sha256:6ca4eefc34bcfd54cc58a58aac6ba4a1dfdb65906a599a2b436ccc8ba08d9cbd"}, + {file = "dashscope-1.26.2.tar.gz", hash = "sha256:2ab2b6059872bde4fef2f1d77268ddc21bad09ad282cace266437eda526c3932"}, ] [package.dependencies] aiohttp = "*" certifi = "*" cryptography = "*" +httpx = ">=0.25.0" +httpx-sse = ">=0.4.0" requests = "*" rich = ">=13.0.0" typer = ">=0.9.0" From 2701fc538accb68eba3611ef0bf42133a9b2a485 Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Fri, 10 Jul 2026 11:39:14 +0800 Subject: [PATCH 09/15] build: verify pylibseekdb 1.3.0.post3 (#174) * build: verify pylibseekdb 1.3.0.post2 * test: add native pyseekdb embedded smoke * test: make native pyseekdb smoke order independent * build: verify pylibseekdb 1.3.0.post3 * test: refresh native pyseekdb index before query --------- Co-authored-by: wangyunlai.wyl --- poetry.lock | 25 +----- .../integration_tests/test_embedded_seekdb.py | 90 ++++++++++++++++++- 2 files changed, 93 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 893b7b6..b0ba3aa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3135,31 +3135,14 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylibseekdb" -version = "1.3.0" -description = "An AI-Native Search Database. Unifies vector, text, structured and semi-structured data in a single engine, enabling hybrid search and in-database AI workflows." +version = "1.3.0.post3" +description = "Python bindings for the seekdb C client" optional = true -python-versions = ">=3.8" +python-versions = ">=3.11" groups = ["main"] markers = "(sys_platform == \"linux\" or sys_platform == \"darwin\" and platform_machine == \"arm64\") and extra == \"pyseekdb\"" files = [ - {file = "pylibseekdb-1.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:492a53cf2e8504c0f3cc69406c171617b1a0e31b694c4cda594de18be1b4a87d"}, - {file = "pylibseekdb-1.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:800e90d6978ba52846240311696453cbee3017803f9cf692c49867d207ac6dcc"}, - {file = "pylibseekdb-1.3.0-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:1d33cf82f34339bc58ac160688fc7d15ac2f7cbb226338d3887fe8350f65b762"}, - {file = "pylibseekdb-1.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:77ba6786908cd8ab320ed4e5d5ef352759ef8990d72aff913467db5fe32542c4"}, - {file = "pylibseekdb-1.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4b127c21ac1178ab903735041b6afe25295731d7bcee9813e5e1576c9d384937"}, - {file = "pylibseekdb-1.3.0-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:23cd6ad60a80543dfccb4dc9500401347b82fddb8cef10f5503e5eb816adb39f"}, - {file = "pylibseekdb-1.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:ec2465e206574f5dee7870bde2434a5ab9a03c2001786b1765fcb5dd790d6f98"}, - {file = "pylibseekdb-1.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1b78f26dfbb80157169b81f22ebb80957e3c6ee7b33e5ff35beaa4d628c33915"}, - {file = "pylibseekdb-1.3.0-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:f6f739454aff786beeccfe71b66a0d89d01b5a8a260e0b8c5c30f8e9184bd88a"}, - {file = "pylibseekdb-1.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:89069e1aeeb51f61aeaa0cf5d94bedb918f46c3476d7b30183dde7b2101e5954"}, - {file = "pylibseekdb-1.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2515ea14bbac59e6f9f90a43bbaf179050ad7f8ab683d1cb9fd7fe225ccdca4e"}, - {file = "pylibseekdb-1.3.0-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:a4177a3a6369699c9791cef3a7bfe7b472af301352237ed6e4cea42034fc0047"}, - {file = "pylibseekdb-1.3.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:8651b8e0324fa78a5ed93b9952f4140c968655c344ef11fdb20d754077efeb05"}, - {file = "pylibseekdb-1.3.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e6e58bce51e709c46aae3891e723b786132da925b9b6362db4486c07044d99e8"}, - {file = "pylibseekdb-1.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ccf3f2c1bab07bde3489901fe0ee6e74562a839e001a5a24d71e6a8c561f7c9a"}, - {file = "pylibseekdb-1.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:0e27371d77970ff97607ab4a50aec7da6566bd221abd7cef0f0a9de7a798afe5"}, - {file = "pylibseekdb-1.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:78b22253d36d9ea16984165278c4a271347b82e79fb0259ce8da7d978ff33574"}, - {file = "pylibseekdb-1.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:45fe3fe24225ab0f13fad3e5bed9c0c294181186a904e63a3763e14953c68716"}, + {file = "pylibseekdb-1.3.0.post3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5733828a73f9723e84cf9ca318b228e7a9bf3c66b4684e08701373a438d087c7"}, ] [[package]] diff --git a/tests/integration_tests/test_embedded_seekdb.py b/tests/integration_tests/test_embedded_seekdb.py index 46eacb9..de26795 100644 --- a/tests/integration_tests/test_embedded_seekdb.py +++ b/tests/integration_tests/test_embedded_seekdb.py @@ -7,8 +7,12 @@ from __future__ import annotations +import multiprocessing as mp +import traceback import uuid +from multiprocessing.queues import Queue from pathlib import Path +from queue import Empty import pytest from langchain_core.documents import Document @@ -17,6 +21,7 @@ from langchain_oceanbase.vectorstores import OceanbaseVectorStore EMBED_DIM = 384 +NATIVE_PYSEEKDB_TIMEOUT_SECONDS = 60 def _embedded_seekdb_runtime_available() -> bool: @@ -58,9 +63,92 @@ def embeddings() -> FakeEmbeddings: return FakeEmbeddings(size=EMBED_DIM) +def _native_pyseekdb_collection_smoke( + db_path: str, collection_name: str, queue: Queue +) -> None: + try: + import pyseekdb + + client = pyseekdb.Client(path=db_path, database="test") + collection = client.create_collection( + collection_name, + configuration=pyseekdb.HNSWConfiguration(dimension=3, distance="l2"), + embedding_function=None, + ) + + collection.add( + ids=["native-1", "native-2"], + embeddings=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + documents=["native pyseekdb embedded", "second native document"], + metadatas=[{"source": "native"}, {"source": "native"}], + ) + + by_id = collection.get(ids="native-1", include=["documents", "metadatas"]) + # SeekDB 1.3.0 builds vector indexes asynchronously; flush before ANN query. + collection.refresh_index() + nearest = collection.query( + query_embeddings=[[1.0, 0.0, 0.0]], + n_results=2, + include=["documents", "metadatas"], + ) + + assert by_id["ids"] == ["native-1"] + assert by_id["documents"] == ["native pyseekdb embedded"] + assert by_id["metadatas"] == [{"source": "native"}] + assert len(nearest["ids"]) == 1 + assert set(nearest["ids"][0]) == {"native-1", "native-2"}, nearest + assert set(nearest["documents"][0]) == { + "native pyseekdb embedded", + "second native document", + }, nearest + except BaseException: + queue.put(("error", traceback.format_exc())) + else: + queue.put(("ok", "native pyseekdb collection smoke passed")) + + @pytest.mark.embedded_seekdb class TestEmbeddedSeekDBConnection: - """Smoke test: ObVecClient via embedded path; add documents and similarity search.""" + """Smoke tests for native pyseekdb and ObVecClient embedded paths.""" + + def test_native_pyseekdb_collection_add_get_and_query( + self, seekdb_parent_dir: Path + ) -> None: + """Exercise pyseekdb directly, without pyobvector's SQLAlchemy adapter.""" + ctx = mp.get_context("spawn") + queue = ctx.Queue() + process = ctx.Process( + target=_native_pyseekdb_collection_smoke, + args=( + str(seekdb_parent_dir / f"seekdb_data_native_{uuid.uuid4().hex[:8]}"), + f"lc_native_{uuid.uuid4().hex[:8]}", + queue, + ), + ) + + process.start() + process.join(NATIVE_PYSEEKDB_TIMEOUT_SECONDS) + if process.is_alive(): + process.terminate() + process.join(5) + pytest.fail( + "native pyseekdb collection smoke did not complete within " + f"{NATIVE_PYSEEKDB_TIMEOUT_SECONDS} seconds", + pytrace=False, + ) + + try: + status, payload = queue.get(timeout=5) + except Empty: + pytest.fail( + "native pyseekdb collection smoke exited without reporting a " + f"result; exitcode={process.exitcode}", + pytrace=False, + ) + + if status != "ok": + pytest.fail(payload, pytrace=False) + assert process.exitcode == 0 def test_connection_with_path_add_and_search( self, seekdb_parent_dir: Path, embeddings: FakeEmbeddings From 5d96dd24432e341cc2a566c6cef4f51510363f4e Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Fri, 10 Jul 2026 14:59:28 +0800 Subject: [PATCH 10/15] chore(release): prepare 0.6.1 --- README.md | 15 +++++++-------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d49836c..4e9c4f1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![PyPI version](https://badge.fury.io/py/langchain-oceanbase.svg)](https://badge.fury.io/py/langchain-oceanbase) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) -This package contains the LangChain integration with OceanBase. **Current version: 0.6.0** +This package contains the LangChain integration with OceanBase. **Current version: 0.6.1** [OceanBase Database](https://github.com/oceanbase/oceanbase) is a distributed relational database. It is developed entirely by Ant Group. The OceanBase Database is built on a common server cluster. @@ -16,12 +16,11 @@ OceanBase currently has the ability to store vectors. Users can easily perform t - Perform vector approximate nearest neighbor queries; - ... -## What's New in 0.6.0 +## What's New in 0.6.1 -- **New checkpointer maintenance capabilities**: `OceanBaseCheckpointSaver` now implements `copy_thread` and `delete_for_runs` (plus their async variants), matching the `langgraph-checkpoint` 4.x capability surface. -- **Non-blocking async checkpointer**: all `a*` methods now offload blocking database I/O to a thread pool instead of blocking the event loop, and the saver supports `close()` / (async) context-manager cleanup and a `max_workers` argument. -- **Concurrency and performance**: remote OceanBase/MySQL backends no longer serialize every operation behind a global lock (embedded seekdb still does, for safety), and checkpoint reads batch their channel-value lookups into a single query. -- **Requires a LangChain 1.x / `langgraph-checkpoint` 4.x stack** — see [Version Compatibility](#version-compatibility) before upgrading. +- **Embedded SeekDB verification**: CI now validates `pylibseekdb 1.3.0.post3`, including a native `pyseekdb` smoke path that refreshes asynchronous index work before ANN queries. +- **CI and dependency maintenance**: refresh GitHub Actions plus production and development dependency locks used by the supported test matrix. +- **Same 0.6.x compatibility contract**: the package continues to require a LangChain 1.x / `langgraph-checkpoint` 4.x stack; see [Version Compatibility](#version-compatibility). ## Version Compatibility @@ -34,7 +33,7 @@ OceanBase currently has the ability to store vectors. Users can easily perform t Guidance: - **On LangChain `1.x` with `langgraph-checkpoint 4.x`** (langgraph `1.0.6+`): use `0.6.x`. `langgraph-checkpoint 4.x` is what provides the `copy_thread` / `delete_for_runs` / `prune` checkpoint capabilities. -- **Pinned to `langgraph-checkpoint 3.x`, langgraph `<1.0.6`, or LangChain `0.3.x`**: pin `langchain-oceanbase>=0.5,<0.6`; `0.6.0` will not resolve against that stack. +- **Pinned to `langgraph-checkpoint 3.x`, langgraph `<1.0.6`, or LangChain `0.3.x`**: pin `langchain-oceanbase>=0.5,<0.6`; `0.6.1` will not resolve against that stack. ```bash # LangChain 1.x with a langgraph-checkpoint 4.x stack @@ -54,7 +53,7 @@ For LangGraph applications, the recommended persistence surfaces are: - `OceanBaseCheckpointSaver` for graph state, replay, and time-travel workflows - `OceanBaseStore` for long-term memory, retrieval, and TTL-backed storage -In `0.6.0`, the package story is straightforward: +In `0.6.1`, the package story is straightforward: - OceanBase: full pack support for vectorstore + checkpoint + store - seekdb: full pack support for vectorstore + checkpoint + store - MySQL: compatible checkpoint + store backend for existing on-prem MySQL estates diff --git a/pyproject.toml b/pyproject.toml index e6a2315..0fc8f13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-oceanbase" -version = "0.6.0" +version = "0.6.1" description = "An integration package connecting OceanBase and LangChain" authors = ["shanhaikang.shk "] readme = "README.md" From 08b6fea7483498ac03fb14b62bd1f626383afd20 Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Fri, 10 Jul 2026 15:27:39 +0800 Subject: [PATCH 11/15] fix: restore pylibseekdb lock artifacts --- poetry.lock | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/poetry.lock b/poetry.lock index b0ba3aa..6c1431e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3142,7 +3142,15 @@ python-versions = ">=3.11" groups = ["main"] markers = "(sys_platform == \"linux\" or sys_platform == \"darwin\" and platform_machine == \"arm64\") and extra == \"pyseekdb\"" files = [ + {file = "pylibseekdb-1.3.0.post3-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:e89ce984e3222f5af7cb276510f208c07dfdf89c3a812b8ee56b86f869685e0e"}, + {file = "pylibseekdb-1.3.0.post3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da1f1e8ae274281a2fb93505f688525ec50a4c02c680ebbe384313bf65862b3a"}, + {file = "pylibseekdb-1.3.0.post3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:514ba51eeff4a982d015c938f605ec9782aa7eedf0040af0e6adc102bd565417"}, + {file = "pylibseekdb-1.3.0.post3-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:58cbe0c4ed609fc67f9012760c5529858ceebe96fd79a4042cddf52b7ea4813e"}, + {file = "pylibseekdb-1.3.0.post3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fadcf644e9d1187f04d671816ac0ddb0ae88018fefd53b40eee2f81ee509bb97"}, {file = "pylibseekdb-1.3.0.post3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5733828a73f9723e84cf9ca318b228e7a9bf3c66b4684e08701373a438d087c7"}, + {file = "pylibseekdb-1.3.0.post3-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ba5e515340988e4d8906ac386497cbab0849c3ecbe5d782fd72093f4d208f94e"}, + {file = "pylibseekdb-1.3.0.post3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aaee77db55170af5fe32a8fde4041dc3f3bf2648f25a254c2742eaa6599fad5b"}, + {file = "pylibseekdb-1.3.0.post3-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b57df3dabce5c80bf2230db2dc3f55b8eb6807a79b0884c748c0380aa34aa466"}, ] [[package]] From 21ab24410b8b6f551de46d6afa68eccdd50f790c Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Wed, 29 Jul 2026 11:19:16 +0800 Subject: [PATCH 12/15] fix: require pyobvector index refresh --- README.md | 3 ++- poetry.lock | 8 +++--- pyproject.toml | 4 +-- .../integration_tests/test_embedded_seekdb.py | 26 +++++++++++++++++++ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4e9c4f1..7e81e0a 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ OceanBase currently has the ability to store vectors. Users can easily perform t ## What's New in 0.6.1 - **Embedded SeekDB verification**: CI now validates `pylibseekdb 1.3.0.post3`, including a native `pyseekdb` smoke path that refreshes asynchronous index work before ANN queries. +- **Embedded HNSW read-after-write**: require `pyobvector 0.2.29+`, which refreshes the asynchronous embedded SeekDB index after LangChain writes through `add_texts()` / `upsert()`. - **CI and dependency maintenance**: refresh GitHub Actions plus production and development dependency locks used by the supported test matrix. - **Same 0.6.x compatibility contract**: the package continues to require a LangChain 1.x / `langgraph-checkpoint` 4.x stack; see [Version Compatibility](#version-compatibility). @@ -202,7 +203,7 @@ pip install -U langchain-oceanbase - Python >=3.11 - langchain-core >=1.0,<2 - langgraph >=1.0.6,<2 and langgraph-checkpoint >=4.0,<5 (for `OceanBaseCheckpointSaver`) -- pyobvector >=0.2.25 (required for database client) +- pyobvector >=0.2.29 (required for database client and embedded HNSW read-after-write) - `pyseekdb` extra (optional; install `langchain-oceanbase[pyseekdb]` for built-in embeddings and embedded seekdb support) > **Tip**: `0.6.x` requires a LangChain **1.x** / `langgraph-checkpoint` **4.x** stack. If you are pinned to `langgraph-checkpoint 3.x` or LangChain `0.3.x`, use `langchain-oceanbase>=0.5,<0.6` instead — see [Version Compatibility](#version-compatibility). diff --git a/poetry.lock b/poetry.lock index 6c1431e..6802fbb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3171,14 +3171,14 @@ rsa = ["cryptography"] [[package]] name = "pyobvector" -version = "0.2.28" +version = "0.2.29" description = "A python SDK for OceanBase Vector Store, based on SQLAlchemy, compatible with Milvus API." optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "pyobvector-0.2.28-py3-none-any.whl", hash = "sha256:36708fc0020307890b9001035904ff14719b81e20e58f2a97f7f3739dad53c72"}, - {file = "pyobvector-0.2.28.tar.gz", hash = "sha256:d394d66f4a7dc97c221b7584e52b329e3fe61ed96b6f248d7360e3e5a53581ce"}, + {file = "pyobvector-0.2.29-py3-none-any.whl", hash = "sha256:f7cfdf1ca0c5c6ccbc10fd096aef944cd3970970f1382441a77dff1be78744cf"}, + {file = "pyobvector-0.2.29.tar.gz", hash = "sha256:3f0feac0ac964bb56c2e3ed661b5de84ef5bc97253ae8e9935a65fea367e3736"}, ] [package.dependencies] @@ -4841,4 +4841,4 @@ pyseekdb = ["pylibseekdb", "pyseekdb"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<3.14" -content-hash = "da1a7b01b7ac27aebe4565ad922823a067240acd2b8ea0c9ac6f5f563afb9ed9" +content-hash = "1d11948ebfa37c417e5728ab0ae673ddf231c9528baf5557619c399c63f82142" diff --git a/pyproject.toml b/pyproject.toml index 0fc8f13..d34f186 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,8 +41,8 @@ pyseekdb = { version = ">=1.2.0.post1,<3", optional = true } # tracking issue). Re-allow once pyobvector exposes a one-shot disposal seam. pylibseekdb = { version = ">=1.3.0,!=1.3.0.post1,<2", optional = true, markers = "sys_platform == 'linux' or (sys_platform == 'darwin' and platform_machine == 'arm64')" } pyobvector = [ - { version = ">=0.2.25" }, - { version = ">=0.2.25", extras = ["pyseekdb"], markers = "extra == 'pyseekdb'" }, + { version = ">=0.2.29" }, + { version = ">=0.2.29", extras = ["pyseekdb"], markers = "extra == 'pyseekdb'" }, ] # Pin to safe version for security (CVE-2025-69228 etc.); direct dep so Dependabot can update aiohttp = ">=3.13.3" diff --git a/tests/integration_tests/test_embedded_seekdb.py b/tests/integration_tests/test_embedded_seekdb.py index de26795..674e74b 100644 --- a/tests/integration_tests/test_embedded_seekdb.py +++ b/tests/integration_tests/test_embedded_seekdb.py @@ -175,6 +175,32 @@ def test_connection_with_path_add_and_search( assert len(out) == 1 assert "embedded" in out[0].page_content + def test_connection_with_path_add_texts_is_immediately_searchable_with_hnsw( + self, seekdb_parent_dir: Path, embeddings: FakeEmbeddings + ) -> None: + """Keep the released pyobvector upsert index-refresh guarantee covered.""" + db_path = str(seekdb_parent_dir / "seekdb_data_hnsw") + table = f"lc_embed_hnsw_{uuid.uuid4().hex[:8]}" + store = OceanbaseVectorStore( + embedding_function=embeddings, + table_name=table, + path=db_path, + embedding_dim=EMBED_DIM, + drop_old=True, + index_type="HNSW", + vidx_metric_type="l2", + ) + + ids = store.add_texts( + ["embedded seekdb hnsw write"], metadatas=[{"t": "hnsw"}] + ) + out = store.similarity_search("hnsw write", k=1) + + assert len(ids) == 1 + assert [document.page_content for document in out] == [ + "embedded seekdb hnsw write" + ] + def test_connection_with_pyseekdb_client_add_and_search( self, seekdb_parent_dir: Path, embeddings: FakeEmbeddings ) -> None: From 27a65fb10ed200e226b822723af2b20a541a3118 Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Wed, 29 Jul 2026 11:40:20 +0800 Subject: [PATCH 13/15] docs: add release changelog --- CHANGELOG.md | 18 ++++++++++++++++++ README.md | 13 +++---------- pyproject.toml | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..45ec17c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +All notable changes to this project are documented in this file. + +## [0.6.1] - Unreleased + +### Fixed + +- Embedded SeekDB HNSW writes made through `OceanbaseVectorStore.add_texts()` are immediately available to ANN search by requiring the released `pyobvector` index-refresh behavior. + +### Changed + +- Require `pyobvector >=0.2.29` for both standard and `pyseekdb`-extra installations. +- Validate the embedded SeekDB stack with `pylibseekdb 1.3.0.post3`, including native `pyseekdb` async-index smoke coverage and LangChain HNSW read-after-write coverage. + +### Compatibility + +- Continue to exclude `pylibseekdb 1.3.0.post1`, which has a separate embedded-client lifecycle hang. diff --git a/README.md b/README.md index 7e81e0a..1b109a5 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![PyPI version](https://badge.fury.io/py/langchain-oceanbase.svg)](https://badge.fury.io/py/langchain-oceanbase) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) -This package contains the LangChain integration with OceanBase. **Current version: 0.6.1** +This package contains the LangChain integration with OceanBase. See the [changelog](./CHANGELOG.md) for release notes. [OceanBase Database](https://github.com/oceanbase/oceanbase) is a distributed relational database. It is developed entirely by Ant Group. The OceanBase Database is built on a common server cluster. @@ -16,13 +16,6 @@ OceanBase currently has the ability to store vectors. Users can easily perform t - Perform vector approximate nearest neighbor queries; - ... -## What's New in 0.6.1 - -- **Embedded SeekDB verification**: CI now validates `pylibseekdb 1.3.0.post3`, including a native `pyseekdb` smoke path that refreshes asynchronous index work before ANN queries. -- **Embedded HNSW read-after-write**: require `pyobvector 0.2.29+`, which refreshes the asynchronous embedded SeekDB index after LangChain writes through `add_texts()` / `upsert()`. -- **CI and dependency maintenance**: refresh GitHub Actions plus production and development dependency locks used by the supported test matrix. -- **Same 0.6.x compatibility contract**: the package continues to require a LangChain 1.x / `langgraph-checkpoint` 4.x stack; see [Version Compatibility](#version-compatibility). - ## Version Compatibility `langchain-oceanbase` follows the major LangChain/LangGraph lines. **Pick the release that matches the LangChain stack your application already uses:** @@ -34,7 +27,7 @@ OceanBase currently has the ability to store vectors. Users can easily perform t Guidance: - **On LangChain `1.x` with `langgraph-checkpoint 4.x`** (langgraph `1.0.6+`): use `0.6.x`. `langgraph-checkpoint 4.x` is what provides the `copy_thread` / `delete_for_runs` / `prune` checkpoint capabilities. -- **Pinned to `langgraph-checkpoint 3.x`, langgraph `<1.0.6`, or LangChain `0.3.x`**: pin `langchain-oceanbase>=0.5,<0.6`; `0.6.1` will not resolve against that stack. +- **Pinned to `langgraph-checkpoint 3.x`, langgraph `<1.0.6`, or LangChain `0.3.x`**: pin `langchain-oceanbase>=0.5,<0.6`; `0.6.x` will not resolve against that stack. ```bash # LangChain 1.x with a langgraph-checkpoint 4.x stack @@ -54,7 +47,7 @@ For LangGraph applications, the recommended persistence surfaces are: - `OceanBaseCheckpointSaver` for graph state, replay, and time-travel workflows - `OceanBaseStore` for long-term memory, retrieval, and TTL-backed storage -In `0.6.1`, the package story is straightforward: +The package support story is straightforward: - OceanBase: full pack support for vectorstore + checkpoint + store - seekdb: full pack support for vectorstore + checkpoint + store - MySQL: compatible checkpoint + store backend for existing on-prem MySQL estates diff --git a/pyproject.toml b/pyproject.toml index d34f186..c7485ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ disallow_untyped_defs = "True" [tool.poetry.urls] "Source Code" = "https://github.com/langchain-ai/langchain/tree/master/libs/partners/oceanbase" -"Release Notes" = "https://github.com/langchain-ai/langchain/releases?q=tag%3A%22oceanbase%3D%3D0%22&expanded=true" +"Release Notes" = "https://github.com/oceanbase/langchain-oceanbase/blob/main/CHANGELOG.md" [tool.poetry.dependencies] python = ">=3.11,<3.14" From 08c9422c853c93a43f8f4875e88f68324d6dd3f8 Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Wed, 29 Jul 2026 11:46:57 +0800 Subject: [PATCH 14/15] ci: skip documentation-only changes --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b382af..6de9fe0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,12 +7,18 @@ on: - develop - 'release/**' - 'hotfix/**' + paths-ignore: + - '**/*.md' + - 'docs/**' pull_request: branches: - main - develop - 'release/**' - 'hotfix/**' + paths-ignore: + - '**/*.md' + - 'docs/**' workflow_dispatch: jobs: From cb9e85c995b994b61acd8960085c25615a0e1e33 Mon Sep 17 00:00:00 2001 From: Haili Zhang Date: Wed, 29 Jul 2026 11:51:04 +0800 Subject: [PATCH 15/15] docs: document 0.5 and 0.6 releases --- CHANGELOG.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45ec17c..5cdbb15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,17 +2,30 @@ All notable changes to this project are documented in this file. -## [0.6.1] - Unreleased - -### Fixed +## [0.6.1] - Embedded SeekDB HNSW writes made through `OceanbaseVectorStore.add_texts()` are immediately available to ANN search by requiring the released `pyobvector` index-refresh behavior. - -### Changed - - Require `pyobvector >=0.2.29` for both standard and `pyseekdb`-extra installations. - Validate the embedded SeekDB stack with `pylibseekdb 1.3.0.post3`, including native `pyseekdb` async-index smoke coverage and LangChain HNSW read-after-write coverage. +- Continue to exclude `pylibseekdb 1.3.0.post1`, which has a separate embedded-client lifecycle hang. -### Compatibility +## [0.6.0] -- Continue to exclude `pylibseekdb 1.3.0.post1`, which has a separate embedded-client lifecycle hang. +- Added `copy_thread` and `delete_for_runs` support to `OceanBaseCheckpointSaver`, including asynchronous counterparts and LangGraph checkpoint conformance coverage. +- Made asynchronous checkpointer operations non-blocking and resolved concurrent-access and performance issues. +- Raised the supported baseline to LangChain Core 1.x, LangGraph 1.x, and LangGraph Checkpoint 4.x. +- Excluded `pylibseekdb 1.3.0.post1` after identifying its embedded-client lifecycle hang. + +## [0.5.2] + +- Raised the embedded `pylibseekdb` floor to 1.3.0 to avoid a segfault when embedded SeekDB data directories are reused. + +## [0.5.1] + +- Added embedded SeekDB mode for `OceanBaseCheckpointSaver` and `OceanBaseStore` when `connection_args` provides a local `path`. +- Handled vector-search result rows without primary keys. + +## [0.5.0] + +- Added LangGraph Store support through `OceanBaseStore`, including semantic search, TTL handling, and embedded SeekDB coverage. +- Moved embedded SeekDB dependencies into the optional `pyseekdb` extra so standard installations do not require the native embedded runtime.