react-native-executorch 0.3.3 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/README.md +30 -13
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt +1 -2
  4. package/android/src/main/java/com/swmansion/rnexecutorch/ImageSegmentation.kt +58 -0
  5. package/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt +13 -49
  6. package/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt +37 -0
  7. package/android/src/main/java/com/swmansion/rnexecutorch/StyleTransfer.kt +1 -1
  8. package/android/src/main/java/com/swmansion/rnexecutorch/TextEmbeddings.kt +51 -0
  9. package/android/src/main/java/com/swmansion/rnexecutorch/Tokenizer.kt +86 -0
  10. package/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt +3 -4
  11. package/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsModel.kt +48 -0
  12. package/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsUtils.kt +37 -0
  13. package/android/src/main/java/com/swmansion/rnexecutorch/models/classification/ClassificationModel.kt +1 -0
  14. package/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/Constants.kt +26 -0
  15. package/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/ImageSegmentationModel.kt +142 -0
  16. package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/utils/RecognizerUtils.kt +3 -0
  17. package/android/src/main/java/com/swmansion/rnexecutorch/models/{StyleTransferModel.kt → styleTransfer/StyleTransferModel.kt} +2 -1
  18. package/android/src/main/java/com/swmansion/rnexecutorch/utils/ArrayUtils.kt +0 -8
  19. package/android/src/main/java/com/swmansion/rnexecutorch/{models/classification/Utils.kt → utils/Numerical.kt} +1 -1
  20. package/ios/ExecutorchLib.xcframework/Info.plist +4 -4
  21. package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib +0 -0
  22. package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h +14 -0
  23. package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h +1 -23
  24. package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist +0 -0
  25. package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib +0 -0
  26. package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h +14 -0
  27. package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h +1 -23
  28. package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist +0 -0
  29. package/ios/RnExecutorch/Classification.mm +15 -18
  30. package/ios/RnExecutorch/ETModule.mm +6 -5
  31. package/ios/RnExecutorch/ImageSegmentation.h +5 -0
  32. package/ios/RnExecutorch/ImageSegmentation.mm +60 -0
  33. package/ios/RnExecutorch/LLM.mm +12 -53
  34. package/ios/RnExecutorch/OCR.mm +39 -43
  35. package/ios/RnExecutorch/ObjectDetection.mm +20 -20
  36. package/ios/RnExecutorch/SpeechToText.mm +6 -7
  37. package/ios/RnExecutorch/StyleTransfer.mm +16 -19
  38. package/ios/RnExecutorch/TextEmbeddings.h +5 -0
  39. package/ios/RnExecutorch/TextEmbeddings.mm +62 -0
  40. package/ios/RnExecutorch/Tokenizer.h +5 -0
  41. package/ios/RnExecutorch/Tokenizer.mm +83 -0
  42. package/ios/RnExecutorch/VerticalOCR.mm +36 -36
  43. package/ios/RnExecutorch/models/BaseModel.h +2 -5
  44. package/ios/RnExecutorch/models/BaseModel.mm +5 -15
  45. package/ios/RnExecutorch/models/classification/ClassificationModel.mm +2 -3
  46. package/ios/RnExecutorch/models/classification/Constants.mm +0 -1
  47. package/ios/RnExecutorch/models/image_segmentation/Constants.h +4 -0
  48. package/ios/RnExecutorch/models/image_segmentation/Constants.mm +8 -0
  49. package/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.h +10 -0
  50. package/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.mm +146 -0
  51. package/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm +1 -2
  52. package/ios/RnExecutorch/models/ocr/Detector.h +0 -2
  53. package/ios/RnExecutorch/models/ocr/Detector.mm +2 -1
  54. package/ios/RnExecutorch/models/ocr/RecognitionHandler.h +5 -4
  55. package/ios/RnExecutorch/models/ocr/RecognitionHandler.mm +9 -26
  56. package/ios/RnExecutorch/models/ocr/Recognizer.mm +1 -2
  57. package/ios/RnExecutorch/models/ocr/VerticalDetector.h +0 -2
  58. package/ios/RnExecutorch/models/ocr/VerticalDetector.mm +2 -1
  59. package/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm +0 -1
  60. package/ios/RnExecutorch/models/stt/Moonshine.mm +1 -6
  61. package/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm +7 -11
  62. package/ios/RnExecutorch/models/stt/Whisper.mm +0 -5
  63. package/ios/RnExecutorch/models/{StyleTransferModel.h → style_transfer/StyleTransferModel.h} +1 -1
  64. package/ios/RnExecutorch/models/{StyleTransferModel.mm → style_transfer/StyleTransferModel.mm} +2 -3
  65. package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.h +15 -0
  66. package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.mm +45 -0
  67. package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.h +8 -0
  68. package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.mm +49 -0
  69. package/ios/RnExecutorch/utils/Conversions.h +15 -0
  70. package/ios/RnExecutorch/utils/ImageProcessor.h +0 -1
  71. package/ios/RnExecutorch/{models/classification/Utils.h → utils/Numerical.h} +0 -2
  72. package/ios/RnExecutorch/{models/classification/Utils.mm → utils/Numerical.mm} +0 -2
  73. package/ios/RnExecutorch/utils/ObjectDetectionUtils.mm +0 -2
  74. package/ios/RnExecutorch/utils/SFFT.mm +1 -1
  75. package/ios/RnExecutorch/utils/ScalarType.h +0 -2
  76. package/lib/module/Error.js +16 -2
  77. package/lib/module/Error.js.map +1 -1
  78. package/lib/module/constants/{llamaDefaults.js → llmDefaults.js} +7 -3
  79. package/lib/module/constants/llmDefaults.js.map +1 -0
  80. package/lib/module/constants/modelUrls.js +88 -27
  81. package/lib/module/constants/modelUrls.js.map +1 -1
  82. package/lib/module/constants/ocr/models.js +290 -0
  83. package/lib/module/constants/ocr/models.js.map +1 -0
  84. package/lib/module/constants/ocr/symbols.js +137 -2
  85. package/lib/module/constants/ocr/symbols.js.map +1 -1
  86. package/lib/module/constants/sttDefaults.js +50 -25
  87. package/lib/module/constants/sttDefaults.js.map +1 -1
  88. package/lib/module/controllers/LLMController.js +205 -0
  89. package/lib/module/controllers/LLMController.js.map +1 -0
  90. package/lib/module/controllers/OCRController.js +5 -10
  91. package/lib/module/controllers/OCRController.js.map +1 -1
  92. package/lib/module/controllers/SpeechToTextController.js +225 -122
  93. package/lib/module/controllers/SpeechToTextController.js.map +1 -1
  94. package/lib/module/controllers/VerticalOCRController.js +6 -10
  95. package/lib/module/controllers/VerticalOCRController.js.map +1 -1
  96. package/lib/module/hooks/computer_vision/useClassification.js +8 -23
  97. package/lib/module/hooks/computer_vision/useClassification.js.map +1 -1
  98. package/lib/module/hooks/computer_vision/useImageSegmentation.js +13 -0
  99. package/lib/module/hooks/computer_vision/useImageSegmentation.js.map +1 -0
  100. package/lib/module/hooks/computer_vision/useOCR.js +11 -6
  101. package/lib/module/hooks/computer_vision/useOCR.js.map +1 -1
  102. package/lib/module/hooks/computer_vision/useObjectDetection.js +8 -23
  103. package/lib/module/hooks/computer_vision/useObjectDetection.js.map +1 -1
  104. package/lib/module/hooks/computer_vision/useStyleTransfer.js +8 -23
  105. package/lib/module/hooks/computer_vision/useStyleTransfer.js.map +1 -1
  106. package/lib/module/hooks/computer_vision/useVerticalOCR.js +10 -7
  107. package/lib/module/hooks/computer_vision/useVerticalOCR.js.map +1 -1
  108. package/lib/module/hooks/general/useExecutorchModule.js +8 -36
  109. package/lib/module/hooks/general/useExecutorchModule.js.map +1 -1
  110. package/lib/module/hooks/natural_language_processing/useLLM.js +54 -63
  111. package/lib/module/hooks/natural_language_processing/useLLM.js.map +1 -1
  112. package/lib/module/hooks/natural_language_processing/useSpeechToText.js +15 -11
  113. package/lib/module/hooks/natural_language_processing/useSpeechToText.js.map +1 -1
  114. package/lib/module/hooks/natural_language_processing/useTextEmbeddings.js +14 -0
  115. package/lib/module/hooks/natural_language_processing/useTextEmbeddings.js.map +1 -0
  116. package/lib/module/hooks/natural_language_processing/useTokenizer.js +54 -0
  117. package/lib/module/hooks/natural_language_processing/useTokenizer.js.map +1 -0
  118. package/lib/module/hooks/useModule.js +18 -62
  119. package/lib/module/hooks/useModule.js.map +1 -1
  120. package/lib/module/index.js +16 -2
  121. package/lib/module/index.js.map +1 -1
  122. package/lib/module/modules/BaseModule.js +9 -10
  123. package/lib/module/modules/BaseModule.js.map +1 -1
  124. package/lib/module/modules/computer_vision/ClassificationModule.js +8 -5
  125. package/lib/module/modules/computer_vision/ClassificationModule.js.map +1 -1
  126. package/lib/module/modules/computer_vision/ImageSegmentationModule.js +28 -0
  127. package/lib/module/modules/computer_vision/ImageSegmentationModule.js.map +1 -0
  128. package/lib/module/modules/computer_vision/ObjectDetectionModule.js +8 -5
  129. package/lib/module/modules/computer_vision/ObjectDetectionModule.js.map +1 -1
  130. package/lib/module/modules/computer_vision/StyleTransferModule.js +8 -5
  131. package/lib/module/modules/computer_vision/StyleTransferModule.js.map +1 -1
  132. package/lib/module/modules/general/ExecutorchModule.js +8 -5
  133. package/lib/module/modules/general/ExecutorchModule.js.map +1 -1
  134. package/lib/module/modules/natural_language_processing/LLMModule.js +46 -27
  135. package/lib/module/modules/natural_language_processing/LLMModule.js.map +1 -1
  136. package/lib/module/modules/natural_language_processing/SpeechToTextModule.js +8 -5
  137. package/lib/module/modules/natural_language_processing/SpeechToTextModule.js.map +1 -1
  138. package/lib/module/modules/natural_language_processing/TextEmbeddingsModule.js +14 -0
  139. package/lib/module/modules/natural_language_processing/TextEmbeddingsModule.js.map +1 -0
  140. package/lib/module/modules/natural_language_processing/TokenizerModule.js +26 -0
  141. package/lib/module/modules/natural_language_processing/TokenizerModule.js.map +1 -0
  142. package/lib/module/native/NativeClassification.js.map +1 -1
  143. package/lib/module/native/NativeImageSegmentation.js +5 -0
  144. package/lib/module/native/NativeImageSegmentation.js.map +1 -0
  145. package/lib/module/native/NativeLLM.js.map +1 -1
  146. package/lib/module/native/NativeTextEmbeddings.js +5 -0
  147. package/lib/module/native/NativeTextEmbeddings.js.map +1 -0
  148. package/lib/module/native/NativeTokenizer.js +5 -0
  149. package/lib/module/native/NativeTokenizer.js.map +1 -0
  150. package/lib/module/native/RnExecutorchModules.js +18 -113
  151. package/lib/module/native/RnExecutorchModules.js.map +1 -1
  152. package/lib/module/types/common.js.map +1 -1
  153. package/lib/module/types/imageSegmentation.js +29 -0
  154. package/lib/module/types/imageSegmentation.js.map +1 -0
  155. package/lib/module/types/llm.js +7 -0
  156. package/lib/module/types/llm.js.map +1 -0
  157. package/lib/module/types/{object_detection.js → objectDetection.js} +1 -1
  158. package/lib/module/types/objectDetection.js.map +1 -0
  159. package/lib/module/types/ocr.js +2 -0
  160. package/lib/module/types/stt.js +82 -0
  161. package/lib/module/types/stt.js.map +1 -0
  162. package/lib/module/utils/ResourceFetcher.js +156 -0
  163. package/lib/module/utils/ResourceFetcher.js.map +1 -0
  164. package/lib/module/utils/llm.js +25 -0
  165. package/lib/module/utils/llm.js.map +1 -0
  166. package/lib/module/utils/stt.js +22 -0
  167. package/lib/module/utils/stt.js.map +1 -0
  168. package/lib/typescript/Error.d.ts +4 -1
  169. package/lib/typescript/Error.d.ts.map +1 -1
  170. package/lib/typescript/constants/{llamaDefaults.d.ts → llmDefaults.d.ts} +5 -5
  171. package/lib/typescript/constants/llmDefaults.d.ts.map +1 -0
  172. package/lib/typescript/constants/modelUrls.d.ts +74 -28
  173. package/lib/typescript/constants/modelUrls.d.ts.map +1 -1
  174. package/lib/typescript/constants/ocr/models.d.ts +285 -0
  175. package/lib/typescript/constants/ocr/models.d.ts.map +1 -0
  176. package/lib/typescript/constants/ocr/symbols.d.ts +73 -1
  177. package/lib/typescript/constants/ocr/symbols.d.ts.map +1 -1
  178. package/lib/typescript/constants/sttDefaults.d.ts +8 -13
  179. package/lib/typescript/constants/sttDefaults.d.ts.map +1 -1
  180. package/lib/typescript/controllers/LLMController.d.ts +46 -0
  181. package/lib/typescript/controllers/LLMController.d.ts.map +1 -0
  182. package/lib/typescript/controllers/OCRController.d.ts.map +1 -1
  183. package/lib/typescript/controllers/SpeechToTextController.d.ts +30 -16
  184. package/lib/typescript/controllers/SpeechToTextController.d.ts.map +1 -1
  185. package/lib/typescript/controllers/VerticalOCRController.d.ts +1 -1
  186. package/lib/typescript/controllers/VerticalOCRController.d.ts.map +1 -1
  187. package/lib/typescript/hooks/computer_vision/useClassification.d.ts +5 -5
  188. package/lib/typescript/hooks/computer_vision/useClassification.d.ts.map +1 -1
  189. package/lib/typescript/hooks/computer_vision/useImageSegmentation.d.ts +37 -0
  190. package/lib/typescript/hooks/computer_vision/useImageSegmentation.d.ts.map +1 -0
  191. package/lib/typescript/hooks/computer_vision/useOCR.d.ts +2 -1
  192. package/lib/typescript/hooks/computer_vision/useOCR.d.ts.map +1 -1
  193. package/lib/typescript/hooks/computer_vision/useObjectDetection.d.ts +5 -4
  194. package/lib/typescript/hooks/computer_vision/useObjectDetection.d.ts.map +1 -1
  195. package/lib/typescript/hooks/computer_vision/useStyleTransfer.d.ts +4 -2
  196. package/lib/typescript/hooks/computer_vision/useStyleTransfer.d.ts.map +1 -1
  197. package/lib/typescript/hooks/computer_vision/useVerticalOCR.d.ts +2 -1
  198. package/lib/typescript/hooks/computer_vision/useVerticalOCR.d.ts.map +1 -1
  199. package/lib/typescript/hooks/general/useExecutorchModule.d.ts +5 -6
  200. package/lib/typescript/hooks/general/useExecutorchModule.d.ts.map +1 -1
  201. package/lib/typescript/hooks/natural_language_processing/useLLM.d.ts +6 -6
  202. package/lib/typescript/hooks/natural_language_processing/useLLM.d.ts.map +1 -1
  203. package/lib/typescript/hooks/natural_language_processing/useSpeechToText.d.ts +7 -3
  204. package/lib/typescript/hooks/natural_language_processing/useSpeechToText.d.ts.map +1 -1
  205. package/lib/typescript/hooks/natural_language_processing/useTextEmbeddings.d.ts +13 -0
  206. package/lib/typescript/hooks/natural_language_processing/useTextEmbeddings.d.ts.map +1 -0
  207. package/lib/typescript/hooks/natural_language_processing/useTokenizer.d.ts +16 -0
  208. package/lib/typescript/hooks/natural_language_processing/useTokenizer.d.ts.map +1 -0
  209. package/lib/typescript/hooks/useModule.d.ts +11 -10
  210. package/lib/typescript/hooks/useModule.d.ts.map +1 -1
  211. package/lib/typescript/index.d.ts +15 -2
  212. package/lib/typescript/index.d.ts.map +1 -1
  213. package/lib/typescript/modules/BaseModule.d.ts +4 -5
  214. package/lib/typescript/modules/BaseModule.d.ts.map +1 -1
  215. package/lib/typescript/modules/computer_vision/ClassificationModule.d.ts +7 -7
  216. package/lib/typescript/modules/computer_vision/ClassificationModule.d.ts.map +1 -1
  217. package/lib/typescript/modules/computer_vision/ImageSegmentationModule.d.ts +32 -0
  218. package/lib/typescript/modules/computer_vision/ImageSegmentationModule.d.ts.map +1 -0
  219. package/lib/typescript/modules/computer_vision/ObjectDetectionModule.d.ts +6 -5
  220. package/lib/typescript/modules/computer_vision/ObjectDetectionModule.d.ts.map +1 -1
  221. package/lib/typescript/modules/computer_vision/StyleTransferModule.d.ts +6 -5
  222. package/lib/typescript/modules/computer_vision/StyleTransferModule.d.ts.map +1 -1
  223. package/lib/typescript/modules/general/ExecutorchModule.d.ts +4 -3
  224. package/lib/typescript/modules/general/ExecutorchModule.d.ts.map +1 -1
  225. package/lib/typescript/modules/natural_language_processing/LLMModule.d.ts +19 -5
  226. package/lib/typescript/modules/natural_language_processing/LLMModule.d.ts.map +1 -1
  227. package/lib/typescript/modules/natural_language_processing/SpeechToTextModule.d.ts +7 -4
  228. package/lib/typescript/modules/natural_language_processing/SpeechToTextModule.d.ts.map +1 -1
  229. package/lib/typescript/modules/natural_language_processing/TextEmbeddingsModule.d.ts +8 -0
  230. package/lib/typescript/modules/natural_language_processing/TextEmbeddingsModule.d.ts.map +1 -0
  231. package/lib/typescript/modules/natural_language_processing/TokenizerModule.d.ts +12 -0
  232. package/lib/typescript/modules/natural_language_processing/TokenizerModule.d.ts.map +1 -0
  233. package/lib/typescript/native/NativeClassification.d.ts.map +1 -1
  234. package/lib/typescript/native/NativeImageSegmentation.d.ts +10 -0
  235. package/lib/typescript/native/NativeImageSegmentation.d.ts.map +1 -0
  236. package/lib/typescript/native/NativeLLM.d.ts +3 -4
  237. package/lib/typescript/native/NativeLLM.d.ts.map +1 -1
  238. package/lib/typescript/native/NativeObjectDetection.d.ts +1 -1
  239. package/lib/typescript/native/NativeObjectDetection.d.ts.map +1 -1
  240. package/lib/typescript/native/NativeSpeechToText.d.ts +2 -2
  241. package/lib/typescript/native/NativeSpeechToText.d.ts.map +1 -1
  242. package/lib/typescript/native/NativeTextEmbeddings.d.ts +8 -0
  243. package/lib/typescript/native/NativeTextEmbeddings.d.ts.map +1 -0
  244. package/lib/typescript/native/NativeTokenizer.d.ts +12 -0
  245. package/lib/typescript/native/NativeTokenizer.d.ts.map +1 -0
  246. package/lib/typescript/native/RnExecutorchModules.d.ts +18 -41
  247. package/lib/typescript/native/RnExecutorchModules.d.ts.map +1 -1
  248. package/lib/typescript/types/common.d.ts +1 -26
  249. package/lib/typescript/types/common.d.ts.map +1 -1
  250. package/lib/typescript/types/imageSegmentation.d.ts +25 -0
  251. package/lib/typescript/types/imageSegmentation.d.ts.map +1 -0
  252. package/lib/typescript/types/llm.d.ts +38 -0
  253. package/lib/typescript/types/llm.d.ts.map +1 -0
  254. package/lib/typescript/types/{object_detection.d.ts → objectDetection.d.ts} +1 -1
  255. package/lib/typescript/types/objectDetection.d.ts.map +1 -0
  256. package/lib/typescript/types/ocr.d.ts +2 -1
  257. package/lib/typescript/types/ocr.d.ts.map +1 -1
  258. package/lib/typescript/types/stt.d.ts +91 -0
  259. package/lib/typescript/types/stt.d.ts.map +1 -0
  260. package/lib/typescript/utils/ResourceFetcher.d.ts +17 -0
  261. package/lib/typescript/utils/ResourceFetcher.d.ts.map +1 -0
  262. package/lib/typescript/utils/llm.d.ts +3 -0
  263. package/lib/typescript/utils/llm.d.ts.map +1 -0
  264. package/lib/typescript/utils/stt.d.ts +2 -0
  265. package/lib/typescript/utils/stt.d.ts.map +1 -0
  266. package/package.json +13 -49
  267. package/react-native-executorch.podspec +1 -1
  268. package/src/Error.ts +16 -3
  269. package/src/constants/llmDefaults.ts +14 -0
  270. package/src/constants/modelUrls.ts +146 -39
  271. package/src/constants/ocr/models.ts +453 -0
  272. package/src/constants/ocr/symbols.ts +147 -3
  273. package/src/constants/sttDefaults.ts +55 -37
  274. package/src/controllers/LLMController.ts +286 -0
  275. package/src/controllers/OCRController.ts +14 -28
  276. package/src/controllers/SpeechToTextController.ts +318 -180
  277. package/src/controllers/VerticalOCRController.ts +17 -32
  278. package/src/hooks/computer_vision/useClassification.ts +11 -26
  279. package/src/hooks/computer_vision/useImageSegmentation.ts +18 -0
  280. package/src/hooks/computer_vision/useOCR.ts +17 -5
  281. package/src/hooks/computer_vision/useObjectDetection.ts +10 -24
  282. package/src/hooks/computer_vision/useStyleTransfer.ts +9 -25
  283. package/src/hooks/computer_vision/useVerticalOCR.ts +11 -4
  284. package/src/hooks/general/useExecutorchModule.ts +10 -50
  285. package/src/hooks/natural_language_processing/useLLM.ts +80 -97
  286. package/src/hooks/natural_language_processing/useSpeechToText.ts +39 -12
  287. package/src/hooks/natural_language_processing/useTextEmbeddings.ts +18 -0
  288. package/src/hooks/natural_language_processing/useTokenizer.ts +61 -0
  289. package/src/hooks/useModule.ts +32 -92
  290. package/src/index.tsx +16 -2
  291. package/src/modules/BaseModule.ts +16 -26
  292. package/src/modules/computer_vision/ClassificationModule.ts +13 -8
  293. package/src/modules/computer_vision/ImageSegmentationModule.ts +39 -0
  294. package/src/modules/computer_vision/ObjectDetectionModule.ts +13 -8
  295. package/src/modules/computer_vision/StyleTransferModule.ts +13 -8
  296. package/src/modules/general/ExecutorchModule.ts +11 -6
  297. package/src/modules/natural_language_processing/LLMModule.ts +64 -51
  298. package/src/modules/natural_language_processing/SpeechToTextModule.ts +25 -10
  299. package/src/modules/natural_language_processing/TextEmbeddingsModule.ts +18 -0
  300. package/src/modules/natural_language_processing/TokenizerModule.ts +34 -0
  301. package/src/native/NativeClassification.ts +0 -1
  302. package/src/native/NativeImageSegmentation.ts +14 -0
  303. package/src/native/NativeLLM.ts +3 -10
  304. package/src/native/NativeObjectDetection.ts +1 -1
  305. package/src/native/NativeSpeechToText.ts +2 -2
  306. package/src/native/NativeTextEmbeddings.ts +9 -0
  307. package/src/native/NativeTokenizer.ts +13 -0
  308. package/src/native/RnExecutorchModules.ts +54 -234
  309. package/src/types/common.ts +1 -44
  310. package/src/types/imageSegmentation.ts +25 -0
  311. package/src/types/llm.ts +57 -0
  312. package/src/types/ocr.ts +3 -1
  313. package/src/types/stt.ts +93 -0
  314. package/src/utils/ResourceFetcher.ts +196 -0
  315. package/src/utils/llm.ts +34 -0
  316. package/src/utils/stt.ts +28 -0
  317. package/android/src/main/java/com/swmansion/rnexecutorch/utils/llms/ConversationManager.kt +0 -68
  318. package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/_CodeSignature/CodeResources +0 -124
  319. package/ios/RnExecutorch/utils/llms/Constants.h +0 -6
  320. package/ios/RnExecutorch/utils/llms/Constants.mm +0 -23
  321. package/ios/RnExecutorch/utils/llms/ConversationManager.h +0 -26
  322. package/ios/RnExecutorch/utils/llms/ConversationManager.mm +0 -71
  323. package/lib/module/constants/llamaDefaults.js.map +0 -1
  324. package/lib/module/modules/computer_vision/BaseCVModule.js +0 -14
  325. package/lib/module/modules/computer_vision/BaseCVModule.js.map +0 -1
  326. package/lib/module/types/object_detection.js.map +0 -1
  327. package/lib/module/utils/fetchResource.js +0 -93
  328. package/lib/module/utils/fetchResource.js.map +0 -1
  329. package/lib/module/utils/listDownloadedResources.js +0 -13
  330. package/lib/module/utils/listDownloadedResources.js.map +0 -1
  331. package/lib/typescript/constants/llamaDefaults.d.ts.map +0 -1
  332. package/lib/typescript/modules/computer_vision/BaseCVModule.d.ts +0 -9
  333. package/lib/typescript/modules/computer_vision/BaseCVModule.d.ts.map +0 -1
  334. package/lib/typescript/types/object_detection.d.ts.map +0 -1
  335. package/lib/typescript/utils/fetchResource.d.ts +0 -3
  336. package/lib/typescript/utils/fetchResource.d.ts.map +0 -1
  337. package/lib/typescript/utils/listDownloadedResources.d.ts +0 -3
  338. package/lib/typescript/utils/listDownloadedResources.d.ts.map +0 -1
  339. package/src/constants/llamaDefaults.ts +0 -9
  340. package/src/modules/computer_vision/BaseCVModule.ts +0 -22
  341. package/src/utils/fetchResource.ts +0 -106
  342. package/src/utils/listDownloadedResources.ts +0 -12
  343. /package/src/types/{object_detection.ts → objectDetection.ts} +0 -0
@@ -1,41 +1,28 @@
1
1
  "use strict";
2
2
 
3
- import { _SpeechToTextModule } from '../native/RnExecutorchModules';
4
- import * as FileSystem from 'expo-file-system';
5
- import { fetchResource } from '../utils/fetchResource';
6
- import { HAMMING_DIST_THRESHOLD, SECOND, MODEL_CONFIGS, MODES } from '../constants/sttDefaults';
7
- const longCommonInfPref = (seq1, seq2) => {
8
- let maxInd = 0;
9
- let maxLength = 0;
10
- for (let i = 0; i < seq1.length; i++) {
11
- let j = 0;
12
- let hammingDist = 0;
13
- while (j < seq2.length && i + j < seq1.length && (seq1[i + j] === seq2[j] || hammingDist < HAMMING_DIST_THRESHOLD)) {
14
- if (seq1[i + j] !== seq2[j]) {
15
- hammingDist++;
16
- }
17
- j++;
18
- }
19
- if (j >= maxLength) {
20
- maxLength = j;
21
- maxInd = i;
22
- }
23
- }
24
- return maxInd;
25
- };
3
+ import { HAMMING_DIST_THRESHOLD, MODEL_CONFIGS, SECOND, MODES, NUM_TOKENS_TO_TRIM, STREAMING_ACTION } from '../constants/sttDefaults';
4
+ import { SpeechToTextNativeModule } from '../native/RnExecutorchModules';
5
+ import { TokenizerModule } from '../modules/natural_language_processing/TokenizerModule';
6
+ import { ResourceFetcher } from '../utils/ResourceFetcher';
7
+ import { longCommonInfPref } from '../utils/stt';
8
+ import { ETError, getError } from '../Error';
26
9
  export class SpeechToTextController {
27
- chunks = [];
10
+ speechToTextNativeModule = SpeechToTextNativeModule;
28
11
  sequence = [];
29
12
  isReady = false;
30
13
  isGenerating = false;
31
-
32
- // tokenizer tokens to string mapping used for decoding sequence
14
+ chunks = [];
15
+ seqs = [];
16
+ prevSeq = [];
17
+ waveform = [];
18
+ numOfChunks = 0;
19
+ streaming = false;
33
20
 
34
21
  // User callbacks
35
22
 
36
23
  constructor({
37
24
  transcribeCallback,
38
- modelDownloadProgessCallback,
25
+ modelDownloadProgressCallback,
39
26
  isReadyCallback,
40
27
  isGeneratingCallback,
41
28
  onErrorCallback,
@@ -43,8 +30,8 @@ export class SpeechToTextController {
43
30
  windowSize,
44
31
  streamingConfig
45
32
  }) {
46
- this.decodedTranscribeCallback = seq => transcribeCallback(this.decodeSeq(seq));
47
- this.modelDownloadProgessCallback = modelDownloadProgessCallback;
33
+ this.decodedTranscribeCallback = async seq => transcribeCallback(await this.tokenIdsToText(seq));
34
+ this.modelDownloadProgressCallback = modelDownloadProgressCallback;
48
35
  this.isReadyCallback = isReady => {
49
36
  this.isReady = isReady;
50
37
  isReadyCallback?.(isReady);
@@ -53,34 +40,40 @@ export class SpeechToTextController {
53
40
  this.isGenerating = isGenerating;
54
41
  isGeneratingCallback?.(isGenerating);
55
42
  };
56
- this.onErrorCallback = onErrorCallback;
57
- this.nativeModule = new _SpeechToTextModule();
43
+ this.onErrorCallback = error => {
44
+ if (onErrorCallback) {
45
+ onErrorCallback(error ? new Error(getError(error)) : undefined);
46
+ return;
47
+ } else {
48
+ throw new Error(getError(error));
49
+ }
50
+ };
58
51
  this.configureStreaming(overlapSeconds, windowSize, streamingConfig || 'balanced');
59
52
  }
60
- async fetchTokenizer(localUri) {
61
- let tokenzerUri = await fetchResource(localUri || this.config.tokenizer.source);
62
- return JSON.parse(await FileSystem.readAsStringAsync(tokenzerUri));
63
- }
64
53
  async loadModel(modelName, encoderSource, decoderSource, tokenizerSource) {
65
- this.onErrorCallback?.(undefined);
54
+ this.onErrorCallback(undefined);
66
55
  this.isReadyCallback(false);
67
56
  this.config = MODEL_CONFIGS[modelName];
68
- this.modelName = modelName;
69
57
  try {
70
- this.tokenMapping = await this.fetchTokenizer(tokenizerSource);
71
- encoderSource = await fetchResource(encoderSource || this.config.sources.encoder, progress => this.modelDownloadProgessCallback?.(progress / 2));
72
- decoderSource = await fetchResource(decoderSource || this.config.sources.decoder, progress => this.modelDownloadProgessCallback?.(0.5 + progress / 2));
58
+ await TokenizerModule.load(tokenizerSource || this.config.tokenizer.source);
59
+ [encoderSource, decoderSource] = await ResourceFetcher.fetchMultipleResources(this.modelDownloadProgressCallback, encoderSource || this.config.sources.encoder, decoderSource || this.config.sources.decoder);
73
60
  } catch (e) {
74
- this.onErrorCallback?.(e);
61
+ this.onErrorCallback(e);
75
62
  return;
76
63
  }
64
+ if (modelName === 'whisperMultilingual') {
65
+ // The underlying native class is instantiated based on the name of the model. There is no need to
66
+ // create a separate class for multilingual version of Whisper, since it is the same. We just need
67
+ // the distinction here, in TS, for start tokens and such. If we introduce
68
+ // more versions of Whisper, such as the small one, this should be refactored.
69
+ modelName = 'whisper';
70
+ }
77
71
  try {
78
- await this.nativeModule.loadModule(modelName, [encoderSource, decoderSource]);
79
- this.modelDownloadProgessCallback?.(1);
72
+ await this.speechToTextNativeModule.loadModule(modelName, [encoderSource, decoderSource]);
73
+ this.modelDownloadProgressCallback?.(1);
80
74
  this.isReadyCallback(true);
81
75
  } catch (e) {
82
- this.onErrorCallback?.(new Error(`Error when loading the SpeechToTextController! ${e}`));
83
- console.error('Error when loading the SpeechToTextController!', e);
76
+ this.onErrorCallback(e);
84
77
  }
85
78
  }
86
79
  configureStreaming(overlapSeconds, windowSize, streamingConfig) {
@@ -98,106 +91,216 @@ export class SpeechToTextController {
98
91
  this.windowSize = 30 * SECOND - 2 * this.overlapSeconds;
99
92
  }
100
93
  }
101
- chunkWaveform(waveform) {
102
- this.chunks = [];
103
- const numOfChunks = Math.ceil(waveform.length / this.windowSize);
104
- for (let i = 0; i < numOfChunks; i++) {
105
- let chunk = waveform.slice(Math.max(this.windowSize * i - this.overlapSeconds, 0), Math.min(this.windowSize * (i + 1) + this.overlapSeconds, waveform.length));
94
+ chunkWaveform() {
95
+ this.numOfChunks = Math.ceil(this.waveform.length / this.windowSize);
96
+ for (let i = 0; i < this.numOfChunks; i++) {
97
+ let chunk = [];
98
+ const left = Math.max(this.windowSize * i - this.overlapSeconds, 0);
99
+ const right = Math.min(this.windowSize * (i + 1) + this.overlapSeconds, this.waveform.length);
100
+ chunk = this.waveform.slice(left, right);
106
101
  this.chunks.push(chunk);
107
102
  }
108
103
  }
109
- async transcribe(waveform) {
110
- if (!this.isReady) {
111
- this.onErrorCallback?.(new Error('Model is not yet ready'));
112
- return '';
113
- }
114
- if (this.isGenerating) {
115
- this.onErrorCallback?.(new Error('Model is already transcribing'));
116
- return '';
117
- }
118
- this.onErrorCallback?.(undefined);
119
- this.isGeneratingCallback(true);
104
+ resetState() {
120
105
  this.sequence = [];
121
- if (!waveform) {
122
- this.isGeneratingCallback(false);
123
- this.onErrorCallback?.(new Error(`Nothing to transcribe, perhaps you forgot to call this.loadAudio().`));
106
+ this.seqs = [];
107
+ this.waveform = [];
108
+ this.prevSeq = [];
109
+ this.chunks = [];
110
+ this.decodedTranscribeCallback([]);
111
+ this.onErrorCallback(undefined);
112
+ }
113
+ expectedChunkLength() {
114
+ //only first chunk can be of shorter length, for first chunk there are no seqs decoded
115
+ return this.seqs.length ? this.windowSize + 2 * this.overlapSeconds : this.windowSize + this.overlapSeconds;
116
+ }
117
+ async getStartingTokenIds(audioLanguage) {
118
+ // We need different starting token ids based on the multilingualism of the model.
119
+ // The eng version only needs BOS token, while the multilingual one needs:
120
+ // [BOS, LANG, TRANSCRIBE]. Optionally we should also set notimestamps token, as timestamps
121
+ // is not yet supported.
122
+ if (!audioLanguage) {
123
+ return [this.config.tokenizer.bos];
124
124
  }
125
- this.chunkWaveform(waveform);
126
- let seqs = [];
127
- let prevseq = [];
128
- for (let chunkId = 0; chunkId < this.chunks.length; chunkId++) {
129
- let lastToken = this.config.tokenizer.sos;
130
- let prevSeqTokenIdx = 0;
131
- let finalSeq = [];
132
- let seq = [lastToken];
125
+ // FIXME: I should use .getTokenId for the BOS as well, should remove it from config
126
+ const langTokenId = await TokenizerModule.tokenToId(`<|${audioLanguage}|>`);
127
+ const transcribeTokenId = await TokenizerModule.tokenToId('<|transcribe|>');
128
+ const noTimestampsTokenId = await TokenizerModule.tokenToId('<|notimestamps|>');
129
+ const startingTokenIds = [this.config.tokenizer.bos, langTokenId, transcribeTokenId, noTimestampsTokenId];
130
+ return startingTokenIds;
131
+ }
132
+ async decodeChunk(chunk, audioLanguage) {
133
+ const seq = await this.getStartingTokenIds(audioLanguage);
134
+ let prevSeqTokenIdx = 0;
135
+ this.prevSeq = this.sequence.slice();
136
+ try {
137
+ await this.encode(chunk);
138
+ } catch (error) {
139
+ this.onErrorCallback(new Error(getError(error) + ' encoding error'));
140
+ return [];
141
+ }
142
+ let lastToken = seq.at(-1);
143
+ while (lastToken !== this.config.tokenizer.eos) {
133
144
  try {
134
- await this.nativeModule.encode(this.chunks.at(chunkId));
145
+ lastToken = await this.decode(seq);
135
146
  } catch (error) {
136
- this.onErrorCallback?.(`Encode ${error}`);
137
- return '';
147
+ this.onErrorCallback(new Error(getError(error) + ' decoding error'));
148
+ return [...seq, this.config.tokenizer.eos];
138
149
  }
139
- while (lastToken !== this.config.tokenizer.eos) {
140
- try {
141
- lastToken = await this.nativeModule.decode(seq);
142
- } catch (error) {
143
- this.onErrorCallback?.(`Decode ${error}`);
144
- return '';
145
- }
146
- seq = [...seq, lastToken];
147
- if (seqs.length > 0 && seq.length < seqs.at(-1).length && seq.length % 3 !== 0) {
148
- prevseq = [...prevseq, seqs.at(-1)[prevSeqTokenIdx++]];
149
- this.decodedTranscribeCallback(prevseq);
150
- }
150
+ seq.push(lastToken);
151
+ if (this.seqs.length > 0 && seq.length < this.seqs.at(-1).length && seq.length % 3 !== 0) {
152
+ this.prevSeq.push(this.seqs.at(-1)[prevSeqTokenIdx++]);
153
+ this.decodedTranscribeCallback(this.prevSeq);
151
154
  }
155
+ }
156
+ return seq;
157
+ }
158
+ async handleOverlaps(seqs) {
159
+ const maxInd = longCommonInfPref(seqs.at(-2), seqs.at(-1), HAMMING_DIST_THRESHOLD);
160
+ this.sequence = [...this.sequence, ...seqs.at(-2).slice(0, maxInd)];
161
+ this.decodedTranscribeCallback(this.sequence);
162
+ return this.sequence.slice();
163
+ }
164
+ trimLeft(numOfTokensToTrim) {
165
+ const idx = this.seqs.length - 1;
166
+ if (this.seqs[idx][0] === this.config.tokenizer.bos) {
167
+ this.seqs[idx] = this.seqs[idx].slice(numOfTokensToTrim);
168
+ }
169
+ }
170
+ trimRight(numOfTokensToTrim) {
171
+ const idx = this.seqs.length - 2;
172
+ if (this.seqs[idx].at(-1) === this.config.tokenizer.eos) {
173
+ this.seqs[idx] = this.seqs[idx].slice(0, -numOfTokensToTrim);
174
+ }
175
+ }
176
+
177
+ // since we are calling this every time (except first) after a new seq is pushed to this.seqs
178
+ // we can only trim left the last seq and trim right the second to last seq
179
+ async trimSequences(audioLanguage) {
180
+ const numSpecialTokens = (await this.getStartingTokenIds(audioLanguage)).length;
181
+ this.trimLeft(numSpecialTokens + NUM_TOKENS_TO_TRIM);
182
+ this.trimRight(numSpecialTokens + NUM_TOKENS_TO_TRIM);
183
+ }
184
+
185
+ // if last chunk is too short combine it with second to last to improve quality
186
+ validateAndFixLastChunk() {
187
+ const lastChunkLength = this.chunks.at(-1).length / SECOND;
188
+ const secondToLastChunkLength = this.chunks.at(-2).length / SECOND;
189
+ if (lastChunkLength < 5 && secondToLastChunkLength + lastChunkLength < 30) {
190
+ this.chunks[this.chunks.length - 2] = [...this.chunks.at(-2).slice(0, -this.overlapSeconds * 2), ...this.chunks.at(-1)];
191
+ this.chunks = this.chunks.slice(0, -1);
192
+ }
193
+ }
194
+ async tokenIdsToText(tokenIds) {
195
+ try {
196
+ return TokenizerModule.decode(tokenIds, true);
197
+ } catch (e) {
198
+ this.onErrorCallback(new Error(`An error has occurred when decoding the token ids: ${e}`));
199
+ return '';
200
+ }
201
+ }
202
+ async transcribe(waveform, audioLanguage) {
203
+ try {
204
+ if (!this.isReady) throw Error(getError(ETError.ModuleNotLoaded));
205
+ if (this.isGenerating || this.streaming) throw Error(getError(ETError.ModelGenerating));
206
+ if (!!audioLanguage !== this.config.isMultilingual) throw new Error(getError(ETError.MultilingualConfiguration));
207
+ } catch (e) {
208
+ this.onErrorCallback(e);
209
+ return '';
210
+ }
211
+
212
+ // Making sure that the error is not set when we get there
213
+ this.isGeneratingCallback(true);
214
+ this.resetState();
215
+ this.waveform = waveform;
216
+ this.chunkWaveform();
217
+ this.validateAndFixLastChunk();
218
+ for (let chunkId = 0; chunkId < this.chunks.length; chunkId++) {
219
+ const seq = await this.decodeChunk(this.chunks.at(chunkId));
220
+ // whole audio is inside one chunk, no processing required
152
221
  if (this.chunks.length === 1) {
153
- finalSeq = seq;
154
- this.sequence = finalSeq;
155
- this.decodedTranscribeCallback(finalSeq);
222
+ this.sequence = seq;
223
+ this.decodedTranscribeCallback(seq);
156
224
  break;
157
225
  }
158
- // remove sos/eos token and 3 additional ones
159
- if (seqs.length === 0) {
160
- seqs = [seq.slice(0, -4)];
161
- } else if (seqs.length === this.chunks.length - 1) {
162
- seqs = [...seqs, seq.slice(4)];
163
- } else {
164
- seqs = [...seqs, seq.slice(4, -4)];
165
- }
166
- if (seqs.length < 2) {
167
- continue;
168
- }
169
- const maxInd = longCommonInfPref(seqs.at(-2), seqs.at(-1));
170
- finalSeq = [...this.sequence, ...seqs.at(-2).slice(0, maxInd)];
171
- this.sequence = finalSeq;
172
- this.decodedTranscribeCallback(finalSeq);
173
- prevseq = finalSeq;
226
+ this.seqs.push(seq);
227
+ if (this.seqs.length < 2) continue;
228
+
229
+ // Remove starting tokenIds and some additional ones
230
+ await this.trimSequences(audioLanguage);
231
+ this.prevSeq = await this.handleOverlaps(this.seqs);
174
232
 
175
- //last sequence processed
176
- if (seqs.length === this.chunks.length) {
177
- finalSeq = [...this.sequence, ...seqs.at(-1)];
178
- this.sequence = finalSeq;
179
- this.decodedTranscribeCallback(finalSeq);
180
- prevseq = finalSeq;
233
+ // last sequence processed
234
+ // overlaps are already handled, so just append the last seq
235
+ if (this.seqs.length === this.chunks.length) {
236
+ this.sequence = [...this.sequence, ...this.seqs.at(-1)];
237
+ this.decodedTranscribeCallback(this.sequence);
238
+ this.prevSeq = this.sequence;
181
239
  }
182
240
  }
183
- const decodedSeq = this.decodeSeq(this.sequence);
241
+ const decodedText = await this.tokenIdsToText(this.sequence);
184
242
  this.isGeneratingCallback(false);
185
- return decodedSeq;
243
+ return decodedText;
186
244
  }
187
- decodeSeq(seq) {
188
- if (!this.modelName) {
189
- this.onErrorCallback?.(new Error('Model is not loaded, call `loadModel` first'));
245
+ async streamingTranscribe(streamAction, waveform, audioLanguage) {
246
+ try {
247
+ if (!this.isReady) throw Error(getError(ETError.ModuleNotLoaded));
248
+ if (!!audioLanguage !== this.config.isMultilingual) throw new Error(getError(ETError.MultilingualConfiguration));
249
+ if (streamAction === STREAMING_ACTION.START && !this.streaming && this.isGenerating) throw Error(getError(ETError.ModelGenerating));
250
+ if (streamAction === STREAMING_ACTION.START && this.streaming) throw Error(getError(ETError.ModelGenerating));
251
+ if (streamAction === STREAMING_ACTION.DATA && !this.streaming) throw Error(getError(ETError.StreamingNotStarted));
252
+ if (streamAction === STREAMING_ACTION.STOP && !this.streaming) throw Error(getError(ETError.StreamingNotStarted));
253
+ if (streamAction === STREAMING_ACTION.DATA && !waveform) throw new Error(getError(ETError.MissingDataChunk));
254
+ } catch (e) {
255
+ this.onErrorCallback(e);
190
256
  return '';
191
257
  }
192
- this.onErrorCallback?.(undefined);
193
- if (!seq) seq = this.sequence;
194
- return seq.filter(token => token !== this.config.tokenizer.eos && token !== this.config.tokenizer.sos).map(token => this.tokenMapping[token]).join('').replaceAll(this.config.tokenizer.specialChar, ' ');
258
+ if (streamAction === STREAMING_ACTION.START) {
259
+ this.resetState();
260
+ this.streaming = true;
261
+ this.isGeneratingCallback(true);
262
+ }
263
+ this.waveform = [...this.waveform, ...(waveform || [])];
264
+
265
+ // while buffer has at least required size get chunk and decode
266
+ while (this.waveform.length >= this.expectedChunkLength()) {
267
+ const chunk = this.waveform.slice(0, this.windowSize + this.overlapSeconds * (1 + Number(this.seqs.length > 0)));
268
+ this.chunks = [chunk]; //save last chunk for STREAMING_ACTION.STOP
269
+ this.waveform = this.waveform.slice(this.windowSize - this.overlapSeconds * Number(this.seqs.length === 0));
270
+ const seq = await this.decodeChunk(chunk, audioLanguage);
271
+ this.seqs.push(seq);
272
+ if (this.seqs.length < 2) continue;
273
+ await this.trimSequences(audioLanguage);
274
+ await this.handleOverlaps(this.seqs);
275
+ }
276
+
277
+ // got final package, process all remaining waveform data
278
+ // since we run the loop above the waveform has at most one chunk in it
279
+ if (streamAction === STREAMING_ACTION.STOP) {
280
+ // pad remaining waveform data with previous chunk to this.windowSize + 2 * this.overlapSeconds
281
+ const chunk = this.chunks.length ? [...this.chunks[0].slice(0, this.windowSize), ...this.waveform].slice(-this.windowSize - 2 * this.overlapSeconds) : this.waveform;
282
+ this.waveform = [];
283
+ const seq = await this.decodeChunk(chunk, audioLanguage);
284
+ this.seqs.push(seq);
285
+ if (this.seqs.length === 1) {
286
+ this.sequence = this.seqs[0];
287
+ } else {
288
+ await this.trimSequences(audioLanguage);
289
+ await this.handleOverlaps(this.seqs);
290
+ this.sequence = [...this.sequence, ...this.seqs.at(-1)];
291
+ }
292
+ this.decodedTranscribeCallback(this.sequence);
293
+ this.isGeneratingCallback(false);
294
+ this.streaming = false;
295
+ }
296
+ const decodedText = await this.tokenIdsToText(this.sequence);
297
+ return decodedText;
195
298
  }
196
299
  async encode(waveform) {
197
- return await this.nativeModule.encode(waveform);
300
+ return await this.speechToTextNativeModule.encode(waveform);
198
301
  }
199
302
  async decode(seq, encodings) {
200
- return await this.nativeModule.decode(seq, encodings);
303
+ return await this.speechToTextNativeModule.decode(seq, encodings || []);
201
304
  }
202
305
  }
203
306
  //# sourceMappingURL=SpeechToTextController.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_SpeechToTextModule","FileSystem","fetchResource","HAMMING_DIST_THRESHOLD","SECOND","MODEL_CONFIGS","MODES","longCommonInfPref","seq1","seq2","maxInd","maxLength","i","length","j","hammingDist","SpeechToTextController","chunks","sequence","isReady","isGenerating","constructor","transcribeCallback","modelDownloadProgessCallback","isReadyCallback","isGeneratingCallback","onErrorCallback","overlapSeconds","windowSize","streamingConfig","decodedTranscribeCallback","seq","decodeSeq","nativeModule","configureStreaming","fetchTokenizer","localUri","tokenzerUri","config","tokenizer","source","JSON","parse","readAsStringAsync","loadModel","modelName","encoderSource","decoderSource","tokenizerSource","undefined","tokenMapping","sources","encoder","progress","decoder","e","loadModule","Error","console","error","warn","chunkWaveform","waveform","numOfChunks","Math","ceil","chunk","slice","max","min","push","transcribe","seqs","prevseq","chunkId","lastToken","sos","prevSeqTokenIdx","finalSeq","encode","at","eos","decode","decodedSeq","filter","token","map","join","replaceAll","specialChar","encodings"],"sourceRoot":"../../../src","sources":["controllers/SpeechToTextController.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["HAMMING_DIST_THRESHOLD","MODEL_CONFIGS","SECOND","MODES","NUM_TOKENS_TO_TRIM","STREAMING_ACTION","SpeechToTextNativeModule","TokenizerModule","ResourceFetcher","longCommonInfPref","ETError","getError","SpeechToTextController","speechToTextNativeModule","sequence","isReady","isGenerating","chunks","seqs","prevSeq","waveform","numOfChunks","streaming","constructor","transcribeCallback","modelDownloadProgressCallback","isReadyCallback","isGeneratingCallback","onErrorCallback","overlapSeconds","windowSize","streamingConfig","decodedTranscribeCallback","seq","tokenIdsToText","error","Error","undefined","configureStreaming","loadModel","modelName","encoderSource","decoderSource","tokenizerSource","config","load","tokenizer","source","fetchMultipleResources","sources","encoder","decoder","e","loadModule","console","warn","chunkWaveform","Math","ceil","length","i","chunk","left","max","right","min","slice","push","resetState","expectedChunkLength","getStartingTokenIds","audioLanguage","bos","langTokenId","tokenToId","transcribeTokenId","noTimestampsTokenId","startingTokenIds","decodeChunk","prevSeqTokenIdx","encode","lastToken","at","eos","decode","handleOverlaps","maxInd","trimLeft","numOfTokensToTrim","idx","trimRight","trimSequences","numSpecialTokens","validateAndFixLastChunk","lastChunkLength","secondToLastChunkLength","tokenIds","transcribe","ModuleNotLoaded","ModelGenerating","isMultilingual","MultilingualConfiguration","chunkId","decodedText","streamingTranscribe","streamAction","START","DATA","StreamingNotStarted","STOP","MissingDataChunk","Number","encodings"],"sourceRoot":"../../../src","sources":["controllers/SpeechToTextController.ts"],"mappings":"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","ignoreList":[]}
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { symbols } from '../constants/ocr/symbols';
4
4
  import { ETError, getError } from '../Error';
5
- import { _VerticalOCRModule } from '../native/RnExecutorchModules';
6
- import { fetchResource, calculateDownloadProgres } from '../utils/fetchResource';
5
+ import { VerticalOCRNativeModule } from '../native/RnExecutorchModules';
6
+ import { ResourceFetcher } from '../utils/ResourceFetcher';
7
7
  export class VerticalOCRController {
8
8
  isReady = false;
9
9
  isGenerating = false;
@@ -14,7 +14,7 @@ export class VerticalOCRController {
14
14
  isGeneratingCallback = _isGenerating => {},
15
15
  errorCallback = _error => {}
16
16
  }) {
17
- this.nativeModule = new _VerticalOCRModule();
17
+ this.ocrNativeModule = VerticalOCRNativeModule;
18
18
  this.modelDownloadProgressCallback = modelDownloadProgressCallback;
19
19
  this.isReadyCallback = isReadyCallback;
20
20
  this.isGeneratingCallback = isGeneratingCallback;
@@ -28,12 +28,8 @@ export class VerticalOCRController {
28
28
  }
29
29
  this.isReady = false;
30
30
  this.isReadyCallback(this.isReady);
31
- const recognizerPath = independentCharacters ? await fetchResource(recognizerSources.recognizerSmall, calculateDownloadProgres(3, 0, this.modelDownloadProgressCallback)) : await fetchResource(recognizerSources.recognizerLarge, calculateDownloadProgres(3, 0, this.modelDownloadProgressCallback));
32
- const detectorPaths = {
33
- detectorLarge: await fetchResource(detectorSources.detectorLarge, calculateDownloadProgres(3, 1, this.modelDownloadProgressCallback)),
34
- detectorNarrow: await fetchResource(detectorSources.detectorNarrow, calculateDownloadProgres(3, 2, this.modelDownloadProgressCallback))
35
- };
36
- await this.nativeModule.loadModule(detectorPaths.detectorLarge, detectorPaths.detectorNarrow, recognizerPath, symbols[language], independentCharacters);
31
+ const paths = await ResourceFetcher.fetchMultipleResources(this.modelDownloadProgressCallback, detectorSources.detectorLarge, detectorSources.detectorNarrow, independentCharacters ? recognizerSources.recognizerSmall : recognizerSources.recognizerLarge);
32
+ await this.ocrNativeModule.loadModule(paths[0], paths[1], paths[2], symbols[language], independentCharacters);
37
33
  this.isReady = true;
38
34
  this.isReadyCallback(this.isReady);
39
35
  } catch (e) {
@@ -54,7 +50,7 @@ export class VerticalOCRController {
54
50
  try {
55
51
  this.isGenerating = true;
56
52
  this.isGeneratingCallback(this.isGenerating);
57
- return await this.nativeModule.forward(input);
53
+ return await this.ocrNativeModule.forward(input);
58
54
  } catch (e) {
59
55
  throw new Error(getError(e));
60
56
  } finally {
@@ -1 +1 @@
1
- {"version":3,"names":["symbols","ETError","getError","_VerticalOCRModule","fetchResource","calculateDownloadProgres","VerticalOCRController","isReady","isGenerating","error","constructor","modelDownloadProgressCallback","_downloadProgress","isReadyCallback","_isReady","isGeneratingCallback","_isGenerating","errorCallback","_error","nativeModule","loadModel","detectorSources","recognizerSources","language","independentCharacters","Object","keys","length","Error","LanguageNotSupported","recognizerPath","recognizerSmall","recognizerLarge","detectorPaths","detectorLarge","detectorNarrow","loadModule","e","forward","input","ModuleNotLoaded","ModelGenerating"],"sourceRoot":"../../../src","sources":["controllers/VerticalOCRController.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["symbols","ETError","getError","VerticalOCRNativeModule","ResourceFetcher","VerticalOCRController","isReady","isGenerating","error","constructor","modelDownloadProgressCallback","_downloadProgress","isReadyCallback","_isReady","isGeneratingCallback","_isGenerating","errorCallback","_error","ocrNativeModule","loadModel","detectorSources","recognizerSources","language","independentCharacters","Object","keys","length","Error","LanguageNotSupported","paths","fetchMultipleResources","detectorLarge","detectorNarrow","recognizerSmall","recognizerLarge","loadModule","e","forward","input","ModuleNotLoaded","ModelGenerating"],"sourceRoot":"../../../src","sources":["controllers/VerticalOCRController.ts"],"mappings":"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","ignoreList":[]}
@@ -1,28 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { useState } from 'react';
4
- import { _ClassificationModule } from '../../native/RnExecutorchModules';
3
+ import { ClassificationModule } from '../../modules/computer_vision/ClassificationModule';
5
4
  import { useModule } from '../useModule';
6
5
  export const useClassification = ({
7
- modelSource
8
- }) => {
9
- const [module, _] = useState(() => new _ClassificationModule());
10
- const {
11
- error,
12
- isReady,
13
- isGenerating,
14
- downloadProgress,
15
- forwardImage: forward
16
- } = useModule({
17
- modelSource,
18
- module
19
- });
20
- return {
21
- error,
22
- isReady,
23
- isGenerating,
24
- downloadProgress,
25
- forward
26
- };
27
- };
6
+ modelSource,
7
+ preventLoad = false
8
+ }) => useModule({
9
+ module: ClassificationModule,
10
+ loadArgs: [modelSource],
11
+ preventLoad
12
+ });
28
13
  //# sourceMappingURL=useClassification.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useState","_ClassificationModule","useModule","useClassification","modelSource","module","_","error","isReady","isGenerating","downloadProgress","forwardImage","forward"],"sourceRoot":"../../../../src","sources":["hooks/computer_vision/useClassification.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,SAAS,QAAQ,cAAc;AAMxC,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAChCC;AACK,CAAC,KAMH;EACH,MAAM,CAACC,MAAM,EAAEC,CAAC,CAAC,GAAGN,QAAQ,CAAC,MAAM,IAAIC,qBAAqB,CAAC,CAAC,CAAC;EAC/D,MAAM;IACJM,KAAK;IACLC,OAAO;IACPC,YAAY;IACZC,gBAAgB;IAChBC,YAAY,EAAEC;EAChB,CAAC,GAAGV,SAAS,CAAC;IACZE,WAAW;IACXC;EACF,CAAC,CAAC;EAEF,OAAO;IAAEE,KAAK;IAAEC,OAAO;IAAEC,YAAY;IAAEC,gBAAgB;IAAEE;EAAQ,CAAC;AACpE,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["ClassificationModule","useModule","useClassification","modelSource","preventLoad","module","loadArgs"],"sourceRoot":"../../../../src","sources":["hooks/computer_vision/useClassification.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,oDAAoD;AAEzF,SAASC,SAAS,QAAQ,cAAc;AAExC,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAChCC,WAAW;EACXC,WAAW,GAAG;AAIhB,CAAC,KACCH,SAAS,CAAC;EACRI,MAAM,EAAEL,oBAAoB;EAC5BM,QAAQ,EAAE,CAACH,WAAW,CAAC;EACvBC;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import { useModule } from '../useModule';
4
+ import { ImageSegmentationModule } from '../../modules/computer_vision/ImageSegmentationModule';
5
+ export const useImageSegmentation = ({
6
+ modelSource,
7
+ preventLoad = false
8
+ }) => useModule({
9
+ module: ImageSegmentationModule,
10
+ loadArgs: [modelSource],
11
+ preventLoad
12
+ });
13
+ //# sourceMappingURL=useImageSegmentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useModule","ImageSegmentationModule","useImageSegmentation","modelSource","preventLoad","module","loadArgs"],"sourceRoot":"../../../../src","sources":["hooks/computer_vision/useImageSegmentation.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,cAAc;AACxC,SAASC,uBAAuB,QAAQ,uDAAuD;AAQ/F,OAAO,MAAMC,oBAAoB,GAAGA,CAAC;EACnCC,WAAW;EACXC,WAAW,GAAG;AACT,CAAC,KACNJ,SAAS,CAAC;EACRK,MAAM,EAAEJ,uBAAuB;EAC/BK,QAAQ,EAAE,CAACH,WAAW,CAAC;EACvBC;AACF,CAAC,CAAC","ignoreList":[]}