-
Notifications
You must be signed in to change notification settings - Fork 16.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
infra: move indexing documentation test (#16595)
- Loading branch information
Showing
2 changed files
with
83 additions
and
81 deletions.
There are no files selected for viewing
83 changes: 83 additions & 0 deletions
83
libs/community/tests/unit_tests/vectorstores/test_indexing_docs.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
from langchain_core.vectorstores import VectorStore | ||
|
||
import langchain_community.vectorstores | ||
|
||
|
||
def test_compatible_vectorstore_documentation() -> None: | ||
"""Test which vectorstores are compatible with the indexing API. | ||
This serves as a reminder to update the documentation in [1] | ||
that specifies which vectorstores are compatible with the | ||
indexing API. | ||
Ideally if a developer adds a new vectorstore or modifies | ||
an existing one in such a way that affects its compatibility | ||
with the Indexing API, he/she will see this failed test | ||
case and 1) update docs in [1] and 2) update the `documented` | ||
dict in this test case. | ||
[1] langchain/docs/docs_skeleton/docs/modules/data_connection/indexing.ipynb | ||
""" | ||
|
||
# Check if a vectorstore is compatible with the indexing API | ||
def check_compatibility(vector_store: VectorStore) -> bool: | ||
"""Check if a vectorstore is compatible with the indexing API.""" | ||
methods = ["delete", "add_documents"] | ||
for method in methods: | ||
if not hasattr(vector_store, method): | ||
return False | ||
# Checking if the vectorstore has overridden the default delete method | ||
# implementation which just raises a NotImplementedError | ||
if getattr(vector_store, "delete") == VectorStore.delete: | ||
return False | ||
return True | ||
|
||
# Check all vector store classes for compatibility | ||
compatible = set() | ||
for class_name in langchain_community.vectorstores.__all__: | ||
# Get the definition of the class | ||
cls = getattr(langchain_community.vectorstores, class_name) | ||
|
||
# If the class corresponds to a vectorstore, check its compatibility | ||
if issubclass(cls, VectorStore): | ||
is_compatible = check_compatibility(cls) | ||
if is_compatible: | ||
compatible.add(class_name) | ||
|
||
# These are mentioned in the indexing.ipynb documentation | ||
documented = { | ||
"AnalyticDB", | ||
"AstraDB", | ||
"AzureCosmosDBVectorSearch", | ||
"AwaDB", | ||
"Bagel", | ||
"Cassandra", | ||
"Chroma", | ||
"DashVector", | ||
"DatabricksVectorSearch", | ||
"DeepLake", | ||
"Dingo", | ||
"ElasticVectorSearch", | ||
"ElasticsearchStore", | ||
"FAISS", | ||
"HanaDB", | ||
"MomentoVectorIndex", | ||
"MyScale", | ||
"PGVector", | ||
"Pinecone", | ||
"Qdrant", | ||
"Redis", | ||
"ScaNN", | ||
"SemaDB", | ||
"SupabaseVectorStore", | ||
"SurrealDBStore", | ||
"TileDB", | ||
"TimescaleVector", | ||
"Vald", | ||
"Vearch", | ||
"VespaStore", | ||
"Weaviate", | ||
"ZepVectorStore", | ||
"Lantern", | ||
} | ||
assert compatible == documented |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters