updateSegment method

  1. @override
Future<void> updateSegment(
  1. String collectionName,
  2. SegmentInfo segmentInfo,
  3. LLMSettings llmSettings
)
override

Implementation

@override
Future<void> updateSegment(String collectionName, SegmentInfo segmentInfo, LLMSettings llmSettings) async {
  EmbeddingFunction embeddingFunction = OpenAIEmbeddingFunction(llmConfig: llmSettings.llmConfig, listen: llmSettings.listenToken);
  try {
    Collection collection = await client.getCollection(name: collectionName, embeddingFunction: embeddingFunction);

    GetResponse getResponse = await collection.get(ids: [segmentInfo.id]);
    bool isTextUpdate = (getResponse.documents![0] != segmentInfo.text);
    bool isCustomMetadataNull = (segmentInfo.metadata == null);

    if(isTextUpdate && isCustomMetadataNull) {
      collection.update(
          ids: [segmentInfo.id],
          documents: [segmentInfo.text]
      );
    } else if(isTextUpdate && !isCustomMetadataNull) {
      Map<String, dynamic> metadata = getResponse.metadatas![0]!;
      metadata[customKey] = _updateCustomMetadataString(metadata[customKey]==null?"{}":metadata[customKey], segmentInfo.metadata!);
      collection.update(
          ids: [segmentInfo.id],
          documents: [segmentInfo.text],
          metadatas: [metadata]
      );
    } else if(!isTextUpdate && !isCustomMetadataNull) {
      Map<String, dynamic> metadata = getResponse.metadatas![0]!;
      metadata[customKey] = _updateCustomMetadataString(metadata[customKey]==null?"{}":metadata[customKey], segmentInfo.metadata!);
      List<double> embeddings = getResponse.embeddings![0];
      collection.update(
          ids: [segmentInfo.id],
          embeddings: [embeddings],
          metadatas: [metadata]
      );
      llmSettings.listenToken(TokenUsage(promptToken: 0, totalToken: 0));
    } else {
      llmSettings.listenToken(TokenUsage(promptToken: 0, totalToken: 0));
      // if(!isTextUpdate && isCustomMetadataNull) DO NOTHING
    }

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