fix(matrixone): generate ids for every document (#39734)

Co-authored-by: caosurong <surong.cao@thinkingdata.cn>
This commit is contained in:
csurong 2026-07-29 20:31:11 +08:00 committed by GitHub
parent 080a1d42f2
commit fc2f1f4f75
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 10 deletions

View File

@ -119,9 +119,8 @@ class MatrixoneVector(BaseVector):
assert self.client is not None
ids = []
for doc in documents:
if doc.metadata is not None:
doc_id = doc.metadata.get("doc_id", str(uuid.uuid4()))
ids.append(doc_id)
doc_id = doc.metadata.get("doc_id") if doc.metadata else None
ids.append(str(doc_id or uuid.uuid4()))
self.client.insert(
texts=[doc.page_content for doc in documents],
embeddings=embeddings,

View File

@ -168,7 +168,8 @@ def test_get_client_handles_full_text_index_creation_error(matrixone_module, mon
def test_add_texts_generates_ids_and_inserts(matrixone_module, monkeypatch: pytest.MonkeyPatch):
vector = matrixone_module.MatrixoneVector("collection_1", _valid_config(matrixone_module))
vector.client = MagicMock()
monkeypatch.setattr(matrixone_module.uuid, "uuid4", lambda: "generated-uuid")
generated_ids = iter(["generated-id-b", "generated-id-c"])
monkeypatch.setattr(matrixone_module.uuid, "uuid4", lambda: next(generated_ids))
docs = [
Document(page_content="a", metadata={"doc_id": "doc-a", "document_id": "d-1"}),
Document(page_content="b", metadata={"document_id": "d-2"}),
@ -177,18 +178,15 @@ def test_add_texts_generates_ids_and_inserts(matrixone_module, monkeypatch: pyte
ids = vector.add_texts(docs, [[0.1], [0.2], [0.3]])
# For current prod code, only docs with metadata get ids, so only two ids
assert ids == ["doc-a", "generated-uuid"]
assert ids == ["doc-a", "generated-id-b", "generated-id-c"]
vector.client.insert.assert_called_once()
insert_kwargs = vector.client.insert.call_args.kwargs
# All lists passed to insert should be the same length
texts = insert_kwargs["texts"]
embeddings = insert_kwargs["embeddings"]
metadatas = insert_kwargs["metadatas"]
ids_insert = insert_kwargs["ids"]
assert len(texts) == len(embeddings) == len(metadatas) == len(docs)
# ids may be shorter than docs for current prod code, but should match number of docs with metadata
assert ids_insert == ["doc-a", "generated-uuid"]
assert len(ids_insert) == len(texts) == len(embeddings) == len(metadatas) == len(docs)
assert ids_insert == ids
def test_delete_and_metadata_methods(matrixone_module):