insertSegment method

  1. @override
Future<String> insertSegment(
  1. String collectionName,
  2. Segment segment,
  3. int? index,
  4. LLMSettings llmSettings,
)
override

Implementation

@override
Future<String> insertSegment(String collectionName, Segment segment, int? index, LLMSettings llmSettings) async {
  try {
    String segmentId = Uuid().v4();
    EmbeddingFunction embeddingFunction = OpenAIEmbeddingFunction(llmConfig: llmSettings.llmConfig, listen: llmSettings.listenToken);
    Collection collection = await client.getCollection(name: collectionName, embeddingFunction: embeddingFunction);

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

    collection.add(ids: [segmentId], documents: [segment.text], metadatas: [segmentMetadata]);

    Map<String, dynamic> docsMetadata = Map<String, dynamic>.from(collection.metadata!);

    List<String> segmentIdOrder = (jsonDecode(docsMetadata[segmentIdOrderKey])  as List<dynamic>).map((segmentId)=> (segmentId as String)).toList();
    if(index == null || index >= segmentIdOrder.length) {
      segmentIdOrder.add(segmentId);
    } else {
      segmentIdOrder.insert(index, segmentId);
    }

    docsMetadata[segmentIdOrderKey] = jsonEncode(segmentIdOrder);
    await collection.modify(name: collectionName, metadata: docsMetadata);

    return segmentId;
  } 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;
  }
}