cui-llama.rn 1.6.0 → 1.7.0

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 (285) hide show
  1. package/README.md +35 -7
  2. package/android/src/main/CMakeLists.txt +22 -11
  3. package/android/src/main/java/com/rnllama/LlamaContext.java +42 -6
  4. package/android/src/main/java/com/rnllama/RNLlama.java +139 -4
  5. package/android/src/main/jni.cpp +173 -18
  6. package/android/src/main/jniLibs/arm64-v8a/librnllama.so +0 -0
  7. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8.so +0 -0
  8. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2.so +0 -0
  9. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_dotprod.so +0 -0
  10. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_dotprod_i8mm.so +0 -0
  11. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_i8mm.so +0 -0
  12. package/android/src/main/jniLibs/x86_64/librnllama.so +0 -0
  13. package/android/src/main/jniLibs/x86_64/librnllama_x86_64.so +0 -0
  14. package/android/src/newarch/java/com/rnllama/RNLlamaModule.java +24 -4
  15. package/android/src/oldarch/java/com/rnllama/RNLlamaModule.java +22 -2
  16. package/cpp/LICENSE +21 -0
  17. package/cpp/chat.cpp +129 -107
  18. package/cpp/chat.h +2 -0
  19. package/cpp/common.cpp +58 -78
  20. package/cpp/common.h +29 -21
  21. package/cpp/ggml-alloc.c +4 -1
  22. package/cpp/ggml-backend.cpp +9 -5
  23. package/cpp/ggml-backend.h +4 -4
  24. package/cpp/ggml-cpp.h +1 -1
  25. package/cpp/ggml-cpu/amx/amx.cpp +221 -0
  26. package/cpp/ggml-cpu/amx/amx.h +8 -0
  27. package/cpp/ggml-cpu/amx/common.h +91 -0
  28. package/cpp/ggml-cpu/amx/mmq.cpp +2511 -0
  29. package/cpp/ggml-cpu/amx/mmq.h +10 -0
  30. package/{ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers → cpp/ggml-cpu}/binary-ops.h +1 -1
  31. package/cpp/ggml-cpu/common.h +72 -0
  32. package/cpp/{ggml-cpu-aarch64.cpp → ggml-cpu/ggml-cpu-aarch64.cpp} +809 -103
  33. package/cpp/{ggml-cpu-quants.c → ggml-cpu/ggml-cpu-quants.c} +306 -6
  34. package/cpp/{ggml-cpu.c → ggml-cpu/ggml-cpu.c} +114 -55
  35. package/cpp/{ggml-cpu.cpp → ggml-cpu/ggml-cpu.cpp} +32 -16
  36. package/cpp/{ops.cpp → ggml-cpu/ops.cpp} +353 -173
  37. package/{ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers → cpp/ggml-cpu}/ops.h +2 -20
  38. package/cpp/{sgemm.cpp → ggml-cpu/sgemm.cpp} +501 -0
  39. package/{ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers → cpp/ggml-cpu}/simd-mappings.h +7 -3
  40. package/{ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers → cpp/ggml-cpu}/unary-ops.h +1 -1
  41. package/cpp/{vec.cpp → ggml-cpu/vec.cpp} +0 -6
  42. package/{ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers → cpp/ggml-cpu}/vec.h +16 -0
  43. package/cpp/ggml-cpu.h +5 -0
  44. package/cpp/ggml-impl.h +16 -9
  45. package/cpp/ggml-llama-sim.metallib +0 -0
  46. package/cpp/ggml-llama.metallib +0 -0
  47. package/cpp/ggml-metal-impl.h +36 -11
  48. package/cpp/ggml-metal.m +810 -176
  49. package/cpp/ggml-opt.cpp +373 -190
  50. package/cpp/ggml-opt.h +49 -28
  51. package/cpp/ggml-quants.c +0 -6
  52. package/cpp/ggml.c +227 -282
  53. package/cpp/ggml.h +82 -101
  54. package/cpp/gguf.cpp +33 -33
  55. package/cpp/json-schema-to-grammar.cpp +3 -0
  56. package/cpp/llama-adapter.cpp +6 -0
  57. package/cpp/llama-arch.cpp +49 -17
  58. package/cpp/llama-arch.h +9 -0
  59. package/cpp/llama-batch.cpp +8 -2
  60. package/cpp/llama-batch.h +2 -1
  61. package/cpp/llama-chat.cpp +39 -16
  62. package/cpp/llama-chat.h +4 -2
  63. package/cpp/llama-context.cpp +440 -611
  64. package/cpp/llama-context.h +44 -33
  65. package/cpp/llama-cparams.h +1 -0
  66. package/cpp/llama-graph.cpp +214 -291
  67. package/cpp/llama-graph.h +69 -21
  68. package/cpp/llama-hparams.cpp +17 -1
  69. package/cpp/llama-hparams.h +39 -5
  70. package/cpp/llama-kv-cache.cpp +2067 -620
  71. package/cpp/llama-kv-cache.h +410 -108
  72. package/cpp/llama-memory.h +12 -1
  73. package/cpp/llama-model-loader.cpp +24 -15
  74. package/cpp/llama-model-saver.cpp +281 -0
  75. package/cpp/llama-model-saver.h +37 -0
  76. package/cpp/llama-model.cpp +1089 -359
  77. package/cpp/llama-model.h +19 -3
  78. package/cpp/llama-sampling.cpp +20 -7
  79. package/cpp/llama-vocab.cpp +54 -9
  80. package/cpp/llama-vocab.h +6 -0
  81. package/cpp/llama.cpp +14 -0
  82. package/cpp/llama.h +86 -142
  83. package/cpp/minja/chat-template.hpp +9 -5
  84. package/cpp/minja/minja.hpp +69 -36
  85. package/cpp/rn-llama.cpp +602 -190
  86. package/cpp/rn-llama.h +34 -8
  87. package/cpp/sampling.cpp +57 -50
  88. package/cpp/tools/mtmd/clip-impl.h +462 -0
  89. package/cpp/tools/mtmd/clip.cpp +4024 -0
  90. package/cpp/tools/mtmd/clip.h +101 -0
  91. package/cpp/tools/mtmd/miniaudio.h +93468 -0
  92. package/cpp/tools/mtmd/mtmd-audio.cpp +855 -0
  93. package/cpp/tools/mtmd/mtmd-audio.h +62 -0
  94. package/cpp/tools/mtmd/mtmd-helper.cpp +297 -0
  95. package/cpp/tools/mtmd/mtmd.cpp +942 -0
  96. package/cpp/tools/mtmd/mtmd.h +362 -0
  97. package/cpp/tools/mtmd/stb_image.h +7988 -0
  98. package/ios/CMakeLists.txt +20 -10
  99. package/ios/RNLlama.h +6 -0
  100. package/ios/RNLlama.mm +82 -3
  101. package/ios/RNLlamaContext.h +5 -1
  102. package/ios/RNLlamaContext.mm +131 -38
  103. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/chat.h +2 -0
  104. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/common.h +29 -21
  105. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-backend.h +4 -4
  106. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpp.h +1 -1
  107. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpu.h +5 -0
  108. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-impl.h +16 -9
  109. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-metal-impl.h +36 -11
  110. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-opt.h +49 -28
  111. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml.h +82 -101
  112. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-arch.h +9 -0
  113. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-batch.h +2 -1
  114. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-chat.h +4 -2
  115. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-context.h +44 -33
  116. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-cparams.h +1 -0
  117. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-graph.h +69 -21
  118. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-hparams.h +39 -5
  119. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-kv-cache.h +410 -108
  120. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-memory.h +12 -1
  121. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-model-saver.h +37 -0
  122. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-model.h +19 -3
  123. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama-vocab.h +6 -0
  124. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/llama.h +86 -142
  125. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/minja/chat-template.hpp +9 -5
  126. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/minja/minja.hpp +69 -36
  127. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/rn-llama.h +34 -8
  128. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Info.plist +0 -0
  129. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/ggml-llama.metallib +0 -0
  130. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/rnllama +0 -0
  131. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/chat.h +2 -0
  132. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/common.h +29 -21
  133. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-backend.h +4 -4
  134. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpp.h +1 -1
  135. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu.h +5 -0
  136. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-impl.h +16 -9
  137. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-metal-impl.h +36 -11
  138. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-opt.h +49 -28
  139. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml.h +82 -101
  140. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-arch.h +9 -0
  141. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-batch.h +2 -1
  142. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-chat.h +4 -2
  143. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-context.h +44 -33
  144. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-cparams.h +1 -0
  145. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-graph.h +69 -21
  146. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-hparams.h +39 -5
  147. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-kv-cache.h +410 -108
  148. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-memory.h +12 -1
  149. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-model-saver.h +37 -0
  150. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-model.h +19 -3
  151. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama-vocab.h +6 -0
  152. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/llama.h +86 -142
  153. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/minja/chat-template.hpp +9 -5
  154. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/minja/minja.hpp +69 -36
  155. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/rn-llama.h +34 -8
  156. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Info.plist +0 -0
  157. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/_CodeSignature/CodeResources +1 -1
  158. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/ggml-llama-sim.metallib +0 -0
  159. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/rnllama +0 -0
  160. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/chat.h +2 -0
  161. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/common.h +29 -21
  162. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-backend.h +4 -4
  163. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpp.h +1 -1
  164. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpu.h +5 -0
  165. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-impl.h +16 -9
  166. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-metal-impl.h +36 -11
  167. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-opt.h +49 -28
  168. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml.h +82 -101
  169. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-arch.h +9 -0
  170. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-batch.h +2 -1
  171. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-chat.h +4 -2
  172. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-context.h +44 -33
  173. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-cparams.h +1 -0
  174. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-graph.h +69 -21
  175. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-hparams.h +39 -5
  176. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-kv-cache.h +410 -108
  177. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-memory.h +12 -1
  178. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-model-saver.h +37 -0
  179. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-model.h +19 -3
  180. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama-vocab.h +6 -0
  181. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/llama.h +86 -142
  182. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/minja/chat-template.hpp +9 -5
  183. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/minja/minja.hpp +69 -36
  184. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/rn-llama.h +34 -8
  185. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Info.plist +0 -0
  186. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/ggml-llama.metallib +0 -0
  187. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/rnllama +0 -0
  188. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/chat.h +2 -0
  189. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/common.h +29 -21
  190. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-backend.h +4 -4
  191. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpp.h +1 -1
  192. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu.h +5 -0
  193. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-impl.h +16 -9
  194. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-metal-impl.h +36 -11
  195. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-opt.h +49 -28
  196. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml.h +82 -101
  197. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-arch.h +9 -0
  198. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-batch.h +2 -1
  199. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-chat.h +4 -2
  200. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-context.h +44 -33
  201. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-cparams.h +1 -0
  202. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-graph.h +69 -21
  203. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-hparams.h +39 -5
  204. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-kv-cache.h +410 -108
  205. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-memory.h +12 -1
  206. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-model-saver.h +37 -0
  207. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-model.h +19 -3
  208. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama-vocab.h +6 -0
  209. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/llama.h +86 -142
  210. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/minja/chat-template.hpp +9 -5
  211. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/minja/minja.hpp +69 -36
  212. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/rn-llama.h +34 -8
  213. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Info.plist +0 -0
  214. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/_CodeSignature/CodeResources +1 -1
  215. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/ggml-llama-sim.metallib +0 -0
  216. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/rnllama +0 -0
  217. package/jest/mock.js +33 -7
  218. package/lib/commonjs/NativeRNLlama.js.map +1 -1
  219. package/lib/commonjs/index.js +153 -21
  220. package/lib/commonjs/index.js.map +1 -1
  221. package/lib/module/NativeRNLlama.js.map +1 -1
  222. package/lib/module/index.js +152 -20
  223. package/lib/module/index.js.map +1 -1
  224. package/lib/typescript/NativeRNLlama.d.ts +54 -4
  225. package/lib/typescript/NativeRNLlama.d.ts.map +1 -1
  226. package/lib/typescript/index.d.ts +72 -6
  227. package/lib/typescript/index.d.ts.map +1 -1
  228. package/package.json +1 -1
  229. package/src/NativeRNLlama.ts +72 -4
  230. package/src/index.ts +212 -38
  231. package/cpp/binary-ops.h +0 -16
  232. package/cpp/ops.h +0 -128
  233. package/cpp/simd-mappings.h +0 -888
  234. package/cpp/unary-ops.h +0 -28
  235. package/cpp/vec.h +0 -802
  236. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/binary-ops.h +0 -16
  237. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpu-aarch64.h +0 -8
  238. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpu-impl.h +0 -512
  239. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpu-quants.h +0 -63
  240. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ggml-cpu-traits.h +0 -38
  241. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/ops.h +0 -128
  242. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/sgemm.h +0 -14
  243. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/simd-mappings.h +0 -888
  244. package/ios/rnllama.xcframework/ios-arm64/rnllama.framework/Headers/vec.h +0 -802
  245. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-aarch64.h +0 -8
  246. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-impl.h +0 -512
  247. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-quants.h +0 -63
  248. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-traits.h +0 -38
  249. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/sgemm.h +0 -14
  250. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/unary-ops.h +0 -28
  251. package/ios/rnllama.xcframework/ios-arm64_x86_64-simulator/rnllama.framework/Headers/vec.h +0 -802
  252. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/binary-ops.h +0 -16
  253. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpu-aarch64.h +0 -8
  254. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpu-impl.h +0 -512
  255. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpu-quants.h +0 -63
  256. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ggml-cpu-traits.h +0 -38
  257. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/ops.h +0 -128
  258. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/sgemm.h +0 -14
  259. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/simd-mappings.h +0 -888
  260. package/ios/rnllama.xcframework/tvos-arm64/rnllama.framework/Headers/unary-ops.h +0 -28
  261. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/binary-ops.h +0 -16
  262. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-aarch64.h +0 -8
  263. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-impl.h +0 -512
  264. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-quants.h +0 -63
  265. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ggml-cpu-traits.h +0 -38
  266. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/ops.h +0 -128
  267. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/sgemm.h +0 -14
  268. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/simd-mappings.h +0 -888
  269. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/unary-ops.h +0 -28
  270. package/ios/rnllama.xcframework/tvos-arm64_x86_64-simulator/rnllama.framework/Headers/vec.h +0 -802
  271. package/lib/commonjs/chat.js +0 -37
  272. package/lib/commonjs/chat.js.map +0 -1
  273. package/lib/module/chat.js +0 -33
  274. package/lib/module/chat.js.map +0 -1
  275. package/lib/typescript/chat.d.ts +0 -10
  276. package/lib/typescript/chat.d.ts.map +0 -1
  277. package/src/chat.ts +0 -44
  278. /package/cpp/{binary-ops.cpp → ggml-cpu/binary-ops.cpp} +0 -0
  279. /package/cpp/{ggml-cpu-aarch64.h → ggml-cpu/ggml-cpu-aarch64.h} +0 -0
  280. /package/cpp/{ggml-cpu-impl.h → ggml-cpu/ggml-cpu-impl.h} +0 -0
  281. /package/cpp/{ggml-cpu-quants.h → ggml-cpu/ggml-cpu-quants.h} +0 -0
  282. /package/cpp/{ggml-cpu-traits.cpp → ggml-cpu/ggml-cpu-traits.cpp} +0 -0
  283. /package/cpp/{ggml-cpu-traits.h → ggml-cpu/ggml-cpu-traits.h} +0 -0
  284. /package/cpp/{sgemm.h → ggml-cpu/sgemm.h} +0 -0
  285. /package/cpp/{unary-ops.cpp → ggml-cpu/unary-ops.cpp} +0 -0
package/README.md CHANGED
@@ -123,22 +123,50 @@ console.log('Result:', textResult.text)
123
123
  console.log('Timings:', textResult.timings)
124
124
  ```
125
125
 
126
- The binding’s deisgn inspired by [server.cpp](https://github.com/ggerganov/llama.cpp/tree/master/examples/server) example in llama.cpp, so you can map its API to LlamaContext:
126
+ The binding’s deisgn inspired by [server.cpp](https://github.com/ggerganov/llama.cpp/tree/master/examples/server) example in llama.cpp:
127
127
 
128
128
  - `/completion` and `/chat/completions`: `context.completion(params, partialCompletionCallback)`
129
129
  - `/tokenize`: `context.tokenize(content)`
130
130
  - `/detokenize`: `context.detokenize(tokens)`
131
131
  - `/embedding`: `context.embedding(content)`
132
- - Other methods
133
- - `context.loadSession(path)`
134
- - `context.saveSession(path)`
135
- - `context.stopCompletion()`
136
- - `context.release()`
132
+ - ... Other methods
137
133
 
138
134
  Please visit the [Documentation](docs/API) for more details.
139
135
 
140
136
  You can also visit the [example](example) to see how to use it.
141
137
 
138
+ ## Session (State)
139
+
140
+ The session file is a binary file that contains the state of the context, it can saves time of prompt processing.
141
+
142
+ ```js
143
+ const context = await initLlama({ ...params })
144
+
145
+ // After prompt processing or completion ...
146
+
147
+ // Save the session
148
+ await context.saveSession('<path to save session>')
149
+
150
+ // Load the session
151
+ await context.loadSession('<path to load session>')
152
+ ```
153
+
154
+ ## Embedding
155
+
156
+ The embedding API is used to get the embedding of a text.
157
+
158
+ ```js
159
+ const context = await initLlama({
160
+ ...params,
161
+ embedding: true,
162
+ })
163
+
164
+ const { embedding } = await context.embedding('Hello, world!')
165
+ ```
166
+
167
+ - You can use model like [nomic-ai/nomic-embed-text-v1.5-GGUF](https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF) for better embedding quality.
168
+ - You can use DB like [op-sqlite](https://github.com/OP-Engineering/op-sqlite) with sqlite-vec support to store and search embeddings.
169
+
142
170
  ## Tool Calling
143
171
 
144
172
  `llama.rn` has universal tool call support by using [minja](https://github.com/google/minja) (as Jinja template parser) and [chat.cpp](https://github.com/ggerganov/llama.cpp/blob/master/common/chat.cpp) in llama.cpp.
@@ -273,7 +301,7 @@ jest.mock('llama.rn', () => require('llama.rn/jest/mock'))
273
301
 
274
302
  iOS:
275
303
 
276
- - The [Extended Virtual Addressing](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_kernel_extended-virtual-addressing) capability is recommended to enable on iOS project.
304
+ - The [Extended Virtual Addressing](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_kernel_extended-virtual-addressing) and [Increased Memory Limit](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.kernel.increased-memory-limit?language=objc) capabilities are recommended to enable on iOS project.
277
305
  - Metal:
278
306
  - We have tested to know some devices is not able to use Metal (GPU) due to llama.cpp used SIMD-scoped operation, you can check if your device is supported in [Metal feature set tables](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), Apple7 GPU will be the minimum requirement.
279
307
  - It's also not supported in iOS simulator due to [this limitation](https://developer.apple.com/documentation/metal/developing_metal_apps_that_run_in_simulator#3241609), we used constant buffers more than 14.
@@ -11,7 +11,11 @@ endif(CCACHE_FOUND)
11
11
  set(CMAKE_CXX_STANDARD 17)
12
12
  set(RNLLAMA_LIB_DIR ${CMAKE_SOURCE_DIR}/../../../cpp)
13
13
 
14
- include_directories(${RNLLAMA_LIB_DIR})
14
+ include_directories(
15
+ ${RNLLAMA_LIB_DIR}
16
+ ${RNLLAMA_LIB_DIR}/ggml-cpu
17
+ ${RNLLAMA_LIB_DIR}/tools/mtmd
18
+ )
15
19
 
16
20
  set(
17
21
  SOURCE_FILES
@@ -19,21 +23,29 @@ set(
19
23
  ${RNLLAMA_LIB_DIR}/ggml-alloc.c
20
24
  ${RNLLAMA_LIB_DIR}/ggml-backend.cpp
21
25
  ${RNLLAMA_LIB_DIR}/ggml-backend-reg.cpp
22
- ${RNLLAMA_LIB_DIR}/ops.cpp
23
- ${RNLLAMA_LIB_DIR}/unary-ops.cpp
24
- ${RNLLAMA_LIB_DIR}/binary-ops.cpp
25
- ${RNLLAMA_LIB_DIR}/vec.cpp
26
- ${RNLLAMA_LIB_DIR}/ggml-cpu.c
27
- ${RNLLAMA_LIB_DIR}/ggml-cpu.cpp
28
- ${RNLLAMA_LIB_DIR}/ggml-cpu-aarch64.cpp
29
- ${RNLLAMA_LIB_DIR}/ggml-cpu-quants.c
30
- ${RNLLAMA_LIB_DIR}/ggml-cpu-traits.cpp
26
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/amx/amx.cpp
27
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/amx/mmq.cpp
28
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ggml-cpu.c
29
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ggml-cpu.cpp
30
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ggml-cpu-aarch64.cpp
31
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ggml-cpu-quants.c
32
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ggml-cpu-traits.cpp
33
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/unary-ops.cpp
34
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/binary-ops.cpp
35
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/sgemm.cpp
36
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/vec.cpp
37
+ ${RNLLAMA_LIB_DIR}/ggml-cpu/ops.cpp
31
38
  ${RNLLAMA_LIB_DIR}/ggml-opt.cpp
32
39
  ${RNLLAMA_LIB_DIR}/ggml-threading.cpp
33
40
  ${RNLLAMA_LIB_DIR}/ggml-quants.c
34
41
  ${RNLLAMA_LIB_DIR}/gguf.cpp
35
42
  ${RNLLAMA_LIB_DIR}/log.cpp
36
43
  ${RNLLAMA_LIB_DIR}/llama-impl.cpp
44
+ # Multimodal support
45
+ ${RNLLAMA_LIB_DIR}/tools/mtmd/mtmd.cpp
46
+ ${RNLLAMA_LIB_DIR}/tools/mtmd/mtmd-audio.cpp
47
+ ${RNLLAMA_LIB_DIR}/tools/mtmd/clip.cpp
48
+ ${RNLLAMA_LIB_DIR}/tools/mtmd/mtmd-helper.cpp
37
49
  ${RNLLAMA_LIB_DIR}/llama-grammar.cpp
38
50
  ${RNLLAMA_LIB_DIR}/llama-sampling.cpp
39
51
  ${RNLLAMA_LIB_DIR}/llama-vocab.cpp
@@ -56,7 +68,6 @@ set(
56
68
  ${RNLLAMA_LIB_DIR}/sampling.cpp
57
69
  ${RNLLAMA_LIB_DIR}/unicode-data.cpp
58
70
  ${RNLLAMA_LIB_DIR}/unicode.cpp
59
- ${RNLLAMA_LIB_DIR}/sgemm.cpp
60
71
  ${RNLLAMA_LIB_DIR}/common.cpp
61
72
  ${RNLLAMA_LIB_DIR}/chat.cpp
62
73
  ${RNLLAMA_LIB_DIR}/json-schema-to-grammar.cpp
@@ -170,6 +170,8 @@ public class LlamaContext {
170
170
  params.hasKey("rope_freq_scale") ? (float) params.getDouble("rope_freq_scale") : 0.0f,
171
171
  // int pooling_type,
172
172
  params.hasKey("pooling_type") ? params.getInt("pooling_type") : -1,
173
+ // boolean ctx_shift,
174
+ params.hasKey("ctx_shift") ? params.getBoolean("ctx_shift") : true,
173
175
  // LoadProgressCallback load_progress_callback
174
176
  params.hasKey("use_progress_callback") ? new LoadProgressCallback(this) : null
175
177
  );
@@ -367,6 +369,8 @@ public class LlamaContext {
367
369
  params.hasKey("top_n_sigma") ? (float) params.getDouble("top_n_sigma") : -1.0f,
368
370
  // String[] dry_sequence_breakers, when undef, we use the default definition from common.h
369
371
  params.hasKey("dry_sequence_breakers") ? params.getArray("dry_sequence_breakers").toArrayList().toArray(new String[0]) : new String[]{"\n", ":", "\"", "*"},
372
+ // String[] media_paths
373
+ params.hasKey("media_paths") ? params.getArray("media_paths").toArrayList().toArray(new String[0]) : new String[0],
370
374
  // PartialCompletionCallback partial_completion_callback
371
375
  new PartialCompletionCallback(
372
376
  this,
@@ -387,10 +391,8 @@ public class LlamaContext {
387
391
  return isPredicting(this.context);
388
392
  }
389
393
 
390
- public WritableMap tokenize(String text) {
391
- WritableMap result = Arguments.createMap();
392
- result.putArray("tokens", tokenize(this.context, text));
393
- return result;
394
+ public WritableMap tokenize(String text, ReadableArray media_paths) {
395
+ return tokenize(this.context, text, media_paths == null ? new String[0] : media_paths.toArrayList().toArray(new String[0]));
394
396
  }
395
397
 
396
398
  public String detokenize(ReadableArray tokens) {
@@ -437,6 +439,34 @@ public class LlamaContext {
437
439
  return getLoadedLoraAdapters(this.context);
438
440
  }
439
441
 
442
+ public boolean initMultimodal(ReadableMap params) {
443
+ String mmprojPath = params.getString("path");
444
+ boolean mmprojUseGpu = params.hasKey("use_gpu") ? params.getBoolean("use_gpu") : true;
445
+ if (mmprojPath == null || mmprojPath.isEmpty()) {
446
+ throw new IllegalArgumentException("mmproj_path is empty");
447
+ }
448
+ File file = new File(mmprojPath);
449
+ if (!file.exists()) {
450
+ throw new IllegalArgumentException("mmproj file does not exist: " + mmprojPath);
451
+ }
452
+ return initMultimodal(this.context, mmprojPath, mmprojUseGpu);
453
+ }
454
+
455
+ public boolean isMultimodalEnabled() {
456
+ return isMultimodalEnabled(this.context);
457
+ }
458
+
459
+ public WritableMap getMultimodalSupport() {
460
+ if (!isMultimodalEnabled()) {
461
+ throw new IllegalStateException("Multimodal is not enabled");
462
+ }
463
+ return getMultimodalSupport(this.context);
464
+ }
465
+
466
+ public void releaseMultimodal() {
467
+ releaseMultimodal(this.context);
468
+ }
469
+
440
470
  public void release() {
441
471
  freeContext(context);
442
472
  }
@@ -536,7 +566,7 @@ public class LlamaContext {
536
566
  String[] skip
537
567
  );
538
568
  protected static native long initContext(
539
- String model,
569
+ String model_path,
540
570
  String chat_template,
541
571
  String reasoning_format,
542
572
  boolean embedding,
@@ -558,8 +588,12 @@ public class LlamaContext {
558
588
  float rope_freq_base,
559
589
  float rope_freq_scale,
560
590
  int pooling_type,
591
+ boolean ctx_shift,
561
592
  LoadProgressCallback load_progress_callback
562
593
  );
594
+ protected static native boolean initMultimodal(long contextPtr, String mmproj_path, boolean MMPROJ_USE_GPU);
595
+ protected static native boolean isMultimodalEnabled(long contextPtr);
596
+ protected static native WritableMap getMultimodalSupport(long contextPtr);
563
597
  protected static native void interruptLoad(long contextPtr);
564
598
  protected static native WritableMap loadModelDetails(
565
599
  long contextPtr
@@ -623,11 +657,12 @@ public class LlamaContext {
623
657
  int dry_penalty_last_n,
624
658
  float top_n_sigma,
625
659
  String[] dry_sequence_breakers,
660
+ String[] media_paths,
626
661
  PartialCompletionCallback partial_completion_callback
627
662
  );
628
663
  protected static native void stopCompletion(long contextPtr);
629
664
  protected static native boolean isPredicting(long contextPtr);
630
- protected static native WritableArray tokenize(long contextPtr, String text);
665
+ protected static native WritableMap tokenize(long contextPtr, String text, String[] media_paths);
631
666
  protected static native String detokenize(long contextPtr, int[] tokens);
632
667
  protected static native boolean isEmbeddingEnabled(long contextPtr);
633
668
  protected static native WritableMap embedding(
@@ -642,4 +677,5 @@ public class LlamaContext {
642
677
  protected static native void freeContext(long contextPtr);
643
678
  protected static native void setupLog(NativeLogCallback logCallback);
644
679
  protected static native void unsetLog();
680
+ protected static native void releaseMultimodal(long contextPtr);
645
681
  }
@@ -322,7 +322,7 @@ public class RNLlama implements LifecycleEventListener {
322
322
  tasks.put(task, "stopCompletion-" + contextId);
323
323
  }
324
324
 
325
- public void tokenizeAsync(double id, final String text, final Promise promise) {
325
+ public void tokenizeAsync(double id, final String text, final ReadableArray media_paths, final Promise promise) {
326
326
  final int contextId = (int) id;
327
327
  AsyncTask task = new AsyncTask<Void, Void, WritableMap>() {
328
328
  private Exception exception;
@@ -334,7 +334,7 @@ public class RNLlama implements LifecycleEventListener {
334
334
  if (context == null) {
335
335
  throw new Exception("Context not found");
336
336
  }
337
- return context.tokenize(text);
337
+ return context.tokenize(text, media_paths);
338
338
  } catch (Exception e) {
339
339
  exception = e;
340
340
  }
@@ -354,13 +354,13 @@ public class RNLlama implements LifecycleEventListener {
354
354
  tasks.put(task, "tokenize-" + contextId);
355
355
  }
356
356
 
357
- public WritableMap tokenizeSync(double id, final String text) {
357
+ public WritableMap tokenizeSync(double id, final String text, final ReadableArray image_paths) {
358
358
  int contextId = (int) id;
359
359
  LlamaContext context = contexts.get(contextId);
360
360
  if (context == null) {
361
361
  return Arguments.createMap();
362
362
  }
363
- return context.tokenize(text);
363
+ return context.tokenize(text, image_paths);
364
364
  }
365
365
 
366
366
  public void getCpuFeatures(Promise promise) {
@@ -597,6 +597,141 @@ public class RNLlama implements LifecycleEventListener {
597
597
  tasks.put(task, "getLoadedLoraAdapters-" + contextId);
598
598
  }
599
599
 
600
+ public void initMultimodal(double id, final ReadableMap params, final Promise promise) {
601
+ final int contextId = (int) id;
602
+ AsyncTask task = new AsyncTask<Void, Void, Boolean>() {
603
+ private Exception exception;
604
+
605
+ @Override
606
+ protected Boolean doInBackground(Void... voids) {
607
+ try {
608
+ LlamaContext context = contexts.get(contextId);
609
+ if (context == null) {
610
+ throw new Exception("Context not found");
611
+ }
612
+ if (context.isPredicting()) {
613
+ throw new Exception("Context is busy");
614
+ }
615
+ return context.initMultimodal(params);
616
+ } catch (Exception e) {
617
+ exception = e;
618
+ }
619
+ return false;
620
+ }
621
+
622
+ @Override
623
+ protected void onPostExecute(Boolean result) {
624
+ if (exception != null) {
625
+ promise.reject(exception);
626
+ return;
627
+ }
628
+ promise.resolve(result);
629
+ tasks.remove(this);
630
+ }
631
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
632
+ tasks.put(task, "initMultimodal-" + contextId);
633
+ }
634
+
635
+ public void isMultimodalEnabled(double id, final Promise promise) {
636
+ final int contextId = (int) id;
637
+ AsyncTask task = new AsyncTask<Void, Void, Boolean>() {
638
+ private Exception exception;
639
+
640
+ @Override
641
+ protected Boolean doInBackground(Void... voids) {
642
+ try {
643
+ LlamaContext context = contexts.get(contextId);
644
+ if (context == null) {
645
+ throw new Exception("Context not found");
646
+ }
647
+ return context.isMultimodalEnabled();
648
+ } catch (Exception e) {
649
+ exception = e;
650
+ }
651
+ return false;
652
+ }
653
+
654
+ @Override
655
+ protected void onPostExecute(Boolean result) {
656
+ if (exception != null) {
657
+ promise.reject(exception);
658
+ return;
659
+ }
660
+ promise.resolve(result);
661
+ tasks.remove(this);
662
+ }
663
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
664
+ tasks.put(task, "isMultimodalEnabled" + contextId);
665
+ }
666
+
667
+ public void getMultimodalSupport(double id, final Promise promise) {
668
+ final int contextId = (int) id;
669
+ AsyncTask task = new AsyncTask<Void, Void, WritableMap>() {
670
+ private Exception exception;
671
+
672
+ @Override
673
+ protected WritableMap doInBackground(Void... voids) {
674
+ try {
675
+ LlamaContext context = contexts.get(contextId);
676
+ if (context == null) {
677
+ throw new Exception("Context not found");
678
+ }
679
+ if (!context.isMultimodalEnabled()) {
680
+ throw new Exception("Multimodal is not enabled");
681
+ }
682
+ return context.getMultimodalSupport();
683
+ } catch (Exception e) {
684
+ exception = e;
685
+ }
686
+ return null;
687
+ }
688
+
689
+ @Override
690
+ protected void onPostExecute(WritableMap result) {
691
+ if (exception != null) {
692
+ promise.reject(exception);
693
+ return;
694
+ }
695
+ promise.resolve(result);
696
+ tasks.remove(this);
697
+ }
698
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
699
+ tasks.put(task, "getMultimodalSupport-" + contextId);
700
+ }
701
+
702
+ @ReactMethod
703
+ public void releaseMultimodal(double id, final Promise promise) {
704
+ final int contextId = (int) id;
705
+ AsyncTask task = new AsyncTask<Void, Void, Void>() {
706
+ private Exception exception;
707
+
708
+ @Override
709
+ protected Void doInBackground(Void... voids) {
710
+ try {
711
+ LlamaContext context = contexts.get(contextId);
712
+ if (context == null) {
713
+ throw new Exception("Context not found");
714
+ }
715
+ context.releaseMultimodal();
716
+ } catch (Exception e) {
717
+ exception = e;
718
+ }
719
+ return null;
720
+ }
721
+
722
+ @Override
723
+ protected void onPostExecute(Void result) {
724
+ if (exception != null) {
725
+ promise.reject(exception);
726
+ return;
727
+ }
728
+ promise.resolve(null);
729
+ tasks.remove(this);
730
+ }
731
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
732
+ tasks.put(task, "releaseMultimodal" + id);
733
+ }
734
+
600
735
  public void releaseContext(double id, Promise promise) {
601
736
  final int contextId = (int) id;
602
737
  AsyncTask task = new AsyncTask<Void, Void, Void>() {