Files
wehub-resource-sync 6b7e6b44f1
gh-pages / build (push) Waiting to run
Python Publish (pypi) / Upload release to PyPI (push) Waiting to run
Spellcheck / spellcheck (push) Waiting to run
Python Build and Type Check / python-ci (ubuntu-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:37:31 +08:00

147 lines
4.3 KiB
Python

# Copyright (c) 2024 Microsoft Corporation.
# Licensed under the MIT License
"""Integration tests for CosmosDB vector store implementation."""
import sys
import numpy as np
import pytest
from graphrag_vectors import (
VectorStoreDocument,
)
from graphrag_vectors.cosmosdb import CosmosDBVectorStore
# cspell:disable-next-line well-known-key
WELL_KNOWN_COSMOS_CONNECTION_STRING = "AccountEndpoint=https://127.0.0.1:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
# the cosmosdb emulator is only available on windows runners at this time
if not sys.platform.startswith("win"):
pytest.skip(
"encountered windows-only tests -- will skip for now", allow_module_level=True
)
def test_vector_store_operations():
"""Test basic vector store operations with CosmosDB."""
vector_store = CosmosDBVectorStore(
connection_string=WELL_KNOWN_COSMOS_CONNECTION_STRING,
database_name="test_db",
index_name="testvector",
)
try:
vector_store.connect()
docs = [
VectorStoreDocument(
id="doc1",
vector=[0.1, 0.2, 0.3, 0.4, 0.5],
),
VectorStoreDocument(
id="doc2",
vector=[0.2, 0.3, 0.4, 0.5, 0.6],
),
]
vector_store.create_index()
vector_store.load_documents(docs)
doc = vector_store.search_by_id("doc1")
assert doc.id == "doc1"
assert doc.vector is not None
assert np.allclose(doc.vector, [0.1, 0.2, 0.3, 0.4, 0.5])
# Define a simple text embedder function for testing
def mock_embedder(text: str) -> list[float]:
return [0.1, 0.2, 0.3, 0.4, 0.5] # Return fixed embedding
vector_results = vector_store.similarity_search_by_vector(
[0.1, 0.2, 0.3, 0.4, 0.5], k=2
)
assert len(vector_results) > 0
text_results = vector_store.similarity_search_by_text(
"test query", mock_embedder, k=2
)
assert len(text_results) > 0
finally:
vector_store.clear()
def test_clear():
"""Test clearing the vector store."""
vector_store = CosmosDBVectorStore(
connection_string=WELL_KNOWN_COSMOS_CONNECTION_STRING,
database_name="testclear",
index_name="testclear",
)
try:
vector_store.connect()
doc = VectorStoreDocument(
id="test",
vector=[0.1, 0.2, 0.3, 0.4, 0.5],
)
vector_store.create_index()
vector_store.load_documents([doc])
result = vector_store.search_by_id("test")
assert result.id == "test"
# Clear and verify document is removed
vector_store.clear()
assert vector_store._database_exists() is False # noqa: SLF001
finally:
pass
def test_vector_store_customization():
"""Test vector store customization with CosmosDB."""
vector_store = CosmosDBVectorStore(
connection_string=WELL_KNOWN_COSMOS_CONNECTION_STRING,
database_name="test_db",
index_name="text-embeddings",
id_field="id",
vector_field="vector_custom",
vector_size=5,
)
try:
vector_store.connect()
docs = [
VectorStoreDocument(
id="doc1",
vector=[0.1, 0.2, 0.3, 0.4, 0.5],
),
VectorStoreDocument(
id="doc2",
vector=[0.2, 0.3, 0.4, 0.5, 0.6],
),
]
vector_store.create_index()
vector_store.load_documents(docs)
doc = vector_store.search_by_id("doc1")
assert doc.id == "doc1"
assert doc.vector is not None
assert np.allclose(doc.vector, [0.1, 0.2, 0.3, 0.4, 0.5])
# Define a simple text embedder function for testing
def mock_embedder(text: str) -> list[float]:
return [0.1, 0.2, 0.3, 0.4, 0.5] # Return fixed embedding
vector_results = vector_store.similarity_search_by_vector(
[0.1, 0.2, 0.3, 0.4, 0.5], k=2
)
assert len(vector_results) > 0
text_results = vector_store.similarity_search_by_text(
"test query", mock_embedder, k=2
)
assert len(text_results) > 0
finally:
vector_store.clear()