555e282cc4
pi-agent-plugin checks / lint (push) Has been cancelled
pi-agent-plugin checks / test (20) (push) Has been cancelled
pi-agent-plugin checks / test (22) (push) Has been cancelled
pi-agent-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / check_changes (push) Has been cancelled
TypeScript SDK CI / changelog_check (push) Has been cancelled
ci / changelog_check (push) Has been cancelled
ci / check_changes (push) Has been cancelled
ci / build_mem0 (3.10) (push) Has been cancelled
ci / build_mem0 (3.11) (push) Has been cancelled
ci / build_mem0 (3.12) (push) Has been cancelled
CLI Node CI / lint (push) Has been cancelled
CLI Node CI / test (20) (push) Has been cancelled
CLI Node CI / test (22) (push) Has been cancelled
CLI Node CI / build (push) Has been cancelled
CLI Python CI / lint (push) Has been cancelled
CLI Python CI / test (3.10) (push) Has been cancelled
CLI Python CI / test (3.11) (push) Has been cancelled
CLI Python CI / test (3.12) (push) Has been cancelled
CLI Python CI / build (push) Has been cancelled
openclaw checks / lint (push) Has been cancelled
openclaw checks / test (20) (push) Has been cancelled
openclaw checks / test (22) (push) Has been cancelled
openclaw checks / build (push) Has been cancelled
opencode-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (22) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (22) (push) Has been cancelled
101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
from abc import ABC, abstractmethod
|
|
|
|
|
|
class VectorStoreBase(ABC):
|
|
@abstractmethod
|
|
def create_col(self, name, vector_size, distance):
|
|
"""Create a new collection."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def insert(self, vectors, payloads=None, ids=None):
|
|
"""Insert vectors into a collection."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def search(self, query, vectors, top_k=5, filters=None):
|
|
"""Search for similar vectors.
|
|
|
|
All implementations must return similarity scores where higher values
|
|
indicate greater similarity (range [0, 1] preferred). Implementations
|
|
using distance metrics must convert to similarity before returning:
|
|
- Cosine distance: score = max(0.0, 1.0 - distance)
|
|
- L2 distance: score = 1.0 / (1.0 + distance)
|
|
- Inner product: score = value (already higher = better)
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete(self, vector_id):
|
|
"""Delete a vector by ID."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def update(self, vector_id, vector=None, payload=None):
|
|
"""Update a vector and its payload."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get(self, vector_id):
|
|
"""Retrieve a vector by ID."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def list_cols(self):
|
|
"""List all collections."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete_col(self):
|
|
"""Delete a collection."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def col_info(self):
|
|
"""Get information about a collection."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def list(self, filters=None, top_k=None):
|
|
"""List all memories."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def reset(self):
|
|
"""Reset by delete the collection and recreate it."""
|
|
pass
|
|
|
|
def keyword_search(self, query: str, top_k: int = 5, filters: dict = None):
|
|
"""Keyword/BM25 full-text search. Returns None if not supported by this store.
|
|
|
|
Override in subclasses that support native keyword/BM25 search.
|
|
Returns results in the same format as search() -- list of objects with
|
|
id, score, and payload attributes.
|
|
|
|
Args:
|
|
query: The search query text (should be lemmatized for best results).
|
|
top_k: Maximum number of results to return.
|
|
filters: Optional metadata filters (same format as search filters).
|
|
|
|
Returns:
|
|
List of search results with id, score, payload, or None if not supported.
|
|
"""
|
|
return None
|
|
|
|
def search_batch(self, queries: list, vectors_list: list, top_k: int = 1, filters: dict = None):
|
|
"""Batch search for multiple queries at once.
|
|
|
|
Default implementation calls search() sequentially. Override in subclasses
|
|
with native batch support (e.g., Qdrant query_batch_points).
|
|
|
|
Args:
|
|
queries: List of query texts.
|
|
vectors_list: List of query vectors (one per query).
|
|
top_k: Maximum results per query.
|
|
filters: Optional metadata filters applied to all queries.
|
|
|
|
Returns:
|
|
List of result lists, one per query.
|
|
"""
|
|
return [self.search(q, v, top_k=top_k, filters=filters) for q, v in zip(queries, vectors_list)]
|