From 4c46321ceac3bbdf332cef8d30af62d034e94d0c Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 28 Jan 2026 07:13:17 +0000 Subject: [PATCH 01/32] unneeded --- backend/Cargo.lock | 7 ------- backend/Cargo.toml | 15 --------------- backend/src/lib.rs | 1 - backend/src/main.rs | 3 --- 4 files changed, 26 deletions(-) delete mode 100644 backend/Cargo.lock delete mode 100644 backend/Cargo.toml delete mode 100644 backend/src/lib.rs delete mode 100644 backend/src/main.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock deleted file mode 100644 index 120a19e..0000000 --- a/backend/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "backend" -version = "0.1.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml deleted file mode 100644 index dcef953..0000000 --- a/backend/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "backend" -version = "0.1.0" -edition = "2024" - -[dependencies] - - -[lints.clippy] -indexing_slicing = "deny" -fallible_impl_from = "deny" -wildcard_enum_match_arm = "deny" -unneeded_field_pattern = "deny" -fn_params_excessive_bools = "deny" -must_use_candidate = "deny" diff --git a/backend/src/lib.rs b/backend/src/lib.rs deleted file mode 100644 index 8b13789..0000000 --- a/backend/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/backend/src/main.rs b/backend/src/main.rs deleted file mode 100644 index e7a11a9..0000000 --- a/backend/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} From 536710fb72423f46ffcda592d8b099c8460f9a38 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 28 Jan 2026 15:37:51 +0000 Subject: [PATCH 02/32] 1st attempt at acho --- .idea/markdown.xml | 8 + mobile_app/android/app/build.gradle | 3 +- mobile_app/flutter_rust_bridge.yaml | 11 +- mobile_app/lib/src/rust/api/acho.dart | 29 + .../lib/src/rust/api/keyword_search.dart | 26 - mobile_app/lib/src/rust/frb_generated.dart | 491 +++++- mobile_app/lib/src/rust/frb_generated.io.dart | 273 ++++ .../lib/src/rust/frb_generated.web.dart | 239 ++- mobile_app/rust/Cargo.lock | 1322 ++++++++++++++++- mobile_app/rust/Cargo.toml | 5 +- mobile_app/rust/src/api/acho.rs | 79 + mobile_app/rust/src/api/mod.rs | 4 +- mobile_app/rust/src/api/similarity.rs | 12 + mobile_app/rust/src/frb_generated.rs | 458 +++++- 14 files changed, 2908 insertions(+), 52 deletions(-) create mode 100644 .idea/markdown.xml create mode 100644 mobile_app/lib/src/rust/api/acho.dart delete mode 100644 mobile_app/lib/src/rust/api/keyword_search.dart create mode 100644 mobile_app/rust/src/api/acho.rs create mode 100644 mobile_app/rust/src/api/similarity.rs diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..c61ea33 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/mobile_app/android/app/build.gradle b/mobile_app/android/app/build.gradle index ba9fb7b..0061428 100644 --- a/mobile_app/android/app/build.gradle +++ b/mobile_app/android/app/build.gradle @@ -45,7 +45,6 @@ android { } kotlinOptions { - // Change this from "1.8" to "17" jvmTarget = "17" } @@ -61,3 +60,5 @@ android { flutter { source = "../.." } + + diff --git a/mobile_app/flutter_rust_bridge.yaml b/mobile_app/flutter_rust_bridge.yaml index 1b8ad67..cdad5c6 100644 --- a/mobile_app/flutter_rust_bridge.yaml +++ b/mobile_app/flutter_rust_bridge.yaml @@ -1,5 +1,12 @@ rust_input: crate::api,crate::tantivy rust_root: rust/ dart_output: lib/src/rust -#rust_preamble: -# use std::path::PathBuf; \ No newline at end of file +enable_lifetime: true +rust_preamble: + use std::env; + use anyhow::Result; + use tokenizers::{Encoding, Tokenizer}; + + use ort::session::Session; + use ort::session::builder::GraphOptimizationLevel; + use ndarray::Array2; \ No newline at end of file diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart new file mode 100644 index 0000000..a551fca --- /dev/null +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -0,0 +1,29 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import + +import '../frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +// These functions are ignored because they are not marked as `pub`: `get_encoding_array`, `tokenize` +// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `EncodingType` + +Future<(Tokenizer, Session)> loadArtifacts() => + RustLib.instance.api.crateApiAchoLoadArtifacts(); + +Future runInference( + {required List text, + required Session model, + required Tokenizer tokenizer}) => + RustLib.instance.api.crateApiAchoRunInference( + text: text, model: model, tokenizer: tokenizer); + +// Rust type: RustOpaqueMoi>> +abstract class Array2F32 implements RustOpaqueInterface {} + +// Rust type: RustOpaqueMoi> +abstract class Session implements RustOpaqueInterface {} + +// Rust type: RustOpaqueMoi> +abstract class Tokenizer implements RustOpaqueInterface {} diff --git a/mobile_app/lib/src/rust/api/keyword_search.dart b/mobile_app/lib/src/rust/api/keyword_search.dart deleted file mode 100644 index 441be26..0000000 --- a/mobile_app/lib/src/rust/api/keyword_search.dart +++ /dev/null @@ -1,26 +0,0 @@ -// This file is automatically generated, so please do not edit it. -// @generated by `flutter_rust_bridge`@ 2.11.1. - -// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import - -import '../frb_generated.dart'; -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; - -// Rust type: RustOpaqueMoi> -abstract class PathBuf implements RustOpaqueInterface {} - -// Rust type: RustOpaqueMoi> -abstract class SearchFn implements RustOpaqueInterface { - PathBuf get pathToIndex; - - set pathToIndex(PathBuf pathToIndex); - - Future deleteIndex(); - - Future ingestPdfDir({required PathBuf filePath}); - - // HINT: Make it `#[frb(sync)]` to let it become the default constructor of Dart class. - /// Creates a new SearchFn instance and initializes the index on disk - static Future newInstance({required PathBuf path}) => - RustLib.instance.api.crateApiKeywordSearchSearchFnNew(path: path); -} diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart index 50fd264..7c4b587 100644 --- a/mobile_app/lib/src/rust/frb_generated.dart +++ b/mobile_app/lib/src/rust/frb_generated.dart @@ -3,6 +3,7 @@ // 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 'api/acho.dart'; import 'api/simple.dart'; import 'dart:async'; import 'dart:convert'; @@ -70,7 +71,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.11.1'; @override - int get rustContentHash => -1918914929; + int get rustContentHash => -1792731214; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( @@ -84,6 +85,35 @@ abstract class RustLibApi extends BaseApi { String crateApiSimpleGreet({required String name}); Future crateApiSimpleInitApp(); + + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts(); + + Future crateApiAchoRunInference( + {required List text, + required Session model, + required Tokenizer tokenizer}); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2F32; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2F32; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr; + + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Session; + + RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Session; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Tokenizer; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Tokenizer; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr; } class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @@ -140,18 +170,193 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: [], ); + @override + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts() { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 3, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoLoadArtifactsConstMeta, + argValues: [], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoLoadArtifactsConstMeta => const TaskConstMeta( + debugName: "load_artifacts", + argNames: [], + ); + + @override + Future crateApiAchoRunInference( + {required List text, + required Session model, + required Tokenizer tokenizer}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(text, serializer); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + model, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + tokenizer, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 4, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoRunInferenceConstMeta, + argValues: [text, model, tokenizer], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoRunInferenceConstMeta => const TaskConstMeta( + debugName: "run_inference", + argNames: ["text", "model", "tokenizer"], + ); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2F32 => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2F32 => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Session => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Session => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Tokenizer => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Tokenizer => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return AnyhowException(raw as String); + } + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2F32Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2F32Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + @protected String dco_decode_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return raw as String; } + @protected + List dco_decode_list_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_String).toList(); + } + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return raw as Uint8List; } + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) { + throw Exception('Expected 2 elements, got ${arr.length}'); + } + return ( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + arr[0]), + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + arr[1]), + ); + } + @protected int dco_decode_u_8(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -164,6 +369,91 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return; } + @protected + BigInt dco_decode_usize(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dcoDecodeU64(raw); + } + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_String(deserializer); + return AnyhowException(inner); + } + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2F32Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2F32Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected String sse_decode_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -171,6 +461,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return utf8.decoder.convert(inner); } + @protected + List sse_decode_list_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_String(deserializer)); + } + return ans_; + } + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -178,6 +480,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8List(len_); } + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + deserializer); + var var_field1 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + deserializer); + return (var_field0, var_field1); + } + @protected int sse_decode_u_8(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -189,6 +507,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { // Codec=Sse (Serialization based), see doc to use other codecs } + @protected + BigInt sse_decode_usize(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getBigUint64(); + } + @protected int sse_decode_i_32(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -201,12 +525,100 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8() != 0; } + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.message, serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2F32Impl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: false), serializer); + } + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: false), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2F32Impl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: null), serializer); + } + @protected void sse_encode_String(String self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); } + @protected + void sse_encode_list_String(List 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_String(item, serializer); + } + } + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer) { @@ -215,6 +627,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8List(self); } + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + self.$1, serializer); + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + self.$2, serializer); + } + @protected void sse_encode_u_8(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -226,6 +649,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { // Codec=Sse (Serialization based), see doc to use other codecs } + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putBigUint64(self); + } + @protected void sse_encode_i_32(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -238,3 +667,63 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8(self ? 1 : 0); } } + +@sealed +class Array2F32Impl extends RustOpaque implements Array2F32 { + // Not to be used by end users + Array2F32Impl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Array2F32Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Array2F32, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32Ptr, + ); +} + +@sealed +class SessionImpl extends RustOpaque implements Session { + // Not to be used by end users + SessionImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + SessionImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Session, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Session, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_SessionPtr, + ); +} + +@sealed +class TokenizerImpl extends RustOpaque implements Tokenizer { + // Not to be used by end users + TokenizerImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + TokenizerImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Tokenizer, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Tokenizer, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_TokenizerPtr, + ); +} diff --git a/mobile_app/lib/src/rust/frb_generated.io.dart b/mobile_app/lib/src/rust/frb_generated.io.dart index 2af216f..284ca92 100644 --- a/mobile_app/lib/src/rust/frb_generated.io.dart +++ b/mobile_app/lib/src/rust/frb_generated.io.dart @@ -3,6 +3,7 @@ // 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 'api/acho.dart'; import 'api/simple.dart'; import 'dart:async'; import 'dart:convert'; @@ -18,49 +19,225 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { required super.portManager, }); + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + @protected String dco_decode_String(dynamic raw); + @protected + List dco_decode_list_String(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw); + @protected int dco_decode_u_8(dynamic raw); @protected void dco_decode_unit(dynamic raw); + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); + @protected + List sse_decode_list_String(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); @protected void sse_decode_unit(SseDeserializer deserializer); + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @protected bool sse_decode_bool(SseDeserializer deserializer); + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); @protected void sse_encode_unit(void self, SseSerializer serializer); + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer); + @protected void sse_encode_i_32(int self, SseSerializer serializer); @@ -81,4 +258,100 @@ class RustLibWire implements BaseWire { /// The symbols are looked up in [dynamicLibrary]. RustLibWire(ffi.DynamicLibrary dynamicLibrary) : _lookup = dynamicLibrary.lookup; + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr + .asFunction)>(); } diff --git a/mobile_app/lib/src/rust/frb_generated.web.dart b/mobile_app/lib/src/rust/frb_generated.web.dart index 981737f..2005f78 100644 --- a/mobile_app/lib/src/rust/frb_generated.web.dart +++ b/mobile_app/lib/src/rust/frb_generated.web.dart @@ -6,6 +6,7 @@ // Static analysis wrongly picks the IO variant, thus ignore this // ignore_for_file: argument_type_not_assignable +import 'api/acho.dart'; import 'api/simple.dart'; import 'dart:async'; import 'dart:convert'; @@ -20,49 +21,225 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { required super.portManager, }); + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + @protected String dco_decode_String(dynamic raw); + @protected + List dco_decode_list_String(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw); + @protected int dco_decode_u_8(dynamic raw); @protected void dco_decode_unit(dynamic raw); + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); + @protected + List sse_decode_list_String(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); @protected void sse_decode_unit(SseDeserializer deserializer); + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @protected bool sse_decode_bool(SseDeserializer deserializer); + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); @protected void sse_encode_unit(void self, SseSerializer serializer); + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer); + @protected void sse_encode_i_32(int self, SseSerializer serializer); @@ -74,6 +251,42 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { class RustLibWire implements BaseWire { RustLibWire.fromExternalLibrary(ExternalLibrary lib); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr); } @JS('wasm_bindgen') @@ -81,4 +294,28 @@ external RustLibWasmModule get wasmModule; @JS() @anonymous -extension type RustLibWasmModule._(JSObject _) implements JSObject {} +extension type RustLibWasmModule._(JSObject _) implements JSObject { + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr); +} diff --git a/mobile_app/rust/Cargo.lock b/mobile_app/rust/Cargo.lock index 5944227..34bdbbb 100644 --- a/mobile_app/rust/Cargo.lock +++ b/mobile_app/rust/Cargo.lock @@ -17,6 +17,20 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.4", + "once_cell", + "serde", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -113,12 +127,24 @@ dependencies = [ "windows-link", ] +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "bitflags" version = "2.10.0" @@ -159,7 +185,7 @@ version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" dependencies = [ - "darling", + "darling 0.23.0", "ident_case", "prettyplease", "proc-macro2", @@ -192,6 +218,21 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "bytes" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" version = "1.2.54" @@ -216,6 +257,47 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "compact_str" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "serde", + "static_assertions", +] + +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + +[[package]] +name = "console" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.61.2", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -226,6 +308,22 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "crc32fast" version = "1.5.0" @@ -285,14 +383,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", ] [[package]] @@ -308,13 +430,24 @@ dependencies = [ "syn", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn", +] + [[package]] name = "darling_macro" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core", + "darling_core 0.23.0", "quote", "syn", ] @@ -328,6 +461,15 @@ dependencies = [ "cc", ] +[[package]] +name = "dary_heap" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06d2e3287df1c007e74221c49ca10a95d557349e54b3a75dc2fb14712c751f04" +dependencies = [ + "serde", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -352,6 +494,16 @@ dependencies = [ "syn", ] +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.5.5" @@ -362,6 +514,37 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn", +] + [[package]] name = "digest" version = "0.10.7" @@ -372,6 +555,38 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "downcast-rs" version = "2.0.2" @@ -384,6 +599,12 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "env_filter" version = "0.1.4" @@ -410,6 +631,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "esaxx-rs" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6" +dependencies = [ + "cc", +] + [[package]] name = "fastdivide" version = "0.4.2" @@ -428,6 +658,16 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +[[package]] +name = "flate2" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "flutter_rust_bridge" version = "2.11.1" @@ -482,6 +722,30 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + [[package]] name = "fs4" version = "0.13.1" @@ -649,12 +913,53 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hf-hub" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629d8f3bbeda9d148036d6b0de0a3ab947abd08ce90626327fc3547a49d59d97" +dependencies = [ + "dirs", + "http", + "indicatif 0.17.11", + "libc", + "log", + "rand 0.9.2", + "serde", + "serde_json", + "thiserror", + "ureq 2.12.1", + "windows-sys 0.60.2", +] + +[[package]] +name = "hmac-sha256" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f0ae375a85536cac3a243e3a9cda80a47910348abdea7e2c22f8ec556d586d" + [[package]] name = "htmlescape" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + [[package]] name = "hyperloglogplus" version = "0.4.1" @@ -664,12 +969,140 @@ dependencies = [ "serde", ] +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console 0.15.11", + "number_prefix", + "portable-atomic", + "unicode-width", + "web-time", +] + +[[package]] +name = "indicatif" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88" +dependencies = [ + "console 0.16.2", + "portable-atomic", + "unicode-width", + "unit-prefix", + "web-time", +] + [[package]] name = "itertools" version = "0.14.0" @@ -729,12 +1162,28 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +[[package]] +name = "libredox" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +dependencies = [ + "bitflags", + "libc", +] + [[package]] name = "linux-raw-sys" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + [[package]] name = "lock_api" version = "0.4.14" @@ -765,6 +1214,38 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" +[[package]] +name = "lzma-rust2" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1670343e58806300d87950e3401e820b519b9384281bbabfb15e3636689ffd69" + +[[package]] +name = "macro_rules_attribute" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65049d7923698040cd0b1ddcced9b0eb14dd22c5f86ae59c3740eab64a676520" +dependencies = [ + "macro_rules_attribute-proc_macro", + "paste", +] + +[[package]] +name = "macro_rules_attribute-proc_macro" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30" + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + [[package]] name = "md-5" version = "0.10.6" @@ -812,6 +1293,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", +] + +[[package]] +name = "monostate" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67" +dependencies = [ + "monostate-impl", + "serde", + "serde_core", +] + +[[package]] +name = "monostate-impl" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -820,6 +1324,38 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndarray" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + [[package]] name = "nom" version = "7.1.3" @@ -830,12 +1366,30 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -856,6 +1410,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" version = "0.37.3" @@ -877,6 +1437,102 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ce66197e99546da6c6d991285f605192e794ceae69686c17163844a7bf8fcc2" +[[package]] +name = "onig" +version = "6.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0" +dependencies = [ + "bitflags", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f86c6eef3d6df15f23bcfb6af487cbd2fed4e5581d58d5bf1f5f8b7f6727dc" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ort" +version = "2.0.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5df903c0d2c07b56950f1058104ab0c8557159f2741782223704de9be73c3c" +dependencies = [ + "ndarray", + "ort-sys", + "smallvec", + "tracing", + "ureq 3.1.4", +] + +[[package]] +name = "ort-sys" +version = "2.0.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06503bb33f294c5f1ba484011e053bfa6ae227074bdb841e9863492dc5960d4b" +dependencies = [ + "hmac-sha256", + "lzma-rust2", + "ureq 3.1.4", +] + [[package]] name = "oslog" version = "0.2.0" @@ -910,6 +1566,27 @@ dependencies = [ "windows-link", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -934,6 +1611,24 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -990,8 +1685,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", ] [[package]] @@ -1001,7 +1706,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] @@ -1013,6 +1728,15 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + [[package]] name = "rand_distr" version = "0.4.3" @@ -1020,9 +1744,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "rayon" version = "1.11.0" @@ -1033,6 +1763,17 @@ dependencies = [ "rayon-core", ] +[[package]] +name = "rayon-cond" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f" +dependencies = [ + "either", + "itertools", + "rayon", +] + [[package]] name = "rayon-core" version = "1.13.0" @@ -1052,6 +1793,17 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.12.2" @@ -1081,6 +1833,20 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rust-stemmers" version = "1.2.0" @@ -1095,8 +1861,12 @@ dependencies = [ name = "rust_lib_mobile_app" version = "0.1.0" dependencies = [ + "anyhow", "flutter_rust_bridge", + "ndarray", + "ort", "tantivy", + "tokenizers", ] [[package]] @@ -1124,18 +1894,91 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.228" @@ -1185,6 +2028,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "sketches-ddsketch" version = "0.3.0" @@ -1206,18 +2055,53 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +[[package]] +name = "socks" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" +dependencies = [ + "byteorder", + "libc", + "winapi", +] + +[[package]] +name = "spm_precompiled" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326" +dependencies = [ + "base64 0.13.1", + "nom", + "serde", + "unicode-segmentation", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.114" @@ -1229,6 +2113,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tantivy" version = "0.25.0" @@ -1237,7 +2132,7 @@ checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545" dependencies = [ "aho-corasick", "arc-swap", - "base64", + "base64 0.22.1", "bitpacking", "bon", "byteorder", @@ -1448,6 +2343,51 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokenizers" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b238e22d44a15349529690fb07bd645cf58149a1b1e44d6cb5bd1641ff1a6223" +dependencies = [ + "ahash", + "aho-corasick", + "compact_str", + "dary_heap", + "derive_builder", + "esaxx-rs", + "getrandom 0.3.4", + "hf-hub", + "indicatif 0.18.3", + "itertools", + "log", + "macro_rules_attribute", + "monostate", + "onig", + "paste", + "rand 0.9.2", + "rayon", + "rayon-cond", + "regex", + "regex-syntax", + "serde", + "serde_json", + "spm_precompiled", + "thiserror", + "unicode-normalization-alignments", + "unicode-segmentation", + "unicode_categories", +] + [[package]] name = "tokio" version = "1.49.0" @@ -1457,6 +2397,25 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + [[package]] name = "typenum" version = "1.19.0" @@ -1469,12 +2428,124 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +[[package]] +name = "unicode-normalization-alignments" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de" +dependencies = [ + "smallvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unit-prefix" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "socks", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "ureq" +version = "3.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39cb1dbab692d82a977c0392ffac19e188bd9186a9f32806f0aaa859d75585a" +dependencies = [ + "base64 0.22.1", + "der", + "log", + "native-tls", + "percent-encoding", + "rustls-pki-types", + "socks", + "ureq-proto", + "utf-8", + "webpki-root-certs", +] + +[[package]] +name = "ureq-proto" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" +dependencies = [ + "base64 0.22.1", + "http", + "httparse", + "log", +] + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8-ranges" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "uuid" version = "1.20.0" @@ -1487,6 +2558,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -1577,6 +2654,43 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.5", +] + +[[package]] +name = "webpki-roots" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1605,13 +2719,31 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", ] [[package]] @@ -1629,14 +2761,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -1645,54 +2794,131 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.8.34" @@ -1713,6 +2939,66 @@ dependencies = [ "syn", ] +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zmij" version = "1.0.17" diff --git a/mobile_app/rust/Cargo.toml b/mobile_app/rust/Cargo.toml index 371c110..311c05b 100644 --- a/mobile_app/rust/Cargo.toml +++ b/mobile_app/rust/Cargo.toml @@ -9,7 +9,10 @@ crate-type = ["cdylib", "staticlib"] [dependencies] flutter_rust_bridge = "=2.11.1" tantivy = "0.25.0" -#seekstorm = { git = "https://github.com/Ok3ks/seekstorm", branch = "compile-for-mobile", version = "1.2.5" } +ndarray = "0.17.2" +tokenizers = { version = "0.22.2", default-features = false, features = ["esaxx_fast", "indicatif", "onig", "progressbar", "hf-hub", "http"] } +anyhow = "1.0.100" +ort = { version = "2.0.0-rc.11" } [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(frb_expand)'] } diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs new file mode 100644 index 0000000..18aad17 --- /dev/null +++ b/mobile_app/rust/src/api/acho.rs @@ -0,0 +1,79 @@ +use std::env; +use anyhow::Result; +use tokenizers::{Encoding, Tokenizer}; + +use ort::session::Session; +use ort::session::builder::GraphOptimizationLevel; + +type EncodingArray = ndarray::Array2; +type InputIds = ndarray::Array2; +type AttentionMask = ndarray::Array2; +pub type Embeddings = ndarray::Array2; + + +enum EncodingType { + Ids, + AttentionMask +} + +pub fn load_artifacts() -> Result<(Tokenizer, Session)> { + let mut tokenizer = Tokenizer::from_pretrained("abdulmatinomotoso/bge-finetuned", None) + .expect("Failed to load tokenizer."); + let padding = Some(tokenizers::PaddingParams { + strategy: tokenizers::PaddingStrategy::BatchLongest, + direction: tokenizers::PaddingDirection::Right, + pad_to_multiple_of: None, + pad_id: 1, + pad_type_id: 0, + pad_token: "".to_string(), + }); + tokenizer.with_padding(padding); + + let model_path = env::var("ACHO_MODEL_PATH") + .unwrap_or("weights/model.onnx".to_string()); + let session = Session::builder()? + .with_optimization_level(GraphOptimizationLevel::Level1)? + .with_intra_threads(4)? + .commit_from_file(&model_path).expect("Failed to load the ONNX model."); + Ok((tokenizer, session)) +} + +fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { + let extract: fn(&Encoding) -> &[u32] = match encoding_type { + EncodingType::Ids => |e: &Encoding| e.get_ids(), + EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), + }; + + let nrows = encodings.len(); + let ncols = extract(&encodings[0]).len(); + let vec_matrix: Vec = encodings.iter() + .flat_map(|e| extract(e).iter().map(|&x| x as i64).collect::>()) + .collect(); + Ok( + ndarray::Array2::from_shape_vec((nrows, ncols), vec_matrix) + .expect("Failed to create Array2D from encodings.") + ) +} + +fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { + let encodings = tokenizer.encode_batch(texts.to_vec(), true) + .expect("Tokenization failed."); + + let input_ids = get_encoding_array(&encodings, EncodingType::Ids)?; + let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; + Ok((input_ids, attention_mask)) +} + +pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ + let (tokens, attn_mask) = tokenize(text, tokenizer)?; + let token_input_value = ort::value::Tensor::from_array(tokens)?; + let attn_mask_input_value = ort::value::Tensor::from_array(attn_mask)?; + let dense: ort::session::SessionOutputs<'_>= model.run( + ort::inputs!["input_ids" => token_input_value, "attention_mask" => attn_mask_input_value] + ).expect("Embedding model inference failed."); + + let dense_embeddings = (&dense["dense_embeddings"]).try_extract_array::()? + .into_dimensionality::() + .expect("Failed to convert embeddings to 2D array."); + Ok(dense_embeddings.to_owned()) +} \ No newline at end of file diff --git a/mobile_app/rust/src/api/mod.rs b/mobile_app/rust/src/api/mod.rs index 299aafc..6f73411 100644 --- a/mobile_app/rust/src/api/mod.rs +++ b/mobile_app/rust/src/api/mod.rs @@ -1 +1,3 @@ -pub mod simple; \ No newline at end of file +pub mod simple; +pub mod similarity; +pub mod acho; diff --git a/mobile_app/rust/src/api/similarity.rs b/mobile_app/rust/src/api/similarity.rs new file mode 100644 index 0000000..efa67bb --- /dev/null +++ b/mobile_app/rust/src/api/similarity.rs @@ -0,0 +1,12 @@ +use anyhow::Result; +use crate::api::acho::{load_artifacts, Embeddings, run_inference}; + +fn semanticSearch(texts: &Vec) -> Result<()> { + let (tokenizer, mut model) = load_artifacts()?; + + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let similarity_matrix = all_embeddings.dot(&all_embeddings.t()); + println!("Similarity matrix:\n{:?}", similarity_matrix); + + Ok(()) +} diff --git a/mobile_app/rust/src/frb_generated.rs b/mobile_app/rust/src/frb_generated.rs index 4f41c47..28372d1 100644 --- a/mobile_app/rust/src/frb_generated.rs +++ b/mobile_app/rust/src/frb_generated.rs @@ -25,19 +25,27 @@ // Section: imports +use crate::api::acho::*; use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; use flutter_rust_bridge::{Handler, IntoIntoDart}; // Section: boilerplate +use anyhow::Result; +use ndarray::Array2; +use ort::session::builder::GraphOptimizationLevel; +use ort::session::Session; +use std::env; +use tokenizers::{Encoding, Tokenizer}; + flutter_rust_bridge::frb_generated_boilerplate!( default_stream_sink_codec = SseCodec, default_rust_opaque = RustOpaqueMoi, default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1918914929; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1792731214; // Section: executor @@ -109,9 +117,195 @@ fn wire__crate__api__simple__init_app_impl( }, ) } +fn wire__crate__api__acho__load_artifacts_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::TaskInfo { + debug_name: "load_artifacts", + 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); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::load_artifacts()?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__acho__run_inference_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::TaskInfo { + debug_name: "run_inference", + 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_text = >::sse_decode(&mut deserializer); + let api_model = , + >>::sse_decode(&mut deserializer); + let api_tokenizer = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let mut api_model_guard = None; + let mut api_tokenizer_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![ + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_model, 0, true, + ), + flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_tokenizer, + 1, + false, + ), + ], + ); + for i in decode_indices_ { + match i { + 0 => { + api_model_guard = Some(api_model.lockable_decode_sync_ref_mut()) + } + 1 => { + api_tokenizer_guard = + Some(api_tokenizer.lockable_decode_sync_ref()) + } + _ => unreachable!(), + } + } + let mut api_model_guard = api_model_guard.unwrap(); + let api_tokenizer_guard = api_tokenizer_guard.unwrap(); + let output_ok = crate::api::acho::run_inference( + &api_text, + &mut *api_model_guard, + &*api_tokenizer_guard, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} + +// Section: related_funcs + +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner> +); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); // Section: dart2rust +impl SseDecode for flutter_rust_bridge::for_generated::anyhow::Error { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::anyhow::anyhow!("{}", inner); + } +} + +impl SseDecode for Array2 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = >, + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode for Session { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = , + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode for Tokenizer { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = , + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode + for RustOpaqueMoi>> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + +impl SseDecode for RustOpaqueMoi> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + +impl SseDecode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + impl SseDecode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -120,6 +314,18 @@ impl SseDecode for String { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -132,6 +338,15 @@ impl SseDecode for Vec { } } +impl SseDecode for (Tokenizer, Session) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_field0 = ::sse_decode(deserializer); + let mut var_field1 = ::sse_decode(deserializer); + return (var_field0, var_field1); + } +} + impl SseDecode for u8 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -144,6 +359,13 @@ impl SseDecode for () { fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} } +impl SseDecode for usize { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u64::().unwrap() as _ + } +} + impl SseDecode for i32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -168,6 +390,8 @@ fn pde_ffi_dispatcher_primary_impl( // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { 2 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), + 3 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), + 4 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -187,6 +411,110 @@ fn pde_ffi_dispatcher_sync_impl( // Section: rust2dart +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper> { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper> {} + +impl flutter_rust_bridge::IntoIntoDart>> for Array2 { + fn into_into_dart(self) -> FrbWrapper> { + self.into() + } +} + +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper {} + +impl flutter_rust_bridge::IntoIntoDart> for Session { + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} + +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper {} + +impl flutter_rust_bridge::IntoIntoDart> for Tokenizer { + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} + +impl SseEncode for flutter_rust_bridge::for_generated::anyhow::Error { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(format!("{:?}", self), serializer); + } +} + +impl SseEncode for Array2 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + +impl SseEncode for Session { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + +impl SseEncode for Tokenizer { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + +impl SseEncode + for RustOpaqueMoi>> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + +impl SseEncode for RustOpaqueMoi> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + +impl SseEncode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + impl SseEncode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -194,6 +522,16 @@ impl SseEncode for String { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -204,6 +542,14 @@ impl SseEncode for Vec { } } +impl SseEncode for (Tokenizer, Session) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.0, serializer); + ::sse_encode(self.1, serializer); + } +} + impl SseEncode for u8 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -216,6 +562,16 @@ impl SseEncode for () { fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} } +impl SseEncode for usize { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer + .cursor + .write_u64::(self as _) + .unwrap(); + } +} + impl SseEncode for i32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -238,6 +594,7 @@ mod io { // Section: imports use super::*; + use crate::api::acho::*; use flutter_rust_bridge::for_generated::byteorder::{ NativeEndian, ReadBytesExt, WriteBytesExt, }; @@ -246,7 +603,56 @@ mod io { // Section: boilerplate + use anyhow::Result; + use ndarray::Array2; + use ort::session::builder::GraphOptimizationLevel; + use ort::session::Session; + use std::env; + use tokenizers::{Encoding, Tokenizer}; + flutter_rust_bridge::frb_generated_boilerplate_io!(); + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::decrement_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } } #[cfg(not(target_family = "wasm"))] pub use io::*; @@ -260,6 +666,7 @@ mod web { // Section: imports use super::*; + use crate::api::acho::*; use flutter_rust_bridge::for_generated::byteorder::{ NativeEndian, ReadBytesExt, WriteBytesExt, }; @@ -270,7 +677,56 @@ mod web { // Section: boilerplate + use anyhow::Result; + use ndarray::Array2; + use ort::session::builder::GraphOptimizationLevel; + use ort::session::Session; + use std::env; + use tokenizers::{Encoding, Tokenizer}; + flutter_rust_bridge::frb_generated_boilerplate_web!(); + + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::decrement_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } } #[cfg(target_family = "wasm")] pub use web::*; From af34ba99a5457e47fb047bba37fdb2064677360e Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 28 Jan 2026 22:28:29 +0000 Subject: [PATCH 03/32] integrate acho.rs --- mobile_app/android/app/proguard-rules.pro | 0 mobile_app/lib/home.dart | 3 + mobile_app/lib/src/rust/api/acho.dart | 30 +- mobile_app/lib/src/rust/frb_generated.dart | 412 ++++++++++++++++- mobile_app/lib/src/rust/frb_generated.io.dart | 188 +++++++- .../lib/src/rust/frb_generated.web.dart | 164 ++++++- mobile_app/lib/utils.dart | 11 + mobile_app/rust/Cargo.toml | 4 + mobile_app/rust/src/api/acho.rs | 23 +- mobile_app/rust/src/api/mod.rs | 1 - mobile_app/rust/src/api/similarity.rs | 12 - mobile_app/rust/src/frb_generated.rs | 431 +++++++++++++++++- 12 files changed, 1210 insertions(+), 69 deletions(-) create mode 100644 mobile_app/android/app/proguard-rules.pro delete mode 100644 mobile_app/rust/src/api/similarity.rs diff --git a/mobile_app/android/app/proguard-rules.pro b/mobile_app/android/app/proguard-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index 7509d9f..d0836e0 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -84,6 +84,9 @@ class _HomeAppState extends State { onChanged: (text) {}, onSubmitted: (text) async { final List docs = await compute(findMatch, text); + // final List ocs = await compute(semanticSearch, text); + // print(ocs); + //TODO: Handle enter key press, //TODO: similar to above depending on latency we may just use this saveSearchHistory(text); diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart index a551fca..a5a31fe 100644 --- a/mobile_app/lib/src/rust/api/acho.dart +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -6,12 +6,20 @@ import '../frb_generated.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; -// These functions are ignored because they are not marked as `pub`: `get_encoding_array`, `tokenize` -// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `EncodingType` - Future<(Tokenizer, Session)> loadArtifacts() => RustLib.instance.api.crateApiAchoLoadArtifacts(); +Future getEncodingArray( + {required List encodings, + required EncodingType encodingType}) => + RustLib.instance.api.crateApiAchoGetEncodingArray( + encodings: encodings, encodingType: encodingType); + +Future<(Array2I64, Array2I64)> tokenize( + {required List texts, required Tokenizer tokenizer}) => + RustLib.instance.api + .crateApiAchoTokenize(texts: texts, tokenizer: tokenizer); + Future runInference( {required List text, required Session model, @@ -19,11 +27,27 @@ Future runInference( RustLib.instance.api.crateApiAchoRunInference( text: text, model: model, tokenizer: tokenizer); +Future similarity( + {required List query, required List texts}) => + RustLib.instance.api.crateApiAchoSimilarity(query: query, texts: texts); + // Rust type: RustOpaqueMoi>> abstract class Array2F32 implements RustOpaqueInterface {} +// Rust type: RustOpaqueMoi>> +abstract class Array2I64 implements RustOpaqueInterface {} + +// Rust type: RustOpaqueMoi> +abstract class Encoding implements RustOpaqueInterface {} + // Rust type: RustOpaqueMoi> abstract class Session implements RustOpaqueInterface {} // Rust type: RustOpaqueMoi> abstract class Tokenizer implements RustOpaqueInterface {} + +enum EncodingType { + ids, + attentionMask, + ; +} diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart index 7c4b587..fab7e03 100644 --- a/mobile_app/lib/src/rust/frb_generated.dart +++ b/mobile_app/lib/src/rust/frb_generated.dart @@ -71,7 +71,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.11.1'; @override - int get rustContentHash => -1792731214; + int get rustContentHash => 1979550112; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( @@ -82,6 +82,9 @@ class RustLib extends BaseEntrypoint { } abstract class RustLibApi extends BaseApi { + Future crateApiAchoGetEncodingArray( + {required List encodings, required EncodingType encodingType}); + String crateApiSimpleGreet({required String name}); Future crateApiSimpleInitApp(); @@ -93,6 +96,12 @@ abstract class RustLibApi extends BaseApi { required Session model, required Tokenizer tokenizer}); + Future crateApiAchoSimilarity( + {required List query, required List texts}); + + Future<(Array2I64, Array2I64)> crateApiAchoTokenize( + {required List texts, required Tokenizer tokenizer}); + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Array2F32; @@ -101,6 +110,22 @@ abstract class RustLibApi extends BaseApi { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr; + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2I64; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2I64; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Encoding; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Encoding; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr; + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Session; RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Session; @@ -124,13 +149,42 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { required super.portManager, }); + @override + Future crateApiAchoGetEncodingArray( + {required List encodings, required EncodingType encodingType}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + encodings, serializer); + sse_encode_encoding_type(encodingType, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 1, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoGetEncodingArrayConstMeta, + argValues: [encodings, encodingType], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoGetEncodingArrayConstMeta => + const TaskConstMeta( + debugName: "get_encoding_array", + argNames: ["encodings", "encodingType"], + ); + @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: 1)!; + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2)!; }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -153,7 +207,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 2, port: port_); + funcId: 3, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -176,7 +230,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 3, port: port_); + funcId: 4, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -208,7 +262,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( tokenizer, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 4, port: port_); + funcId: 5, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -226,6 +280,60 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["text", "model", "tokenizer"], ); + @override + Future crateApiAchoSimilarity( + {required List query, required List texts}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(query, serializer); + sse_encode_list_String(texts, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 6, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoSimilarityConstMeta, + argValues: [query, texts], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoSimilarityConstMeta => const TaskConstMeta( + debugName: "similarity", + argNames: ["query", "texts"], + ); + + @override + Future<(Array2I64, Array2I64)> crateApiAchoTokenize( + {required List texts, required Tokenizer tokenizer}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(texts, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + tokenizer, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 7, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoTokenizeConstMeta, + argValues: [texts, tokenizer], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoTokenizeConstMeta => const TaskConstMeta( + debugName: "tokenize", + argNames: ["texts", "tokenizer"], + ); + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Array2F32 => wire .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; @@ -234,6 +342,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { get rust_arc_decrement_strong_count_Array2F32 => wire .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2I64 => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2I64 => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Encoding => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Encoding => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Session => wire .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; @@ -264,6 +388,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return Array2F32Impl.frbInternalDcoDecode(raw as List); } + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2I64Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingImpl.frbInternalDcoDecode(raw as List); + } + @protected Session dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -304,6 +444,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return Array2F32Impl.frbInternalDcoDecode(raw as List); } + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2I64Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingImpl.frbInternalDcoDecode(raw as List); + } + @protected Session dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -326,6 +482,29 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as String; } + @protected + EncodingType dco_decode_encoding_type(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingType.values[raw as int]; + } + + @protected + int dco_decode_i_32(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as int; + } + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List) + .map( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding) + .toList(); + } + @protected List dco_decode_list_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -338,6 +517,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as Uint8List; } + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) { + throw Exception('Expected 2 elements, got ${arr.length}'); + } + return ( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + arr[0]), + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + arr[1]), + ); + } + @protected ( Tokenizer, @@ -391,6 +589,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2I64Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return EncodingImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected Session sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -436,6 +652,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2I64Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return EncodingImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected Session sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -461,6 +695,35 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return utf8.decoder.convert(inner); } + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_i_32(deserializer); + return EncodingType.values[inner]; + } + + @protected + int sse_decode_i_32(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getInt32(); + } + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add( + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + deserializer)); + } + return ans_; + } + @protected List sse_decode_list_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -480,6 +743,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8List(len_); } + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + deserializer); + var var_field1 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + deserializer); + return (var_field0, var_field1); + } + @protected ( Tokenizer, @@ -513,12 +792,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getBigUint64(); } - @protected - int sse_decode_i_32(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getInt32(); - } - @protected bool sse_decode_bool(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -541,6 +814,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { (self as Array2F32Impl).frbInternalSseEncode(move: true), serializer); } + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2I64Impl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as EncodingImpl).frbInternalSseEncode(move: true), serializer); + } + @protected void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -586,6 +877,24 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { (self as Array2F32Impl).frbInternalSseEncode(move: null), serializer); } + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2I64Impl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as EncodingImpl).frbInternalSseEncode(move: null), serializer); + } + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -610,6 +919,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); } + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.index, serializer); + } + + @protected + void sse_encode_i_32(int self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putInt32(self); + } + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List 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_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + item, serializer); + } + } + @protected void sse_encode_list_String(List self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -627,6 +960,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8List(self); } + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + self.$1, serializer); + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + self.$2, serializer); + } + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( @@ -655,12 +999,6 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putBigUint64(self); } - @protected - void sse_encode_i_32(int self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putInt32(self); - } - @protected void sse_encode_bool(bool self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -688,6 +1026,46 @@ class Array2F32Impl extends RustOpaque implements Array2F32 { ); } +@sealed +class Array2I64Impl extends RustOpaque implements Array2I64 { + // Not to be used by end users + Array2I64Impl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Array2I64Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Array2I64, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64Ptr, + ); +} + +@sealed +class EncodingImpl extends RustOpaque implements Encoding { + // Not to be used by end users + EncodingImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + EncodingImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Encoding, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Encoding, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_EncodingPtr, + ); +} + @sealed class SessionImpl extends RustOpaque implements Session { // Not to be used by end users diff --git a/mobile_app/lib/src/rust/frb_generated.io.dart b/mobile_app/lib/src/rust/frb_generated.io.dart index 284ca92..9f52f1d 100644 --- a/mobile_app/lib/src/rust/frb_generated.io.dart +++ b/mobile_app/lib/src/rust/frb_generated.io.dart @@ -22,6 +22,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr; @@ -36,6 +42,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( dynamic raw); + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected Session dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -61,6 +77,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( dynamic raw); + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected Session dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -74,12 +100,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String dco_decode_String(dynamic raw); + @protected + EncodingType dco_decode_encoding_type(dynamic raw); + + @protected + int dco_decode_i_32(dynamic raw); + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected List dco_decode_list_String(dynamic raw); @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw); + @protected ( Tokenizer, @@ -104,6 +148,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( SseDeserializer deserializer); + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected Session sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -129,6 +183,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( SseDeserializer deserializer); + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected Session sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -142,12 +206,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String sse_decode_String(SseDeserializer deserializer); + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + + @protected + int sse_decode_i_32(SseDeserializer deserializer); + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected List sse_decode_list_String(SseDeserializer deserializer); @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer); + @protected ( Tokenizer, @@ -164,9 +246,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected BigInt sse_decode_usize(SseDeserializer deserializer); - @protected - int sse_decode_i_32(SseDeserializer deserializer); - @protected bool sse_decode_bool(SseDeserializer deserializer); @@ -179,6 +258,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( Array2F32 self, SseSerializer serializer); + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + @protected void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -204,6 +293,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( Array2F32 self, SseSerializer serializer); + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -217,6 +316,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + + @protected + void sse_encode_i_32(int self, SseSerializer serializer); + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List self, SseSerializer serializer); + @protected void sse_encode_list_String(List self, SseSerializer serializer); @@ -224,6 +334,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer); + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( @@ -238,9 +353,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_usize(BigInt self, SseSerializer serializer); - @protected - void sse_encode_i_32(int self, SseSerializer serializer); - @protected void sse_encode_bool(bool self, SseSerializer serializer); } @@ -291,6 +403,70 @@ class RustLibWire implements BaseWire { _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr .asFunction)>(); + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr + .asFunction)>(); + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( ffi.Pointer ptr, diff --git a/mobile_app/lib/src/rust/frb_generated.web.dart b/mobile_app/lib/src/rust/frb_generated.web.dart index 2005f78..4e13402 100644 --- a/mobile_app/lib/src/rust/frb_generated.web.dart +++ b/mobile_app/lib/src/rust/frb_generated.web.dart @@ -24,6 +24,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; @@ -38,6 +44,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( dynamic raw); + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected Session dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -63,6 +79,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( dynamic raw); + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected Session dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -76,12 +102,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String dco_decode_String(dynamic raw); + @protected + EncodingType dco_decode_encoding_type(dynamic raw); + + @protected + int dco_decode_i_32(dynamic raw); + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + @protected List dco_decode_list_String(dynamic raw); @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw); + @protected ( Tokenizer, @@ -106,6 +150,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( SseDeserializer deserializer); + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected Session sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -131,6 +185,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( SseDeserializer deserializer); + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected Session sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -144,12 +208,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected String sse_decode_String(SseDeserializer deserializer); + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + + @protected + int sse_decode_i_32(SseDeserializer deserializer); + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + @protected List sse_decode_list_String(SseDeserializer deserializer); @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer); + @protected ( Tokenizer, @@ -166,9 +248,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected BigInt sse_decode_usize(SseDeserializer deserializer); - @protected - int sse_decode_i_32(SseDeserializer deserializer); - @protected bool sse_decode_bool(SseDeserializer deserializer); @@ -181,6 +260,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( Array2F32 self, SseSerializer serializer); + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + @protected void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -206,6 +295,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( Array2F32 self, SseSerializer serializer); + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( @@ -219,6 +318,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + + @protected + void sse_encode_i_32(int self, SseSerializer serializer); + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List self, SseSerializer serializer); + @protected void sse_encode_list_String(List self, SseSerializer serializer); @@ -226,6 +336,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer); + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( @@ -240,9 +355,6 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_usize(BigInt self, SseSerializer serializer); - @protected - void sse_encode_i_32(int self, SseSerializer serializer); - @protected void sse_encode_bool(bool self, SseSerializer serializer); } @@ -264,6 +376,30 @@ class RustLibWire implements BaseWire { .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( ptr); + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr); + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( int ptr) => wasmModule @@ -303,6 +439,22 @@ extension type RustLibWasmModule._(JSObject _) implements JSObject { rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( int ptr); + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr); + external void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( int ptr); diff --git a/mobile_app/lib/utils.dart b/mobile_app/lib/utils.dart index 3eb0365..aaad1b7 100644 --- a/mobile_app/lib/utils.dart +++ b/mobile_app/lib/utils.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:permission_handler/permission_handler.dart'; import 'package:mobile_app/src/rust/api/simple.dart'; +import 'package:mobile_app/src/rust/api/acho.dart'; import 'package:path_provider/path_provider.dart'; import 'package:flutter_tantivy/flutter_tantivy.dart'; import 'dart:convert'; @@ -95,8 +96,18 @@ Future> findMatch(String query) async { query: query, topK: BigInt.from(10), ); + print(results); return results; } +// Future>> +// Future> semanticSearch(String query) async { +// await RustLib.init(); +// final results = await similarity( +// query: [query], +// texts: ["Today is a good day", "What is going on?"] +// ); +// return ["Semantic Search Button pressed"]; +// } Future saveSearchHistory(String text) async { final query = text.trim(); diff --git a/mobile_app/rust/Cargo.toml b/mobile_app/rust/Cargo.toml index 311c05b..8ef7d7e 100644 --- a/mobile_app/rust/Cargo.toml +++ b/mobile_app/rust/Cargo.toml @@ -16,3 +16,7 @@ ort = { version = "2.0.0-rc.11" } [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(frb_expand)'] } + +[profile.release] +strip = false +opt-level = 'z' \ No newline at end of file diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index 18aad17..a832a8f 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -7,11 +7,12 @@ use ort::session::builder::GraphOptimizationLevel; type EncodingArray = ndarray::Array2; type InputIds = ndarray::Array2; -type AttentionMask = ndarray::Array2; +pub type AttentionMask = ndarray::Array2; pub type Embeddings = ndarray::Array2; -enum EncodingType { + +pub enum EncodingType { Ids, AttentionMask } @@ -38,7 +39,7 @@ pub fn load_artifacts() -> Result<(Tokenizer, Session)> { Ok((tokenizer, session)) } -fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { +pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { let extract: fn(&Encoding) -> &[u32] = match encoding_type { EncodingType::Ids => |e: &Encoding| e.get_ids(), EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), @@ -55,7 +56,7 @@ fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> ) } -fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { +pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { let encodings = tokenizer.encode_batch(texts.to_vec(), true) .expect("Tokenization failed."); @@ -76,4 +77,16 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: .into_dimensionality::() .expect("Failed to convert embeddings to 2D array."); Ok(dense_embeddings.to_owned()) -} \ No newline at end of file +} + +pub fn similarity(query: &Vec, texts: &Vec) -> Result<()> { + let (tokenizer, mut model) = load_artifacts()?; + + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; + + let similarity_matrix = query.dot(&all_embeddings); + println!("Similarity matrix:\n{:?}", similarity_matrix); + + Ok(()) +} diff --git a/mobile_app/rust/src/api/mod.rs b/mobile_app/rust/src/api/mod.rs index 6f73411..cfed603 100644 --- a/mobile_app/rust/src/api/mod.rs +++ b/mobile_app/rust/src/api/mod.rs @@ -1,3 +1,2 @@ pub mod simple; -pub mod similarity; pub mod acho; diff --git a/mobile_app/rust/src/api/similarity.rs b/mobile_app/rust/src/api/similarity.rs deleted file mode 100644 index efa67bb..0000000 --- a/mobile_app/rust/src/api/similarity.rs +++ /dev/null @@ -1,12 +0,0 @@ -use anyhow::Result; -use crate::api::acho::{load_artifacts, Embeddings, run_inference}; - -fn semanticSearch(texts: &Vec) -> Result<()> { - let (tokenizer, mut model) = load_artifacts()?; - - let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let similarity_matrix = all_embeddings.dot(&all_embeddings.t()); - println!("Similarity matrix:\n{:?}", similarity_matrix); - - Ok(()) -} diff --git a/mobile_app/rust/src/frb_generated.rs b/mobile_app/rust/src/frb_generated.rs index 28372d1..3a26727 100644 --- a/mobile_app/rust/src/frb_generated.rs +++ b/mobile_app/rust/src/frb_generated.rs @@ -45,7 +45,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1792731214; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1979550112; // Section: executor @@ -53,6 +53,45 @@ flutter_rust_bridge::frb_generated_default_handler!(); // Section: wire_funcs +fn wire__crate__api__acho__get_encoding_array_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::TaskInfo { + debug_name: "get_encoding_array", + 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_encodings = >::sse_decode(&mut deserializer); + let api_encoding_type = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::get_encoding_array( + &api_encodings, + api_encoding_type, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} fn wire__crate__api__simple__greet_impl( ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, rust_vec_len_: i32, @@ -225,12 +264,112 @@ fn wire__crate__api__acho__run_inference_impl( }, ) } +fn wire__crate__api__acho__similarity_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::TaskInfo { + debug_name: "similarity", + 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_query = >::sse_decode(&mut deserializer); + let api_texts = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::similarity(&api_query, &api_texts)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__acho__tokenize_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::TaskInfo { + debug_name: "tokenize", + 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_texts = >::sse_decode(&mut deserializer); + let api_tokenizer = , + >>::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let mut api_tokenizer_guard = None; + let decode_indices_ = + flutter_rust_bridge::for_generated::lockable_compute_decode_order( + vec![flutter_rust_bridge::for_generated::LockableOrderInfo::new( + &api_tokenizer, + 0, + false, + )], + ); + for i in decode_indices_ { + match i { + 0 => { + api_tokenizer_guard = + Some(api_tokenizer.lockable_decode_sync_ref()) + } + _ => unreachable!(), + } + } + let api_tokenizer_guard = api_tokenizer_guard.unwrap(); + let output_ok = + crate::api::acho::tokenize(&api_texts, &*api_tokenizer_guard)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} // Section: related_funcs flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::for_generated::RustAutoOpaqueInner> ); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner> +); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::for_generated::RustAutoOpaqueInner ); @@ -258,6 +397,26 @@ impl SseDecode for Array2 { } } +impl SseDecode for Array2 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = >, + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode for Encoding { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = , + >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + impl SseDecode for Session { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -288,6 +447,26 @@ impl SseDecode } } +impl SseDecode + for RustOpaqueMoi>> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + +impl SseDecode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + impl SseDecode for RustOpaqueMoi> { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -314,6 +493,37 @@ impl SseDecode for String { } } +impl SseDecode for crate::api::acho::EncodingType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return match inner { + 0 => crate::api::acho::EncodingType::Ids, + 1 => crate::api::acho::EncodingType::AttentionMask, + _ => unreachable!("Invalid variant for EncodingType: {}", inner), + }; + } +} + +impl SseDecode for i32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_i32::().unwrap() + } +} + +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -338,6 +548,15 @@ impl SseDecode for Vec { } } +impl SseDecode for (Array2, Array2) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_field0 = >::sse_decode(deserializer); + let mut var_field1 = >::sse_decode(deserializer); + return (var_field0, var_field1); + } +} + impl SseDecode for (Tokenizer, Session) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -366,13 +585,6 @@ impl SseDecode for usize { } } -impl SseDecode for i32 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - deserializer.cursor.read_i32::().unwrap() - } -} - impl SseDecode for bool { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -389,9 +601,12 @@ fn pde_ffi_dispatcher_primary_impl( ) { // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { - 2 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), - 3 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), - 4 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), + 1 => wire__crate__api__acho__get_encoding_array_impl(port, ptr, rust_vec_len, data_len), + 3 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), + 4 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), + 6 => wire__crate__api__acho__similarity_impl(port, ptr, rust_vec_len, data_len), + 7 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -404,7 +619,7 @@ 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 { - 1 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), + 2 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -426,6 +641,36 @@ impl flutter_rust_bridge::IntoIntoDart>> for Array2 } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper> { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper> {} + +impl flutter_rust_bridge::IntoIntoDart>> for Array2 { + fn into_into_dart(self) -> FrbWrapper> { + self.into() + } +} + +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper {} + +impl flutter_rust_bridge::IntoIntoDart> for Encoding { + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} + // Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for FrbWrapper { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { @@ -456,6 +701,28 @@ impl flutter_rust_bridge::IntoIntoDart> for Tokenizer { } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::acho::EncodingType { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + match self { + Self::Ids => 0.into_dart(), + Self::AttentionMask => 1.into_dart(), + _ => unreachable!(), + } + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::api::acho::EncodingType +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::acho::EncodingType +{ + fn into_into_dart(self) -> crate::api::acho::EncodingType { + self + } +} + impl SseEncode for flutter_rust_bridge::for_generated::anyhow::Error { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -470,6 +737,20 @@ impl SseEncode for Array2 { } } +impl SseEncode for Array2 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + +impl SseEncode for Encoding { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); + } +} + impl SseEncode for Session { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -495,6 +776,28 @@ impl SseEncode } } +impl SseEncode + for RustOpaqueMoi>> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + +impl SseEncode + for RustOpaqueMoi> +{ + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + impl SseEncode for RustOpaqueMoi> { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -522,6 +825,39 @@ impl SseEncode for String { } } +impl SseEncode for crate::api::acho::EncodingType { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode( + match self { + crate::api::acho::EncodingType::Ids => 0, + crate::api::acho::EncodingType::AttentionMask => 1, + _ => { + unimplemented!(""); + } + }, + serializer, + ); + } +} + +impl SseEncode for i32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_i32::(self).unwrap(); + } +} + +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -542,6 +878,14 @@ impl SseEncode for Vec { } } +impl SseEncode for (Array2, Array2) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.0, serializer); + >::sse_encode(self.1, serializer); + } +} + impl SseEncode for (Tokenizer, Session) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -572,13 +916,6 @@ impl SseEncode for usize { } } -impl SseEncode for i32 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - serializer.cursor.write_i32::(self).unwrap(); - } -} - impl SseEncode for bool { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -626,6 +963,34 @@ mod io { MoiArc::>>::decrement_strong_count(ptr as _); } + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::decrement_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[unsafe(no_mangle)] + pub extern "C" fn frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } + #[unsafe(no_mangle)] pub extern "C" fn frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( ptr: *const std::ffi::c_void, @@ -700,6 +1065,34 @@ mod web { MoiArc::>>::decrement_strong_count(ptr as _); } + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>>::decrement_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } + #[wasm_bindgen] pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( ptr: *const std::ffi::c_void, From ec42bd202362a3174a30c30945994196f291827e Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 28 Jan 2026 22:42:34 +0000 Subject: [PATCH 04/32] update manifest for release mode --- mobile_app/android/app/src/main/AndroidManifest.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mobile_app/android/app/src/main/AndroidManifest.xml b/mobile_app/android/app/src/main/AndroidManifest.xml index bb3e8cc..275b284 100644 --- a/mobile_app/android/app/src/main/AndroidManifest.xml +++ b/mobile_app/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,10 @@ + + + + + Date: Thu, 29 Jan 2026 10:41:32 +0000 Subject: [PATCH 05/32] use from_file for tokenizer and model --- inference/src/lib.rs | 31 +++++++++++++++++++++---------- inference/src/main.rs | 19 +++++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/inference/src/lib.rs b/inference/src/lib.rs index 56d32e5..096dffc 100644 --- a/inference/src/lib.rs +++ b/inference/src/lib.rs @@ -7,17 +7,18 @@ use ort::session::builder::GraphOptimizationLevel; type EncodingArray = ndarray::Array2; type InputIds = ndarray::Array2; -type AttentionMask = ndarray::Array2; +pub type AttentionMask = ndarray::Array2; pub type Embeddings = ndarray::Array2; -enum EncodingType { + +pub enum EncodingType { Ids, AttentionMask } -pub fn load_artifacts() -> Result<(Tokenizer, Session)> { - let mut tokenizer = Tokenizer::from_pretrained("abdulmatinomotoso/bge-finetuned", None) +pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { + let mut tokenizer = Tokenizer::from_file(&tokenizer_path) .expect("Failed to load tokenizer."); let padding = Some(tokenizers::PaddingParams { strategy: tokenizers::PaddingStrategy::BatchLongest, @@ -29,8 +30,6 @@ pub fn load_artifacts() -> Result<(Tokenizer, Session)> { }); tokenizer.with_padding(padding); - let model_path = env::var("ACHO_MODEL_PATH") - .unwrap_or("weights/model.onnx".to_string()); let session = Session::builder()? .with_optimization_level(GraphOptimizationLevel::Level1)? .with_intra_threads(4)? @@ -38,7 +37,7 @@ pub fn load_artifacts() -> Result<(Tokenizer, Session)> { Ok((tokenizer, session)) } -fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { +pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { let extract: fn(&Encoding) -> &[u32] = match encoding_type { EncodingType::Ids => |e: &Encoding| e.get_ids(), EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), @@ -55,7 +54,7 @@ fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> ) } -fn tokenize(texts: &[&str], tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { +pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { let encodings = tokenizer.encode_batch(texts.to_vec(), true) .expect("Tokenization failed."); @@ -64,7 +63,7 @@ fn tokenize(texts: &[&str], tokenizer: &Tokenizer) -> Result<(InputIds, Attentio Ok((input_ids, attention_mask)) } -pub fn run_inference<'a>(text: &[&str], model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ +pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ let (tokens, attn_mask) = tokenize(text, tokenizer)?; let token_input_value = ort::value::Tensor::from_array(tokens)?; let attn_mask_input_value = ort::value::Tensor::from_array(attn_mask)?; @@ -76,4 +75,16 @@ pub fn run_inference<'a>(text: &[&str], model: &'a mut Session, tokenizer: &Toke .into_dimensionality::() .expect("Failed to convert embeddings to 2D array."); Ok(dense_embeddings.to_owned()) -} \ No newline at end of file +} + +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String) -> Result<()> { + let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; + + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; + + let similarity_matrix = query.dot(&all_embeddings); + println!("Similarity matrix:\n{:?}", similarity_matrix); + + Ok(()) +} diff --git a/inference/src/main.rs b/inference/src/main.rs index d971edb..592582d 100644 --- a/inference/src/main.rs +++ b/inference/src/main.rs @@ -1,17 +1,24 @@ use anyhow::Result; +use ndarray_stats::QuantileExt; use inference::{load_artifacts, Embeddings, run_inference}; fn main() -> Result<()> { - let (tokenizer, mut model) = load_artifacts()?; + let (tokenizer, mut model) = load_artifacts("../mobile_app/assets/model.onnx".to_string(), "../mobile_app/assets/tokenizer.json".to_string())?; let texts = vec![ - "What is your name", - "Ki lo ruko e?", - "Ki lo je losan?" + "What is your name".to_string(), + "Ki lo ruko e?".to_string(), + "Ki lo je losan?".to_string(), + ]; + let query = vec![ + "Ki lo ruko e?".to_string(), ]; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let similarity_matrix = all_embeddings.dot(&all_embeddings.t()); + let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + + let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); + println!("Most similar statement: \n{:?}", similarity_matrix.argmax()); Ok(()) -} \ No newline at end of file +} From a939fefdb00a50a1f9f066acea5b0d596d1b0e61 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 16:33:33 +0000 Subject: [PATCH 06/32] add ndarraystats for argmax --- inference/Cargo.lock | 100 ++++++++++++++++++++++++++++++++++++++++--- inference/Cargo.toml | 1 + inference/src/lib.rs | 1 - 3 files changed, 94 insertions(+), 8 deletions(-) diff --git a/inference/Cargo.lock b/inference/Cargo.lock index 13f4cb8..89a1bf2 100644 --- a/inference/Cargo.lock +++ b/inference/Cargo.lock @@ -330,6 +330,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "errno" version = "0.3.14" @@ -424,6 +430,12 @@ dependencies = [ "wasip2", ] +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + [[package]] name = "hf-hub" version = "0.4.3" @@ -435,7 +447,7 @@ dependencies = [ "indicatif 0.17.11", "libc", "log", - "rand", + "rand 0.9.2", "serde", "serde_json", "thiserror", @@ -573,6 +585,16 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown", +] + [[package]] name = "indicatif" version = "0.17.11" @@ -605,10 +627,20 @@ version = "0.1.0" dependencies = [ "anyhow", "ndarray", + "ndarray-stats", "ort", "tokenizers", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -776,6 +808,30 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "ndarray-stats" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6e54a8b65764f71827a90ca1d56965ec0c67f069f996477bd493402a901d1f" +dependencies = [ + "indexmap", + "itertools 0.13.0", + "ndarray", + "noisy_float", + "num-integer", + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "noisy_float" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c16843be85dd410c6a12251c4eca0dd1d3ee8c5725f746c4d5e0fdcec0a864b2" +dependencies = [ + "num-traits", +] + [[package]] name = "nom" version = "7.1.3" @@ -1011,14 +1067,35 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha", - "rand_core", + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -1028,7 +1105,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", ] [[package]] @@ -1063,7 +1149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f" dependencies = [ "either", - "itertools", + "itertools 0.14.0", "rayon", ] @@ -1411,13 +1497,13 @@ dependencies = [ "getrandom 0.3.4", "hf-hub", "indicatif 0.18.3", - "itertools", + "itertools 0.14.0", "log", "macro_rules_attribute", "monostate", "onig", "paste", - "rand", + "rand 0.9.2", "rayon", "rayon-cond", "regex", diff --git a/inference/Cargo.toml b/inference/Cargo.toml index e1b0768..e7f1549 100644 --- a/inference/Cargo.toml +++ b/inference/Cargo.toml @@ -8,6 +8,7 @@ ndarray = "0.17.2" tokenizers = { version = "0.22.2", default-features = false, features = ["esaxx_fast", "indicatif", "onig", "progressbar", "hf-hub", "http"] } ort = { version = "2.0.0-rc.11" } anyhow = "1.0.100" +ndarray-stats = "0.7.0" [target.'cfg(target_os = "android")'.dependencies] ort = { version = "2.0.0-rc.11", default-features = false, features = ["ndarray", "copy-dylibs", "std", "tls-native"] } diff --git a/inference/src/lib.rs b/inference/src/lib.rs index 096dffc..cf00fab 100644 --- a/inference/src/lib.rs +++ b/inference/src/lib.rs @@ -1,4 +1,3 @@ -use std::env; use anyhow::Result; use tokenizers::{Encoding, Tokenizer}; From 78aee6d1dc6952bdf95357fe2c23d5597abe0aca Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 18:05:02 +0000 Subject: [PATCH 07/32] modified to include top K --- inference/src/lib.rs | 24 ++++++++++++++++++++++++ inference/src/main.rs | 10 ++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/inference/src/lib.rs b/inference/src/lib.rs index cf00fab..b3bbdfe 100644 --- a/inference/src/lib.rs +++ b/inference/src/lib.rs @@ -16,6 +16,11 @@ pub enum EncodingType { AttentionMask } +pub struct SimilarityScore { + pub index: usize, + pub score: f32, +} + pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { let mut tokenizer = Tokenizer::from_file(&tokenizer_path) .expect("Failed to load tokenizer."); @@ -87,3 +92,22 @@ pub fn similarity(query: &Vec, texts: &Vec, model_path: String, Ok(()) } + +pub fn get_top_k(scores: Vec, k: usize) -> Result> { + + let mut indexed_scores: Vec<(usize, f32)> = scores + .into_iter() + .enumerate() + .collect(); + + indexed_scores.select_nth_unstable_by(k - 1, |a, b| { + b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal) + }); + + let mut top_k = indexed_scores.into_iter().take(k).collect::>(); + top_k.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); + + Ok(top_k.into_iter() + .map(|(index, score)| SimilarityScore { index, score }) + .collect()) +} diff --git a/inference/src/main.rs b/inference/src/main.rs index 592582d..8ee9831 100644 --- a/inference/src/main.rs +++ b/inference/src/main.rs @@ -1,7 +1,7 @@ use anyhow::Result; use ndarray_stats::QuantileExt; -use inference::{load_artifacts, Embeddings, run_inference}; +use inference::{load_artifacts, Embeddings, run_inference, get_top_k}; fn main() -> Result<()> { let (tokenizer, mut model) = load_artifacts("../mobile_app/assets/model.onnx".to_string(), "../mobile_app/assets/tokenizer.json".to_string())?; @@ -18,7 +18,13 @@ fn main() -> Result<()> { let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); - println!("Most similar statement: \n{:?}", similarity_matrix.argmax()); + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + + let top_k = get_top_k(_raw_score, 3)?; + for i in top_k { + println!("{0} {1}", i.score, i.index); + } + Ok(()) } From 56f7b0f45c34289c701a5d6f24bcbfe89252ef0c Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 18:06:47 +0000 Subject: [PATCH 08/32] wip flutter_rust_bridge --- mobile_app/lib/home.dart | 14 +- mobile_app/lib/main.dart | 2 - mobile_app/lib/src/rust/api/acho.dart | 34 +- mobile_app/lib/src/rust/frb_generated.dart | 185 +++++- mobile_app/lib/src/rust/frb_generated.io.dart | 50 ++ .../lib/src/rust/frb_generated.web.dart | 50 ++ mobile_app/lib/utils.dart | 22 +- mobile_app/rust/Cargo.lock | 593 ++---------------- mobile_app/rust/Cargo.toml | 2 +- mobile_app/rust/src/api/acho.rs | 35 +- mobile_app/rust/src/frb_generated.rs | 176 +++++- 11 files changed, 556 insertions(+), 607 deletions(-) diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index d0836e0..6ec8efd 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -83,21 +83,21 @@ class _HomeAppState extends State { onChanged: (text) {}, onSubmitted: (text) async { - final List docs = await compute(findMatch, text); - // final List ocs = await compute(semanticSearch, text); - // print(ocs); + // final List docs = await compute(findMatch, text); + final List ocs = await semanticSearch(text); //TODO: Handle enter key press, //TODO: similar to above depending on latency we may just use this saveSearchHistory(text); - setState(() { - matchedDocuments = docs; - }); - List _searchedItems = await getSearchHistory(); setState(() { searchedItems = _searchedItems; }); + // setState(() { + // matchedDocuments = docs; + // }); + + }, ), ), diff --git a/mobile_app/lib/main.dart b/mobile_app/lib/main.dart index abcdf67..388ff4c 100644 --- a/mobile_app/lib/main.dart +++ b/mobile_app/lib/main.dart @@ -3,9 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mobile_app/settings.dart'; -import 'package:flutter/foundation.dart'; import 'package:mobile_app/home.dart'; -import 'package:mobile_app/file.dart'; import 'package:flutter_tantivy/flutter_tantivy.dart'; import 'package:path_provider/path_provider.dart'; import 'package:mobile_app/storage.dart'; diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart index a5a31fe..723f56d 100644 --- a/mobile_app/lib/src/rust/api/acho.dart +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -27,9 +27,16 @@ Future runInference( RustLib.instance.api.crateApiAchoRunInference( text: text, model: model, tokenizer: tokenizer); -Future similarity( - {required List query, required List texts}) => - RustLib.instance.api.crateApiAchoSimilarity(query: query, texts: texts); +Future> getTopK( + {required List scores, required BigInt k}) => + RustLib.instance.api.crateApiAchoGetTopK(scores: scores, k: k); + +List similarity( + {required List query, + required List texts, + required BigInt topK}) => + RustLib.instance.api + .crateApiAchoSimilarity(query: query, texts: texts, topK: topK); // Rust type: RustOpaqueMoi>> abstract class Array2F32 implements RustOpaqueInterface {} @@ -51,3 +58,24 @@ enum EncodingType { attentionMask, ; } + +class SimilarityScore { + final BigInt index; + final double score; + + const SimilarityScore({ + required this.index, + required this.score, + }); + + @override + int get hashCode => index.hashCode ^ score.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is SimilarityScore && + runtimeType == other.runtimeType && + index == other.index && + score == other.score; +} diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart index fab7e03..cb624f3 100644 --- a/mobile_app/lib/src/rust/frb_generated.dart +++ b/mobile_app/lib/src/rust/frb_generated.dart @@ -71,7 +71,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.11.1'; @override - int get rustContentHash => 1979550112; + int get rustContentHash => 575727880; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( @@ -85,6 +85,9 @@ abstract class RustLibApi extends BaseApi { Future crateApiAchoGetEncodingArray( {required List encodings, required EncodingType encodingType}); + Future> crateApiAchoGetTopK( + {required List scores, required BigInt k}); + String crateApiSimpleGreet({required String name}); Future crateApiSimpleInitApp(); @@ -96,8 +99,10 @@ abstract class RustLibApi extends BaseApi { required Session model, required Tokenizer tokenizer}); - Future crateApiAchoSimilarity( - {required List query, required List texts}); + List crateApiAchoSimilarity( + {required List query, + required List texts, + required BigInt topK}); Future<(Array2I64, Array2I64)> crateApiAchoTokenize( {required List texts, required Tokenizer tokenizer}); @@ -178,13 +183,39 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["encodings", "encodingType"], ); + @override + Future> crateApiAchoGetTopK( + {required List scores, required BigInt k}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_prim_f_32_loose(scores, serializer); + sse_encode_usize(k, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 2, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_similarity_score, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoGetTopKConstMeta, + argValues: [scores, k], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoGetTopKConstMeta => const TaskConstMeta( + debugName: "get_top_k", + argNames: ["scores", "k"], + ); + @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: 2)!; + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3)!; }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -207,7 +238,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 3, port: port_); + funcId: 4, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -230,7 +261,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 4, port: port_); + funcId: 5, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -262,7 +293,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( tokenizer, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 5, port: port_); + funcId: 6, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -281,29 +312,31 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); @override - Future crateApiAchoSimilarity( - {required List query, required List texts}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { + List crateApiAchoSimilarity( + {required List query, + required List texts, + required BigInt topK}) { + return handler.executeSync(SyncTask( + callFfi: () { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_list_String(query, serializer); sse_encode_list_String(texts, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 6, port: port_); + sse_encode_usize(topK, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 7)!; }, codec: SseCodec( - decodeSuccessData: sse_decode_unit, + decodeSuccessData: sse_decode_list_similarity_score, decodeErrorData: sse_decode_AnyhowException, ), constMeta: kCrateApiAchoSimilarityConstMeta, - argValues: [query, texts], + argValues: [query, texts, topK], apiImpl: this, )); } TaskConstMeta get kCrateApiAchoSimilarityConstMeta => const TaskConstMeta( debugName: "similarity", - argNames: ["query", "texts"], + argNames: ["query", "texts", "topK"], ); @override @@ -316,7 +349,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( tokenizer, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 7, port: port_); + funcId: 8, port: port_); }, codec: SseCodec( decodeSuccessData: @@ -488,6 +521,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return EncodingType.values[raw as int]; } + @protected + double dco_decode_f_32(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as double; + } + @protected int dco_decode_i_32(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -511,12 +550,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (raw as List).map(dco_decode_String).toList(); } + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as List; + } + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as Float32List; + } + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return raw as Uint8List; } + @protected + List dco_decode_list_similarity_score(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_similarity_score).toList(); + } + @protected ( Array2I64, @@ -555,6 +612,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); } + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) + throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return SimilarityScore( + index: dco_decode_usize(arr[0]), + score: dco_decode_f_32(arr[1]), + ); + } + @protected int dco_decode_u_8(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -702,6 +771,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return EncodingType.values[inner]; } + @protected + double sse_decode_f_32(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getFloat32(); + } + @protected int sse_decode_i_32(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -736,6 +811,20 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return ans_; } + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getFloat32List(len_); + } + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getFloat32List(len_); + } + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -743,6 +832,19 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8List(len_); } + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_similarity_score(deserializer)); + } + return ans_; + } + @protected ( Array2I64, @@ -775,6 +877,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return (var_field0, var_field1); } + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_index = sse_decode_usize(deserializer); + var var_score = sse_decode_f_32(deserializer); + return SimilarityScore(index: var_index, score: var_score); + } + @protected int sse_decode_u_8(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -925,6 +1035,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_i_32(self.index, serializer); } + @protected + void sse_encode_f_32(double self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putFloat32(self); + } + @protected void sse_encode_i_32(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -952,6 +1068,23 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } + @protected + void sse_encode_list_prim_f_32_loose( + List 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)); + } + + @protected + void sse_encode_list_prim_f_32_strict( + 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); + } + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer) { @@ -960,6 +1093,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8List(self); } + @protected + void sse_encode_list_similarity_score( + List 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_similarity_score(item, serializer); + } + } + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( @@ -982,6 +1125,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { self.$2, serializer); } + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize(self.index, serializer); + sse_encode_f_32(self.score, serializer); + } + @protected void sse_encode_u_8(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs diff --git a/mobile_app/lib/src/rust/frb_generated.io.dart b/mobile_app/lib/src/rust/frb_generated.io.dart index 9f52f1d..fb9013c 100644 --- a/mobile_app/lib/src/rust/frb_generated.io.dart +++ b/mobile_app/lib/src/rust/frb_generated.io.dart @@ -103,6 +103,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected EncodingType dco_decode_encoding_type(dynamic raw); + @protected + double dco_decode_f_32(dynamic raw); + @protected int dco_decode_i_32(dynamic raw); @@ -114,9 +117,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected List dco_decode_list_String(dynamic raw); + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw); + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + List dco_decode_list_similarity_score(dynamic raw); + @protected ( Array2I64, @@ -131,6 +143,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( dynamic raw); + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw); + @protected int dco_decode_u_8(dynamic raw); @@ -209,6 +224,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + @protected + double sse_decode_f_32(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @@ -220,9 +238,19 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected List sse_decode_list_String(SseDeserializer deserializer); + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer); + @protected ( Array2I64, @@ -237,6 +265,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( SseDeserializer deserializer); + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); @@ -319,6 +350,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + @protected + void sse_encode_f_32(double self, SseSerializer serializer); + @protected void sse_encode_i_32(int self, SseSerializer serializer); @@ -330,10 +364,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_list_String(List self, SseSerializer serializer); + @protected + void sse_encode_list_prim_f_32_loose( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_strict( + Float32List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void sse_encode_list_similarity_score( + List self, SseSerializer serializer); + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( @@ -344,6 +390,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( (Tokenizer, Session) self, SseSerializer serializer); + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); diff --git a/mobile_app/lib/src/rust/frb_generated.web.dart b/mobile_app/lib/src/rust/frb_generated.web.dart index 4e13402..75807ae 100644 --- a/mobile_app/lib/src/rust/frb_generated.web.dart +++ b/mobile_app/lib/src/rust/frb_generated.web.dart @@ -105,6 +105,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected EncodingType dco_decode_encoding_type(dynamic raw); + @protected + double dco_decode_f_32(dynamic raw); + @protected int dco_decode_i_32(dynamic raw); @@ -116,9 +119,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected List dco_decode_list_String(dynamic raw); + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw); + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + List dco_decode_list_similarity_score(dynamic raw); + @protected ( Array2I64, @@ -133,6 +145,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( dynamic raw); + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw); + @protected int dco_decode_u_8(dynamic raw); @@ -211,6 +226,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + @protected + double sse_decode_f_32(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @@ -222,9 +240,19 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected List sse_decode_list_String(SseDeserializer deserializer); + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer); + @protected ( Array2I64, @@ -239,6 +267,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( SseDeserializer deserializer); + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); @@ -321,6 +352,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + @protected + void sse_encode_f_32(double self, SseSerializer serializer); + @protected void sse_encode_i_32(int self, SseSerializer serializer); @@ -332,10 +366,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_list_String(List self, SseSerializer serializer); + @protected + void sse_encode_list_prim_f_32_loose( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_strict( + Float32List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void sse_encode_list_similarity_score( + List self, SseSerializer serializer); + @protected void sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( @@ -346,6 +392,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( (Tokenizer, Session) self, SseSerializer serializer); + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); diff --git a/mobile_app/lib/utils.dart b/mobile_app/lib/utils.dart index aaad1b7..2bf15ae 100644 --- a/mobile_app/lib/utils.dart +++ b/mobile_app/lib/utils.dart @@ -1,6 +1,5 @@ import 'dart:io'; import 'package:permission_handler/permission_handler.dart'; -import 'package:mobile_app/src/rust/api/simple.dart'; import 'package:mobile_app/src/rust/api/acho.dart'; import 'package:path_provider/path_provider.dart'; import 'package:flutter_tantivy/flutter_tantivy.dart'; @@ -96,18 +95,19 @@ Future> findMatch(String query) async { query: query, topK: BigInt.from(10), ); - print(results); + // print(results); return results; } -// Future>> -// Future> semanticSearch(String query) async { -// await RustLib.init(); -// final results = await similarity( -// query: [query], -// texts: ["Today is a good day", "What is going on?"] -// ); -// return ["Semantic Search Button pressed"]; -// } + +Future> semanticSearch(String query) async { + final score = await similarity( + query: [query], + texts: ["Today is a good day", "What is going on?"], + topK: BigInt.from(3) + ); + print(score); + return ["Semantic Search Button pressed"]; +} Future saveSearchHistory(String text) async { final query = text.trim(); diff --git a/mobile_app/rust/Cargo.lock b/mobile_app/rust/Cargo.lock index 34bdbbb..4cc3ca3 100644 --- a/mobile_app/rust/Cargo.lock +++ b/mobile_app/rust/Cargo.lock @@ -51,12 +51,6 @@ dependencies = [ "backtrace", ] -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "android_log-sys" version = "0.3.2" @@ -80,26 +74,6 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" -[[package]] -name = "arc-swap" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" -dependencies = [ - "rustversion", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atomic" version = "0.5.3" @@ -151,15 +125,6 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" -[[package]] -name = "bitpacking" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" -dependencies = [ - "crunchy", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -169,31 +134,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bon" -version = "3.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" -dependencies = [ - "bon-macros", - "rustversion", -] - -[[package]] -name = "bon-macros" -version = "3.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" -dependencies = [ - "darling 0.23.0", - "ident_case", - "prettyplease", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - [[package]] name = "build-target" version = "0.4.0" @@ -240,17 +180,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", - "jobserver", - "libc", "shlex", ] -[[package]] -name = "census" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" - [[package]] name = "cfg-if" version = "1.0.4" @@ -333,15 +265,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -367,12 +290,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-common" version = "0.1.7" @@ -389,18 +306,8 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" -dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", + "darling_core", + "darling_macro", ] [[package]] @@ -417,37 +324,13 @@ dependencies = [ "syn", ] -[[package]] -name = "darling_core" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", - "quote", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" -dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", "syn", ] @@ -504,16 +387,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" -dependencies = [ - "powerfmt", - "serde_core", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -529,7 +402,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", "syn", @@ -587,12 +460,6 @@ dependencies = [ "syn", ] -[[package]] -name = "downcast-rs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" - [[package]] name = "either" version = "1.15.0" @@ -640,12 +507,6 @@ dependencies = [ "cc", ] -[[package]] -name = "fastdivide" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" - [[package]] name = "fastrand" version = "2.3.0" @@ -716,12 +577,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foreign-types" version = "0.3.2" @@ -746,16 +601,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs4" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" -dependencies = [ - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "futures" version = "0.3.31" @@ -892,14 +737,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "hermit-abi" @@ -938,12 +778,6 @@ version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0f0ae375a85536cac3a243e3a9cda80a47910348abdea7e2c22f8ec556d586d" -[[package]] -name = "htmlescape" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" - [[package]] name = "http" version = "1.4.0" @@ -960,15 +794,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "hyperloglogplus" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3" -dependencies = [ - "serde", -] - [[package]] name = "icu_collections" version = "2.1.1" @@ -1077,6 +902,16 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", +] + [[package]] name = "indicatif" version = "0.17.11" @@ -1103,6 +938,15 @@ dependencies = [ "web-time", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -1118,16 +962,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - [[package]] name = "js-sys" version = "0.3.85" @@ -1144,24 +978,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "levenshtein_automata" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" - [[package]] name = "libc" version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - [[package]] name = "libredox" version = "0.1.12" @@ -1199,21 +1021,6 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "lz4_flex" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" - [[package]] name = "lzma-rust2" version = "0.15.7" @@ -1256,30 +1063,12 @@ dependencies = [ "digest", ] -[[package]] -name = "measure_time" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e" -dependencies = [ - "log", -] - [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "memmap2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" -dependencies = [ - "libc", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1318,12 +1107,6 @@ dependencies = [ "syn", ] -[[package]] -name = "murmurhash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" - [[package]] name = "native-tls" version = "0.2.14" @@ -1356,6 +1139,30 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "ndarray-stats" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6e54a8b65764f71827a90ca1d56965ec0c67f069f996477bd493402a901d1f" +dependencies = [ + "indexmap", + "itertools 0.13.0", + "ndarray", + "noisy_float", + "num-integer", + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "noisy_float" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c16843be85dd410c6a12251c4eca0dd1d3ee8c5725f746c4d5e0fdcec0a864b2" +dependencies = [ + "num-traits", +] + [[package]] name = "nom" version = "7.1.3" @@ -1375,12 +1182,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-conv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" - [[package]] name = "num-integer" version = "0.1.46" @@ -1397,7 +1198,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1431,12 +1231,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "oneshot" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ce66197e99546da6c6d991285f605192e794ceae69686c17163844a7bf8fcc2" - [[package]] name = "onig" version = "6.5.1" @@ -1544,15 +1338,6 @@ dependencies = [ "log", ] -[[package]] -name = "ownedbytes" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "parking_lot_core" version = "0.9.12" @@ -1629,12 +1414,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1644,16 +1423,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" version = "1.0.106" @@ -1737,16 +1506,6 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "rawpointer" version = "0.2.1" @@ -1770,7 +1529,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f" dependencies = [ "either", - "itertools", + "itertools 0.14.0", "rayon", ] @@ -1847,16 +1606,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rust-stemmers" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -dependencies = [ - "serde", - "serde_derive", -] - [[package]] name = "rust_lib_mobile_app" version = "0.1.0" @@ -1864,8 +1613,8 @@ dependencies = [ "anyhow", "flutter_rust_bridge", "ndarray", + "ndarray-stats", "ort", - "tantivy", "tokenizers", ] @@ -1875,12 +1624,6 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - [[package]] name = "rustix" version = "1.1.3" @@ -2034,15 +1777,6 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" -[[package]] -name = "sketches-ddsketch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" -dependencies = [ - "serde", -] - [[package]] name = "slab" version = "0.4.11" @@ -2124,152 +1858,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tantivy" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545" -dependencies = [ - "aho-corasick", - "arc-swap", - "base64 0.22.1", - "bitpacking", - "bon", - "byteorder", - "census", - "crc32fast", - "crossbeam-channel", - "downcast-rs", - "fastdivide", - "fnv", - "fs4", - "htmlescape", - "hyperloglogplus", - "itertools", - "levenshtein_automata", - "log", - "lru", - "lz4_flex", - "measure_time", - "memmap2", - "once_cell", - "oneshot", - "rayon", - "regex", - "rust-stemmers", - "rustc-hash", - "serde", - "serde_json", - "sketches-ddsketch", - "smallvec", - "tantivy-bitpacker", - "tantivy-columnar", - "tantivy-common", - "tantivy-fst", - "tantivy-query-grammar", - "tantivy-stacker", - "tantivy-tokenizer-api", - "tempfile", - "thiserror", - "time", - "uuid", - "winapi", -] - -[[package]] -name = "tantivy-bitpacker" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b04eed5108d8283607da6710fe17a7663523440eaf7ea5a1a440d19a1448b6" -dependencies = [ - "bitpacking", -] - -[[package]] -name = "tantivy-columnar" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b628488ae936c83e92b5c4056833054ca56f76c0e616aee8339e24ac89119cd" -dependencies = [ - "downcast-rs", - "fastdivide", - "itertools", - "serde", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-sstable", - "tantivy-stacker", -] - -[[package]] -name = "tantivy-common" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f880aa7cab0c063a47b62596d10991cdd0b6e0e0575d9c5eeb298b307a25de55" -dependencies = [ - "async-trait", - "byteorder", - "ownedbytes", - "serde", - "time", -] - -[[package]] -name = "tantivy-fst" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" -dependencies = [ - "byteorder", - "regex-syntax", - "utf8-ranges", -] - -[[package]] -name = "tantivy-query-grammar" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "768fccdc84d60d86235d42d7e4c33acf43c418258ff5952abf07bd7837fcd26b" -dependencies = [ - "nom", - "serde", - "serde_json", -] - -[[package]] -name = "tantivy-sstable" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8292095d1a8a2c2b36380ec455f910ab52dde516af36321af332c93f20ab7d5" -dependencies = [ - "futures-util", - "itertools", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-fst", - "zstd", -] - -[[package]] -name = "tantivy-stacker" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d38a379411169f0b3002c9cba61cdfe315f757e9d4f239c00c282497a0749d" -dependencies = [ - "murmurhash32", - "rand_distr", - "tantivy-common", -] - -[[package]] -name = "tantivy-tokenizer-api" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23024f6aeb25ceb1a0e27740c84bdb0fae52626737b7e9a9de6ad5aa25c7b038" -dependencies = [ - "serde", -] - [[package]] name = "tempfile" version = "3.24.0" @@ -2312,37 +1900,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "time" -version = "0.3.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc610bac2dcee56805c99642447d4c5dbde4d01f752ffea0199aee1f601dc4" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.8.2" @@ -2368,7 +1925,7 @@ dependencies = [ "getrandom 0.3.4", "hf-hub", "indicatif 0.18.3", - "itertools", + "itertools 0.14.0", "log", "macro_rules_attribute", "monostate", @@ -2534,30 +2091,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8-ranges" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" - [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "uuid" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" -dependencies = [ - "getrandom 0.3.4", - "js-sys", - "serde_core", - "wasm-bindgen", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -3004,31 +2543,3 @@ name = "zmij" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/mobile_app/rust/Cargo.toml b/mobile_app/rust/Cargo.toml index 8ef7d7e..7829fd8 100644 --- a/mobile_app/rust/Cargo.toml +++ b/mobile_app/rust/Cargo.toml @@ -8,10 +8,10 @@ crate-type = ["cdylib", "staticlib"] [dependencies] flutter_rust_bridge = "=2.11.1" -tantivy = "0.25.0" ndarray = "0.17.2" tokenizers = { version = "0.22.2", default-features = false, features = ["esaxx_fast", "indicatif", "onig", "progressbar", "hf-hub", "http"] } anyhow = "1.0.100" +ndarray-stats = "0.7.0" ort = { version = "2.0.0-rc.11" } [lints.rust] diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index a832a8f..dd175c4 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -10,7 +10,10 @@ type InputIds = ndarray::Array2; pub type AttentionMask = ndarray::Array2; pub type Embeddings = ndarray::Array2; - +pub struct SimilarityScore { + pub index: usize, + pub score: f32, +} pub enum EncodingType { Ids, @@ -79,14 +82,36 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } -pub fn similarity(query: &Vec, texts: &Vec) -> Result<()> { + +pub fn get_top_k(scores: Vec, k: usize) -> Result> { + + let mut indexed_scores: Vec<(usize, f32)> = scores + .into_iter() + .enumerate() + .collect(); + + indexed_scores.select_nth_unstable_by(k - 1, |a, b| { + b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal) + }); + + let mut top_k = indexed_scores.into_iter().take(k).collect::>(); + top_k.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); + + Ok(top_k.into_iter() + .map(|(index, score)| SimilarityScore { index, score }) + .collect()) +} + +#[flutter_rust_bridge::frb(sync)] +pub fn similarity(query: &Vec, texts: &Vec, topK: usize) -> Result> { let (tokenizer, mut model) = load_artifacts()?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; - let similarity_matrix = query.dot(&all_embeddings); - println!("Similarity matrix:\n{:?}", similarity_matrix); - Ok(()) + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + let top_k = get_top_k(_raw_score, topK)?; + + Ok((top_k)) } diff --git a/mobile_app/rust/src/frb_generated.rs b/mobile_app/rust/src/frb_generated.rs index 3a26727..6706e91 100644 --- a/mobile_app/rust/src/frb_generated.rs +++ b/mobile_app/rust/src/frb_generated.rs @@ -45,7 +45,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1979550112; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 575727880; // Section: executor @@ -92,6 +92,42 @@ fn wire__crate__api__acho__get_encoding_array_impl( }, ) } +fn wire__crate__api__acho__get_top_k_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::TaskInfo { + debug_name: "get_top_k", + 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_scores = >::sse_decode(&mut deserializer); + let api_k = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::get_top_k(api_scores, api_k)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} fn wire__crate__api__simple__greet_impl( ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, rust_vec_len_: i32, @@ -265,16 +301,15 @@ fn wire__crate__api__acho__run_inference_impl( ) } fn wire__crate__api__acho__similarity_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::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( flutter_rust_bridge::for_generated::TaskInfo { debug_name: "similarity", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, }, move || { let message = unsafe { @@ -288,15 +323,14 @@ fn wire__crate__api__acho__similarity_impl( flutter_rust_bridge::for_generated::SseDeserializer::new(message); let api_query = >::sse_decode(&mut deserializer); let api_texts = >::sse_decode(&mut deserializer); + let api_topK = ::sse_decode(&mut deserializer); deserializer.end(); - move |context| { - transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( - (move || { - let output_ok = crate::api::acho::similarity(&api_query, &api_texts)?; - Ok(output_ok) - })(), - ) - } + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::similarity(&api_query, &api_texts, api_topK)?; + Ok(output_ok) + })(), + ) }, ) } @@ -505,6 +539,13 @@ impl SseDecode for crate::api::acho::EncodingType { } } +impl SseDecode for f32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_f32::().unwrap() + } +} + impl SseDecode for i32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -536,6 +577,18 @@ impl SseDecode for Vec { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -548,6 +601,20 @@ impl SseDecode for Vec { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode( + deserializer, + )); + } + return ans_; + } +} + impl SseDecode for (Array2, Array2) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -566,6 +633,18 @@ impl SseDecode for (Tokenizer, Session) { } } +impl SseDecode for crate::api::acho::SimilarityScore { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_index = ::sse_decode(deserializer); + let mut var_score = ::sse_decode(deserializer); + return crate::api::acho::SimilarityScore { + index: var_index, + score: var_score, + }; + } +} + impl SseDecode for u8 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -602,11 +681,11 @@ fn pde_ffi_dispatcher_primary_impl( // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { 1 => wire__crate__api__acho__get_encoding_array_impl(port, ptr, rust_vec_len, data_len), - 3 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), - 4 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), - 5 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), - 6 => wire__crate__api__acho__similarity_impl(port, ptr, rust_vec_len, data_len), - 7 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), + 2 => wire__crate__api__acho__get_top_k_impl(port, ptr, rust_vec_len, data_len), + 4 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), + 6 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), + 8 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -619,7 +698,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 { - 2 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), + 3 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), + 7 => wire__crate__api__acho__similarity_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -722,6 +802,27 @@ impl flutter_rust_bridge::IntoIntoDart self } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::acho::SimilarityScore { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.index.into_into_dart().into_dart(), + self.score.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::api::acho::SimilarityScore +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::acho::SimilarityScore +{ + fn into_into_dart(self) -> crate::api::acho::SimilarityScore { + self + } +} impl SseEncode for flutter_rust_bridge::for_generated::anyhow::Error { // Codec=Sse (Serialization based), see doc to use other codecs @@ -841,6 +942,13 @@ impl SseEncode for crate::api::acho::EncodingType { } } +impl SseEncode for f32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_f32::(self).unwrap(); + } +} + impl SseEncode for i32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -868,6 +976,16 @@ impl SseEncode for Vec { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -878,6 +996,16 @@ impl SseEncode for Vec { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for (Array2, Array2) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -894,6 +1022,14 @@ impl SseEncode for (Tokenizer, Session) { } } +impl SseEncode for crate::api::acho::SimilarityScore { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.index, serializer); + ::sse_encode(self.score, serializer); + } +} + impl SseEncode for u8 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { From 51e5e545fa3c63fd25cc7f79a5175f88403998d2 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 19:06:47 +0000 Subject: [PATCH 09/32] output top k --- inference/src/lib.rs | 13 ++++++---- mobile_app/rust/src/api/acho.rs | 43 +++++++++++++++------------------ 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/inference/src/lib.rs b/inference/src/lib.rs index b3bbdfe..44908db 100644 --- a/inference/src/lib.rs +++ b/inference/src/lib.rs @@ -81,16 +81,19 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String) -> Result<()> { +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: String) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; - - let similarity_matrix = query.dot(&all_embeddings); + let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); - Ok(()) + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + + let top_k = get_top_k(_raw_score, 3)?; + + Ok(top_k) } pub fn get_top_k(scores: Vec, k: usize) -> Result> { diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index dd175c4..bed1231 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -1,4 +1,3 @@ -use std::env; use anyhow::Result; use tokenizers::{Encoding, Tokenizer}; @@ -10,18 +9,20 @@ type InputIds = ndarray::Array2; pub type AttentionMask = ndarray::Array2; pub type Embeddings = ndarray::Array2; -pub struct SimilarityScore { - pub index: usize, - pub score: f32, -} pub enum EncodingType { Ids, AttentionMask } -pub fn load_artifacts() -> Result<(Tokenizer, Session)> { - let mut tokenizer = Tokenizer::from_pretrained("abdulmatinomotoso/bge-finetuned", None) +pub struct SimilarityScore { + pub index: usize, + pub score: f32, +} + +#[frb(init)] +pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { + let mut tokenizer = Tokenizer::from_file(&tokenizer_path) .expect("Failed to load tokenizer."); let padding = Some(tokenizers::PaddingParams { strategy: tokenizers::PaddingStrategy::BatchLongest, @@ -33,8 +34,6 @@ pub fn load_artifacts() -> Result<(Tokenizer, Session)> { }); tokenizer.with_padding(padding); - let model_path = env::var("ACHO_MODEL_PATH") - .unwrap_or("weights/model.onnx".to_string()); let session = Session::builder()? .with_optimization_level(GraphOptimizationLevel::Level1)? .with_intra_threads(4)? @@ -64,7 +63,7 @@ pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, .expect("Tokenization failed."); let input_ids = get_encoding_array(&encodings, EncodingType::Ids)?; - let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; + let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; Ok((input_ids, attention_mask)) } @@ -82,6 +81,16 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String) -> Result> { + let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; + + let similarity_matrix = query.dot(&all_embeddings); + println!("Similarity matrix:\n{:?}", similarity_matrix); + + Ok(top_k) +} pub fn get_top_k(scores: Vec, k: usize) -> Result> { @@ -101,17 +110,3 @@ pub fn get_top_k(scores: Vec, k: usize) -> Result> { .map(|(index, score)| SimilarityScore { index, score }) .collect()) } - -#[flutter_rust_bridge::frb(sync)] -pub fn similarity(query: &Vec, texts: &Vec, topK: usize) -> Result> { - let (tokenizer, mut model) = load_artifacts()?; - - let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; - let similarity_matrix = query.dot(&all_embeddings); - - let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); - let top_k = get_top_k(_raw_score, topK)?; - - Ok((top_k)) -} From 77dd9e851dcf4d807812965a9328364026046a37 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 19:08:22 +0000 Subject: [PATCH 10/32] app top k to similarity function --- mobile_app/rust/src/api/acho.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index bed1231..15946df 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -81,7 +81,7 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String) -> Result> { +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: i32) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; From 051b9350c37785582e3eda9d498c9b06c2da841e Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 19:13:51 +0000 Subject: [PATCH 11/32] updated generated dart file --- mobile_app/lib/src/rust/api/acho.dart | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart index 723f56d..050036b 100644 --- a/mobile_app/lib/src/rust/api/acho.dart +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -6,9 +6,6 @@ import '../frb_generated.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; -Future<(Tokenizer, Session)> loadArtifacts() => - RustLib.instance.api.crateApiAchoLoadArtifacts(); - Future getEncodingArray( {required List encodings, required EncodingType encodingType}) => @@ -27,17 +24,23 @@ Future runInference( RustLib.instance.api.crateApiAchoRunInference( text: text, model: model, tokenizer: tokenizer); +Future> similarity( + {required List query, + required List texts, + required String modelPath, + required String tokenizerPath, + required int topK}) => + RustLib.instance.api.crateApiAchoSimilarity( + query: query, + texts: texts, + modelPath: modelPath, + tokenizerPath: tokenizerPath, + topK: topK); + Future> getTopK( {required List scores, required BigInt k}) => RustLib.instance.api.crateApiAchoGetTopK(scores: scores, k: k); -List similarity( - {required List query, - required List texts, - required BigInt topK}) => - RustLib.instance.api - .crateApiAchoSimilarity(query: query, texts: texts, topK: topK); - // Rust type: RustOpaqueMoi>> abstract class Array2F32 implements RustOpaqueInterface {} From 96e2318ad7252aa21bb04a7419be3673c301d692 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 19:59:07 +0000 Subject: [PATCH 12/32] build only for arm-v8a --- .../build_tool/lib/src/build_gradle.dart | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/mobile_app/rust_builder/cargokit/build_tool/lib/src/build_gradle.dart b/mobile_app/rust_builder/cargokit/build_tool/lib/src/build_gradle.dart index 7e61fcb..fe8e9e3 100644 --- a/mobile_app/rust_builder/cargokit/build_tool/lib/src/build_gradle.dart +++ b/mobile_app/rust_builder/cargokit/build_tool/lib/src/build_gradle.dart @@ -20,14 +20,23 @@ class BuildGradle { final CargokitUserOptions userOptions; Future build() async { - final targets = Environment.targetPlatforms.map((arch) { - final target = Target.forFlutterName(arch); - if (target == null) { - throw Exception( - "Unknown darwin target or platform: $arch, ${Environment.darwinPlatformName}"); - } - return target; - }).toList(); + // final targets = Environment.targetPlatforms.map((arch) { + // final target = Target.forFlutterName(arch); + // if (target == null) { + // throw Exception( + // "Unknown darwin target or platform: $arch, ${Environment.darwinPlatformName}"); + // } + // return target; + // }).toList(); + + final targets = [ + Target( + rust: 'aarch64-linux-android', + flutter: 'android-arm64', + android: 'arm64-v8a', + androidMinSdkVersion: 21, + ) + ]; final environment = BuildEnvironment.fromEnvironment(isAndroid: true); final provider = From f523daf67770edf0709c38ec3aec09f9445fcb93 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Thu, 29 Jan 2026 19:59:48 +0000 Subject: [PATCH 13/32] checkpoint flutter_tantivy plugin plus custom ml function does not work --- mobile_app/lib/src/rust/api/acho.dart | 5 +++ mobile_app/lib/src/rust/frb_generated.dart | 39 +++++++++++++-------- mobile_app/lib/utils.dart | 6 +++- mobile_app/rust/src/api/acho.rs | 10 +++--- mobile_app/rust/src/frb_generated.rs | 40 +++++++++++++++------- 5 files changed, 68 insertions(+), 32 deletions(-) diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart index 050036b..dc6a997 100644 --- a/mobile_app/lib/src/rust/api/acho.dart +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -6,6 +6,11 @@ import '../frb_generated.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; +Future<(Tokenizer, Session)> loadArtifacts( + {required String modelPath, required String tokenizerPath}) => + RustLib.instance.api.crateApiAchoLoadArtifacts( + modelPath: modelPath, tokenizerPath: tokenizerPath); + Future getEncodingArray( {required List encodings, required EncodingType encodingType}) => diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart index cb624f3..370b699 100644 --- a/mobile_app/lib/src/rust/frb_generated.dart +++ b/mobile_app/lib/src/rust/frb_generated.dart @@ -92,17 +92,20 @@ abstract class RustLibApi extends BaseApi { Future crateApiSimpleInitApp(); - Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts(); + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( + {required String modelPath, required String tokenizerPath}); Future crateApiAchoRunInference( {required List text, required Session model, required Tokenizer tokenizer}); - List crateApiAchoSimilarity( + Future> crateApiAchoSimilarity( {required List query, required List texts, - required BigInt topK}); + required String modelPath, + required String tokenizerPath, + required int topK}); Future<(Array2I64, Array2I64)> crateApiAchoTokenize( {required List texts, required Tokenizer tokenizer}); @@ -256,10 +259,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); @override - Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts() { + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( + {required String modelPath, required String tokenizerPath}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(modelPath, serializer); + sse_encode_String(tokenizerPath, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5, port: port_); }, @@ -269,14 +275,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { decodeErrorData: sse_decode_AnyhowException, ), constMeta: kCrateApiAchoLoadArtifactsConstMeta, - argValues: [], + argValues: [modelPath, tokenizerPath], apiImpl: this, )); } TaskConstMeta get kCrateApiAchoLoadArtifactsConstMeta => const TaskConstMeta( debugName: "load_artifacts", - argNames: [], + argNames: ["modelPath", "tokenizerPath"], ); @override @@ -312,31 +318,36 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); @override - List crateApiAchoSimilarity( + Future> crateApiAchoSimilarity( {required List query, required List texts, - required BigInt topK}) { - return handler.executeSync(SyncTask( - callFfi: () { + required String modelPath, + required String tokenizerPath, + required int topK}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_list_String(query, serializer); sse_encode_list_String(texts, serializer); - sse_encode_usize(topK, serializer); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 7)!; + sse_encode_String(modelPath, serializer); + sse_encode_String(tokenizerPath, serializer); + sse_encode_i_32(topK, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 7, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_similarity_score, decodeErrorData: sse_decode_AnyhowException, ), constMeta: kCrateApiAchoSimilarityConstMeta, - argValues: [query, texts, topK], + argValues: [query, texts, modelPath, tokenizerPath, topK], apiImpl: this, )); } TaskConstMeta get kCrateApiAchoSimilarityConstMeta => const TaskConstMeta( debugName: "similarity", - argNames: ["query", "texts", "topK"], + argNames: ["query", "texts", "modelPath", "tokenizerPath", "topK"], ); @override diff --git a/mobile_app/lib/utils.dart b/mobile_app/lib/utils.dart index 2bf15ae..7d5e366 100644 --- a/mobile_app/lib/utils.dart +++ b/mobile_app/lib/utils.dart @@ -100,10 +100,14 @@ Future> findMatch(String query) async { } Future> semanticSearch(String query) async { + + // await RustLib.init(); final score = await similarity( + modelPath: "/storage/emulated/0/Download/model.onnx", + tokenizerPath: "/storage/emulated/0/Download/tokenizer.json", query: [query], texts: ["Today is a good day", "What is going on?"], - topK: BigInt.from(3) + topK: 3 ); print(score); return ["Semantic Search Button pressed"]; diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index 15946df..67a2d07 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -20,7 +20,6 @@ pub struct SimilarityScore { pub score: f32, } -#[frb(init)] pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { let mut tokenizer = Tokenizer::from_file(&tokenizer_path) .expect("Failed to load tokenizer."); @@ -84,11 +83,14 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: i32) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query: Embeddings = run_inference(query, &mut model, &tokenizer)?; - - let similarity_matrix = query.dot(&all_embeddings); + let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + + let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + let top_k = get_top_k(_raw_score, 3)?; + Ok(top_k) } diff --git a/mobile_app/rust/src/frb_generated.rs b/mobile_app/rust/src/frb_generated.rs index 6706e91..cc3a5a6 100644 --- a/mobile_app/rust/src/frb_generated.rs +++ b/mobile_app/rust/src/frb_generated.rs @@ -214,11 +214,14 @@ fn wire__crate__api__acho__load_artifacts_impl( }; let mut deserializer = flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_model_path = ::sse_decode(&mut deserializer); + let api_tokenizer_path = ::sse_decode(&mut deserializer); deserializer.end(); move |context| { transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( (move || { - let output_ok = crate::api::acho::load_artifacts()?; + let output_ok = + crate::api::acho::load_artifacts(api_model_path, api_tokenizer_path)?; Ok(output_ok) })(), ) @@ -301,15 +304,16 @@ fn wire__crate__api__acho__run_inference_impl( ) } fn wire__crate__api__acho__similarity_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::for_generated::WireSyncRust2DartSse { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( flutter_rust_bridge::for_generated::TaskInfo { debug_name: "similarity", - port: None, - mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, }, move || { let message = unsafe { @@ -323,14 +327,24 @@ fn wire__crate__api__acho__similarity_impl( flutter_rust_bridge::for_generated::SseDeserializer::new(message); let api_query = >::sse_decode(&mut deserializer); let api_texts = >::sse_decode(&mut deserializer); - let api_topK = ::sse_decode(&mut deserializer); + let api_model_path = ::sse_decode(&mut deserializer); + let api_tokenizer_path = ::sse_decode(&mut deserializer); + let api_top_k = ::sse_decode(&mut deserializer); deserializer.end(); - transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( - (move || { - let output_ok = crate::api::acho::similarity(&api_query, &api_texts, api_topK)?; - Ok(output_ok) - })(), - ) + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::acho::similarity( + &api_query, + &api_texts, + api_model_path, + api_tokenizer_path, + api_top_k, + )?; + Ok(output_ok) + })(), + ) + } }, ) } @@ -685,6 +699,7 @@ fn pde_ffi_dispatcher_primary_impl( 4 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), 5 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), 6 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), + 7 => wire__crate__api__acho__similarity_impl(port, ptr, rust_vec_len, data_len), 8 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } @@ -699,7 +714,6 @@ fn pde_ffi_dispatcher_sync_impl( // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { 3 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), - 7 => wire__crate__api__acho__similarity_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } } From ce3b7c600a491a56d15efd5f4c228eea8dd94b9a Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 13:31:31 +0000 Subject: [PATCH 14/32] library style --- inference/src/lib.rs | 117 +- inference/src/main.rs | 5 +- inference/src/semantic_search.rs | 116 ++ mobile_app/lib/src/rust/frb_generated.dart | 1269 ----------------- mobile_app/lib/src/rust/frb_generated.io.dart | 583 -------- .../lib/src/rust/frb_generated.web.dart | 523 ------- mobile_app/rust/.cargo/config.toml | 0 mobile_app/rust/build.rs | 0 mobile_app/rust/src/api/tantivy.rs | 0 9 files changed, 119 insertions(+), 2494 deletions(-) create mode 100644 inference/src/semantic_search.rs delete mode 100644 mobile_app/lib/src/rust/frb_generated.dart delete mode 100644 mobile_app/lib/src/rust/frb_generated.io.dart delete mode 100644 mobile_app/lib/src/rust/frb_generated.web.dart create mode 100644 mobile_app/rust/.cargo/config.toml create mode 100644 mobile_app/rust/build.rs create mode 100644 mobile_app/rust/src/api/tantivy.rs diff --git a/inference/src/lib.rs b/inference/src/lib.rs index 44908db..b342620 100644 --- a/inference/src/lib.rs +++ b/inference/src/lib.rs @@ -1,116 +1 @@ -use anyhow::Result; -use tokenizers::{Encoding, Tokenizer}; - -use ort::session::Session; -use ort::session::builder::GraphOptimizationLevel; - -type EncodingArray = ndarray::Array2; -type InputIds = ndarray::Array2; -pub type AttentionMask = ndarray::Array2; -pub type Embeddings = ndarray::Array2; - - - -pub enum EncodingType { - Ids, - AttentionMask -} - -pub struct SimilarityScore { - pub index: usize, - pub score: f32, -} - -pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { - let mut tokenizer = Tokenizer::from_file(&tokenizer_path) - .expect("Failed to load tokenizer."); - let padding = Some(tokenizers::PaddingParams { - strategy: tokenizers::PaddingStrategy::BatchLongest, - direction: tokenizers::PaddingDirection::Right, - pad_to_multiple_of: None, - pad_id: 1, - pad_type_id: 0, - pad_token: "".to_string(), - }); - tokenizer.with_padding(padding); - - let session = Session::builder()? - .with_optimization_level(GraphOptimizationLevel::Level1)? - .with_intra_threads(4)? - .commit_from_file(&model_path).expect("Failed to load the ONNX model."); - Ok((tokenizer, session)) -} - -pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { - let extract: fn(&Encoding) -> &[u32] = match encoding_type { - EncodingType::Ids => |e: &Encoding| e.get_ids(), - EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), - }; - - let nrows = encodings.len(); - let ncols = extract(&encodings[0]).len(); - let vec_matrix: Vec = encodings.iter() - .flat_map(|e| extract(e).iter().map(|&x| x as i64).collect::>()) - .collect(); - Ok( - ndarray::Array2::from_shape_vec((nrows, ncols), vec_matrix) - .expect("Failed to create Array2D from encodings.") - ) -} - -pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { - let encodings = tokenizer.encode_batch(texts.to_vec(), true) - .expect("Tokenization failed."); - - let input_ids = get_encoding_array(&encodings, EncodingType::Ids)?; - let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; - Ok((input_ids, attention_mask)) -} - -pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ - let (tokens, attn_mask) = tokenize(text, tokenizer)?; - let token_input_value = ort::value::Tensor::from_array(tokens)?; - let attn_mask_input_value = ort::value::Tensor::from_array(attn_mask)?; - let dense: ort::session::SessionOutputs<'_>= model.run( - ort::inputs!["input_ids" => token_input_value, "attention_mask" => attn_mask_input_value] - ).expect("Embedding model inference failed."); - - let dense_embeddings = (&dense["dense_embeddings"]).try_extract_array::()? - .into_dimensionality::() - .expect("Failed to convert embeddings to 2D array."); - Ok(dense_embeddings.to_owned()) -} - -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: String) -> Result> { - let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; - - let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; - let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); - println!("Similarity matrix:\n{:?}", similarity_matrix); - - let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); - - let top_k = get_top_k(_raw_score, 3)?; - - Ok(top_k) -} - -pub fn get_top_k(scores: Vec, k: usize) -> Result> { - - let mut indexed_scores: Vec<(usize, f32)> = scores - .into_iter() - .enumerate() - .collect(); - - indexed_scores.select_nth_unstable_by(k - 1, |a, b| { - b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal) - }); - - let mut top_k = indexed_scores.into_iter().take(k).collect::>(); - top_k.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); - - Ok(top_k.into_iter() - .map(|(index, score)| SimilarityScore { index, score }) - .collect()) -} +pub mod semantic_search; diff --git a/inference/src/main.rs b/inference/src/main.rs index 8ee9831..f7ad1af 100644 --- a/inference/src/main.rs +++ b/inference/src/main.rs @@ -1,7 +1,6 @@ use anyhow::Result; use ndarray_stats::QuantileExt; - -use inference::{load_artifacts, Embeddings, run_inference, get_top_k}; +use inference::semantic_search::{load_artifacts, Embeddings, run_inference, get_top_k}; fn main() -> Result<()> { let (tokenizer, mut model) = load_artifacts("../mobile_app/assets/model.onnx".to_string(), "../mobile_app/assets/tokenizer.json".to_string())?; @@ -18,7 +17,7 @@ fn main() -> Result<()> { let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); - + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); let top_k = get_top_k(_raw_score, 3)?; diff --git a/inference/src/semantic_search.rs b/inference/src/semantic_search.rs new file mode 100644 index 0000000..44908db --- /dev/null +++ b/inference/src/semantic_search.rs @@ -0,0 +1,116 @@ +use anyhow::Result; +use tokenizers::{Encoding, Tokenizer}; + +use ort::session::Session; +use ort::session::builder::GraphOptimizationLevel; + +type EncodingArray = ndarray::Array2; +type InputIds = ndarray::Array2; +pub type AttentionMask = ndarray::Array2; +pub type Embeddings = ndarray::Array2; + + + +pub enum EncodingType { + Ids, + AttentionMask +} + +pub struct SimilarityScore { + pub index: usize, + pub score: f32, +} + +pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { + let mut tokenizer = Tokenizer::from_file(&tokenizer_path) + .expect("Failed to load tokenizer."); + let padding = Some(tokenizers::PaddingParams { + strategy: tokenizers::PaddingStrategy::BatchLongest, + direction: tokenizers::PaddingDirection::Right, + pad_to_multiple_of: None, + pad_id: 1, + pad_type_id: 0, + pad_token: "".to_string(), + }); + tokenizer.with_padding(padding); + + let session = Session::builder()? + .with_optimization_level(GraphOptimizationLevel::Level1)? + .with_intra_threads(4)? + .commit_from_file(&model_path).expect("Failed to load the ONNX model."); + Ok((tokenizer, session)) +} + +pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { + let extract: fn(&Encoding) -> &[u32] = match encoding_type { + EncodingType::Ids => |e: &Encoding| e.get_ids(), + EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), + }; + + let nrows = encodings.len(); + let ncols = extract(&encodings[0]).len(); + let vec_matrix: Vec = encodings.iter() + .flat_map(|e| extract(e).iter().map(|&x| x as i64).collect::>()) + .collect(); + Ok( + ndarray::Array2::from_shape_vec((nrows, ncols), vec_matrix) + .expect("Failed to create Array2D from encodings.") + ) +} + +pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { + let encodings = tokenizer.encode_batch(texts.to_vec(), true) + .expect("Tokenization failed."); + + let input_ids = get_encoding_array(&encodings, EncodingType::Ids)?; + let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; + Ok((input_ids, attention_mask)) +} + +pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ + let (tokens, attn_mask) = tokenize(text, tokenizer)?; + let token_input_value = ort::value::Tensor::from_array(tokens)?; + let attn_mask_input_value = ort::value::Tensor::from_array(attn_mask)?; + let dense: ort::session::SessionOutputs<'_>= model.run( + ort::inputs!["input_ids" => token_input_value, "attention_mask" => attn_mask_input_value] + ).expect("Embedding model inference failed."); + + let dense_embeddings = (&dense["dense_embeddings"]).try_extract_array::()? + .into_dimensionality::() + .expect("Failed to convert embeddings to 2D array."); + Ok(dense_embeddings.to_owned()) +} + +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: String) -> Result> { + let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; + + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); + println!("Similarity matrix:\n{:?}", similarity_matrix); + + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + + let top_k = get_top_k(_raw_score, 3)?; + + Ok(top_k) +} + +pub fn get_top_k(scores: Vec, k: usize) -> Result> { + + let mut indexed_scores: Vec<(usize, f32)> = scores + .into_iter() + .enumerate() + .collect(); + + indexed_scores.select_nth_unstable_by(k - 1, |a, b| { + b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal) + }); + + let mut top_k = indexed_scores.into_iter().take(k).collect::>(); + top_k.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); + + Ok(top_k.into_iter() + .map(|(index, score)| SimilarityScore { index, score }) + .collect()) +} diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart deleted file mode 100644 index 370b699..0000000 --- a/mobile_app/lib/src/rust/frb_generated.dart +++ /dev/null @@ -1,1269 +0,0 @@ -// This file is automatically generated, so please do not edit it. -// @generated by `flutter_rust_bridge`@ 2.11.1. - -// 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 'api/acho.dart'; -import 'api/simple.dart'; -import 'dart:async'; -import 'dart:convert'; -import 'frb_generated.dart'; -import 'frb_generated.io.dart' - if (dart.library.js_interop) 'frb_generated.web.dart'; -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; - -/// Main entrypoint of the Rust API -class RustLib extends BaseEntrypoint { - @internal - static final instance = RustLib._(); - - RustLib._(); - - /// Initialize flutter_rust_bridge - static Future init({ - RustLibApi? api, - BaseHandler? handler, - ExternalLibrary? externalLibrary, - bool forceSameCodegenVersion = true, - }) async { - await instance.initImpl( - api: api, - handler: handler, - externalLibrary: externalLibrary, - forceSameCodegenVersion: forceSameCodegenVersion, - ); - } - - /// Initialize flutter_rust_bridge in mock mode. - /// No libraries for FFI are loaded. - static void initMock({ - required RustLibApi api, - }) { - instance.initMockImpl( - api: api, - ); - } - - /// Dispose flutter_rust_bridge - /// - /// The call to this function is optional, since flutter_rust_bridge (and everything else) - /// is automatically disposed when the app stops. - static void dispose() => instance.disposeImpl(); - - @override - ApiImplConstructor get apiImplConstructor => - RustLibApiImpl.new; - - @override - WireConstructor get wireConstructor => - RustLibWire.fromExternalLibrary; - - @override - Future executeRustInitializers() async { - await api.crateApiSimpleInitApp(); - } - - @override - ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig => - kDefaultExternalLibraryLoaderConfig; - - @override - String get codegenVersion => '2.11.1'; - - @override - int get rustContentHash => 575727880; - - static const kDefaultExternalLibraryLoaderConfig = - ExternalLibraryLoaderConfig( - stem: 'rust_lib_mobile_app', - ioDirectory: 'rust/target/release/', - webPrefix: 'pkg/', - ); -} - -abstract class RustLibApi extends BaseApi { - Future crateApiAchoGetEncodingArray( - {required List encodings, required EncodingType encodingType}); - - Future> crateApiAchoGetTopK( - {required List scores, required BigInt k}); - - String crateApiSimpleGreet({required String name}); - - Future crateApiSimpleInitApp(); - - Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( - {required String modelPath, required String tokenizerPath}); - - Future crateApiAchoRunInference( - {required List text, - required Session model, - required Tokenizer tokenizer}); - - Future> crateApiAchoSimilarity( - {required List query, - required List texts, - required String modelPath, - required String tokenizerPath, - required int topK}); - - Future<(Array2I64, Array2I64)> crateApiAchoTokenize( - {required List texts, required Tokenizer tokenizer}); - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Array2F32; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Array2F32; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Array2I64; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Array2I64; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Encoding; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Encoding; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr; - - RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Session; - - RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Session; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Tokenizer; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Tokenizer; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr; -} - -class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { - RustLibApiImpl({ - required super.handler, - required super.wire, - required super.generalizedFrbRustBinding, - required super.portManager, - }); - - @override - Future crateApiAchoGetEncodingArray( - {required List encodings, required EncodingType encodingType}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - encodings, serializer); - sse_encode_encoding_type(encodingType, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 1, port: port_); - }, - codec: SseCodec( - decodeSuccessData: - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoGetEncodingArrayConstMeta, - argValues: [encodings, encodingType], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoGetEncodingArrayConstMeta => - const TaskConstMeta( - debugName: "get_encoding_array", - argNames: ["encodings", "encodingType"], - ); - - @override - Future> crateApiAchoGetTopK( - {required List scores, required BigInt k}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_list_prim_f_32_loose(scores, serializer); - sse_encode_usize(k, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 2, port: port_); - }, - codec: SseCodec( - decodeSuccessData: sse_decode_list_similarity_score, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoGetTopKConstMeta, - argValues: [scores, k], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoGetTopKConstMeta => const TaskConstMeta( - debugName: "get_top_k", - argNames: ["scores", "k"], - ); - - @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: 3)!; - }, - codec: SseCodec( - decodeSuccessData: sse_decode_String, - decodeErrorData: null, - ), - constMeta: kCrateApiSimpleGreetConstMeta, - argValues: [name], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiSimpleGreetConstMeta => const TaskConstMeta( - debugName: "greet", - argNames: ["name"], - ); - - @override - Future crateApiSimpleInitApp() { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 4, port: port_); - }, - codec: SseCodec( - decodeSuccessData: sse_decode_unit, - decodeErrorData: null, - ), - constMeta: kCrateApiSimpleInitAppConstMeta, - argValues: [], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiSimpleInitAppConstMeta => const TaskConstMeta( - debugName: "init_app", - argNames: [], - ); - - @override - Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( - {required String modelPath, required String tokenizerPath}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_String(modelPath, serializer); - sse_encode_String(tokenizerPath, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 5, port: port_); - }, - codec: SseCodec( - decodeSuccessData: - sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoLoadArtifactsConstMeta, - argValues: [modelPath, tokenizerPath], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoLoadArtifactsConstMeta => const TaskConstMeta( - debugName: "load_artifacts", - argNames: ["modelPath", "tokenizerPath"], - ); - - @override - Future crateApiAchoRunInference( - {required List text, - required Session model, - required Tokenizer tokenizer}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_list_String(text, serializer); - sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - model, serializer); - sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - tokenizer, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 6, port: port_); - }, - codec: SseCodec( - decodeSuccessData: - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoRunInferenceConstMeta, - argValues: [text, model, tokenizer], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoRunInferenceConstMeta => const TaskConstMeta( - debugName: "run_inference", - argNames: ["text", "model", "tokenizer"], - ); - - @override - Future> crateApiAchoSimilarity( - {required List query, - required List texts, - required String modelPath, - required String tokenizerPath, - required int topK}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_list_String(query, serializer); - sse_encode_list_String(texts, serializer); - sse_encode_String(modelPath, serializer); - sse_encode_String(tokenizerPath, serializer); - sse_encode_i_32(topK, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 7, port: port_); - }, - codec: SseCodec( - decodeSuccessData: sse_decode_list_similarity_score, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoSimilarityConstMeta, - argValues: [query, texts, modelPath, tokenizerPath, topK], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoSimilarityConstMeta => const TaskConstMeta( - debugName: "similarity", - argNames: ["query", "texts", "modelPath", "tokenizerPath", "topK"], - ); - - @override - Future<(Array2I64, Array2I64)> crateApiAchoTokenize( - {required List texts, required Tokenizer tokenizer}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_list_String(texts, serializer); - sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - tokenizer, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 8, port: port_); - }, - codec: SseCodec( - decodeSuccessData: - sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64, - decodeErrorData: sse_decode_AnyhowException, - ), - constMeta: kCrateApiAchoTokenizeConstMeta, - argValues: [texts, tokenizer], - apiImpl: this, - )); - } - - TaskConstMeta get kCrateApiAchoTokenizeConstMeta => const TaskConstMeta( - debugName: "tokenize", - argNames: ["texts", "tokenizer"], - ); - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Array2F32 => wire - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Array2F32 => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Array2I64 => wire - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Array2I64 => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Encoding => wire - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Encoding => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Session => wire - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Session => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; - - RustArcIncrementStrongCountFnType - get rust_arc_increment_strong_count_Tokenizer => wire - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; - - RustArcDecrementStrongCountFnType - get rust_arc_decrement_strong_count_Tokenizer => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; - - @protected - AnyhowException dco_decode_AnyhowException(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return AnyhowException(raw as String); - } - - @protected - Array2F32 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return Array2F32Impl.frbInternalDcoDecode(raw as List); - } - - @protected - Array2I64 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return Array2I64Impl.frbInternalDcoDecode(raw as List); - } - - @protected - Encoding - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return EncodingImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Session - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return SessionImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Tokenizer - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return TokenizerImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Session - dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return SessionImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Tokenizer - dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return TokenizerImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Array2F32 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return Array2F32Impl.frbInternalDcoDecode(raw as List); - } - - @protected - Array2I64 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return Array2I64Impl.frbInternalDcoDecode(raw as List); - } - - @protected - Encoding - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return EncodingImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Session - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return SessionImpl.frbInternalDcoDecode(raw as List); - } - - @protected - Tokenizer - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return TokenizerImpl.frbInternalDcoDecode(raw as List); - } - - @protected - String dco_decode_String(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as String; - } - - @protected - EncodingType dco_decode_encoding_type(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return EncodingType.values[raw as int]; - } - - @protected - double dco_decode_f_32(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as double; - } - - @protected - int dco_decode_i_32(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as int; - } - - @protected - List - dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return (raw as List) - .map( - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding) - .toList(); - } - - @protected - List dco_decode_list_String(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return (raw as List).map(dco_decode_String).toList(); - } - - @protected - List dco_decode_list_prim_f_32_loose(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as List; - } - - @protected - Float32List dco_decode_list_prim_f_32_strict(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as Float32List; - } - - @protected - Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as Uint8List; - } - - @protected - List dco_decode_list_similarity_score(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return (raw as List).map(dco_decode_similarity_score).toList(); - } - - @protected - ( - Array2I64, - Array2I64 - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - final arr = raw as List; - if (arr.length != 2) { - throw Exception('Expected 2 elements, got ${arr.length}'); - } - return ( - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - arr[0]), - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - arr[1]), - ); - } - - @protected - ( - Tokenizer, - Session - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - final arr = raw as List; - if (arr.length != 2) { - throw Exception('Expected 2 elements, got ${arr.length}'); - } - return ( - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - arr[0]), - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - arr[1]), - ); - } - - @protected - SimilarityScore dco_decode_similarity_score(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - final arr = raw as List; - if (arr.length != 2) - throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); - return SimilarityScore( - index: dco_decode_usize(arr[0]), - score: dco_decode_f_32(arr[1]), - ); - } - - @protected - int dco_decode_u_8(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as int; - } - - @protected - void dco_decode_unit(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return; - } - - @protected - BigInt dco_decode_usize(dynamic raw) { - // Codec=Dco (DartCObject based), see doc to use other codecs - return dcoDecodeU64(raw); - } - - @protected - AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var inner = sse_decode_String(deserializer); - return AnyhowException(inner); - } - - @protected - Array2F32 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return Array2F32Impl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Array2I64 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return Array2I64Impl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Encoding - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return EncodingImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Session - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return SessionImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Tokenizer - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return TokenizerImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Session - sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return SessionImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Tokenizer - sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return TokenizerImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Array2F32 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return Array2F32Impl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Array2I64 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return Array2I64Impl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Encoding - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return EncodingImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Session - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return SessionImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - Tokenizer - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return TokenizerImpl.frbInternalSseDecode( - sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); - } - - @protected - String sse_decode_String(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var inner = sse_decode_list_prim_u_8_strict(deserializer); - return utf8.decoder.convert(inner); - } - - @protected - EncodingType sse_decode_encoding_type(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var inner = sse_decode_i_32(deserializer); - return EncodingType.values[inner]; - } - - @protected - double sse_decode_f_32(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getFloat32(); - } - - @protected - int sse_decode_i_32(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getInt32(); - } - - @protected - List - sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - - var len_ = sse_decode_i_32(deserializer); - var ans_ = []; - for (var idx_ = 0; idx_ < len_; ++idx_) { - ans_.add( - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - deserializer)); - } - return ans_; - } - - @protected - List sse_decode_list_String(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - - var len_ = sse_decode_i_32(deserializer); - var ans_ = []; - for (var idx_ = 0; idx_ < len_; ++idx_) { - ans_.add(sse_decode_String(deserializer)); - } - return ans_; - } - - @protected - List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var len_ = sse_decode_i_32(deserializer); - return deserializer.buffer.getFloat32List(len_); - } - - @protected - Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var len_ = sse_decode_i_32(deserializer); - return deserializer.buffer.getFloat32List(len_); - } - - @protected - Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var len_ = sse_decode_i_32(deserializer); - return deserializer.buffer.getUint8List(len_); - } - - @protected - List sse_decode_list_similarity_score( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - - var len_ = sse_decode_i_32(deserializer); - var ans_ = []; - for (var idx_ = 0; idx_ < len_; ++idx_) { - ans_.add(sse_decode_similarity_score(deserializer)); - } - return ans_; - } - - @protected - ( - Array2I64, - Array2I64 - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var var_field0 = - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - deserializer); - var var_field1 = - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - deserializer); - return (var_field0, var_field1); - } - - @protected - ( - Tokenizer, - Session - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var var_field0 = - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - deserializer); - var var_field1 = - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - deserializer); - return (var_field0, var_field1); - } - - @protected - SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - var var_index = sse_decode_usize(deserializer); - var var_score = sse_decode_f_32(deserializer); - return SimilarityScore(index: var_index, score: var_score); - } - - @protected - int sse_decode_u_8(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getUint8(); - } - - @protected - void sse_decode_unit(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - } - - @protected - BigInt sse_decode_usize(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getBigUint64(); - } - - @protected - bool sse_decode_bool(SseDeserializer deserializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getUint8() != 0; - } - - @protected - void sse_encode_AnyhowException( - AnyhowException self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_String(self.message, serializer); - } - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as Array2F32Impl).frbInternalSseEncode(move: true), serializer); - } - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as Array2I64Impl).frbInternalSseEncode(move: true), serializer); - } - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as EncodingImpl).frbInternalSseEncode(move: true), serializer); - } - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as SessionImpl).frbInternalSseEncode(move: true), serializer); - } - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as TokenizerImpl).frbInternalSseEncode(move: true), serializer); - } - - @protected - void - sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as SessionImpl).frbInternalSseEncode(move: false), serializer); - } - - @protected - void - sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as TokenizerImpl).frbInternalSseEncode(move: false), serializer); - } - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as Array2F32Impl).frbInternalSseEncode(move: null), serializer); - } - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as Array2I64Impl).frbInternalSseEncode(move: null), serializer); - } - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as EncodingImpl).frbInternalSseEncode(move: null), serializer); - } - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as SessionImpl).frbInternalSseEncode(move: null), serializer); - } - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize( - (self as TokenizerImpl).frbInternalSseEncode(move: null), serializer); - } - - @protected - void sse_encode_String(String self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); - } - - @protected - void sse_encode_encoding_type(EncodingType self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_i_32(self.index, serializer); - } - - @protected - void sse_encode_f_32(double self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putFloat32(self); - } - - @protected - void sse_encode_i_32(int self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putInt32(self); - } - - @protected - void - sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - List 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_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - item, serializer); - } - } - - @protected - void sse_encode_list_String(List 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_String(item, serializer); - } - } - - @protected - void sse_encode_list_prim_f_32_loose( - List 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)); - } - - @protected - void sse_encode_list_prim_f_32_strict( - 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); - } - - @protected - void sse_encode_list_prim_u_8_strict( - 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); - } - - @protected - void sse_encode_list_similarity_score( - List 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_similarity_score(item, serializer); - } - } - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - (Array2I64, Array2I64) self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - self.$1, serializer); - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - self.$2, serializer); - } - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - (Tokenizer, Session) self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - self.$1, serializer); - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - self.$2, serializer); - } - - @protected - void sse_encode_similarity_score( - SimilarityScore self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_usize(self.index, serializer); - sse_encode_f_32(self.score, serializer); - } - - @protected - void sse_encode_u_8(int self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putUint8(self); - } - - @protected - void sse_encode_unit(void self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - } - - @protected - void sse_encode_usize(BigInt self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putBigUint64(self); - } - - @protected - void sse_encode_bool(bool self, SseSerializer serializer) { - // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putUint8(self ? 1 : 0); - } -} - -@sealed -class Array2F32Impl extends RustOpaque implements Array2F32 { - // Not to be used by end users - Array2F32Impl.frbInternalDcoDecode(List wire) - : super.frbInternalDcoDecode(wire, _kStaticData); - - // Not to be used by end users - Array2F32Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) - : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); - - static final _kStaticData = RustArcStaticData( - rustArcIncrementStrongCount: - RustLib.instance.api.rust_arc_increment_strong_count_Array2F32, - rustArcDecrementStrongCount: - RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32, - rustArcDecrementStrongCountPtr: - RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32Ptr, - ); -} - -@sealed -class Array2I64Impl extends RustOpaque implements Array2I64 { - // Not to be used by end users - Array2I64Impl.frbInternalDcoDecode(List wire) - : super.frbInternalDcoDecode(wire, _kStaticData); - - // Not to be used by end users - Array2I64Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) - : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); - - static final _kStaticData = RustArcStaticData( - rustArcIncrementStrongCount: - RustLib.instance.api.rust_arc_increment_strong_count_Array2I64, - rustArcDecrementStrongCount: - RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64, - rustArcDecrementStrongCountPtr: - RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64Ptr, - ); -} - -@sealed -class EncodingImpl extends RustOpaque implements Encoding { - // Not to be used by end users - EncodingImpl.frbInternalDcoDecode(List wire) - : super.frbInternalDcoDecode(wire, _kStaticData); - - // Not to be used by end users - EncodingImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) - : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); - - static final _kStaticData = RustArcStaticData( - rustArcIncrementStrongCount: - RustLib.instance.api.rust_arc_increment_strong_count_Encoding, - rustArcDecrementStrongCount: - RustLib.instance.api.rust_arc_decrement_strong_count_Encoding, - rustArcDecrementStrongCountPtr: - RustLib.instance.api.rust_arc_decrement_strong_count_EncodingPtr, - ); -} - -@sealed -class SessionImpl extends RustOpaque implements Session { - // Not to be used by end users - SessionImpl.frbInternalDcoDecode(List wire) - : super.frbInternalDcoDecode(wire, _kStaticData); - - // Not to be used by end users - SessionImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) - : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); - - static final _kStaticData = RustArcStaticData( - rustArcIncrementStrongCount: - RustLib.instance.api.rust_arc_increment_strong_count_Session, - rustArcDecrementStrongCount: - RustLib.instance.api.rust_arc_decrement_strong_count_Session, - rustArcDecrementStrongCountPtr: - RustLib.instance.api.rust_arc_decrement_strong_count_SessionPtr, - ); -} - -@sealed -class TokenizerImpl extends RustOpaque implements Tokenizer { - // Not to be used by end users - TokenizerImpl.frbInternalDcoDecode(List wire) - : super.frbInternalDcoDecode(wire, _kStaticData); - - // Not to be used by end users - TokenizerImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) - : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); - - static final _kStaticData = RustArcStaticData( - rustArcIncrementStrongCount: - RustLib.instance.api.rust_arc_increment_strong_count_Tokenizer, - rustArcDecrementStrongCount: - RustLib.instance.api.rust_arc_decrement_strong_count_Tokenizer, - rustArcDecrementStrongCountPtr: - RustLib.instance.api.rust_arc_decrement_strong_count_TokenizerPtr, - ); -} diff --git a/mobile_app/lib/src/rust/frb_generated.io.dart b/mobile_app/lib/src/rust/frb_generated.io.dart deleted file mode 100644 index fb9013c..0000000 --- a/mobile_app/lib/src/rust/frb_generated.io.dart +++ /dev/null @@ -1,583 +0,0 @@ -// This file is automatically generated, so please do not edit it. -// @generated by `flutter_rust_bridge`@ 2.11.1. - -// 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 'api/acho.dart'; -import 'api/simple.dart'; -import 'dart:async'; -import 'dart:convert'; -import 'dart:ffi' as ffi; -import 'frb_generated.dart'; -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart'; - -abstract class RustLibApiImplPlatform extends BaseApiImpl { - RustLibApiImplPlatform({ - required super.handler, - required super.wire, - required super.generalizedFrbRustBinding, - required super.portManager, - }); - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => - wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => - wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire - ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire - ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => - wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr; - - @protected - AnyhowException dco_decode_AnyhowException(dynamic raw); - - @protected - Array2F32 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw); - - @protected - Array2I64 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw); - - @protected - Encoding - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - Session - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - Session - dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - Array2F32 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw); - - @protected - Array2I64 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw); - - @protected - Encoding - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - Session - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - String dco_decode_String(dynamic raw); - - @protected - EncodingType dco_decode_encoding_type(dynamic raw); - - @protected - double dco_decode_f_32(dynamic raw); - - @protected - int dco_decode_i_32(dynamic raw); - - @protected - List - dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - List dco_decode_list_String(dynamic raw); - - @protected - List dco_decode_list_prim_f_32_loose(dynamic raw); - - @protected - Float32List dco_decode_list_prim_f_32_strict(dynamic raw); - - @protected - Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); - - @protected - List dco_decode_list_similarity_score(dynamic raw); - - @protected - ( - Array2I64, - Array2I64 - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - dynamic raw); - - @protected - ( - Tokenizer, - Session - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - dynamic raw); - - @protected - SimilarityScore dco_decode_similarity_score(dynamic raw); - - @protected - int dco_decode_u_8(dynamic raw); - - @protected - void dco_decode_unit(dynamic raw); - - @protected - BigInt dco_decode_usize(dynamic raw); - - @protected - AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); - - @protected - Array2F32 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer); - - @protected - Array2I64 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer); - - @protected - Encoding - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - Session - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - Session - sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - Array2F32 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer); - - @protected - Array2I64 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer); - - @protected - Encoding - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - Session - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - String sse_decode_String(SseDeserializer deserializer); - - @protected - EncodingType sse_decode_encoding_type(SseDeserializer deserializer); - - @protected - double sse_decode_f_32(SseDeserializer deserializer); - - @protected - int sse_decode_i_32(SseDeserializer deserializer); - - @protected - List - sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - List sse_decode_list_String(SseDeserializer deserializer); - - @protected - List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); - - @protected - Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); - - @protected - Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); - - @protected - List sse_decode_list_similarity_score( - SseDeserializer deserializer); - - @protected - ( - Array2I64, - Array2I64 - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - SseDeserializer deserializer); - - @protected - ( - Tokenizer, - Session - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - SseDeserializer deserializer); - - @protected - SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); - - @protected - int sse_decode_u_8(SseDeserializer deserializer); - - @protected - void sse_decode_unit(SseDeserializer deserializer); - - @protected - BigInt sse_decode_usize(SseDeserializer deserializer); - - @protected - bool sse_decode_bool(SseDeserializer deserializer); - - @protected - void sse_encode_AnyhowException( - AnyhowException self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void sse_encode_String(String self, SseSerializer serializer); - - @protected - void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); - - @protected - void sse_encode_f_32(double self, SseSerializer serializer); - - @protected - void sse_encode_i_32(int self, SseSerializer serializer); - - @protected - void - sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - List self, SseSerializer serializer); - - @protected - void sse_encode_list_String(List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_f_32_loose( - List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_f_32_strict( - Float32List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_u_8_strict( - Uint8List self, SseSerializer serializer); - - @protected - void sse_encode_list_similarity_score( - List self, SseSerializer serializer); - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - (Array2I64, Array2I64) self, SseSerializer serializer); - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - (Tokenizer, Session) self, SseSerializer serializer); - - @protected - void sse_encode_similarity_score( - SimilarityScore self, SseSerializer serializer); - - @protected - void sse_encode_u_8(int self, SseSerializer serializer); - - @protected - void sse_encode_unit(void self, SseSerializer serializer); - - @protected - void sse_encode_usize(BigInt self, SseSerializer serializer); - - @protected - void sse_encode_bool(bool self, SseSerializer serializer); -} - -// Section: wire_class - -class RustLibWire implements BaseWire { - factory RustLibWire.fromExternalLibrary(ExternalLibrary lib) => - RustLibWire(lib.ffiDynamicLibrary); - - /// Holds the symbol lookup function. - final ffi.Pointer Function(String symbolName) - _lookup; - - /// The symbols are looked up in [dynamicLibrary]. - RustLibWire(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; - - void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ffi.Pointer ptr, - ) { - return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ptr, - ); - } - - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = - _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr - .asFunction)>(); - - void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ffi.Pointer ptr, - ) { - return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ptr, - ); - } - - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = - _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr - .asFunction)>(); - - void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ffi.Pointer ptr, - ) { - return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ptr, - ); - } - - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = - _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr - .asFunction)>(); - - void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ffi.Pointer ptr, - ) { - return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ptr, - ); - } - - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = - _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr - .asFunction)>(); - - void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ffi.Pointer ptr, - ) { - return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ptr, - ); - } - - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = - _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr - .asFunction)>(); - - void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ffi.Pointer ptr, - ) { - return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ptr, - ); - } - - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = - _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr - .asFunction)>(); - - void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ffi.Pointer ptr, - ) { - return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ptr, - ); - } - - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = - _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr - .asFunction)>(); - - void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ffi.Pointer ptr, - ) { - return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ptr, - ); - } - - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = - _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr - .asFunction)>(); - - void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ffi.Pointer ptr, - ) { - return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ptr, - ); - } - - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); - late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = - _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr - .asFunction)>(); - - void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ffi.Pointer ptr, - ) { - return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ptr, - ); - } - - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = - _lookup)>>( - 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); - late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = - _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr - .asFunction)>(); -} diff --git a/mobile_app/lib/src/rust/frb_generated.web.dart b/mobile_app/lib/src/rust/frb_generated.web.dart deleted file mode 100644 index 75807ae..0000000 --- a/mobile_app/lib/src/rust/frb_generated.web.dart +++ /dev/null @@ -1,523 +0,0 @@ -// This file is automatically generated, so please do not edit it. -// @generated by `flutter_rust_bridge`@ 2.11.1. - -// 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 -// ignore_for_file: argument_type_not_assignable - -import 'api/acho.dart'; -import 'api/simple.dart'; -import 'dart:async'; -import 'dart:convert'; -import 'frb_generated.dart'; -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart'; - -abstract class RustLibApiImplPlatform extends BaseApiImpl { - RustLibApiImplPlatform({ - required super.handler, - required super.wire, - required super.generalizedFrbRustBinding, - required super.portManager, - }); - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => - wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => - wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; - - CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => - wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; - - @protected - AnyhowException dco_decode_AnyhowException(dynamic raw); - - @protected - Array2F32 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw); - - @protected - Array2I64 - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw); - - @protected - Encoding - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - Session - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - Session - dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - Array2F32 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - dynamic raw); - - @protected - Array2I64 - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - dynamic raw); - - @protected - Encoding - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - Session - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - dynamic raw); - - @protected - Tokenizer - dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - dynamic raw); - - @protected - String dco_decode_String(dynamic raw); - - @protected - EncodingType dco_decode_encoding_type(dynamic raw); - - @protected - double dco_decode_f_32(dynamic raw); - - @protected - int dco_decode_i_32(dynamic raw); - - @protected - List - dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - dynamic raw); - - @protected - List dco_decode_list_String(dynamic raw); - - @protected - List dco_decode_list_prim_f_32_loose(dynamic raw); - - @protected - Float32List dco_decode_list_prim_f_32_strict(dynamic raw); - - @protected - Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); - - @protected - List dco_decode_list_similarity_score(dynamic raw); - - @protected - ( - Array2I64, - Array2I64 - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - dynamic raw); - - @protected - ( - Tokenizer, - Session - ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - dynamic raw); - - @protected - SimilarityScore dco_decode_similarity_score(dynamic raw); - - @protected - int dco_decode_u_8(dynamic raw); - - @protected - void dco_decode_unit(dynamic raw); - - @protected - BigInt dco_decode_usize(dynamic raw); - - @protected - AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); - - @protected - Array2F32 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer); - - @protected - Array2I64 - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer); - - @protected - Encoding - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - Session - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - Session - sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - Array2F32 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - SseDeserializer deserializer); - - @protected - Array2I64 - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - SseDeserializer deserializer); - - @protected - Encoding - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - Session - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - SseDeserializer deserializer); - - @protected - Tokenizer - sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - SseDeserializer deserializer); - - @protected - String sse_decode_String(SseDeserializer deserializer); - - @protected - EncodingType sse_decode_encoding_type(SseDeserializer deserializer); - - @protected - double sse_decode_f_32(SseDeserializer deserializer); - - @protected - int sse_decode_i_32(SseDeserializer deserializer); - - @protected - List - sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - SseDeserializer deserializer); - - @protected - List sse_decode_list_String(SseDeserializer deserializer); - - @protected - List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); - - @protected - Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); - - @protected - Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); - - @protected - List sse_decode_list_similarity_score( - SseDeserializer deserializer); - - @protected - ( - Array2I64, - Array2I64 - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - SseDeserializer deserializer); - - @protected - ( - Tokenizer, - Session - ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - SseDeserializer deserializer); - - @protected - SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); - - @protected - int sse_decode_u_8(SseDeserializer deserializer); - - @protected - void sse_decode_unit(SseDeserializer deserializer); - - @protected - BigInt sse_decode_usize(SseDeserializer deserializer); - - @protected - bool sse_decode_bool(SseDeserializer deserializer); - - @protected - void sse_encode_AnyhowException( - AnyhowException self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - Array2F32 self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - Array2I64 self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - Encoding self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - Session self, SseSerializer serializer); - - @protected - void - sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - Tokenizer self, SseSerializer serializer); - - @protected - void sse_encode_String(String self, SseSerializer serializer); - - @protected - void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); - - @protected - void sse_encode_f_32(double self, SseSerializer serializer); - - @protected - void sse_encode_i_32(int self, SseSerializer serializer); - - @protected - void - sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - List self, SseSerializer serializer); - - @protected - void sse_encode_list_String(List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_f_32_loose( - List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_f_32_strict( - Float32List self, SseSerializer serializer); - - @protected - void sse_encode_list_prim_u_8_strict( - Uint8List self, SseSerializer serializer); - - @protected - void sse_encode_list_similarity_score( - List self, SseSerializer serializer); - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( - (Array2I64, Array2I64) self, SseSerializer serializer); - - @protected - void - sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( - (Tokenizer, Session) self, SseSerializer serializer); - - @protected - void sse_encode_similarity_score( - SimilarityScore self, SseSerializer serializer); - - @protected - void sse_encode_u_8(int self, SseSerializer serializer); - - @protected - void sse_encode_unit(void self, SseSerializer serializer); - - @protected - void sse_encode_usize(BigInt self, SseSerializer serializer); - - @protected - void sse_encode_bool(bool self, SseSerializer serializer); -} - -// Section: wire_class - -class RustLibWire implements BaseWire { - RustLibWire.fromExternalLibrary(ExternalLibrary lib); - - void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - int ptr) => - wasmModule - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ptr); - - void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - int ptr) => - wasmModule - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - ptr); - - void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - int ptr) => - wasmModule - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ptr); - - void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - int ptr) => - wasmModule - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - ptr); - - void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - int ptr) => - wasmModule - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ptr); - - void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - int ptr) => - wasmModule - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - ptr); - - void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - int ptr) => - wasmModule - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ptr); - - void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - int ptr) => - wasmModule - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - ptr); - - void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - int ptr) => - wasmModule - .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ptr); - - void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - int ptr) => - wasmModule - .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - ptr); -} - -@JS('wasm_bindgen') -external RustLibWasmModule get wasmModule; - -@JS() -@anonymous -extension type RustLibWasmModule._(JSObject _) implements JSObject { - external void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - int ptr); - - external void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( - int ptr); - - external void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - int ptr); - - external void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( - int ptr); - - external void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - int ptr); - - external void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( - int ptr); - - external void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - int ptr); - - external void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( - int ptr); - - external void - rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - int ptr); - - external void - rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( - int ptr); -} diff --git a/mobile_app/rust/.cargo/config.toml b/mobile_app/rust/.cargo/config.toml new file mode 100644 index 0000000..e69de29 diff --git a/mobile_app/rust/build.rs b/mobile_app/rust/build.rs new file mode 100644 index 0000000..e69de29 diff --git a/mobile_app/rust/src/api/tantivy.rs b/mobile_app/rust/src/api/tantivy.rs new file mode 100644 index 0000000..e69de29 From 927b914f6e18c9d210935382db418ccb5e53ef87 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 13:44:17 +0000 Subject: [PATCH 15/32] Add keyword search --- inference/src/keyword_search.rs | 266 +++++++++++++++++++++++++++++++ inference/src/main.rs | 1 - inference/src/semantic_search.rs | 31 ++-- 3 files changed, 282 insertions(+), 16 deletions(-) create mode 100644 inference/src/keyword_search.rs diff --git a/inference/src/keyword_search.rs b/inference/src/keyword_search.rs new file mode 100644 index 0000000..3f01ae4 --- /dev/null +++ b/inference/src/keyword_search.rs @@ -0,0 +1,266 @@ +use anyhow::{Result}; +use once_cell::sync::Lazy; +use std::path::PathBuf; +use std::sync::{Arc, Mutex}; +use tantivy::collector::TopDocs; +use tantivy::query::QueryParser; +use tantivy::schema::*; +use tantivy::{ Index, IndexReader, IndexWriter, ReloadPolicy, TantivyDocument, Term}; + + +#[derive(Debug, Clone)] +pub struct Document { + pub id: String, + pub text: String, +} + + +#[derive(Debug, Clone)] +pub struct SearchResult { + pub score: f32, + pub doc: Document, +} + + +struct TantivyApi { + index: Index, + writer: Mutex, + reader: IndexReader, + schema: Schema, + id_field: Field, + text_field: Field, +} + +static STATE: Lazy>>> = Lazy::new(|| Arc::new(Mutex::new(None))); + + +pub fn init_tantivy(dir_path: String) -> Result<()> { + let mut state_lock = STATE.lock().unwrap(); + if state_lock.is_some() { + + return Ok(()); + } + + let index_dir = PathBuf::from(dir_path); + std::fs::create_dir_all(&index_dir)?; + + let (index, schema) = if index_dir.join("meta.json").exists() { + + let index = Index::open_in_dir(&index_dir)?; + let schema = index.schema(); + (index, schema) + } else { + + let mut schema_builder = Schema::builder(); + + schema_builder.add_text_field("id", STRING | STORED); + + schema_builder.add_text_field("text", TEXT | STORED); + let schema = schema_builder.build(); + let index = Index::create_in_dir(&index_dir, schema.clone())?; + (index, schema) + }; + + let id_field = schema.get_field("id").map_err(|_| anyhow!("'id' field not found"))?; + let text_field = schema.get_field("text").map_err(|_| anyhow!("'text' field not found"))?; + + let writer = index.writer(50_000_000)?; + + + let reader = index + .reader_builder() + .reload_policy(ReloadPolicy::Manual) + .try_into()?; + + let api = TantivyApi { + index, + writer: Mutex::new(writer), + reader, + schema, + id_field, + text_field, + }; + + *state_lock = Some(api); + + Ok(()) +} + + + + +pub fn add_document(doc: Document) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term.clone()); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + + writer.add_document(tantivy_doc)?; + writer.commit()?; + + Ok(()) +} + + +pub fn search_documents(query: String, top_k: usize) -> Result> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + + api.reader.reload()?; + + + let searcher = api.reader.searcher(); + + let query_parser = QueryParser::for_index(&api.index, vec![api.text_field]); + let query = query_parser.parse_query(&query)?; + + let top_docs = searcher.search(&query, &TopDocs::with_limit(top_k))?; + + let mut results = Vec::new(); + for (score, doc_address) in top_docs { + let retrieved_doc = searcher.doc::(doc_address)?; + let id = retrieved_doc.get_first(api.id_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + let text = retrieved_doc.get_first(api.text_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + + results.push(SearchResult { + score, + doc: Document { id, text }, + }); + } + + Ok(results) +} + + +pub fn get_document_by_id(id: String) -> Result> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + + let searcher = api.reader.searcher(); + + let id_term = Term::from_field_text(api.id_field, &id); + let query = tantivy::query::TermQuery::new(id_term, IndexRecordOption::Basic); + + let top_docs = searcher.search(&query, &TopDocs::with_limit(1))?; + + if let Some((_, doc_address)) = top_docs.first() { + let retrieved_doc = searcher.doc::(*doc_address)?; + let text = retrieved_doc.get_first(api.text_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + + return Ok(Some(Document { id, text })); + } + + Ok(None) +} + +pub fn update_document(doc: Document) -> Result<()> { + add_document(doc) +} + +pub fn delete_document(id: String) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + let id_term = Term::from_field_text(api.id_field, &id); + + writer.delete_term(id_term); + writer.commit()?; + + Ok(()) +} + +pub fn add_documents_batch(docs: Vec) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + for doc in docs { + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + writer.add_document(tantivy_doc)?; + } + writer.commit()?; + + Ok(()) +} + +pub fn delete_documents_batch(ids: Vec) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + for id in ids { + let id_term = Term::from_field_text(api.id_field, &id); + writer.delete_term(id_term); + } + writer.commit()?; + + Ok(()) +} + +pub fn commit() -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + writer.commit()?; + + Ok(()) +} + +pub fn add_document_no_commit(doc: Document) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + + writer.add_document(tantivy_doc)?; + + Ok(()) +} + + +pub fn delete_document_no_commit(id: String) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + let id_term = Term::from_field_text(api.id_field, &id); + + writer.delete_term(id_term); + + Ok(()) +} diff --git a/inference/src/main.rs b/inference/src/main.rs index f7ad1af..456a3cd 100644 --- a/inference/src/main.rs +++ b/inference/src/main.rs @@ -1,5 +1,4 @@ use anyhow::Result; -use ndarray_stats::QuantileExt; use inference::semantic_search::{load_artifacts, Embeddings, run_inference, get_top_k}; fn main() -> Result<()> { diff --git a/inference/src/semantic_search.rs b/inference/src/semantic_search.rs index 44908db..cc7e821 100644 --- a/inference/src/semantic_search.rs +++ b/inference/src/semantic_search.rs @@ -16,6 +16,7 @@ pub enum EncodingType { AttentionMask } +#[derive(Debug, Clone)] pub struct SimilarityScore { pub index: usize, pub score: f32, @@ -81,21 +82,6 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: String) -> Result> { - let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; - - let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; - let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); - println!("Similarity matrix:\n{:?}", similarity_matrix); - - let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); - - let top_k = get_top_k(_raw_score, 3)?; - - Ok(top_k) -} - pub fn get_top_k(scores: Vec, k: usize) -> Result> { let mut indexed_scores: Vec<(usize, f32)> = scores @@ -114,3 +100,18 @@ pub fn get_top_k(scores: Vec, k: usize) -> Result> { .map(|(index, score)| SimilarityScore { index, score }) .collect()) } + +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: usize) -> Result> { + + let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; + let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; + let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); + + println!("Similarity matrix:\n{:?}", similarity_matrix); + + let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); + let _top_k = get_top_k(_raw_score, top_k)?; + + Ok(_top_k) +} From 849aa2e4a89dd245e45f604cfa3c4f16a3da89dd Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:15:30 +0000 Subject: [PATCH 16/32] Updated Readme file --- mobile_app/README.md | 69 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/mobile_app/README.md b/mobile_app/README.md index d2865ca..d382d70 100644 --- a/mobile_app/README.md +++ b/mobile_app/README.md @@ -14,4 +14,71 @@ To run acho on your machine: - Configure a device (Android 16.0) in Tools > Device Manager. and start with the play button ( ▶) ![Screenshot 2026-01-17 at 12.25.49.png](../../../../Desktop/Screenshot%202026-01-17%20at%2012.25.49.png) - `cd mobile_app` -- `flutter run` \ No newline at end of file +- `flutter run` + +This app spawns compuation to an isolate to prevent U.I jank, and further intensive computation including Semantic similarity search, and keyword search to Rust using the flutter_rust_bridge plugin. + +# 🏗️ Manual Build & Compile Guide + +Use this sequence whenever you modify your Rust code (`.rs` files). This process ensures the **Dart code** (Frontend) and **Rust binary** (Backend) are perfectly synchronized. + +--- + +### 1. Set Environment Variables +Ensure your terminal knows where NDK 27 is. Run this once per terminal session (or save it to your `~/.zshrc`). + +```bash +# Set path to NDK 27 +export ANDROID_NDK_HOME=$HOME/Library/Android/sdk/ndk/27.0.12077973 +export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH +``` + +We use ndk 27 due to compatibility with ort crate + +### 2. Generate bindings for Rust (containing functionality of keyword search and semantic search) + +from location `acho/mobile_app` + +```bash +flutter_rust_bridge_codegen generate +``` + +### 3. Compile the .so library for + +```bash +cd rust + +# Clean previous builds to force a fresh hash (Recommended) +cargo clean + +# Build Release version +cargo build --target aarch64-linux-android --release + +cd .. +``` + +### 4 . Copy the fresh binary to a locaiton for the android target + +from location `acho/mobile_app` + +```bash +cp rust/target/aarch64-linux-android/release/librust_lib_mobile_app.so android/app/src/main/jniLibs/arm64-v8a/ +``` + +### 5. Verify the content of the jniLibs Folder contains the required .so files + +```bash +ls -l android/app/src/main/jniLibs/arm64-v8a/ +``` + +- libc++_shared.so (From NDK 27) +- libonnxruntime.so (From onnxruntime-android-1.23.2 AAR or Gradle) +- librust_lib_mobile_app.so + + +### 6. Most importantly ensure the models and tokenizers are in the Downloads folder on device (TODO: better way of deploying models) + +These three files : +- model.onnx +- model.onnx_data +- tokenizer.json From 134384f97f12b065a1fcb04f642d733d1fe11eae Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:16:47 +0000 Subject: [PATCH 17/32] Update application dependencies --- mobile_app/flutter_rust_bridge.yaml | 2 +- mobile_app/pubspec.lock | 151 ---------------------------- mobile_app/pubspec.yaml | 4 - 3 files changed, 1 insertion(+), 156 deletions(-) diff --git a/mobile_app/flutter_rust_bridge.yaml b/mobile_app/flutter_rust_bridge.yaml index cdad5c6..862d0f9 100644 --- a/mobile_app/flutter_rust_bridge.yaml +++ b/mobile_app/flutter_rust_bridge.yaml @@ -1,4 +1,4 @@ -rust_input: crate::api,crate::tantivy +rust_input: crate::api rust_root: rust/ dart_output: lib/src/rust enable_lifetime: true diff --git a/mobile_app/pubspec.lock b/mobile_app/pubspec.lock index c641df9..6b4f41c 100644 --- a/mobile_app/pubspec.lock +++ b/mobile_app/pubspec.lock @@ -1,22 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "5b7468c326d2f8a4f630056404ca0d291ade42918f4a3c6233618e724f39da8e" - url: "https://pub.dev" - source: hosted - version: "92.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "70e4b1ef8003c64793a9e268a551a82869a8a96f39deb73dea28084b0e8bf75e" - url: "https://pub.dev" - source: hosted - version: "9.0.0" args: dependency: transitive description: @@ -41,14 +25,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3" - url: "https://pub.dev" - source: hosted - version: "4.0.4" build_cli_annotations: dependency: transitive description: @@ -57,14 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - build_config: - dependency: transitive - description: - name: build_config - sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" - url: "https://pub.dev" - source: hosted - version: "1.2.0" characters: dependency: transitive description: @@ -73,14 +41,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" - url: "https://pub.dev" - source: hosted - version: "2.0.4" clock: dependency: transitive description: @@ -137,14 +97,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b - url: "https://pub.dev" - source: hosted - version: "3.1.3" dbus: dependency: transitive description: @@ -190,11 +142,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" flutter_lints: dependency: "direct dev" description: @@ -219,14 +166,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.1" - flutter_tantivy: - dependency: "direct main" - description: - name: flutter_tantivy - sha256: "5b024e4d68bff5aecd7397e20c9ae9e13d19288b707eb9b71233134a861935b5" - url: "https://pub.dev" - source: hosted - version: "0.0.1" flutter_test: dependency: "direct dev" description: flutter @@ -237,27 +176,6 @@ packages: description: flutter source: sdk version: "0.0.0" - freezed: - dependency: "direct main" - description: - name: freezed - sha256: "03dd9b7423ff0e31b7e01b2204593e5e1ac5ee553b6ea9d8184dff4a26b9fb07" - url: "https://pub.dev" - source: hosted - version: "3.2.4" - freezed_annotation: - dependency: transitive - description: - name: freezed_annotation - sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" gap: dependency: "direct main" description: @@ -298,11 +216,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" intl: dependency: transitive description: @@ -311,14 +224,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.2" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" leak_tracker: dependency: transitive description: @@ -407,14 +312,6 @@ packages: url: "https://pub.dev" source: hosted version: "9.2.2" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" - source: hosted - version: "2.2.0" path: dependency: transitive description: @@ -543,14 +440,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - process: - dependency: transitive - description: - name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" - url: "https://pub.dev" - source: hosted - version: "5.0.2" pub_semver: dependency: transitive description: @@ -559,14 +448,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" - url: "https://pub.dev" - source: hosted - version: "1.5.0" rust_lib_mobile_app: dependency: "direct main" description: @@ -579,14 +460,6 @@ packages: description: flutter source: sdk version: "0.0.0" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17" - url: "https://pub.dev" - source: hosted - version: "4.2.0" source_span: dependency: transitive description: @@ -619,14 +492,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" syncfusion_flutter_core: dependency: transitive description: @@ -683,14 +548,6 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.dev" - source: hosted - version: "1.2.1" web: dependency: transitive description: @@ -699,14 +556,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" - url: "https://pub.dev" - source: hosted - version: "3.0.3" win32: dependency: transitive description: diff --git a/mobile_app/pubspec.yaml b/mobile_app/pubspec.yaml index 29e67b7..5e4d90b 100644 --- a/mobile_app/pubspec.yaml +++ b/mobile_app/pubspec.yaml @@ -43,8 +43,6 @@ dependencies: file_picker: ^10.3.8 logger: ^2.6.2 path_provider: ^2.1.5 - freezed: ^3.2.4 - flutter_tantivy: ^0.0.1 syncfusion_flutter_pdf: ^32.1.25 dev_dependencies: @@ -57,8 +55,6 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^3.0.0 - integration_test: - sdk: flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 30b936316afa8db4c96aa057ff977711a348411e Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:25:49 +0000 Subject: [PATCH 18/32] original rust code --- mobile_app/rust/src/api/acho.rs | 6 +- mobile_app/rust/src/api/mod.rs | 1 + mobile_app/rust/src/api/tantivy.rs | 288 +++++++++++++++++++++++++++++ 3 files changed, 292 insertions(+), 3 deletions(-) diff --git a/mobile_app/rust/src/api/acho.rs b/mobile_app/rust/src/api/acho.rs index 67a2d07..e79210b 100644 --- a/mobile_app/rust/src/api/acho.rs +++ b/mobile_app/rust/src/api/acho.rs @@ -80,7 +80,7 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: Ok(dense_embeddings.to_owned()) } -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: i32) -> Result> { +pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: usize) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; @@ -89,9 +89,9 @@ pub fn similarity(query: &Vec, texts: &Vec, model_path: String, println!("Similarity matrix:\n{:?}", similarity_matrix); let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); - let top_k = get_top_k(_raw_score, 3)?; + let _top_k = get_top_k(_raw_score, top_k)?; - Ok(top_k) + Ok(_top_k) } pub fn get_top_k(scores: Vec, k: usize) -> Result> { diff --git a/mobile_app/rust/src/api/mod.rs b/mobile_app/rust/src/api/mod.rs index cfed603..612cce8 100644 --- a/mobile_app/rust/src/api/mod.rs +++ b/mobile_app/rust/src/api/mod.rs @@ -1,2 +1,3 @@ pub mod simple; pub mod acho; +pub mod tantivy; diff --git a/mobile_app/rust/src/api/tantivy.rs b/mobile_app/rust/src/api/tantivy.rs index e69de29..ba1c8de 100644 --- a/mobile_app/rust/src/api/tantivy.rs +++ b/mobile_app/rust/src/api/tantivy.rs @@ -0,0 +1,288 @@ +use anyhow::{anyhow, Result}; +use once_cell::sync::Lazy; +use std::path::PathBuf; +use std::sync::{Arc, Mutex}; +use tantivy::collector::TopDocs; +use tantivy::query::QueryParser; +use tantivy::schema::*; +use tantivy::{ Index, IndexReader, IndexWriter, ReloadPolicy, TantivyDocument, Term}; + + +#[derive(Debug, Clone)] +pub struct Document { + pub id: String, + pub text: String, +} + + +#[derive(Debug, Clone)] +pub struct SearchResult { + pub score: f32, + pub doc: Document, +} + + +struct TantivyApi { + index: Index, + writer: Mutex, + reader: IndexReader, + schema: Schema, + id_field: Field, + text_field: Field, +} + + +static STATE: Lazy>>> = Lazy::new(|| Arc::new(Mutex::new(None))); + + + +#[flutter_rust_bridge::frb(sync)] +pub fn init_tantivy(dir_path: String) -> Result<()> { + let mut state_lock = STATE.lock().unwrap(); + if state_lock.is_some() { + + return Ok(()); + } + + let index_dir = PathBuf::from(dir_path); + std::fs::create_dir_all(&index_dir)?; + + let (index, schema) = if index_dir.join("meta.json").exists() { + + let index = Index::open_in_dir(&index_dir)?; + let schema = index.schema(); + (index, schema) + } else { + + let mut schema_builder = Schema::builder(); + + schema_builder.add_text_field("id", STRING | STORED); + + schema_builder.add_text_field("text", TEXT | STORED); + let schema = schema_builder.build(); + let index = Index::create_in_dir(&index_dir, schema.clone())?; + (index, schema) + }; + + let id_field = schema.get_field("id").map_err(|_| anyhow!("'id' field not found"))?; + let text_field = schema.get_field("text").map_err(|_| anyhow!("'text' field not found"))?; + + let writer = index.writer(50_000_000)?; + + + let reader = index + .reader_builder() + .reload_policy(ReloadPolicy::Manual) + .try_into()?; + + let api = TantivyApi { + index, + writer: Mutex::new(writer), + reader, + schema, + id_field, + text_field, + }; + + *state_lock = Some(api); + + Ok(()) +} + + + + +pub fn add_document(doc: Document) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term.clone()); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + + writer.add_document(tantivy_doc)?; + writer.commit()?; + + Ok(()) +} + + +pub fn search_documents(query: String, top_k: usize) -> Result> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + + api.reader.reload()?; + + + let searcher = api.reader.searcher(); + + let query_parser = QueryParser::for_index(&api.index, vec![api.text_field]); + let query = query_parser.parse_query(&query)?; + + let top_docs = searcher.search(&query, &TopDocs::with_limit(top_k))?; + + let mut results = Vec::new(); + for (score, doc_address) in top_docs { + let retrieved_doc = searcher.doc::(doc_address)?; + let id = retrieved_doc.get_first(api.id_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + let text = retrieved_doc.get_first(api.text_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + + results.push(SearchResult { + score, + doc: Document { id, text }, + }); + } + + Ok(results) +} + + + +#[flutter_rust_bridge::frb(sync)] +pub fn get_document_by_id(id: String) -> Result> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + + let searcher = api.reader.searcher(); + + let id_term = Term::from_field_text(api.id_field, &id); + let query = tantivy::query::TermQuery::new(id_term, IndexRecordOption::Basic); + + let top_docs = searcher.search(&query, &TopDocs::with_limit(1))?; + + if let Some((_, doc_address)) = top_docs.first() { + let retrieved_doc = searcher.doc::(*doc_address)?; + let text = retrieved_doc.get_first(api.text_field) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string(); + + return Ok(Some(Document { id, text })); + } + + Ok(None) +} + + + +pub fn update_document(doc: Document) -> Result<()> { + + add_document(doc) +} + + +pub fn delete_document(id: String) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + let id_term = Term::from_field_text(api.id_field, &id); + + writer.delete_term(id_term); + writer.commit()?; + + Ok(()) +} + + +pub fn add_documents_batch(docs: Vec) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + for doc in docs { + + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + + writer.add_document(tantivy_doc)?; + } + + + writer.commit()?; + + Ok(()) +} + + +pub fn delete_documents_batch(ids: Vec) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + for id in ids { + let id_term = Term::from_field_text(api.id_field, &id); + writer.delete_term(id_term); + } + + + writer.commit()?; + + Ok(()) +} + + + +#[flutter_rust_bridge::frb(sync)] +pub fn commit() -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + writer.commit()?; + + Ok(()) +} + + + +pub fn add_document_no_commit(doc: Document) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + + let id_term = Term::from_field_text(api.id_field, &doc.id); + writer.delete_term(id_term); + + let mut tantivy_doc = TantivyDocument::new(); + tantivy_doc.add_text(api.id_field, &doc.id); + tantivy_doc.add_text(api.text_field, &doc.text); + + writer.add_document(tantivy_doc)?; + + Ok(()) +} + + +pub fn delete_document_no_commit(id: String) -> Result<()> { + let state_lock = STATE.lock().unwrap(); + let api = state_lock.as_ref().ok_or_else(|| anyhow!("Tantivy not initialized"))?; + + let mut writer = api.writer.lock().unwrap(); + let id_term = Term::from_field_text(api.id_field, &id); + + writer.delete_term(id_term); + + Ok(()) +} From 6623f4ea4ae8ebe2094db72a765babcc010c10b0 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:26:37 +0000 Subject: [PATCH 19/32] generated rust to dart code --- mobile_app/lib/src/rust/api/acho.dart | 2 +- mobile_app/lib/src/rust/api/tantivy.dart | 86 + mobile_app/lib/src/rust/frb_generated.dart | 1722 +++++++++++++++++ mobile_app/lib/src/rust/frb_generated.io.dart | 641 ++++++ .../lib/src/rust/frb_generated.web.dart | 581 ++++++ mobile_app/rust/src/frb_generated.rs | 569 +++++- 6 files changed, 3590 insertions(+), 11 deletions(-) create mode 100644 mobile_app/lib/src/rust/api/tantivy.dart create mode 100644 mobile_app/lib/src/rust/frb_generated.dart create mode 100644 mobile_app/lib/src/rust/frb_generated.io.dart create mode 100644 mobile_app/lib/src/rust/frb_generated.web.dart diff --git a/mobile_app/lib/src/rust/api/acho.dart b/mobile_app/lib/src/rust/api/acho.dart index dc6a997..d62a9b7 100644 --- a/mobile_app/lib/src/rust/api/acho.dart +++ b/mobile_app/lib/src/rust/api/acho.dart @@ -34,7 +34,7 @@ Future> similarity( required List texts, required String modelPath, required String tokenizerPath, - required int topK}) => + required BigInt topK}) => RustLib.instance.api.crateApiAchoSimilarity( query: query, texts: texts, diff --git a/mobile_app/lib/src/rust/api/tantivy.dart b/mobile_app/lib/src/rust/api/tantivy.dart new file mode 100644 index 0000000..ab17076 --- /dev/null +++ b/mobile_app/lib/src/rust/api/tantivy.dart @@ -0,0 +1,86 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import + +import '../frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `TantivyApi` +// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`, `clone`, `fmt`, `fmt` + +void initTantivy({required String dirPath}) => + RustLib.instance.api.crateApiTantivyInitTantivy(dirPath: dirPath); + +Future addDocument({required Document doc}) => + RustLib.instance.api.crateApiTantivyAddDocument(doc: doc); + +Future> searchDocuments( + {required String query, required BigInt topK}) => + RustLib.instance.api + .crateApiTantivySearchDocuments(query: query, topK: topK); + +Document? getDocumentById({required String id}) => + RustLib.instance.api.crateApiTantivyGetDocumentById(id: id); + +Future updateDocument({required Document doc}) => + RustLib.instance.api.crateApiTantivyUpdateDocument(doc: doc); + +Future deleteDocument({required String id}) => + RustLib.instance.api.crateApiTantivyDeleteDocument(id: id); + +Future addDocumentsBatch({required List docs}) => + RustLib.instance.api.crateApiTantivyAddDocumentsBatch(docs: docs); + +Future deleteDocumentsBatch({required List ids}) => + RustLib.instance.api.crateApiTantivyDeleteDocumentsBatch(ids: ids); + +void commit() => RustLib.instance.api.crateApiTantivyCommit(); + +Future addDocumentNoCommit({required Document doc}) => + RustLib.instance.api.crateApiTantivyAddDocumentNoCommit(doc: doc); + +Future deleteDocumentNoCommit({required String id}) => + RustLib.instance.api.crateApiTantivyDeleteDocumentNoCommit(id: id); + +class Document { + final String id; + final String text; + + const Document({ + required this.id, + required this.text, + }); + + @override + int get hashCode => id.hashCode ^ text.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Document && + runtimeType == other.runtimeType && + id == other.id && + text == other.text; +} + +class SearchResult { + final double score; + final Document doc; + + const SearchResult({ + required this.score, + required this.doc, + }); + + @override + int get hashCode => score.hashCode ^ doc.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is SearchResult && + runtimeType == other.runtimeType && + score == other.score && + doc == other.doc; +} diff --git a/mobile_app/lib/src/rust/frb_generated.dart b/mobile_app/lib/src/rust/frb_generated.dart new file mode 100644 index 0000000..32fc79a --- /dev/null +++ b/mobile_app/lib/src/rust/frb_generated.dart @@ -0,0 +1,1722 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// 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 'api/acho.dart'; +import 'api/simple.dart'; +import 'api/tantivy.dart'; +import 'dart:async'; +import 'dart:convert'; +import 'frb_generated.dart'; +import 'frb_generated.io.dart' + if (dart.library.js_interop) 'frb_generated.web.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +/// Main entrypoint of the Rust API +class RustLib extends BaseEntrypoint { + @internal + static final instance = RustLib._(); + + RustLib._(); + + /// Initialize flutter_rust_bridge + static Future init({ + RustLibApi? api, + BaseHandler? handler, + ExternalLibrary? externalLibrary, + bool forceSameCodegenVersion = true, + }) async { + await instance.initImpl( + api: api, + handler: handler, + externalLibrary: externalLibrary, + forceSameCodegenVersion: forceSameCodegenVersion, + ); + } + + /// Initialize flutter_rust_bridge in mock mode. + /// No libraries for FFI are loaded. + static void initMock({ + required RustLibApi api, + }) { + instance.initMockImpl( + api: api, + ); + } + + /// Dispose flutter_rust_bridge + /// + /// The call to this function is optional, since flutter_rust_bridge (and everything else) + /// is automatically disposed when the app stops. + static void dispose() => instance.disposeImpl(); + + @override + ApiImplConstructor get apiImplConstructor => + RustLibApiImpl.new; + + @override + WireConstructor get wireConstructor => + RustLibWire.fromExternalLibrary; + + @override + Future executeRustInitializers() async { + await api.crateApiSimpleInitApp(); + } + + @override + ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig => + kDefaultExternalLibraryLoaderConfig; + + @override + String get codegenVersion => '2.11.1'; + + @override + int get rustContentHash => -1510959301; + + static const kDefaultExternalLibraryLoaderConfig = + ExternalLibraryLoaderConfig( + stem: 'rust_lib_mobile_app', + ioDirectory: 'rust/target/release/', + webPrefix: 'pkg/', + ); +} + +abstract class RustLibApi extends BaseApi { + Future crateApiTantivyAddDocument({required Document doc}); + + Future crateApiTantivyAddDocumentNoCommit({required Document doc}); + + Future crateApiTantivyAddDocumentsBatch({required List docs}); + + void crateApiTantivyCommit(); + + Future crateApiTantivyDeleteDocument({required String id}); + + Future crateApiTantivyDeleteDocumentNoCommit({required String id}); + + Future crateApiTantivyDeleteDocumentsBatch({required List ids}); + + Document? crateApiTantivyGetDocumentById({required String id}); + + Future crateApiAchoGetEncodingArray( + {required List encodings, required EncodingType encodingType}); + + Future> crateApiAchoGetTopK( + {required List scores, required BigInt k}); + + String crateApiSimpleGreet({required String name}); + + Future crateApiSimpleInitApp(); + + void crateApiTantivyInitTantivy({required String dirPath}); + + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( + {required String modelPath, required String tokenizerPath}); + + Future crateApiAchoRunInference( + {required List text, + required Session model, + required Tokenizer tokenizer}); + + Future> crateApiTantivySearchDocuments( + {required String query, required BigInt topK}); + + Future> crateApiAchoSimilarity( + {required List query, + required List texts, + required String modelPath, + required String tokenizerPath, + required BigInt topK}); + + Future<(Array2I64, Array2I64)> crateApiAchoTokenize( + {required List texts, required Tokenizer tokenizer}); + + Future crateApiTantivyUpdateDocument({required Document doc}); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2F32; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2F32; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2I64; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2I64; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Encoding; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Encoding; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr; + + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Session; + + RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Session; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Tokenizer; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Tokenizer; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr; +} + +class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { + RustLibApiImpl({ + required super.handler, + required super.wire, + required super.generalizedFrbRustBinding, + required super.portManager, + }); + + @override + Future crateApiTantivyAddDocument({required Document doc}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_box_autoadd_document(doc, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 1, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyAddDocumentConstMeta, + argValues: [doc], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyAddDocumentConstMeta => const TaskConstMeta( + debugName: "add_document", + argNames: ["doc"], + ); + + @override + Future crateApiTantivyAddDocumentNoCommit({required Document doc}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_box_autoadd_document(doc, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 2, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyAddDocumentNoCommitConstMeta, + argValues: [doc], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyAddDocumentNoCommitConstMeta => + const TaskConstMeta( + debugName: "add_document_no_commit", + argNames: ["doc"], + ); + + @override + Future crateApiTantivyAddDocumentsBatch( + {required List docs}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_document(docs, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 3, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyAddDocumentsBatchConstMeta, + argValues: [docs], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyAddDocumentsBatchConstMeta => + const TaskConstMeta( + debugName: "add_documents_batch", + argNames: ["docs"], + ); + + @override + void crateApiTantivyCommit() { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyCommitConstMeta, + argValues: [], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyCommitConstMeta => const TaskConstMeta( + debugName: "commit", + argNames: [], + ); + + @override + Future crateApiTantivyDeleteDocument({required String id}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(id, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 5, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyDeleteDocumentConstMeta, + argValues: [id], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyDeleteDocumentConstMeta => + const TaskConstMeta( + debugName: "delete_document", + argNames: ["id"], + ); + + @override + Future crateApiTantivyDeleteDocumentNoCommit({required String id}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(id, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 6, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyDeleteDocumentNoCommitConstMeta, + argValues: [id], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyDeleteDocumentNoCommitConstMeta => + const TaskConstMeta( + debugName: "delete_document_no_commit", + argNames: ["id"], + ); + + @override + Future crateApiTantivyDeleteDocumentsBatch( + {required List ids}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(ids, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 7, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyDeleteDocumentsBatchConstMeta, + argValues: [ids], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyDeleteDocumentsBatchConstMeta => + const TaskConstMeta( + debugName: "delete_documents_batch", + argNames: ["ids"], + ); + + @override + Document? crateApiTantivyGetDocumentById({required String id}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(id, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 8)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_opt_box_autoadd_document, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyGetDocumentByIdConstMeta, + argValues: [id], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyGetDocumentByIdConstMeta => + const TaskConstMeta( + debugName: "get_document_by_id", + argNames: ["id"], + ); + + @override + Future crateApiAchoGetEncodingArray( + {required List encodings, required EncodingType encodingType}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + encodings, serializer); + sse_encode_encoding_type(encodingType, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 9, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoGetEncodingArrayConstMeta, + argValues: [encodings, encodingType], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoGetEncodingArrayConstMeta => + const TaskConstMeta( + debugName: "get_encoding_array", + argNames: ["encodings", "encodingType"], + ); + + @override + Future> crateApiAchoGetTopK( + {required List scores, required BigInt k}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_prim_f_32_loose(scores, serializer); + sse_encode_usize(k, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 10, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_similarity_score, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoGetTopKConstMeta, + argValues: [scores, k], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoGetTopKConstMeta => const TaskConstMeta( + debugName: "get_top_k", + argNames: ["scores", "k"], + ); + + @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: 11)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, + decodeErrorData: null, + ), + constMeta: kCrateApiSimpleGreetConstMeta, + argValues: [name], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiSimpleGreetConstMeta => const TaskConstMeta( + debugName: "greet", + argNames: ["name"], + ); + + @override + Future crateApiSimpleInitApp() { + 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( + debugName: "init_app", + argNames: [], + ); + + @override + void crateApiTantivyInitTantivy({required String dirPath}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(dirPath, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 13)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyInitTantivyConstMeta, + argValues: [dirPath], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyInitTantivyConstMeta => const TaskConstMeta( + debugName: "init_tantivy", + argNames: ["dirPath"], + ); + + @override + Future<(Tokenizer, Session)> crateApiAchoLoadArtifacts( + {required String modelPath, required String tokenizerPath}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(modelPath, serializer); + sse_encode_String(tokenizerPath, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 14, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoLoadArtifactsConstMeta, + argValues: [modelPath, tokenizerPath], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoLoadArtifactsConstMeta => const TaskConstMeta( + debugName: "load_artifacts", + argNames: ["modelPath", "tokenizerPath"], + ); + + @override + Future crateApiAchoRunInference( + {required List text, + required Session model, + required Tokenizer tokenizer}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(text, serializer); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + model, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + tokenizer, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 15, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoRunInferenceConstMeta, + argValues: [text, model, tokenizer], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoRunInferenceConstMeta => const TaskConstMeta( + debugName: "run_inference", + argNames: ["text", "model", "tokenizer"], + ); + + @override + Future> crateApiTantivySearchDocuments( + {required String query, required BigInt topK}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(query, serializer); + sse_encode_usize(topK, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 16, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_search_result, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivySearchDocumentsConstMeta, + argValues: [query, topK], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivySearchDocumentsConstMeta => + const TaskConstMeta( + debugName: "search_documents", + argNames: ["query", "topK"], + ); + + @override + Future> crateApiAchoSimilarity( + {required List query, + required List texts, + required String modelPath, + required String tokenizerPath, + required BigInt topK}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(query, serializer); + sse_encode_list_String(texts, serializer); + sse_encode_String(modelPath, serializer); + sse_encode_String(tokenizerPath, serializer); + sse_encode_usize(topK, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 17, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_similarity_score, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoSimilarityConstMeta, + argValues: [query, texts, modelPath, tokenizerPath, topK], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoSimilarityConstMeta => const TaskConstMeta( + debugName: "similarity", + argNames: ["query", "texts", "modelPath", "tokenizerPath", "topK"], + ); + + @override + Future<(Array2I64, Array2I64)> crateApiAchoTokenize( + {required List texts, required Tokenizer tokenizer}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_list_String(texts, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + tokenizer, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 18, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiAchoTokenizeConstMeta, + argValues: [texts, tokenizer], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiAchoTokenizeConstMeta => const TaskConstMeta( + debugName: "tokenize", + argNames: ["texts", "tokenizer"], + ); + + @override + Future crateApiTantivyUpdateDocument({required Document doc}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_box_autoadd_document(doc, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 19, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiTantivyUpdateDocumentConstMeta, + argValues: [doc], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiTantivyUpdateDocumentConstMeta => + const TaskConstMeta( + debugName: "update_document", + argNames: ["doc"], + ); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2F32 => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2F32 => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Array2I64 => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Array2I64 => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Encoding => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Encoding => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Session => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Session => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Tokenizer => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Tokenizer => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return AnyhowException(raw as String); + } + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2F32Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2I64Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2F32Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Array2I64Impl.frbInternalDcoDecode(raw as List); + } + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return SessionImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return TokenizerImpl.frbInternalDcoDecode(raw as List); + } + + @protected + String dco_decode_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as String; + } + + @protected + Document dco_decode_box_autoadd_document(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_document(raw); + } + + @protected + Document dco_decode_document(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) + throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return Document( + id: dco_decode_String(arr[0]), + text: dco_decode_String(arr[1]), + ); + } + + @protected + EncodingType dco_decode_encoding_type(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return EncodingType.values[raw as int]; + } + + @protected + double dco_decode_f_32(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as double; + } + + @protected + int dco_decode_i_32(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as int; + } + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List) + .map( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding) + .toList(); + } + + @protected + List dco_decode_list_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_String).toList(); + } + + @protected + List dco_decode_list_document(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_document).toList(); + } + + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as List; + } + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as Float32List; + } + + @protected + Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as Uint8List; + } + + @protected + List dco_decode_list_search_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_search_result).toList(); + } + + @protected + List dco_decode_list_similarity_score(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_similarity_score).toList(); + } + + @protected + Document? dco_decode_opt_box_autoadd_document(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw == null ? null : dco_decode_box_autoadd_document(raw); + } + + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) { + throw Exception('Expected 2 elements, got ${arr.length}'); + } + return ( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + arr[0]), + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + arr[1]), + ); + } + + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) { + throw Exception('Expected 2 elements, got ${arr.length}'); + } + return ( + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + arr[0]), + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + arr[1]), + ); + } + + @protected + SearchResult dco_decode_search_result(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) + throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return SearchResult( + score: dco_decode_f_32(arr[0]), + doc: dco_decode_document(arr[1]), + ); + } + + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) + throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); + return SimilarityScore( + index: dco_decode_usize(arr[0]), + score: dco_decode_f_32(arr[1]), + ); + } + + @protected + int dco_decode_u_8(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as int; + } + + @protected + void dco_decode_unit(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return; + } + + @protected + BigInt dco_decode_usize(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dcoDecodeU64(raw); + } + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_String(deserializer); + return AnyhowException(inner); + } + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2F32Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2I64Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return EncodingImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2F32Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Array2I64Impl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return EncodingImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return SessionImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return TokenizerImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + String sse_decode_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_list_prim_u_8_strict(deserializer); + return utf8.decoder.convert(inner); + } + + @protected + Document sse_decode_box_autoadd_document(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_document(deserializer)); + } + + @protected + Document sse_decode_document(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_id = sse_decode_String(deserializer); + var var_text = sse_decode_String(deserializer); + return Document(id: var_id, text: var_text); + } + + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_i_32(deserializer); + return EncodingType.values[inner]; + } + + @protected + double sse_decode_f_32(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getFloat32(); + } + + @protected + int sse_decode_i_32(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getInt32(); + } + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add( + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + deserializer)); + } + return ans_; + } + + @protected + List sse_decode_list_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_String(deserializer)); + } + return ans_; + } + + @protected + List sse_decode_list_document(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_document(deserializer)); + } + return ans_; + } + + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getFloat32List(len_); + } + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getFloat32List(len_); + } + + @protected + Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getUint8List(len_); + } + + @protected + List sse_decode_list_search_result( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_search_result(deserializer)); + } + return ans_; + } + + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_similarity_score(deserializer)); + } + return ans_; + } + + @protected + Document? sse_decode_opt_box_autoadd_document(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + if (sse_decode_bool(deserializer)) { + return (sse_decode_box_autoadd_document(deserializer)); + } else { + return null; + } + } + + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + deserializer); + var var_field1 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + deserializer); + return (var_field0, var_field1); + } + + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + deserializer); + var var_field1 = + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + deserializer); + return (var_field0, var_field1); + } + + @protected + SearchResult sse_decode_search_result(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_score = sse_decode_f_32(deserializer); + var var_doc = sse_decode_document(deserializer); + return SearchResult(score: var_score, doc: var_doc); + } + + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_index = sse_decode_usize(deserializer); + var var_score = sse_decode_f_32(deserializer); + return SimilarityScore(index: var_index, score: var_score); + } + + @protected + int sse_decode_u_8(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getUint8(); + } + + @protected + void sse_decode_unit(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + } + + @protected + BigInt sse_decode_usize(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getBigUint64(); + } + + @protected + bool sse_decode_bool(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getUint8() != 0; + } + + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.message, serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2F32Impl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2I64Impl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as EncodingImpl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: true), serializer); + } + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: false), serializer); + } + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: false), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2F32Impl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Array2I64Impl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as EncodingImpl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as SessionImpl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as TokenizerImpl).frbInternalSseEncode(move: null), serializer); + } + + @protected + void sse_encode_String(String self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); + } + + @protected + void sse_encode_box_autoadd_document( + Document self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_document(self, serializer); + } + + @protected + void sse_encode_document(Document self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.id, serializer); + sse_encode_String(self.text, serializer); + } + + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.index, serializer); + } + + @protected + void sse_encode_f_32(double self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putFloat32(self); + } + + @protected + void sse_encode_i_32(int self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putInt32(self); + } + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List 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_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + item, serializer); + } + } + + @protected + void sse_encode_list_String(List 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_String(item, serializer); + } + } + + @protected + void sse_encode_list_document(List 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_document(item, serializer); + } + } + + @protected + void sse_encode_list_prim_f_32_loose( + List 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)); + } + + @protected + void sse_encode_list_prim_f_32_strict( + 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); + } + + @protected + void sse_encode_list_prim_u_8_strict( + 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); + } + + @protected + void sse_encode_list_search_result( + List 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_search_result(item, serializer); + } + } + + @protected + void sse_encode_list_similarity_score( + List 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_similarity_score(item, serializer); + } + } + + @protected + void sse_encode_opt_box_autoadd_document( + Document? self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + sse_encode_bool(self != null, serializer); + if (self != null) { + sse_encode_box_autoadd_document(self, serializer); + } + } + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + self.$1, serializer); + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + self.$2, serializer); + } + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + self.$1, serializer); + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + self.$2, serializer); + } + + @protected + void sse_encode_search_result(SearchResult self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_f_32(self.score, serializer); + sse_encode_document(self.doc, serializer); + } + + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize(self.index, serializer); + sse_encode_f_32(self.score, serializer); + } + + @protected + void sse_encode_u_8(int self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putUint8(self); + } + + @protected + void sse_encode_unit(void self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + } + + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putBigUint64(self); + } + + @protected + void sse_encode_bool(bool self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putUint8(self ? 1 : 0); + } +} + +@sealed +class Array2F32Impl extends RustOpaque implements Array2F32 { + // Not to be used by end users + Array2F32Impl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Array2F32Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Array2F32, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2F32Ptr, + ); +} + +@sealed +class Array2I64Impl extends RustOpaque implements Array2I64 { + // Not to be used by end users + Array2I64Impl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Array2I64Impl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Array2I64, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_Array2I64Ptr, + ); +} + +@sealed +class EncodingImpl extends RustOpaque implements Encoding { + // Not to be used by end users + EncodingImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + EncodingImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Encoding, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Encoding, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_EncodingPtr, + ); +} + +@sealed +class SessionImpl extends RustOpaque implements Session { + // Not to be used by end users + SessionImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + SessionImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Session, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Session, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_SessionPtr, + ); +} + +@sealed +class TokenizerImpl extends RustOpaque implements Tokenizer { + // Not to be used by end users + TokenizerImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + TokenizerImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: + RustLib.instance.api.rust_arc_increment_strong_count_Tokenizer, + rustArcDecrementStrongCount: + RustLib.instance.api.rust_arc_decrement_strong_count_Tokenizer, + rustArcDecrementStrongCountPtr: + RustLib.instance.api.rust_arc_decrement_strong_count_TokenizerPtr, + ); +} diff --git a/mobile_app/lib/src/rust/frb_generated.io.dart b/mobile_app/lib/src/rust/frb_generated.io.dart new file mode 100644 index 0000000..7ee5a0b --- /dev/null +++ b/mobile_app/lib/src/rust/frb_generated.io.dart @@ -0,0 +1,641 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// 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 'api/acho.dart'; +import 'api/simple.dart'; +import 'api/tantivy.dart'; +import 'dart:async'; +import 'dart:convert'; +import 'dart:ffi' as ffi; +import 'frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart'; + +abstract class RustLibApiImplPlatform extends BaseApiImpl { + RustLibApiImplPlatform({ + required super.handler, + required super.wire, + required super.generalizedFrbRustBinding, + required super.portManager, + }); + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + String dco_decode_String(dynamic raw); + + @protected + Document dco_decode_box_autoadd_document(dynamic raw); + + @protected + Document dco_decode_document(dynamic raw); + + @protected + EncodingType dco_decode_encoding_type(dynamic raw); + + @protected + double dco_decode_f_32(dynamic raw); + + @protected + int dco_decode_i_32(dynamic raw); + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + List dco_decode_list_String(dynamic raw); + + @protected + List dco_decode_list_document(dynamic raw); + + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw); + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw); + + @protected + Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + + @protected + List dco_decode_list_search_result(dynamic raw); + + @protected + List dco_decode_list_similarity_score(dynamic raw); + + @protected + Document? dco_decode_opt_box_autoadd_document(dynamic raw); + + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw); + + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw); + + @protected + SearchResult dco_decode_search_result(dynamic raw); + + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw); + + @protected + int dco_decode_u_8(dynamic raw); + + @protected + void dco_decode_unit(dynamic raw); + + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + String sse_decode_String(SseDeserializer deserializer); + + @protected + Document sse_decode_box_autoadd_document(SseDeserializer deserializer); + + @protected + Document sse_decode_document(SseDeserializer deserializer); + + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + + @protected + double sse_decode_f_32(SseDeserializer deserializer); + + @protected + int sse_decode_i_32(SseDeserializer deserializer); + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + List sse_decode_list_String(SseDeserializer deserializer); + + @protected + List sse_decode_list_document(SseDeserializer deserializer); + + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); + + @protected + Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + + @protected + List sse_decode_list_search_result( + SseDeserializer deserializer); + + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer); + + @protected + Document? sse_decode_opt_box_autoadd_document(SseDeserializer deserializer); + + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer); + + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer); + + @protected + SearchResult sse_decode_search_result(SseDeserializer deserializer); + + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); + + @protected + int sse_decode_u_8(SseDeserializer deserializer); + + @protected + void sse_decode_unit(SseDeserializer deserializer); + + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + + @protected + bool sse_decode_bool(SseDeserializer deserializer); + + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void sse_encode_String(String self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_document(Document self, SseSerializer serializer); + + @protected + void sse_encode_document(Document self, SseSerializer serializer); + + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + + @protected + void sse_encode_f_32(double self, SseSerializer serializer); + + @protected + void sse_encode_i_32(int self, SseSerializer serializer); + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + + @protected + void sse_encode_list_document(List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_loose( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_strict( + Float32List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_u_8_strict( + Uint8List self, SseSerializer serializer); + + @protected + void sse_encode_list_search_result( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_similarity_score( + List self, SseSerializer serializer); + + @protected + void sse_encode_opt_box_autoadd_document( + Document? self, SseSerializer serializer); + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer); + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer); + + @protected + void sse_encode_search_result(SearchResult self, SseSerializer serializer); + + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer); + + @protected + void sse_encode_u_8(int self, SseSerializer serializer); + + @protected + void sse_encode_unit(void self, SseSerializer serializer); + + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer); + + @protected + void sse_encode_bool(bool self, SseSerializer serializer); +} + +// Section: wire_class + +class RustLibWire implements BaseWire { + factory RustLibWire.fromExternalLibrary(ExternalLibrary lib) => + RustLibWire(lib.ffiDynamicLibrary); + + /// Holds the symbol lookup function. + final ffi.Pointer Function(String symbolName) + _lookup; + + /// The symbols are looked up in [dynamicLibrary]. + RustLibWire(ffi.DynamicLibrary dynamicLibrary) + : _lookup = dynamicLibrary.lookup; + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32 = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32Ptr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64 = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64Ptr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncodingPtr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSessionPtr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr = + _lookup)>>( + 'frbgen_mobile_app_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizerPtr + .asFunction)>(); +} diff --git a/mobile_app/lib/src/rust/frb_generated.web.dart b/mobile_app/lib/src/rust/frb_generated.web.dart new file mode 100644 index 0000000..231c2c7 --- /dev/null +++ b/mobile_app/lib/src/rust/frb_generated.web.dart @@ -0,0 +1,581 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +// 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 +// ignore_for_file: argument_type_not_assignable + +import 'api/acho.dart'; +import 'api/simple.dart'; +import 'api/tantivy.dart'; +import 'dart:async'; +import 'dart:convert'; +import 'frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart'; + +abstract class RustLibApiImplPlatform extends BaseApiImpl { + RustLibApiImplPlatform({ + required super.handler, + required super.wire, + required super.generalizedFrbRustBinding, + required super.portManager, + }); + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2F32Ptr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_Array2I64Ptr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_EncodingPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_SessionPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_TokenizerPtr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Array2F32 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Array2I64 + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + Session + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Session + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + Array2F32 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + dynamic raw); + + @protected + Array2I64 + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + dynamic raw); + + @protected + Encoding + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + Session + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + dynamic raw); + + @protected + Tokenizer + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + dynamic raw); + + @protected + String dco_decode_String(dynamic raw); + + @protected + Document dco_decode_box_autoadd_document(dynamic raw); + + @protected + Document dco_decode_document(dynamic raw); + + @protected + EncodingType dco_decode_encoding_type(dynamic raw); + + @protected + double dco_decode_f_32(dynamic raw); + + @protected + int dco_decode_i_32(dynamic raw); + + @protected + List + dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + dynamic raw); + + @protected + List dco_decode_list_String(dynamic raw); + + @protected + List dco_decode_list_document(dynamic raw); + + @protected + List dco_decode_list_prim_f_32_loose(dynamic raw); + + @protected + Float32List dco_decode_list_prim_f_32_strict(dynamic raw); + + @protected + Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + + @protected + List dco_decode_list_search_result(dynamic raw); + + @protected + List dco_decode_list_similarity_score(dynamic raw); + + @protected + Document? dco_decode_opt_box_autoadd_document(dynamic raw); + + @protected + ( + Array2I64, + Array2I64 + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + dynamic raw); + + @protected + ( + Tokenizer, + Session + ) dco_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + dynamic raw); + + @protected + SearchResult dco_decode_search_result(dynamic raw); + + @protected + SimilarityScore dco_decode_similarity_score(dynamic raw); + + @protected + int dco_decode_u_8(dynamic raw); + + @protected + void dco_decode_unit(dynamic raw); + + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Array2I64 + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Session + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + Array2F32 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + SseDeserializer deserializer); + + @protected + Array2I64 + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + SseDeserializer deserializer); + + @protected + Encoding + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + Session + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + SseDeserializer deserializer); + + @protected + Tokenizer + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + SseDeserializer deserializer); + + @protected + String sse_decode_String(SseDeserializer deserializer); + + @protected + Document sse_decode_box_autoadd_document(SseDeserializer deserializer); + + @protected + Document sse_decode_document(SseDeserializer deserializer); + + @protected + EncodingType sse_decode_encoding_type(SseDeserializer deserializer); + + @protected + double sse_decode_f_32(SseDeserializer deserializer); + + @protected + int sse_decode_i_32(SseDeserializer deserializer); + + @protected + List + sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + SseDeserializer deserializer); + + @protected + List sse_decode_list_String(SseDeserializer deserializer); + + @protected + List sse_decode_list_document(SseDeserializer deserializer); + + @protected + List sse_decode_list_prim_f_32_loose(SseDeserializer deserializer); + + @protected + Float32List sse_decode_list_prim_f_32_strict(SseDeserializer deserializer); + + @protected + Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + + @protected + List sse_decode_list_search_result( + SseDeserializer deserializer); + + @protected + List sse_decode_list_similarity_score( + SseDeserializer deserializer); + + @protected + Document? sse_decode_opt_box_autoadd_document(SseDeserializer deserializer); + + @protected + ( + Array2I64, + Array2I64 + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + SseDeserializer deserializer); + + @protected + ( + Tokenizer, + Session + ) sse_decode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + SseDeserializer deserializer); + + @protected + SearchResult sse_decode_search_result(SseDeserializer deserializer); + + @protected + SimilarityScore sse_decode_similarity_score(SseDeserializer deserializer); + + @protected + int sse_decode_u_8(SseDeserializer deserializer); + + @protected + void sse_decode_unit(SseDeserializer deserializer); + + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + + @protected + bool sse_decode_bool(SseDeserializer deserializer); + + @protected + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + Array2F32 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + Array2I64 self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + Encoding self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + Session self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + Tokenizer self, SseSerializer serializer); + + @protected + void sse_encode_String(String self, SseSerializer serializer); + + @protected + void sse_encode_box_autoadd_document(Document self, SseSerializer serializer); + + @protected + void sse_encode_document(Document self, SseSerializer serializer); + + @protected + void sse_encode_encoding_type(EncodingType self, SseSerializer serializer); + + @protected + void sse_encode_f_32(double self, SseSerializer serializer); + + @protected + void sse_encode_i_32(int self, SseSerializer serializer); + + @protected + void + sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + + @protected + void sse_encode_list_document(List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_loose( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_f_32_strict( + Float32List self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_u_8_strict( + Uint8List self, SseSerializer serializer); + + @protected + void sse_encode_list_search_result( + List self, SseSerializer serializer); + + @protected + void sse_encode_list_similarity_score( + List self, SseSerializer serializer); + + @protected + void sse_encode_opt_box_autoadd_document( + Document? self, SseSerializer serializer); + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_array_2_i_64( + (Array2I64, Array2I64) self, SseSerializer serializer); + + @protected + void + sse_encode_record_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_tokenizer_auto_owned_rust_opaque_flutter_rust_bridgefor_generated_rust_auto_opaque_inner_session( + (Tokenizer, Session) self, SseSerializer serializer); + + @protected + void sse_encode_search_result(SearchResult self, SseSerializer serializer); + + @protected + void sse_encode_similarity_score( + SimilarityScore self, SseSerializer serializer); + + @protected + void sse_encode_u_8(int self, SseSerializer serializer); + + @protected + void sse_encode_unit(void self, SseSerializer serializer); + + @protected + void sse_encode_usize(BigInt self, SseSerializer serializer); + + @protected + void sse_encode_bool(bool self, SseSerializer serializer); +} + +// Section: wire_class + +class RustLibWire implements BaseWire { + RustLibWire.fromExternalLibrary(ExternalLibrary lib); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + ptr); +} + +@JS('wasm_bindgen') +external RustLibWasmModule get wasmModule; + +@JS() +@anonymous +extension type RustLibWasmModule._(JSObject _) implements JSObject { + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2f32( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerArray2i64( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerEncoding( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerSession( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerTokenizer( + int ptr); +} diff --git a/mobile_app/rust/src/frb_generated.rs b/mobile_app/rust/src/frb_generated.rs index cc3a5a6..5be36dc 100644 --- a/mobile_app/rust/src/frb_generated.rs +++ b/mobile_app/rust/src/frb_generated.rs @@ -45,7 +45,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 575727880; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1510959301; // Section: executor @@ -53,6 +53,279 @@ flutter_rust_bridge::frb_generated_default_handler!(); // Section: wire_funcs +fn wire__crate__api__tantivy__add_document_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::TaskInfo { + debug_name: "add_document", + 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_doc = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::add_document(api_doc)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__add_document_no_commit_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::TaskInfo { + debug_name: "add_document_no_commit", + 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_doc = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::add_document_no_commit(api_doc)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__add_documents_batch_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::TaskInfo { + debug_name: "add_documents_batch", + 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_docs = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::add_documents_batch(api_docs)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__commit_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "commit", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + 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); + deserializer.end(); + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::commit()?; + Ok(output_ok) + })(), + ) + }, + ) +} +fn wire__crate__api__tantivy__delete_document_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::TaskInfo { + debug_name: "delete_document", + 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_id = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::delete_document(api_id)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__delete_document_no_commit_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::TaskInfo { + debug_name: "delete_document_no_commit", + 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_id = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::delete_document_no_commit(api_id)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__delete_documents_batch_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::TaskInfo { + debug_name: "delete_documents_batch", + 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_ids = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::delete_documents_batch(api_ids)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__api__tantivy__get_document_by_id_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "get_document_by_id", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + 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_id = ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::get_document_by_id(api_id)?; + Ok(output_ok) + })(), + ) + }, + ) +} fn wire__crate__api__acho__get_encoding_array_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -192,6 +465,38 @@ fn wire__crate__api__simple__init_app_impl( }, ) } +fn wire__crate__api__tantivy__init_tantivy_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "init_tantivy", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + 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_dir_path = ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::init_tantivy(api_dir_path)?; + Ok(output_ok) + })(), + ) + }, + ) +} fn wire__crate__api__acho__load_artifacts_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -303,6 +608,43 @@ fn wire__crate__api__acho__run_inference_impl( }, ) } +fn wire__crate__api__tantivy__search_documents_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::TaskInfo { + debug_name: "search_documents", + 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_query = ::sse_decode(&mut deserializer); + let api_top_k = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = + crate::api::tantivy::search_documents(api_query, api_top_k)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} fn wire__crate__api__acho__similarity_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -329,7 +671,7 @@ fn wire__crate__api__acho__similarity_impl( let api_texts = >::sse_decode(&mut deserializer); let api_model_path = ::sse_decode(&mut deserializer); let api_tokenizer_path = ::sse_decode(&mut deserializer); - let api_top_k = ::sse_decode(&mut deserializer); + let api_top_k = ::sse_decode(&mut deserializer); deserializer.end(); move |context| { transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( @@ -406,6 +748,41 @@ fn wire__crate__api__acho__tokenize_impl( }, ) } +fn wire__crate__api__tantivy__update_document_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::TaskInfo { + debug_name: "update_document", + 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_doc = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::api::tantivy::update_document(api_doc)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} // Section: related_funcs @@ -541,6 +918,18 @@ impl SseDecode for String { } } +impl SseDecode for crate::api::tantivy::Document { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_id = ::sse_decode(deserializer); + let mut var_text = ::sse_decode(deserializer); + return crate::api::tantivy::Document { + id: var_id, + text: var_text, + }; + } +} + impl SseDecode for crate::api::acho::EncodingType { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -591,6 +980,18 @@ impl SseDecode for Vec { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -615,6 +1016,20 @@ impl SseDecode for Vec { } } +impl SseDecode for Vec { + // 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_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode( + deserializer, + )); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -629,6 +1044,17 @@ impl SseDecode for Vec { } } +impl SseDecode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + if (::sse_decode(deserializer)) { + return Some(::sse_decode(deserializer)); + } else { + return None; + } + } +} + impl SseDecode for (Array2, Array2) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -647,6 +1073,18 @@ impl SseDecode for (Tokenizer, Session) { } } +impl SseDecode for crate::api::tantivy::SearchResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_score = ::sse_decode(deserializer); + let mut var_doc = ::sse_decode(deserializer); + return crate::api::tantivy::SearchResult { + score: var_score, + doc: var_doc, + }; + } +} + impl SseDecode for crate::api::acho::SimilarityScore { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -694,13 +1132,36 @@ fn pde_ffi_dispatcher_primary_impl( ) { // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { - 1 => wire__crate__api__acho__get_encoding_array_impl(port, ptr, rust_vec_len, data_len), - 2 => wire__crate__api__acho__get_top_k_impl(port, ptr, rust_vec_len, data_len), - 4 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), - 5 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), - 6 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), - 7 => wire__crate__api__acho__similarity_impl(port, ptr, rust_vec_len, data_len), - 8 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), + 1 => wire__crate__api__tantivy__add_document_impl(port, ptr, rust_vec_len, data_len), + 2 => wire__crate__api__tantivy__add_document_no_commit_impl( + port, + ptr, + rust_vec_len, + data_len, + ), + 3 => wire__crate__api__tantivy__add_documents_batch_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__api__tantivy__delete_document_impl(port, ptr, rust_vec_len, data_len), + 6 => wire__crate__api__tantivy__delete_document_no_commit_impl( + port, + ptr, + rust_vec_len, + data_len, + ), + 7 => wire__crate__api__tantivy__delete_documents_batch_impl( + port, + ptr, + rust_vec_len, + data_len, + ), + 9 => wire__crate__api__acho__get_encoding_array_impl(port, ptr, rust_vec_len, data_len), + 10 => wire__crate__api__acho__get_top_k_impl(port, ptr, rust_vec_len, data_len), + 12 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), + 14 => wire__crate__api__acho__load_artifacts_impl(port, ptr, rust_vec_len, data_len), + 15 => wire__crate__api__acho__run_inference_impl(port, ptr, rust_vec_len, data_len), + 16 => wire__crate__api__tantivy__search_documents_impl(port, ptr, rust_vec_len, data_len), + 17 => wire__crate__api__acho__similarity_impl(port, ptr, rust_vec_len, data_len), + 18 => wire__crate__api__acho__tokenize_impl(port, ptr, rust_vec_len, data_len), + 19 => wire__crate__api__tantivy__update_document_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -713,7 +1174,10 @@ 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 { - 3 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), + 4 => wire__crate__api__tantivy__commit_impl(ptr, rust_vec_len, data_len), + 8 => wire__crate__api__tantivy__get_document_by_id_impl(ptr, rust_vec_len, data_len), + 11 => wire__crate__api__simple__greet_impl(ptr, rust_vec_len, data_len), + 13 => wire__crate__api__tantivy__init_tantivy_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -795,6 +1259,24 @@ impl flutter_rust_bridge::IntoIntoDart> for Tokenizer { } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::tantivy::Document { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.id.into_into_dart().into_dart(), + self.text.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::api::tantivy::Document {} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::tantivy::Document +{ + fn into_into_dart(self) -> crate::api::tantivy::Document { + self + } +} // Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::api::acho::EncodingType { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { @@ -817,6 +1299,27 @@ impl flutter_rust_bridge::IntoIntoDart } } // Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::api::tantivy::SearchResult { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.score.into_into_dart().into_dart(), + self.doc.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::api::tantivy::SearchResult +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::api::tantivy::SearchResult +{ + fn into_into_dart(self) -> crate::api::tantivy::SearchResult { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::api::acho::SimilarityScore { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { [ @@ -940,6 +1443,14 @@ impl SseEncode for String { } } +impl SseEncode for crate::api::tantivy::Document { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.id, serializer); + ::sse_encode(self.text, serializer); + } +} + impl SseEncode for crate::api::acho::EncodingType { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -990,6 +1501,16 @@ impl SseEncode for Vec { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -1010,6 +1531,16 @@ impl SseEncode for Vec { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -1020,6 +1551,16 @@ impl SseEncode for Vec { } } +impl SseEncode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.is_some(), serializer); + if let Some(value) = self { + ::sse_encode(value, serializer); + } + } +} + impl SseEncode for (Array2, Array2) { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -1036,6 +1577,14 @@ impl SseEncode for (Tokenizer, Session) { } } +impl SseEncode for crate::api::tantivy::SearchResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.score, serializer); + ::sse_encode(self.doc, serializer); + } +} + impl SseEncode for crate::api::acho::SimilarityScore { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { From 7bbb224063f17e9de2c5d261c44aee2e94dc4482 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:26:55 +0000 Subject: [PATCH 20/32] Flutter Application code modifiications --- mobile_app/lib/home.dart | 18 ++++++++++-------- mobile_app/lib/main.dart | 10 +++++++--- mobile_app/lib/utils.dart | 13 +++++++------ 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index 6ec8efd..d2e2e6a 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -5,7 +5,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:gap/gap.dart'; import 'package:mobile_app/utils.dart'; -import 'package:flutter_tantivy/flutter_tantivy.dart'; +import 'package:mobile_app/src/rust/frb_generated.dart'; +import 'package:mobile_app/src/rust/api/acho.dart'; +import 'package:mobile_app/src/rust/api/tantivy.dart'; class HomeApp extends StatefulWidget { List files = []; @@ -83,8 +85,8 @@ class _HomeAppState extends State { onChanged: (text) {}, onSubmitted: (text) async { - // final List docs = await compute(findMatch, text); - final List ocs = await semanticSearch(text); + final List docs = await compute(findMatch, text); + // final List ocs = await compute(semanticSearch, text); //TODO: Handle enter key press, //TODO: similar to above depending on latency we may just use this @@ -93,9 +95,9 @@ class _HomeAppState extends State { setState(() { searchedItems = _searchedItems; }); - // setState(() { - // matchedDocuments = docs; - // }); + setState(() { + matchedDocuments = docs; + }); }, @@ -116,8 +118,8 @@ class _HomeAppState extends State { side: BorderSide(color: Colors.grey[300]!), ), onPressed: () async { - final List docs = - await compute(findMatch, searchedItems[index]); + final List docs = []; + // await compute(findMatch, searchedItems[index]); setState(() { matchedDocuments = docs; diff --git a/mobile_app/lib/main.dart b/mobile_app/lib/main.dart index 388ff4c..ed94b47 100644 --- a/mobile_app/lib/main.dart +++ b/mobile_app/lib/main.dart @@ -4,14 +4,17 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mobile_app/settings.dart'; import 'package:mobile_app/home.dart'; -import 'package:flutter_tantivy/flutter_tantivy.dart'; + +import 'package:mobile_app/src/rust/frb_generated.dart'; +import 'package:mobile_app/src/rust/api/acho.dart'; +import 'package:mobile_app/src/rust/api/tantivy.dart'; + import 'package:path_provider/path_provider.dart'; import 'package:mobile_app/storage.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:mobile_app/utils.dart'; Future main() async { - await RustLib.init(); WidgetsFlutterBinding .ensureInitialized(); // Ensure plugin services are initialized @@ -29,9 +32,10 @@ Future main() async { Log.logger.i("Permission for external storage: $status"); final directory = await getApplicationDocumentsDirectory(); + await RustLib.init(); final indexPath = '${directory.path}/tantivy_index'; initTantivy(dirPath: indexPath); - Log.logger.i("Index Path $indexPath"); + // Log.logger.i("Index Path $indexPath"); runApp(const MyApp()); } diff --git a/mobile_app/lib/utils.dart b/mobile_app/lib/utils.dart index 7d5e366..77c27f3 100644 --- a/mobile_app/lib/utils.dart +++ b/mobile_app/lib/utils.dart @@ -1,8 +1,9 @@ import 'dart:io'; import 'package:permission_handler/permission_handler.dart'; -import 'package:mobile_app/src/rust/api/acho.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:flutter_tantivy/flutter_tantivy.dart'; +import 'package:mobile_app/src/rust/frb_generated.dart'; +import 'package:mobile_app/src/rust/api/acho.dart'; +import 'package:mobile_app/src/rust/api/tantivy.dart'; import 'dart:convert'; import 'package:syncfusion_flutter_pdf/pdf.dart'; @@ -93,7 +94,7 @@ Future> findMatch(String query) async { await RustLib.init(); final results = await searchDocuments( query: query, - topK: BigInt.from(10), + topK: BigInt.from(5), ); // print(results); return results; @@ -101,13 +102,13 @@ Future> findMatch(String query) async { Future> semanticSearch(String query) async { - // await RustLib.init(); + await RustLib.init(); final score = await similarity( modelPath: "/storage/emulated/0/Download/model.onnx", tokenizerPath: "/storage/emulated/0/Download/tokenizer.json", query: [query], - texts: ["Today is a good day", "What is going on?"], - topK: 3 + texts: ["Today is a good day", "What is going on?", "Bawo ni?"], + topK: BigInt.from(3) ); print(score); return ["Semantic Search Button pressed"]; From 91f4a991c25be9ad91b2734896be6c1e8c796db2 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:27:29 +0000 Subject: [PATCH 21/32] squash! original rust code --- mobile_app/rust/Cargo.lock | 517 +++++++++++++++++++++++++++++++++++++ mobile_app/rust/Cargo.toml | 11 +- 2 files changed, 525 insertions(+), 3 deletions(-) diff --git a/mobile_app/rust/Cargo.lock b/mobile_app/rust/Cargo.lock index 4cc3ca3..e318d30 100644 --- a/mobile_app/rust/Cargo.lock +++ b/mobile_app/rust/Cargo.lock @@ -51,6 +51,12 @@ dependencies = [ "backtrace", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android_log-sys" version = "0.3.2" @@ -74,6 +80,26 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "arc-swap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atomic" version = "0.5.3" @@ -125,6 +151,15 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "bitpacking" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" +dependencies = [ + "crunchy", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -134,6 +169,31 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bon" +version = "3.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" +dependencies = [ + "bon-macros", + "rustversion", +] + +[[package]] +name = "bon-macros" +version = "3.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" +dependencies = [ + "darling", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "build-target" version = "0.4.0" @@ -180,9 +240,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] +[[package]] +name = "census" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" + [[package]] name = "cfg-if" version = "1.0.4" @@ -265,6 +333,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -290,6 +367,12 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-common" version = "0.1.7" @@ -387,6 +470,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + [[package]] name = "derive_builder" version = "0.20.2" @@ -460,6 +553,12 @@ dependencies = [ "syn", ] +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + [[package]] name = "either" version = "1.15.0" @@ -507,6 +606,12 @@ dependencies = [ "cc", ] +[[package]] +name = "fastdivide" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" + [[package]] name = "fastrand" version = "2.3.0" @@ -577,6 +682,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -601,6 +712,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs4" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" +dependencies = [ + "rustix", + "windows-sys 0.59.0", +] + [[package]] name = "futures" version = "0.3.31" @@ -735,6 +856,17 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashbrown" version = "0.16.1" @@ -778,6 +910,12 @@ version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0f0ae375a85536cac3a243e3a9cda80a47910348abdea7e2c22f8ec556d586d" +[[package]] +name = "htmlescape" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" + [[package]] name = "http" version = "1.4.0" @@ -794,6 +932,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hyperloglogplus" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3" +dependencies = [ + "serde", +] + [[package]] name = "icu_collections" version = "2.1.1" @@ -962,6 +1109,16 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + [[package]] name = "js-sys" version = "0.3.85" @@ -978,12 +1135,34 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "levenshtein_automata" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" + [[package]] name = "libc" version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +[[package]] +name = "libloading" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754ca22de805bb5744484a5b151a9e1a8e837d5dc232c2d7d8c2e3492edc8b60" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" version = "0.1.12" @@ -1021,6 +1200,21 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "lz4_flex" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" + [[package]] name = "lzma-rust2" version = "0.15.7" @@ -1063,12 +1257,30 @@ dependencies = [ "digest", ] +[[package]] +name = "measure_time" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e" +dependencies = [ + "log", +] + [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "memmap2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +dependencies = [ + "libc", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1107,6 +1319,12 @@ dependencies = [ "syn", ] +[[package]] +name = "murmurhash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" + [[package]] name = "native-tls" version = "0.2.14" @@ -1182,6 +1400,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" + [[package]] name = "num-integer" version = "0.1.46" @@ -1198,6 +1422,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1231,6 +1456,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "oneshot" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107" + [[package]] name = "onig" version = "6.5.1" @@ -1309,6 +1540,7 @@ version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5df903c0d2c07b56950f1058104ab0c8557159f2741782223704de9be73c3c" dependencies = [ + "libloading", "ndarray", "ort-sys", "smallvec", @@ -1338,6 +1570,15 @@ dependencies = [ "log", ] +[[package]] +name = "ownedbytes" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "parking_lot_core" version = "0.9.12" @@ -1414,6 +1655,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1423,6 +1670,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -1506,6 +1763,16 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "rawpointer" version = "0.2.1" @@ -1606,6 +1873,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust-stemmers" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" +dependencies = [ + "serde", + "serde_derive", +] + [[package]] name = "rust_lib_mobile_app" version = "0.1.0" @@ -1614,7 +1891,9 @@ dependencies = [ "flutter_rust_bridge", "ndarray", "ndarray-stats", + "once_cell", "ort", + "tantivy", "tokenizers", ] @@ -1624,6 +1903,12 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustix" version = "1.1.3" @@ -1777,6 +2062,15 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +[[package]] +name = "sketches-ddsketch" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" +dependencies = [ + "serde", +] + [[package]] name = "slab" version = "0.4.11" @@ -1858,6 +2152,152 @@ dependencies = [ "syn", ] +[[package]] +name = "tantivy" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545" +dependencies = [ + "aho-corasick", + "arc-swap", + "base64 0.22.1", + "bitpacking", + "bon", + "byteorder", + "census", + "crc32fast", + "crossbeam-channel", + "downcast-rs", + "fastdivide", + "fnv", + "fs4", + "htmlescape", + "hyperloglogplus", + "itertools 0.14.0", + "levenshtein_automata", + "log", + "lru", + "lz4_flex", + "measure_time", + "memmap2", + "once_cell", + "oneshot", + "rayon", + "regex", + "rust-stemmers", + "rustc-hash", + "serde", + "serde_json", + "sketches-ddsketch", + "smallvec", + "tantivy-bitpacker", + "tantivy-columnar", + "tantivy-common", + "tantivy-fst", + "tantivy-query-grammar", + "tantivy-stacker", + "tantivy-tokenizer-api", + "tempfile", + "thiserror", + "time", + "uuid", + "winapi", +] + +[[package]] +name = "tantivy-bitpacker" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b04eed5108d8283607da6710fe17a7663523440eaf7ea5a1a440d19a1448b6" +dependencies = [ + "bitpacking", +] + +[[package]] +name = "tantivy-columnar" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b628488ae936c83e92b5c4056833054ca56f76c0e616aee8339e24ac89119cd" +dependencies = [ + "downcast-rs", + "fastdivide", + "itertools 0.14.0", + "serde", + "tantivy-bitpacker", + "tantivy-common", + "tantivy-sstable", + "tantivy-stacker", +] + +[[package]] +name = "tantivy-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f880aa7cab0c063a47b62596d10991cdd0b6e0e0575d9c5eeb298b307a25de55" +dependencies = [ + "async-trait", + "byteorder", + "ownedbytes", + "serde", + "time", +] + +[[package]] +name = "tantivy-fst" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" +dependencies = [ + "byteorder", + "regex-syntax", + "utf8-ranges", +] + +[[package]] +name = "tantivy-query-grammar" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "768fccdc84d60d86235d42d7e4c33acf43c418258ff5952abf07bd7837fcd26b" +dependencies = [ + "nom", + "serde", + "serde_json", +] + +[[package]] +name = "tantivy-sstable" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8292095d1a8a2c2b36380ec455f910ab52dde516af36321af332c93f20ab7d5" +dependencies = [ + "futures-util", + "itertools 0.14.0", + "tantivy-bitpacker", + "tantivy-common", + "tantivy-fst", + "zstd", +] + +[[package]] +name = "tantivy-stacker" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d38a379411169f0b3002c9cba61cdfe315f757e9d4f239c00c282497a0749d" +dependencies = [ + "murmurhash32", + "rand_distr", + "tantivy-common", +] + +[[package]] +name = "tantivy-tokenizer-api" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23024f6aeb25ceb1a0e27740c84bdb0fae52626737b7e9a9de6ad5aa25c7b038" +dependencies = [ + "serde", +] + [[package]] name = "tempfile" version = "3.24.0" @@ -1900,6 +2340,37 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "time" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc610bac2dcee56805c99642447d4c5dbde4d01f752ffea0199aee1f601dc4" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.2" @@ -2091,12 +2562,30 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8-ranges" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" + [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "uuid" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde_core", + "wasm-bindgen", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -2543,3 +3032,31 @@ name = "zmij" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/mobile_app/rust/Cargo.toml b/mobile_app/rust/Cargo.toml index 7829fd8..46d88db 100644 --- a/mobile_app/rust/Cargo.toml +++ b/mobile_app/rust/Cargo.toml @@ -12,11 +12,16 @@ ndarray = "0.17.2" tokenizers = { version = "0.22.2", default-features = false, features = ["esaxx_fast", "indicatif", "onig", "progressbar", "hf-hub", "http"] } anyhow = "1.0.100" ndarray-stats = "0.7.0" -ort = { version = "2.0.0-rc.11" } +ort = { version = "2.0.0-rc.11", features = ["load-dynamic"]} +tantivy = "0.25.0" +once_cell = "1.21.3" [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(frb_expand)'] } [profile.release] -strip = false -opt-level = 'z' \ No newline at end of file +lto = true +# This helps prevent symbol clashes +panic = "abort" + + From 099a64159759e77883130b236cccd7b89dedec52 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:35:19 +0000 Subject: [PATCH 22/32] corresponding dependency configuration, pin ndk to 27 --- mobile_app/android/app/build.gradle | 13 ++++++++++++- mobile_app/linux/flutter/generated_plugins.cmake | 1 - mobile_app/rust/.cargo/config.toml | 6 ++++++ mobile_app/rust/build.rs | 7 +++++++ .../rust_builder/cargokit/gradle/plugin.gradle | 2 +- mobile_app/windows/flutter/generated_plugins.cmake | 1 - 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/mobile_app/android/app/build.gradle b/mobile_app/android/app/build.gradle index 0061428..ad0fad7 100644 --- a/mobile_app/android/app/build.gradle +++ b/mobile_app/android/app/build.gradle @@ -26,12 +26,18 @@ if (flutterVersionName == null) { android { namespace = "com.example.mobile_app" compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + ndkVersion = "27.0.12077973" compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } + dependencies { + // ... other dependencies + + // This will auto-download and bundle libonnxruntime.so + implementation "com.microsoft.onnxruntime:onnxruntime-android:1.17.0" + } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). @@ -55,6 +61,11 @@ android { signingConfig = signingConfigs.debug } } + packaging { + resources { + pickFirst '**/libc++_shared.so' + } + } } flutter { diff --git a/mobile_app/linux/flutter/generated_plugins.cmake b/mobile_app/linux/flutter/generated_plugins.cmake index f585e33..a6ac924 100644 --- a/mobile_app/linux/flutter/generated_plugins.cmake +++ b/mobile_app/linux/flutter/generated_plugins.cmake @@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST - flutter_tantivy rust_lib_mobile_app ) diff --git a/mobile_app/rust/.cargo/config.toml b/mobile_app/rust/.cargo/config.toml index e69de29..4e02c5d 100644 --- a/mobile_app/rust/.cargo/config.toml +++ b/mobile_app/rust/.cargo/config.toml @@ -0,0 +1,6 @@ +[target.aarch64-linux-android] +linker = "aarch64-linux-android24-clang" +rustflags = [ + "-C", "link-arg=-Wl,-soname,librust_lib_mobile_app.so", + "-C", "link-arg=-lc++_shared" +] diff --git a/mobile_app/rust/build.rs b/mobile_app/rust/build.rs index e69de29..245c4e9 100644 --- a/mobile_app/rust/build.rs +++ b/mobile_app/rust/build.rs @@ -0,0 +1,7 @@ +fn main() { + #[cfg(target_os = "android")] + { + // This tells the linker that we will provide libc++_shared.so at runtime + println!("cargo:rustc-link-lib=c++_shared"); + } +} \ No newline at end of file diff --git a/mobile_app/rust_builder/cargokit/gradle/plugin.gradle b/mobile_app/rust_builder/cargokit/gradle/plugin.gradle index 4af35ee..3ef23fd 100644 --- a/mobile_app/rust_builder/cargokit/gradle/plugin.gradle +++ b/mobile_app/rust_builder/cargokit/gradle/plugin.gradle @@ -92,7 +92,7 @@ class CargoKitPlugin implements Plugin { _findFlutterPlugin(rootProject.childProjects) } - private Plugin _findFlutterPlugin(Map projects) { + private Plugin _findFlutterPlugin(Map projects) { for (project in projects) { for (plugin in project.value.getPlugins()) { if (plugin.class.name == "com.flutter.gradle.FlutterPlugin") { diff --git a/mobile_app/windows/flutter/generated_plugins.cmake b/mobile_app/windows/flutter/generated_plugins.cmake index 97aa218..24083dc 100644 --- a/mobile_app/windows/flutter/generated_plugins.cmake +++ b/mobile_app/windows/flutter/generated_plugins.cmake @@ -7,7 +7,6 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST - flutter_tantivy rust_lib_mobile_app ) From e7d068cd1abef66a9aa20a8b3bc4981a1387b5d3 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:39:00 +0000 Subject: [PATCH 23/32] unneeded --- .idea/caches/deviceStreaming.xml | 1313 ------------------ .idea/deviceManager.xml | 13 - .idea/markdown.xml | 8 - .idea/misc.xml | 5 - .idea/vcs.xml | 6 - .idea/workspace.xml | 118 -- mobile_app/integration_test/simple_test.dart | 13 - 7 files changed, 1476 deletions(-) delete mode 100644 .idea/caches/deviceStreaming.xml delete mode 100644 .idea/deviceManager.xml delete mode 100644 .idea/markdown.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml delete mode 100644 mobile_app/integration_test/simple_test.dart diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml deleted file mode 100644 index 33049c4..0000000 --- a/.idea/caches/deviceStreaming.xml +++ /dev/null @@ -1,1313 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml deleted file mode 100644 index 91f9558..0000000 --- a/.idea/deviceManager.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml deleted file mode 100644 index c61ea33..0000000 --- a/.idea/markdown.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 6e86672..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index f8ab653..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - { - "associatedIndex": 0 -} - - - - { - "keyToString": { - "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true", - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", - "RunOnceActivity.cidr.known.project.marker": "true", - "RunOnceActivity.git.unshallow": "true", - "RunOnceActivity.readMode.enableVisualFormatting": "true", - "cf.first.check.clang-format": "false", - "cidr.known.project.marker": "true", - "dart.analysis.tool.window.visible": "false", - "git-widget-placeholder": "start-flutter-2", - "kotlin-language-version-configured": "true", - "last_opened_file_path": "/Users/emmanuel/Code/pp/acho/mobile_app/lib", - "project.structure.last.edited": "Project", - "project.structure.proportion": "0.0", - "project.structure.side.proportion": "0.2", - "settings.editor.selected.configurable": "project.propDebugger", - "show.migrate.to.gradle.popup": "false" - }, - "keyToStringList": { - "com.intellij.ide.scratch.ScratchImplUtil$2/New Scratch File": [ - "Dart" - ] - } -} - - - - - - - - - - - - - - 1768432606666 - - - - - - - - - - - - file://$PROJECT_DIR$/mobile_app/lib/utils.dart - - - - - \ No newline at end of file diff --git a/mobile_app/integration_test/simple_test.dart b/mobile_app/integration_test/simple_test.dart deleted file mode 100644 index 600406d..0000000 --- a/mobile_app/integration_test/simple_test.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mobile_app/main.dart'; -import 'package:mobile_app/src/rust/frb_generated.dart'; -import 'package:integration_test/integration_test.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - setUpAll(() async => await RustLib.init()); - testWidgets('Can call rust function', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - expect(find.textContaining('Result: `Hello, Tom!`'), findsOneWidget); - }); -} From b6e9ec8e913c0e4e751fca383cc7965ec3ba842e Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:53:20 +0000 Subject: [PATCH 24/32] move all backend to inference --- {inference => backend}/Cargo.lock | 0 {inference => backend}/Cargo.toml | 0 {inference => backend}/src/keyword_search.rs | 0 {inference => backend}/src/lib.rs | 0 {inference => backend}/src/main.rs | 0 {inference => backend}/src/semantic_search.rs | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {inference => backend}/Cargo.lock (100%) rename {inference => backend}/Cargo.toml (100%) rename {inference => backend}/src/keyword_search.rs (100%) rename {inference => backend}/src/lib.rs (100%) rename {inference => backend}/src/main.rs (100%) rename {inference => backend}/src/semantic_search.rs (100%) diff --git a/inference/Cargo.lock b/backend/Cargo.lock similarity index 100% rename from inference/Cargo.lock rename to backend/Cargo.lock diff --git a/inference/Cargo.toml b/backend/Cargo.toml similarity index 100% rename from inference/Cargo.toml rename to backend/Cargo.toml diff --git a/inference/src/keyword_search.rs b/backend/src/keyword_search.rs similarity index 100% rename from inference/src/keyword_search.rs rename to backend/src/keyword_search.rs diff --git a/inference/src/lib.rs b/backend/src/lib.rs similarity index 100% rename from inference/src/lib.rs rename to backend/src/lib.rs diff --git a/inference/src/main.rs b/backend/src/main.rs similarity index 100% rename from inference/src/main.rs rename to backend/src/main.rs diff --git a/inference/src/semantic_search.rs b/backend/src/semantic_search.rs similarity index 100% rename from inference/src/semantic_search.rs rename to backend/src/semantic_search.rs From 819f6fe69d39bf6639dbf41ddbee13d035974eae Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 14:55:38 +0000 Subject: [PATCH 25/32] Rust format --- backend/src/main.rs | 11 ++++--- backend/src/semantic_search.rs | 60 +++++++++++++++++++--------------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 456a3cd..88ed471 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,16 +1,17 @@ use anyhow::Result; -use inference::semantic_search::{load_artifacts, Embeddings, run_inference, get_top_k}; +use inference::semantic_search::{Embeddings, get_top_k, load_artifacts, run_inference}; fn main() -> Result<()> { - let (tokenizer, mut model) = load_artifacts("../mobile_app/assets/model.onnx".to_string(), "../mobile_app/assets/tokenizer.json".to_string())?; + let (tokenizer, mut model) = load_artifacts( + "../mobile_app/assets/model.onnx".to_string(), + "../mobile_app/assets/tokenizer.json".to_string(), + )?; let texts = vec![ "What is your name".to_string(), "Ki lo ruko e?".to_string(), "Ki lo je losan?".to_string(), ]; - let query = vec![ - "Ki lo ruko e?".to_string(), - ]; + let query = vec!["Ki lo ruko e?".to_string()]; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; diff --git a/backend/src/semantic_search.rs b/backend/src/semantic_search.rs index cc7e821..fa78e3e 100644 --- a/backend/src/semantic_search.rs +++ b/backend/src/semantic_search.rs @@ -9,11 +9,9 @@ type InputIds = ndarray::Array2; pub type AttentionMask = ndarray::Array2; pub type Embeddings = ndarray::Array2; - - pub enum EncodingType { Ids, - AttentionMask + AttentionMask, } #[derive(Debug, Clone)] @@ -22,9 +20,8 @@ pub struct SimilarityScore { pub score: f32, } -pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Tokenizer, Session)> { - let mut tokenizer = Tokenizer::from_file(&tokenizer_path) - .expect("Failed to load tokenizer."); +pub fn load_artifacts(model_path: String, tokenizer_path: String) -> Result<(Tokenizer, Session)> { + let mut tokenizer = Tokenizer::from_file(&tokenizer_path).expect("Failed to load tokenizer."); let padding = Some(tokenizers::PaddingParams { strategy: tokenizers::PaddingStrategy::BatchLongest, direction: tokenizers::PaddingDirection::Right, @@ -38,11 +35,15 @@ pub fn load_artifacts(model_path: String, tokenizer_path:String) -> Result<(Toke let session = Session::builder()? .with_optimization_level(GraphOptimizationLevel::Level1)? .with_intra_threads(4)? - .commit_from_file(&model_path).expect("Failed to load the ONNX model."); + .commit_from_file(&model_path) + .expect("Failed to load the ONNX model."); Ok((tokenizer, session)) } -pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType) -> Result { +pub fn get_encoding_array( + encodings: &Vec, + encoding_type: EncodingType, +) -> Result { let extract: fn(&Encoding) -> &[u32] = match encoding_type { EncodingType::Ids => |e: &Encoding| e.get_ids(), EncodingType::AttentionMask => |e: &Encoding| e.get_attention_mask(), @@ -50,25 +51,29 @@ pub fn get_encoding_array(encodings: &Vec, encoding_type: EncodingType let nrows = encodings.len(); let ncols = extract(&encodings[0]).len(); - let vec_matrix: Vec = encodings.iter() + let vec_matrix: Vec = encodings + .iter() .flat_map(|e| extract(e).iter().map(|&x| x as i64).collect::>()) .collect(); - Ok( - ndarray::Array2::from_shape_vec((nrows, ncols), vec_matrix) - .expect("Failed to create Array2D from encodings.") - ) + Ok(ndarray::Array2::from_shape_vec((nrows, ncols), vec_matrix) + .expect("Failed to create Array2D from encodings.")) } pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { - let encodings = tokenizer.encode_batch(texts.to_vec(), true) + let encodings = tokenizer + .encode_batch(texts.to_vec(), true) .expect("Tokenization failed."); let input_ids = get_encoding_array(&encodings, EncodingType::Ids)?; - let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; + let attention_mask = get_encoding_array(&encodings, EncodingType::AttentionMask)?; Ok((input_ids, attention_mask)) } -pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: &Tokenizer) -> Result{ +pub fn run_inference<'a>( + text: &Vec, + model: &'a mut Session, + tokenizer: &Tokenizer, +) -> Result { let (tokens, attn_mask) = tokenize(text, tokenizer)?; let token_input_value = ort::value::Tensor::from_array(tokens)?; let attn_mask_input_value = ort::value::Tensor::from_array(attn_mask)?; @@ -76,18 +81,15 @@ pub fn run_inference<'a>(text: &Vec, model: &'a mut Session, tokenizer: ort::inputs!["input_ids" => token_input_value, "attention_mask" => attn_mask_input_value] ).expect("Embedding model inference failed."); - let dense_embeddings = (&dense["dense_embeddings"]).try_extract_array::()? + let dense_embeddings = (&dense["dense_embeddings"]) + .try_extract_array::()? .into_dimensionality::() .expect("Failed to convert embeddings to 2D array."); Ok(dense_embeddings.to_owned()) } pub fn get_top_k(scores: Vec, k: usize) -> Result> { - - let mut indexed_scores: Vec<(usize, f32)> = scores - .into_iter() - .enumerate() - .collect(); + let mut indexed_scores: Vec<(usize, f32)> = scores.into_iter().enumerate().collect(); indexed_scores.select_nth_unstable_by(k - 1, |a, b| { b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal) @@ -96,18 +98,24 @@ pub fn get_top_k(scores: Vec, k: usize) -> Result> { let mut top_k = indexed_scores.into_iter().take(k).collect::>(); top_k.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); - Ok(top_k.into_iter() + Ok(top_k + .into_iter() .map(|(index, score)| SimilarityScore { index, score }) .collect()) } -pub fn similarity(query: &Vec, texts: &Vec, model_path: String, tokenizer_path:String, top_k: usize) -> Result> { - +pub fn similarity( + query: &Vec, + texts: &Vec, + model_path: String, + tokenizer_path: String, + top_k: usize, +) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); - + println!("Similarity matrix:\n{:?}", similarity_matrix); let (_raw_score, _length) = similarity_matrix.into_raw_vec_and_offset(); From 30284f5ba549a4ddf1535f156ee1e639c75bca03 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 18:10:43 +0000 Subject: [PATCH 26/32] Additional functionality --- mobile_app/lib/file.dart | 2 +- mobile_app/lib/home.dart | 151 ++++++++++++++++++++++------------- mobile_app/lib/main.dart | 13 ++- mobile_app/lib/settings.dart | 8 +- mobile_app/lib/utils.dart | 52 +++++++++--- 5 files changed, 151 insertions(+), 75 deletions(-) diff --git a/mobile_app/lib/file.dart b/mobile_app/lib/file.dart index 1c65d22..b27e611 100644 --- a/mobile_app/lib/file.dart +++ b/mobile_app/lib/file.dart @@ -20,7 +20,7 @@ class FileApp extends StatelessWidget { children: [ const ListTile( leading: Text( - "files", + "Files", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), )), Column( diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index d2e2e6a..c67c38d 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -19,6 +19,7 @@ class HomeApp extends StatefulWidget { class _HomeAppState extends State { List matchedDocuments = []; + List semanticMatchedDocument = []; List searchedItems = []; @override @@ -86,20 +87,25 @@ class _HomeAppState extends State { onChanged: (text) {}, onSubmitted: (text) async { final List docs = await compute(findMatch, text); - // final List ocs = await compute(semanticSearch, text); + final List sdocs = await compute( + semanticSearch, + SemanticSearch(text, ['Ki lo shele', 'Whats happening', 'The way what ?'])); - //TODO: Handle enter key press, - //TODO: similar to above depending on latency we may just use this + print(sdocs); saveSearchHistory(text); + List _searchedItems = await getSearchHistory(); setState(() { searchedItems = _searchedItems; }); + setState(() { matchedDocuments = docs; }); - + setState(() { + semanticMatchedDocument = sdocs; + }); }, ), ), @@ -119,7 +125,7 @@ class _HomeAppState extends State { ), onPressed: () async { final List docs = []; - // await compute(findMatch, searchedItems[index]); + await compute(findMatch, searchedItems[index]); setState(() { matchedDocuments = docs; @@ -128,59 +134,90 @@ class _HomeAppState extends State { child: Text(searchedItems[index]), // Display results from search )); })), + const ListTile( + leading: Text( + "Keyword Match", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + )), matchedDocuments.length >= 1 - ? const ListTile( - leading: Text( - "Matching Documents", - style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - )) - : Expanded( - child: Column( - children: [ - const ListTile( - leading: Text( - "Files", - style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - )), - Column( - children: List.generate(widget.files.length, (int index) { - String fileName = widget.files[index].path.split("/").last; - String fileType = - widget.files[index].path.split("/").last.split(".").last; - - Map fileIcon = { - "pdf": Icon(Icons.picture_as_pdf) - }; - - return ListTile( - leading: fileIcon[fileType] ?? Icon(Icons.book), - trailing: Icon(Icons.chevron_right), - //TODO: style to make borders visible - onTap: () { - PdfScanner().openFile(widget.files[index]); - //TODO: Handle click, popular search bar with text controller - }, - title: Text(fileName), // Display results from search - ); - })), - ], - )), - Expanded( - child: ListView.builder( - itemCount: matchedDocuments.length, - itemBuilder: (context, index) { - final result = matchedDocuments[index]; - - return ListTile( - leading: const Icon(Icons.picture_as_pdf), - onTap: () { - _showDocumentDetails(result); - }, - trailing: const Icon(Icons.chevron_right), - title: Text(result.doc.text - .substring(0, 50)), // Display results from search - ); - })), + ? Expanded( + child: ListView.builder( + itemCount: matchedDocuments.length, + itemBuilder: (context, index) { + final result = matchedDocuments[index]; + + return ListTile( + leading: const Icon(Icons.picture_as_pdf), + onTap: () { + _showDocumentDetails(result); + }, + trailing: const Icon(Icons.chevron_right), + title: Text(result.doc.text + .substring(0, 50)), // Display results from search + ); + })) + : SizedBox.shrink(), + Gap(10), + const ListTile( + leading: Text( + "Semantic Match", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + )), + semanticMatchedDocument.length >= 1 + ? Expanded( + child: ListView.builder( + itemCount: semanticMatchedDocument.length, + itemBuilder: (context, index) { + final result = semanticMatchedDocument[index]; + return ListTile( + leading: const Icon(Icons.picture_as_pdf), + onTap: () { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text("Document Preview"), + content: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + "Matching Chunk:", + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.blue), + ), + const Gap(10), + Text( + result, // The full text chunk + style: const TextStyle( + fontSize: 15, height: 1.5), + ), + ], + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: const Text("Close"), + ), + ElevatedButton( + onPressed: () { + ///TODO: Integrate with PDF viewer to jump to specific page + Navigator.pop(context); + }, + child: const Text("Open Full PDF"), + ), + ], + ), + ); + }, + trailing: const Icon(Icons.chevron_right), + title: Text(result.length > 50 ? result.substring( + 0, 50): result), // Display results from search + ); + })) + : SizedBox.shrink(), ])); } } diff --git a/mobile_app/lib/main.dart b/mobile_app/lib/main.dart index ed94b47..e920017 100644 --- a/mobile_app/lib/main.dart +++ b/mobile_app/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mobile_app/settings.dart'; import 'package:mobile_app/home.dart'; +import 'package:mobile_app/file.dart'; import 'package:mobile_app/src/rust/frb_generated.dart'; import 'package:mobile_app/src/rust/api/acho.dart'; @@ -89,7 +90,11 @@ class MyAppState extends State { home: Scaffold( appBar: AppBar(title: const Text('Acho')), body: PageView( - children: [HomeApp(files: folders), SettingsApp()], + children: [ + HomeApp(files: folders), + FileApp(files: folders), + SettingsApp() + ], controller: pageController, onPageChanged: onPageChanged, ), @@ -103,6 +108,12 @@ class MyAppState extends State { icon: Icon(Icons.home_filled), activeIcon: HomeApp(files: []), ), + BottomNavigationBarItem( + backgroundColor: Colors.red, + label: 'Files', + icon: Icon(Icons.folder_outlined), + activeIcon: FileApp(files: []), + ), const BottomNavigationBarItem( label: 'Settings', icon: Icon(Icons.settings), diff --git a/mobile_app/lib/settings.dart b/mobile_app/lib/settings.dart index 2feab11..64eec95 100644 --- a/mobile_app/lib/settings.dart +++ b/mobile_app/lib/settings.dart @@ -16,17 +16,11 @@ class SettingsApp extends StatelessWidget { ), // onTap:, ), - ListTile( - leading: Icon(Icons.folder), - title: Text("Folder"), - trailing: Icon(Icons.chevron_right_sharp), - // onTap:, - ), ListTile( leading: Icon(Icons.change_circle_sharp), title: Text("Re-index PDFs"), trailing: Icon(Icons.chevron_right_sharp), - // onTap:, + // onTap: ), Divider(), ListTile( diff --git a/mobile_app/lib/utils.dart b/mobile_app/lib/utils.dart index 77c27f3..6494373 100644 --- a/mobile_app/lib/utils.dart +++ b/mobile_app/lib/utils.dart @@ -1,4 +1,6 @@ import 'dart:io'; +import 'dart:core'; +import 'dart:math' as math; import 'package:permission_handler/permission_handler.dart'; import 'package:path_provider/path_provider.dart'; import 'package:mobile_app/src/rust/frb_generated.dart'; @@ -96,22 +98,54 @@ Future> findMatch(String query) async { query: query, topK: BigInt.from(5), ); - // print(results); return results; } -Future> semanticSearch(String query) async { +Future> getDocumentText() async { + List texts = []; + List allPdfs = await PdfScanner().getAllPdfs(); + for (FileSystemEntity i in allPdfs) { + final PdfDocument document = + PdfDocument(inputBytes: File(i.path).readAsBytesSync()); + String fileName = i.path.split("/").last; + final PdfTextExtractor extractor = PdfTextExtractor(document); + + for (int j = 0; j < document.pages.count; j++) { + String pageText = extractor.extractText(startPageIndex: j); + texts.add(pageText); + }; +} + return texts; +} + +class SemanticSearch { + final String query; + final List texts; + + SemanticSearch(this.query, this.texts); +} + +Future> semanticSearch(SemanticSearch object) async { + List result = []; await RustLib.init(); + final score = await similarity( - modelPath: "/storage/emulated/0/Download/model.onnx", - tokenizerPath: "/storage/emulated/0/Download/tokenizer.json", - query: [query], - texts: ["Today is a good day", "What is going on?", "Bawo ni?"], - topK: BigInt.from(3) + modelPath: "/storage/emulated/0/Download/model.onnx", + tokenizerPath: "/storage/emulated/0/Download/tokenizer.json", + query: [object.query], + texts: object.texts, + topK: BigInt.from(math.min( + 5, + object.texts.length + )) ); - print(score); - return ["Semantic Search Button pressed"]; + for (var i in score) { + result.add( + object.texts[i.index.toInt()] + ); + } + return result; } Future saveSearchHistory(String text) async { From cb7fcfab98438e72891d68072784ce9f2f2faecd Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 18:24:57 +0000 Subject: [PATCH 27/32] resolve clippy warnings --- backend/src/semantic_search.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/src/semantic_search.rs b/backend/src/semantic_search.rs index fa78e3e..7712e0b 100644 --- a/backend/src/semantic_search.rs +++ b/backend/src/semantic_search.rs @@ -41,7 +41,7 @@ pub fn load_artifacts(model_path: String, tokenizer_path: String) -> Result<(Tok } pub fn get_encoding_array( - encodings: &Vec, + encodings: &[Encoding], encoding_type: EncodingType, ) -> Result { let extract: fn(&Encoding) -> &[u32] = match encoding_type { @@ -59,7 +59,7 @@ pub fn get_encoding_array( .expect("Failed to create Array2D from encodings.")) } -pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { +pub fn tokenize(texts: &[String], tokenizer: &Tokenizer) -> Result<(InputIds, AttentionMask)> { let encodings = tokenizer .encode_batch(texts.to_vec(), true) .expect("Tokenization failed."); @@ -69,9 +69,9 @@ pub fn tokenize(texts: &Vec, tokenizer: &Tokenizer) -> Result<(InputIds, Ok((input_ids, attention_mask)) } -pub fn run_inference<'a>( - text: &Vec, - model: &'a mut Session, +pub fn run_inference( + text: &[String], + model: &mut Session, tokenizer: &Tokenizer, ) -> Result { let (tokens, attn_mask) = tokenize(text, tokenizer)?; @@ -81,7 +81,7 @@ pub fn run_inference<'a>( ort::inputs!["input_ids" => token_input_value, "attention_mask" => attn_mask_input_value] ).expect("Embedding model inference failed."); - let dense_embeddings = (&dense["dense_embeddings"]) + let dense_embeddings = &dense["dense_embeddings"] .try_extract_array::()? .into_dimensionality::() .expect("Failed to convert embeddings to 2D array."); @@ -105,15 +105,15 @@ pub fn get_top_k(scores: Vec, k: usize) -> Result> { } pub fn similarity( - query: &Vec, - texts: &Vec, + query: &[String], + texts: &[String], model_path: String, tokenizer_path: String, top_k: usize, ) -> Result> { let (tokenizer, mut model) = load_artifacts(model_path, tokenizer_path)?; - let all_embeddings: Embeddings = run_inference(&texts, &mut model, &tokenizer)?; - let query_embeddings: Embeddings = run_inference(&query, &mut model, &tokenizer)?; + let all_embeddings: Embeddings = run_inference(texts, &mut model, &tokenizer)?; + let query_embeddings: Embeddings = run_inference(query, &mut model, &tokenizer)?; let similarity_matrix = query_embeddings.dot(&all_embeddings.t()); println!("Similarity matrix:\n{:?}", similarity_matrix); From 189e3662ef83af3667adb022b8127e59922946e3 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 18:32:06 +0000 Subject: [PATCH 28/32] add todo home document --- mobile_app/lib/home.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index c67c38d..64a0736 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -89,6 +89,7 @@ class _HomeAppState extends State { final List docs = await compute(findMatch, text); final List sdocs = await compute( semanticSearch, + ///TODO: Placeholder document SemanticSearch(text, ['Ki lo shele', 'Whats happening', 'The way what ?'])); print(sdocs); From 9d9474f42ed0c9402b5163e06c8cbc3e48f3089e Mon Sep 17 00:00:00 2001 From: ok3ks Date: Fri, 30 Jan 2026 20:08:10 +0000 Subject: [PATCH 29/32] Add keyword_search to lib.rs --- backend/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/lib.rs b/backend/src/lib.rs index b342620..eb4a882 100644 --- a/backend/src/lib.rs +++ b/backend/src/lib.rs @@ -1 +1,2 @@ pub mod semantic_search; +pub mod keyword_search; \ No newline at end of file From b30c709015f33fa2491b4937df08760fa23a9308 Mon Sep 17 00:00:00 2001 From: ok3ks Date: Fri, 30 Jan 2026 21:22:03 +0000 Subject: [PATCH 30/32] Add once_cell for tantivy --- backend/Cargo.lock | 1 + backend/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 89a1bf2..f00b5a8 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -628,6 +628,7 @@ dependencies = [ "anyhow", "ndarray", "ndarray-stats", + "once_cell", "ort", "tokenizers", ] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index e7f1549..d5e7fe2 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -9,6 +9,7 @@ tokenizers = { version = "0.22.2", default-features = false, features = ["esaxx_ ort = { version = "2.0.0-rc.11" } anyhow = "1.0.100" ndarray-stats = "0.7.0" +once_cell = "1.21.3" [target.'cfg(target_os = "android")'.dependencies] ort = { version = "2.0.0-rc.11", default-features = false, features = ["ndarray", "copy-dylibs", "std", "tls-native"] } From 11a7317862dd45a097eda2cc9166a14b9b880f5d Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 22:52:46 +0000 Subject: [PATCH 31/32] update Cargo.toml --- backend/Cargo.lock | 556 +++++++++++++++++++++++++++++++++- backend/Cargo.toml | 1 + backend/src/keyword_search.rs | 2 +- 3 files changed, 557 insertions(+), 2 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index f00b5a8..a388b32 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -31,12 +31,38 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "anyhow" version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "arc-swap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -67,6 +93,40 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "bitpacking" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" +dependencies = [ + "crunchy", +] + +[[package]] +name = "bon" +version = "3.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" +dependencies = [ + "bon-macros", + "rustversion", +] + +[[package]] +name = "bon-macros" +version = "3.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" +dependencies = [ + "darling", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "bumpalo" version = "3.19.1" @@ -101,9 +161,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] +[[package]] +name = "census" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" + [[package]] name = "cfg-if" version = "1.0.4" @@ -176,6 +244,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -201,6 +278,12 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "darling" version = "0.20.11" @@ -255,6 +338,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + [[package]] name = "derive_builder" version = "0.20.2" @@ -318,6 +411,12 @@ dependencies = [ "syn", ] +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + [[package]] name = "either" version = "1.15.0" @@ -355,6 +454,12 @@ dependencies = [ "cc", ] +[[package]] +name = "fastdivide" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" + [[package]] name = "fastrand" version = "2.3.0" @@ -383,6 +488,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -407,6 +518,53 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs4" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" +dependencies = [ + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -430,6 +588,17 @@ dependencies = [ "wasip2", ] +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashbrown" version = "0.16.1" @@ -461,6 +630,12 @@ version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0f0ae375a85536cac3a243e3a9cda80a47910348abdea7e2c22f8ec556d586d" +[[package]] +name = "htmlescape" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" + [[package]] name = "http" version = "1.4.0" @@ -477,6 +652,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hyperloglogplus" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3" +dependencies = [ + "serde", +] + [[package]] name = "icu_collections" version = "2.1.1" @@ -592,7 +776,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.1", ] [[package]] @@ -630,6 +814,7 @@ dependencies = [ "ndarray-stats", "once_cell", "ort", + "tantivy", "tokenizers", ] @@ -657,6 +842,16 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + [[package]] name = "js-sys" version = "0.3.85" @@ -667,12 +862,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "levenshtein_automata" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" + [[package]] name = "libc" version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" version = "0.1.12" @@ -701,6 +908,21 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "lz4_flex" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" + [[package]] name = "lzma-rust2" version = "0.15.7" @@ -733,12 +955,30 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "measure_time" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e" +dependencies = [ + "log", +] + [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "memmap2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +dependencies = [ + "libc", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -777,6 +1017,12 @@ dependencies = [ "syn", ] +[[package]] +name = "murmurhash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" + [[package]] name = "native-tls" version = "0.2.14" @@ -852,6 +1098,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" + [[package]] name = "num-integer" version = "0.1.46" @@ -868,6 +1120,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -882,6 +1135,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "oneshot" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107" + [[package]] name = "onig" version = "6.5.1" @@ -978,6 +1237,15 @@ dependencies = [ "ureq 3.1.4", ] +[[package]] +name = "ownedbytes" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "paste" version = "1.0.15" @@ -1005,6 +1273,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.32" @@ -1035,6 +1309,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1044,6 +1324,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -1127,6 +1417,16 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "rawpointer" version = "0.2.1" @@ -1218,6 +1518,22 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust-stemmers" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustix" version = "1.1.3" @@ -1365,6 +1681,21 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +[[package]] +name = "sketches-ddsketch" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" +dependencies = [ + "serde", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + [[package]] name = "smallvec" version = "1.15.1" @@ -1440,6 +1771,152 @@ dependencies = [ "syn", ] +[[package]] +name = "tantivy" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545" +dependencies = [ + "aho-corasick", + "arc-swap", + "base64 0.22.1", + "bitpacking", + "bon", + "byteorder", + "census", + "crc32fast", + "crossbeam-channel", + "downcast-rs", + "fastdivide", + "fnv", + "fs4", + "htmlescape", + "hyperloglogplus", + "itertools 0.14.0", + "levenshtein_automata", + "log", + "lru", + "lz4_flex", + "measure_time", + "memmap2", + "once_cell", + "oneshot", + "rayon", + "regex", + "rust-stemmers", + "rustc-hash", + "serde", + "serde_json", + "sketches-ddsketch", + "smallvec", + "tantivy-bitpacker", + "tantivy-columnar", + "tantivy-common", + "tantivy-fst", + "tantivy-query-grammar", + "tantivy-stacker", + "tantivy-tokenizer-api", + "tempfile", + "thiserror", + "time", + "uuid", + "winapi", +] + +[[package]] +name = "tantivy-bitpacker" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b04eed5108d8283607da6710fe17a7663523440eaf7ea5a1a440d19a1448b6" +dependencies = [ + "bitpacking", +] + +[[package]] +name = "tantivy-columnar" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b628488ae936c83e92b5c4056833054ca56f76c0e616aee8339e24ac89119cd" +dependencies = [ + "downcast-rs", + "fastdivide", + "itertools 0.14.0", + "serde", + "tantivy-bitpacker", + "tantivy-common", + "tantivy-sstable", + "tantivy-stacker", +] + +[[package]] +name = "tantivy-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f880aa7cab0c063a47b62596d10991cdd0b6e0e0575d9c5eeb298b307a25de55" +dependencies = [ + "async-trait", + "byteorder", + "ownedbytes", + "serde", + "time", +] + +[[package]] +name = "tantivy-fst" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" +dependencies = [ + "byteorder", + "regex-syntax", + "utf8-ranges", +] + +[[package]] +name = "tantivy-query-grammar" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "768fccdc84d60d86235d42d7e4c33acf43c418258ff5952abf07bd7837fcd26b" +dependencies = [ + "nom", + "serde", + "serde_json", +] + +[[package]] +name = "tantivy-sstable" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8292095d1a8a2c2b36380ec455f910ab52dde516af36321af332c93f20ab7d5" +dependencies = [ + "futures-util", + "itertools 0.14.0", + "tantivy-bitpacker", + "tantivy-common", + "tantivy-fst", + "zstd", +] + +[[package]] +name = "tantivy-stacker" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d38a379411169f0b3002c9cba61cdfe315f757e9d4f239c00c282497a0749d" +dependencies = [ + "murmurhash32", + "rand_distr", + "tantivy-common", +] + +[[package]] +name = "tantivy-tokenizer-api" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23024f6aeb25ceb1a0e27740c84bdb0fae52626737b7e9a9de6ad5aa25c7b038" +dependencies = [ + "serde", +] + [[package]] name = "tempfile" version = "3.24.0" @@ -1473,6 +1950,37 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc610bac2dcee56805c99642447d4c5dbde4d01f752ffea0199aee1f601dc4" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.2" @@ -1649,12 +2157,30 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8-ranges" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" + [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "uuid" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde_core", + "wasm-bindgen", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -2077,3 +2603,31 @@ name = "zmij" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index d5e7fe2..147f474 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -10,6 +10,7 @@ ort = { version = "2.0.0-rc.11" } anyhow = "1.0.100" ndarray-stats = "0.7.0" once_cell = "1.21.3" +tantivy = "0.25.0" [target.'cfg(target_os = "android")'.dependencies] ort = { version = "2.0.0-rc.11", default-features = false, features = ["ndarray", "copy-dylibs", "std", "tls-native"] } diff --git a/backend/src/keyword_search.rs b/backend/src/keyword_search.rs index 3f01ae4..ba04856 100644 --- a/backend/src/keyword_search.rs +++ b/backend/src/keyword_search.rs @@ -1,4 +1,4 @@ -use anyhow::{Result}; +use anyhow::{anyhow, Result}; use once_cell::sync::Lazy; use std::path::PathBuf; use std::sync::{Arc, Mutex}; From 2ca2c8987243ab34ff2071d9445cdf579baefd91 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 30 Jan 2026 22:53:16 +0000 Subject: [PATCH 32/32] update flutter document input --- mobile_app/lib/home.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile_app/lib/home.dart b/mobile_app/lib/home.dart index 64a0736..99c21e4 100644 --- a/mobile_app/lib/home.dart +++ b/mobile_app/lib/home.dart @@ -87,12 +87,13 @@ class _HomeAppState extends State { onChanged: (text) {}, onSubmitted: (text) async { final List docs = await compute(findMatch, text); + final texts = await getDocumentText(); + final List sdocs = await compute( semanticSearch, ///TODO: Placeholder document - SemanticSearch(text, ['Ki lo shele', 'Whats happening', 'The way what ?'])); + SemanticSearch(text, texts)); - print(sdocs); saveSearchHistory(text); List _searchedItems = await getSearchHistory();