Benchmark face embeddings

This commit is contained in:
laurenspriem
2025-04-09 13:43:39 +05:30
parent 2ed155ab47
commit 4e5ca3dca6
8 changed files with 616 additions and 529 deletions

View File

@@ -1,6 +1,8 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: require_trailing_commas
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';

View File

@@ -1,6 +1,8 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: require_trailing_commas
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
@@ -12,10 +14,11 @@ import 'package:photos/src/rust/frb_generated.dart';
abstract class VectorDb implements RustOpaqueInterface {
Future<void> addVector({required BigInt key, required List<double> vector});
Future<void> bulkAddVectors({
required Uint64List keys,
required List<Float32List> vectors,
});
Future<void> bulkAddVectors(
{required Uint64List keys, required List<Float32List> vectors});
Future<List<Uint64List>> bulkSearchVectors(
{required List<Float32List> queries, required BigInt count});
Future<void> deleteIndex();
@@ -25,16 +28,12 @@ abstract class VectorDb implements RustOpaqueInterface {
factory VectorDb({required String filePath, required BigInt dimensions}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbNew(
filePath: filePath,
dimensions: dimensions,
);
filePath: filePath, dimensions: dimensions);
Future<BigInt> removeVector({required BigInt key});
Future<void> resetIndex();
Future<(Uint64List, Float32List)> searchVectors({
required List<double> query,
required BigInt count,
});
Future<(Uint64List, Float32List)> searchVectors(
{required List<double> query, required BigInt count});
}

View File

@@ -1,6 +1,8 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: require_trailing_commas
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'dart:async';
@@ -70,7 +72,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.9.0';
@override
int get rustContentHash => 862168794;
int get rustContentHash => -674813457;
static const kDefaultExternalLibraryLoaderConfig =
ExternalLibraryLoaderConfig(
@@ -81,45 +83,41 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
}
abstract class RustLibApi extends BaseApi {
Future<void> crateApiUsearchApiVectorDbAddVector({
required VectorDb that,
required BigInt key,
required List<double> vector,
});
Future<void> crateApiUsearchApiVectorDbAddVector(
{required VectorDb that,
required BigInt key,
required List<double> vector});
Future<void> crateApiUsearchApiVectorDbBulkAddVectors({
required VectorDb that,
required Uint64List keys,
required List<Float32List> vectors,
});
Future<void> crateApiUsearchApiVectorDbBulkAddVectors(
{required VectorDb that,
required Uint64List keys,
required List<Float32List> vectors});
Future<List<Uint64List>> crateApiUsearchApiVectorDbBulkSearchVectors(
{required VectorDb that,
required List<Float32List> queries,
required BigInt count});
Future<void> crateApiUsearchApiVectorDbDeleteIndex({required VectorDb that});
Future<(BigInt, BigInt, BigInt, BigInt, BigInt)>
crateApiUsearchApiVectorDbGetIndexStats({required VectorDb that});
Future<Float32List> crateApiUsearchApiVectorDbGetVector({
required VectorDb that,
required BigInt key,
});
Future<Float32List> crateApiUsearchApiVectorDbGetVector(
{required VectorDb that, required BigInt key});
VectorDb crateApiUsearchApiVectorDbNew({
required String filePath,
required BigInt dimensions,
});
VectorDb crateApiUsearchApiVectorDbNew(
{required String filePath, required BigInt dimensions});
Future<BigInt> crateApiUsearchApiVectorDbRemoveVector({
required VectorDb that,
required BigInt key,
});
Future<BigInt> crateApiUsearchApiVectorDbRemoveVector(
{required VectorDb that, required BigInt key});
Future<void> crateApiUsearchApiVectorDbResetIndex({required VectorDb that});
Future<(Uint64List, Float32List)> crateApiUsearchApiVectorDbSearchVectors({
required VectorDb that,
required List<double> query,
required BigInt count,
});
Future<(Uint64List, Float32List)> crateApiUsearchApiVectorDbSearchVectors(
{required VectorDb that,
required List<double> query,
required BigInt count});
String crateApiSimpleGreet({required String name});
@@ -143,37 +141,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
});
@override
Future<void> crateApiUsearchApiVectorDbAddVector({
required VectorDb that,
required BigInt key,
required List<double> vector,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
sse_encode_u_64(key, serializer);
sse_encode_list_prim_f_32_loose(vector, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 1,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbAddVectorConstMeta,
argValues: [that, key, vector],
apiImpl: this,
Future<void> crateApiUsearchApiVectorDbAddVector(
{required VectorDb that,
required BigInt key,
required List<double> vector}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_u_64(key, serializer);
sse_encode_list_prim_f_32_loose(vector, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 1, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbAddVectorConstMeta,
argValues: [that, key, vector],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbAddVectorConstMeta =>
@@ -183,37 +172,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
Future<void> crateApiUsearchApiVectorDbBulkAddVectors({
required VectorDb that,
required Uint64List keys,
required List<Float32List> vectors,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
sse_encode_list_prim_u_64_strict(keys, serializer);
sse_encode_list_list_prim_f_32_strict(vectors, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 2,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbBulkAddVectorsConstMeta,
argValues: [that, keys, vectors],
apiImpl: this,
Future<void> crateApiUsearchApiVectorDbBulkAddVectors(
{required VectorDb that,
required Uint64List keys,
required List<Float32List> vectors}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_list_prim_u_64_strict(keys, serializer);
sse_encode_list_list_prim_f_32_strict(vectors, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 2, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbBulkAddVectorsConstMeta,
argValues: [that, keys, vectors],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbBulkAddVectorsConstMeta =>
@@ -223,31 +203,54 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
Future<void> crateApiUsearchApiVectorDbDeleteIndex({required VectorDb that}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 3,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbDeleteIndexConstMeta,
argValues: [that],
apiImpl: this,
Future<List<Uint64List>> crateApiUsearchApiVectorDbBulkSearchVectors(
{required VectorDb that,
required List<Float32List> queries,
required BigInt count}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_list_list_prim_f_32_strict(queries, serializer);
sse_encode_usize(count, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 3, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_list_prim_u_64_strict,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbBulkSearchVectorsConstMeta,
argValues: [that, queries, count],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbBulkSearchVectorsConstMeta =>
const TaskConstMeta(
debugName: "VectorDb_bulk_search_vectors",
argNames: ["that", "queries", "count"],
);
@override
Future<void> crateApiUsearchApiVectorDbDeleteIndex({required VectorDb that}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 4, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbDeleteIndexConstMeta,
argValues: [that],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbDeleteIndexConstMeta =>
@@ -259,30 +262,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@override
Future<(BigInt, BigInt, BigInt, BigInt, BigInt)>
crateApiUsearchApiVectorDbGetIndexStats({required VectorDb that}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 4,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_record_usize_usize_usize_usize_usize,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbGetIndexStatsConstMeta,
argValues: [that],
apiImpl: this,
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 5, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_record_usize_usize_usize_usize_usize,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbGetIndexStatsConstMeta,
argValues: [that],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbGetIndexStatsConstMeta =>
@@ -292,35 +287,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
Future<Float32List> crateApiUsearchApiVectorDbGetVector({
required VectorDb that,
required BigInt key,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
sse_encode_u_64(key, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 5,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_prim_f_32_strict,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbGetVectorConstMeta,
argValues: [that, key],
apiImpl: this,
Future<Float32List> crateApiUsearchApiVectorDbGetVector(
{required VectorDb that, required BigInt key}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_u_64(key, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 6, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_list_prim_f_32_strict,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbGetVectorConstMeta,
argValues: [that, key],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbGetVectorConstMeta =>
@@ -330,28 +315,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
VectorDb crateApiUsearchApiVectorDbNew({
required String filePath,
required BigInt dimensions,
}) {
return handler.executeSync(
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(filePath, serializer);
sse_encode_usize(dimensions, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 6)!;
},
codec: SseCodec(
decodeSuccessData:
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbNewConstMeta,
argValues: [filePath, dimensions],
apiImpl: this,
VectorDb crateApiUsearchApiVectorDbNew(
{required String filePath, required BigInt dimensions}) {
return handler.executeSync(SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(filePath, serializer);
sse_encode_usize(dimensions, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 7)!;
},
codec: SseCodec(
decodeSuccessData:
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbNewConstMeta,
argValues: [filePath, dimensions],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbNewConstMeta =>
@@ -361,35 +342,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
Future<BigInt> crateApiUsearchApiVectorDbRemoveVector({
required VectorDb that,
required BigInt key,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
sse_encode_u_64(key, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 7,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_usize,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbRemoveVectorConstMeta,
argValues: [that, key],
apiImpl: this,
Future<BigInt> crateApiUsearchApiVectorDbRemoveVector(
{required VectorDb that, required BigInt key}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_u_64(key, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 8, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_usize,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbRemoveVectorConstMeta,
argValues: [that, key],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbRemoveVectorConstMeta =>
@@ -400,30 +371,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@override
Future<void> crateApiUsearchApiVectorDbResetIndex({required VectorDb that}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 8,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbResetIndexConstMeta,
argValues: [that],
apiImpl: this,
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 9, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbResetIndexConstMeta,
argValues: [that],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbResetIndexConstMeta =>
@@ -433,38 +396,29 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
Future<(Uint64List, Float32List)> crateApiUsearchApiVectorDbSearchVectors({
required VectorDb that,
required List<double> query,
required BigInt count,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that,
serializer,
);
sse_encode_list_prim_f_32_loose(query, serializer);
sse_encode_usize(count, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 9,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData:
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict,
decodeErrorData: null,
),
constMeta: kCrateApiUsearchApiVectorDbSearchVectorsConstMeta,
argValues: [that, query, count],
apiImpl: this,
Future<(Uint64List, Float32List)> crateApiUsearchApiVectorDbSearchVectors(
{required VectorDb that,
required List<double> query,
required BigInt count}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
that, serializer);
sse_encode_list_prim_f_32_loose(query, serializer);
sse_encode_usize(count, serializer);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 10, port: port_);
},
codec: SseCodec(
decodeSuccessData:
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict,
decodeErrorData: null,
),
);
constMeta: kCrateApiUsearchApiVectorDbSearchVectorsConstMeta,
argValues: [that, query, count],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiUsearchApiVectorDbSearchVectorsConstMeta =>
@@ -475,22 +429,20 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@override
String crateApiSimpleGreet({required String name}) {
return handler.executeSync(
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(name, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 10)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
decodeErrorData: null,
),
constMeta: kCrateApiSimpleGreetConstMeta,
argValues: [name],
apiImpl: this,
return handler.executeSync(SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(name, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 11)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
decodeErrorData: null,
),
);
constMeta: kCrateApiSimpleGreetConstMeta,
argValues: [name],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiSimpleGreetConstMeta => const TaskConstMeta(
@@ -500,26 +452,20 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@override
Future<void> crateApiSimpleInitApp() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 11,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiSimpleInitAppConstMeta,
argValues: [],
apiImpl: this,
return handler.executeNormal(NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(generalizedFrbRustBinding, serializer,
funcId: 12, port: port_);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
);
constMeta: kCrateApiSimpleInitAppConstMeta,
argValues: [],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiSimpleInitAppConstMeta => const TaskConstMeta(
@@ -538,8 +484,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
VectorDb
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
) {
dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return VectorDbImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@@ -547,8 +492,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
VectorDb
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
) {
dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return VectorDbImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@@ -556,8 +500,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
VectorDb
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
) {
dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return VectorDbImpl.frbInternalDcoDecode(raw as List<dynamic>);
}
@@ -582,6 +525,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
.toList();
}
@protected
List<Uint64List> dco_decode_list_list_prim_u_64_strict(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return (raw as List<dynamic>)
.map(dco_decode_list_prim_u_64_strict)
.toList();
}
@protected
List<double> dco_decode_list_prim_f_32_loose(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -666,37 +617,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
VectorDb
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return VectorDbImpl.frbInternalSseDecode(
sse_decode_usize(deserializer),
sse_decode_i_32(deserializer),
);
sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
VectorDb
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return VectorDbImpl.frbInternalSseDecode(
sse_decode_usize(deserializer),
sse_decode_i_32(deserializer),
);
sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
VectorDb
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return VectorDbImpl.frbInternalSseDecode(
sse_decode_usize(deserializer),
sse_decode_i_32(deserializer),
);
sse_decode_usize(deserializer), sse_decode_i_32(deserializer));
}
@protected
@@ -714,8 +656,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
List<Float32List> sse_decode_list_list_prim_f_32_strict(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
final len_ = sse_decode_i_32(deserializer);
@@ -726,6 +667,19 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return ans_;
}
@protected
List<Uint64List> sse_decode_list_list_prim_u_64_strict(
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
final len_ = sse_decode_i_32(deserializer);
final ans_ = <Uint64List>[];
for (var idx_ = 0; idx_ < len_; ++idx_) {
ans_.add(sse_decode_list_prim_u_64_strict(deserializer));
}
return ans_;
}
@protected
List<double> sse_decode_list_prim_f_32_loose(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -757,8 +711,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
(Uint64List, Float32List)
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
final var_field0 = sse_decode_list_prim_u_64_strict(deserializer);
final var_field1 = sse_decode_list_prim_f_32_strict(deserializer);
@@ -768,8 +721,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
sse_decode_record_usize_usize_usize_usize_usize(
SseDeserializer deserializer,
) {
SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
final var_field0 = sse_decode_usize(deserializer);
final var_field1 = sse_decode_usize(deserializer);
@@ -817,40 +769,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
) {
VectorDb self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize(
(self as VectorDbImpl).frbInternalSseEncode(move: true),
serializer,
);
(self as VectorDbImpl).frbInternalSseEncode(move: true), serializer);
}
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
) {
VectorDb self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize(
(self as VectorDbImpl).frbInternalSseEncode(move: false),
serializer,
);
(self as VectorDbImpl).frbInternalSseEncode(move: false), serializer);
}
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
) {
VectorDb self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize(
(self as VectorDbImpl).frbInternalSseEncode(move: null),
serializer,
);
(self as VectorDbImpl).frbInternalSseEncode(move: null), serializer);
}
@protected
@@ -867,9 +807,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void sse_encode_list_list_prim_f_32_strict(
List<Float32List> self,
SseSerializer serializer,
) {
List<Float32List> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
for (final item in self) {
@@ -877,23 +815,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
void sse_encode_list_list_prim_u_64_strict(
List<Uint64List> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
for (final item in self) {
sse_encode_list_prim_u_64_strict(item, serializer);
}
}
@protected
void sse_encode_list_prim_f_32_loose(
List<double> self,
SseSerializer serializer,
) {
List<double> self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putFloat32List(
self is Float32List ? self : Float32List.fromList(self),
);
self is Float32List ? self : Float32List.fromList(self));
}
@protected
void sse_encode_list_prim_f_32_strict(
Float32List self,
SseSerializer serializer,
) {
Float32List self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putFloat32List(self);
@@ -901,9 +844,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void sse_encode_list_prim_u_64_strict(
Uint64List self,
SseSerializer serializer,
) {
Uint64List self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putUint64List(self);
@@ -911,9 +852,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List self,
SseSerializer serializer,
) {
Uint8List self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.length, serializer);
serializer.buffer.putUint8List(self);
@@ -921,9 +860,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void sse_encode_record_list_prim_u_64_strict_list_prim_f_32_strict(
(Uint64List, Float32List) self,
SseSerializer serializer,
) {
(Uint64List, Float32List) self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_list_prim_u_64_strict(self.$1, serializer);
sse_encode_list_prim_f_32_strict(self.$2, serializer);
@@ -931,9 +868,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
@protected
void sse_encode_record_usize_usize_usize_usize_usize(
(BigInt, BigInt, BigInt, BigInt, BigInt) self,
SseSerializer serializer,
) {
(BigInt, BigInt, BigInt, BigInt, BigInt) self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_usize(self.$1, serializer);
sse_encode_usize(self.$2, serializer);
@@ -999,20 +934,17 @@ class VectorDbImpl extends RustOpaque implements VectorDb {
Future<void> addVector({required BigInt key, required List<double> vector}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbAddVector(
that: this,
key: key,
vector: vector,
);
that: this, key: key, vector: vector);
Future<void> bulkAddVectors({
required Uint64List keys,
required List<Float32List> vectors,
}) =>
Future<void> bulkAddVectors(
{required Uint64List keys, required List<Float32List> vectors}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbBulkAddVectors(
that: this,
keys: keys,
vectors: vectors,
);
that: this, keys: keys, vectors: vectors);
Future<List<Uint64List>> bulkSearchVectors(
{required List<Float32List> queries, required BigInt count}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbBulkSearchVectors(
that: this, queries: queries, count: count);
Future<void> deleteIndex() =>
RustLib.instance.api.crateApiUsearchApiVectorDbDeleteIndex(
@@ -1035,13 +967,8 @@ class VectorDbImpl extends RustOpaque implements VectorDb {
that: this,
);
Future<(Uint64List, Float32List)> searchVectors({
required List<double> query,
required BigInt count,
}) =>
Future<(Uint64List, Float32List)> searchVectors(
{required List<double> query, required BigInt count}) =>
RustLib.instance.api.crateApiUsearchApiVectorDbSearchVectors(
that: this,
query: query,
count: count,
);
that: this, query: query, count: count);
}

View File

@@ -1,6 +1,8 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: require_trailing_commas
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'dart:async';
@@ -26,20 +28,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
VectorDb
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
VectorDb
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
VectorDb
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@@ -50,6 +49,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
List<Float32List> dco_decode_list_list_prim_f_32_strict(dynamic raw);
@protected
List<Uint64List> dco_decode_list_list_prim_u_64_strict(dynamic raw);
@protected
List<double> dco_decode_list_prim_f_32_loose(dynamic raw);
@@ -87,20 +89,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
VectorDb
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
VectorDb
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
VectorDb
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -110,8 +109,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
List<Float32List> sse_decode_list_list_prim_f_32_strict(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
List<Uint64List> sse_decode_list_list_prim_u_64_strict(
SseDeserializer deserializer);
@protected
List<double> sse_decode_list_prim_f_32_loose(SseDeserializer deserializer);
@@ -128,14 +130,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
(Uint64List, Float32List)
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
sse_decode_record_usize_usize_usize_usize_usize(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
BigInt sse_decode_u_64(SseDeserializer deserializer);
@@ -158,23 +158,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -184,45 +178,35 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_list_list_prim_f_32_strict(
List<Float32List> self,
SseSerializer serializer,
);
List<Float32List> self, SseSerializer serializer);
@protected
void sse_encode_list_list_prim_u_64_strict(
List<Uint64List> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_f_32_loose(
List<double> self,
SseSerializer serializer,
);
List<double> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_f_32_strict(
Float32List self,
SseSerializer serializer,
);
Float32List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_64_strict(
Uint64List self,
SseSerializer serializer,
);
Uint64List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List self,
SseSerializer serializer,
);
Uint8List self, SseSerializer serializer);
@protected
void sse_encode_record_list_prim_u_64_strict_list_prim_f_32_strict(
(Uint64List, Float32List) self,
SseSerializer serializer,
);
(Uint64List, Float32List) self, SseSerializer serializer);
@protected
void sse_encode_record_usize_usize_usize_usize_usize(
(BigInt, BigInt, BigInt, BigInt, BigInt) self,
SseSerializer serializer,
);
(BigInt, BigInt, BigInt, BigInt, BigInt) self, SseSerializer serializer);
@protected
void sse_encode_u_64(BigInt self, SseSerializer serializer);
@@ -268,8 +252,7 @@ class RustLibWire implements BaseWire {
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB',
);
'frbgen_photos_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB');
late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB =
_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
@@ -285,8 +268,7 @@ class RustLibWire implements BaseWire {
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
'frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB',
);
'frbgen_photos_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB');
late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB =
_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDBPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();

View File

@@ -1,6 +1,8 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: require_trailing_commas
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
// Static analysis wrongly picks the IO variant, thus ignore this
@@ -28,20 +30,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
VectorDb
dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
VectorDb
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
VectorDb
dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
dynamic raw,
);
dynamic raw);
@protected
String dco_decode_String(dynamic raw);
@@ -52,6 +51,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
List<Float32List> dco_decode_list_list_prim_f_32_strict(dynamic raw);
@protected
List<Uint64List> dco_decode_list_list_prim_u_64_strict(dynamic raw);
@protected
List<double> dco_decode_list_prim_f_32_loose(dynamic raw);
@@ -89,20 +91,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
VectorDb
sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
VectorDb
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
VectorDb
sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
String sse_decode_String(SseDeserializer deserializer);
@@ -112,8 +111,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
List<Float32List> sse_decode_list_list_prim_f_32_strict(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
List<Uint64List> sse_decode_list_list_prim_u_64_strict(
SseDeserializer deserializer);
@protected
List<double> sse_decode_list_prim_f_32_loose(SseDeserializer deserializer);
@@ -130,14 +132,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
(Uint64List, Float32List)
sse_decode_record_list_prim_u_64_strict_list_prim_f_32_strict(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
(BigInt, BigInt, BigInt, BigInt, BigInt)
sse_decode_record_usize_usize_usize_usize_usize(
SseDeserializer deserializer,
);
SseDeserializer deserializer);
@protected
BigInt sse_decode_u_64(SseDeserializer deserializer);
@@ -160,23 +160,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void
sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void
sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
VectorDb self,
SseSerializer serializer,
);
VectorDb self, SseSerializer serializer);
@protected
void sse_encode_String(String self, SseSerializer serializer);
@@ -186,45 +180,35 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_list_list_prim_f_32_strict(
List<Float32List> self,
SseSerializer serializer,
);
List<Float32List> self, SseSerializer serializer);
@protected
void sse_encode_list_list_prim_u_64_strict(
List<Uint64List> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_f_32_loose(
List<double> self,
SseSerializer serializer,
);
List<double> self, SseSerializer serializer);
@protected
void sse_encode_list_prim_f_32_strict(
Float32List self,
SseSerializer serializer,
);
Float32List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_64_strict(
Uint64List self,
SseSerializer serializer,
);
Uint64List self, SseSerializer serializer);
@protected
void sse_encode_list_prim_u_8_strict(
Uint8List self,
SseSerializer serializer,
);
Uint8List self, SseSerializer serializer);
@protected
void sse_encode_record_list_prim_u_64_strict_list_prim_f_32_strict(
(Uint64List, Float32List) self,
SseSerializer serializer,
);
(Uint64List, Float32List) self, SseSerializer serializer);
@protected
void sse_encode_record_usize_usize_usize_usize_usize(
(BigInt, BigInt, BigInt, BigInt, BigInt) self,
SseSerializer serializer,
);
(BigInt, BigInt, BigInt, BigInt, BigInt) self, SseSerializer serializer);
@protected
void sse_encode_u_64(BigInt self, SseSerializer serializer);
@@ -250,23 +234,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
class RustLibWire implements BaseWire {
RustLibWire.fromExternalLibrary(ExternalLibrary lib);
void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
) =>
wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr) =>
wasmModule
.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr);
void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
) =>
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr,
);
void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr) =>
wasmModule
.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
ptr);
}
@JS('wasm_bindgen')
@@ -277,11 +255,9 @@ external RustLibWasmModule get wasmModule;
extension type RustLibWasmModule._(JSObject _) implements JSObject {
external void
rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
);
int ptr);
external void
rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerVectorDB(
int ptr,
);
int ptr);
}

View File

@@ -1,13 +1,17 @@
import "dart:async";
import "dart:typed_data" show Float32List;
import "package:flutter/foundation.dart" show kDebugMode;
import 'package:flutter/material.dart';
import "package:flutter_rust_bridge/flutter_rust_bridge.dart";
import "package:logging/logging.dart";
import "package:ml_linalg/linalg.dart";
import "package:path_provider/path_provider.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/db/ml/db.dart";
import "package:photos/events/people_changed_event.dart";
import "package:photos/extensions/stop_watch.dart";
import "package:photos/generated/protos/ente/common/vector.pb.dart";
import "package:photos/models/ml/face/person.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
@@ -119,6 +123,105 @@ class _MLDebugSectionWidgetState extends State<MLDebugSectionWidget> {
},
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: const CaptionedTextWidget(
title: "Benchmark Vector DB Face",
),
pressedColor: getEnteColorScheme(context).fillFaint,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
try {
final w = (kDebugMode ? EnteWatch('MLDebugSectionWidget') : null)
?..start();
final persons = await PersonService.instance.getPersons();
w?.log('get all persons for ${persons.length} persons');
String laurensID = '';
for (final person in persons) {
if (person.data.name.toLowerCase().contains('laurens')) {
laurensID = person.remoteID;
}
}
if (laurensID.isEmpty) {
throw Exception('Laurens not found');
}
final laurensFaceIDs =
await MLDataDB.instance.getFaceIDsForPerson(laurensID);
w?.log(
'getting all face ids for laurens (${laurensFaceIDs.length} faces)',
);
final laurensFaceIdToEmbeddingData = await MLDataDB.instance
.getFaceEmbeddingMapForFaces(laurensFaceIDs);
// Fill the vector DB with all embeddings
final laurensFaceIdToFloat32 = laurensFaceIdToEmbeddingData.map(
(key, value) => MapEntry(
key,
Float32List.fromList(EVector.fromBuffer(value).values),
),
);
final keys = Uint64List.fromList(
List.generate(
laurensFaceIdToFloat32.length,
(index) => BigInt.from(index + 1),
),
);
final vectorDB = VectorDb(
filePath: (await getApplicationSupportDirectory()).path +
"/ml/test/vector_db_face_index.usearch",
dimensions: BigInt.from(
laurensFaceIdToFloat32.values.first.length,
),
);
await vectorDB.resetIndex();
await vectorDB.bulkAddVectors(
keys: keys,
vectors: laurensFaceIdToFloat32.values.toList(),
);
// Benchmarking the vector DB
final queries = laurensFaceIdToFloat32.values.toList();
final count = BigInt.from(10);
w?.reset();
final results = await vectorDB.bulkSearchVectors(
queries: queries,
count: count,
);
w?.log(
'Done with ${queries.length * queries.length} (${queries.length} x ${queries.length}}) embeddings comparisons in vector DB',
);
logger.info(
'vector db results: ${results.length} results, first: ${results.first}, hundredth: ${results[99]}',
);
// Benchmarking our own vector comparisons
final laurensFaceIdToEmbeddingVectors =
laurensFaceIdToEmbeddingData.map(
(key, value) => MapEntry(
key,
Vector.fromList(EVector.fromBuffer(value).values),
),
);
final faceVectors = laurensFaceIdToEmbeddingVectors.values;
w?.reset();
for (final faceVector in faceVectors) {
for (final otherFaceVector in faceVectors) {
final _ = 1 - faceVector.dot(otherFaceVector);
}
}
w?.log(
'Done with ${faceVectors.length * faceVectors.length} (${faceVectors.length} x ${faceVectors.length}}) embeddings comparisons in own method',
);
} catch (e, s) {
logger.warning('vector DB search failed ', e, s);
await showGenericErrorDialog(context: context, error: e);
}
},
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: const CaptionedTextWidget(
title: "Test rust bridge",

View File

@@ -84,6 +84,19 @@ impl VectorDB {
(matches.keys, matches.distances)
}
pub fn bulk_search_vectors(&self, queries: &Vec<Vec<f32>>, count: usize) -> Vec<Vec<u64>> {
let mut keys = Vec::new();
for query in queries {
let matches = self
.index
.search(query, count)
.expect("Failed to search vectors");
keys.push(matches.keys);
}
keys
}
pub fn get_vector(&self, key: u64) -> Vec<f32> {
let mut vector: Vec<f32> = vec![0.0; self.index.dimensions()];
self.index

View File

@@ -38,7 +38,7 @@ flutter_rust_bridge::frb_generated_boilerplate!(
default_rust_auto_opaque = RustAutoOpaqueMoi,
);
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.9.0";
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 862168794;
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -674813457;
// Section: executor
@@ -160,6 +160,63 @@ fn wire__crate__api__usearch_api__VectorDb_bulk_add_vectors_impl(
},
)
}
fn wire__crate__api__usearch_api__VectorDb_bulk_search_vectors_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
rust_vec_len_: i32,
data_len_: i32,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
flutter_rust_bridge::for_generated::TaskInfo {
debug_name: "VectorDb_bulk_search_vectors",
port: Some(port_),
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
},
move || {
let message = unsafe {
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
ptr_,
rust_vec_len_,
data_len_,
)
};
let mut deserializer =
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
let api_that = <RustOpaqueMoi<
flutter_rust_bridge::for_generated::RustAutoOpaqueInner<VectorDB>,
>>::sse_decode(&mut deserializer);
let api_queries = <Vec<Vec<f32>>>::sse_decode(&mut deserializer);
let api_count = <usize>::sse_decode(&mut deserializer);
deserializer.end();
move |context| {
transform_result_sse::<_, ()>((move || {
let mut api_that_guard = None;
let decode_indices_ =
flutter_rust_bridge::for_generated::lockable_compute_decode_order(vec![
flutter_rust_bridge::for_generated::LockableOrderInfo::new(
&api_that, 0, false,
),
]);
for i in decode_indices_ {
match i {
0 => api_that_guard = Some(api_that.lockable_decode_sync_ref()),
_ => unreachable!(),
}
}
let api_that_guard = api_that_guard.unwrap();
let output_ok = Result::<_, ()>::Ok(
crate::api::usearch_api::VectorDB::bulk_search_vectors(
&*api_that_guard,
&api_queries,
api_count,
),
)?;
Ok(output_ok)
})())
}
},
)
}
fn wire__crate__api__usearch_api__VectorDb_delete_index_impl(
port_: flutter_rust_bridge::for_generated::MessagePort,
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
@@ -611,6 +668,18 @@ impl SseDecode for Vec<Vec<f32>> {
}
}
impl SseDecode for Vec<Vec<u64>> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
let mut len_ = <i32>::sse_decode(deserializer);
let mut ans_ = vec![];
for idx_ in 0..len_ {
ans_.push(<Vec<u64>>::sse_decode(deserializer));
}
return ans_;
}
}
impl SseDecode for Vec<f32> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
@@ -729,43 +798,49 @@ fn pde_ffi_dispatcher_primary_impl(
rust_vec_len,
data_len,
),
3 => wire__crate__api__usearch_api__VectorDb_delete_index_impl(
3 => wire__crate__api__usearch_api__VectorDb_bulk_search_vectors_impl(
port,
ptr,
rust_vec_len,
data_len,
),
4 => wire__crate__api__usearch_api__VectorDb_get_index_stats_impl(
4 => wire__crate__api__usearch_api__VectorDb_delete_index_impl(
port,
ptr,
rust_vec_len,
data_len,
),
5 => wire__crate__api__usearch_api__VectorDb_get_vector_impl(
5 => wire__crate__api__usearch_api__VectorDb_get_index_stats_impl(
port,
ptr,
rust_vec_len,
data_len,
),
7 => wire__crate__api__usearch_api__VectorDb_remove_vector_impl(
6 => wire__crate__api__usearch_api__VectorDb_get_vector_impl(
port,
ptr,
rust_vec_len,
data_len,
),
8 => wire__crate__api__usearch_api__VectorDb_reset_index_impl(
8 => wire__crate__api__usearch_api__VectorDb_remove_vector_impl(
port,
ptr,
rust_vec_len,
data_len,
),
9 => wire__crate__api__usearch_api__VectorDb_search_vectors_impl(
9 => wire__crate__api__usearch_api__VectorDb_reset_index_impl(
port,
ptr,
rust_vec_len,
data_len,
),
11 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len),
10 => wire__crate__api__usearch_api__VectorDb_search_vectors_impl(
port,
ptr,
rust_vec_len,
data_len,
),
12 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len),
_ => unreachable!(),
}
}
@@ -778,8 +853,8 @@ fn pde_ffi_dispatcher_sync_impl(
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
// Codec=Pde (Serialization + dispatch), see doc to use other codecs
match func_id {
6 => wire__crate__api__usearch_api__VectorDb_new_impl(ptr, rust_vec_len, data_len),
10 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len),
7 => wire__crate__api__usearch_api__VectorDb_new_impl(ptr, rust_vec_len, data_len),
11 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len),
_ => unreachable!(),
}
}
@@ -843,6 +918,16 @@ impl SseEncode for Vec<Vec<f32>> {
}
}
impl SseEncode for Vec<Vec<u64>> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
<i32>::sse_encode(self.len() as _, serializer);
for item in self {
<Vec<u64>>::sse_encode(item, serializer);
}
}
}
impl SseEncode for Vec<f32> {
// Codec=Sse (Serialization based), see doc to use other codecs
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {