diff --git a/.github/workflows/_python-tests.yml b/.github/workflows/_python-tests.yml index de01ecfaa86..538a175c99d 100644 --- a/.github/workflows/_python-tests.yml +++ b/.github/workflows/_python-tests.yml @@ -92,6 +92,7 @@ jobs: test-globs: ["chromadb/test/db/test_system.py", "chromadb/test/property/test_collections.py", "chromadb/test/property/test_add.py", + "chromadb/test/property/test_filtering.py", "chromadb/test/property/test_collections_with_database_tenant.py", "chromadb/test/property/test_collections_with_database_tenant_overwrite.py", "chromadb/test/ingest/test_producer_consumer.py", diff --git a/chromadb/db/mixins/sysdb.py b/chromadb/db/mixins/sysdb.py index 44f583103f6..09ffe3c0fef 100644 --- a/chromadb/db/mixins/sysdb.py +++ b/chromadb/db/mixins/sysdb.py @@ -303,6 +303,7 @@ def get_segments( metadata_t.str_value, metadata_t.int_value, metadata_t.float_value, + metadata_t.bool_value, ) .left_join(metadata_t) .on(segments_t.id == metadata_t.segment_id) @@ -384,6 +385,7 @@ def get_collections( metadata_t.str_value, metadata_t.int_value, metadata_t.float_value, + metadata_t.bool_value, ) .left_join(metadata_t) .on(collections_t.id == metadata_t.collection_id) @@ -636,15 +638,17 @@ def _metadata_from_rows( "num_rows": len(rows), } ) - metadata: Dict[str, Union[str, int, float]] = {} + metadata: Dict[str, Union[str, int, float, bool]] = {} for row in rows: - key = str(row[-4]) - if row[-3] is not None: - metadata[key] = str(row[-3]) + key = str(row[-5]) + if row[-4] is not None: + metadata[key] = str(row[-4]) + elif row[-3] is not None: + metadata[key] = int(row[-3]) elif row[-2] is not None: - metadata[key] = int(row[-2]) + metadata[key] = float(row[-2]) elif row[-1] is not None: - metadata[key] = float(row[-1]) + metadata[key] = bool(row[-1]) return metadata or None @trace_method("SqlSysDB._insert_metadata", OpenTelemetryGranularity.ALL) @@ -685,17 +689,30 @@ def _insert_metadata( table.str_value, table.int_value, table.float_value, + table.bool_value, ) ) sql_id = self.uuid_to_db(id) for k, v in metadata.items(): - if isinstance(v, str): + # Note: The order is important here because isinstance(v, bool) + # and isinstance(v, int) both are true for v of bool type. + if isinstance(v, bool): + q = q.insert( + ParameterValue(sql_id), + ParameterValue(k), + None, + None, + None, + ParameterValue(int(v)), + ) + elif isinstance(v, str): q = q.insert( ParameterValue(sql_id), ParameterValue(k), ParameterValue(v), None, None, + None, ) elif isinstance(v, int): q = q.insert( @@ -704,6 +721,7 @@ def _insert_metadata( None, ParameterValue(v), None, + None, ) elif isinstance(v, float): q = q.insert( @@ -712,6 +730,7 @@ def _insert_metadata( None, None, ParameterValue(v), + None, ) elif v is None: continue diff --git a/chromadb/migrations/sysdb/00006-collection-segment-metadata.sqlite.sql b/chromadb/migrations/sysdb/00006-collection-segment-metadata.sqlite.sql new file mode 100644 index 00000000000..8d0d5d603d8 --- /dev/null +++ b/chromadb/migrations/sysdb/00006-collection-segment-metadata.sqlite.sql @@ -0,0 +1,6 @@ +-- SQLite does not support adding check with alter table, as a result, adding a check +-- involve creating a new table and copying the data over. It is over kill with adding +-- a boolean type column. The application write to the table needs to ensure the data +-- integrity. +ALTER TABLE collection_metadata ADD COLUMN bool_value INTEGER; +ALTER TABLE segment_metadata ADD COLUMN bool_value INTEGER; diff --git a/chromadb/proto/chroma_pb2.py b/chromadb/proto/chroma_pb2.py index b0b9b752cd6..8876547b294 100644 --- a/chromadb/proto/chroma_pb2.py +++ b/chromadb/proto/chroma_pb2.py @@ -14,7 +14,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x63hromadb/proto/chroma.proto\x12\x06\x63hroma\"&\n\x06Status\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\x05\"U\n\x06Vector\x12\x11\n\tdimension\x18\x01 \x01(\x05\x12\x0e\n\x06vector\x18\x02 \x01(\x0c\x12(\n\x08\x65ncoding\x18\x03 \x01(\x0e\x32\x16.chroma.ScalarEncoding\"\x1a\n\tFilePaths\x12\r\n\x05paths\x18\x01 \x03(\t\"\xa5\x02\n\x07Segment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12#\n\x05scope\x18\x03 \x01(\x0e\x32\x14.chroma.SegmentScope\x12\x17\n\ncollection\x18\x05 \x01(\tH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x06 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x01\x88\x01\x01\x12\x32\n\nfile_paths\x18\x07 \x03(\x0b\x32\x1e.chroma.Segment.FilePathsEntry\x1a\x43\n\x0e\x46ilePathsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.chroma.FilePaths:\x02\x38\x01\x42\r\n\x0b_collectionB\x0b\n\t_metadata\"\xd1\x01\n\nCollection\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x04 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x88\x01\x01\x12\x16\n\tdimension\x18\x05 \x01(\x05H\x01\x88\x01\x01\x12\x0e\n\x06tenant\x18\x06 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x07 \x01(\t\x12\x14\n\x0clog_position\x18\x08 \x01(\x03\x12\x0f\n\x07version\x18\t \x01(\x05\x42\x0b\n\t_metadataB\x0c\n\n_dimension\"4\n\x08\x44\x61tabase\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06tenant\x18\x03 \x01(\t\"\x16\n\x06Tenant\x12\x0c\n\x04name\x18\x01 \x01(\t\"b\n\x13UpdateMetadataValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x13\n\tint_value\x18\x02 \x01(\x03H\x00\x12\x15\n\x0b\x66loat_value\x18\x03 \x01(\x01H\x00\x42\x07\n\x05value\"\x96\x01\n\x0eUpdateMetadata\x12\x36\n\x08metadata\x18\x01 \x03(\x0b\x32$.chroma.UpdateMetadata.MetadataEntry\x1aL\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.chroma.UpdateMetadataValue:\x02\x38\x01\"\xaf\x01\n\x0fOperationRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06vector\x18\x02 \x01(\x0b\x32\x0e.chroma.VectorH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x01\x88\x01\x01\x12$\n\toperation\x18\x04 \x01(\x0e\x32\x11.chroma.OperationB\t\n\x07_vectorB\x0b\n\t_metadata\")\n\x13\x43ountRecordsRequest\x12\x12\n\nsegment_id\x18\x01 \x01(\t\"%\n\x14\x43ountRecordsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\r\"\xc2\x01\n\x14QueryMetadataRequest\x12\x12\n\nsegment_id\x18\x01 \x01(\t\x12\x1c\n\x05where\x18\x02 \x01(\x0b\x32\r.chroma.Where\x12-\n\x0ewhere_document\x18\x03 \x01(\x0b\x32\x15.chroma.WhereDocument\x12\x0b\n\x03ids\x18\x04 \x03(\t\x12\x12\n\x05limit\x18\x05 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x06 \x01(\x05H\x01\x88\x01\x01\x42\x08\n\x06_limitB\t\n\x07_offset\"I\n\x15QueryMetadataResponse\x12\x30\n\x07records\x18\x01 \x03(\x0b\x32\x1f.chroma.MetadataEmbeddingRecord\"O\n\x17MetadataEmbeddingRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12(\n\x08metadata\x18\x02 \x01(\x0b\x32\x16.chroma.UpdateMetadata\"\x83\x01\n\rWhereDocument\x12-\n\x06\x64irect\x18\x01 \x01(\x0b\x32\x1b.chroma.DirectWhereDocumentH\x00\x12\x31\n\x08\x63hildren\x18\x02 \x01(\x0b\x32\x1d.chroma.WhereDocumentChildrenH\x00\x42\x10\n\x0ewhere_document\"X\n\x13\x44irectWhereDocument\x12\x10\n\x08\x64ocument\x18\x01 \x01(\t\x12/\n\x08operator\x18\x02 \x01(\x0e\x32\x1d.chroma.WhereDocumentOperator\"k\n\x15WhereDocumentChildren\x12\'\n\x08\x63hildren\x18\x01 \x03(\x0b\x32\x15.chroma.WhereDocument\x12)\n\x08operator\x18\x02 \x01(\x0e\x32\x17.chroma.BooleanOperator\"r\n\x05Where\x12\x35\n\x11\x64irect_comparison\x18\x01 \x01(\x0b\x32\x18.chroma.DirectComparisonH\x00\x12)\n\x08\x63hildren\x18\x02 \x01(\x0b\x32\x15.chroma.WhereChildrenH\x00\x42\x07\n\x05where\"\x9b\x03\n\x10\x44irectComparison\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x15single_string_operand\x18\x02 \x01(\x0b\x32\x1e.chroma.SingleStringComparisonH\x00\x12;\n\x13string_list_operand\x18\x03 \x01(\x0b\x32\x1c.chroma.StringListComparisonH\x00\x12\x39\n\x12single_int_operand\x18\x04 \x01(\x0b\x32\x1b.chroma.SingleIntComparisonH\x00\x12\x35\n\x10int_list_operand\x18\x05 \x01(\x0b\x32\x19.chroma.IntListComparisonH\x00\x12?\n\x15single_double_operand\x18\x06 \x01(\x0b\x32\x1e.chroma.SingleDoubleComparisonH\x00\x12;\n\x13\x64ouble_list_operand\x18\x07 \x01(\x0b\x32\x1c.chroma.DoubleListComparisonH\x00\x42\x0c\n\ncomparison\"[\n\rWhereChildren\x12\x1f\n\x08\x63hildren\x18\x01 \x03(\x0b\x32\r.chroma.Where\x12)\n\x08operator\x18\x02 \x01(\x0e\x32\x17.chroma.BooleanOperator\"S\n\x14StringListComparison\x12\x0e\n\x06values\x18\x01 \x03(\t\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"V\n\x16SingleStringComparison\x12\r\n\x05value\x18\x01 \x01(\t\x12-\n\ncomparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparator\"P\n\x11IntListComparison\x12\x0e\n\x06values\x18\x01 \x03(\x03\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"\xa2\x01\n\x13SingleIntComparison\x12\r\n\x05value\x18\x01 \x01(\x03\x12\x37\n\x12generic_comparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparatorH\x00\x12\x35\n\x11number_comparator\x18\x03 \x01(\x0e\x32\x18.chroma.NumberComparatorH\x00\x42\x0c\n\ncomparator\"S\n\x14\x44oubleListComparison\x12\x0e\n\x06values\x18\x01 \x03(\x01\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"\xa5\x01\n\x16SingleDoubleComparison\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x37\n\x12generic_comparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparatorH\x00\x12\x35\n\x11number_comparator\x18\x03 \x01(\x0e\x32\x18.chroma.NumberComparatorH\x00\x42\x0c\n\ncomparator\"4\n\x11GetVectorsRequest\x12\x0b\n\x03ids\x18\x01 \x03(\t\x12\x12\n\nsegment_id\x18\x02 \x01(\t\"D\n\x12GetVectorsResponse\x12.\n\x07records\x18\x01 \x03(\x0b\x32\x1d.chroma.VectorEmbeddingRecord\"C\n\x15VectorEmbeddingRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x06vector\x18\x03 \x01(\x0b\x32\x0e.chroma.Vector\"\x86\x01\n\x13QueryVectorsRequest\x12\x1f\n\x07vectors\x18\x01 \x03(\x0b\x32\x0e.chroma.Vector\x12\t\n\x01k\x18\x02 \x01(\x05\x12\x13\n\x0b\x61llowed_ids\x18\x03 \x03(\t\x12\x1a\n\x12include_embeddings\x18\x04 \x01(\x08\x12\x12\n\nsegment_id\x18\x05 \x01(\t\"C\n\x14QueryVectorsResponse\x12+\n\x07results\x18\x01 \x03(\x0b\x32\x1a.chroma.VectorQueryResults\"@\n\x12VectorQueryResults\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.chroma.VectorQueryResult\"a\n\x11VectorQueryResult\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x64istance\x18\x03 \x01(\x02\x12#\n\x06vector\x18\x04 \x01(\x0b\x32\x0e.chroma.VectorH\x00\x88\x01\x01\x42\t\n\x07_vector*8\n\tOperation\x12\x07\n\x03\x41\x44\x44\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06UPSERT\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03*(\n\x0eScalarEncoding\x12\x0b\n\x07\x46LOAT32\x10\x00\x12\t\n\x05INT32\x10\x01*@\n\x0cSegmentScope\x12\n\n\x06VECTOR\x10\x00\x12\x0c\n\x08METADATA\x10\x01\x12\n\n\x06RECORD\x10\x02\x12\n\n\x06SQLITE\x10\x03*7\n\x15WhereDocumentOperator\x12\x0c\n\x08\x43ONTAINS\x10\x00\x12\x10\n\x0cNOT_CONTAINS\x10\x01*\"\n\x0f\x42ooleanOperator\x12\x07\n\x03\x41ND\x10\x00\x12\x06\n\x02OR\x10\x01*\x1f\n\x0cListOperator\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03NIN\x10\x01*#\n\x11GenericComparator\x12\x06\n\x02\x45Q\x10\x00\x12\x06\n\x02NE\x10\x01*4\n\x10NumberComparator\x12\x06\n\x02GT\x10\x00\x12\x07\n\x03GTE\x10\x01\x12\x06\n\x02LT\x10\x02\x12\x07\n\x03LTE\x10\x03\x32\xad\x01\n\x0eMetadataReader\x12N\n\rQueryMetadata\x12\x1c.chroma.QueryMetadataRequest\x1a\x1d.chroma.QueryMetadataResponse\"\x00\x12K\n\x0c\x43ountRecords\x12\x1b.chroma.CountRecordsRequest\x1a\x1c.chroma.CountRecordsResponse\"\x00\x32\xa2\x01\n\x0cVectorReader\x12\x45\n\nGetVectors\x12\x19.chroma.GetVectorsRequest\x1a\x1a.chroma.GetVectorsResponse\"\x00\x12K\n\x0cQueryVectors\x12\x1b.chroma.QueryVectorsRequest\x1a\x1c.chroma.QueryVectorsResponse\"\x00\x42:Z8github.com/chroma-core/chroma/go/pkg/proto/coordinatorpbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x63hromadb/proto/chroma.proto\x12\x06\x63hroma\"&\n\x06Status\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\x05\"U\n\x06Vector\x12\x11\n\tdimension\x18\x01 \x01(\x05\x12\x0e\n\x06vector\x18\x02 \x01(\x0c\x12(\n\x08\x65ncoding\x18\x03 \x01(\x0e\x32\x16.chroma.ScalarEncoding\"\x1a\n\tFilePaths\x12\r\n\x05paths\x18\x01 \x03(\t\"\xa5\x02\n\x07Segment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12#\n\x05scope\x18\x03 \x01(\x0e\x32\x14.chroma.SegmentScope\x12\x17\n\ncollection\x18\x05 \x01(\tH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x06 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x01\x88\x01\x01\x12\x32\n\nfile_paths\x18\x07 \x03(\x0b\x32\x1e.chroma.Segment.FilePathsEntry\x1a\x43\n\x0e\x46ilePathsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.chroma.FilePaths:\x02\x38\x01\x42\r\n\x0b_collectionB\x0b\n\t_metadata\"\xd1\x01\n\nCollection\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x04 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x88\x01\x01\x12\x16\n\tdimension\x18\x05 \x01(\x05H\x01\x88\x01\x01\x12\x0e\n\x06tenant\x18\x06 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x07 \x01(\t\x12\x14\n\x0clog_position\x18\x08 \x01(\x03\x12\x0f\n\x07version\x18\t \x01(\x05\x42\x0b\n\t_metadataB\x0c\n\n_dimension\"4\n\x08\x44\x61tabase\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06tenant\x18\x03 \x01(\t\"\x16\n\x06Tenant\x12\x0c\n\x04name\x18\x01 \x01(\t\"x\n\x13UpdateMetadataValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x13\n\tint_value\x18\x02 \x01(\x03H\x00\x12\x15\n\x0b\x66loat_value\x18\x03 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x42\x07\n\x05value\"\x96\x01\n\x0eUpdateMetadata\x12\x36\n\x08metadata\x18\x01 \x03(\x0b\x32$.chroma.UpdateMetadata.MetadataEntry\x1aL\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.chroma.UpdateMetadataValue:\x02\x38\x01\"\xaf\x01\n\x0fOperationRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06vector\x18\x02 \x01(\x0b\x32\x0e.chroma.VectorH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x01\x88\x01\x01\x12$\n\toperation\x18\x04 \x01(\x0e\x32\x11.chroma.OperationB\t\n\x07_vectorB\x0b\n\t_metadata\")\n\x13\x43ountRecordsRequest\x12\x12\n\nsegment_id\x18\x01 \x01(\t\"%\n\x14\x43ountRecordsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\r\"\xc2\x01\n\x14QueryMetadataRequest\x12\x12\n\nsegment_id\x18\x01 \x01(\t\x12\x1c\n\x05where\x18\x02 \x01(\x0b\x32\r.chroma.Where\x12-\n\x0ewhere_document\x18\x03 \x01(\x0b\x32\x15.chroma.WhereDocument\x12\x0b\n\x03ids\x18\x04 \x03(\t\x12\x12\n\x05limit\x18\x05 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x06 \x01(\x05H\x01\x88\x01\x01\x42\x08\n\x06_limitB\t\n\x07_offset\"I\n\x15QueryMetadataResponse\x12\x30\n\x07records\x18\x01 \x03(\x0b\x32\x1f.chroma.MetadataEmbeddingRecord\"O\n\x17MetadataEmbeddingRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12(\n\x08metadata\x18\x02 \x01(\x0b\x32\x16.chroma.UpdateMetadata\"\x83\x01\n\rWhereDocument\x12-\n\x06\x64irect\x18\x01 \x01(\x0b\x32\x1b.chroma.DirectWhereDocumentH\x00\x12\x31\n\x08\x63hildren\x18\x02 \x01(\x0b\x32\x1d.chroma.WhereDocumentChildrenH\x00\x42\x10\n\x0ewhere_document\"X\n\x13\x44irectWhereDocument\x12\x10\n\x08\x64ocument\x18\x01 \x01(\t\x12/\n\x08operator\x18\x02 \x01(\x0e\x32\x1d.chroma.WhereDocumentOperator\"k\n\x15WhereDocumentChildren\x12\'\n\x08\x63hildren\x18\x01 \x03(\x0b\x32\x15.chroma.WhereDocument\x12)\n\x08operator\x18\x02 \x01(\x0e\x32\x17.chroma.BooleanOperator\"r\n\x05Where\x12\x35\n\x11\x64irect_comparison\x18\x01 \x01(\x0b\x32\x18.chroma.DirectComparisonH\x00\x12)\n\x08\x63hildren\x18\x02 \x01(\x0b\x32\x15.chroma.WhereChildrenH\x00\x42\x07\n\x05where\"\x91\x04\n\x10\x44irectComparison\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x15single_string_operand\x18\x02 \x01(\x0b\x32\x1e.chroma.SingleStringComparisonH\x00\x12;\n\x13string_list_operand\x18\x03 \x01(\x0b\x32\x1c.chroma.StringListComparisonH\x00\x12\x39\n\x12single_int_operand\x18\x04 \x01(\x0b\x32\x1b.chroma.SingleIntComparisonH\x00\x12\x35\n\x10int_list_operand\x18\x05 \x01(\x0b\x32\x19.chroma.IntListComparisonH\x00\x12?\n\x15single_double_operand\x18\x06 \x01(\x0b\x32\x1e.chroma.SingleDoubleComparisonH\x00\x12;\n\x13\x64ouble_list_operand\x18\x07 \x01(\x0b\x32\x1c.chroma.DoubleListComparisonH\x00\x12\x37\n\x11\x62ool_list_operand\x18\x08 \x01(\x0b\x32\x1a.chroma.BoolListComparisonH\x00\x12;\n\x13single_bool_operand\x18\t \x01(\x0b\x32\x1c.chroma.SingleBoolComparisonH\x00\x42\x0c\n\ncomparison\"[\n\rWhereChildren\x12\x1f\n\x08\x63hildren\x18\x01 \x03(\x0b\x32\r.chroma.Where\x12)\n\x08operator\x18\x02 \x01(\x0e\x32\x17.chroma.BooleanOperator\"S\n\x14StringListComparison\x12\x0e\n\x06values\x18\x01 \x03(\t\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"V\n\x16SingleStringComparison\x12\r\n\x05value\x18\x01 \x01(\t\x12-\n\ncomparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparator\"T\n\x14SingleBoolComparison\x12\r\n\x05value\x18\x01 \x01(\x08\x12-\n\ncomparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparator\"P\n\x11IntListComparison\x12\x0e\n\x06values\x18\x01 \x03(\x03\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"\xa2\x01\n\x13SingleIntComparison\x12\r\n\x05value\x18\x01 \x01(\x03\x12\x37\n\x12generic_comparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparatorH\x00\x12\x35\n\x11number_comparator\x18\x03 \x01(\x0e\x32\x18.chroma.NumberComparatorH\x00\x42\x0c\n\ncomparator\"S\n\x14\x44oubleListComparison\x12\x0e\n\x06values\x18\x01 \x03(\x01\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"Q\n\x12\x42oolListComparison\x12\x0e\n\x06values\x18\x01 \x03(\x08\x12+\n\rlist_operator\x18\x02 \x01(\x0e\x32\x14.chroma.ListOperator\"\xa5\x01\n\x16SingleDoubleComparison\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x37\n\x12generic_comparator\x18\x02 \x01(\x0e\x32\x19.chroma.GenericComparatorH\x00\x12\x35\n\x11number_comparator\x18\x03 \x01(\x0e\x32\x18.chroma.NumberComparatorH\x00\x42\x0c\n\ncomparator\"4\n\x11GetVectorsRequest\x12\x0b\n\x03ids\x18\x01 \x03(\t\x12\x12\n\nsegment_id\x18\x02 \x01(\t\"D\n\x12GetVectorsResponse\x12.\n\x07records\x18\x01 \x03(\x0b\x32\x1d.chroma.VectorEmbeddingRecord\"C\n\x15VectorEmbeddingRecord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x06vector\x18\x03 \x01(\x0b\x32\x0e.chroma.Vector\"\x86\x01\n\x13QueryVectorsRequest\x12\x1f\n\x07vectors\x18\x01 \x03(\x0b\x32\x0e.chroma.Vector\x12\t\n\x01k\x18\x02 \x01(\x05\x12\x13\n\x0b\x61llowed_ids\x18\x03 \x03(\t\x12\x1a\n\x12include_embeddings\x18\x04 \x01(\x08\x12\x12\n\nsegment_id\x18\x05 \x01(\t\"C\n\x14QueryVectorsResponse\x12+\n\x07results\x18\x01 \x03(\x0b\x32\x1a.chroma.VectorQueryResults\"@\n\x12VectorQueryResults\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.chroma.VectorQueryResult\"a\n\x11VectorQueryResult\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x64istance\x18\x03 \x01(\x02\x12#\n\x06vector\x18\x04 \x01(\x0b\x32\x0e.chroma.VectorH\x00\x88\x01\x01\x42\t\n\x07_vector*8\n\tOperation\x12\x07\n\x03\x41\x44\x44\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06UPSERT\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03*(\n\x0eScalarEncoding\x12\x0b\n\x07\x46LOAT32\x10\x00\x12\t\n\x05INT32\x10\x01*@\n\x0cSegmentScope\x12\n\n\x06VECTOR\x10\x00\x12\x0c\n\x08METADATA\x10\x01\x12\n\n\x06RECORD\x10\x02\x12\n\n\x06SQLITE\x10\x03*7\n\x15WhereDocumentOperator\x12\x0c\n\x08\x43ONTAINS\x10\x00\x12\x10\n\x0cNOT_CONTAINS\x10\x01*\"\n\x0f\x42ooleanOperator\x12\x07\n\x03\x41ND\x10\x00\x12\x06\n\x02OR\x10\x01*\x1f\n\x0cListOperator\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03NIN\x10\x01*#\n\x11GenericComparator\x12\x06\n\x02\x45Q\x10\x00\x12\x06\n\x02NE\x10\x01*4\n\x10NumberComparator\x12\x06\n\x02GT\x10\x00\x12\x07\n\x03GTE\x10\x01\x12\x06\n\x02LT\x10\x02\x12\x07\n\x03LTE\x10\x03\x32\xad\x01\n\x0eMetadataReader\x12N\n\rQueryMetadata\x12\x1c.chroma.QueryMetadataRequest\x1a\x1d.chroma.QueryMetadataResponse\"\x00\x12K\n\x0c\x43ountRecords\x12\x1b.chroma.CountRecordsRequest\x1a\x1c.chroma.CountRecordsResponse\"\x00\x32\xa2\x01\n\x0cVectorReader\x12\x45\n\nGetVectors\x12\x19.chroma.GetVectorsRequest\x1a\x1a.chroma.GetVectorsResponse\"\x00\x12K\n\x0cQueryVectors\x12\x1b.chroma.QueryVectorsRequest\x1a\x1c.chroma.QueryVectorsResponse\"\x00\x42:Z8github.com/chroma-core/chroma/go/pkg/proto/coordinatorpbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,22 +26,22 @@ _globals['_SEGMENT_FILEPATHSENTRY']._serialized_options = b'8\001' _globals['_UPDATEMETADATA_METADATAENTRY']._loaded_options = None _globals['_UPDATEMETADATA_METADATAENTRY']._serialized_options = b'8\001' - _globals['_OPERATION']._serialized_start=3839 - _globals['_OPERATION']._serialized_end=3895 - _globals['_SCALARENCODING']._serialized_start=3897 - _globals['_SCALARENCODING']._serialized_end=3937 - _globals['_SEGMENTSCOPE']._serialized_start=3939 - _globals['_SEGMENTSCOPE']._serialized_end=4003 - _globals['_WHEREDOCUMENTOPERATOR']._serialized_start=4005 - _globals['_WHEREDOCUMENTOPERATOR']._serialized_end=4060 - _globals['_BOOLEANOPERATOR']._serialized_start=4062 - _globals['_BOOLEANOPERATOR']._serialized_end=4096 - _globals['_LISTOPERATOR']._serialized_start=4098 - _globals['_LISTOPERATOR']._serialized_end=4129 - _globals['_GENERICCOMPARATOR']._serialized_start=4131 - _globals['_GENERICCOMPARATOR']._serialized_end=4166 - _globals['_NUMBERCOMPARATOR']._serialized_start=4168 - _globals['_NUMBERCOMPARATOR']._serialized_end=4220 + _globals['_OPERATION']._serialized_start=4148 + _globals['_OPERATION']._serialized_end=4204 + _globals['_SCALARENCODING']._serialized_start=4206 + _globals['_SCALARENCODING']._serialized_end=4246 + _globals['_SEGMENTSCOPE']._serialized_start=4248 + _globals['_SEGMENTSCOPE']._serialized_end=4312 + _globals['_WHEREDOCUMENTOPERATOR']._serialized_start=4314 + _globals['_WHEREDOCUMENTOPERATOR']._serialized_end=4369 + _globals['_BOOLEANOPERATOR']._serialized_start=4371 + _globals['_BOOLEANOPERATOR']._serialized_end=4405 + _globals['_LISTOPERATOR']._serialized_start=4407 + _globals['_LISTOPERATOR']._serialized_end=4438 + _globals['_GENERICCOMPARATOR']._serialized_start=4440 + _globals['_GENERICCOMPARATOR']._serialized_end=4475 + _globals['_NUMBERCOMPARATOR']._serialized_start=4477 + _globals['_NUMBERCOMPARATOR']._serialized_end=4529 _globals['_STATUS']._serialized_start=39 _globals['_STATUS']._serialized_end=77 _globals['_VECTOR']._serialized_start=79 @@ -59,63 +59,67 @@ _globals['_TENANT']._serialized_start=756 _globals['_TENANT']._serialized_end=778 _globals['_UPDATEMETADATAVALUE']._serialized_start=780 - _globals['_UPDATEMETADATAVALUE']._serialized_end=878 - _globals['_UPDATEMETADATA']._serialized_start=881 - _globals['_UPDATEMETADATA']._serialized_end=1031 - _globals['_UPDATEMETADATA_METADATAENTRY']._serialized_start=955 - _globals['_UPDATEMETADATA_METADATAENTRY']._serialized_end=1031 - _globals['_OPERATIONRECORD']._serialized_start=1034 - _globals['_OPERATIONRECORD']._serialized_end=1209 - _globals['_COUNTRECORDSREQUEST']._serialized_start=1211 - _globals['_COUNTRECORDSREQUEST']._serialized_end=1252 - _globals['_COUNTRECORDSRESPONSE']._serialized_start=1254 - _globals['_COUNTRECORDSRESPONSE']._serialized_end=1291 - _globals['_QUERYMETADATAREQUEST']._serialized_start=1294 - _globals['_QUERYMETADATAREQUEST']._serialized_end=1488 - _globals['_QUERYMETADATARESPONSE']._serialized_start=1490 - _globals['_QUERYMETADATARESPONSE']._serialized_end=1563 - _globals['_METADATAEMBEDDINGRECORD']._serialized_start=1565 - _globals['_METADATAEMBEDDINGRECORD']._serialized_end=1644 - _globals['_WHEREDOCUMENT']._serialized_start=1647 - _globals['_WHEREDOCUMENT']._serialized_end=1778 - _globals['_DIRECTWHEREDOCUMENT']._serialized_start=1780 - _globals['_DIRECTWHEREDOCUMENT']._serialized_end=1868 - _globals['_WHEREDOCUMENTCHILDREN']._serialized_start=1870 - _globals['_WHEREDOCUMENTCHILDREN']._serialized_end=1977 - _globals['_WHERE']._serialized_start=1979 - _globals['_WHERE']._serialized_end=2093 - _globals['_DIRECTCOMPARISON']._serialized_start=2096 - _globals['_DIRECTCOMPARISON']._serialized_end=2507 - _globals['_WHERECHILDREN']._serialized_start=2509 - _globals['_WHERECHILDREN']._serialized_end=2600 - _globals['_STRINGLISTCOMPARISON']._serialized_start=2602 - _globals['_STRINGLISTCOMPARISON']._serialized_end=2685 - _globals['_SINGLESTRINGCOMPARISON']._serialized_start=2687 - _globals['_SINGLESTRINGCOMPARISON']._serialized_end=2773 - _globals['_INTLISTCOMPARISON']._serialized_start=2775 - _globals['_INTLISTCOMPARISON']._serialized_end=2855 - _globals['_SINGLEINTCOMPARISON']._serialized_start=2858 - _globals['_SINGLEINTCOMPARISON']._serialized_end=3020 - _globals['_DOUBLELISTCOMPARISON']._serialized_start=3022 - _globals['_DOUBLELISTCOMPARISON']._serialized_end=3105 - _globals['_SINGLEDOUBLECOMPARISON']._serialized_start=3108 - _globals['_SINGLEDOUBLECOMPARISON']._serialized_end=3273 - _globals['_GETVECTORSREQUEST']._serialized_start=3275 - _globals['_GETVECTORSREQUEST']._serialized_end=3327 - _globals['_GETVECTORSRESPONSE']._serialized_start=3329 - _globals['_GETVECTORSRESPONSE']._serialized_end=3397 - _globals['_VECTOREMBEDDINGRECORD']._serialized_start=3399 - _globals['_VECTOREMBEDDINGRECORD']._serialized_end=3466 - _globals['_QUERYVECTORSREQUEST']._serialized_start=3469 - _globals['_QUERYVECTORSREQUEST']._serialized_end=3603 - _globals['_QUERYVECTORSRESPONSE']._serialized_start=3605 - _globals['_QUERYVECTORSRESPONSE']._serialized_end=3672 - _globals['_VECTORQUERYRESULTS']._serialized_start=3674 - _globals['_VECTORQUERYRESULTS']._serialized_end=3738 - _globals['_VECTORQUERYRESULT']._serialized_start=3740 - _globals['_VECTORQUERYRESULT']._serialized_end=3837 - _globals['_METADATAREADER']._serialized_start=4223 - _globals['_METADATAREADER']._serialized_end=4396 - _globals['_VECTORREADER']._serialized_start=4399 - _globals['_VECTORREADER']._serialized_end=4561 + _globals['_UPDATEMETADATAVALUE']._serialized_end=900 + _globals['_UPDATEMETADATA']._serialized_start=903 + _globals['_UPDATEMETADATA']._serialized_end=1053 + _globals['_UPDATEMETADATA_METADATAENTRY']._serialized_start=977 + _globals['_UPDATEMETADATA_METADATAENTRY']._serialized_end=1053 + _globals['_OPERATIONRECORD']._serialized_start=1056 + _globals['_OPERATIONRECORD']._serialized_end=1231 + _globals['_COUNTRECORDSREQUEST']._serialized_start=1233 + _globals['_COUNTRECORDSREQUEST']._serialized_end=1274 + _globals['_COUNTRECORDSRESPONSE']._serialized_start=1276 + _globals['_COUNTRECORDSRESPONSE']._serialized_end=1313 + _globals['_QUERYMETADATAREQUEST']._serialized_start=1316 + _globals['_QUERYMETADATAREQUEST']._serialized_end=1510 + _globals['_QUERYMETADATARESPONSE']._serialized_start=1512 + _globals['_QUERYMETADATARESPONSE']._serialized_end=1585 + _globals['_METADATAEMBEDDINGRECORD']._serialized_start=1587 + _globals['_METADATAEMBEDDINGRECORD']._serialized_end=1666 + _globals['_WHEREDOCUMENT']._serialized_start=1669 + _globals['_WHEREDOCUMENT']._serialized_end=1800 + _globals['_DIRECTWHEREDOCUMENT']._serialized_start=1802 + _globals['_DIRECTWHEREDOCUMENT']._serialized_end=1890 + _globals['_WHEREDOCUMENTCHILDREN']._serialized_start=1892 + _globals['_WHEREDOCUMENTCHILDREN']._serialized_end=1999 + _globals['_WHERE']._serialized_start=2001 + _globals['_WHERE']._serialized_end=2115 + _globals['_DIRECTCOMPARISON']._serialized_start=2118 + _globals['_DIRECTCOMPARISON']._serialized_end=2647 + _globals['_WHERECHILDREN']._serialized_start=2649 + _globals['_WHERECHILDREN']._serialized_end=2740 + _globals['_STRINGLISTCOMPARISON']._serialized_start=2742 + _globals['_STRINGLISTCOMPARISON']._serialized_end=2825 + _globals['_SINGLESTRINGCOMPARISON']._serialized_start=2827 + _globals['_SINGLESTRINGCOMPARISON']._serialized_end=2913 + _globals['_SINGLEBOOLCOMPARISON']._serialized_start=2915 + _globals['_SINGLEBOOLCOMPARISON']._serialized_end=2999 + _globals['_INTLISTCOMPARISON']._serialized_start=3001 + _globals['_INTLISTCOMPARISON']._serialized_end=3081 + _globals['_SINGLEINTCOMPARISON']._serialized_start=3084 + _globals['_SINGLEINTCOMPARISON']._serialized_end=3246 + _globals['_DOUBLELISTCOMPARISON']._serialized_start=3248 + _globals['_DOUBLELISTCOMPARISON']._serialized_end=3331 + _globals['_BOOLLISTCOMPARISON']._serialized_start=3333 + _globals['_BOOLLISTCOMPARISON']._serialized_end=3414 + _globals['_SINGLEDOUBLECOMPARISON']._serialized_start=3417 + _globals['_SINGLEDOUBLECOMPARISON']._serialized_end=3582 + _globals['_GETVECTORSREQUEST']._serialized_start=3584 + _globals['_GETVECTORSREQUEST']._serialized_end=3636 + _globals['_GETVECTORSRESPONSE']._serialized_start=3638 + _globals['_GETVECTORSRESPONSE']._serialized_end=3706 + _globals['_VECTOREMBEDDINGRECORD']._serialized_start=3708 + _globals['_VECTOREMBEDDINGRECORD']._serialized_end=3775 + _globals['_QUERYVECTORSREQUEST']._serialized_start=3778 + _globals['_QUERYVECTORSREQUEST']._serialized_end=3912 + _globals['_QUERYVECTORSRESPONSE']._serialized_start=3914 + _globals['_QUERYVECTORSRESPONSE']._serialized_end=3981 + _globals['_VECTORQUERYRESULTS']._serialized_start=3983 + _globals['_VECTORQUERYRESULTS']._serialized_end=4047 + _globals['_VECTORQUERYRESULT']._serialized_start=4049 + _globals['_VECTORQUERYRESULT']._serialized_end=4146 + _globals['_METADATAREADER']._serialized_start=4532 + _globals['_METADATAREADER']._serialized_end=4705 + _globals['_VECTORREADER']._serialized_start=4708 + _globals['_VECTORREADER']._serialized_end=4870 # @@protoc_insertion_point(module_scope) diff --git a/chromadb/proto/chroma_pb2.pyi b/chromadb/proto/chroma_pb2.pyi index ed2c06289b6..d20bb84ce34 100644 --- a/chromadb/proto/chroma_pb2.pyi +++ b/chromadb/proto/chroma_pb2.pyi @@ -158,14 +158,16 @@ class Tenant(_message.Message): def __init__(self, name: _Optional[str] = ...) -> None: ... class UpdateMetadataValue(_message.Message): - __slots__ = ("string_value", "int_value", "float_value") + __slots__ = ("string_value", "int_value", "float_value", "bool_value") STRING_VALUE_FIELD_NUMBER: _ClassVar[int] INT_VALUE_FIELD_NUMBER: _ClassVar[int] FLOAT_VALUE_FIELD_NUMBER: _ClassVar[int] + BOOL_VALUE_FIELD_NUMBER: _ClassVar[int] string_value: str int_value: int float_value: float - def __init__(self, string_value: _Optional[str] = ..., int_value: _Optional[int] = ..., float_value: _Optional[float] = ...) -> None: ... + bool_value: bool + def __init__(self, string_value: _Optional[str] = ..., int_value: _Optional[int] = ..., float_value: _Optional[float] = ..., bool_value: bool = ...) -> None: ... class UpdateMetadata(_message.Message): __slots__ = ("metadata",) @@ -267,7 +269,7 @@ class Where(_message.Message): def __init__(self, direct_comparison: _Optional[_Union[DirectComparison, _Mapping]] = ..., children: _Optional[_Union[WhereChildren, _Mapping]] = ...) -> None: ... class DirectComparison(_message.Message): - __slots__ = ("key", "single_string_operand", "string_list_operand", "single_int_operand", "int_list_operand", "single_double_operand", "double_list_operand") + __slots__ = ("key", "single_string_operand", "string_list_operand", "single_int_operand", "int_list_operand", "single_double_operand", "double_list_operand", "bool_list_operand", "single_bool_operand") KEY_FIELD_NUMBER: _ClassVar[int] SINGLE_STRING_OPERAND_FIELD_NUMBER: _ClassVar[int] STRING_LIST_OPERAND_FIELD_NUMBER: _ClassVar[int] @@ -275,6 +277,8 @@ class DirectComparison(_message.Message): INT_LIST_OPERAND_FIELD_NUMBER: _ClassVar[int] SINGLE_DOUBLE_OPERAND_FIELD_NUMBER: _ClassVar[int] DOUBLE_LIST_OPERAND_FIELD_NUMBER: _ClassVar[int] + BOOL_LIST_OPERAND_FIELD_NUMBER: _ClassVar[int] + SINGLE_BOOL_OPERAND_FIELD_NUMBER: _ClassVar[int] key: str single_string_operand: SingleStringComparison string_list_operand: StringListComparison @@ -282,7 +286,9 @@ class DirectComparison(_message.Message): int_list_operand: IntListComparison single_double_operand: SingleDoubleComparison double_list_operand: DoubleListComparison - def __init__(self, key: _Optional[str] = ..., single_string_operand: _Optional[_Union[SingleStringComparison, _Mapping]] = ..., string_list_operand: _Optional[_Union[StringListComparison, _Mapping]] = ..., single_int_operand: _Optional[_Union[SingleIntComparison, _Mapping]] = ..., int_list_operand: _Optional[_Union[IntListComparison, _Mapping]] = ..., single_double_operand: _Optional[_Union[SingleDoubleComparison, _Mapping]] = ..., double_list_operand: _Optional[_Union[DoubleListComparison, _Mapping]] = ...) -> None: ... + bool_list_operand: BoolListComparison + single_bool_operand: SingleBoolComparison + def __init__(self, key: _Optional[str] = ..., single_string_operand: _Optional[_Union[SingleStringComparison, _Mapping]] = ..., string_list_operand: _Optional[_Union[StringListComparison, _Mapping]] = ..., single_int_operand: _Optional[_Union[SingleIntComparison, _Mapping]] = ..., int_list_operand: _Optional[_Union[IntListComparison, _Mapping]] = ..., single_double_operand: _Optional[_Union[SingleDoubleComparison, _Mapping]] = ..., double_list_operand: _Optional[_Union[DoubleListComparison, _Mapping]] = ..., bool_list_operand: _Optional[_Union[BoolListComparison, _Mapping]] = ..., single_bool_operand: _Optional[_Union[SingleBoolComparison, _Mapping]] = ...) -> None: ... class WhereChildren(_message.Message): __slots__ = ("children", "operator") @@ -308,6 +314,14 @@ class SingleStringComparison(_message.Message): comparator: GenericComparator def __init__(self, value: _Optional[str] = ..., comparator: _Optional[_Union[GenericComparator, str]] = ...) -> None: ... +class SingleBoolComparison(_message.Message): + __slots__ = ("value", "comparator") + VALUE_FIELD_NUMBER: _ClassVar[int] + COMPARATOR_FIELD_NUMBER: _ClassVar[int] + value: bool + comparator: GenericComparator + def __init__(self, value: bool = ..., comparator: _Optional[_Union[GenericComparator, str]] = ...) -> None: ... + class IntListComparison(_message.Message): __slots__ = ("values", "list_operator") VALUES_FIELD_NUMBER: _ClassVar[int] @@ -334,6 +348,14 @@ class DoubleListComparison(_message.Message): list_operator: ListOperator def __init__(self, values: _Optional[_Iterable[float]] = ..., list_operator: _Optional[_Union[ListOperator, str]] = ...) -> None: ... +class BoolListComparison(_message.Message): + __slots__ = ("values", "list_operator") + VALUES_FIELD_NUMBER: _ClassVar[int] + LIST_OPERATOR_FIELD_NUMBER: _ClassVar[int] + values: _containers.RepeatedScalarFieldContainer[bool] + list_operator: ListOperator + def __init__(self, values: _Optional[_Iterable[bool]] = ..., list_operator: _Optional[_Union[ListOperator, str]] = ...) -> None: ... + class SingleDoubleComparison(_message.Message): __slots__ = ("value", "generic_comparator", "number_comparator") VALUE_FIELD_NUMBER: _ClassVar[int] diff --git a/chromadb/proto/convert.py b/chromadb/proto/convert.py index 980986af8fc..b52296e546c 100644 --- a/chromadb/proto/convert.py +++ b/chromadb/proto/convert.py @@ -87,9 +87,11 @@ def _from_proto_metadata_handle_none( ) -> Optional[Union[UpdateMetadata, Metadata]]: if not metadata.metadata: return None - out_metadata: Dict[str, Union[str, int, float, None]] = {} + out_metadata: Dict[str, Union[str, int, float, bool, None]] = {} for key, value in metadata.metadata.items(): - if value.HasField("string_value"): + if value.HasField("bool_value"): + out_metadata[key] = value.bool_value + elif value.HasField("string_value"): out_metadata[key] = value.string_value elif value.HasField("int_value"): out_metadata[key] = value.int_value @@ -174,9 +176,14 @@ def to_proto_segment_scope(segment_scope: SegmentScope) -> proto.SegmentScope: def to_proto_metadata_update_value( - value: Union[str, int, float, None] + value: Union[str, int, float, bool, None] ) -> proto.UpdateMetadataValue: - if isinstance(value, str): + # Be careful with the order here. Since bools are a subtype of int in python, + # isinstance(value, bool) and isinstance(value, int) both return true + # for a value of bool type. + if isinstance(value, bool): + return proto.UpdateMetadataValue(bool_value=value) + elif isinstance(value, str): return proto.UpdateMetadataValue(string_value=value) elif isinstance(value, int): return proto.UpdateMetadataValue(int_value=value) diff --git a/chromadb/segment/impl/metadata/grpc_segment.py b/chromadb/segment/impl/metadata/grpc_segment.py index 30239a2723b..09b99c4b8e4 100644 --- a/chromadb/segment/impl/metadata/grpc_segment.py +++ b/chromadb/segment/impl/metadata/grpc_segment.py @@ -76,10 +76,12 @@ def get_metadata( request: pb.QueryMetadataRequest = pb.QueryMetadataRequest( segment_id=self._segment["id"].hex, - where=self._where_to_proto(where) if where is not None else None, + where=self._where_to_proto(where) + if where is not None and len(where) > 0 + else None, where_document=( self._where_document_to_proto(where_document) - if where_document is not None + if where_document is not None and len(where_document) > 0 else None ), ids=ids, @@ -144,6 +146,11 @@ def _where_to_proto(self, where: Optional[Where]) -> pb.Where: ssc.value = value ssc.comparator = pb.GenericComparator.EQ dc.single_string_operand.CopyFrom(ssc) + elif type(value) is bool: + sbc = pb.SingleBoolComparison() + sbc.value = value + sbc.comparator = pb.GenericComparator.EQ + dc.single_bool_operand.CopyFrom(sbc) elif type(value) is int: sic = pb.SingleIntComparison() sic.value = value @@ -183,6 +190,12 @@ def _where_to_proto(self, where: Optional[Where]) -> pb.Where: slo.values.extend([x]) # type: ignore slo.list_operator = list_operator dc.string_list_operand.CopyFrom(slo) + elif type(operand[0]) is bool: + blo = pb.BoolListComparison() + for x in operand: + blo.values.extend([x]) # type: ignore + blo.list_operator = list_operator + dc.bool_list_operand.CopyFrom(blo) elif type(operand[0]) is int: ilo = pb.IntListComparison() for x in operand: @@ -213,6 +226,18 @@ def _where_to_proto(self, where: Optional[Where]) -> pb.Where: f"Expected where operator to be $eq or $ne, got {operator}" ) dc.single_string_operand.CopyFrom(ssc) + elif type(operand) is bool: + sbc = pb.SingleBoolComparison() + sbc.value = operand + if operator == "$eq": + sbc.comparator = pb.GenericComparator.EQ + elif operator == "$ne": + sbc.comparator = pb.GenericComparator.NE + else: + raise ValueError( + f"Expected where operator to be $eq or $ne, got {operator}" + ) + dc.single_bool_operand.CopyFrom(sbc) elif type(operand) is int: sic = pb.SingleIntComparison() sic.value = operand @@ -316,10 +341,12 @@ def _where_document_to_proto( def _from_proto( self, record: pb.MetadataEmbeddingRecord ) -> MetadataEmbeddingRecord: - translated_metadata: Dict[str, str | int | float] = {} + translated_metadata: Dict[str, str | int | float | bool] = {} record_metadata_map = record.metadata.metadata for key, value in record_metadata_map.items(): - if value.HasField("string_value"): + if value.HasField("bool_value"): + translated_metadata[key] = value.bool_value + elif value.HasField("string_value"): translated_metadata[key] = value.string_value elif value.HasField("int_value"): translated_metadata[key] = value.int_value diff --git a/chromadb/test/conftest.py b/chromadb/test/conftest.py index 627e9b3e53e..4e66f9ba16c 100644 --- a/chromadb/test/conftest.py +++ b/chromadb/test/conftest.py @@ -65,6 +65,12 @@ hypothesis.settings.load_profile(CURRENT_PRESET) +def reset(api: ServerAPI) -> None: + api.reset() + if not NOT_CLUSTER_ONLY: + time.sleep(MEMBERLIST_SLEEP) + + def override_hypothesis_profile( fast: Optional[hypothesis.settings] = None, normal: Optional[hypothesis.settings] = None, diff --git a/chromadb/test/property/strategies.py b/chromadb/test/property/strategies.py index 79f7a1fd326..64895779b2b 100644 --- a/chromadb/test/property/strategies.py +++ b/chromadb/test/property/strategies.py @@ -11,6 +11,7 @@ from hypothesis.strategies._internal.strategies import SearchStrategy from hypothesis.errors import InvalidDefinition from hypothesis.stateful import RuleBasedStateMachine +from chromadb.test.conftest import NOT_CLUSTER_ONLY from dataclasses import dataclass @@ -112,10 +113,13 @@ class Record(TypedDict): safe_integers = st.integers( min_value=-(2**31), max_value=2**31 - 1 ) # TODO: handle longs +# In distributed chroma, floats are 32 bit hence we need to +# restrict the generation to generate only 32 bit floats. safe_floats = st.floats( allow_infinity=False, allow_nan=False, allow_subnormal=False, + width=32, min_value=-1e6, max_value=1e6, ) # TODO: handle infinity and NAN @@ -523,12 +527,21 @@ def where_clause(draw: st.DrawFn, collection: Collection) -> types.Where: key = draw(st.sampled_from(known_keys)) value = collection.known_metadata_keys[key] - legal_ops: List[Optional[str]] = [None, "$eq", "$ne", "$in", "$nin"] + # This is hacky, but the distributed system does not support $in or $in so we + # need to avoid generating these operators for now in that case. + # TODO: Remove this once the distributed system supports $in and $nin + if not NOT_CLUSTER_ONLY: + legal_ops: List[Optional[str]] = [None, "$eq"] + else: + legal_ops: List[Optional[str]] = [None, "$eq", "$ne", "$in", "$nin"] + if not isinstance(value, str) and not isinstance(value, bool): legal_ops.extend(["$gt", "$lt", "$lte", "$gte"]) if isinstance(value, float): # Add or subtract a small number to avoid floating point rounding errors value = value + draw(st.sampled_from([1e-6, -1e-6])) + # Truncate to 32 bit + value = float(np.float32(value)) op: WhereOperator = draw(st.sampled_from(legal_ops)) @@ -554,7 +567,15 @@ def where_doc_clause(draw: st.DrawFn, collection: Collection) -> types.WhereDocu else: word = draw(safe_text) - op: WhereOperator = draw(st.sampled_from(["$contains", "$not_contains"])) + # This is hacky, but the distributed system does not support $not_contains + # so we need to avoid generating these operators for now in that case. + # TODO: Remove this once the distributed system supports $not_contains + op: WhereOperator + if not NOT_CLUSTER_ONLY: + op = draw(st.sampled_from(["$contains"])) + else: + op = draw(st.sampled_from(["$contains", "$not_contains"])) + if op == "$contains": return {"$contains": word} else: diff --git a/chromadb/test/property/test_add.py b/chromadb/test/property/test_add.py index 545bd6da61f..1715e400e1a 100644 --- a/chromadb/test/property/test_add.py +++ b/chromadb/test/property/test_add.py @@ -4,13 +4,12 @@ from typing import cast, List, Any, Dict import hypothesis import pytest -import time import hypothesis.strategies as st from hypothesis import given, settings from chromadb.api import ServerAPI from chromadb.api.types import Embeddings, Metadatas from chromadb.test.conftest import ( - MEMBERLIST_SLEEP, + reset, NOT_CLUSTER_ONLY, override_hypothesis_profile, ) @@ -23,12 +22,6 @@ collection_st = st.shared(strategies.collections(with_hnsw_params=True), key="coll") -def reset(api: ServerAPI) -> None: - api.reset() - if not NOT_CLUSTER_ONLY: - time.sleep(MEMBERLIST_SLEEP) - - @given( collection=collection_st, record_set=strategies.recordsets(collection_st), diff --git a/chromadb/test/property/test_filtering.py b/chromadb/test/property/test_filtering.py index 2826caf12eb..c48c2daeca1 100644 --- a/chromadb/test/property/test_filtering.py +++ b/chromadb/test/property/test_filtering.py @@ -14,6 +14,7 @@ Where, WhereDocument, ) +from chromadb.test.conftest import reset, NOT_CLUSTER_ONLY import chromadb.test.property.strategies as strategies import hypothesis.strategies as st import logging @@ -182,7 +183,7 @@ def test_filterable_metadata_get( ) -> None: caplog.set_level(logging.ERROR) - api.reset() + reset(api) coll = api.create_collection( name=collection.name, metadata=collection.metadata, # type: ignore @@ -225,7 +226,12 @@ def test_filterable_metadata_get_limit_offset( ) -> None: caplog.set_level(logging.ERROR) - api.reset() + # The distributed system does not support limit/offset yet + # so we skip this test for now if the system is distributed + if not NOT_CLUSTER_ONLY: + pytest.skip("Distributed system does not support limit/offset yet") + + reset(api) coll = api.create_collection( name=collection.name, metadata=collection.metadata, # type: ignore @@ -270,7 +276,7 @@ def test_filterable_metadata_query( ) -> None: caplog.set_level(logging.ERROR) - api.reset() + reset(api) coll = api.create_collection( name=collection.name, metadata=collection.metadata, # type: ignore @@ -318,7 +324,7 @@ def test_filterable_metadata_query( def test_empty_filter(api: ServerAPI) -> None: """Test that a filter where no document matches returns an empty result""" - api.reset() + reset(api) coll = api.create_collection(name="test") test_ids: IDs = ["1", "2", "3"] @@ -354,7 +360,7 @@ def test_empty_filter(api: ServerAPI) -> None: def test_boolean_metadata(api: ServerAPI) -> None: """Test that metadata with boolean values is correctly filtered""" - api.reset() + reset(api) coll = api.create_collection(name="test") test_ids: IDs = ["1", "2", "3"] @@ -371,7 +377,7 @@ def test_boolean_metadata(api: ServerAPI) -> None: def test_get_empty(api: ServerAPI) -> None: """Tests that calling get() with empty filters returns nothing""" - api.reset() + reset(api) coll = api.create_collection(name="test") test_ids: IDs = ["1", "2", "3"] diff --git a/go/migrations/20240612201006.sql b/go/migrations/20240612201006.sql new file mode 100644 index 00000000000..af8b088cd5d --- /dev/null +++ b/go/migrations/20240612201006.sql @@ -0,0 +1,3 @@ +ALTER TABLE "collection_metadata" ADD COLUMN "bool_value" boolean; + +ALTER TABLE "segment_metadata" ADD COLUMN "bool_value" boolean; diff --git a/go/migrations/atlas.sum b/go/migrations/atlas.sum index 401f35d0560..55f4b104d7c 100644 --- a/go/migrations/atlas.sum +++ b/go/migrations/atlas.sum @@ -1,6 +1,7 @@ -h1:0fWoYRU+wWRTteHvXVV8mOc+AJYEJzDFuH4c5hLWKR0= +h1:CsoDoWqXz2qHAuzPY28ZAOCbI+DJB22UbbBtu2djeMI= 20240313233558.sql h1:Gv0TiSYsqGoOZ2T2IWvX4BOasauxool8PrBOIjmmIdg= 20240321194713.sql h1:kVkNpqSFhrXGVGFFvL7JdK3Bw31twFcEhI6A0oCFCkg= 20240327075032.sql h1:nlr2J74XRU8erzHnKJgMr/tKqJxw9+R6RiiEBuvuzgo= 20240327172649.sql h1:UUGo6AzWXKLcpYVd5qH6Hv9jpHNV86z42o6ft5OR0zU= 20240411201006.sql h1:jjzYJPzDVTxQAvOI7gRtNTiZJHy1Hpw5urP8EzqxgUk= +20240612201006.sql h1:vUuh/O0blyoOYS+YEjo6/zqRmwtoaleNEUqKCAecxKU= diff --git a/go/pkg/coordinator/grpc/proto_model_convert.go b/go/pkg/coordinator/grpc/proto_model_convert.go index cc7fbb12fcb..9fee59bbd37 100644 --- a/go/pkg/coordinator/grpc/proto_model_convert.go +++ b/go/pkg/coordinator/grpc/proto_model_convert.go @@ -17,6 +17,8 @@ func convertCollectionMetadataToModel(collectionMetadata *coordinatorpb.UpdateMe metadata := model.NewCollectionMetadata[model.CollectionMetadataValueType]() for key, value := range collectionMetadata.Metadata { switch v := (value.Value).(type) { + case *coordinatorpb.UpdateMetadataValue_BoolValue: + metadata.Add(key, &model.CollectionMetadataValueBoolType{Value: v.BoolValue}) case *coordinatorpb.UpdateMetadataValue_StringValue: metadata.Add(key, &model.CollectionMetadataValueStringType{Value: v.StringValue}) case *coordinatorpb.UpdateMetadataValue_IntValue: @@ -64,6 +66,12 @@ func convertCollectionMetadataToProto(collectionMetadata *model.CollectionMetada } for key, value := range collectionMetadata.Metadata { switch v := (value).(type) { + case *model.CollectionMetadataValueBoolType: + metadatapb.Metadata[key] = &coordinatorpb.UpdateMetadataValue{ + Value: &coordinatorpb.UpdateMetadataValue_BoolValue{ + BoolValue: v.Value, + }, + } case *model.CollectionMetadataValueStringType: metadatapb.Metadata[key] = &coordinatorpb.UpdateMetadataValue{ Value: &coordinatorpb.UpdateMetadataValue_StringValue{ @@ -126,6 +134,8 @@ func convertSegmentMetadataToModel(segmentMetadata *coordinatorpb.UpdateMetadata continue } switch v := (value.Value).(type) { + case *coordinatorpb.UpdateMetadataValue_BoolValue: + metadata.Set(key, &model.SegmentMetadataValueBoolType{Value: v.BoolValue}) case *coordinatorpb.UpdateMetadataValue_StringValue: metadata.Set(key, &model.SegmentMetadataValueStringType{Value: v.StringValue}) case *coordinatorpb.UpdateMetadataValue_IntValue: @@ -184,6 +194,10 @@ func convertSegmentMetadataToProto(segmentMetadata *model.SegmentMetadata[model. for key, value := range segmentMetadata.Metadata { switch v := value.(type) { + case *model.SegmentMetadataValueBoolType: + metadatapb.Metadata[key] = &coordinatorpb.UpdateMetadataValue{ + Value: &coordinatorpb.UpdateMetadataValue_BoolValue{BoolValue: v.Value}, + } case *model.SegmentMetadataValueStringType: metadatapb.Metadata[key] = &coordinatorpb.UpdateMetadataValue{ Value: &coordinatorpb.UpdateMetadataValue_StringValue{StringValue: v.Value}, diff --git a/go/pkg/metastore/coordinator/model_db_convert.go b/go/pkg/metastore/coordinator/model_db_convert.go index 7c57feb896d..07ca8c5dfa5 100644 --- a/go/pkg/metastore/coordinator/model_db_convert.go +++ b/go/pkg/metastore/coordinator/model_db_convert.go @@ -40,6 +40,8 @@ func convertCollectionMetadataToModel(collectionMetadataList []*dbmodel.Collecti for _, collectionMetadata := range collectionMetadataList { if collectionMetadata.Key != nil { switch { + case collectionMetadata.BoolValue != nil: + metadata.Add(*collectionMetadata.Key, &model.CollectionMetadataValueBoolType{Value: *collectionMetadata.BoolValue}) case collectionMetadata.StrValue != nil: metadata.Add(*collectionMetadata.Key, &model.CollectionMetadataValueStringType{Value: *collectionMetadata.StrValue}) case collectionMetadata.IntValue != nil: @@ -72,6 +74,8 @@ func convertCollectionMetadataToDB(collectionID string, metadata *model.Collecti Key: &keyCopy, } switch v := (value).(type) { + case *model.CollectionMetadataValueBoolType: + dbCollectionMetadata.BoolValue = &v.Value case *model.CollectionMetadataValueStringType: dbCollectionMetadata.StrValue = &v.Value case *model.CollectionMetadataValueInt64Type: @@ -120,6 +124,8 @@ func convertSegmentMetadataToModel(segmentMetadataList []*dbmodel.SegmentMetadat for _, segmentMetadata := range segmentMetadataList { if segmentMetadata.Key != nil { switch { + case segmentMetadata.BoolValue != nil: + metadata.Set(*segmentMetadata.Key, &model.SegmentMetadataValueBoolType{Value: *segmentMetadata.BoolValue}) case segmentMetadata.StrValue != nil: metadata.Set(*segmentMetadata.Key, &model.SegmentMetadataValueStringType{Value: *segmentMetadata.StrValue}) case segmentMetadata.IntValue != nil: @@ -151,6 +157,8 @@ func convertSegmentMetadataToDB(segmentID string, metadata *model.SegmentMetadat Key: &keyCopy, } switch v := (value).(type) { + case *model.SegmentMetadataValueBoolType: + dbSegmentMetadata.BoolValue = &v.Value case *model.SegmentMetadataValueStringType: dbSegmentMetadata.StrValue = &v.Value case *model.SegmentMetadataValueInt64Type: diff --git a/go/pkg/metastore/db/dao/collection_metadata.go b/go/pkg/metastore/db/dao/collection_metadata.go index 38eb70b4cc6..9fa5bd1bdd4 100644 --- a/go/pkg/metastore/db/dao/collection_metadata.go +++ b/go/pkg/metastore/db/dao/collection_metadata.go @@ -28,6 +28,6 @@ func (s *collectionMetadataDb) DeleteByCollectionID(collectionID string) (int, e func (s *collectionMetadataDb) Insert(in []*dbmodel.CollectionMetadata) error { return s.db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "collection_id"}, {Name: "key"}}, - DoUpdates: clause.AssignmentColumns([]string{"str_value", "int_value", "float_value"}), + DoUpdates: clause.AssignmentColumns([]string{"str_value", "int_value", "float_value", "bool_value"}), }).Create(in).Error } diff --git a/go/pkg/metastore/db/dao/segment.go b/go/pkg/metastore/db/dao/segment.go index 670cddb8267..65a8486d05f 100644 --- a/go/pkg/metastore/db/dao/segment.go +++ b/go/pkg/metastore/db/dao/segment.go @@ -56,7 +56,7 @@ func (s *segmentDb) GetSegments(id types.UniqueID, segmentType *string, scope *s var segments []*dbmodel.SegmentAndMetadata query := s.db.Table("segments"). - Select("segments.id, segments.collection_id, segments.type, segments.scope, segments.file_paths, segment_metadata.key, segment_metadata.str_value, segment_metadata.int_value, segment_metadata.float_value"). + Select("segments.id, segments.collection_id, segments.type, segments.scope, segments.file_paths, segment_metadata.key, segment_metadata.str_value, segment_metadata.int_value, segment_metadata.float_value, segment_metadata.bool_value"). Joins("LEFT JOIN segment_metadata ON segments.id = segment_metadata.segment_id"). Order("segments.id") @@ -95,9 +95,10 @@ func (s *segmentDb) GetSegments(id types.UniqueID, segmentType *string, scope *s strValue sql.NullString intValue sql.NullInt64 floatValue sql.NullFloat64 + boolValue sql.NullBool ) - err := rows.Scan(&segmentID, &collectionID, &segmentType, &scope, &filePathsJson, &key, &strValue, &intValue, &floatValue) + err := rows.Scan(&segmentID, &collectionID, &segmentType, &scope, &filePathsJson, &key, &strValue, &intValue, &floatValue, &boolValue) if err != nil { log.Error("scan segment failed", zap.Error(err)) } @@ -157,6 +158,12 @@ func (s *segmentDb) GetSegments(id types.UniqueID, segmentType *string, scope *s segmentMetadata.FloatValue = nil } + if boolValue.Valid { + segmentMetadata.BoolValue = &boolValue.Bool + } else { + segmentMetadata.BoolValue = nil + } + metadata = append(metadata, segmentMetadata) currentSegment.SegmentMetadata = metadata } diff --git a/go/pkg/metastore/db/dao/segment_metadata.go b/go/pkg/metastore/db/dao/segment_metadata.go index cd4ace0efd8..dd86890a615 100644 --- a/go/pkg/metastore/db/dao/segment_metadata.go +++ b/go/pkg/metastore/db/dao/segment_metadata.go @@ -29,7 +29,7 @@ func (s *segmentMetadataDb) Insert(in []*dbmodel.SegmentMetadata) error { return s.db.Clauses( clause.OnConflict{ Columns: []clause.Column{{Name: "segment_id"}, {Name: "key"}}, - DoUpdates: clause.AssignmentColumns([]string{"str_value", "int_value", "float_value", "ts"}), + DoUpdates: clause.AssignmentColumns([]string{"str_value", "int_value", "float_value", "ts", "bool_value"}), }, ).Create(in).Error } diff --git a/go/pkg/metastore/db/dbmodel/collection_metadata.go b/go/pkg/metastore/db/dbmodel/collection_metadata.go index 6c519a731d1..f8e539f89b0 100644 --- a/go/pkg/metastore/db/dbmodel/collection_metadata.go +++ b/go/pkg/metastore/db/dbmodel/collection_metadata.go @@ -15,6 +15,7 @@ type CollectionMetadata struct { Ts types.Timestamp `gorm:"ts;type:bigint;default:0"` CreatedAt time.Time `gorm:"created_at;type:timestamp;not null;default:current_timestamp"` UpdatedAt time.Time `gorm:"updated_at;type:timestamp;not null;default:current_timestamp"` + BoolValue *bool `gorm:"bool_value"` } func (v CollectionMetadata) TableName() string { diff --git a/go/pkg/metastore/db/dbmodel/segment_metadata.go b/go/pkg/metastore/db/dbmodel/segment_metadata.go index 3d830225716..151f99a9678 100644 --- a/go/pkg/metastore/db/dbmodel/segment_metadata.go +++ b/go/pkg/metastore/db/dbmodel/segment_metadata.go @@ -15,6 +15,7 @@ type SegmentMetadata struct { Ts types.Timestamp `gorm:"ts;type:bigint;default:0"` CreatedAt time.Time `gorm:"created_at;type:timestamp;not null;default:current_timestamp"` UpdatedAt time.Time `gorm:"updated_at;type:timestamp;not null;default:current_timestamp"` + BoolValue *bool `gorm:"bool_value"` } func (SegmentMetadata) TableName() string { diff --git a/go/pkg/model/collection_metadata.go b/go/pkg/model/collection_metadata.go index 9e22d5f276a..e49f2933983 100644 --- a/go/pkg/model/collection_metadata.go +++ b/go/pkg/model/collection_metadata.go @@ -44,6 +44,19 @@ func (s *CollectionMetadataValueFloat64Type) Equals(other CollectionMetadataValu return false } +type CollectionMetadataValueBoolType struct { + Value bool +} + +func (s *CollectionMetadataValueBoolType) IsCollectionMetadataValueType() {} + +func (s *CollectionMetadataValueBoolType) Equals(other CollectionMetadataValueType) bool { + if o, ok := other.(*CollectionMetadataValueBoolType); ok { + return s.Value == o.Value + } + return false +} + type CollectionMetadata[T CollectionMetadataValueType] struct { Metadata map[string]T } diff --git a/go/pkg/model/segment_metadata.go b/go/pkg/model/segment_metadata.go index eda7497063d..40baaf74e17 100644 --- a/go/pkg/model/segment_metadata.go +++ b/go/pkg/model/segment_metadata.go @@ -16,6 +16,12 @@ type SegmentMetadataValueInt64Type struct { func (s *SegmentMetadataValueInt64Type) IsSegmentMetadataValueType() {} +type SegmentMetadataValueBoolType struct { + Value bool +} + +func (s *SegmentMetadataValueBoolType) IsSegmentMetadataValueType() {} + type SegmentMetadataValueFloat64Type struct { Value float64 } diff --git a/go/pkg/proto/coordinatorpb/chroma.pb.go b/go/pkg/proto/coordinatorpb/chroma.pb.go index 669e3c529cb..3dc3631928a 100644 --- a/go/pkg/proto/coordinatorpb/chroma.pb.go +++ b/go/pkg/proto/coordinatorpb/chroma.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 -// protoc v4.23.4 +// protoc-gen-go v1.34.2 +// protoc v5.26.1 // source: chromadb/proto/chroma.proto package coordinatorpb @@ -893,6 +893,7 @@ type UpdateMetadataValue struct { // *UpdateMetadataValue_StringValue // *UpdateMetadataValue_IntValue // *UpdateMetadataValue_FloatValue + // *UpdateMetadataValue_BoolValue Value isUpdateMetadataValue_Value `protobuf_oneof:"value"` } @@ -956,6 +957,13 @@ func (x *UpdateMetadataValue) GetFloatValue() float64 { return 0 } +func (x *UpdateMetadataValue) GetBoolValue() bool { + if x, ok := x.GetValue().(*UpdateMetadataValue_BoolValue); ok { + return x.BoolValue + } + return false +} + type isUpdateMetadataValue_Value interface { isUpdateMetadataValue_Value() } @@ -972,12 +980,18 @@ type UpdateMetadataValue_FloatValue struct { FloatValue float64 `protobuf:"fixed64,3,opt,name=float_value,json=floatValue,proto3,oneof"` } +type UpdateMetadataValue_BoolValue struct { + BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"` +} + func (*UpdateMetadataValue_StringValue) isUpdateMetadataValue_Value() {} func (*UpdateMetadataValue_IntValue) isUpdateMetadataValue_Value() {} func (*UpdateMetadataValue_FloatValue) isUpdateMetadataValue_Value() {} +func (*UpdateMetadataValue_BoolValue) isUpdateMetadataValue_Value() {} + type UpdateMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1097,6 +1111,101 @@ func (x *OperationRecord) GetOperation() Operation { return Operation_ADD } +type CountRecordsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SegmentId string `protobuf:"bytes,1,opt,name=segment_id,json=segmentId,proto3" json:"segment_id,omitempty"` +} + +func (x *CountRecordsRequest) Reset() { + *x = CountRecordsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chromadb_proto_chroma_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountRecordsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountRecordsRequest) ProtoMessage() {} + +func (x *CountRecordsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chromadb_proto_chroma_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountRecordsRequest.ProtoReflect.Descriptor instead. +func (*CountRecordsRequest) Descriptor() ([]byte, []int) { + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{10} +} + +func (x *CountRecordsRequest) GetSegmentId() string { + if x != nil { + return x.SegmentId + } + return "" +} + +// TODO: Add error propagation in the response. +type CountRecordsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *CountRecordsResponse) Reset() { + *x = CountRecordsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chromadb_proto_chroma_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CountRecordsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CountRecordsResponse) ProtoMessage() {} + +func (x *CountRecordsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chromadb_proto_chroma_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CountRecordsResponse.ProtoReflect.Descriptor instead. +func (*CountRecordsResponse) Descriptor() ([]byte, []int) { + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{11} +} + +func (x *CountRecordsResponse) GetCount() uint32 { + if x != nil { + return x.Count + } + return 0 +} + type QueryMetadataRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1113,7 +1222,7 @@ type QueryMetadataRequest struct { func (x *QueryMetadataRequest) Reset() { *x = QueryMetadataRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[10] + mi := &file_chromadb_proto_chroma_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1126,7 +1235,7 @@ func (x *QueryMetadataRequest) String() string { func (*QueryMetadataRequest) ProtoMessage() {} func (x *QueryMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[10] + mi := &file_chromadb_proto_chroma_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1139,7 +1248,7 @@ func (x *QueryMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryMetadataRequest.ProtoReflect.Descriptor instead. func (*QueryMetadataRequest) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{10} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{12} } func (x *QueryMetadataRequest) GetSegmentId() string { @@ -1195,7 +1304,7 @@ type QueryMetadataResponse struct { func (x *QueryMetadataResponse) Reset() { *x = QueryMetadataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[11] + mi := &file_chromadb_proto_chroma_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1208,7 +1317,7 @@ func (x *QueryMetadataResponse) String() string { func (*QueryMetadataResponse) ProtoMessage() {} func (x *QueryMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[11] + mi := &file_chromadb_proto_chroma_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1221,7 +1330,7 @@ func (x *QueryMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryMetadataResponse.ProtoReflect.Descriptor instead. func (*QueryMetadataResponse) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{11} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{13} } func (x *QueryMetadataResponse) GetRecords() []*MetadataEmbeddingRecord { @@ -1243,7 +1352,7 @@ type MetadataEmbeddingRecord struct { func (x *MetadataEmbeddingRecord) Reset() { *x = MetadataEmbeddingRecord{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[12] + mi := &file_chromadb_proto_chroma_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1365,7 @@ func (x *MetadataEmbeddingRecord) String() string { func (*MetadataEmbeddingRecord) ProtoMessage() {} func (x *MetadataEmbeddingRecord) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[12] + mi := &file_chromadb_proto_chroma_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1378,7 @@ func (x *MetadataEmbeddingRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataEmbeddingRecord.ProtoReflect.Descriptor instead. func (*MetadataEmbeddingRecord) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{12} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{14} } func (x *MetadataEmbeddingRecord) GetId() string { @@ -1305,7 +1414,7 @@ type WhereDocument struct { func (x *WhereDocument) Reset() { *x = WhereDocument{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[13] + mi := &file_chromadb_proto_chroma_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1318,7 +1427,7 @@ func (x *WhereDocument) String() string { func (*WhereDocument) ProtoMessage() {} func (x *WhereDocument) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[13] + mi := &file_chromadb_proto_chroma_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1331,7 +1440,7 @@ func (x *WhereDocument) ProtoReflect() protoreflect.Message { // Deprecated: Use WhereDocument.ProtoReflect.Descriptor instead. func (*WhereDocument) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{13} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{15} } func (m *WhereDocument) GetWhereDocument() isWhereDocument_WhereDocument { @@ -1384,7 +1493,7 @@ type DirectWhereDocument struct { func (x *DirectWhereDocument) Reset() { *x = DirectWhereDocument{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[14] + mi := &file_chromadb_proto_chroma_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1397,7 +1506,7 @@ func (x *DirectWhereDocument) String() string { func (*DirectWhereDocument) ProtoMessage() {} func (x *DirectWhereDocument) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[14] + mi := &file_chromadb_proto_chroma_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1410,7 +1519,7 @@ func (x *DirectWhereDocument) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectWhereDocument.ProtoReflect.Descriptor instead. func (*DirectWhereDocument) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{14} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{16} } func (x *DirectWhereDocument) GetDocument() string { @@ -1440,7 +1549,7 @@ type WhereDocumentChildren struct { func (x *WhereDocumentChildren) Reset() { *x = WhereDocumentChildren{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[15] + mi := &file_chromadb_proto_chroma_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1453,7 +1562,7 @@ func (x *WhereDocumentChildren) String() string { func (*WhereDocumentChildren) ProtoMessage() {} func (x *WhereDocumentChildren) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[15] + mi := &file_chromadb_proto_chroma_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1466,7 +1575,7 @@ func (x *WhereDocumentChildren) ProtoReflect() protoreflect.Message { // Deprecated: Use WhereDocumentChildren.ProtoReflect.Descriptor instead. func (*WhereDocumentChildren) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{15} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{17} } func (x *WhereDocumentChildren) GetChildren() []*WhereDocument { @@ -1503,7 +1612,7 @@ type Where struct { func (x *Where) Reset() { *x = Where{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[16] + mi := &file_chromadb_proto_chroma_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1516,7 +1625,7 @@ func (x *Where) String() string { func (*Where) ProtoMessage() {} func (x *Where) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[16] + mi := &file_chromadb_proto_chroma_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1529,7 +1638,7 @@ func (x *Where) ProtoReflect() protoreflect.Message { // Deprecated: Use Where.ProtoReflect.Descriptor instead. func (*Where) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{16} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{18} } func (m *Where) GetWhere() isWhere_Where { @@ -1584,13 +1693,15 @@ type DirectComparison struct { // *DirectComparison_IntListOperand // *DirectComparison_SingleDoubleOperand // *DirectComparison_DoubleListOperand + // *DirectComparison_BoolListOperand + // *DirectComparison_SingleBoolOperand Comparison isDirectComparison_Comparison `protobuf_oneof:"comparison"` } func (x *DirectComparison) Reset() { *x = DirectComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[17] + mi := &file_chromadb_proto_chroma_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1603,7 +1714,7 @@ func (x *DirectComparison) String() string { func (*DirectComparison) ProtoMessage() {} func (x *DirectComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[17] + mi := &file_chromadb_proto_chroma_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1616,7 +1727,7 @@ func (x *DirectComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectComparison.ProtoReflect.Descriptor instead. func (*DirectComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{17} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{19} } func (x *DirectComparison) GetKey() string { @@ -1675,6 +1786,20 @@ func (x *DirectComparison) GetDoubleListOperand() *DoubleListComparison { return nil } +func (x *DirectComparison) GetBoolListOperand() *BoolListComparison { + if x, ok := x.GetComparison().(*DirectComparison_BoolListOperand); ok { + return x.BoolListOperand + } + return nil +} + +func (x *DirectComparison) GetSingleBoolOperand() *SingleBoolComparison { + if x, ok := x.GetComparison().(*DirectComparison_SingleBoolOperand); ok { + return x.SingleBoolOperand + } + return nil +} + type isDirectComparison_Comparison interface { isDirectComparison_Comparison() } @@ -1703,6 +1828,14 @@ type DirectComparison_DoubleListOperand struct { DoubleListOperand *DoubleListComparison `protobuf:"bytes,7,opt,name=double_list_operand,json=doubleListOperand,proto3,oneof"` } +type DirectComparison_BoolListOperand struct { + BoolListOperand *BoolListComparison `protobuf:"bytes,8,opt,name=bool_list_operand,json=boolListOperand,proto3,oneof"` +} + +type DirectComparison_SingleBoolOperand struct { + SingleBoolOperand *SingleBoolComparison `protobuf:"bytes,9,opt,name=single_bool_operand,json=singleBoolOperand,proto3,oneof"` +} + func (*DirectComparison_SingleStringOperand) isDirectComparison_Comparison() {} func (*DirectComparison_StringListOperand) isDirectComparison_Comparison() {} @@ -1715,6 +1848,10 @@ func (*DirectComparison_SingleDoubleOperand) isDirectComparison_Comparison() {} func (*DirectComparison_DoubleListOperand) isDirectComparison_Comparison() {} +func (*DirectComparison_BoolListOperand) isDirectComparison_Comparison() {} + +func (*DirectComparison_SingleBoolOperand) isDirectComparison_Comparison() {} + // A branch-node `Where` clause has a list of children and a specification // for how to combine them. type WhereChildren struct { @@ -1729,7 +1866,7 @@ type WhereChildren struct { func (x *WhereChildren) Reset() { *x = WhereChildren{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[18] + mi := &file_chromadb_proto_chroma_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1742,7 +1879,7 @@ func (x *WhereChildren) String() string { func (*WhereChildren) ProtoMessage() {} func (x *WhereChildren) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[18] + mi := &file_chromadb_proto_chroma_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1755,7 +1892,7 @@ func (x *WhereChildren) ProtoReflect() protoreflect.Message { // Deprecated: Use WhereChildren.ProtoReflect.Descriptor instead. func (*WhereChildren) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{18} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{20} } func (x *WhereChildren) GetChildren() []*Where { @@ -1786,7 +1923,7 @@ type StringListComparison struct { func (x *StringListComparison) Reset() { *x = StringListComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[19] + mi := &file_chromadb_proto_chroma_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1799,7 +1936,7 @@ func (x *StringListComparison) String() string { func (*StringListComparison) ProtoMessage() {} func (x *StringListComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[19] + mi := &file_chromadb_proto_chroma_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1812,7 +1949,7 @@ func (x *StringListComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use StringListComparison.ProtoReflect.Descriptor instead. func (*StringListComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{19} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{21} } func (x *StringListComparison) GetValues() []string { @@ -1842,7 +1979,7 @@ type SingleStringComparison struct { func (x *SingleStringComparison) Reset() { *x = SingleStringComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[20] + mi := &file_chromadb_proto_chroma_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1855,7 +1992,7 @@ func (x *SingleStringComparison) String() string { func (*SingleStringComparison) ProtoMessage() {} func (x *SingleStringComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[20] + mi := &file_chromadb_proto_chroma_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1868,7 +2005,7 @@ func (x *SingleStringComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use SingleStringComparison.ProtoReflect.Descriptor instead. func (*SingleStringComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{20} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{22} } func (x *SingleStringComparison) GetValue() string { @@ -1885,6 +2022,61 @@ func (x *SingleStringComparison) GetComparator() GenericComparator { return GenericComparator_EQ } +type SingleBoolComparison struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + Comparator GenericComparator `protobuf:"varint,2,opt,name=comparator,proto3,enum=chroma.GenericComparator" json:"comparator,omitempty"` +} + +func (x *SingleBoolComparison) Reset() { + *x = SingleBoolComparison{} + if protoimpl.UnsafeEnabled { + mi := &file_chromadb_proto_chroma_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SingleBoolComparison) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SingleBoolComparison) ProtoMessage() {} + +func (x *SingleBoolComparison) ProtoReflect() protoreflect.Message { + mi := &file_chromadb_proto_chroma_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SingleBoolComparison.ProtoReflect.Descriptor instead. +func (*SingleBoolComparison) Descriptor() ([]byte, []int) { + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{23} +} + +func (x *SingleBoolComparison) GetValue() bool { + if x != nil { + return x.Value + } + return false +} + +func (x *SingleBoolComparison) GetComparator() GenericComparator { + if x != nil { + return x.Comparator + } + return GenericComparator_EQ +} + // Used when a leaf-node `Where` clause compares an int to a list of ints. // `ListOperator` specifies whether values in the list are allowed or disallowed. type IntListComparison struct { @@ -1899,7 +2091,7 @@ type IntListComparison struct { func (x *IntListComparison) Reset() { *x = IntListComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[21] + mi := &file_chromadb_proto_chroma_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1912,7 +2104,7 @@ func (x *IntListComparison) String() string { func (*IntListComparison) ProtoMessage() {} func (x *IntListComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[21] + mi := &file_chromadb_proto_chroma_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1925,7 +2117,7 @@ func (x *IntListComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use IntListComparison.ProtoReflect.Descriptor instead. func (*IntListComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{21} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{24} } func (x *IntListComparison) GetValues() []int64 { @@ -1959,7 +2151,7 @@ type SingleIntComparison struct { func (x *SingleIntComparison) Reset() { *x = SingleIntComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[22] + mi := &file_chromadb_proto_chroma_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1972,7 +2164,7 @@ func (x *SingleIntComparison) String() string { func (*SingleIntComparison) ProtoMessage() {} func (x *SingleIntComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[22] + mi := &file_chromadb_proto_chroma_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1985,7 +2177,7 @@ func (x *SingleIntComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use SingleIntComparison.ProtoReflect.Descriptor instead. func (*SingleIntComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{22} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{25} } func (x *SingleIntComparison) GetValue() int64 { @@ -2046,7 +2238,7 @@ type DoubleListComparison struct { func (x *DoubleListComparison) Reset() { *x = DoubleListComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[23] + mi := &file_chromadb_proto_chroma_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2059,7 +2251,7 @@ func (x *DoubleListComparison) String() string { func (*DoubleListComparison) ProtoMessage() {} func (x *DoubleListComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[23] + mi := &file_chromadb_proto_chroma_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2072,7 +2264,7 @@ func (x *DoubleListComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use DoubleListComparison.ProtoReflect.Descriptor instead. func (*DoubleListComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{23} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{26} } func (x *DoubleListComparison) GetValues() []float64 { @@ -2089,6 +2281,61 @@ func (x *DoubleListComparison) GetListOperator() ListOperator { return ListOperator_IN } +type BoolListComparison struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []bool `protobuf:"varint,1,rep,packed,name=values,proto3" json:"values,omitempty"` + ListOperator ListOperator `protobuf:"varint,2,opt,name=list_operator,json=listOperator,proto3,enum=chroma.ListOperator" json:"list_operator,omitempty"` +} + +func (x *BoolListComparison) Reset() { + *x = BoolListComparison{} + if protoimpl.UnsafeEnabled { + mi := &file_chromadb_proto_chroma_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoolListComparison) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoolListComparison) ProtoMessage() {} + +func (x *BoolListComparison) ProtoReflect() protoreflect.Message { + mi := &file_chromadb_proto_chroma_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoolListComparison.ProtoReflect.Descriptor instead. +func (*BoolListComparison) Descriptor() ([]byte, []int) { + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{27} +} + +func (x *BoolListComparison) GetValues() []bool { + if x != nil { + return x.Values + } + return nil +} + +func (x *BoolListComparison) GetListOperator() ListOperator { + if x != nil { + return x.ListOperator + } + return ListOperator_IN +} + type SingleDoubleComparison struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2105,7 +2352,7 @@ type SingleDoubleComparison struct { func (x *SingleDoubleComparison) Reset() { *x = SingleDoubleComparison{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[24] + mi := &file_chromadb_proto_chroma_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2118,7 +2365,7 @@ func (x *SingleDoubleComparison) String() string { func (*SingleDoubleComparison) ProtoMessage() {} func (x *SingleDoubleComparison) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[24] + mi := &file_chromadb_proto_chroma_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2131,7 +2378,7 @@ func (x *SingleDoubleComparison) ProtoReflect() protoreflect.Message { // Deprecated: Use SingleDoubleComparison.ProtoReflect.Descriptor instead. func (*SingleDoubleComparison) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{24} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{28} } func (x *SingleDoubleComparison) GetValue() float64 { @@ -2190,7 +2437,7 @@ type GetVectorsRequest struct { func (x *GetVectorsRequest) Reset() { *x = GetVectorsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[25] + mi := &file_chromadb_proto_chroma_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2203,7 +2450,7 @@ func (x *GetVectorsRequest) String() string { func (*GetVectorsRequest) ProtoMessage() {} func (x *GetVectorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[25] + mi := &file_chromadb_proto_chroma_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2216,7 +2463,7 @@ func (x *GetVectorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVectorsRequest.ProtoReflect.Descriptor instead. func (*GetVectorsRequest) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{25} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{29} } func (x *GetVectorsRequest) GetIds() []string { @@ -2244,7 +2491,7 @@ type GetVectorsResponse struct { func (x *GetVectorsResponse) Reset() { *x = GetVectorsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[26] + mi := &file_chromadb_proto_chroma_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2257,7 +2504,7 @@ func (x *GetVectorsResponse) String() string { func (*GetVectorsResponse) ProtoMessage() {} func (x *GetVectorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[26] + mi := &file_chromadb_proto_chroma_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2270,7 +2517,7 @@ func (x *GetVectorsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVectorsResponse.ProtoReflect.Descriptor instead. func (*GetVectorsResponse) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{26} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{30} } func (x *GetVectorsResponse) GetRecords() []*VectorEmbeddingRecord { @@ -2292,7 +2539,7 @@ type VectorEmbeddingRecord struct { func (x *VectorEmbeddingRecord) Reset() { *x = VectorEmbeddingRecord{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[27] + mi := &file_chromadb_proto_chroma_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2305,7 +2552,7 @@ func (x *VectorEmbeddingRecord) String() string { func (*VectorEmbeddingRecord) ProtoMessage() {} func (x *VectorEmbeddingRecord) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[27] + mi := &file_chromadb_proto_chroma_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2318,7 +2565,7 @@ func (x *VectorEmbeddingRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use VectorEmbeddingRecord.ProtoReflect.Descriptor instead. func (*VectorEmbeddingRecord) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{27} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{31} } func (x *VectorEmbeddingRecord) GetId() string { @@ -2350,7 +2597,7 @@ type QueryVectorsRequest struct { func (x *QueryVectorsRequest) Reset() { *x = QueryVectorsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[28] + mi := &file_chromadb_proto_chroma_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2363,7 +2610,7 @@ func (x *QueryVectorsRequest) String() string { func (*QueryVectorsRequest) ProtoMessage() {} func (x *QueryVectorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[28] + mi := &file_chromadb_proto_chroma_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2376,7 +2623,7 @@ func (x *QueryVectorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryVectorsRequest.ProtoReflect.Descriptor instead. func (*QueryVectorsRequest) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{28} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{32} } func (x *QueryVectorsRequest) GetVectors() []*Vector { @@ -2425,7 +2672,7 @@ type QueryVectorsResponse struct { func (x *QueryVectorsResponse) Reset() { *x = QueryVectorsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[29] + mi := &file_chromadb_proto_chroma_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2438,7 +2685,7 @@ func (x *QueryVectorsResponse) String() string { func (*QueryVectorsResponse) ProtoMessage() {} func (x *QueryVectorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[29] + mi := &file_chromadb_proto_chroma_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2451,7 +2698,7 @@ func (x *QueryVectorsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryVectorsResponse.ProtoReflect.Descriptor instead. func (*QueryVectorsResponse) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{29} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{33} } func (x *QueryVectorsResponse) GetResults() []*VectorQueryResults { @@ -2472,7 +2719,7 @@ type VectorQueryResults struct { func (x *VectorQueryResults) Reset() { *x = VectorQueryResults{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[30] + mi := &file_chromadb_proto_chroma_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2485,7 +2732,7 @@ func (x *VectorQueryResults) String() string { func (*VectorQueryResults) ProtoMessage() {} func (x *VectorQueryResults) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[30] + mi := &file_chromadb_proto_chroma_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2498,7 +2745,7 @@ func (x *VectorQueryResults) ProtoReflect() protoreflect.Message { // Deprecated: Use VectorQueryResults.ProtoReflect.Descriptor instead. func (*VectorQueryResults) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{30} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{34} } func (x *VectorQueryResults) GetResults() []*VectorQueryResult { @@ -2521,7 +2768,7 @@ type VectorQueryResult struct { func (x *VectorQueryResult) Reset() { *x = VectorQueryResult{} if protoimpl.UnsafeEnabled { - mi := &file_chromadb_proto_chroma_proto_msgTypes[31] + mi := &file_chromadb_proto_chroma_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2534,7 +2781,7 @@ func (x *VectorQueryResult) String() string { func (*VectorQueryResult) ProtoMessage() {} func (x *VectorQueryResult) ProtoReflect() protoreflect.Message { - mi := &file_chromadb_proto_chroma_proto_msgTypes[31] + mi := &file_chromadb_proto_chroma_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2547,7 +2794,7 @@ func (x *VectorQueryResult) ProtoReflect() protoreflect.Message { // Deprecated: Use VectorQueryResult.ProtoReflect.Descriptor instead. func (*VectorQueryResult) Descriptor() ([]byte, []int) { - return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{31} + return file_chromadb_proto_chroma_proto_rawDescGZIP(), []int{35} } func (x *VectorQueryResult) GetId() string { @@ -2635,7 +2882,7 @@ var file_chromadb_proto_chroma_proto_rawDesc = []byte{ 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x06, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x55, 0x70, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, @@ -2643,155 +2890,206 @@ var file_chromadb_proto_chroma_proto_rawDesc = []byte{ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x58, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, - 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, - 0x01, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x09, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, - 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x5f, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xf7, 0x01, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x68, 0x72, - 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, - 0x12, 0x3c, 0x0a, 0x0e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, - 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0d, 0x77, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, - 0x12, 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, - 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x52, 0x0a, - 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6d, 0x62, - 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x95, 0x01, 0x0a, 0x0d, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, - 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x42, 0x10, 0x0a, 0x0e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x5f, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x6c, 0x0a, 0x13, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, + 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, + 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x58, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, + 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x09, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, + 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x13, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x14, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf7, 0x01, 0x0a, 0x14, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x05, + 0x77, 0x68, 0x65, 0x72, 0x65, 0x12, 0x3c, 0x0a, 0x0e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x5f, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x7f, 0x0a, 0x15, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, - 0x31, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x77, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x48, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x22, 0x52, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6d, + 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x32, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x95, 0x01, 0x0a, 0x0d, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, + 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x3b, + 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, + 0x00, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x42, 0x10, 0x0a, 0x0e, 0x77, + 0x68, 0x65, 0x72, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x6c, 0x0a, + 0x13, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x39, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, + 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x7f, 0x0a, 0x15, 0x57, + 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, + 0x57, 0x68, 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, + 0x6d, 0x61, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x8e, 0x01, 0x0a, + 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, + 0x33, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, - 0x65, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, - 0x72, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x42, - 0x07, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x92, 0x04, 0x0a, 0x10, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x54, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x69, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x49, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x15, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, - 0x61, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, - 0x4e, 0x0a, 0x13, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x42, - 0x0c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, - 0x0d, 0x57, 0x68, 0x65, 0x72, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x29, - 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, - 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x68, - 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, - 0x0a, 0x14, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0xac, 0x05, + 0x0a, 0x10, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, + 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, + 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x54, + 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x11, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x11, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x62, + 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x4e, + 0x0a, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, + 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x42, 0x0c, + 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x0d, + 0x57, 0x68, 0x65, 0x72, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x29, 0x0a, + 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, + 0x6f, 0x6d, 0x61, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, + 0x14, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, + 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x16, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, + 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x14, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, + 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x11, + 0x49, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, + 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x14, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x22, 0xce, 0x01, 0x0a, 0x13, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, + 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x14, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, + 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x67, 0x0a, 0x12, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6c, 0x69, 0x73, - 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x16, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, - 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, - 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x11, 0x49, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, - 0x61, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, - 0x6c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xce, 0x01, 0x0a, - 0x13, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x67, 0x65, + 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, @@ -2801,115 +3099,100 @@ var file_chromadb_proto_chroma_proto_rawDesc = []byte{ 0x0e, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x42, - 0x0c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, - 0x14, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, - 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, - 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x0c, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, - 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x22, 0x4f, 0x0a, 0x15, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x62, 0x65, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x76, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, 0x72, - 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x22, 0xbc, 0x01, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x76, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, - 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x01, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x49, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, - 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x22, 0x4c, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x68, 0x72, - 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, - 0x49, 0x0a, 0x12, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x76, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, - 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2a, 0x38, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x10, - 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x28, 0x0a, - 0x0e, 0x53, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0x0b, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x01, 0x2a, 0x40, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, - 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, - 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x37, 0x0a, 0x15, 0x57, 0x68, 0x65, - 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, - 0x10, 0x01, 0x2a, 0x22, 0x0a, 0x0f, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x06, - 0x0a, 0x02, 0x4f, 0x52, 0x10, 0x01, 0x2a, 0x1f, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x4e, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, 0x02, - 0x45, 0x51, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x10, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x06, 0x0a, 0x02, 0x47, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x54, 0x45, 0x10, - 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x54, 0x45, - 0x10, 0x03, 0x32, 0x60, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0xa2, 0x01, 0x0a, 0x0c, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x12, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x74, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, - 0x6d, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2d, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x74, 0x6f, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x44, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x03, 0x69, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, + 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x15, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x62, 0x65, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x68, + 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x22, 0xbc, 0x01, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, + 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x01, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x49, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, + 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x68, + 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x22, 0x49, 0x0a, 0x12, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, + 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x56, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x06, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, + 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2a, 0x38, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, + 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x28, + 0x0a, 0x0e, 0x53, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x00, 0x12, 0x09, 0x0a, + 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x01, 0x2a, 0x40, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, + 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, + 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0a, + 0x0a, 0x06, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x37, 0x0a, 0x15, 0x57, 0x68, + 0x65, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, + 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, + 0x53, 0x10, 0x01, 0x2a, 0x22, 0x0a, 0x0f, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x44, 0x10, 0x00, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x52, 0x10, 0x01, 0x2a, 0x1f, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x4e, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x06, 0x0a, + 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x34, 0x0a, + 0x10, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x54, 0x45, + 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x54, + 0x45, 0x10, 0x03, 0x32, 0xad, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x32, 0xa2, 0x01, 0x0a, 0x0c, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x73, 0x12, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x63, 0x68, + 0x72, 0x6f, 0x6d, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, + 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2d, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x6f, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2925,8 +3208,8 @@ func file_chromadb_proto_chroma_proto_rawDescGZIP() []byte { } var file_chromadb_proto_chroma_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_chromadb_proto_chroma_proto_msgTypes = make([]protoimpl.MessageInfo, 34) -var file_chromadb_proto_chroma_proto_goTypes = []interface{}{ +var file_chromadb_proto_chroma_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_chromadb_proto_chroma_proto_goTypes = []any{ (Operation)(0), // 0: chroma.Operation (ScalarEncoding)(0), // 1: chroma.ScalarEncoding (SegmentScope)(0), // 2: chroma.SegmentScope @@ -2945,87 +3228,97 @@ var file_chromadb_proto_chroma_proto_goTypes = []interface{}{ (*UpdateMetadataValue)(nil), // 15: chroma.UpdateMetadataValue (*UpdateMetadata)(nil), // 16: chroma.UpdateMetadata (*OperationRecord)(nil), // 17: chroma.OperationRecord - (*QueryMetadataRequest)(nil), // 18: chroma.QueryMetadataRequest - (*QueryMetadataResponse)(nil), // 19: chroma.QueryMetadataResponse - (*MetadataEmbeddingRecord)(nil), // 20: chroma.MetadataEmbeddingRecord - (*WhereDocument)(nil), // 21: chroma.WhereDocument - (*DirectWhereDocument)(nil), // 22: chroma.DirectWhereDocument - (*WhereDocumentChildren)(nil), // 23: chroma.WhereDocumentChildren - (*Where)(nil), // 24: chroma.Where - (*DirectComparison)(nil), // 25: chroma.DirectComparison - (*WhereChildren)(nil), // 26: chroma.WhereChildren - (*StringListComparison)(nil), // 27: chroma.StringListComparison - (*SingleStringComparison)(nil), // 28: chroma.SingleStringComparison - (*IntListComparison)(nil), // 29: chroma.IntListComparison - (*SingleIntComparison)(nil), // 30: chroma.SingleIntComparison - (*DoubleListComparison)(nil), // 31: chroma.DoubleListComparison - (*SingleDoubleComparison)(nil), // 32: chroma.SingleDoubleComparison - (*GetVectorsRequest)(nil), // 33: chroma.GetVectorsRequest - (*GetVectorsResponse)(nil), // 34: chroma.GetVectorsResponse - (*VectorEmbeddingRecord)(nil), // 35: chroma.VectorEmbeddingRecord - (*QueryVectorsRequest)(nil), // 36: chroma.QueryVectorsRequest - (*QueryVectorsResponse)(nil), // 37: chroma.QueryVectorsResponse - (*VectorQueryResults)(nil), // 38: chroma.VectorQueryResults - (*VectorQueryResult)(nil), // 39: chroma.VectorQueryResult - nil, // 40: chroma.Segment.FilePathsEntry - nil, // 41: chroma.UpdateMetadata.MetadataEntry + (*CountRecordsRequest)(nil), // 18: chroma.CountRecordsRequest + (*CountRecordsResponse)(nil), // 19: chroma.CountRecordsResponse + (*QueryMetadataRequest)(nil), // 20: chroma.QueryMetadataRequest + (*QueryMetadataResponse)(nil), // 21: chroma.QueryMetadataResponse + (*MetadataEmbeddingRecord)(nil), // 22: chroma.MetadataEmbeddingRecord + (*WhereDocument)(nil), // 23: chroma.WhereDocument + (*DirectWhereDocument)(nil), // 24: chroma.DirectWhereDocument + (*WhereDocumentChildren)(nil), // 25: chroma.WhereDocumentChildren + (*Where)(nil), // 26: chroma.Where + (*DirectComparison)(nil), // 27: chroma.DirectComparison + (*WhereChildren)(nil), // 28: chroma.WhereChildren + (*StringListComparison)(nil), // 29: chroma.StringListComparison + (*SingleStringComparison)(nil), // 30: chroma.SingleStringComparison + (*SingleBoolComparison)(nil), // 31: chroma.SingleBoolComparison + (*IntListComparison)(nil), // 32: chroma.IntListComparison + (*SingleIntComparison)(nil), // 33: chroma.SingleIntComparison + (*DoubleListComparison)(nil), // 34: chroma.DoubleListComparison + (*BoolListComparison)(nil), // 35: chroma.BoolListComparison + (*SingleDoubleComparison)(nil), // 36: chroma.SingleDoubleComparison + (*GetVectorsRequest)(nil), // 37: chroma.GetVectorsRequest + (*GetVectorsResponse)(nil), // 38: chroma.GetVectorsResponse + (*VectorEmbeddingRecord)(nil), // 39: chroma.VectorEmbeddingRecord + (*QueryVectorsRequest)(nil), // 40: chroma.QueryVectorsRequest + (*QueryVectorsResponse)(nil), // 41: chroma.QueryVectorsResponse + (*VectorQueryResults)(nil), // 42: chroma.VectorQueryResults + (*VectorQueryResult)(nil), // 43: chroma.VectorQueryResult + nil, // 44: chroma.Segment.FilePathsEntry + nil, // 45: chroma.UpdateMetadata.MetadataEntry } var file_chromadb_proto_chroma_proto_depIdxs = []int32{ 1, // 0: chroma.Vector.encoding:type_name -> chroma.ScalarEncoding 2, // 1: chroma.Segment.scope:type_name -> chroma.SegmentScope 16, // 2: chroma.Segment.metadata:type_name -> chroma.UpdateMetadata - 40, // 3: chroma.Segment.file_paths:type_name -> chroma.Segment.FilePathsEntry + 44, // 3: chroma.Segment.file_paths:type_name -> chroma.Segment.FilePathsEntry 16, // 4: chroma.Collection.metadata:type_name -> chroma.UpdateMetadata - 41, // 5: chroma.UpdateMetadata.metadata:type_name -> chroma.UpdateMetadata.MetadataEntry + 45, // 5: chroma.UpdateMetadata.metadata:type_name -> chroma.UpdateMetadata.MetadataEntry 9, // 6: chroma.OperationRecord.vector:type_name -> chroma.Vector 16, // 7: chroma.OperationRecord.metadata:type_name -> chroma.UpdateMetadata 0, // 8: chroma.OperationRecord.operation:type_name -> chroma.Operation - 24, // 9: chroma.QueryMetadataRequest.where:type_name -> chroma.Where - 21, // 10: chroma.QueryMetadataRequest.where_document:type_name -> chroma.WhereDocument - 20, // 11: chroma.QueryMetadataResponse.records:type_name -> chroma.MetadataEmbeddingRecord + 26, // 9: chroma.QueryMetadataRequest.where:type_name -> chroma.Where + 23, // 10: chroma.QueryMetadataRequest.where_document:type_name -> chroma.WhereDocument + 22, // 11: chroma.QueryMetadataResponse.records:type_name -> chroma.MetadataEmbeddingRecord 16, // 12: chroma.MetadataEmbeddingRecord.metadata:type_name -> chroma.UpdateMetadata - 22, // 13: chroma.WhereDocument.direct:type_name -> chroma.DirectWhereDocument - 23, // 14: chroma.WhereDocument.children:type_name -> chroma.WhereDocumentChildren + 24, // 13: chroma.WhereDocument.direct:type_name -> chroma.DirectWhereDocument + 25, // 14: chroma.WhereDocument.children:type_name -> chroma.WhereDocumentChildren 3, // 15: chroma.DirectWhereDocument.operator:type_name -> chroma.WhereDocumentOperator - 21, // 16: chroma.WhereDocumentChildren.children:type_name -> chroma.WhereDocument + 23, // 16: chroma.WhereDocumentChildren.children:type_name -> chroma.WhereDocument 4, // 17: chroma.WhereDocumentChildren.operator:type_name -> chroma.BooleanOperator - 25, // 18: chroma.Where.direct_comparison:type_name -> chroma.DirectComparison - 26, // 19: chroma.Where.children:type_name -> chroma.WhereChildren - 28, // 20: chroma.DirectComparison.single_string_operand:type_name -> chroma.SingleStringComparison - 27, // 21: chroma.DirectComparison.string_list_operand:type_name -> chroma.StringListComparison - 30, // 22: chroma.DirectComparison.single_int_operand:type_name -> chroma.SingleIntComparison - 29, // 23: chroma.DirectComparison.int_list_operand:type_name -> chroma.IntListComparison - 32, // 24: chroma.DirectComparison.single_double_operand:type_name -> chroma.SingleDoubleComparison - 31, // 25: chroma.DirectComparison.double_list_operand:type_name -> chroma.DoubleListComparison - 24, // 26: chroma.WhereChildren.children:type_name -> chroma.Where - 4, // 27: chroma.WhereChildren.operator:type_name -> chroma.BooleanOperator - 5, // 28: chroma.StringListComparison.list_operator:type_name -> chroma.ListOperator - 6, // 29: chroma.SingleStringComparison.comparator:type_name -> chroma.GenericComparator - 5, // 30: chroma.IntListComparison.list_operator:type_name -> chroma.ListOperator - 6, // 31: chroma.SingleIntComparison.generic_comparator:type_name -> chroma.GenericComparator - 7, // 32: chroma.SingleIntComparison.number_comparator:type_name -> chroma.NumberComparator - 5, // 33: chroma.DoubleListComparison.list_operator:type_name -> chroma.ListOperator - 6, // 34: chroma.SingleDoubleComparison.generic_comparator:type_name -> chroma.GenericComparator - 7, // 35: chroma.SingleDoubleComparison.number_comparator:type_name -> chroma.NumberComparator - 35, // 36: chroma.GetVectorsResponse.records:type_name -> chroma.VectorEmbeddingRecord - 9, // 37: chroma.VectorEmbeddingRecord.vector:type_name -> chroma.Vector - 9, // 38: chroma.QueryVectorsRequest.vectors:type_name -> chroma.Vector - 38, // 39: chroma.QueryVectorsResponse.results:type_name -> chroma.VectorQueryResults - 39, // 40: chroma.VectorQueryResults.results:type_name -> chroma.VectorQueryResult - 9, // 41: chroma.VectorQueryResult.vector:type_name -> chroma.Vector - 10, // 42: chroma.Segment.FilePathsEntry.value:type_name -> chroma.FilePaths - 15, // 43: chroma.UpdateMetadata.MetadataEntry.value:type_name -> chroma.UpdateMetadataValue - 18, // 44: chroma.MetadataReader.QueryMetadata:input_type -> chroma.QueryMetadataRequest - 33, // 45: chroma.VectorReader.GetVectors:input_type -> chroma.GetVectorsRequest - 36, // 46: chroma.VectorReader.QueryVectors:input_type -> chroma.QueryVectorsRequest - 19, // 47: chroma.MetadataReader.QueryMetadata:output_type -> chroma.QueryMetadataResponse - 34, // 48: chroma.VectorReader.GetVectors:output_type -> chroma.GetVectorsResponse - 37, // 49: chroma.VectorReader.QueryVectors:output_type -> chroma.QueryVectorsResponse - 47, // [47:50] is the sub-list for method output_type - 44, // [44:47] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 27, // 18: chroma.Where.direct_comparison:type_name -> chroma.DirectComparison + 28, // 19: chroma.Where.children:type_name -> chroma.WhereChildren + 30, // 20: chroma.DirectComparison.single_string_operand:type_name -> chroma.SingleStringComparison + 29, // 21: chroma.DirectComparison.string_list_operand:type_name -> chroma.StringListComparison + 33, // 22: chroma.DirectComparison.single_int_operand:type_name -> chroma.SingleIntComparison + 32, // 23: chroma.DirectComparison.int_list_operand:type_name -> chroma.IntListComparison + 36, // 24: chroma.DirectComparison.single_double_operand:type_name -> chroma.SingleDoubleComparison + 34, // 25: chroma.DirectComparison.double_list_operand:type_name -> chroma.DoubleListComparison + 35, // 26: chroma.DirectComparison.bool_list_operand:type_name -> chroma.BoolListComparison + 31, // 27: chroma.DirectComparison.single_bool_operand:type_name -> chroma.SingleBoolComparison + 26, // 28: chroma.WhereChildren.children:type_name -> chroma.Where + 4, // 29: chroma.WhereChildren.operator:type_name -> chroma.BooleanOperator + 5, // 30: chroma.StringListComparison.list_operator:type_name -> chroma.ListOperator + 6, // 31: chroma.SingleStringComparison.comparator:type_name -> chroma.GenericComparator + 6, // 32: chroma.SingleBoolComparison.comparator:type_name -> chroma.GenericComparator + 5, // 33: chroma.IntListComparison.list_operator:type_name -> chroma.ListOperator + 6, // 34: chroma.SingleIntComparison.generic_comparator:type_name -> chroma.GenericComparator + 7, // 35: chroma.SingleIntComparison.number_comparator:type_name -> chroma.NumberComparator + 5, // 36: chroma.DoubleListComparison.list_operator:type_name -> chroma.ListOperator + 5, // 37: chroma.BoolListComparison.list_operator:type_name -> chroma.ListOperator + 6, // 38: chroma.SingleDoubleComparison.generic_comparator:type_name -> chroma.GenericComparator + 7, // 39: chroma.SingleDoubleComparison.number_comparator:type_name -> chroma.NumberComparator + 39, // 40: chroma.GetVectorsResponse.records:type_name -> chroma.VectorEmbeddingRecord + 9, // 41: chroma.VectorEmbeddingRecord.vector:type_name -> chroma.Vector + 9, // 42: chroma.QueryVectorsRequest.vectors:type_name -> chroma.Vector + 42, // 43: chroma.QueryVectorsResponse.results:type_name -> chroma.VectorQueryResults + 43, // 44: chroma.VectorQueryResults.results:type_name -> chroma.VectorQueryResult + 9, // 45: chroma.VectorQueryResult.vector:type_name -> chroma.Vector + 10, // 46: chroma.Segment.FilePathsEntry.value:type_name -> chroma.FilePaths + 15, // 47: chroma.UpdateMetadata.MetadataEntry.value:type_name -> chroma.UpdateMetadataValue + 20, // 48: chroma.MetadataReader.QueryMetadata:input_type -> chroma.QueryMetadataRequest + 18, // 49: chroma.MetadataReader.CountRecords:input_type -> chroma.CountRecordsRequest + 37, // 50: chroma.VectorReader.GetVectors:input_type -> chroma.GetVectorsRequest + 40, // 51: chroma.VectorReader.QueryVectors:input_type -> chroma.QueryVectorsRequest + 21, // 52: chroma.MetadataReader.QueryMetadata:output_type -> chroma.QueryMetadataResponse + 19, // 53: chroma.MetadataReader.CountRecords:output_type -> chroma.CountRecordsResponse + 38, // 54: chroma.VectorReader.GetVectors:output_type -> chroma.GetVectorsResponse + 41, // 55: chroma.VectorReader.QueryVectors:output_type -> chroma.QueryVectorsResponse + 52, // [52:56] is the sub-list for method output_type + 48, // [48:52] is the sub-list for method input_type + 48, // [48:48] is the sub-list for extension type_name + 48, // [48:48] is the sub-list for extension extendee + 0, // [0:48] is the sub-list for field type_name } func init() { file_chromadb_proto_chroma_proto_init() } @@ -3034,7 +3327,7 @@ func file_chromadb_proto_chroma_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_chromadb_proto_chroma_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Status); i { case 0: return &v.state @@ -3046,7 +3339,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Vector); i { case 0: return &v.state @@ -3058,7 +3351,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*FilePaths); i { case 0: return &v.state @@ -3070,7 +3363,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*Segment); i { case 0: return &v.state @@ -3082,7 +3375,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Collection); i { case 0: return &v.state @@ -3094,7 +3387,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Database); i { case 0: return &v.state @@ -3106,7 +3399,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*Tenant); i { case 0: return &v.state @@ -3118,7 +3411,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateMetadataValue); i { case 0: return &v.state @@ -3130,7 +3423,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpdateMetadata); i { case 0: return &v.state @@ -3142,7 +3435,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*OperationRecord); i { case 0: return &v.state @@ -3154,7 +3447,31 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*CountRecordsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chromadb_proto_chroma_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*CountRecordsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chromadb_proto_chroma_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*QueryMetadataRequest); i { case 0: return &v.state @@ -3166,7 +3483,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*QueryMetadataResponse); i { case 0: return &v.state @@ -3178,7 +3495,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*MetadataEmbeddingRecord); i { case 0: return &v.state @@ -3190,7 +3507,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*WhereDocument); i { case 0: return &v.state @@ -3202,7 +3519,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*DirectWhereDocument); i { case 0: return &v.state @@ -3214,7 +3531,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*WhereDocumentChildren); i { case 0: return &v.state @@ -3226,7 +3543,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*Where); i { case 0: return &v.state @@ -3238,7 +3555,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*DirectComparison); i { case 0: return &v.state @@ -3250,7 +3567,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*WhereChildren); i { case 0: return &v.state @@ -3262,7 +3579,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*StringListComparison); i { case 0: return &v.state @@ -3274,7 +3591,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*SingleStringComparison); i { case 0: return &v.state @@ -3286,7 +3603,19 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[23].Exporter = func(v any, i int) any { + switch v := v.(*SingleBoolComparison); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chromadb_proto_chroma_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*IntListComparison); i { case 0: return &v.state @@ -3298,7 +3627,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*SingleIntComparison); i { case 0: return &v.state @@ -3310,7 +3639,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*DoubleListComparison); i { case 0: return &v.state @@ -3322,7 +3651,19 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*BoolListComparison); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chromadb_proto_chroma_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*SingleDoubleComparison); i { case 0: return &v.state @@ -3334,7 +3675,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*GetVectorsRequest); i { case 0: return &v.state @@ -3346,7 +3687,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*GetVectorsResponse); i { case 0: return &v.state @@ -3358,7 +3699,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*VectorEmbeddingRecord); i { case 0: return &v.state @@ -3370,7 +3711,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*QueryVectorsRequest); i { case 0: return &v.state @@ -3382,7 +3723,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*QueryVectorsResponse); i { case 0: return &v.state @@ -3394,7 +3735,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*VectorQueryResults); i { case 0: return &v.state @@ -3406,7 +3747,7 @@ func file_chromadb_proto_chroma_proto_init() { return nil } } - file_chromadb_proto_chroma_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_chroma_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*VectorQueryResult); i { case 0: return &v.state @@ -3419,47 +3760,50 @@ func file_chromadb_proto_chroma_proto_init() { } } } - file_chromadb_proto_chroma_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_chromadb_proto_chroma_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_chromadb_proto_chroma_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[3].OneofWrappers = []any{} + file_chromadb_proto_chroma_proto_msgTypes[4].OneofWrappers = []any{} + file_chromadb_proto_chroma_proto_msgTypes[7].OneofWrappers = []any{ (*UpdateMetadataValue_StringValue)(nil), (*UpdateMetadataValue_IntValue)(nil), (*UpdateMetadataValue_FloatValue)(nil), + (*UpdateMetadataValue_BoolValue)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[9].OneofWrappers = []interface{}{} - file_chromadb_proto_chroma_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_chromadb_proto_chroma_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[9].OneofWrappers = []any{} + file_chromadb_proto_chroma_proto_msgTypes[12].OneofWrappers = []any{} + file_chromadb_proto_chroma_proto_msgTypes[15].OneofWrappers = []any{ (*WhereDocument_Direct)(nil), (*WhereDocument_Children)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[16].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[18].OneofWrappers = []any{ (*Where_DirectComparison)(nil), (*Where_Children)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[19].OneofWrappers = []any{ (*DirectComparison_SingleStringOperand)(nil), (*DirectComparison_StringListOperand)(nil), (*DirectComparison_SingleIntOperand)(nil), (*DirectComparison_IntListOperand)(nil), (*DirectComparison_SingleDoubleOperand)(nil), (*DirectComparison_DoubleListOperand)(nil), + (*DirectComparison_BoolListOperand)(nil), + (*DirectComparison_SingleBoolOperand)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[25].OneofWrappers = []any{ (*SingleIntComparison_GenericComparator)(nil), (*SingleIntComparison_NumberComparator)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_chromadb_proto_chroma_proto_msgTypes[28].OneofWrappers = []any{ (*SingleDoubleComparison_GenericComparator)(nil), (*SingleDoubleComparison_NumberComparator)(nil), } - file_chromadb_proto_chroma_proto_msgTypes[31].OneofWrappers = []interface{}{} + file_chromadb_proto_chroma_proto_msgTypes[35].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chromadb_proto_chroma_proto_rawDesc, NumEnums: 8, - NumMessages: 34, + NumMessages: 38, NumExtensions: 0, NumServices: 2, }, diff --git a/go/pkg/proto/coordinatorpb/chroma_grpc.pb.go b/go/pkg/proto/coordinatorpb/chroma_grpc.pb.go index 312bb53a071..7338ae575f5 100644 --- a/go/pkg/proto/coordinatorpb/chroma_grpc.pb.go +++ b/go/pkg/proto/coordinatorpb/chroma_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.23.4 +// - protoc-gen-go-grpc v1.4.0 +// - protoc v5.26.1 // source: chromadb/proto/chroma.proto package coordinatorpb @@ -15,11 +15,12 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.62.0 or later. +const _ = grpc.SupportPackageIsVersion8 const ( MetadataReader_QueryMetadata_FullMethodName = "/chroma.MetadataReader/QueryMetadata" + MetadataReader_CountRecords_FullMethodName = "/chroma.MetadataReader/CountRecords" ) // MetadataReaderClient is the client API for MetadataReader service. @@ -27,6 +28,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type MetadataReaderClient interface { QueryMetadata(ctx context.Context, in *QueryMetadataRequest, opts ...grpc.CallOption) (*QueryMetadataResponse, error) + CountRecords(ctx context.Context, in *CountRecordsRequest, opts ...grpc.CallOption) (*CountRecordsResponse, error) } type metadataReaderClient struct { @@ -38,8 +40,19 @@ func NewMetadataReaderClient(cc grpc.ClientConnInterface) MetadataReaderClient { } func (c *metadataReaderClient) QueryMetadata(ctx context.Context, in *QueryMetadataRequest, opts ...grpc.CallOption) (*QueryMetadataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(QueryMetadataResponse) - err := c.cc.Invoke(ctx, MetadataReader_QueryMetadata_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, MetadataReader_QueryMetadata_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *metadataReaderClient) CountRecords(ctx context.Context, in *CountRecordsRequest, opts ...grpc.CallOption) (*CountRecordsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CountRecordsResponse) + err := c.cc.Invoke(ctx, MetadataReader_CountRecords_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -51,6 +64,7 @@ func (c *metadataReaderClient) QueryMetadata(ctx context.Context, in *QueryMetad // for forward compatibility type MetadataReaderServer interface { QueryMetadata(context.Context, *QueryMetadataRequest) (*QueryMetadataResponse, error) + CountRecords(context.Context, *CountRecordsRequest) (*CountRecordsResponse, error) mustEmbedUnimplementedMetadataReaderServer() } @@ -61,6 +75,9 @@ type UnimplementedMetadataReaderServer struct { func (UnimplementedMetadataReaderServer) QueryMetadata(context.Context, *QueryMetadataRequest) (*QueryMetadataResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryMetadata not implemented") } +func (UnimplementedMetadataReaderServer) CountRecords(context.Context, *CountRecordsRequest) (*CountRecordsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CountRecords not implemented") +} func (UnimplementedMetadataReaderServer) mustEmbedUnimplementedMetadataReaderServer() {} // UnsafeMetadataReaderServer may be embedded to opt out of forward compatibility for this service. @@ -92,6 +109,24 @@ func _MetadataReader_QueryMetadata_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _MetadataReader_CountRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CountRecordsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetadataReaderServer).CountRecords(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MetadataReader_CountRecords_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetadataReaderServer).CountRecords(ctx, req.(*CountRecordsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // MetadataReader_ServiceDesc is the grpc.ServiceDesc for MetadataReader service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -103,6 +138,10 @@ var MetadataReader_ServiceDesc = grpc.ServiceDesc{ MethodName: "QueryMetadata", Handler: _MetadataReader_QueryMetadata_Handler, }, + { + MethodName: "CountRecords", + Handler: _MetadataReader_CountRecords_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "chromadb/proto/chroma.proto", @@ -130,8 +169,9 @@ func NewVectorReaderClient(cc grpc.ClientConnInterface) VectorReaderClient { } func (c *vectorReaderClient) GetVectors(ctx context.Context, in *GetVectorsRequest, opts ...grpc.CallOption) (*GetVectorsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetVectorsResponse) - err := c.cc.Invoke(ctx, VectorReader_GetVectors_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, VectorReader_GetVectors_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -139,8 +179,9 @@ func (c *vectorReaderClient) GetVectors(ctx context.Context, in *GetVectorsReque } func (c *vectorReaderClient) QueryVectors(ctx context.Context, in *QueryVectorsRequest, opts ...grpc.CallOption) (*QueryVectorsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(QueryVectorsResponse) - err := c.cc.Invoke(ctx, VectorReader_QueryVectors_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, VectorReader_QueryVectors_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } diff --git a/go/pkg/proto/coordinatorpb/coordinator.pb.go b/go/pkg/proto/coordinatorpb/coordinator.pb.go index ffbc2a9339f..80eb941f22f 100644 --- a/go/pkg/proto/coordinatorpb/coordinator.pb.go +++ b/go/pkg/proto/coordinatorpb/coordinator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 -// protoc v4.23.4 +// protoc-gen-go v1.34.2 +// protoc v5.26.1 // source: chromadb/proto/coordinator.proto package coordinatorpb @@ -2368,7 +2368,7 @@ func file_chromadb_proto_coordinator_proto_rawDescGZIP() []byte { } var file_chromadb_proto_coordinator_proto_msgTypes = make([]protoimpl.MessageInfo, 34) -var file_chromadb_proto_coordinator_proto_goTypes = []interface{}{ +var file_chromadb_proto_coordinator_proto_goTypes = []any{ (*CreateDatabaseRequest)(nil), // 0: chroma.CreateDatabaseRequest (*CreateDatabaseResponse)(nil), // 1: chroma.CreateDatabaseResponse (*GetDatabaseRequest)(nil), // 2: chroma.GetDatabaseRequest @@ -2488,7 +2488,7 @@ func file_chromadb_proto_coordinator_proto_init() { } file_chromadb_proto_chroma_proto_init() if !protoimpl.UnsafeEnabled { - file_chromadb_proto_coordinator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseRequest); i { case 0: return &v.state @@ -2500,7 +2500,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseResponse); i { case 0: return &v.state @@ -2512,7 +2512,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseRequest); i { case 0: return &v.state @@ -2524,7 +2524,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseResponse); i { case 0: return &v.state @@ -2536,7 +2536,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateTenantRequest); i { case 0: return &v.state @@ -2548,7 +2548,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateTenantResponse); i { case 0: return &v.state @@ -2560,7 +2560,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetTenantRequest); i { case 0: return &v.state @@ -2572,7 +2572,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetTenantResponse); i { case 0: return &v.state @@ -2584,7 +2584,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*CreateSegmentRequest); i { case 0: return &v.state @@ -2596,7 +2596,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*CreateSegmentResponse); i { case 0: return &v.state @@ -2608,7 +2608,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*DeleteSegmentRequest); i { case 0: return &v.state @@ -2620,7 +2620,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*DeleteSegmentResponse); i { case 0: return &v.state @@ -2632,7 +2632,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetSegmentsRequest); i { case 0: return &v.state @@ -2644,7 +2644,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetSegmentsResponse); i { case 0: return &v.state @@ -2656,7 +2656,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*UpdateSegmentRequest); i { case 0: return &v.state @@ -2668,7 +2668,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*UpdateSegmentResponse); i { case 0: return &v.state @@ -2680,7 +2680,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*CreateCollectionRequest); i { case 0: return &v.state @@ -2692,7 +2692,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*CreateCollectionResponse); i { case 0: return &v.state @@ -2704,7 +2704,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*DeleteCollectionRequest); i { case 0: return &v.state @@ -2716,7 +2716,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*DeleteCollectionResponse); i { case 0: return &v.state @@ -2728,7 +2728,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*GetCollectionsRequest); i { case 0: return &v.state @@ -2740,7 +2740,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*GetCollectionsResponse); i { case 0: return &v.state @@ -2752,7 +2752,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*UpdateCollectionRequest); i { case 0: return &v.state @@ -2764,7 +2764,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*UpdateCollectionResponse); i { case 0: return &v.state @@ -2776,7 +2776,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*Notification); i { case 0: return &v.state @@ -2788,7 +2788,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*ResetStateResponse); i { case 0: return &v.state @@ -2800,7 +2800,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*GetLastCompactionTimeForTenantRequest); i { case 0: return &v.state @@ -2812,7 +2812,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*TenantLastCompactionTime); i { case 0: return &v.state @@ -2824,7 +2824,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*GetLastCompactionTimeForTenantResponse); i { case 0: return &v.state @@ -2836,7 +2836,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*SetLastCompactionTimeForTenantRequest); i { case 0: return &v.state @@ -2848,7 +2848,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*FlushSegmentCompactionInfo); i { case 0: return &v.state @@ -2860,7 +2860,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*FlushCollectionCompactionRequest); i { case 0: return &v.state @@ -2872,7 +2872,7 @@ func file_chromadb_proto_coordinator_proto_init() { return nil } } - file_chromadb_proto_coordinator_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_coordinator_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*FlushCollectionCompactionResponse); i { case 0: return &v.state @@ -2885,16 +2885,16 @@ func file_chromadb_proto_coordinator_proto_init() { } } } - file_chromadb_proto_coordinator_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_chromadb_proto_coordinator_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_chromadb_proto_coordinator_proto_msgTypes[12].OneofWrappers = []any{} + file_chromadb_proto_coordinator_proto_msgTypes[14].OneofWrappers = []any{ (*UpdateSegmentRequest_Collection)(nil), (*UpdateSegmentRequest_ResetCollection)(nil), (*UpdateSegmentRequest_Metadata)(nil), (*UpdateSegmentRequest_ResetMetadata)(nil), } - file_chromadb_proto_coordinator_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_chromadb_proto_coordinator_proto_msgTypes[20].OneofWrappers = []interface{}{} - file_chromadb_proto_coordinator_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_chromadb_proto_coordinator_proto_msgTypes[16].OneofWrappers = []any{} + file_chromadb_proto_coordinator_proto_msgTypes[20].OneofWrappers = []any{} + file_chromadb_proto_coordinator_proto_msgTypes[22].OneofWrappers = []any{ (*UpdateCollectionRequest_Metadata)(nil), (*UpdateCollectionRequest_ResetMetadata)(nil), } diff --git a/go/pkg/proto/coordinatorpb/coordinator_grpc.pb.go b/go/pkg/proto/coordinatorpb/coordinator_grpc.pb.go index 1306dbc1793..0a5088ae91e 100644 --- a/go/pkg/proto/coordinatorpb/coordinator_grpc.pb.go +++ b/go/pkg/proto/coordinatorpb/coordinator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.23.4 +// - protoc-gen-go-grpc v1.4.0 +// - protoc v5.26.1 // source: chromadb/proto/coordinator.proto package coordinatorpb @@ -16,8 +16,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.62.0 or later. +const _ = grpc.SupportPackageIsVersion8 const ( SysDB_CreateDatabase_FullMethodName = "/chroma.SysDB/CreateDatabase" @@ -69,8 +69,9 @@ func NewSysDBClient(cc grpc.ClientConnInterface) SysDBClient { } func (c *sysDBClient) CreateDatabase(ctx context.Context, in *CreateDatabaseRequest, opts ...grpc.CallOption) (*CreateDatabaseResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateDatabaseResponse) - err := c.cc.Invoke(ctx, SysDB_CreateDatabase_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_CreateDatabase_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -78,8 +79,9 @@ func (c *sysDBClient) CreateDatabase(ctx context.Context, in *CreateDatabaseRequ } func (c *sysDBClient) GetDatabase(ctx context.Context, in *GetDatabaseRequest, opts ...grpc.CallOption) (*GetDatabaseResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetDatabaseResponse) - err := c.cc.Invoke(ctx, SysDB_GetDatabase_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_GetDatabase_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -87,8 +89,9 @@ func (c *sysDBClient) GetDatabase(ctx context.Context, in *GetDatabaseRequest, o } func (c *sysDBClient) CreateTenant(ctx context.Context, in *CreateTenantRequest, opts ...grpc.CallOption) (*CreateTenantResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateTenantResponse) - err := c.cc.Invoke(ctx, SysDB_CreateTenant_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_CreateTenant_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -96,8 +99,9 @@ func (c *sysDBClient) CreateTenant(ctx context.Context, in *CreateTenantRequest, } func (c *sysDBClient) GetTenant(ctx context.Context, in *GetTenantRequest, opts ...grpc.CallOption) (*GetTenantResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTenantResponse) - err := c.cc.Invoke(ctx, SysDB_GetTenant_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_GetTenant_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -105,8 +109,9 @@ func (c *sysDBClient) GetTenant(ctx context.Context, in *GetTenantRequest, opts } func (c *sysDBClient) CreateSegment(ctx context.Context, in *CreateSegmentRequest, opts ...grpc.CallOption) (*CreateSegmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateSegmentResponse) - err := c.cc.Invoke(ctx, SysDB_CreateSegment_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_CreateSegment_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -114,8 +119,9 @@ func (c *sysDBClient) CreateSegment(ctx context.Context, in *CreateSegmentReques } func (c *sysDBClient) DeleteSegment(ctx context.Context, in *DeleteSegmentRequest, opts ...grpc.CallOption) (*DeleteSegmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeleteSegmentResponse) - err := c.cc.Invoke(ctx, SysDB_DeleteSegment_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_DeleteSegment_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -123,8 +129,9 @@ func (c *sysDBClient) DeleteSegment(ctx context.Context, in *DeleteSegmentReques } func (c *sysDBClient) GetSegments(ctx context.Context, in *GetSegmentsRequest, opts ...grpc.CallOption) (*GetSegmentsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetSegmentsResponse) - err := c.cc.Invoke(ctx, SysDB_GetSegments_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_GetSegments_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -132,8 +139,9 @@ func (c *sysDBClient) GetSegments(ctx context.Context, in *GetSegmentsRequest, o } func (c *sysDBClient) UpdateSegment(ctx context.Context, in *UpdateSegmentRequest, opts ...grpc.CallOption) (*UpdateSegmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateSegmentResponse) - err := c.cc.Invoke(ctx, SysDB_UpdateSegment_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_UpdateSegment_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -141,8 +149,9 @@ func (c *sysDBClient) UpdateSegment(ctx context.Context, in *UpdateSegmentReques } func (c *sysDBClient) CreateCollection(ctx context.Context, in *CreateCollectionRequest, opts ...grpc.CallOption) (*CreateCollectionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateCollectionResponse) - err := c.cc.Invoke(ctx, SysDB_CreateCollection_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_CreateCollection_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -150,8 +159,9 @@ func (c *sysDBClient) CreateCollection(ctx context.Context, in *CreateCollection } func (c *sysDBClient) DeleteCollection(ctx context.Context, in *DeleteCollectionRequest, opts ...grpc.CallOption) (*DeleteCollectionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeleteCollectionResponse) - err := c.cc.Invoke(ctx, SysDB_DeleteCollection_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_DeleteCollection_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -159,8 +169,9 @@ func (c *sysDBClient) DeleteCollection(ctx context.Context, in *DeleteCollection } func (c *sysDBClient) GetCollections(ctx context.Context, in *GetCollectionsRequest, opts ...grpc.CallOption) (*GetCollectionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetCollectionsResponse) - err := c.cc.Invoke(ctx, SysDB_GetCollections_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_GetCollections_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -168,8 +179,9 @@ func (c *sysDBClient) GetCollections(ctx context.Context, in *GetCollectionsRequ } func (c *sysDBClient) UpdateCollection(ctx context.Context, in *UpdateCollectionRequest, opts ...grpc.CallOption) (*UpdateCollectionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateCollectionResponse) - err := c.cc.Invoke(ctx, SysDB_UpdateCollection_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_UpdateCollection_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -177,8 +189,9 @@ func (c *sysDBClient) UpdateCollection(ctx context.Context, in *UpdateCollection } func (c *sysDBClient) ResetState(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ResetStateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResetStateResponse) - err := c.cc.Invoke(ctx, SysDB_ResetState_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_ResetState_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -186,8 +199,9 @@ func (c *sysDBClient) ResetState(ctx context.Context, in *emptypb.Empty, opts .. } func (c *sysDBClient) GetLastCompactionTimeForTenant(ctx context.Context, in *GetLastCompactionTimeForTenantRequest, opts ...grpc.CallOption) (*GetLastCompactionTimeForTenantResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetLastCompactionTimeForTenantResponse) - err := c.cc.Invoke(ctx, SysDB_GetLastCompactionTimeForTenant_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_GetLastCompactionTimeForTenant_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -195,8 +209,9 @@ func (c *sysDBClient) GetLastCompactionTimeForTenant(ctx context.Context, in *Ge } func (c *sysDBClient) SetLastCompactionTimeForTenant(ctx context.Context, in *SetLastCompactionTimeForTenantRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, SysDB_SetLastCompactionTimeForTenant_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_SetLastCompactionTimeForTenant_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -204,8 +219,9 @@ func (c *sysDBClient) SetLastCompactionTimeForTenant(ctx context.Context, in *Se } func (c *sysDBClient) FlushCollectionCompaction(ctx context.Context, in *FlushCollectionCompactionRequest, opts ...grpc.CallOption) (*FlushCollectionCompactionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(FlushCollectionCompactionResponse) - err := c.cc.Invoke(ctx, SysDB_FlushCollectionCompaction_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, SysDB_FlushCollectionCompaction_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } diff --git a/go/pkg/proto/logservicepb/logservice.pb.go b/go/pkg/proto/logservicepb/logservice.pb.go index 7f481fe0893..82fad7e3df3 100644 --- a/go/pkg/proto/logservicepb/logservice.pb.go +++ b/go/pkg/proto/logservicepb/logservice.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 -// protoc v4.23.4 +// protoc-gen-go v1.34.2 +// protoc v5.26.1 // source: chromadb/proto/logservice.proto package logservicepb @@ -649,7 +649,7 @@ func file_chromadb_proto_logservice_proto_rawDescGZIP() []byte { } var file_chromadb_proto_logservice_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_chromadb_proto_logservice_proto_goTypes = []interface{}{ +var file_chromadb_proto_logservice_proto_goTypes = []any{ (*PushLogsRequest)(nil), // 0: chroma.PushLogsRequest (*PushLogsResponse)(nil), // 1: chroma.PushLogsResponse (*PullLogsRequest)(nil), // 2: chroma.PullLogsRequest @@ -688,7 +688,7 @@ func file_chromadb_proto_logservice_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_chromadb_proto_logservice_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PushLogsRequest); i { case 0: return &v.state @@ -700,7 +700,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*PushLogsResponse); i { case 0: return &v.state @@ -712,7 +712,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*PullLogsRequest); i { case 0: return &v.state @@ -724,7 +724,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*LogRecord); i { case 0: return &v.state @@ -736,7 +736,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*PullLogsResponse); i { case 0: return &v.state @@ -748,7 +748,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CollectionInfo); i { case 0: return &v.state @@ -760,7 +760,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAllCollectionInfoToCompactRequest); i { case 0: return &v.state @@ -772,7 +772,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetAllCollectionInfoToCompactResponse); i { case 0: return &v.state @@ -784,7 +784,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpdateCollectionLogOffsetRequest); i { case 0: return &v.state @@ -796,7 +796,7 @@ func file_chromadb_proto_logservice_proto_init() { return nil } } - file_chromadb_proto_logservice_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_chromadb_proto_logservice_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateCollectionLogOffsetResponse); i { case 0: return &v.state diff --git a/go/pkg/proto/logservicepb/logservice_grpc.pb.go b/go/pkg/proto/logservicepb/logservice_grpc.pb.go index 57d0ab8a42f..ad525bfe495 100644 --- a/go/pkg/proto/logservicepb/logservice_grpc.pb.go +++ b/go/pkg/proto/logservicepb/logservice_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.23.4 +// - protoc-gen-go-grpc v1.4.0 +// - protoc v5.26.1 // source: chromadb/proto/logservice.proto package logservicepb @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.62.0 or later. +const _ = grpc.SupportPackageIsVersion8 const ( LogService_PushLogs_FullMethodName = "/chroma.LogService/PushLogs" @@ -44,8 +44,9 @@ func NewLogServiceClient(cc grpc.ClientConnInterface) LogServiceClient { } func (c *logServiceClient) PushLogs(ctx context.Context, in *PushLogsRequest, opts ...grpc.CallOption) (*PushLogsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PushLogsResponse) - err := c.cc.Invoke(ctx, LogService_PushLogs_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, LogService_PushLogs_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -53,8 +54,9 @@ func (c *logServiceClient) PushLogs(ctx context.Context, in *PushLogsRequest, op } func (c *logServiceClient) PullLogs(ctx context.Context, in *PullLogsRequest, opts ...grpc.CallOption) (*PullLogsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PullLogsResponse) - err := c.cc.Invoke(ctx, LogService_PullLogs_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, LogService_PullLogs_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -62,8 +64,9 @@ func (c *logServiceClient) PullLogs(ctx context.Context, in *PullLogsRequest, op } func (c *logServiceClient) GetAllCollectionInfoToCompact(ctx context.Context, in *GetAllCollectionInfoToCompactRequest, opts ...grpc.CallOption) (*GetAllCollectionInfoToCompactResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetAllCollectionInfoToCompactResponse) - err := c.cc.Invoke(ctx, LogService_GetAllCollectionInfoToCompact_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, LogService_GetAllCollectionInfoToCompact_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -71,8 +74,9 @@ func (c *logServiceClient) GetAllCollectionInfoToCompact(ctx context.Context, in } func (c *logServiceClient) UpdateCollectionLogOffset(ctx context.Context, in *UpdateCollectionLogOffsetRequest, opts ...grpc.CallOption) (*UpdateCollectionLogOffsetResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateCollectionLogOffsetResponse) - err := c.cc.Invoke(ctx, LogService_UpdateCollectionLogOffset_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, LogService_UpdateCollectionLogOffset_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } diff --git a/idl/chromadb/proto/chroma.proto b/idl/chromadb/proto/chroma.proto index f1c60ab50ca..1699f81afe9 100644 --- a/idl/chromadb/proto/chroma.proto +++ b/idl/chromadb/proto/chroma.proto @@ -70,10 +70,13 @@ message Tenant { } message UpdateMetadataValue { + // Not set if user wants to delete the key. + // TODO(Sanket): Should we make this more explicit? oneof value { string string_value = 1; int64 int_value = 2; double float_value = 3; + bool bool_value = 4; } } @@ -176,6 +179,8 @@ message DirectComparison { IntListComparison int_list_operand = 5; SingleDoubleComparison single_double_operand = 6; DoubleListComparison double_list_operand = 7; + BoolListComparison bool_list_operand = 8; + SingleBoolComparison single_bool_operand = 9; } } @@ -229,6 +234,11 @@ message SingleStringComparison { GenericComparator comparator = 2; } +message SingleBoolComparison { + bool value = 1; + GenericComparator comparator = 2; +} + // Used when a leaf-node `Where` clause compares an int to a list of ints. // `ListOperator` specifies whether values in the list are allowed or disallowed. message IntListComparison { @@ -252,6 +262,11 @@ message DoubleListComparison { ListOperator list_operator = 2; } +message BoolListComparison { + repeated bool values = 1; + ListOperator list_operator = 2; +} + message SingleDoubleComparison { double value = 1; oneof comparator { diff --git a/rust/worker/src/execution/operators/metadata_filtering.rs b/rust/worker/src/execution/operators/metadata_filtering.rs index d2a7d785552..902e3edf7ba 100644 --- a/rust/worker/src/execution/operators/metadata_filtering.rs +++ b/rust/worker/src/execution/operators/metadata_filtering.rs @@ -224,6 +224,44 @@ impl Operator for MetadataFilte unimplemented!(); } }, + crate::types::MetadataType::BoolType => match comparator { + WhereClauseComparator::Equal => { + let mut result = RoaringBitmap::new(); + // Construct a bitmap consisting of all offset ids + // that have this key equal to this value. + for (offset_id, meta_map) in &ids_to_metadata { + if let Some(val) = meta_map.get(metadata_key) { + match *val { + MetadataValue::Bool(bool_value) => { + if let KeyWrapper::Bool(where_value) = metadata_value { + if *bool_value == *where_value { + result.insert(*offset_id); + } + } + } + _ => (), + } + } + } + return result; + } + WhereClauseComparator::NotEqual => { + todo!(); + } + // We don't allow these comparators for booleans. + WhereClauseComparator::LessThan => { + unimplemented!(); + } + WhereClauseComparator::LessThanOrEqual => { + unimplemented!(); + } + WhereClauseComparator::GreaterThan => { + unimplemented!(); + } + WhereClauseComparator::GreaterThanOrEqual => { + unimplemented!(); + } + }, crate::types::MetadataType::IntType => match comparator { WhereClauseComparator::Equal => { let mut result = RoaringBitmap::new(); @@ -443,6 +481,9 @@ impl Operator for MetadataFilte crate::types::MetadataType::DoubleListType => { todo!(); } + crate::types::MetadataType::BoolListType => { + todo!(); + } } }; // This will be sorted by offset ids since rbms.insert() insert in sorted order. @@ -656,17 +697,13 @@ impl Operator for MetadataFilte Ok(offset_id) => { user_supplied_offset_ids.push(offset_id); } - Err(_) => { - return Err(MetadataFilteringError::MetadataFilteringRecordSegmentReaderError); - } + // It's ok for the user to supply a non existent id. + Err(_) => (), } } } - None => { - if !remaining_id_set.is_empty() { - return Err(MetadataFilteringError::MetadataFilteringInvalidInput); - } - } + // It's ok for the user to supply a non existent id. + None => (), } } None => { diff --git a/rust/worker/src/index/metadata/types.rs b/rust/worker/src/index/metadata/types.rs index e2035e3d628..74f809529cf 100644 --- a/rust/worker/src/index/metadata/types.rs +++ b/rust/worker/src/index/metadata/types.rs @@ -123,6 +123,43 @@ pub(crate) fn process_where_clause_with_callback< } } } + WhereComparison::SingleBoolComparison(operand, comparator) => { + match comparator { + WhereClauseComparator::Equal => { + let metadata_value_keywrapper = (*operand).try_into(); + match metadata_value_keywrapper { + Ok(keywrapper) => { + let result = callback( + &direct_where_comparison.key, + &keywrapper, + MetadataType::BoolType, + WhereClauseComparator::Equal, + ); + results = result.iter().map(|x| x as usize).collect(); + } + Err(_) => { + panic!("Error converting bool to keywrapper") + } + } + } + WhereClauseComparator::NotEqual => { + todo!(); + } + // We don't allow these comparators for booleans. + WhereClauseComparator::LessThan => { + unimplemented!(); + } + WhereClauseComparator::LessThanOrEqual => { + unimplemented!(); + } + WhereClauseComparator::GreaterThan => { + unimplemented!(); + } + WhereClauseComparator::GreaterThanOrEqual => { + unimplemented!(); + } + } + } WhereComparison::SingleIntComparison(operand, comparator) => match comparator { WhereClauseComparator::Equal => { let metadata_value_keywrapper = (*operand).try_into(); @@ -312,10 +349,12 @@ pub(crate) fn process_where_clause_with_callback< WhereComparison::DoubleListComparison(..) => { todo!(); } + WhereComparison::BoolListComparison(..) => { + todo!(); + } } } Where::WhereChildren(where_children) => { - // This feels like a crime. let mut first_iteration = true; for child in where_children.children.iter() { let child_results: Vec = diff --git a/rust/worker/src/segment/metadata_segment.rs b/rust/worker/src/segment/metadata_segment.rs index a8fa71aba85..ce3c0c0be69 100644 --- a/rust/worker/src/segment/metadata_segment.rs +++ b/rust/worker/src/segment/metadata_segment.rs @@ -468,6 +468,16 @@ impl<'log_records> SegmentWriter<'log_records> for MetadataSegmentWriter<'_> { None => {} } } + MetadataValue::Bool(value) => { + match &self.bool_metadata_index_writer { + Some(writer) => { + let _ = writer + .set(key, *value, segment_offset_id) + .await; + } + None => {} + } + } } } } @@ -539,6 +549,18 @@ impl<'log_records> SegmentWriter<'log_records> for MetadataSegmentWriter<'_> { } } } + MetadataValue::Bool(value) => { + match &self.bool_metadata_index_writer { + Some(writer) => { + let _ = writer + .delete(key, *value, segment_offset_id) + .await; + } + None => { + return Err(ApplyMaterializedLogError::BlockfileDeleteError); + } + } + } } } } @@ -705,6 +727,69 @@ impl<'log_records> SegmentWriter<'log_records> for MetadataSegmentWriter<'_> { } } } + MetadataValue::Bool(value) => { + match &self.bool_metadata_index_writer { + Some(writer) => { + match old_metadata { + // TODO this doesn't handle deletes + Some(old_metadata) => { + match old_metadata.get(key) { + Some(old_value) => match old_value { + MetadataValue::Bool(old_value) => { + match writer + .update( + key, + (*old_value).into(), + (*value).into(), + segment_offset_id, + ) + .await + { + Ok(_) => {} + Err(e) => { + tracing::error!( + "Error updating bool metadata index: {}", + e + ) + } + } + } + _ => { + tracing::error!( + "Invariant violation: previous value is not a bool" + ); + } + }, + None => { + match writer + .set( + key, + *value, + segment_offset_id, + ) + .await + { + Ok(_) => {} + Err(e) => { + tracing::error!( + "Error setting bool metadata index: {}", + e + ) + } + } + } + } + } + None => {} + }; + } + None => { + tracing::error!( + "No writer found for bool metadata index" + ); + } + } + } MetadataValue::Int(value) => { match &self.u32_metadata_index_writer { Some(writer) => { @@ -1282,6 +1367,61 @@ impl MetadataSegmentReader<'_> { } } } + WhereComparison::SingleBoolComparison(operand, comparator) => { + match comparator { + WhereClauseComparator::Equal => { + let metadata_value_keywrapper = (*operand).try_into(); + match metadata_value_keywrapper { + Ok(keywrapper) => { + match &self.bool_metadata_index_reader { + Some(reader) => { + let result = reader + .get( + &direct_where_comparison.key, + &keywrapper, + ) + .await; + match result { + Ok(r) => { + results = r + .iter() + .map(|x| x as usize) + .collect(); + } + Err(e) => { + return Err(e); + } + } + } + // This is expected. Before the first ever compaction + // the reader will be uninitialized, hence an empty vector + // here since nothing has been written to storage yet. + None => results = vec![], + } + } + Err(_) => { + panic!("Error converting bool to keywrapper") + } + } + } + WhereClauseComparator::NotEqual => { + todo!(); + } + // We don't allow these comparators for bools. + WhereClauseComparator::LessThan => { + unimplemented!(); + } + WhereClauseComparator::LessThanOrEqual => { + unimplemented!(); + } + WhereClauseComparator::GreaterThan => { + unimplemented!(); + } + WhereClauseComparator::GreaterThanOrEqual => { + unimplemented!(); + } + } + } WhereComparison::SingleIntComparison(operand, comparator) => { match comparator { WhereClauseComparator::Equal => { @@ -1655,6 +1795,9 @@ impl MetadataSegmentReader<'_> { WhereComparison::DoubleListComparison(..) => { todo!(); } + WhereComparison::BoolListComparison(..) => { + todo!(); + } } } Where::WhereChildren(where_children) => { diff --git a/rust/worker/src/types/metadata.rs b/rust/worker/src/types/metadata.rs index fdb229e7fa3..a0407d34b1b 100644 --- a/rust/worker/src/types/metadata.rs +++ b/rust/worker/src/types/metadata.rs @@ -10,6 +10,7 @@ pub(crate) enum UpdateMetadataValue { Int(i32), Float(f64), Str(String), + Bool(bool), None, } @@ -41,6 +42,10 @@ impl TryFrom<&chroma_proto::UpdateMetadataValue> for UpdateMetadataValue { Some(chroma_proto::update_metadata_value::Value::StringValue(value)) => { Ok(UpdateMetadataValue::Str(value.clone())) } + Some(chroma_proto::update_metadata_value::Value::BoolValue(value)) => { + Ok(UpdateMetadataValue::Bool(*value)) + } + // Used to communicate that the user wants to delete this key. None => Ok(UpdateMetadataValue::None), _ => Err(UpdateMetadataValueConversionError::InvalidValue), } @@ -65,6 +70,9 @@ impl From for chroma_proto::UpdateMetadataValue { value, )), }, + UpdateMetadataValue::Bool(value) => chroma_proto::UpdateMetadataValue { + value: Some(chroma_proto::update_metadata_value::Value::BoolValue(value)), + }, UpdateMetadataValue::None => chroma_proto::UpdateMetadataValue { value: None }, }; proto_value @@ -79,6 +87,7 @@ impl TryFrom<&UpdateMetadataValue> for MetadataValue { UpdateMetadataValue::Int(value) => Ok(MetadataValue::Int(*value)), UpdateMetadataValue::Float(value) => Ok(MetadataValue::Float(*value)), UpdateMetadataValue::Str(value) => Ok(MetadataValue::Str(value.clone())), + UpdateMetadataValue::Bool(value) => Ok(MetadataValue::Bool(*value)), UpdateMetadataValue::None => Err(MetadataValueConversionError::InvalidValue), } } @@ -95,6 +104,7 @@ pub(crate) enum MetadataValue { Int(i32), Float(f64), Str(String), + Bool(bool), } impl TryFrom<&MetadataValue> for i32 { @@ -119,6 +129,17 @@ impl TryFrom<&MetadataValue> for f64 { } } +impl TryFrom<&MetadataValue> for bool { + type Error = MetadataValueConversionError; + + fn try_from(value: &MetadataValue) -> Result { + match value { + MetadataValue::Bool(value) => Ok(*value), + _ => Err(MetadataValueConversionError::InvalidValue), + } + } +} + impl TryFrom<&MetadataValue> for String { type Error = MetadataValueConversionError; @@ -158,6 +179,9 @@ impl TryFrom<&chroma_proto::UpdateMetadataValue> for MetadataValue { Some(chroma_proto::update_metadata_value::Value::StringValue(value)) => { Ok(MetadataValue::Str(value.clone())) } + Some(chroma_proto::update_metadata_value::Value::BoolValue(value)) => { + Ok(MetadataValue::Bool(*value)) + } _ => Err(MetadataValueConversionError::InvalidValue), } } @@ -181,6 +205,9 @@ impl From for chroma_proto::UpdateMetadataValue { value, )), }, + MetadataValue::Bool(value) => chroma_proto::UpdateMetadataValue { + value: Some(chroma_proto::update_metadata_value::Value::BoolValue(value)), + }, }; proto_value } @@ -306,6 +333,8 @@ pub(crate) enum WhereComparison { StringListComparison(Vec, WhereClauseListOperator), IntListComparison(Vec, WhereClauseListOperator), DoubleListComparison(Vec, WhereClauseListOperator), + BoolListComparison(Vec, WhereClauseListOperator), + SingleBoolComparison(bool, WhereClauseComparator), } #[derive(Debug)] @@ -316,6 +345,8 @@ pub(crate) enum MetadataType { StringListType, IntListType, DoubleListType, + BoolListType, + BoolType, } #[derive(Clone, Debug, PartialEq)] @@ -430,6 +461,18 @@ impl TryFrom for WhereComparison { comparator.try_into()?, )) } + Some(chroma_proto::direct_comparison::Comparison::SingleBoolOperand(proto_bool)) => { + let comparator = match TryInto::::try_into( + proto_bool.comparator, + ) { + Ok(comparator) => comparator, + Err(_) => return Err(WhereConversionError::InvalidWhereComparison), + }; + Ok(WhereComparison::SingleBoolComparison( + proto_bool.value, + comparator.try_into()?, + )) + } Some(chroma_proto::direct_comparison::Comparison::SingleIntOperand(proto_int)) => { let comparator: WhereClauseComparator = match proto_int.comparator { Some(comparator) => match comparator { @@ -530,6 +573,18 @@ impl TryFrom for WhereComparison { list_operator.try_into()?, )) } + Some(chroma_proto::direct_comparison::Comparison::BoolListOperand(proto_list)) => { + let list_operator = + match TryInto::::try_into(proto_list.list_operator) + { + Ok(list_operator) => list_operator, + Err(_) => return Err(WhereConversionError::InvalidWhereComparison), + }; + Ok(WhereComparison::BoolListComparison( + proto_list.values, + list_operator.try_into()?, + )) + } None => Err(WhereConversionError::InvalidWhereComparison), } }