insertSegment method
Future<String>
insertSegment(
- String collectionName,
- Segment segment,
- int? index,
- 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;
}
}