ente/mobile/lib/models/embedding.dart

65 lines
1.3 KiB
Dart
Raw Normal View History

2023-09-22 15:39:03 +00:00
import "dart:convert";
2024-01-04 14:55:16 +00:00
import "package:isar/isar.dart";
2024-01-04 14:55:16 +00:00
part 'embedding.g.dart';
@collection
2023-09-22 15:39:03 +00:00
class Embedding {
static const index = 'unique_file_model_embedding';
Id id = Isar.autoIncrement;
2023-10-03 17:46:09 +00:00
final int fileID;
2024-01-04 14:55:16 +00:00
@enumerated
@Index(name: index, composite: [CompositeIndex('fileID')], unique: true, replace: true)
2024-01-04 14:55:16 +00:00
final Model model;
2023-09-22 15:39:03 +00:00
final List<double> embedding;
2023-10-03 18:13:08 +00:00
int? updationTime;
2023-09-22 15:39:03 +00:00
Embedding({
required this.fileID,
required this.model,
required this.embedding,
2023-10-03 18:13:08 +00:00
this.updationTime,
});
2023-09-22 15:39:03 +00:00
static List<double> decodeEmbedding(String embedding) {
return List<double>.from(jsonDecode(embedding) as List);
}
static String encodeEmbedding(List<double> embedding) {
return jsonEncode(embedding);
}
}
2024-01-04 14:55:16 +00:00
enum Model {
onnxClip,
ggmlClip,
}
extension ModelExtension on Model {
String get name => serialize(this);
}
String serialize(Model model) {
switch (model) {
case Model.onnxClip:
return 'onnx-clip';
case Model.ggmlClip:
return 'ggml-clip';
default:
throw Exception('$model is not a valid Model');
}
}
Model deserialize(String model) {
switch (model) {
case 'onnx-clip':
return Model.onnxClip;
case 'ggml-clip':
return Model.ggmlClip;
default:
throw Exception('$model is not a valid Model');
}
}