From dcb90f9e59555129b4da7976e7c54d3604d2233f Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Sat, 29 Jun 2024 15:29:24 +0530 Subject: [PATCH] [mob][photos] Only do tokenizer init in computer --- .../semantic_search/frameworks/onnx/onnx.dart | 8 +++++++- .../frameworks/onnx/onnx_text_encoder.dart | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx.dart b/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx.dart index 1f476ef2cb..09623a1457 100644 --- a/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx.dart +++ b/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx.dart @@ -55,7 +55,13 @@ class ONNX extends MLFramework { @override Future loadTextModel(String path) async { final startTime = DateTime.now(); - await _computer.compute(_clipText.initTokenizer); + final String vocabPath = await _clipText.getVocab(); + await _computer.compute( + _clipText.initTokenizer, + param: { + "vocabPath": vocabPath, + }, + ); _textEncoderAddress = await _computer.compute( _clipText.loadModel, param: { diff --git a/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx_text_encoder.dart b/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx_text_encoder.dart index 09d3a33e83..df90ef66b8 100644 --- a/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx_text_encoder.dart +++ b/mobile/lib/services/machine_learning/semantic_search/frameworks/onnx/onnx_text_encoder.dart @@ -13,10 +13,16 @@ class OnnxTextEncoder { final _logger = Logger("OnnxTextEncoder"); final OnnxTextTokenizer _tokenizer = OnnxTextTokenizer(); - // Do not run in an isolate since rootBundle can only be accessed in the main isolate - Future initTokenizer() async { + Future getVocab() async { final File vocabFile = await RemoteAssetsService.instance.getAsset(kVocabRemotePath); + return vocabFile.path; + } + + // Do not run in an isolate since rootBundle can only be accessed in the main isolate + Future initTokenizer(Map args) async { + final String path = args["vocabPath"]; + final File vocabFile = File(path); final String vocab = await vocabFile.readAsString(); await _tokenizer.init(vocab); }