diff --git a/chromadb/proto/coordinator_pb2.py b/chromadb/proto/coordinator_pb2.py index 45e95958415..9dbe71d02e0 100644 --- a/chromadb/proto/coordinator_pb2.py +++ b/chromadb/proto/coordinator_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n chromadb/proto/coordinator.proto\x12\x06\x63hroma\x1a\x1b\x63hromadb/proto/chroma.proto\x1a\x1bgoogle/protobuf/empty.proto\"A\n\x15\x43reateDatabaseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06tenant\x18\x03 \x01(\t\"&\n\x16\x43reateDatabaseResponseJ\x04\x08\x01\x10\x02R\x06status\"2\n\x12GetDatabaseRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06tenant\x18\x02 \x01(\t\"G\n\x13GetDatabaseResponse\x12\"\n\x08\x64\x61tabase\x18\x01 \x01(\x0b\x32\x10.chroma.DatabaseJ\x04\x08\x02\x10\x03R\x06status\"#\n\x13\x43reateTenantRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\"$\n\x14\x43reateTenantResponseJ\x04\x08\x01\x10\x02R\x06status\" \n\x10GetTenantRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"A\n\x11GetTenantResponse\x12\x1e\n\x06tenant\x18\x01 \x01(\x0b\x32\x0e.chroma.TenantJ\x04\x08\x02\x10\x03R\x06status\"8\n\x14\x43reateSegmentRequest\x12 \n\x07segment\x18\x01 \x01(\x0b\x32\x0f.chroma.Segment\"%\n\x15\x43reateSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"6\n\x14\x44\x65leteSegmentRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ncollection\x18\x02 \x01(\t\"%\n\x15\x44\x65leteSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"\x90\x01\n\x12GetSegmentsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04type\x18\x02 \x01(\tH\x01\x88\x01\x01\x12(\n\x05scope\x18\x03 \x01(\x0e\x32\x14.chroma.SegmentScopeH\x02\x88\x01\x01\x12\x12\n\ncollection\x18\x04 \x01(\tB\x05\n\x03_idB\x07\n\x05_typeB\x08\n\x06_scope\"F\n\x13GetSegmentsResponse\x12!\n\x08segments\x18\x01 \x03(\x0b\x32\x0f.chroma.SegmentJ\x04\x08\x02\x10\x03R\x06status\"\x8f\x01\n\x14UpdateSegmentRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ncollection\x18\x04 \x01(\t\x12*\n\x08metadata\x18\x06 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x12\x18\n\x0ereset_metadata\x18\x07 \x01(\x08H\x00\x42\x11\n\x0fmetadata_update\"%\n\x15UpdateSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"\xa8\x02\n\x17\x43reateCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1e\n\x16\x63onfiguration_json_str\x18\x03 \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\x1a\n\rget_or_create\x18\x06 \x01(\x08H\x02\x88\x01\x01\x12\x0e\n\x06tenant\x18\x07 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x08 \x01(\t\x12!\n\x08segments\x18\t \x03(\x0b\x32\x0f.chroma.SegmentB\x0b\n\t_metadataB\x0c\n\n_dimensionB\x10\n\x0e_get_or_create\"a\n\x18\x43reateCollectionResponse\x12&\n\ncollection\x18\x01 \x01(\x0b\x32\x12.chroma.Collection\x12\x0f\n\x07\x63reated\x18\x02 \x01(\x08J\x04\x08\x03\x10\x04R\x06status\"\\\n\x17\x44\x65leteCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06tenant\x18\x02 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x03 \x01(\t\x12\x13\n\x0bsegment_ids\x18\x04 \x03(\t\"(\n\x18\x44\x65leteCollectionResponseJ\x04\x08\x01\x10\x02R\x06status\"\xab\x01\n\x15GetCollectionsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06tenant\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x12\n\x05limit\x18\x06 \x01(\x05H\x02\x88\x01\x01\x12\x13\n\x06offset\x18\x07 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x08\n\x06_limitB\t\n\x07_offset\"O\n\x16GetCollectionsResponse\x12\'\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x12.chroma.CollectionJ\x04\x08\x02\x10\x03R\x06status\"1\n\x17\x43heckCollectionsRequest\x12\x16\n\x0e\x63ollection_ids\x18\x01 \x03(\t\"+\n\x18\x43heckCollectionsResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x03(\x08\"\xc0\x01\n\x17UpdateCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tdimension\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12*\n\x08metadata\x18\x05 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x12\x18\n\x0ereset_metadata\x18\x06 \x01(\x08H\x00\x42\x11\n\x0fmetadata_updateB\x07\n\x05_nameB\x0c\n\n_dimension\"(\n\x18UpdateCollectionResponseJ\x04\x08\x01\x10\x02R\x06status\"\"\n\x12ResetStateResponseJ\x04\x08\x01\x10\x02R\x06status\":\n%GetLastCompactionTimeForTenantRequest\x12\x11\n\ttenant_id\x18\x01 \x03(\t\"K\n\x18TenantLastCompactionTime\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x1c\n\x14last_compaction_time\x18\x02 \x01(\x03\"o\n&GetLastCompactionTimeForTenantResponse\x12\x45\n\x1btenant_last_compaction_time\x18\x01 \x03(\x0b\x32 .chroma.TenantLastCompactionTime\"n\n%SetLastCompactionTimeForTenantRequest\x12\x45\n\x1btenant_last_compaction_time\x18\x01 \x01(\x0b\x32 .chroma.TenantLastCompactionTime\"\xbc\x01\n\x1a\x46lushSegmentCompactionInfo\x12\x12\n\nsegment_id\x18\x01 \x01(\t\x12\x45\n\nfile_paths\x18\x02 \x03(\x0b\x32\x31.chroma.FlushSegmentCompactionInfo.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\"\xc3\x01\n FlushCollectionCompactionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x15\n\rcollection_id\x18\x02 \x01(\t\x12\x14\n\x0clog_position\x18\x03 \x01(\x03\x12\x1a\n\x12\x63ollection_version\x18\x04 \x01(\x05\x12\x43\n\x17segment_compaction_info\x18\x05 \x03(\x0b\x32\".chroma.FlushSegmentCompactionInfo\"t\n!FlushCollectionCompactionResponse\x12\x15\n\rcollection_id\x18\x01 \x01(\t\x12\x1a\n\x12\x63ollection_version\x18\x02 \x01(\x05\x12\x1c\n\x14last_compaction_time\x18\x03 \x01(\x03\x32\xcd\x0b\n\x05SysDB\x12Q\n\x0e\x43reateDatabase\x12\x1d.chroma.CreateDatabaseRequest\x1a\x1e.chroma.CreateDatabaseResponse\"\x00\x12H\n\x0bGetDatabase\x12\x1a.chroma.GetDatabaseRequest\x1a\x1b.chroma.GetDatabaseResponse\"\x00\x12K\n\x0c\x43reateTenant\x12\x1b.chroma.CreateTenantRequest\x1a\x1c.chroma.CreateTenantResponse\"\x00\x12\x42\n\tGetTenant\x12\x18.chroma.GetTenantRequest\x1a\x19.chroma.GetTenantResponse\"\x00\x12N\n\rCreateSegment\x12\x1c.chroma.CreateSegmentRequest\x1a\x1d.chroma.CreateSegmentResponse\"\x00\x12N\n\rDeleteSegment\x12\x1c.chroma.DeleteSegmentRequest\x1a\x1d.chroma.DeleteSegmentResponse\"\x00\x12H\n\x0bGetSegments\x12\x1a.chroma.GetSegmentsRequest\x1a\x1b.chroma.GetSegmentsResponse\"\x00\x12N\n\rUpdateSegment\x12\x1c.chroma.UpdateSegmentRequest\x1a\x1d.chroma.UpdateSegmentResponse\"\x00\x12W\n\x10\x43reateCollection\x12\x1f.chroma.CreateCollectionRequest\x1a .chroma.CreateCollectionResponse\"\x00\x12W\n\x10\x44\x65leteCollection\x12\x1f.chroma.DeleteCollectionRequest\x1a .chroma.DeleteCollectionResponse\"\x00\x12Q\n\x0eGetCollections\x12\x1d.chroma.GetCollectionsRequest\x1a\x1e.chroma.GetCollectionsResponse\"\x00\x12W\n\x10\x43heckCollections\x12\x1f.chroma.CheckCollectionsRequest\x1a .chroma.CheckCollectionsResponse\"\x00\x12W\n\x10UpdateCollection\x12\x1f.chroma.UpdateCollectionRequest\x1a .chroma.UpdateCollectionResponse\"\x00\x12\x42\n\nResetState\x12\x16.google.protobuf.Empty\x1a\x1a.chroma.ResetStateResponse\"\x00\x12\x81\x01\n\x1eGetLastCompactionTimeForTenant\x12-.chroma.GetLastCompactionTimeForTenantRequest\x1a..chroma.GetLastCompactionTimeForTenantResponse\"\x00\x12i\n\x1eSetLastCompactionTimeForTenant\x12-.chroma.SetLastCompactionTimeForTenantRequest\x1a\x16.google.protobuf.Empty\"\x00\x12r\n\x19\x46lushCollectionCompaction\x12(.chroma.FlushCollectionCompactionRequest\x1a).chroma.FlushCollectionCompactionResponse\"\x00\x42:Z8github.com/chroma-core/chroma/go/pkg/proto/coordinatorpbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n chromadb/proto/coordinator.proto\x12\x06\x63hroma\x1a\x1b\x63hromadb/proto/chroma.proto\x1a\x1bgoogle/protobuf/empty.proto\"A\n\x15\x43reateDatabaseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06tenant\x18\x03 \x01(\t\"&\n\x16\x43reateDatabaseResponseJ\x04\x08\x01\x10\x02R\x06status\"2\n\x12GetDatabaseRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06tenant\x18\x02 \x01(\t\"G\n\x13GetDatabaseResponse\x12\"\n\x08\x64\x61tabase\x18\x01 \x01(\x0b\x32\x10.chroma.DatabaseJ\x04\x08\x02\x10\x03R\x06status\"#\n\x13\x43reateTenantRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\"$\n\x14\x43reateTenantResponseJ\x04\x08\x01\x10\x02R\x06status\" \n\x10GetTenantRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"A\n\x11GetTenantResponse\x12\x1e\n\x06tenant\x18\x01 \x01(\x0b\x32\x0e.chroma.TenantJ\x04\x08\x02\x10\x03R\x06status\"8\n\x14\x43reateSegmentRequest\x12 \n\x07segment\x18\x01 \x01(\x0b\x32\x0f.chroma.Segment\"%\n\x15\x43reateSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"6\n\x14\x44\x65leteSegmentRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ncollection\x18\x02 \x01(\t\"%\n\x15\x44\x65leteSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"\x90\x01\n\x12GetSegmentsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04type\x18\x02 \x01(\tH\x01\x88\x01\x01\x12(\n\x05scope\x18\x03 \x01(\x0e\x32\x14.chroma.SegmentScopeH\x02\x88\x01\x01\x12\x12\n\ncollection\x18\x04 \x01(\tB\x05\n\x03_idB\x07\n\x05_typeB\x08\n\x06_scope\"F\n\x13GetSegmentsResponse\x12!\n\x08segments\x18\x01 \x03(\x0b\x32\x0f.chroma.SegmentJ\x04\x08\x02\x10\x03R\x06status\"\x8f\x01\n\x14UpdateSegmentRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ncollection\x18\x04 \x01(\t\x12*\n\x08metadata\x18\x06 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x12\x18\n\x0ereset_metadata\x18\x07 \x01(\x08H\x00\x42\x11\n\x0fmetadata_update\"%\n\x15UpdateSegmentResponseJ\x04\x08\x01\x10\x02R\x06status\"\xa8\x02\n\x17\x43reateCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1e\n\x16\x63onfiguration_json_str\x18\x03 \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\x1a\n\rget_or_create\x18\x06 \x01(\x08H\x02\x88\x01\x01\x12\x0e\n\x06tenant\x18\x07 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x08 \x01(\t\x12!\n\x08segments\x18\t \x03(\x0b\x32\x0f.chroma.SegmentB\x0b\n\t_metadataB\x0c\n\n_dimensionB\x10\n\x0e_get_or_create\"a\n\x18\x43reateCollectionResponse\x12&\n\ncollection\x18\x01 \x01(\x0b\x32\x12.chroma.Collection\x12\x0f\n\x07\x63reated\x18\x02 \x01(\x08J\x04\x08\x03\x10\x04R\x06status\"\\\n\x17\x44\x65leteCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06tenant\x18\x02 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x03 \x01(\t\x12\x13\n\x0bsegment_ids\x18\x04 \x03(\t\"(\n\x18\x44\x65leteCollectionResponseJ\x04\x08\x01\x10\x02R\x06status\"\xab\x01\n\x15GetCollectionsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06tenant\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x12\n\x05limit\x18\x06 \x01(\x05H\x02\x88\x01\x01\x12\x13\n\x06offset\x18\x07 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x08\n\x06_limitB\t\n\x07_offset\"O\n\x16GetCollectionsResponse\x12\'\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x12.chroma.CollectionJ\x04\x08\x02\x10\x03R\x06status\".\n GetCollectionWithSegmentsRequest\x12\n\n\x02id\x18\x01 \x01(\t\"n\n!GetCollectionWithSegmentsResponse\x12&\n\ncollection\x18\x01 \x01(\x0b\x32\x12.chroma.Collection\x12!\n\x08segments\x18\x02 \x03(\x0b\x32\x0f.chroma.Segment\"1\n\x17\x43heckCollectionsRequest\x12\x16\n\x0e\x63ollection_ids\x18\x01 \x03(\t\"+\n\x18\x43heckCollectionsResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x03(\x08\"\xc0\x01\n\x17UpdateCollectionRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tdimension\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12*\n\x08metadata\x18\x05 \x01(\x0b\x32\x16.chroma.UpdateMetadataH\x00\x12\x18\n\x0ereset_metadata\x18\x06 \x01(\x08H\x00\x42\x11\n\x0fmetadata_updateB\x07\n\x05_nameB\x0c\n\n_dimension\"(\n\x18UpdateCollectionResponseJ\x04\x08\x01\x10\x02R\x06status\"\"\n\x12ResetStateResponseJ\x04\x08\x01\x10\x02R\x06status\":\n%GetLastCompactionTimeForTenantRequest\x12\x11\n\ttenant_id\x18\x01 \x03(\t\"K\n\x18TenantLastCompactionTime\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x1c\n\x14last_compaction_time\x18\x02 \x01(\x03\"o\n&GetLastCompactionTimeForTenantResponse\x12\x45\n\x1btenant_last_compaction_time\x18\x01 \x03(\x0b\x32 .chroma.TenantLastCompactionTime\"n\n%SetLastCompactionTimeForTenantRequest\x12\x45\n\x1btenant_last_compaction_time\x18\x01 \x01(\x0b\x32 .chroma.TenantLastCompactionTime\"\xbc\x01\n\x1a\x46lushSegmentCompactionInfo\x12\x12\n\nsegment_id\x18\x01 \x01(\t\x12\x45\n\nfile_paths\x18\x02 \x03(\x0b\x32\x31.chroma.FlushSegmentCompactionInfo.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\"\xc3\x01\n FlushCollectionCompactionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x15\n\rcollection_id\x18\x02 \x01(\t\x12\x14\n\x0clog_position\x18\x03 \x01(\x03\x12\x1a\n\x12\x63ollection_version\x18\x04 \x01(\x05\x12\x43\n\x17segment_compaction_info\x18\x05 \x03(\x0b\x32\".chroma.FlushSegmentCompactionInfo\"t\n!FlushCollectionCompactionResponse\x12\x15\n\rcollection_id\x18\x01 \x01(\t\x12\x1a\n\x12\x63ollection_version\x18\x02 \x01(\x05\x12\x1c\n\x14last_compaction_time\x18\x03 \x01(\x03\x32\xc1\x0c\n\x05SysDB\x12Q\n\x0e\x43reateDatabase\x12\x1d.chroma.CreateDatabaseRequest\x1a\x1e.chroma.CreateDatabaseResponse\"\x00\x12H\n\x0bGetDatabase\x12\x1a.chroma.GetDatabaseRequest\x1a\x1b.chroma.GetDatabaseResponse\"\x00\x12K\n\x0c\x43reateTenant\x12\x1b.chroma.CreateTenantRequest\x1a\x1c.chroma.CreateTenantResponse\"\x00\x12\x42\n\tGetTenant\x12\x18.chroma.GetTenantRequest\x1a\x19.chroma.GetTenantResponse\"\x00\x12N\n\rCreateSegment\x12\x1c.chroma.CreateSegmentRequest\x1a\x1d.chroma.CreateSegmentResponse\"\x00\x12N\n\rDeleteSegment\x12\x1c.chroma.DeleteSegmentRequest\x1a\x1d.chroma.DeleteSegmentResponse\"\x00\x12H\n\x0bGetSegments\x12\x1a.chroma.GetSegmentsRequest\x1a\x1b.chroma.GetSegmentsResponse\"\x00\x12N\n\rUpdateSegment\x12\x1c.chroma.UpdateSegmentRequest\x1a\x1d.chroma.UpdateSegmentResponse\"\x00\x12W\n\x10\x43reateCollection\x12\x1f.chroma.CreateCollectionRequest\x1a .chroma.CreateCollectionResponse\"\x00\x12W\n\x10\x44\x65leteCollection\x12\x1f.chroma.DeleteCollectionRequest\x1a .chroma.DeleteCollectionResponse\"\x00\x12Q\n\x0eGetCollections\x12\x1d.chroma.GetCollectionsRequest\x1a\x1e.chroma.GetCollectionsResponse\"\x00\x12r\n\x19GetCollectionWithSegments\x12(.chroma.GetCollectionWithSegmentsRequest\x1a).chroma.GetCollectionWithSegmentsResponse\"\x00\x12W\n\x10\x43heckCollections\x12\x1f.chroma.CheckCollectionsRequest\x1a .chroma.CheckCollectionsResponse\"\x00\x12W\n\x10UpdateCollection\x12\x1f.chroma.UpdateCollectionRequest\x1a .chroma.UpdateCollectionResponse\"\x00\x12\x42\n\nResetState\x12\x16.google.protobuf.Empty\x1a\x1a.chroma.ResetStateResponse\"\x00\x12\x81\x01\n\x1eGetLastCompactionTimeForTenant\x12-.chroma.GetLastCompactionTimeForTenantRequest\x1a..chroma.GetLastCompactionTimeForTenantResponse\"\x00\x12i\n\x1eSetLastCompactionTimeForTenant\x12-.chroma.SetLastCompactionTimeForTenantRequest\x1a\x16.google.protobuf.Empty\"\x00\x12r\n\x19\x46lushCollectionCompaction\x12(.chroma.FlushCollectionCompactionRequest\x1a).chroma.FlushCollectionCompactionResponse\"\x00\x42:Z8github.com/chroma-core/chroma/go/pkg/proto/coordinatorpbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -70,32 +70,36 @@ _globals['_GETCOLLECTIONSREQUEST']._serialized_end=1812 _globals['_GETCOLLECTIONSRESPONSE']._serialized_start=1814 _globals['_GETCOLLECTIONSRESPONSE']._serialized_end=1893 - _globals['_CHECKCOLLECTIONSREQUEST']._serialized_start=1895 - _globals['_CHECKCOLLECTIONSREQUEST']._serialized_end=1944 - _globals['_CHECKCOLLECTIONSRESPONSE']._serialized_start=1946 - _globals['_CHECKCOLLECTIONSRESPONSE']._serialized_end=1989 - _globals['_UPDATECOLLECTIONREQUEST']._serialized_start=1992 - _globals['_UPDATECOLLECTIONREQUEST']._serialized_end=2184 - _globals['_UPDATECOLLECTIONRESPONSE']._serialized_start=2186 - _globals['_UPDATECOLLECTIONRESPONSE']._serialized_end=2226 - _globals['_RESETSTATERESPONSE']._serialized_start=2228 - _globals['_RESETSTATERESPONSE']._serialized_end=2262 - _globals['_GETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_start=2264 - _globals['_GETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_end=2322 - _globals['_TENANTLASTCOMPACTIONTIME']._serialized_start=2324 - _globals['_TENANTLASTCOMPACTIONTIME']._serialized_end=2399 - _globals['_GETLASTCOMPACTIONTIMEFORTENANTRESPONSE']._serialized_start=2401 - _globals['_GETLASTCOMPACTIONTIMEFORTENANTRESPONSE']._serialized_end=2512 - _globals['_SETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_start=2514 - _globals['_SETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_end=2624 - _globals['_FLUSHSEGMENTCOMPACTIONINFO']._serialized_start=2627 - _globals['_FLUSHSEGMENTCOMPACTIONINFO']._serialized_end=2815 - _globals['_FLUSHSEGMENTCOMPACTIONINFO_FILEPATHSENTRY']._serialized_start=2748 - _globals['_FLUSHSEGMENTCOMPACTIONINFO_FILEPATHSENTRY']._serialized_end=2815 - _globals['_FLUSHCOLLECTIONCOMPACTIONREQUEST']._serialized_start=2818 - _globals['_FLUSHCOLLECTIONCOMPACTIONREQUEST']._serialized_end=3013 - _globals['_FLUSHCOLLECTIONCOMPACTIONRESPONSE']._serialized_start=3015 - _globals['_FLUSHCOLLECTIONCOMPACTIONRESPONSE']._serialized_end=3131 - _globals['_SYSDB']._serialized_start=3134 - _globals['_SYSDB']._serialized_end=4619 + _globals['_GETCOLLECTIONWITHSEGMENTSREQUEST']._serialized_start=1895 + _globals['_GETCOLLECTIONWITHSEGMENTSREQUEST']._serialized_end=1941 + _globals['_GETCOLLECTIONWITHSEGMENTSRESPONSE']._serialized_start=1943 + _globals['_GETCOLLECTIONWITHSEGMENTSRESPONSE']._serialized_end=2053 + _globals['_CHECKCOLLECTIONSREQUEST']._serialized_start=2055 + _globals['_CHECKCOLLECTIONSREQUEST']._serialized_end=2104 + _globals['_CHECKCOLLECTIONSRESPONSE']._serialized_start=2106 + _globals['_CHECKCOLLECTIONSRESPONSE']._serialized_end=2149 + _globals['_UPDATECOLLECTIONREQUEST']._serialized_start=2152 + _globals['_UPDATECOLLECTIONREQUEST']._serialized_end=2344 + _globals['_UPDATECOLLECTIONRESPONSE']._serialized_start=2346 + _globals['_UPDATECOLLECTIONRESPONSE']._serialized_end=2386 + _globals['_RESETSTATERESPONSE']._serialized_start=2388 + _globals['_RESETSTATERESPONSE']._serialized_end=2422 + _globals['_GETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_start=2424 + _globals['_GETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_end=2482 + _globals['_TENANTLASTCOMPACTIONTIME']._serialized_start=2484 + _globals['_TENANTLASTCOMPACTIONTIME']._serialized_end=2559 + _globals['_GETLASTCOMPACTIONTIMEFORTENANTRESPONSE']._serialized_start=2561 + _globals['_GETLASTCOMPACTIONTIMEFORTENANTRESPONSE']._serialized_end=2672 + _globals['_SETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_start=2674 + _globals['_SETLASTCOMPACTIONTIMEFORTENANTREQUEST']._serialized_end=2784 + _globals['_FLUSHSEGMENTCOMPACTIONINFO']._serialized_start=2787 + _globals['_FLUSHSEGMENTCOMPACTIONINFO']._serialized_end=2975 + _globals['_FLUSHSEGMENTCOMPACTIONINFO_FILEPATHSENTRY']._serialized_start=2908 + _globals['_FLUSHSEGMENTCOMPACTIONINFO_FILEPATHSENTRY']._serialized_end=2975 + _globals['_FLUSHCOLLECTIONCOMPACTIONREQUEST']._serialized_start=2978 + _globals['_FLUSHCOLLECTIONCOMPACTIONREQUEST']._serialized_end=3173 + _globals['_FLUSHCOLLECTIONCOMPACTIONRESPONSE']._serialized_start=3175 + _globals['_FLUSHCOLLECTIONCOMPACTIONRESPONSE']._serialized_end=3291 + _globals['_SYSDB']._serialized_start=3294 + _globals['_SYSDB']._serialized_end=4895 # @@protoc_insertion_point(module_scope) diff --git a/chromadb/proto/coordinator_pb2.pyi b/chromadb/proto/coordinator_pb2.pyi index 4c10bb4a4bf..f5e2ad966c7 100644 --- a/chromadb/proto/coordinator_pb2.pyi +++ b/chromadb/proto/coordinator_pb2.pyi @@ -181,6 +181,20 @@ class GetCollectionsResponse(_message.Message): collections: _containers.RepeatedCompositeFieldContainer[_chroma_pb2.Collection] def __init__(self, collections: _Optional[_Iterable[_Union[_chroma_pb2.Collection, _Mapping]]] = ...) -> None: ... +class GetCollectionWithSegmentsRequest(_message.Message): + __slots__ = ["id"] + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class GetCollectionWithSegmentsResponse(_message.Message): + __slots__ = ["collection", "segments"] + COLLECTION_FIELD_NUMBER: _ClassVar[int] + SEGMENTS_FIELD_NUMBER: _ClassVar[int] + collection: _chroma_pb2.Collection + segments: _containers.RepeatedCompositeFieldContainer[_chroma_pb2.Segment] + def __init__(self, collection: _Optional[_Union[_chroma_pb2.Collection, _Mapping]] = ..., segments: _Optional[_Iterable[_Union[_chroma_pb2.Segment, _Mapping]]] = ...) -> None: ... + class CheckCollectionsRequest(_message.Message): __slots__ = ["collection_ids"] COLLECTION_IDS_FIELD_NUMBER: _ClassVar[int] diff --git a/chromadb/proto/coordinator_pb2_grpc.py b/chromadb/proto/coordinator_pb2_grpc.py index 557c834f24b..da5e8a43853 100644 --- a/chromadb/proto/coordinator_pb2_grpc.py +++ b/chromadb/proto/coordinator_pb2_grpc.py @@ -70,6 +70,11 @@ def __init__(self, channel): request_serializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionsRequest.SerializeToString, response_deserializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionsResponse.FromString, ) + self.GetCollectionWithSegments = channel.unary_unary( + '/chroma.SysDB/GetCollectionWithSegments', + request_serializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsRequest.SerializeToString, + response_deserializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsResponse.FromString, + ) self.CheckCollections = channel.unary_unary( '/chroma.SysDB/CheckCollections', request_serializer=chromadb_dot_proto_dot_coordinator__pb2.CheckCollectionsRequest.SerializeToString, @@ -171,6 +176,12 @@ def GetCollections(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetCollectionWithSegments(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CheckCollections(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -265,6 +276,11 @@ def add_SysDBServicer_to_server(servicer, server): request_deserializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionsRequest.FromString, response_serializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionsResponse.SerializeToString, ), + 'GetCollectionWithSegments': grpc.unary_unary_rpc_method_handler( + servicer.GetCollectionWithSegments, + request_deserializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsRequest.FromString, + response_serializer=chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsResponse.SerializeToString, + ), 'CheckCollections': grpc.unary_unary_rpc_method_handler( servicer.CheckCollections, request_deserializer=chromadb_dot_proto_dot_coordinator__pb2.CheckCollectionsRequest.FromString, @@ -492,6 +508,23 @@ def GetCollections(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetCollectionWithSegments(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/chroma.SysDB/GetCollectionWithSegments', + chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsRequest.SerializeToString, + chromadb_dot_proto_dot_coordinator__pb2.GetCollectionWithSegmentsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def CheckCollections(request, target, diff --git a/go/pkg/sysdb/coordinator/coordinator.go b/go/pkg/sysdb/coordinator/coordinator.go index b6378e73a1e..e440c0a07c9 100644 --- a/go/pkg/sysdb/coordinator/coordinator.go +++ b/go/pkg/sysdb/coordinator/coordinator.go @@ -103,6 +103,10 @@ func (s *Coordinator) GetCollections(ctx context.Context, collectionID types.Uni return s.catalog.GetCollections(ctx, collectionID, collectionName, tenantID, databaseName, limit, offset) } +func (s *Coordinator) GetCollectionWithSegments(ctx context.Context, collectionID types.UniqueID) (*model.Collection, []*model.Segment, error) { + return s.catalog.GetCollectionWithSegments(ctx, collectionID) +} + func (s *Coordinator) CheckCollection(ctx context.Context, collectionID types.UniqueID) (bool, error) { return s.catalog.CheckCollection(ctx, collectionID) } diff --git a/go/pkg/sysdb/coordinator/coordinator_test.go b/go/pkg/sysdb/coordinator/coordinator_test.go index 624dfb2767d..16d4bdb42a7 100644 --- a/go/pkg/sysdb/coordinator/coordinator_test.go +++ b/go/pkg/sysdb/coordinator/coordinator_test.go @@ -306,6 +306,21 @@ func (suite *APIsTestSuite) TestCreateCollectionAndSegments() { suite.Equal(segment.ID, segmentResult[0].ID) } + // The same information should be returned by the GetCollectionWithSegments endpoint + collection, collection_segments, error := suite.coordinator.GetCollectionWithSegments(ctx, newCollection.ID) + suite.NoError(error) + suite.Equal(newCollection.ID, collection.ID) + suite.Equal(newCollection.Name, collection.Name) + expected_ids, actual_ids := []types.UniqueID{}, []types.UniqueID{} + for _, segment := range segments { + expected_ids = append(expected_ids, segment.ID) + } + for _, segment := range collection_segments { + suite.Equal(collection.ID, segment.CollectionID) + actual_ids = append(actual_ids, segment.ID) + } + suite.ElementsMatch(expected_ids, actual_ids) + // Attempt to create a duplicate collection (should fail) _, _, err = suite.coordinator.CreateCollectionAndSegments(ctx, newCollection, segments) suite.Error(err) diff --git a/go/pkg/sysdb/coordinator/table_catalog.go b/go/pkg/sysdb/coordinator/table_catalog.go index 684376f5a8c..94d8ef2cd2c 100644 --- a/go/pkg/sysdb/coordinator/table_catalog.go +++ b/go/pkg/sysdb/coordinator/table_catalog.go @@ -338,6 +338,43 @@ func (tc *Catalog) GetCollections(ctx context.Context, collectionID types.Unique return collections, nil } +func (tc *Catalog) GetCollectionWithSegments(ctx context.Context, collectionID types.UniqueID) (*model.Collection, []*model.Segment, error) { + tracer := otel.Tracer + if tracer != nil { + _, span := tracer.Start(ctx, "Catalog.GetCollections") + defer span.End() + } + + var collection *model.Collection + var segments []*model.Segment + + err := tc.txImpl.Transaction(ctx, func(txCtx context.Context) error { + collections, e := tc.GetCollections(ctx, collectionID, nil, "", "", nil, nil) + if e != nil { + return e + } + if len(collections) == 0 { + return common.ErrCollectionNotFound + } + if len(collections) > 1 { + return common.ErrCollectionUniqueConstraintViolation + } + collection = collections[0] + + segments, e = tc.GetSegments(ctx, types.NilUniqueID(), nil, nil, collectionID) + if e != nil { + return e + } + + return nil + }) + if err != nil { + return nil, nil, err + } + + return collection, segments, nil +} + func (tc *Catalog) DeleteCollection(ctx context.Context, deleteCollection *model.DeleteCollection, softDelete bool) error { if softDelete { return tc.softDeleteCollection(ctx, deleteCollection) diff --git a/go/pkg/sysdb/grpc/collection_service.go b/go/pkg/sysdb/grpc/collection_service.go index 89d92a6283f..e6757477e4b 100644 --- a/go/pkg/sysdb/grpc/collection_service.go +++ b/go/pkg/sysdb/grpc/collection_service.go @@ -3,6 +3,7 @@ package grpc import ( "context" "encoding/json" + "fmt" "github.com/chroma-core/chroma/go/pkg/grpcutils" @@ -169,6 +170,52 @@ func (s *Server) CheckCollections(ctx context.Context, req *coordinatorpb.CheckC return res, nil } +func (s *Server) GetCollectionWithSegments(ctx context.Context, req *coordinatorpb.GetCollectionWithSegmentsRequest) (*coordinatorpb.GetCollectionWithSegmentsResponse, error) { + collectionID := req.Id + + res := &coordinatorpb.GetCollectionWithSegmentsResponse{} + + parsedCollectionID, err := types.ToUniqueID(&collectionID) + if err != nil { + log.Error("GetCollectionWithSegments failed. collection id format error", zap.Error(err), zap.String("collection_id", collectionID)) + return res, grpcutils.BuildInternalGrpcError(err.Error()) + } + + collection, segments, err := s.coordinator.GetCollectionWithSegments(ctx, parsedCollectionID) + if err != nil { + log.Error("GetCollectionWithSegments failed. ", zap.Error(err), zap.String("collection_id", collectionID)) + return res, grpcutils.BuildInternalGrpcError(err.Error()) + } + + res.Collection = convertCollectionToProto(collection) + segmentpbList := make([]*coordinatorpb.Segment, 0, len(segments)) + scopeToSegmentMap := map[coordinatorpb.SegmentScope]*coordinatorpb.Segment{} + for _, segment := range segments { + segmentpb := convertSegmentToProto(segment) + scopeToSegmentMap[segmentpb.GetScope()] = segmentpb + segmentpbList = append(segmentpbList, segmentpb) + } + + if len(segmentpbList) != 3 { + log.Error("GetCollectionWithSegments failed. Unexpected number of collection segments", zap.String("collection_id", collectionID)) + return res, grpcutils.BuildInternalGrpcError(fmt.Sprintf("Unexpected number of segments for collection %s: %d", collectionID, len(segmentpbList))) + } + + scopes := []coordinatorpb.SegmentScope{coordinatorpb.SegmentScope_METADATA, coordinatorpb.SegmentScope_RECORD, coordinatorpb.SegmentScope_VECTOR} + + for _, scope := range scopes { + if _, exists := scopeToSegmentMap[scope]; !exists { + log.Error("GetCollectionWithSegments failed. Collection segment scope not found", zap.String("collection_id", collectionID), zap.String("missing_scope", scope.String())) + return res, grpcutils.BuildInternalGrpcError(fmt.Sprintf("Missing segment scope for collection %s: %s", collectionID, scope.String())) + } + } + + res.Segments = segmentpbList + + log.Info("GetCollectionWithSegments succeeded", zap.String("request", req.String()), zap.String("response", res.String())) + return res, nil +} + func (s *Server) DeleteCollection(ctx context.Context, req *coordinatorpb.DeleteCollectionRequest) (*coordinatorpb.DeleteCollectionResponse, error) { collectionID := req.GetId() res := &coordinatorpb.DeleteCollectionResponse{} diff --git a/go/pkg/sysdb/grpc/collection_service_test.go b/go/pkg/sysdb/grpc/collection_service_test.go index a88db3b91d1..a003e59621b 100644 --- a/go/pkg/sysdb/grpc/collection_service_test.go +++ b/go/pkg/sysdb/grpc/collection_service_test.go @@ -81,16 +81,19 @@ func testCollection(t *rapid.T) { var collectionsWithErrors []*coordinatorpb.Collection t.Repeat(map[string]func(*rapid.T){ - "create_collection": func(t *rapid.T) { + "create_get_collection": func(t *rapid.T) { stringValue := generateStringMetadataValue(t) intValue := generateInt64MetadataValue(t) floatValue := generateFloat64MetadataValue(t) getOrCreate := false + collectionId := rapid.StringMatching(`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`).Draw(t, "collection_id") + collectionName := rapid.String().Draw(t, "collection_name") + createCollectionRequest := rapid.Custom[*coordinatorpb.CreateCollectionRequest](func(t *rapid.T) *coordinatorpb.CreateCollectionRequest { return &coordinatorpb.CreateCollectionRequest{ - Id: rapid.StringMatching(`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`).Draw(t, "collection_id"), - Name: rapid.String().Draw(t, "collection_name"), + Id: collectionId, + Name: collectionName, Metadata: &coordinatorpb.UpdateMetadata{ Metadata: map[string]*coordinatorpb.UpdateMetadataValue{ "string_value": stringValue, @@ -99,6 +102,26 @@ func testCollection(t *rapid.T) { }, }, GetOrCreate: &getOrCreate, + Segments: []*coordinatorpb.Segment{ + { + Id: rapid.StringMatching(`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`).Draw(t, "metadata_segment_id"), + Type: "metadata_segment_type", + Scope: coordinatorpb.SegmentScope_METADATA, + Collection: collectionId, + }, + { + Id: rapid.StringMatching(`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`).Draw(t, "record_segment_id"), + Type: "record_segment_type", + Scope: coordinatorpb.SegmentScope_RECORD, + Collection: collectionId, + }, + { + Id: rapid.StringMatching(`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`).Draw(t, "vector_segment_id"), + Type: "vector_segment_type", + Scope: coordinatorpb.SegmentScope_VECTOR, + Collection: collectionId, + }, + }, } }).Draw(t, "create_collection_request") @@ -114,29 +137,57 @@ func testCollection(t *rapid.T) { } } - getCollectionsRequest := coordinatorpb.GetCollectionsRequest{ - Id: &createCollectionRequest.Id, - } if err == nil { + getCollectionsRequest := coordinatorpb.GetCollectionsRequest{ + Id: &createCollectionRequest.Id, + } // verify the correctness - GetCollectionsResponse, err := s.GetCollections(ctx, &getCollectionsRequest) + getCollectionsResponse, err := s.GetCollections(ctx, &getCollectionsRequest) if err != nil { t.Fatalf("error getting collections: %v", err) } - collectionList := GetCollectionsResponse.GetCollections() + collectionList := getCollectionsResponse.GetCollections() if len(collectionList) != 1 { - t.Fatalf("More than 1 collection with the same collection id") + t.Fatalf("there should be exactly one matching collection given the collection id") + } + if collectionList[0].Id != createCollectionRequest.Id { + t.Fatalf("collection id mismatch") + } + + getCollectionWithSegmentsRequest := coordinatorpb.GetCollectionWithSegmentsRequest{ + Id: createCollectionRequest.Id, + } + + getCollectionWithSegmentsResponse, err := s.GetCollectionWithSegments(ctx, &getCollectionWithSegmentsRequest) + if err != nil { + t.Fatalf("error getting collection with segments: %v", err) + } + + if getCollectionWithSegmentsResponse.Collection.Id != res.Collection.Id { + t.Fatalf("collection id mismatch") + } + + if len(getCollectionWithSegmentsResponse.Segments) != 3 { + t.Fatalf("unexpected number of segments in collection: %v", getCollectionWithSegmentsResponse.Segments) } - for _, collection := range collectionList { - if collection.Id != createCollectionRequest.Id { - t.Fatalf("collection id is the right value") + + scopeToSegmentMap := map[coordinatorpb.SegmentScope]*coordinatorpb.Segment{} + for _, segment := range getCollectionWithSegmentsResponse.Segments { + if segment.Collection != res.Collection.Id { + t.Fatalf("invalid collection id in segment") + } + scopeToSegmentMap[segment.GetScope()] = segment + } + scopes := []coordinatorpb.SegmentScope{coordinatorpb.SegmentScope_METADATA, coordinatorpb.SegmentScope_RECORD, coordinatorpb.SegmentScope_VECTOR} + for _, scope := range scopes { + if _, exists := scopeToSegmentMap[scope]; !exists { + t.Fatalf("collection segment scope not found: %s", scope.String()) } } + state = append(state, res.Collection) } }, - "get_collections": func(t *rapid.T) { - }, }) } diff --git a/idl/chromadb/proto/coordinator.proto b/idl/chromadb/proto/coordinator.proto index 1e41a474046..564b2e501b2 100644 --- a/idl/chromadb/proto/coordinator.proto +++ b/idl/chromadb/proto/coordinator.proto @@ -143,6 +143,15 @@ message GetCollectionsResponse { reserved "status"; } +message GetCollectionWithSegmentsRequest { + string id = 1; +} + +message GetCollectionWithSegmentsResponse { + Collection collection = 1; + repeated Segment segments = 2; +} + message CheckCollectionsRequest { repeated string collection_ids = 1; } @@ -219,6 +228,7 @@ service SysDB { rpc CreateCollection(CreateCollectionRequest) returns (CreateCollectionResponse) {} rpc DeleteCollection(DeleteCollectionRequest) returns (DeleteCollectionResponse) {} rpc GetCollections(GetCollectionsRequest) returns (GetCollectionsResponse) {} + rpc GetCollectionWithSegments(GetCollectionWithSegmentsRequest) returns (GetCollectionWithSegmentsResponse) {} rpc CheckCollections(CheckCollectionsRequest) returns (CheckCollectionsResponse) {} rpc UpdateCollection(UpdateCollectionRequest) returns (UpdateCollectionResponse) {} rpc ResetState(google.protobuf.Empty) returns (ResetStateResponse) {}