createCollection method

  1. @override
Future<CollectionInfo> createCollection(
  1. String docsName,
  2. List<Segment> segmentList,
  3. LLMSettings llmSettings
)
override

Implementation

@override
Future<CollectionInfo> createCollection(String docsName, List<Segment> segmentList, LLMSettings llmSettings) async {
  List<String> idList = [];
  List<String> documents = [];
  List<Map<String, dynamic>> metadataList = [];
  int size = segmentList.length;
  Uuid uuid = Uuid();
  String docsIdAsName = uuid.v4();

  for(int i=0; i< size; i++) {
    idList.add(uuid.v4());
    documents.add(segmentList[i].text);

    Map<String, dynamic> systemMetadata = {vdbKey: vdbValue, embeddingsModelKey: llmSettings.llmConfig.model};
    Map<String, dynamic> segmentMetadata = _convertToSegmentMetadata(systemMetadata, segmentList[i].metadata);

    metadataList.add(segmentMetadata);
  }

  Map<String, dynamic> collectionMetadata = {};
  collectionMetadata[segmentIdOrderKey] = jsonEncode(idList);
  collectionMetadata[docsNameKey] = docsName;

  EmbeddingFunction embeddingFunction = OpenAIEmbeddingFunction(llmConfig: llmSettings.llmConfig, listen: llmSettings.listenToken);

  try {
    Collection collection = await client.createCollection(
      name: docsIdAsName,
      metadata: collectionMetadata,
      embeddingFunction: embeddingFunction
    );
    await collection.add(
      ids: idList,
      documents: documents,
      metadatas: metadataList
    );
  } 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;
  }

  return CollectionInfo(name: docsIdAsName, docsName: docsName);
}