Skip to content

Commit

Permalink
community: add delete method to rocksetdb vectorstore to support reco…
Browse files Browse the repository at this point in the history
…rdmanager (#17030)

- **Description:** This adds a delete method so that rocksetdb can be
used with `RecordManager`.
  - **Issue:** N/A
  - **Dependencies:** N/A
  - **Twitter handle:** `@_morgan_adams_`

---------

Co-authored-by: Rockset API Bot <admin@rockset.io>
  • Loading branch information
morganda and rockset-io committed Feb 13, 2024
1 parent c454dc3 commit 722aae4
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/docs/modules/data_connection/indexing.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
" * document addition by id (`add_documents` method with `ids` argument)\n",
" * delete by id (`delete` method with `ids` argument)\n",
"\n",
"Compatible Vectorstores: `AnalyticDB`, `AstraDB`, `AwaDB`, `Bagel`, `Cassandra`, `Chroma`, `DashVector`, `DatabricksVectorSearch`, `DeepLake`, `Dingo`, `ElasticVectorSearch`, `ElasticsearchStore`, `FAISS`, `HanaDB`, `Milvus`, `MyScale`, `PGVector`, `Pinecone`, `Qdrant`, `Redis`, `ScaNN`, `SupabaseVectorStore`, `SurrealDBStore`, `TimescaleVector`, `Vald`, `Vearch`, `VespaStore`, `Weaviate`, `ZepVectorStore`.\n",
"Compatible Vectorstores: `AnalyticDB`, `AstraDB`, `AwaDB`, `Bagel`, `Cassandra`, `Chroma`, `DashVector`, `DatabricksVectorSearch`, `DeepLake`, `Dingo`, `ElasticVectorSearch`, `ElasticsearchStore`, `FAISS`, `HanaDB`, `Milvus`, `MyScale`, `PGVector`, `Pinecone`, `Qdrant`, `Redis`, `Rockset`, `ScaNN`, `SupabaseVectorStore`, `SurrealDBStore`, `TimescaleVector`, `Vald`, `Vearch`, `VespaStore`, `Weaviate`, `ZepVectorStore`.\n",
" \n",
"## Caution\n",
"\n",
Expand Down
17 changes: 17 additions & 0 deletions libs/community/langchain_community/vectorstores/rocksetdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from langchain_core.documents import Document
from langchain_core.embeddings import Embeddings
from langchain_core.runnables import run_in_executor
from langchain_core.vectorstores import VectorStore

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -332,3 +333,19 @@ def delete_texts(self, ids: List[str]) -> None:
data=[DeleteDocumentsRequestData(id=i) for i in ids],
workspace=self._workspace,
)

def delete(self, ids: Optional[List[str]] = None, **kwargs: Any) -> Optional[bool]:
try:
if ids is None:
ids = []
self.delete_texts(ids)
except Exception as e:
logger.error("Exception when deleting docs from Rockset: %s\n", e)
return False

return True

async def adelete(
self, ids: Optional[List[str]] = None, **kwargs: Any
) -> Optional[bool]:
return await run_in_executor(None, self.delete, ids, **kwargs)
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,19 @@ def test_build_query_sql_with_where(self) -> None:
LIMIT 4
"""
assert q_str == expected

def test_add_documents_and_delete(self) -> None:
""" "add_documents" and "delete" are requirements to support use
with RecordManager"""

texts = ["foo", "bar", "baz"]
metadatas = [{"metadata_index": i} for i in range(len(texts))]

_docs = zip(texts, metadatas)
docs = [Document(page_content=pc, metadata=i) for pc, i in _docs]

ids = self.rockset_vectorstore.add_documents(docs)
assert len(ids) == len(texts)

deleted = self.rockset_vectorstore.delete(ids)
assert deleted
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def check_compatibility(vector_store: VectorStore) -> bool:
"Pinecone",
"Qdrant",
"Redis",
"Rockset",
"ScaNN",
"SemaDB",
"SupabaseVectorStore",
Expand Down

0 comments on commit 722aae4

Please sign in to comment.