embedding.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import "dart:convert";
  2. import "package:isar/isar.dart";
  3. part 'embedding.g.dart';
  4. @collection
  5. class Embedding {
  6. Id id = Isar.autoIncrement; // you can also use id = null to auto increment
  7. final int fileID;
  8. @enumerated
  9. final Model model;
  10. final List<double> embedding;
  11. int? updationTime;
  12. Embedding({
  13. required this.fileID,
  14. required this.model,
  15. required this.embedding,
  16. this.updationTime,
  17. });
  18. static List<double> decodeEmbedding(String embedding) {
  19. return List<double>.from(jsonDecode(embedding) as List);
  20. }
  21. static String encodeEmbedding(List<double> embedding) {
  22. return jsonEncode(embedding);
  23. }
  24. }
  25. enum Model {
  26. onnxClip,
  27. ggmlClip,
  28. }
  29. extension ModelExtension on Model {
  30. String get name => serialize(this);
  31. }
  32. String serialize(Model model) {
  33. switch (model) {
  34. case Model.onnxClip:
  35. return 'onnx-clip';
  36. case Model.ggmlClip:
  37. return 'ggml-clip';
  38. default:
  39. throw Exception('$model is not a valid Model');
  40. }
  41. }
  42. Model deserialize(String model) {
  43. switch (model) {
  44. case 'onnx-clip':
  45. return Model.onnxClip;
  46. case 'ggml-clip':
  47. return Model.ggmlClip;
  48. default:
  49. throw Exception('$model is not a valid Model');
  50. }
  51. }