From 94bfabccbf5feb1848b5584da0ed9cc771497932 Mon Sep 17 00:00:00 2001 From: Max Isom Date: Fri, 31 Jan 2025 15:41:44 -0800 Subject: [PATCH] [TST]: fix Rust frontend for test_logservice.py (#3648) See https://github.com/chroma-core/chroma/pull/3646 --- .github/workflows/_python-tests.yml | 1 - chromadb/proto/.gitignore | 2 ++ rust/frontend/src/frontend.rs | 51 ++++++++++++++++------------- 3 files changed, 30 insertions(+), 24 deletions(-) create mode 100644 chromadb/proto/.gitignore diff --git a/.github/workflows/_python-tests.yml b/.github/workflows/_python-tests.yml index 69ee4cc8e00..92e4a5a7a0a 100644 --- a/.github/workflows/_python-tests.yml +++ b/.github/workflows/_python-tests.yml @@ -149,7 +149,6 @@ jobs: "chromadb/test/property/test_collections_with_database_tenant.py", "chromadb/test/property/test_collections_with_database_tenant_overwrite.py", "chromadb/test/property/test_sysdb.py", - "chromadb/test/ingest/test_producer_consumer.py", "chromadb/test/segment/distributed/test_memberlist_provider.py", "chromadb/test/test_logservice.py", "chromadb/test/distributed/test_sanity.py"] diff --git a/chromadb/proto/.gitignore b/chromadb/proto/.gitignore new file mode 100644 index 00000000000..66be4988e11 --- /dev/null +++ b/chromadb/proto/.gitignore @@ -0,0 +1,2 @@ +*_pb2.py* +*_pb2_grpc.py diff --git a/rust/frontend/src/frontend.rs b/rust/frontend/src/frontend.rs index 43d77b8d5d2..b2733a0e5d1 100644 --- a/rust/frontend/src/frontend.rs +++ b/rust/frontend/src/frontend.rs @@ -72,31 +72,36 @@ fn to_records< MetadataValue: Into, M: IntoIterator, >( - mut ids: Vec, - mut embeddings: Option>>, - mut documents: Option>, - mut uris: Option>, - mut metadatas: Option>, + ids: Vec, + embeddings: Option>>, + documents: Option>, + uris: Option>, + metadatas: Option>, operation: Operation, ) -> Result, ToRecordsError> { - let mut records: Vec = vec![]; - while let Some(id) = ids.pop() { - let embedding = embeddings - .as_mut() - .map(|v| v.pop().ok_or(ToRecordsError::InconsistentLength)) - .transpose()?; - let document = documents - .as_mut() - .map(|v| v.pop().ok_or(ToRecordsError::InconsistentLength)) - .transpose()?; - let uri = uris - .as_mut() - .map(|v| v.pop().ok_or(ToRecordsError::InconsistentLength)) - .transpose()?; - let metadata = metadatas - .as_mut() - .map(|v| v.pop().ok_or(ToRecordsError::InconsistentLength)) - .transpose()?; + let len = ids.len(); + + // Check that every present vector has the same length as `ids`. + if embeddings.as_ref().is_some_and(|v| v.len() != len) + || documents.as_ref().is_some_and(|v| v.len() != len) + || uris.as_ref().is_some_and(|v| v.len() != len) + || metadatas.as_ref().is_some_and(|v| v.len() != len) + { + return Err(ToRecordsError::InconsistentLength); + } + + let mut embeddings_iter = embeddings.into_iter().flat_map(|v| v.into_iter()); + let mut documents_iter = documents.into_iter().flat_map(|v| v.into_iter()); + let mut uris_iter = uris.into_iter().flat_map(|v| v.into_iter()); + let mut metadatas_iter = metadatas.into_iter().flat_map(|v| v.into_iter()); + + let mut records = Vec::with_capacity(len); + + for id in ids { + let embedding = embeddings_iter.next(); + let document = documents_iter.next(); + let uri = uris_iter.next(); + let metadata = metadatas_iter.next(); let encoding = embedding.as_ref().map(|_| ScalarEncoding::FLOAT32);