Home / Class/ AsyncDocumentIndexTestSuite Class — langchain Architecture

AsyncDocumentIndexTestSuite Class — langchain Architecture

Architecture documentation for the AsyncDocumentIndexTestSuite class in indexer.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  5d0054e9_6289_6599_8e38_80ecdefe02e1["AsyncDocumentIndexTestSuite"]
  74356621_dd57_97fa_cf4a_e9392b79a291["indexer.py"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|defined in| 74356621_dd57_97fa_cf4a_e9392b79a291
  4a773e55_0944_7fca_2c0b_8f95b97f5157["index()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 4a773e55_0944_7fca_2c0b_8f95b97f5157
  766799ca_5d14_cdc3_ec2d_65762272a4f7["test_upsert_documents_has_no_ids()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 766799ca_5d14_cdc3_ec2d_65762272a4f7
  5c9f1f91_a07e_2c2e_907a_99097f8044e8["test_upsert_no_ids()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 5c9f1f91_a07e_2c2e_907a_99097f8044e8
  d8e0e567_59e6_9498_df5d_a0525313e068["test_upsert_some_ids()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| d8e0e567_59e6_9498_df5d_a0525313e068
  dd2411c5_40ff_394a_dd3c_2ad9e661fa30["test_upsert_overwrites()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| dd2411c5_40ff_394a_dd3c_2ad9e661fa30
  f77f7955_e124_8f7e_af3b_e043fccc878b["test_delete_missing_docs()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| f77f7955_e124_8f7e_af3b_e043fccc878b
  309c1f8f_5e11_bebf_4688_2bba5e4ff387["test_delete_semantics()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 309c1f8f_5e11_bebf_4688_2bba5e4ff387
  0714a984_2baf_d463_d0d0_7454d72afa56["test_bulk_delete()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 0714a984_2baf_d463_d0d0_7454d72afa56
  8a0fe9eb_d8b8_d93e_e4d0_8b81fb5ecb0f["test_delete_no_args()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 8a0fe9eb_d8b8_d93e_e4d0_8b81fb5ecb0f
  da0c52ed_bb70_bb8f_ce3e_bc4da6e78077["test_delete_missing_content()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| da0c52ed_bb70_bb8f_ce3e_bc4da6e78077
  5a873b93_fc88_3bda_9c1f_5c39bea5e59b["test_get_with_missing_ids()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 5a873b93_fc88_3bda_9c1f_5c39bea5e59b
  4c431f04_f47f_43bd_b615_9e7f48919fb5["test_get_missing()"]
  5d0054e9_6289_6599_8e38_80ecdefe02e1 -->|method| 4c431f04_f47f_43bd_b615_9e7f48919fb5

Relationship Graph

Source Code

libs/standard-tests/langchain_tests/integration_tests/indexer.py lines 209–398

class AsyncDocumentIndexTestSuite(ABC):
    """Test suite for checking the read-write of a document index.

    Implementers should subclass this test suite and provide a fixture
    that returns an empty index for each test.
    """

    @abstractmethod
    @pytest.fixture
    async def index(self) -> AsyncGenerator[DocumentIndex, None]:
        """Get the index."""

    async def test_upsert_documents_has_no_ids(self, index: DocumentIndex) -> None:
        """Verify that there is not parameter called IDs in upsert."""
        signature = inspect.signature(index.upsert)
        assert "ids" not in signature.parameters

    async def test_upsert_no_ids(self, index: DocumentIndex) -> None:
        """Upsert works with documents that do not have IDs.

        At the moment, the ID field in documents is optional.
        """
        documents = [
            Document(page_content="foo", metadata={"id": 1}),
            Document(page_content="bar", metadata={"id": 2}),
        ]
        response = await index.aupsert(documents)
        ids = sorted(response["succeeded"])

        # Ordering is not guaranteed, need to test carefully
        documents = await index.aget(ids)
        sorted_documents = sorted(documents, key=lambda x: x.id or "")

        if sorted_documents[0].page_content == "bar":
            assert sorted_documents[0] == Document(
                page_content="bar", metadata={"id": 2}, id=ids[0]
            )
            assert sorted_documents[1] == Document(
                page_content="foo", metadata={"id": 1}, id=ids[1]
            )
        else:
            assert sorted_documents[0] == Document(
                page_content="foo", metadata={"id": 1}, id=ids[0]
            )
            assert sorted_documents[1] == Document(
                page_content="bar", metadata={"id": 2}, id=ids[1]
            )

    async def test_upsert_some_ids(self, index: DocumentIndex) -> None:
        """Test an upsert where some docs have IDs and some don't."""
        foo_uuid = str(uuid.UUID(int=7))
        documents = [
            Document(id=foo_uuid, page_content="foo", metadata={"id": 1}),
            Document(page_content="bar", metadata={"id": 2}),
        ]
        response = await index.aupsert(documents)
        ids = response["succeeded"]
        other_id = next(iter(set(ids) - {foo_uuid}))
        assert response["failed"] == []
        assert foo_uuid in ids
        # Ordering is not guaranteed, so we use a set.
        documents = await index.aget(ids)
        first_doc = documents[0]
        if first_doc.id == foo_uuid:
            assert documents == [
                Document(page_content="foo", metadata={"id": 1}, id=foo_uuid),
                Document(page_content="bar", metadata={"id": 2}, id=other_id),
            ]
        else:
            assert documents == [
                Document(page_content="bar", metadata={"id": 2}, id=other_id),
                Document(page_content="foo", metadata={"id": 1}, id=foo_uuid),
            ]

    async def test_upsert_overwrites(self, index: DocumentIndex) -> None:
        """Test that upsert overwrites existing content."""
        foo_uuid = str(uuid.UUID(int=7))
        documents = [
            Document(id=foo_uuid, page_content="foo", metadata={"bar": 1}),
        ]
        response = await index.aupsert(documents)

Frequently Asked Questions

What is the AsyncDocumentIndexTestSuite class?
AsyncDocumentIndexTestSuite is a class in the langchain codebase, defined in libs/standard-tests/langchain_tests/integration_tests/indexer.py.
Where is AsyncDocumentIndexTestSuite defined?
AsyncDocumentIndexTestSuite is defined in libs/standard-tests/langchain_tests/integration_tests/indexer.py at line 209.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free