cactus-react-native 0.0.1

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 (272) hide show
  1. package/README.md +230 -0
  2. package/android/build.gradle +104 -0
  3. package/android/gradle.properties +5 -0
  4. package/android/src/main/AndroidManifest.xml +4 -0
  5. package/android/src/main/CMakeLists.txt +104 -0
  6. package/android/src/main/java/com/cactus/Cactus.java +646 -0
  7. package/android/src/main/java/com/cactus/CactusPackage.java +48 -0
  8. package/android/src/main/java/com/cactus/LlamaContext.java +579 -0
  9. package/android/src/main/jni-utils.h +100 -0
  10. package/android/src/main/jni.cpp +1254 -0
  11. package/android/src/main/jniLibs/arm64-v8a/libcactus.so +0 -0
  12. package/android/src/main/jniLibs/arm64-v8a/libcactus_v8.so +0 -0
  13. package/android/src/main/jniLibs/arm64-v8a/libcactus_v8_2.so +0 -0
  14. package/android/src/main/jniLibs/arm64-v8a/libcactus_v8_2_dotprod.so +0 -0
  15. package/android/src/main/jniLibs/arm64-v8a/libcactus_v8_2_dotprod_i8mm.so +0 -0
  16. package/android/src/main/jniLibs/arm64-v8a/libcactus_v8_2_i8mm.so +0 -0
  17. package/android/src/main/jniLibs/x86_64/libcactus.so +0 -0
  18. package/android/src/main/jniLibs/x86_64/libcactus_x86_64.so +0 -0
  19. package/android/src/newarch/java/com/cactus/CactusModule.java +124 -0
  20. package/android/src/oldarch/java/com/cactus/CactusModule.java +125 -0
  21. package/cactus-react-native.podspec +45 -0
  22. package/ios/CMakeLists.txt +109 -0
  23. package/ios/Cactus.h +6 -0
  24. package/ios/Cactus.mm +405 -0
  25. package/ios/CactusContext.h +57 -0
  26. package/ios/CactusContext.mm +835 -0
  27. package/ios/cactus.xcframework/info.plist +74 -0
  28. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/cactus.h +133 -0
  29. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/chat.h +143 -0
  30. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/common.h +683 -0
  31. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-alloc.h +76 -0
  32. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-backend-impl.h +255 -0
  33. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-backend.h +354 -0
  34. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-common.h +1851 -0
  35. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpp.h +39 -0
  36. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpu-aarch64.h +8 -0
  37. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpu-impl.h +531 -0
  38. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpu-quants.h +63 -0
  39. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpu-traits.h +38 -0
  40. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-cpu.h +138 -0
  41. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-impl.h +567 -0
  42. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-metal-impl.h +530 -0
  43. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-metal.h +66 -0
  44. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-opt.h +216 -0
  45. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-quants.h +100 -0
  46. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml-threading.h +14 -0
  47. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/ggml.h +2221 -0
  48. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/gguf.h +202 -0
  49. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/json-schema-to-grammar.h +21 -0
  50. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/json.hpp +24766 -0
  51. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-adapter.h +76 -0
  52. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-arch.h +421 -0
  53. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-batch.h +88 -0
  54. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-chat.h +53 -0
  55. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-context.h +265 -0
  56. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-cparams.h +38 -0
  57. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-cpp.h +30 -0
  58. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-grammar.h +173 -0
  59. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-graph.h +574 -0
  60. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-hparams.h +148 -0
  61. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-impl.h +61 -0
  62. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-io.h +35 -0
  63. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-kv-cache.h +287 -0
  64. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-memory.h +21 -0
  65. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-mmap.h +68 -0
  66. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-model-loader.h +167 -0
  67. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-model.h +403 -0
  68. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-sampling.h +32 -0
  69. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama-vocab.h +125 -0
  70. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/llama.h +1416 -0
  71. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/log.h +103 -0
  72. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/minja/chat-template.hpp +529 -0
  73. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/minja/minja.hpp +2915 -0
  74. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/sampling.h +107 -0
  75. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/sgemm.h +14 -0
  76. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/unicode-data.h +20 -0
  77. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/unicode.h +66 -0
  78. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Info.plist +0 -0
  79. package/ios/cactus.xcframework/ios-arm64/cactus.framework/cactus +0 -0
  80. package/ios/cactus.xcframework/ios-arm64/cactus.framework/ggml-llama.metallib +0 -0
  81. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/cactus.h +133 -0
  82. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/chat.h +143 -0
  83. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/common.h +683 -0
  84. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-alloc.h +76 -0
  85. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-backend-impl.h +255 -0
  86. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-backend.h +354 -0
  87. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-common.h +1851 -0
  88. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpp.h +39 -0
  89. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-aarch64.h +8 -0
  90. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-impl.h +531 -0
  91. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-quants.h +63 -0
  92. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-traits.h +38 -0
  93. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu.h +138 -0
  94. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-impl.h +567 -0
  95. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-metal-impl.h +530 -0
  96. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-metal.h +66 -0
  97. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-opt.h +216 -0
  98. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-quants.h +100 -0
  99. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml-threading.h +14 -0
  100. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/ggml.h +2221 -0
  101. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/gguf.h +202 -0
  102. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/json-schema-to-grammar.h +21 -0
  103. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/json.hpp +24766 -0
  104. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-adapter.h +76 -0
  105. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-arch.h +421 -0
  106. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-batch.h +88 -0
  107. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-chat.h +53 -0
  108. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-context.h +265 -0
  109. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-cparams.h +38 -0
  110. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-cpp.h +30 -0
  111. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-grammar.h +173 -0
  112. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-graph.h +574 -0
  113. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-hparams.h +148 -0
  114. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-impl.h +61 -0
  115. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-io.h +35 -0
  116. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-kv-cache.h +287 -0
  117. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-memory.h +21 -0
  118. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-mmap.h +68 -0
  119. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-model-loader.h +167 -0
  120. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-model.h +403 -0
  121. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-sampling.h +32 -0
  122. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama-vocab.h +125 -0
  123. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/llama.h +1416 -0
  124. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/log.h +103 -0
  125. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/minja/chat-template.hpp +529 -0
  126. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/minja/minja.hpp +2915 -0
  127. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/sampling.h +107 -0
  128. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/sgemm.h +14 -0
  129. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/unicode-data.h +20 -0
  130. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Headers/unicode.h +66 -0
  131. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/Info.plist +0 -0
  132. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/_CodeSignature/CodeResources +101 -0
  133. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/cactus +0 -0
  134. package/ios/cactus.xcframework/ios-arm64_x86_64-simulator/cactus.framework/ggml-llama-sim.metallib +0 -0
  135. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/cactus.h +133 -0
  136. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/chat.h +143 -0
  137. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/common.h +683 -0
  138. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-alloc.h +76 -0
  139. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-backend-impl.h +255 -0
  140. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-backend.h +354 -0
  141. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-common.h +1851 -0
  142. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpp.h +39 -0
  143. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpu-aarch64.h +8 -0
  144. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpu-impl.h +531 -0
  145. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpu-quants.h +63 -0
  146. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpu-traits.h +38 -0
  147. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-cpu.h +138 -0
  148. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-impl.h +567 -0
  149. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-metal-impl.h +530 -0
  150. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-metal.h +66 -0
  151. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-opt.h +216 -0
  152. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-quants.h +100 -0
  153. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml-threading.h +14 -0
  154. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/ggml.h +2221 -0
  155. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/gguf.h +202 -0
  156. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/json-schema-to-grammar.h +21 -0
  157. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/json.hpp +24766 -0
  158. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-adapter.h +76 -0
  159. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-arch.h +421 -0
  160. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-batch.h +88 -0
  161. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-chat.h +53 -0
  162. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-context.h +265 -0
  163. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-cparams.h +38 -0
  164. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-cpp.h +30 -0
  165. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-grammar.h +173 -0
  166. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-graph.h +574 -0
  167. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-hparams.h +148 -0
  168. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-impl.h +61 -0
  169. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-io.h +35 -0
  170. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-kv-cache.h +287 -0
  171. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-memory.h +21 -0
  172. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-mmap.h +68 -0
  173. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-model-loader.h +167 -0
  174. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-model.h +403 -0
  175. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-sampling.h +32 -0
  176. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama-vocab.h +125 -0
  177. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/llama.h +1416 -0
  178. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/log.h +103 -0
  179. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/minja/chat-template.hpp +529 -0
  180. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/minja/minja.hpp +2915 -0
  181. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/sampling.h +107 -0
  182. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/sgemm.h +14 -0
  183. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/unicode-data.h +20 -0
  184. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Headers/unicode.h +66 -0
  185. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/Info.plist +0 -0
  186. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/cactus +0 -0
  187. package/ios/cactus.xcframework/tvos-arm64/cactus.framework/ggml-llama.metallib +0 -0
  188. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/cactus.h +133 -0
  189. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/chat.h +143 -0
  190. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/common.h +683 -0
  191. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-alloc.h +76 -0
  192. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-backend-impl.h +255 -0
  193. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-backend.h +354 -0
  194. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-common.h +1851 -0
  195. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpp.h +39 -0
  196. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-aarch64.h +8 -0
  197. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-impl.h +531 -0
  198. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-quants.h +63 -0
  199. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu-traits.h +38 -0
  200. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-cpu.h +138 -0
  201. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-impl.h +567 -0
  202. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-metal-impl.h +530 -0
  203. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-metal.h +66 -0
  204. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-opt.h +216 -0
  205. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-quants.h +100 -0
  206. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml-threading.h +14 -0
  207. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/ggml.h +2221 -0
  208. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/gguf.h +202 -0
  209. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/json-schema-to-grammar.h +21 -0
  210. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/json.hpp +24766 -0
  211. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-adapter.h +76 -0
  212. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-arch.h +421 -0
  213. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-batch.h +88 -0
  214. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-chat.h +53 -0
  215. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-context.h +265 -0
  216. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-cparams.h +38 -0
  217. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-cpp.h +30 -0
  218. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-grammar.h +173 -0
  219. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-graph.h +574 -0
  220. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-hparams.h +148 -0
  221. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-impl.h +61 -0
  222. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-io.h +35 -0
  223. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-kv-cache.h +287 -0
  224. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-memory.h +21 -0
  225. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-mmap.h +68 -0
  226. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-model-loader.h +167 -0
  227. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-model.h +403 -0
  228. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-sampling.h +32 -0
  229. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama-vocab.h +125 -0
  230. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/llama.h +1416 -0
  231. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/log.h +103 -0
  232. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/minja/chat-template.hpp +529 -0
  233. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/minja/minja.hpp +2915 -0
  234. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/sampling.h +107 -0
  235. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/sgemm.h +14 -0
  236. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/unicode-data.h +20 -0
  237. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Headers/unicode.h +66 -0
  238. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/Info.plist +0 -0
  239. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/_CodeSignature/CodeResources +101 -0
  240. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/cactus +0 -0
  241. package/ios/cactus.xcframework/tvos-arm64_x86_64-simulator/cactus.framework/ggml-llama-sim.metallib +0 -0
  242. package/lib/commonjs/NativeCactus.js +9 -0
  243. package/lib/commonjs/NativeCactus.js.map +1 -0
  244. package/lib/commonjs/chat.js +37 -0
  245. package/lib/commonjs/chat.js.map +1 -0
  246. package/lib/commonjs/grammar.js +560 -0
  247. package/lib/commonjs/grammar.js.map +1 -0
  248. package/lib/commonjs/index.js +300 -0
  249. package/lib/commonjs/index.js.map +1 -0
  250. package/lib/commonjs/package.json +1 -0
  251. package/lib/module/NativeCactus.js +5 -0
  252. package/lib/module/NativeCactus.js.map +1 -0
  253. package/lib/module/chat.js +33 -0
  254. package/lib/module/chat.js.map +1 -0
  255. package/lib/module/grammar.js +553 -0
  256. package/lib/module/grammar.js.map +1 -0
  257. package/lib/module/index.js +277 -0
  258. package/lib/module/index.js.map +1 -0
  259. package/lib/module/package.json +1 -0
  260. package/lib/typescript/NativeCactus.d.ts +357 -0
  261. package/lib/typescript/NativeCactus.d.ts.map +1 -0
  262. package/lib/typescript/chat.d.ts +10 -0
  263. package/lib/typescript/chat.d.ts.map +1 -0
  264. package/lib/typescript/grammar.d.ts +37 -0
  265. package/lib/typescript/grammar.d.ts.map +1 -0
  266. package/lib/typescript/index.d.ts +96 -0
  267. package/lib/typescript/index.d.ts.map +1 -0
  268. package/package.json +223 -0
  269. package/src/NativeCactus.ts +418 -0
  270. package/src/chat.ts +44 -0
  271. package/src/grammar.ts +854 -0
  272. package/src/index.ts +482 -0
@@ -0,0 +1,579 @@
1
+ package com.cactus;
2
+
3
+ import com.facebook.react.bridge.Arguments;
4
+ import com.facebook.react.bridge.WritableArray;
5
+ import com.facebook.react.bridge.WritableMap;
6
+ import com.facebook.react.bridge.ReadableMap;
7
+ import com.facebook.react.bridge.ReadableArray;
8
+ import com.facebook.react.bridge.ReactApplicationContext;
9
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
10
+
11
+ import android.util.Log;
12
+ import android.os.Build;
13
+ import android.content.res.AssetManager;
14
+
15
+ import java.lang.StringBuilder;
16
+ import java.io.BufferedReader;
17
+ import java.io.FileReader;
18
+ import java.io.File;
19
+ import java.io.IOException;
20
+
21
+ public class LlamaContext {
22
+ public static final String NAME = "CactusContext";
23
+
24
+ private static String loadedLibrary = "";
25
+
26
+ private static class NativeLogCallback {
27
+ DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter;
28
+
29
+ public NativeLogCallback(ReactApplicationContext reactContext) {
30
+ this.eventEmitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
31
+ }
32
+
33
+ void emitNativeLog(String level, String text) {
34
+ WritableMap event = Arguments.createMap();
35
+ event.putString("level", level);
36
+ event.putString("text", text);
37
+ eventEmitter.emit("@Cactus_onNativeLog", event);
38
+ }
39
+ }
40
+
41
+ static void toggleNativeLog(ReactApplicationContext reactContext, boolean enabled) {
42
+ if (LlamaContext.isArchNotSupported()) {
43
+ throw new IllegalStateException("Only 64-bit architectures are supported");
44
+ }
45
+ if (enabled) {
46
+ setupLog(new NativeLogCallback(reactContext));
47
+ } else {
48
+ unsetLog();
49
+ }
50
+ }
51
+
52
+ private int id;
53
+ private ReactApplicationContext reactContext;
54
+ private long context;
55
+ private WritableMap modelDetails;
56
+ private int jobId = -1;
57
+ private DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter;
58
+
59
+ public LlamaContext(int id, ReactApplicationContext reactContext, ReadableMap params) {
60
+ if (LlamaContext.isArchNotSupported()) {
61
+ throw new IllegalStateException("Only 64-bit architectures are supported");
62
+ }
63
+ if (!params.hasKey("model")) {
64
+ throw new IllegalArgumentException("Missing required parameter: model");
65
+ }
66
+ eventEmitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
67
+ this.id = id;
68
+ this.context = initContext(
69
+ // String model,
70
+ params.getString("model"),
71
+ // String chat_template,
72
+ params.hasKey("chat_template") ? params.getString("chat_template") : "",
73
+ // String reasoning_format,
74
+ params.hasKey("reasoning_format") ? params.getString("reasoning_format") : "none",
75
+ // boolean embedding,
76
+ params.hasKey("embedding") ? params.getBoolean("embedding") : false,
77
+ // int embd_normalize,
78
+ params.hasKey("embd_normalize") ? params.getInt("embd_normalize") : -1,
79
+ // int n_ctx,
80
+ params.hasKey("n_ctx") ? params.getInt("n_ctx") : 512,
81
+ // int n_batch,
82
+ params.hasKey("n_batch") ? params.getInt("n_batch") : 512,
83
+ // int n_ubatch,
84
+ params.hasKey("n_ubatch") ? params.getInt("n_ubatch") : 512,
85
+ // int n_threads,
86
+ params.hasKey("n_threads") ? params.getInt("n_threads") : 0,
87
+ // int n_gpu_layers, // TODO: Support this
88
+ params.hasKey("n_gpu_layers") ? params.getInt("n_gpu_layers") : 0,
89
+ // boolean flash_attn,
90
+ params.hasKey("flash_attn") ? params.getBoolean("flash_attn") : false,
91
+ // String cache_type_k,
92
+ params.hasKey("cache_type_k") ? params.getString("cache_type_k") : "f16",
93
+ // String cache_type_v,
94
+ params.hasKey("cache_type_v") ? params.getString("cache_type_v") : "f16",
95
+ // boolean use_mlock,
96
+ params.hasKey("use_mlock") ? params.getBoolean("use_mlock") : true,
97
+ // boolean use_mmap,
98
+ params.hasKey("use_mmap") ? params.getBoolean("use_mmap") : true,
99
+ //boolean vocab_only,
100
+ params.hasKey("vocab_only") ? params.getBoolean("vocab_only") : false,
101
+ // String lora,
102
+ params.hasKey("lora") ? params.getString("lora") : "",
103
+ // float lora_scaled,
104
+ params.hasKey("lora_scaled") ? (float) params.getDouble("lora_scaled") : 1.0f,
105
+ // ReadableArray lora_adapters,
106
+ params.hasKey("lora_list") ? params.getArray("lora_list") : null,
107
+ // float rope_freq_base,
108
+ params.hasKey("rope_freq_base") ? (float) params.getDouble("rope_freq_base") : 0.0f,
109
+ // float rope_freq_scale
110
+ params.hasKey("rope_freq_scale") ? (float) params.getDouble("rope_freq_scale") : 0.0f,
111
+ // int pooling_type,
112
+ params.hasKey("pooling_type") ? params.getInt("pooling_type") : -1,
113
+ // LoadProgressCallback load_progress_callback
114
+ params.hasKey("use_progress_callback") ? new LoadProgressCallback(this) : null
115
+ );
116
+ if (this.context == -1) {
117
+ throw new IllegalStateException("Failed to initialize context");
118
+ }
119
+ this.modelDetails = loadModelDetails(this.context);
120
+ this.reactContext = reactContext;
121
+ }
122
+
123
+ public void interruptLoad() {
124
+ interruptLoad(this.context);
125
+ }
126
+
127
+ public long getContext() {
128
+ return context;
129
+ }
130
+
131
+ public WritableMap getModelDetails() {
132
+ return modelDetails;
133
+ }
134
+
135
+ public String getLoadedLibrary() {
136
+ return loadedLibrary;
137
+ }
138
+
139
+ public WritableMap getFormattedChatWithJinja(String messages, String chatTemplate, ReadableMap params) {
140
+ String jsonSchema = params.hasKey("json_schema") ? params.getString("json_schema") : "";
141
+ String tools = params.hasKey("tools") ? params.getString("tools") : "";
142
+ Boolean parallelToolCalls = params.hasKey("parallel_tool_calls") ? params.getBoolean("parallel_tool_calls") : false;
143
+ String toolChoice = params.hasKey("tool_choice") ? params.getString("tool_choice") : "";
144
+ return getFormattedChatWithJinja(
145
+ this.context,
146
+ messages,
147
+ chatTemplate == null ? "" : chatTemplate,
148
+ jsonSchema,
149
+ tools,
150
+ parallelToolCalls,
151
+ toolChoice
152
+ );
153
+ }
154
+
155
+ public String getFormattedChat(String messages, String chatTemplate) {
156
+ return getFormattedChat(this.context, messages, chatTemplate == null ? "" : chatTemplate);
157
+ }
158
+
159
+ private void emitLoadProgress(int progress) {
160
+ WritableMap event = Arguments.createMap();
161
+ event.putInt("contextId", LlamaContext.this.id);
162
+ event.putInt("progress", progress);
163
+ eventEmitter.emit("@Cactus_onInitContextProgress", event);
164
+ }
165
+
166
+ private static class LoadProgressCallback {
167
+ LlamaContext context;
168
+
169
+ public LoadProgressCallback(LlamaContext context) {
170
+ this.context = context;
171
+ }
172
+
173
+ void onLoadProgress(int progress) {
174
+ context.emitLoadProgress(progress);
175
+ }
176
+ }
177
+
178
+ private void emitPartialCompletion(WritableMap tokenResult) {
179
+ WritableMap event = Arguments.createMap();
180
+ event.putInt("contextId", LlamaContext.this.id);
181
+ event.putMap("tokenResult", tokenResult);
182
+ eventEmitter.emit("@Cactus_onToken", event);
183
+ }
184
+
185
+ private static class PartialCompletionCallback {
186
+ LlamaContext context;
187
+ boolean emitNeeded;
188
+
189
+ public PartialCompletionCallback(LlamaContext context, boolean emitNeeded) {
190
+ this.context = context;
191
+ this.emitNeeded = emitNeeded;
192
+ }
193
+
194
+ void onPartialCompletion(WritableMap tokenResult) {
195
+ if (!emitNeeded) return;
196
+ context.emitPartialCompletion(tokenResult);
197
+ }
198
+ }
199
+
200
+ public WritableMap loadSession(String path) {
201
+ if (path == null || path.isEmpty()) {
202
+ throw new IllegalArgumentException("File path is empty");
203
+ }
204
+ File file = new File(path);
205
+ if (!file.exists()) {
206
+ throw new IllegalArgumentException("File does not exist: " + path);
207
+ }
208
+ WritableMap result = loadSession(this.context, path);
209
+ if (result.hasKey("error")) {
210
+ throw new IllegalStateException(result.getString("error"));
211
+ }
212
+ return result;
213
+ }
214
+
215
+ public int saveSession(String path, int size) {
216
+ if (path == null || path.isEmpty()) {
217
+ throw new IllegalArgumentException("File path is empty");
218
+ }
219
+ return saveSession(this.context, path, size);
220
+ }
221
+
222
+ public WritableMap completion(ReadableMap params) {
223
+ if (!params.hasKey("prompt")) {
224
+ throw new IllegalArgumentException("Missing required parameter: prompt");
225
+ }
226
+
227
+ double[][] logit_bias = new double[0][0];
228
+ if (params.hasKey("logit_bias")) {
229
+ ReadableArray logit_bias_array = params.getArray("logit_bias");
230
+ logit_bias = new double[logit_bias_array.size()][];
231
+ for (int i = 0; i < logit_bias_array.size(); i++) {
232
+ ReadableArray logit_bias_row = logit_bias_array.getArray(i);
233
+ logit_bias[i] = new double[logit_bias_row.size()];
234
+ for (int j = 0; j < logit_bias_row.size(); j++) {
235
+ logit_bias[i][j] = logit_bias_row.getDouble(j);
236
+ }
237
+ }
238
+ }
239
+
240
+ WritableMap result = doCompletion(
241
+ this.context,
242
+ // String prompt,
243
+ params.getString("prompt"),
244
+ // int chat_format,
245
+ params.hasKey("chat_format") ? params.getInt("chat_format") : 0,
246
+ // String grammar,
247
+ params.hasKey("grammar") ? params.getString("grammar") : "",
248
+ // String json_schema,
249
+ params.hasKey("json_schema") ? params.getString("json_schema") : "",
250
+ // boolean grammar_lazy,
251
+ params.hasKey("grammar_lazy") ? params.getBoolean("grammar_lazy") : false,
252
+ // ReadableArray grammar_triggers,
253
+ params.hasKey("grammar_triggers") ? params.getArray("grammar_triggers") : null,
254
+ // ReadableArray preserved_tokens,
255
+ params.hasKey("preserved_tokens") ? params.getArray("preserved_tokens") : null,
256
+ // float temperature,
257
+ params.hasKey("temperature") ? (float) params.getDouble("temperature") : 0.7f,
258
+ // int n_threads,
259
+ params.hasKey("n_threads") ? params.getInt("n_threads") : 0,
260
+ // int n_predict,
261
+ params.hasKey("n_predict") ? params.getInt("n_predict") : -1,
262
+ // int n_probs,
263
+ params.hasKey("n_probs") ? params.getInt("n_probs") : 0,
264
+ // int penalty_last_n,
265
+ params.hasKey("penalty_last_n") ? params.getInt("penalty_last_n") : 64,
266
+ // float penalty_repeat,
267
+ params.hasKey("penalty_repeat") ? (float) params.getDouble("penalty_repeat") : 1.00f,
268
+ // float penalty_freq,
269
+ params.hasKey("penalty_freq") ? (float) params.getDouble("penalty_freq") : 0.00f,
270
+ // float penalty_present,
271
+ params.hasKey("penalty_present") ? (float) params.getDouble("penalty_present") : 0.00f,
272
+ // float mirostat,
273
+ params.hasKey("mirostat") ? (float) params.getDouble("mirostat") : 0.00f,
274
+ // float mirostat_tau,
275
+ params.hasKey("mirostat_tau") ? (float) params.getDouble("mirostat_tau") : 5.00f,
276
+ // float mirostat_eta,
277
+ params.hasKey("mirostat_eta") ? (float) params.getDouble("mirostat_eta") : 0.10f,
278
+ // int top_k,
279
+ params.hasKey("top_k") ? params.getInt("top_k") : 40,
280
+ // float top_p,
281
+ params.hasKey("top_p") ? (float) params.getDouble("top_p") : 0.95f,
282
+ // float min_p,
283
+ params.hasKey("min_p") ? (float) params.getDouble("min_p") : 0.05f,
284
+ // float xtc_threshold,
285
+ params.hasKey("xtc_threshold") ? (float) params.getDouble("xtc_threshold") : 0.00f,
286
+ // float xtc_probability,
287
+ params.hasKey("xtc_probability") ? (float) params.getDouble("xtc_probability") : 0.00f,
288
+ // float typical_p,
289
+ params.hasKey("typical_p") ? (float) params.getDouble("typical_p") : 1.00f,
290
+ // int seed,
291
+ params.hasKey("seed") ? params.getInt("seed") : -1,
292
+ // String[] stop,
293
+ params.hasKey("stop") ? params.getArray("stop").toArrayList().toArray(new String[0]) : new String[0],
294
+ // boolean ignore_eos,
295
+ params.hasKey("ignore_eos") ? params.getBoolean("ignore_eos") : false,
296
+ // double[][] logit_bias,
297
+ logit_bias,
298
+ // float dry_multiplier,
299
+ params.hasKey("dry_multiplier") ? (float) params.getDouble("dry_multiplier") : 0.00f,
300
+ // float dry_base,
301
+ params.hasKey("dry_base") ? (float) params.getDouble("dry_base") : 1.75f,
302
+ // int dry_allowed_length,
303
+ params.hasKey("dry_allowed_length") ? params.getInt("dry_allowed_length") : 2,
304
+ // int dry_penalty_last_n,
305
+ params.hasKey("dry_penalty_last_n") ? params.getInt("dry_penalty_last_n") : -1,
306
+ // float top_n_sigma,
307
+ params.hasKey("top_n_sigma") ? (float) params.getDouble("top_n_sigma") : -1.0f,
308
+ // String[] dry_sequence_breakers, when undef, we use the default definition from common.h
309
+ params.hasKey("dry_sequence_breakers") ? params.getArray("dry_sequence_breakers").toArrayList().toArray(new String[0]) : new String[]{"\n", ":", "\"", "*"},
310
+ // PartialCompletionCallback partial_completion_callback
311
+ new PartialCompletionCallback(
312
+ this,
313
+ params.hasKey("emit_partial_completion") ? params.getBoolean("emit_partial_completion") : false
314
+ )
315
+ );
316
+ if (result.hasKey("error")) {
317
+ throw new IllegalStateException(result.getString("error"));
318
+ }
319
+ return result;
320
+ }
321
+
322
+ public void stopCompletion() {
323
+ stopCompletion(this.context);
324
+ }
325
+
326
+ public boolean isPredicting() {
327
+ return isPredicting(this.context);
328
+ }
329
+
330
+ public WritableMap tokenize(String text) {
331
+ WritableMap result = Arguments.createMap();
332
+ result.putArray("tokens", tokenize(this.context, text));
333
+ return result;
334
+ }
335
+
336
+ public String detokenize(ReadableArray tokens) {
337
+ int[] toks = new int[tokens.size()];
338
+ for (int i = 0; i < tokens.size(); i++) {
339
+ toks[i] = (int) tokens.getDouble(i);
340
+ }
341
+ return detokenize(this.context, toks);
342
+ }
343
+
344
+ public WritableMap getEmbedding(String text, ReadableMap params) {
345
+ if (isEmbeddingEnabled(this.context) == false) {
346
+ throw new IllegalStateException("Embedding is not enabled");
347
+ }
348
+ WritableMap result = embedding(
349
+ this.context,
350
+ text,
351
+ // int embd_normalize,
352
+ params.hasKey("embd_normalize") ? params.getInt("embd_normalize") : -1
353
+ );
354
+ if (result.hasKey("error")) {
355
+ throw new IllegalStateException(result.getString("error"));
356
+ }
357
+ return result;
358
+ }
359
+
360
+ public String bench(int pp, int tg, int pl, int nr) {
361
+ return bench(this.context, pp, tg, pl, nr);
362
+ }
363
+
364
+ public int applyLoraAdapters(ReadableArray loraAdapters) {
365
+ int result = applyLoraAdapters(this.context, loraAdapters);
366
+ if (result != 0) {
367
+ throw new IllegalStateException("Failed to apply lora adapters");
368
+ }
369
+ return result;
370
+ }
371
+
372
+ public void removeLoraAdapters() {
373
+ removeLoraAdapters(this.context);
374
+ }
375
+
376
+ public WritableArray getLoadedLoraAdapters() {
377
+ return getLoadedLoraAdapters(this.context);
378
+ }
379
+
380
+ public void release() {
381
+ freeContext(context);
382
+ }
383
+
384
+ static {
385
+ Log.d(NAME, "Primary ABI: " + Build.SUPPORTED_ABIS[0]);
386
+
387
+ String cpuFeatures = LlamaContext.getCpuFeatures();
388
+ Log.d(NAME, "CPU features: " + cpuFeatures);
389
+ boolean hasFp16 = cpuFeatures.contains("fp16") || cpuFeatures.contains("fphp");
390
+ boolean hasDotProd = cpuFeatures.contains("dotprod") || cpuFeatures.contains("asimddp");
391
+ boolean hasSve = cpuFeatures.contains("sve");
392
+ boolean hasI8mm = cpuFeatures.contains("i8mm");
393
+ boolean isAtLeastArmV82 = cpuFeatures.contains("asimd") && cpuFeatures.contains("crc32") && cpuFeatures.contains("aes");
394
+ boolean isAtLeastArmV84 = cpuFeatures.contains("dcpop") && cpuFeatures.contains("uscat");
395
+ Log.d(NAME, "- hasFp16: " + hasFp16);
396
+ Log.d(NAME, "- hasDotProd: " + hasDotProd);
397
+ Log.d(NAME, "- hasSve: " + hasSve);
398
+ Log.d(NAME, "- hasI8mm: " + hasI8mm);
399
+ Log.d(NAME, "- isAtLeastArmV82: " + isAtLeastArmV82);
400
+ Log.d(NAME, "- isAtLeastArmV84: " + isAtLeastArmV84);
401
+
402
+ // TODO: Add runtime check for cpu features
403
+ if (LlamaContext.isArm64V8a()) {
404
+ if (hasDotProd && hasI8mm) {
405
+ Log.d(NAME, "Loading libcactus_v8_2_dotprod_i8mm.so");
406
+ System.loadLibrary("cactus_v8_2_dotprod_i8mm");
407
+ loadedLibrary = "cactus_v8_2_dotprod_i8mm";
408
+ } else if (hasDotProd) {
409
+ Log.d(NAME, "Loading libcactus_v8_2_dotprod.so");
410
+ System.loadLibrary("cactus_v8_2_dotprod");
411
+ loadedLibrary = "cactus_v8_2_dotprod";
412
+ } else if (hasI8mm) {
413
+ Log.d(NAME, "Loading libcactus_v8_2_i8mm.so");
414
+ System.loadLibrary("cactus_v8_2_i8mm");
415
+ loadedLibrary = "cactus_v8_2_i8mm";
416
+ } else if (hasFp16) {
417
+ Log.d(NAME, "Loading libcactus_v8_2.so");
418
+ System.loadLibrary("cactus_v8_2");
419
+ loadedLibrary = "cactus_v8_2";
420
+ } else {
421
+ Log.d(NAME, "Loading default libcactus_v8.so");
422
+ System.loadLibrary("cactus_v8");
423
+ loadedLibrary = "cactus_v8";
424
+ }
425
+ // Log.d(NAME, "Loading libcactus_v8_7.so with runtime feature detection");
426
+ // System.loadLibrary("cactus_v8_7");
427
+ } else if (LlamaContext.isX86_64()) {
428
+ Log.d(NAME, "Loading libcactus_x86_64.so");
429
+ System.loadLibrary("cactus_x86_64");
430
+ loadedLibrary = "cactus_x86_64";
431
+ } else {
432
+ Log.d(NAME, "ARM32 is not supported, skipping loading library");
433
+ }
434
+ }
435
+
436
+ private static boolean isArm64V8a() {
437
+ return Build.SUPPORTED_ABIS[0].equals("arm64-v8a");
438
+ }
439
+
440
+ private static boolean isX86_64() {
441
+ return Build.SUPPORTED_ABIS[0].equals("x86_64");
442
+ }
443
+
444
+ private static boolean isArchNotSupported() {
445
+ return isArm64V8a() == false && isX86_64() == false;
446
+ }
447
+
448
+ private static String getCpuFeatures() {
449
+ File file = new File("/proc/cpuinfo");
450
+ StringBuilder stringBuilder = new StringBuilder();
451
+ try {
452
+ BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
453
+ String line;
454
+ while ((line = bufferedReader.readLine()) != null) {
455
+ if (line.startsWith("Features")) {
456
+ stringBuilder.append(line);
457
+ break;
458
+ }
459
+ }
460
+ bufferedReader.close();
461
+ return stringBuilder.toString();
462
+ } catch (IOException e) {
463
+ Log.w(NAME, "Couldn't read /proc/cpuinfo", e);
464
+ return "";
465
+ }
466
+ }
467
+
468
+ protected static native WritableMap modelInfo(
469
+ String model,
470
+ String[] skip
471
+ );
472
+ protected static native long initContext(
473
+ String model,
474
+ String chat_template,
475
+ String reasoning_format,
476
+ boolean embedding,
477
+ int embd_normalize,
478
+ int n_ctx,
479
+ int n_batch,
480
+ int n_ubatch,
481
+ int n_threads,
482
+ int n_gpu_layers, // TODO: Support this
483
+ boolean flash_attn,
484
+ String cache_type_k,
485
+ String cache_type_v,
486
+ boolean use_mlock,
487
+ boolean use_mmap,
488
+ boolean vocab_only,
489
+ String lora,
490
+ float lora_scaled,
491
+ ReadableArray lora_list,
492
+ float rope_freq_base,
493
+ float rope_freq_scale,
494
+ int pooling_type,
495
+ LoadProgressCallback load_progress_callback
496
+ );
497
+ protected static native void interruptLoad(long contextPtr);
498
+ protected static native WritableMap loadModelDetails(
499
+ long contextPtr
500
+ );
501
+ protected static native WritableMap getFormattedChatWithJinja(
502
+ long contextPtr,
503
+ String messages,
504
+ String chatTemplate,
505
+ String jsonSchema,
506
+ String tools,
507
+ boolean parallelToolCalls,
508
+ String toolChoice
509
+ );
510
+ protected static native String getFormattedChat(
511
+ long contextPtr,
512
+ String messages,
513
+ String chatTemplate
514
+ );
515
+ protected static native WritableMap loadSession(
516
+ long contextPtr,
517
+ String path
518
+ );
519
+ protected static native int saveSession(
520
+ long contextPtr,
521
+ String path,
522
+ int size
523
+ );
524
+ protected static native WritableMap doCompletion(
525
+ long context_ptr,
526
+ String prompt,
527
+ int chat_format,
528
+ String grammar,
529
+ String json_schema,
530
+ boolean grammar_lazy,
531
+ ReadableArray grammar_triggers,
532
+ ReadableArray preserved_tokens,
533
+ float temperature,
534
+ int n_threads,
535
+ int n_predict,
536
+ int n_probs,
537
+ int penalty_last_n,
538
+ float penalty_repeat,
539
+ float penalty_freq,
540
+ float penalty_present,
541
+ float mirostat,
542
+ float mirostat_tau,
543
+ float mirostat_eta,
544
+ int top_k,
545
+ float top_p,
546
+ float min_p,
547
+ float xtc_threshold,
548
+ float xtc_probability,
549
+ float typical_p,
550
+ int seed,
551
+ String[] stop,
552
+ boolean ignore_eos,
553
+ double[][] logit_bias,
554
+ float dry_multiplier,
555
+ float dry_base,
556
+ int dry_allowed_length,
557
+ int dry_penalty_last_n,
558
+ float top_n_sigma,
559
+ String[] dry_sequence_breakers,
560
+ PartialCompletionCallback partial_completion_callback
561
+ );
562
+ protected static native void stopCompletion(long contextPtr);
563
+ protected static native boolean isPredicting(long contextPtr);
564
+ protected static native WritableArray tokenize(long contextPtr, String text);
565
+ protected static native String detokenize(long contextPtr, int[] tokens);
566
+ protected static native boolean isEmbeddingEnabled(long contextPtr);
567
+ protected static native WritableMap embedding(
568
+ long contextPtr,
569
+ String text,
570
+ int embd_normalize
571
+ );
572
+ protected static native String bench(long contextPtr, int pp, int tg, int pl, int nr);
573
+ protected static native int applyLoraAdapters(long contextPtr, ReadableArray loraAdapters);
574
+ protected static native void removeLoraAdapters(long contextPtr);
575
+ protected static native WritableArray getLoadedLoraAdapters(long contextPtr);
576
+ protected static native void freeContext(long contextPtr);
577
+ protected static native void setupLog(NativeLogCallback logCallback);
578
+ protected static native void unsetLog();
579
+ }
@@ -0,0 +1,100 @@
1
+ #include <jni.h>
2
+
3
+ // ReadableMap utils
4
+
5
+ namespace readablearray {
6
+
7
+ int size(JNIEnv *env, jobject readableArray) {
8
+ jclass arrayClass = env->GetObjectClass(readableArray);
9
+ jmethodID sizeMethod = env->GetMethodID(arrayClass, "size", "()I");
10
+ return env->CallIntMethod(readableArray, sizeMethod);
11
+ }
12
+
13
+ jobject getMap(JNIEnv *env, jobject readableArray, int index) {
14
+ jclass arrayClass = env->GetObjectClass(readableArray);
15
+ jmethodID getMapMethod = env->GetMethodID(arrayClass, "getMap", "(I)Lcom/facebook/react/bridge/ReadableMap;");
16
+ return env->CallObjectMethod(readableArray, getMapMethod, index);
17
+ }
18
+
19
+ jstring getString(JNIEnv *env, jobject readableArray, int index) {
20
+ jclass arrayClass = env->GetObjectClass(readableArray);
21
+ jmethodID getStringMethod = env->GetMethodID(arrayClass, "getString", "(I)Ljava/lang/String;");
22
+ return (jstring) env->CallObjectMethod(readableArray, getStringMethod, index);
23
+ }
24
+
25
+ // Other methods not used yet
26
+
27
+ }
28
+
29
+ namespace readablemap {
30
+
31
+ bool hasKey(JNIEnv *env, jobject readableMap, const char *key) {
32
+ jclass mapClass = env->GetObjectClass(readableMap);
33
+ jmethodID hasKeyMethod = env->GetMethodID(mapClass, "hasKey", "(Ljava/lang/String;)Z");
34
+ jstring jKey = env->NewStringUTF(key);
35
+ jboolean result = env->CallBooleanMethod(readableMap, hasKeyMethod, jKey);
36
+ env->DeleteLocalRef(jKey);
37
+ return result;
38
+ }
39
+
40
+ int getInt(JNIEnv *env, jobject readableMap, const char *key, jint defaultValue) {
41
+ if (!hasKey(env, readableMap, key)) {
42
+ return defaultValue;
43
+ }
44
+ jclass mapClass = env->GetObjectClass(readableMap);
45
+ jmethodID getIntMethod = env->GetMethodID(mapClass, "getInt", "(Ljava/lang/String;)I");
46
+ jstring jKey = env->NewStringUTF(key);
47
+ jint result = env->CallIntMethod(readableMap, getIntMethod, jKey);
48
+ env->DeleteLocalRef(jKey);
49
+ return result;
50
+ }
51
+
52
+ bool getBool(JNIEnv *env, jobject readableMap, const char *key, jboolean defaultValue) {
53
+ if (!hasKey(env, readableMap, key)) {
54
+ return defaultValue;
55
+ }
56
+ jclass mapClass = env->GetObjectClass(readableMap);
57
+ jmethodID getBoolMethod = env->GetMethodID(mapClass, "getBoolean", "(Ljava/lang/String;)Z");
58
+ jstring jKey = env->NewStringUTF(key);
59
+ jboolean result = env->CallBooleanMethod(readableMap, getBoolMethod, jKey);
60
+ env->DeleteLocalRef(jKey);
61
+ return result;
62
+ }
63
+
64
+ long getLong(JNIEnv *env, jobject readableMap, const char *key, jlong defaultValue) {
65
+ if (!hasKey(env, readableMap, key)) {
66
+ return defaultValue;
67
+ }
68
+ jclass mapClass = env->GetObjectClass(readableMap);
69
+ jmethodID getLongMethod = env->GetMethodID(mapClass, "getLong", "(Ljava/lang/String;)J");
70
+ jstring jKey = env->NewStringUTF(key);
71
+ jlong result = env->CallLongMethod(readableMap, getLongMethod, jKey);
72
+ env->DeleteLocalRef(jKey);
73
+ return result;
74
+ }
75
+
76
+ float getFloat(JNIEnv *env, jobject readableMap, const char *key, jfloat defaultValue) {
77
+ if (!hasKey(env, readableMap, key)) {
78
+ return defaultValue;
79
+ }
80
+ jclass mapClass = env->GetObjectClass(readableMap);
81
+ jmethodID getFloatMethod = env->GetMethodID(mapClass, "getDouble", "(Ljava/lang/String;)D");
82
+ jstring jKey = env->NewStringUTF(key);
83
+ jfloat result = env->CallDoubleMethod(readableMap, getFloatMethod, jKey);
84
+ env->DeleteLocalRef(jKey);
85
+ return result;
86
+ }
87
+
88
+ jstring getString(JNIEnv *env, jobject readableMap, const char *key, jstring defaultValue) {
89
+ if (!hasKey(env, readableMap, key)) {
90
+ return defaultValue;
91
+ }
92
+ jclass mapClass = env->GetObjectClass(readableMap);
93
+ jmethodID getStringMethod = env->GetMethodID(mapClass, "getString", "(Ljava/lang/String;)Ljava/lang/String;");
94
+ jstring jKey = env->NewStringUTF(key);
95
+ jstring result = (jstring) env->CallObjectMethod(readableMap, getStringMethod, jKey);
96
+ env->DeleteLocalRef(jKey);
97
+ return result;
98
+ }
99
+
100
+ }