updateSegment method
Future<void>
updateSegment(
- String collectionName,
- SegmentInfo segmentInfo,
- 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;
}
}