listSegments method

  1. @override
Future<CollectionResult?> listSegments(
  1. String collectionName
)
override

Implementation

@override
Future<CollectionResult?> listSegments(String collectionName) async {
  try {
    Collection collection = await client.getCollection(name: collectionName);//, embeddingFunction: embeddingFunction);
    String segmentIdOrderString = collection.metadata![segmentIdOrderKey];
    List<String> segmentIdOrder = List<String>.from(jsonDecode(segmentIdOrderString));
    GetResponse getResponse = await collection.get();

    if(getResponse.documents == null) return null;

    // Build segmentId-indexId Map, for fetching indexId quickly
    List<String> idList = getResponse.ids;
    Map<String, int> idMap = {};
    for(int i=0; i< idList.length; i++) {
      String id = idList[i];
      idMap[id] = i;
    }

    List<SegmentInfo> segmentList = [];
    for (String segmentId in segmentIdOrder) {
      int i = idMap[segmentId]!;  // fetch indexId quickly

      SegmentInfo segment = SegmentInfo(
        id: getResponse.ids[i],
        text: getResponse.documents![i]!,
        metadata: (getResponse.metadatas?[i] == null)?{}:_convertToFlatMetadata(getResponse.metadatas![i]!)
      );
      segmentList.add(segment);
    }

    return CollectionResult(name: collectionName, docsName: collection.metadata![docsNameKey], segmentList: segmentList);
  } on ChromaApiClientException catch(e) {
    VectorDatabaseException vdbException = VectorDatabaseException(
        code: e.code??500,
        message: e.message + ": " + (e.body is String ? (e.body as String) : e.body.toString())
    );
    throw vdbException;
  }
}