Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -23,7 +29,7 @@ jobs:

steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Set up Python
uses: actions/setup-python@v6
Expand All @@ -38,7 +44,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') }}
Expand Down Expand Up @@ -192,7 +198,7 @@ jobs:

steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Set up Python
uses: actions/setup-python@v6
Expand All @@ -207,7 +213,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') }}
Expand Down Expand Up @@ -618,7 +624,7 @@ jobs:

steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v7

- name: Set up Python
uses: actions/setup-python@v6
Expand All @@ -633,7 +639,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') }}
Expand Down Expand Up @@ -675,7 +681,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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Changelog

All notable changes to this project are documented in this file.

## [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.
- 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.

## [0.6.0]

- 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.
15 changes: 4 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. 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.
Expand All @@ -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.0

- **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.

## Version Compatibility

`langchain-oceanbase` follows the major LangChain/LangGraph lines. **Pick the release that matches the LangChain stack your application already uses:**
Expand All @@ -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.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.x` will not resolve against that stack.

```bash
# LangChain 1.x with a langgraph-checkpoint 4.x stack
Expand All @@ -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.0`, 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
Expand Down Expand Up @@ -203,7 +196,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).
Expand Down
Loading