local-llm-rn 1.0.0 → 1.0.3

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 (477) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +321 -0
  3. package/android/build.gradle.kts +169 -0
  4. package/android/proguard-rules.pro +14 -0
  5. package/android/src/main/AndroidManifest.xml +2 -0
  6. package/android/src/main/cpp/CMakeLists.txt +71 -0
  7. package/android/src/main/cpp/LocalLLM.cpp +1412 -0
  8. package/android/src/main/java/com/hilum/localllm/LocalLLMModule.kt +656 -0
  9. package/android/src/main/java/com/hilum/localllm/LocalLLMPackage.kt +26 -0
  10. package/cpp/CMakeLists.txt +10 -0
  11. package/cpp/LICENSE +21 -0
  12. package/cpp/cmake/arm64-apple-clang.cmake +16 -0
  13. package/cpp/cmake/arm64-windows-llvm.cmake +16 -0
  14. package/cpp/cmake/build-info.cmake +48 -0
  15. package/cpp/cmake/common.cmake +58 -0
  16. package/cpp/cmake/download-models.cmake +21 -0
  17. package/cpp/cmake/git-vars.cmake +22 -0
  18. package/cpp/cmake/license.cmake +40 -0
  19. package/cpp/cmake/llama-config.cmake.in +30 -0
  20. package/cpp/cmake/llama.pc.in +10 -0
  21. package/cpp/cmake/riscv64-spacemit-linux-gnu-gcc.cmake +29 -0
  22. package/cpp/cmake/x64-windows-llvm.cmake +5 -0
  23. package/cpp/common/CMakeLists.txt +1 -1
  24. package/cpp/common/build-info.cpp +4 -0
  25. package/cpp/common/jinja/README.md +1 -1
  26. package/cpp/common/jinja/string.cpp +1 -1
  27. package/cpp/common/jinja/value.h +1 -1
  28. package/cpp/ggml/src/ggml-cpu/CMakeLists.txt +49 -39
  29. package/cpp/ggml/src/ggml-cpu/kleidiai/kernels.cpp +21 -20
  30. package/cpp/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +965 -252
  31. package/cpp/ggml/src/ggml-cpu/llamafile/sgemm.cpp +15 -1
  32. package/cpp/ggml/src/ggml-vulkan/CMakeLists.txt +265 -0
  33. package/cpp/ggml/src/ggml-vulkan/cmake/host-toolchain.cmake.in +16 -0
  34. package/cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp +16886 -0
  35. package/cpp/ggml/src/ggml-vulkan/vma/vk_mem_alloc.h +19530 -0
  36. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +35 -0
  37. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/abs.comp +21 -0
  38. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/acc.comp +37 -0
  39. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/add.comp +69 -0
  40. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/add1.comp +28 -0
  41. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/add_id.comp +42 -0
  42. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/arange.comp +20 -0
  43. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp +60 -0
  44. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp +86 -0
  45. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/argsort_large.comp +114 -0
  46. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/ceil.comp +22 -0
  47. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/clamp.comp +17 -0
  48. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/concat.comp +41 -0
  49. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/contig_copy.comp +49 -0
  50. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_dw.comp +105 -0
  51. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +347 -0
  52. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/conv_transpose_1d.comp +98 -0
  53. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/copy.comp +23 -0
  54. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/copy_from_quant.comp +51 -0
  55. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/copy_to_quant.comp +296 -0
  56. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/copy_transpose.comp +67 -0
  57. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/cos.comp +17 -0
  58. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/count_equal.comp +31 -0
  59. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/count_experts.comp +51 -0
  60. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/cumsum.comp +83 -0
  61. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/cumsum_multipass1.comp +60 -0
  62. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/cumsum_multipass2.comp +66 -0
  63. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_f32.comp +20 -0
  64. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl +610 -0
  65. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl +734 -0
  66. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_head.glsl +13 -0
  67. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq1_m.comp +42 -0
  68. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq1_s.comp +35 -0
  69. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp +44 -0
  70. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp +43 -0
  71. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp +49 -0
  72. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp +40 -0
  73. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp +51 -0
  74. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq4_nl.comp +32 -0
  75. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq4_xs.comp +34 -0
  76. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_mxfp4.comp +32 -0
  77. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q2_k.comp +34 -0
  78. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q3_k.comp +42 -0
  79. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_0.comp +30 -0
  80. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_1.comp +32 -0
  81. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q4_k.comp +68 -0
  82. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_0.comp +34 -0
  83. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_1.comp +35 -0
  84. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q5_k.comp +70 -0
  85. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q6_k.comp +33 -0
  86. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q8_0.comp +31 -0
  87. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/diag.comp +29 -0
  88. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/diag_mask_inf.comp +34 -0
  89. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/div.comp +27 -0
  90. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp +21 -0
  91. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/bfloat16.comp +7 -0
  92. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat.comp +7 -0
  93. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat2.comp +7 -0
  94. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/integer_dot.comp +7 -0
  95. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/fill.comp +19 -0
  96. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +608 -0
  97. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.glsl +264 -0
  98. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +642 -0
  99. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +390 -0
  100. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_mask_opt.comp +162 -0
  101. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp +121 -0
  102. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/floor.comp +22 -0
  103. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/geglu.comp +13 -0
  104. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/geglu_erf.comp +27 -0
  105. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/geglu_quick.comp +11 -0
  106. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/gelu.comp +25 -0
  107. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/gelu_erf.comp +39 -0
  108. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/gelu_quick.comp +23 -0
  109. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl +66 -0
  110. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/generic_head.glsl +11 -0
  111. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/generic_unary_head.glsl +83 -0
  112. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp +42 -0
  113. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp +51 -0
  114. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/glu_head.glsl +19 -0
  115. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/glu_main.glsl +29 -0
  116. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/group_norm.comp +66 -0
  117. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/hardsigmoid.comp +22 -0
  118. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/hardswish.comp +22 -0
  119. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/im2col.comp +116 -0
  120. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/im2col_3d.comp +125 -0
  121. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/l2_norm.comp +44 -0
  122. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/leaky_relu.comp +22 -0
  123. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/log.comp +18 -0
  124. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul.comp +27 -0
  125. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_split_k_reduce.comp +48 -0
  126. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec.comp +169 -0
  127. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl +230 -0
  128. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iface.glsl +35 -0
  129. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq1_m.comp +132 -0
  130. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq1_s.comp +95 -0
  131. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp +90 -0
  132. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp +105 -0
  133. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp +87 -0
  134. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp +90 -0
  135. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp +88 -0
  136. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_nc.comp +124 -0
  137. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_p021.comp +156 -0
  138. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q2_k.comp +128 -0
  139. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q3_k.comp +132 -0
  140. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q4_k.comp +161 -0
  141. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q5_k.comp +165 -0
  142. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q6_k.comp +137 -0
  143. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +143 -0
  144. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl +494 -0
  145. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +464 -0
  146. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +624 -0
  147. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +606 -0
  148. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_id_funcs.glsl +74 -0
  149. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp +311 -0
  150. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl +454 -0
  151. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_shmem_types.glsl +78 -0
  152. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +195 -0
  153. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/neg.comp +20 -0
  154. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/norm.comp +44 -0
  155. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/opt_step_adamw.comp +42 -0
  156. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/opt_step_sgd.comp +22 -0
  157. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/pad.comp +64 -0
  158. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/pool2d.comp +74 -0
  159. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp +145 -0
  160. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/reglu.comp +9 -0
  161. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/relu.comp +21 -0
  162. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/repeat.comp +26 -0
  163. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/repeat_back.comp +37 -0
  164. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp +150 -0
  165. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_back.comp +55 -0
  166. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp +65 -0
  167. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/roll.comp +46 -0
  168. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl +207 -0
  169. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl +20 -0
  170. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp +17 -0
  171. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp +17 -0
  172. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp +17 -0
  173. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl +33 -0
  174. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp +17 -0
  175. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/round.comp +29 -0
  176. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/rte.glsl +5 -0
  177. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/scale.comp +24 -0
  178. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sgn.comp +21 -0
  179. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sigmoid.comp +20 -0
  180. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/silu.comp +22 -0
  181. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/silu_back.comp +26 -0
  182. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sin.comp +17 -0
  183. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max.comp +195 -0
  184. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_back.comp +54 -0
  185. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large1.comp +62 -0
  186. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large2.comp +79 -0
  187. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large3.comp +65 -0
  188. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/soft_max_large_common.glsl +53 -0
  189. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/softplus.comp +23 -0
  190. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/solve_tri.comp +81 -0
  191. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp +17 -0
  192. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/square.comp +17 -0
  193. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/ssm_conv.comp +50 -0
  194. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/ssm_scan.comp +124 -0
  195. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/step.comp +22 -0
  196. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sub.comp +29 -0
  197. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp +47 -0
  198. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.glsl +25 -0
  199. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/swiglu.comp +9 -0
  200. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/swiglu_oai.comp +14 -0
  201. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/tanh.comp +20 -0
  202. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/timestep_embedding.comp +42 -0
  203. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/topk_argsort.comp +118 -0
  204. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/topk_moe.comp +213 -0
  205. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/topk_nary_search.comp +246 -0
  206. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/tri.comp +43 -0
  207. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/trunc.comp +22 -0
  208. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +1784 -0
  209. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp +178 -0
  210. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/utils.glsl +25 -0
  211. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +1318 -0
  212. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/wkv6.comp +87 -0
  213. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/wkv7.comp +91 -0
  214. package/cpp/ggml/src/ggml-vulkan/vulkan-shaders/xielu.comp +35 -0
  215. package/cpp/hilum/CMakeLists.txt +58 -0
  216. package/cpp/hilum/hilum_llm.cpp +2186 -0
  217. package/cpp/hilum/hilum_llm.h +507 -0
  218. package/cpp/licenses/LICENSE-jsonhpp +21 -0
  219. package/cpp/mtmd/CMakeLists.txt +21 -12
  220. package/cpp/vendor/cpp-httplib/CMakeLists.txt +182 -0
  221. package/cpp/vendor/cpp-httplib/LICENSE +22 -0
  222. package/cpp/vendor/cpp-httplib/httplib.cpp +16164 -0
  223. package/cpp/vendor/cpp-httplib/httplib.h +3797 -0
  224. package/cpp/vendor/miniaudio/miniaudio.h +95747 -0
  225. package/ios/LocalLLM.h +5 -0
  226. package/ios/LocalLLM.mm +654 -623
  227. package/local-llm-rn.podspec +38 -8
  228. package/package.json +65 -6
  229. package/src/NativeLocalLLM.ts +32 -20
  230. package/src/cache.ts +149 -0
  231. package/src/device.ts +36 -10
  232. package/src/errors.ts +28 -0
  233. package/src/index.ts +10 -7
  234. package/src/local-llm.ts +147 -0
  235. package/src/model-manager.ts +94 -0
  236. package/src/native-bridge.ts +168 -24
  237. package/src/rn-downloader.ts +23 -4
  238. package/src/vision.ts +60 -0
  239. package/cpp/ggml/src/ggml-hexagon/CMakeLists.txt +0 -117
  240. package/cpp/ggml/src/ggml-hexagon/ggml-hexagon.cpp +0 -3232
  241. package/cpp/ggml/src/ggml-hexagon/htp/CMakeLists.txt +0 -45
  242. package/cpp/ggml/src/ggml-hexagon/htp/act-ops.c +0 -815
  243. package/cpp/ggml/src/ggml-hexagon/htp/argsort-ops.c +0 -281
  244. package/cpp/ggml/src/ggml-hexagon/htp/binary-ops.c +0 -827
  245. package/cpp/ggml/src/ggml-hexagon/htp/cmake-toolchain.cmake +0 -157
  246. package/cpp/ggml/src/ggml-hexagon/htp/cpy-ops.c +0 -251
  247. package/cpp/ggml/src/ggml-hexagon/htp/flash-attn-ops.c +0 -666
  248. package/cpp/ggml/src/ggml-hexagon/htp/get-rows-ops.c +0 -111
  249. package/cpp/ggml/src/ggml-hexagon/htp/hex-dma.c +0 -63
  250. package/cpp/ggml/src/ggml-hexagon/htp/hex-dma.h +0 -182
  251. package/cpp/ggml/src/ggml-hexagon/htp/hex-dump.h +0 -77
  252. package/cpp/ggml/src/ggml-hexagon/htp/hex-fastdiv.h +0 -37
  253. package/cpp/ggml/src/ggml-hexagon/htp/hex-utils.h +0 -51
  254. package/cpp/ggml/src/ggml-hexagon/htp/htp-ctx.h +0 -35
  255. package/cpp/ggml/src/ggml-hexagon/htp/htp-msg.h +0 -154
  256. package/cpp/ggml/src/ggml-hexagon/htp/htp-ops.h +0 -65
  257. package/cpp/ggml/src/ggml-hexagon/htp/htp_iface.idl +0 -16
  258. package/cpp/ggml/src/ggml-hexagon/htp/hvx-arith.h +0 -470
  259. package/cpp/ggml/src/ggml-hexagon/htp/hvx-base.h +0 -173
  260. package/cpp/ggml/src/ggml-hexagon/htp/hvx-copy.h +0 -245
  261. package/cpp/ggml/src/ggml-hexagon/htp/hvx-div.h +0 -116
  262. package/cpp/ggml/src/ggml-hexagon/htp/hvx-dump.h +0 -129
  263. package/cpp/ggml/src/ggml-hexagon/htp/hvx-exp.h +0 -215
  264. package/cpp/ggml/src/ggml-hexagon/htp/hvx-floor.h +0 -100
  265. package/cpp/ggml/src/ggml-hexagon/htp/hvx-inverse.h +0 -176
  266. package/cpp/ggml/src/ggml-hexagon/htp/hvx-reduce.h +0 -266
  267. package/cpp/ggml/src/ggml-hexagon/htp/hvx-scale.h +0 -133
  268. package/cpp/ggml/src/ggml-hexagon/htp/hvx-sigmoid.h +0 -141
  269. package/cpp/ggml/src/ggml-hexagon/htp/hvx-sqrt.h +0 -126
  270. package/cpp/ggml/src/ggml-hexagon/htp/hvx-types.h +0 -36
  271. package/cpp/ggml/src/ggml-hexagon/htp/hvx-utils.h +0 -18
  272. package/cpp/ggml/src/ggml-hexagon/htp/main.c +0 -1150
  273. package/cpp/ggml/src/ggml-hexagon/htp/matmul-ops.c +0 -2595
  274. package/cpp/ggml/src/ggml-hexagon/htp/rope-ops.c +0 -498
  275. package/cpp/ggml/src/ggml-hexagon/htp/set-rows-ops.c +0 -167
  276. package/cpp/ggml/src/ggml-hexagon/htp/softmax-ops.c +0 -421
  277. package/cpp/ggml/src/ggml-hexagon/htp/sum-rows-ops.c +0 -130
  278. package/cpp/ggml/src/ggml-hexagon/htp/unary-ops.c +0 -384
  279. package/cpp/ggml/src/ggml-hexagon/htp/worker-pool.c +0 -293
  280. package/cpp/ggml/src/ggml-hexagon/htp/worker-pool.h +0 -57
  281. package/cpp/ggml/src/ggml-hexagon/htp-drv.cpp +0 -418
  282. package/cpp/ggml/src/ggml-hexagon/htp-drv.h +0 -121
  283. package/cpp/ggml/src/ggml-hexagon/libdl.h +0 -79
  284. package/cpp/ggml/src/ggml-hexagon/libggml-htp.inf +0 -38
  285. package/cpp/ggml/src/ggml-hexagon/op-desc.h +0 -153
  286. package/cpp/ggml/src/ggml-musa/CMakeLists.txt +0 -125
  287. package/cpp/ggml/src/ggml-musa/mudnn.cu +0 -112
  288. package/cpp/ggml/src/ggml-musa/mudnn.cuh +0 -12
  289. package/cpp/ggml/src/ggml-opencl/CMakeLists.txt +0 -150
  290. package/cpp/ggml/src/ggml-opencl/ggml-opencl.cpp +0 -11553
  291. package/cpp/ggml/src/ggml-opencl/kernels/add.cl +0 -190
  292. package/cpp/ggml/src/ggml-opencl/kernels/add_id.cl +0 -42
  293. package/cpp/ggml/src/ggml-opencl/kernels/argsort.cl +0 -86
  294. package/cpp/ggml/src/ggml-opencl/kernels/clamp.cl +0 -20
  295. package/cpp/ggml/src/ggml-opencl/kernels/concat.cl +0 -51
  296. package/cpp/ggml/src/ggml-opencl/kernels/conv2d.cl +0 -185
  297. package/cpp/ggml/src/ggml-opencl/kernels/conv2d_f16_f32.cl +0 -176
  298. package/cpp/ggml/src/ggml-opencl/kernels/cpy.cl +0 -184
  299. package/cpp/ggml/src/ggml-opencl/kernels/cvt.cl +0 -417
  300. package/cpp/ggml/src/ggml-opencl/kernels/diag_mask_inf.cl +0 -58
  301. package/cpp/ggml/src/ggml-opencl/kernels/div.cl +0 -138
  302. package/cpp/ggml/src/ggml-opencl/kernels/embed_kernel.py +0 -26
  303. package/cpp/ggml/src/ggml-opencl/kernels/expm1.cl +0 -113
  304. package/cpp/ggml/src/ggml-opencl/kernels/fill.cl +0 -17
  305. package/cpp/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl +0 -370
  306. package/cpp/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl +0 -371
  307. package/cpp/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl +0 -373
  308. package/cpp/ggml/src/ggml-opencl/kernels/gelu.cl +0 -89
  309. package/cpp/ggml/src/ggml-opencl/kernels/gemm_moe_mxfp4_f32.cl +0 -162
  310. package/cpp/ggml/src/ggml-opencl/kernels/gemv_moe_mxfp4_f32.cl +0 -156
  311. package/cpp/ggml/src/ggml-opencl/kernels/gemv_noshuffle.cl +0 -268
  312. package/cpp/ggml/src/ggml-opencl/kernels/gemv_noshuffle_general.cl +0 -274
  313. package/cpp/ggml/src/ggml-opencl/kernels/gemv_noshuffle_general_q8_0_f32.cl +0 -195
  314. package/cpp/ggml/src/ggml-opencl/kernels/get_rows.cl +0 -187
  315. package/cpp/ggml/src/ggml-opencl/kernels/glu.cl +0 -378
  316. package/cpp/ggml/src/ggml-opencl/kernels/group_norm.cl +0 -121
  317. package/cpp/ggml/src/ggml-opencl/kernels/im2col_f16.cl +0 -57
  318. package/cpp/ggml/src/ggml-opencl/kernels/im2col_f32.cl +0 -57
  319. package/cpp/ggml/src/ggml-opencl/kernels/mean.cl +0 -140
  320. package/cpp/ggml/src/ggml-opencl/kernels/mul.cl +0 -152
  321. package/cpp/ggml/src/ggml-opencl/kernels/mul_mat_Ab_Bi_8x4.cl +0 -139
  322. package/cpp/ggml/src/ggml-opencl/kernels/mul_mat_f16_f32.cl +0 -130
  323. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_f16_f32_kq_kqv.cl +0 -273
  324. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_f16_f32_l4_lm.cl +0 -146
  325. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_f32_f32_l4_lm.cl +0 -147
  326. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_q4_0_f32_l4_lm.cl +0 -163
  327. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_q4_1_f32_l4_lm.cl +0 -165
  328. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_q6_k_f32_l4_lm.cl +0 -158
  329. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_q8_0_f32_8x4.cl +0 -129
  330. package/cpp/ggml/src/ggml-opencl/kernels/mul_mm_q8_0_f32_l4_lm.cl +0 -154
  331. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_f16_f16.cl +0 -118
  332. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32.cl +0 -118
  333. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_1row.cl +0 -94
  334. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_l4.cl +0 -84
  335. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_f32_f32.cl +0 -118
  336. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl +0 -189
  337. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32_flat.cl +0 -176
  338. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl +0 -283
  339. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_id_q8_0_f32.cl +0 -140
  340. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_id_q8_0_f32_flat.cl +0 -222
  341. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl +0 -144
  342. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32_flat.cl +0 -167
  343. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32.cl +0 -192
  344. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_1d_16x_flat.cl +0 -307
  345. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_1d_8x_flat.cl +0 -265
  346. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_8x_flat.cl +0 -272
  347. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_0_f32_v.cl +0 -254
  348. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_1_f32.cl +0 -219
  349. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_1_f32_flat.cl +0 -229
  350. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q4_k_f32.cl +0 -180
  351. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32.cl +0 -194
  352. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32_flat.cl +0 -194
  353. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q8_0_f32.cl +0 -125
  354. package/cpp/ggml/src/ggml-opencl/kernels/mul_mv_q8_0_f32_flat.cl +0 -202
  355. package/cpp/ggml/src/ggml-opencl/kernels/norm.cl +0 -161
  356. package/cpp/ggml/src/ggml-opencl/kernels/pad.cl +0 -39
  357. package/cpp/ggml/src/ggml-opencl/kernels/relu.cl +0 -16
  358. package/cpp/ggml/src/ggml-opencl/kernels/repeat.cl +0 -38
  359. package/cpp/ggml/src/ggml-opencl/kernels/rms_norm.cl +0 -190
  360. package/cpp/ggml/src/ggml-opencl/kernels/rope.cl +0 -747
  361. package/cpp/ggml/src/ggml-opencl/kernels/scale.cl +0 -27
  362. package/cpp/ggml/src/ggml-opencl/kernels/set_rows.cl +0 -208
  363. package/cpp/ggml/src/ggml-opencl/kernels/sigmoid.cl +0 -29
  364. package/cpp/ggml/src/ggml-opencl/kernels/silu.cl +0 -30
  365. package/cpp/ggml/src/ggml-opencl/kernels/softmax_4_f16.cl +0 -108
  366. package/cpp/ggml/src/ggml-opencl/kernels/softmax_4_f32.cl +0 -108
  367. package/cpp/ggml/src/ggml-opencl/kernels/softmax_f16.cl +0 -107
  368. package/cpp/ggml/src/ggml-opencl/kernels/softmax_f32.cl +0 -107
  369. package/cpp/ggml/src/ggml-opencl/kernels/softplus.cl +0 -116
  370. package/cpp/ggml/src/ggml-opencl/kernels/solve_tri.cl +0 -51
  371. package/cpp/ggml/src/ggml-opencl/kernels/sqr.cl +0 -53
  372. package/cpp/ggml/src/ggml-opencl/kernels/sqrt.cl +0 -53
  373. package/cpp/ggml/src/ggml-opencl/kernels/ssm_conv.cl +0 -77
  374. package/cpp/ggml/src/ggml-opencl/kernels/sub.cl +0 -138
  375. package/cpp/ggml/src/ggml-opencl/kernels/sum_rows.cl +0 -140
  376. package/cpp/ggml/src/ggml-opencl/kernels/tanh.cl +0 -109
  377. package/cpp/ggml/src/ggml-opencl/kernels/transpose.cl +0 -117
  378. package/cpp/ggml/src/ggml-opencl/kernels/tri.cl +0 -32
  379. package/cpp/ggml/src/ggml-opencl/kernels/tsembd.cl +0 -48
  380. package/cpp/ggml/src/ggml-opencl/kernels/upscale.cl +0 -120
  381. package/cpp/ggml/src/ggml-rpc/CMakeLists.txt +0 -9
  382. package/cpp/ggml/src/ggml-rpc/ggml-rpc.cpp +0 -2118
  383. package/cpp/ggml/src/ggml-virtgpu/CMakeLists.txt +0 -70
  384. package/cpp/ggml/src/ggml-virtgpu/apir_cs_ggml-rpc-front.cpp +0 -87
  385. package/cpp/ggml/src/ggml-virtgpu/backend/CMakeLists.txt +0 -21
  386. package/cpp/ggml/src/ggml-virtgpu/backend/apir_cs_ggml-rpc-back.cpp +0 -115
  387. package/cpp/ggml/src/ggml-virtgpu/backend/backend-convert.h +0 -13
  388. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-backend.cpp +0 -102
  389. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer-type.cpp +0 -105
  390. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-buffer.cpp +0 -179
  391. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched-device.cpp +0 -148
  392. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched.cpp +0 -51
  393. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched.gen.h +0 -73
  394. package/cpp/ggml/src/ggml-virtgpu/backend/backend-dispatched.h +0 -27
  395. package/cpp/ggml/src/ggml-virtgpu/backend/backend-virgl-apir.h +0 -32
  396. package/cpp/ggml/src/ggml-virtgpu/backend/backend.cpp +0 -144
  397. package/cpp/ggml/src/ggml-virtgpu/backend/shared/api_remoting.h +0 -95
  398. package/cpp/ggml/src/ggml-virtgpu/backend/shared/apir_backend.gen.h +0 -94
  399. package/cpp/ggml/src/ggml-virtgpu/backend/shared/apir_backend.h +0 -50
  400. package/cpp/ggml/src/ggml-virtgpu/backend/shared/apir_cs.h +0 -378
  401. package/cpp/ggml/src/ggml-virtgpu/backend/shared/apir_cs_ggml.h +0 -232
  402. package/cpp/ggml/src/ggml-virtgpu/backend/shared/apir_cs_rpc.h +0 -58
  403. package/cpp/ggml/src/ggml-virtgpu/ggml-backend-buffer-type.cpp +0 -81
  404. package/cpp/ggml/src/ggml-virtgpu/ggml-backend-buffer.cpp +0 -119
  405. package/cpp/ggml/src/ggml-virtgpu/ggml-backend-device.cpp +0 -158
  406. package/cpp/ggml/src/ggml-virtgpu/ggml-backend-reg.cpp +0 -213
  407. package/cpp/ggml/src/ggml-virtgpu/ggml-backend.cpp +0 -69
  408. package/cpp/ggml/src/ggml-virtgpu/ggml-remoting.h +0 -71
  409. package/cpp/ggml/src/ggml-virtgpu/ggmlremoting_functions.yaml +0 -166
  410. package/cpp/ggml/src/ggml-virtgpu/include/apir_hw.h +0 -9
  411. package/cpp/ggml/src/ggml-virtgpu/regenerate_remoting.py +0 -333
  412. package/cpp/ggml/src/ggml-virtgpu/virtgpu-apir.h +0 -15
  413. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward-backend.cpp +0 -58
  414. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward-buffer-type.cpp +0 -110
  415. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward-buffer.cpp +0 -173
  416. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward-device.cpp +0 -192
  417. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward-impl.h +0 -36
  418. package/cpp/ggml/src/ggml-virtgpu/virtgpu-forward.gen.h +0 -53
  419. package/cpp/ggml/src/ggml-virtgpu/virtgpu-shm.cpp +0 -98
  420. package/cpp/ggml/src/ggml-virtgpu/virtgpu-shm.h +0 -23
  421. package/cpp/ggml/src/ggml-virtgpu/virtgpu-utils.cpp +0 -179
  422. package/cpp/ggml/src/ggml-virtgpu/virtgpu-utils.h +0 -86
  423. package/cpp/ggml/src/ggml-virtgpu/virtgpu.cpp +0 -544
  424. package/cpp/ggml/src/ggml-virtgpu/virtgpu.h +0 -117
  425. package/cpp/ggml/src/ggml-webgpu/CMakeLists.txt +0 -80
  426. package/cpp/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +0 -1231
  427. package/cpp/ggml/src/ggml-webgpu/ggml-webgpu.cpp +0 -3150
  428. package/cpp/ggml/src/ggml-webgpu/pre_wgsl.hpp +0 -778
  429. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/argmax.wgsl +0 -72
  430. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/argsort.wgsl +0 -106
  431. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/argsort_merge.wgsl +0 -134
  432. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +0 -107
  433. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/common_decls.tmpl +0 -923
  434. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/cpy.tmpl.wgsl +0 -107
  435. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/cumsum.wgsl +0 -66
  436. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +0 -182
  437. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl +0 -636
  438. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +0 -668
  439. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/glu.tmpl.wgsl +0 -323
  440. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl +0 -40
  441. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl +0 -713
  442. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +0 -103
  443. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.wgsl +0 -138
  444. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.wgsl +0 -188
  445. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +0 -194
  446. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/pad.wgsl +0 -86
  447. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm.wgsl +0 -123
  448. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/rope.tmpl.wgsl +0 -295
  449. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl +0 -63
  450. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/set_rows.wgsl +0 -109
  451. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/soft_max.tmpl.wgsl +0 -345
  452. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/sum_rows.wgsl +0 -55
  453. package/cpp/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl +0 -193
  454. package/cpp/ggml/src/ggml-zdnn/CMakeLists.txt +0 -36
  455. package/cpp/ggml/src/ggml-zdnn/common.hpp +0 -59
  456. package/cpp/ggml/src/ggml-zdnn/ggml-zdnn.cpp +0 -633
  457. package/cpp/ggml/src/ggml-zdnn/mmf.cpp +0 -80
  458. package/cpp/ggml/src/ggml-zdnn/mmf.hpp +0 -12
  459. package/cpp/ggml/src/ggml-zdnn/utils.cpp +0 -79
  460. package/cpp/ggml/src/ggml-zdnn/utils.hpp +0 -19
  461. package/cpp/ggml/src/ggml-zendnn/CMakeLists.txt +0 -92
  462. package/cpp/ggml/src/ggml-zendnn/ggml-zendnn.cpp +0 -469
  463. package/cpp/mtmd/README.md +0 -63
  464. package/cpp/mtmd/legacy-models/convert_image_encoder_to_gguf.py +0 -412
  465. package/cpp/mtmd/legacy-models/glmedge-convert-image-encoder-to-gguf.py +0 -280
  466. package/cpp/mtmd/legacy-models/glmedge-surgery.py +0 -33
  467. package/cpp/mtmd/legacy-models/llava_surgery.py +0 -38
  468. package/cpp/mtmd/legacy-models/llava_surgery_v2.py +0 -180
  469. package/cpp/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py +0 -892
  470. package/cpp/mtmd/legacy-models/minicpmv-surgery.py +0 -47
  471. package/cpp/mtmd/mtmd-cli.cpp +0 -437
  472. package/cpp/mtmd/requirements.txt +0 -5
  473. package/cpp/mtmd/test-1.jpeg +0 -0
  474. package/cpp/mtmd/test-2.mp3 +0 -0
  475. package/cpp/mtmd/tests.sh +0 -192
  476. package/src/download-adapter.ts +0 -17
  477. /package/cpp/common/jinja/{string.h → jinja_string.h} +0 -0
@@ -1,713 +0,0 @@
1
- enable f16;
2
-
3
- #include "common_decls.tmpl"
4
-
5
- #ifdef FLOAT
6
- const BLOCK_SIZE = 1u;
7
-
8
- #elif defined(Q4_0) || defined(Q4_1) || defined(Q5_0) || defined(Q5_1) || defined(Q8_0) || defined(Q8_1) || defined(IQ4_NL)
9
- const BLOCK_SIZE = 32u;
10
-
11
- #elif defined(Q2_K) || defined(Q3_K) || defined(Q4_K) || defined(Q5_K) || defined(Q6_K) || defined(IQ2_XXS) || defined(IQ2_XS) || defined(IQ2_S) || defined(IQ3_XXS) || defined(IQ3_S) || defined(IQ1_S) || defined(IQ1_M) || defined(IQ4_XS)
12
- const BLOCK_SIZE = 256u;
13
- #endif
14
-
15
- #ifdef FLOAT
16
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
17
- return f32(src0[src0_idx_base + offset]) * f32(src1[src1_idx_base + offset]);
18
- }
19
- #endif
20
-
21
- #ifdef Q4_0
22
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
23
- let block_q4_0 = src0[src0_idx_base + offset];
24
- let d = f32(block_q4_0.d);
25
- var sum: f32 = 0.0;
26
- for (var j: u32 = 0; j < 4; j++) {
27
- let q_packed = bitcast<u32>(vec2(block_q4_0.qs[2 * j], block_q4_0.qs[2 * j + 1]));
28
- for (var k: u32 = 0; k < 4; k++) {
29
- let q_byte = get_byte(q_packed, k);
30
- let q_hi = (f32((q_byte >> 4) & 0xF) - 8.0f) * d;
31
- let q_lo = (f32(q_byte & 0xF) - 8.0f) * d;
32
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
33
- sum += q_lo * f32(src1[src1_offset]);
34
- sum += q_hi * f32(src1[src1_offset + 16]);
35
- }
36
- }
37
- return sum;
38
- }
39
- #endif
40
-
41
- #ifdef Q4_1
42
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
43
- let block_q4_1 = src0[src0_idx_base + offset];
44
- let d = f32(block_q4_1.d);
45
- let m = f32(block_q4_1.m);
46
- var sum: f32 = 0.0;
47
- for (var j: u32 = 0; j < 4; j++) {
48
- let q_packed = block_q4_1.qs[j];
49
- for (var k: u32 = 0; k < 4; k++) {
50
- let q_byte = get_byte(q_packed, k);
51
- let q_hi = f32((q_byte >> 4) & 0xF) * d + m;
52
- let q_lo = f32(q_byte & 0xF) * d + m;
53
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
54
- sum += q_lo * f32(src1[src1_offset]);
55
- sum += q_hi * f32(src1[src1_offset + 16]);
56
- }
57
- }
58
- return sum;
59
- }
60
- #endif
61
-
62
- #ifdef Q5_0
63
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
64
- let block_q5_0 = src0[src0_idx_base + offset];
65
- let d = f32(block_q5_0.d);
66
- var sum: f32 = 0.0;
67
- let qh_packed = bitcast<u32>(vec2(block_q5_0.qh[0], block_q5_0.qh[1]));
68
- for (var j: u32 = 0; j < 4; j++) {
69
- let q_packed = bitcast<u32>(vec2(block_q5_0.qs[2 * j], block_q5_0.qs[2 * j + 1]));
70
- for (var k: u32 = 0; k < 4; k++) {
71
- let q_byte = get_byte(q_packed, k);
72
- let qh_hi = (qh_packed >> (j * 4 + k + 12)) & 0x10;
73
- let q_hi = (f32(((q_byte >> 4) & 0xF) | qh_hi) - 16.0) * d;
74
- let qh_lo = ((qh_packed >> (j * 4 + k)) << 4) & 0x10;
75
- let q_lo = (f32((q_byte & 0xF) | qh_lo) - 16.0) * d;
76
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
77
- sum += q_lo * f32(src1[src1_offset]);
78
- sum += q_hi * f32(src1[src1_offset + 16]);
79
- }
80
- }
81
- return sum;
82
- }
83
- #endif
84
-
85
- #ifdef Q5_1
86
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
87
- let block_q5_1 = src0[src0_idx_base + offset];
88
- let d = f32(block_q5_1.d);
89
- let m = f32(block_q5_1.m);
90
- var sum: f32 = 0.0;
91
- for (var j: u32 = 0; j < 4; j++) {
92
- let q_packed = block_q5_1.qs[j];
93
- for (var k: u32 = 0; k < 4; k++) {
94
- let q_byte = get_byte(q_packed, k);
95
- let qh_hi = (block_q5_1.qh >> (j * 4 + k + 12)) & 0x10;
96
- let q_hi = f32(((q_byte >> 4) & 0xF) | qh_hi) * d + m;
97
- let qh_lo = ((block_q5_1.qh >> (j * 4 + k)) << 4) & 0x10;
98
- let q_lo = f32((q_byte & 0xF) | qh_lo) * d + m;
99
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
100
- sum += q_lo * f32(src1[src1_offset]);
101
- sum += q_hi * f32(src1[src1_offset + 16]);
102
- }
103
- }
104
- return sum;
105
- }
106
- #endif
107
-
108
- #ifdef Q8_0
109
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
110
- let block_q8_0 = src0[src0_idx_base + offset];
111
- let d = f32(block_q8_0.d);
112
- var sum: f32 = 0.0;
113
- for (var j: u32 = 0; j < 8; j++) {
114
- let q_packed = bitcast<u32>(vec2(block_q8_0.qs[2 * j], block_q8_0.qs[2 * j + 1]));
115
- for (var k: u32 = 0; k < 4; k++) {
116
- let q_byte = get_byte_i32(q_packed, k);
117
- let q_val = f32(q_byte) * d;
118
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
119
- sum += q_val * f32(src1[src1_offset]);
120
- }
121
- }
122
- return sum;
123
- }
124
- #endif
125
-
126
- #ifdef Q8_1
127
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
128
- let block_q8_1 = src0[src0_idx_base + offset];
129
- let d = f32(block_q8_1.d);
130
- let m = f32(block_q8_1.m);
131
- var sum: f32 = 0.0;
132
- for (var j: u32 = 0; j < 8; j++) {
133
- let q_packed = block_q8_1.qs[j];
134
- for (var k: u32 = 0; k < 4; k++) {
135
- let q_byte = get_byte_i32(q_packed, k);
136
- let q_val = f32(q_byte) * d + m;
137
- let src1_offset = src1_idx_base + offset * 32 + j * 4 + k;
138
- sum += q_val * f32(src1[src1_offset]);
139
- }
140
- }
141
- return sum;
142
- }
143
- #endif
144
-
145
- #ifdef Q2_K
146
- // 16 blocks of 16 elements each
147
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
148
- let block = src0[src0_idx_base + offset];
149
- let d = f32(block.d);
150
- let m = f32(block.dmin);
151
- var sum = 0.0;
152
- var src1_i = src1_idx_base + offset * 256;
153
- var is: u32 = 0;
154
- // 2 halves of the block (128 elements each)
155
- for (var q_b_idx: u32 = 0; q_b_idx < 64; q_b_idx += 32) {
156
- // 4 groups (each group has 2 blocks of 16 elements)
157
- for (var shift: u32 = 0; shift < 8; shift += 2) {
158
- // 2 blocks
159
- for (var k: u32 = 0; k < 32; k += 16) {
160
- let sc = get_byte(block.scales[is / 4], is % 4);
161
- is++;
162
- let dl = d * f32(sc & 0xF);
163
- let ml = m * f32(sc >> 4);
164
- for (var l: u32 = 0u; l < 16; l++) {
165
- let q_idx = q_b_idx + k + l;
166
- let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4);
167
- let qs_val = (q_byte >> shift) & 3;
168
- sum += (f32(qs_val) * dl - ml) * src1[src1_i];
169
- src1_i++;
170
- }
171
- }
172
- }
173
- }
174
- return sum;
175
- }
176
- #endif
177
-
178
- #ifdef Q3_K
179
- // 16 blocks of 16 elements each
180
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
181
- let block = src0[src0_idx_base + offset];
182
- let d = f32(block.d);
183
-
184
- // extract 6-bit scales, which consist of 4-bits from first 8 bytes of scale,
185
- // and 2-bits from the last 4 bytes
186
- let kmask1: u32 = 0x03030303;
187
- let kmask2: u32 = 0x0f0f0f0f;
188
- var scale_vals: array<u32, 4>;
189
- for (var i: u32 = 0; i < 4; i++) {
190
- scale_vals[i] = bitcast<u32>(vec2(block.scales[2 * i], block.scales[2 * i + 1]));
191
- }
192
- var tmp: u32 = scale_vals[2];
193
- scale_vals[2] = ((scale_vals[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4);
194
- scale_vals[3] = ((scale_vals[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4);
195
- scale_vals[0] = (scale_vals[0] & kmask2) | ((tmp & kmask1) << 4);
196
- scale_vals[1] = (scale_vals[1] & kmask2) | (((tmp >> 2) & kmask1) << 4);
197
-
198
- // convert arrays of f16 -> u32
199
- var hmask_vals: array<u32, 8>;
200
- for (var i: u32 = 0; i < 8; i++) {
201
- hmask_vals[i] = bitcast<u32>(vec2(block.hmask[2 * i], block.hmask[2 * i + 1]));
202
- }
203
- var qs_vals: array<u32, 16>;
204
- for (var i: u32 = 0; i < 16; i++) {
205
- qs_vals[i] = bitcast<u32>(vec2(block.qs[2 * i], block.qs[2 * i + 1]));
206
- }
207
-
208
- var sum = 0.0;
209
- var src1_i = src1_idx_base + offset * 256;
210
- var is: u32 = 0;
211
- var m: u32 = 1;
212
- // 2 halves of the block (128 elements each)
213
- for (var q_b_idx: u32 = 0; q_b_idx < 64; q_b_idx += 32) {
214
- // 4 groups (each group has 2 blocks of 16 elements)
215
- for (var shift: u32 = 0; shift < 8; shift += 2) {
216
- // 2 blocks
217
- for (var k: u32 = 0; k < 32; k += 16) {
218
- let sc = get_byte(scale_vals[is / 4], is % 4);
219
- is++;
220
- let dl = d * (f32(sc) - 32.0);
221
- for (var l: u32 = 0u; l < 16u; l++) {
222
- let q_idx = q_b_idx + k + l;
223
- let hm_idx = k + l;
224
- let q_byte = get_byte(qs_vals[q_idx / 4], q_idx % 4);
225
- let hmask_byte = get_byte(hmask_vals[hm_idx / 4], hm_idx % 4);
226
- let hm = select(4.0, 0.0, (hmask_byte & m) != 0);
227
- let qs_val = (q_byte >> shift) & 3;
228
- sum += ((f32(qs_val) - hm) * dl) * src1[src1_i];
229
- src1_i++;
230
- }
231
- }
232
- m <<= 1;
233
- }
234
- }
235
- return sum;
236
- }
237
- #endif
238
-
239
- #ifdef Q4_K
240
- // 8 blocks of 32 elements each
241
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
242
- let block = src0[src0_idx_base + offset];
243
- let d = f32(block.d);
244
- let m = f32(block.dmin);
245
- var sum = 0.0;
246
- var src1_i = src1_idx_base + offset * 256;
247
- var is: u32 = 0;
248
- // 2 blocks each iteration
249
- for (var q_b_idx: u32 = 0; q_b_idx < 128; q_b_idx += 32) {
250
- for (var shift: u32 = 0; shift < 8; shift += 4) {
251
- let scale_min = get_scale_min(is, block.scales);
252
- is++;
253
- let dl = d * scale_min.x;
254
- let ml = m * scale_min.y;
255
- for (var l: u32 = 0; l < 32; l++) {
256
- let q_idx = q_b_idx + l;
257
- let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4);
258
- let qs_val = (q_byte >> shift) & 0xF;
259
- sum += (f32(qs_val) * dl - ml) * src1[src1_i];
260
- src1_i++;
261
- }
262
- }
263
- }
264
- return sum;
265
- }
266
- #endif
267
-
268
- #ifdef Q5_K
269
- // 8 blocks of 32 elements each
270
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
271
- let block = src0[src0_idx_base + offset];
272
- let d = f32(block.d);
273
- let m = f32(block.dmin);
274
- var sum = 0.0;
275
- var src1_i = src1_idx_base + offset * 256;
276
- var is: u32 = 0;
277
- var u: u32 = 1;
278
- // 2 blocks each iteration
279
- for (var q_b_idx: u32 = 0; q_b_idx < 128; q_b_idx += 32) {
280
- for (var shift: u32 = 0; shift < 8; shift += 4) {
281
- let scale_min = get_scale_min(is, block.scales);
282
- is++;
283
- let dl = d * scale_min.x;
284
- let ml = m * scale_min.y;
285
- for (var l: u32 = 0; l < 32; l++) {
286
- let q_idx = q_b_idx + l;
287
- let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4);
288
- let qh_byte = get_byte(block.qh[l / 4], l % 4);
289
- let qs_val = (q_byte >> shift) & 0xF;
290
- let qh_val = select(0.0, 16.0, (qh_byte & u) != 0);
291
- sum += ((f32(qs_val) + qh_val) * dl - ml) * src1[src1_i];
292
- src1_i++;
293
- }
294
- u <<= 1;
295
- }
296
- }
297
- return sum;
298
- }
299
- #endif
300
-
301
- #ifdef Q6_K
302
- // 16 blocks of 16 elements each
303
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
304
- let block = src0[src0_idx_base + offset];
305
- let d = f32(block.d);
306
-
307
- // convert arrays of f16 -> u32
308
- var ql_vals: array<u32, 32>;
309
- for (var i: u32 = 0; i < 32; i++) {
310
- ql_vals[i] = bitcast<u32>(vec2(block.ql[2 * i], block.ql[2 * i + 1]));
311
- }
312
- var qh_vals: array<u32, 16>;
313
- for (var i: u32 = 0; i < 16; i++) {
314
- qh_vals[i] = bitcast<u32>(vec2(block.qh[2 * i], block.qh[2 * i + 1]));
315
- }
316
- var scale_vals: array<u32, 4>;
317
- for (var i: u32 = 0; i < 4; i++) {
318
- scale_vals[i] = bitcast<u32>(vec2(block.scales[2 * i], block.scales[2 * i + 1]));
319
- }
320
-
321
- var sum = 0.0;
322
- var src1_i = src1_idx_base + offset * 256;
323
- var qh_b_idx: u32 = 0;
324
- var sc_b_idx: u32 = 0;
325
- for (var ql_b_idx: u32 = 0; ql_b_idx < 128; ql_b_idx += 64) {
326
- for (var l: u32 = 0; l < 32; l++) {
327
- let ql13_b = get_byte(ql_vals[(ql_b_idx + l) / 4], (ql_b_idx + l) % 4);
328
- let ql24_b = get_byte(ql_vals[(ql_b_idx + l + 32) / 4], (ql_b_idx + l + 32) % 4);
329
- let qh_b = get_byte(qh_vals[(qh_b_idx + l) / 4], (qh_b_idx + l) % 4);
330
-
331
- let q1 = f32((ql13_b & 0xF) | ((qh_b & 3) << 4)) - 32.0;
332
- let q2 = f32((ql24_b & 0xF) | (((qh_b >> 2) & 3) << 4)) - 32.0;
333
- let q3 = f32((ql13_b >> 4) | (((qh_b >> 4) & 3) << 4)) - 32.0;
334
- let q4 = f32((ql24_b >> 4) | (((qh_b >> 6) & 3) << 4)) - 32.0;
335
-
336
- let is = l/16;
337
- let is1 = sc_b_idx + is;
338
- let sc1 = get_byte_i32(scale_vals[is1 / 4], is1 % 4);
339
- let is2 = sc_b_idx + is + 2;
340
- let sc2 = get_byte_i32(scale_vals[is2 / 4], is2 % 4);
341
- let is3 = sc_b_idx + is + 4;
342
- let sc3 = get_byte_i32(scale_vals[is3 / 4], is3 % 4);
343
- let is4 = sc_b_idx + is + 6;
344
- let sc4 = get_byte_i32(scale_vals[is4 / 4], is4 % 4);
345
-
346
- sum += d * f32(sc1) * q1 * src1[src1_i + l];
347
- sum += d * f32(sc2) * q2 * src1[src1_i + l + 32];
348
- sum += d * f32(sc3) * q3 * src1[src1_i + l + 64];
349
- sum += d * f32(sc4) * q4 * src1[src1_i + l + 96];
350
- }
351
- src1_i += 128;
352
- qh_b_idx += 32;
353
- sc_b_idx += 8;
354
- }
355
- return sum;
356
- }
357
- #endif
358
-
359
- #ifdef IQ2_XXS
360
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
361
- let block = src0[src0_idx_base + offset];
362
- let d = f32(block.d);
363
- var src1_i = src1_idx_base + offset * 256;
364
- var sum = 0.0;
365
- for (var ib: u32 = 0; ib < 32; ib += 4) {
366
- let aux0 = bitcast<u32>(vec2(block.qs[ib], block.qs[ib + 1]));
367
- let aux1 = bitcast<u32>(vec2(block.qs[ib + 2], block.qs[ib + 3]));
368
- let db = d * (0.5 + f32(aux1 >> 28)) * 0.25;
369
- for (var l: u32 = 0; l < 4; l++) {
370
- let ig = get_byte(aux0, l) * 8;
371
- let is = (aux1 >> (7 * l)) & 127;
372
- let signs = get_byte(ksigns_iq2xs[is / 4], is % 4);
373
- for (var j: u32 = 0; j < 8; j++) {
374
- let g = get_byte(iq2xxs_grid[(ig + j) / 4], (ig + j) % 4);
375
- let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0);
376
- sum += db * f32(g) * m * src1[src1_i];
377
- src1_i++;
378
- }
379
- }
380
- }
381
- return sum;
382
- }
383
- #endif
384
-
385
- #ifdef IQ2_XS
386
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
387
- let block = src0[src0_idx_base + offset];
388
- let d = f32(block.d);
389
- var src1_i = src1_idx_base + offset * 256;
390
- var scale_vals = array<u32, 2>(
391
- bitcast<u32>(vec2(block.scales[0], block.scales[1])),
392
- bitcast<u32>(vec2(block.scales[2], block.scales[3]))
393
- );
394
- var sum = 0.0;
395
- for (var ib: u32 = 0; ib < 32; ib += 4) {
396
- let s = get_byte(scale_vals[ib / 16], (ib % 16) / 4);
397
- let db = array<f32, 2>(
398
- d * (0.5 + f32(s & 0xF)) * 0.25,
399
- d * (0.5 + f32(s >> 4)) * 0.25
400
- );
401
- for (var l: u32 = 0; l < 4; l++) {
402
- let qs_val = bitcast<u32>(vec2(block.qs[ib + l], 0.0));
403
- let ig = (qs_val & 511) * 8;
404
- let is = qs_val >> 9;
405
- let signs = get_byte(ksigns_iq2xs[is / 4], is % 4);
406
- let dl = db[l/2];
407
- for (var j: u32 = 0; j < 8; j++) {
408
- let g = get_byte(iq2xs_grid[(ig + j) / 4], (ig + j) % 4);
409
- let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0);
410
- sum += dl * f32(g) * m * src1[src1_i];
411
- src1_i++;
412
- }
413
- }
414
- }
415
- return sum;
416
- }
417
- #endif
418
-
419
- #ifdef IQ2_S
420
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
421
- let block = src0[src0_idx_base + offset];
422
- let d = f32(block.d);
423
- var src1_i = src1_idx_base + offset * 256;
424
- var qs_vals : array<u32, 16>;
425
- for (var i: u32 = 0; i < 16; i++) {
426
- qs_vals[i] = bitcast<u32>(vec2(block.qs[i * 2], block.qs[i * 2 + 1]));
427
- }
428
- var qh_vals = array<u32, 2>(
429
- bitcast<u32>(vec2(block.qh[0], block.qh[1])),
430
- bitcast<u32>(vec2(block.qh[2], block.qh[3]))
431
- );
432
- var scale_vals = array<u32, 2>(
433
- bitcast<u32>(vec2(block.scales[0], block.scales[1])),
434
- bitcast<u32>(vec2(block.scales[2], block.scales[3]))
435
- );
436
- var sum = 0.0;
437
- for (var ib: u32 = 0; ib < 8; ib ++) {
438
- let s = get_byte(scale_vals[ib / 4], ib % 4);
439
- let db = array<f32, 2>(
440
- d * (0.5 + f32(s & 0xF)) * 0.25,
441
- d * (0.5 + f32(s >> 4)) * 0.25
442
- );
443
- let qs_w = qs_vals[ib];
444
- for (var l: u32 = 0; l < 4; l++) {
445
- let qh_b = (get_byte(qh_vals[ib / 4], ib % 4) << (8 - 2 * l)) & 0x300;
446
- let ig = (get_byte(qs_w, l) | qh_b) * 8;
447
- let signs = get_byte(qs_vals[ib + 8], l);
448
- let dl = db[l/2];
449
- for (var j: u32 = 0; j < 8; j++) {
450
- let g = get_byte(iq2s_grid[(ig + j) / 4], (ig + j) % 4);
451
- let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0);
452
- sum += dl * f32(g) * m * src1[src1_i];
453
- src1_i++;
454
- }
455
- }
456
- }
457
- return sum;
458
- }
459
- #endif
460
-
461
- #ifdef IQ3_XXS
462
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
463
- let block = src0[src0_idx_base + offset];
464
- let d = f32(block.d);
465
- var src1_i = src1_idx_base + offset * 256;
466
- var sum = 0.0;
467
- for (var ib: u32 = 0; ib < 16; ib += 2) {
468
- let sc_sign = bitcast<u32>(vec2(block.qs[ib + 32], block.qs[ib + 33]));
469
- let db = d * (0.5 + f32(sc_sign >> 28)) * 0.5;
470
- for (var l: u32 = 0; l < 4; l++) {
471
- let is = (sc_sign >> (7 * l)) & 127;
472
- let signs = get_byte(ksigns_iq2xs[is / 4], is % 4);
473
- let ig_val = bitcast<u32>(vec2(block.qs[ib * 2 + l], 0.0));
474
- let ig1 = get_byte(ig_val, 0);
475
- let ig2 = get_byte(ig_val, 1);
476
- for (var j: u32 = 0; j < 4; j++) {
477
- let g1 = get_byte(iq3xxs_grid[ig1], j);
478
- let g2 = get_byte(iq3xxs_grid[ig2], j);
479
- let m1 = select(1.0, -1.0, (get_byte(kmask_iq2xs[0], j) & signs) != 0);
480
- let m2 = select(1.0, -1.0, (get_byte(kmask_iq2xs[1], j) & signs) != 0);
481
- sum += db * f32(g1) * m1 * src1[src1_i];
482
- sum += db * f32(g2) * m2 * src1[src1_i + 4];
483
- src1_i++;
484
- }
485
- src1_i += 4;
486
- }
487
- }
488
- return sum;
489
- }
490
- #endif
491
-
492
- #ifdef IQ3_S
493
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
494
- let block = src0[src0_idx_base + offset];
495
- let d = f32(block.d);
496
- var src1_i = src1_idx_base + offset * 256;
497
- var qh_vals = array<u32, 2>(
498
- bitcast<u32>(vec2(block.qh[0], block.qh[1])),
499
- bitcast<u32>(vec2(block.qh[2], block.qh[3]))
500
- );
501
- var sign_vals: array<u32, 8>;
502
- for (var i: u32 = 0; i < 8; i++) {
503
- sign_vals[i] = bitcast<u32>(vec2(block.signs[i * 2], block.signs[i * 2 + 1]));
504
- }
505
- var scale_vals = bitcast<u32>(vec2(block.scales[0], block.scales[1]));
506
- var sum = 0.0;
507
- for (var ib: u32 = 0; ib < 4; ib++) {
508
- let s = get_byte(scale_vals, ib);
509
- let db = array<f32, 2>(
510
- d * (1.0 + 2.0 * f32(s & 0xF)),
511
- d * (1.0 + 2.0 * f32(s >> 4))
512
- );
513
- for (var k: u32 = 0; k < 2; k++) {
514
- let dl = db[k];
515
- let qh_byte = get_byte(qh_vals[ib / 2], (ib % 2) * 2 + k);
516
- let sign_w = sign_vals[ib * 2 + k];
517
- for (var l: u32 = 0; l < 4; l++) {
518
- let signs = get_byte(sign_w, l);
519
- let ig_val = bitcast<u32>(vec2(block.qs[ib * 8 + k * 4 + l], 0.0));
520
- let ig1 = get_byte(ig_val, 0) | ((qh_byte << ((8 - (2 * l)))) & 256);
521
- let ig2 = get_byte(ig_val, 1) | ((qh_byte << ((7 - (2 * l)))) & 256);
522
- for (var j: u32 = 0; j < 4; j++) {
523
- let g1 = get_byte(iq3s_grid[ig1], j);
524
- let g2 = get_byte(iq3s_grid[ig2], j);
525
- let m1 = select(1.0, -1.0, (get_byte(kmask_iq2xs[0], j) & signs) != 0);
526
- let m2 = select(1.0, -1.0, (get_byte(kmask_iq2xs[1], j) & signs) != 0);
527
- sum += dl * f32(g1) * m1 * src1[src1_i];
528
- sum += dl * f32(g2) * m2 * src1[src1_i + 4];
529
- src1_i++;
530
- }
531
- src1_i += 4;
532
- }
533
- }
534
- }
535
- return sum;
536
- }
537
- #endif
538
-
539
- #ifdef IQ1_S
540
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
541
- let block = src0[src0_idx_base + offset];
542
- let d = f32(block.d);
543
- var src1_i = src1_idx_base + offset * 256;
544
- var sum = 0.0;
545
- for (var ib: u32 = 0; ib < 8; ib++) {
546
- let qh = bitcast<u32>(vec2(block.qh[ib], 0.0));
547
- let dl = d * (2 * f32((qh >> 12) & 7) + 1);
548
- let delta = select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x8000) != 0);
549
- let qs_w = bitcast<u32>(vec2(block.qs[ib * 2], block.qs[ib * 2 + 1]));
550
- for (var l: u32 = 0; l < 4; l++) {
551
- let ig = (get_byte(qs_w, l) | (((qh >> (3 * l)) & 7) << 8)) * 8;
552
- for (var j: u32 = 0; j < 8; j++) {
553
- let gw = iq1_grid[(ig + j) / 16];
554
- let g = (gw >> (((ig + j) % 16) * 2)) & 3;
555
- let gs = bitcast<i32>(g << 30) >> 30;
556
- sum += dl * (f32(gs) + delta) * src1[src1_i];
557
- src1_i++;
558
- }
559
- }
560
- }
561
- return sum;
562
- }
563
- #endif
564
-
565
-
566
- #ifdef IQ1_M
567
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
568
- let block = src0[src0_idx_base + offset];
569
-
570
- let scale = ((block.scales[0] >> 12) & 0xF) | ((block.scales[0] >> 24) & 0x00F0) | ((block.scales[1] >> 4) & 0x0F00) | ((block.scales[1] >> 16) & 0xF000);
571
- let d = f32(bitcast<vec2<f16>>(scale).x);
572
- var src1_i = src1_idx_base + offset * 256;
573
- var sum = 0.0;
574
- for (var ib: u32 = 0; ib < 8; ib++) {
575
- let sw = (block.scales[ib / 4] >> (16 * ((ib / 2) % 2))) & 0xFFFF;
576
- let s1 : u32 = (sw >> (6 * (ib % 2))) & 0x7;
577
- let s2 : u32 = (sw >> (6 * (ib % 2) + 3)) & 0x7;
578
- var dl = array<f32, 2>(
579
- d * f32(2 * s1 + 1),
580
- d * f32(2 * s2 + 1)
581
- );
582
-
583
- let qh = block.qh[ib / 2] >> (16 * (ib % 2));
584
- var idx = array<u32, 4>(
585
- get_byte(block.qs[ib], 0) | ((qh << 8) & 0x700),
586
- get_byte(block.qs[ib], 1) | ((qh << 4) & 0x700),
587
- get_byte(block.qs[ib], 2) | ((qh) & 0x700),
588
- get_byte(block.qs[ib], 3) | ((qh >> 4) & 0x700)
589
- );
590
- var delta = array<f32, 4>(
591
- select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x08) != 0),
592
- select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x80) != 0),
593
- select(IQ1_DELTA, -IQ1_DELTA, ((qh >> 8) & 0x08) != 0),
594
- select(IQ1_DELTA, -IQ1_DELTA, ((qh >> 8) & 0x80) != 0)
595
- );
596
- for (var l: u32 = 0; l < 4; l++) {
597
- let ig = idx[l] * 8;
598
- for (var j: u32 = 0; j < 8; j++) {
599
- let gw = iq1_grid[(ig + j) / 16];
600
- let g = (gw >> (((ig + j) % 16) * 2)) & 3;
601
- let gs = bitcast<i32>(g << 30) >> 30;
602
- sum += dl[l/2] * (f32(gs) + delta[l]) * src1[src1_i];
603
- src1_i++;
604
- }
605
- }
606
- }
607
- return sum;
608
- }
609
- #endif
610
-
611
- #ifdef IQ4_NL
612
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
613
- let block = src0[src0_idx_base + offset];
614
- let d = f32(block.d);
615
- var src1_i = src1_idx_base + offset * 32;
616
- var sum = 0.0;
617
- var qs: array<u32, 4>;
618
- for (var i: u32 = 0; i < 4; i++) {
619
- qs[i] = bitcast<u32>(vec2(block.qs[i * 2], block.qs[i * 2 + 1]));
620
- }
621
- for (var j: u32 = 0; j < 16; j++) {
622
- let qsb = get_byte(qs[j / 4], j % 4);
623
- sum += d * f32(kvalues_iq4nl[qsb & 0xF]) * src1[src1_i];
624
- sum += d * f32(kvalues_iq4nl[qsb >> 4]) * src1[src1_i + 16];
625
- src1_i++;
626
- }
627
- return sum;
628
- }
629
- #endif
630
-
631
- #ifdef IQ4_XS
632
- fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 {
633
- let block = src0[src0_idx_base + offset];
634
- let d = f32(block.d);
635
- let scales_h = bitcast<u32>(vec2(block.scales_h, 0.0));
636
- var src1_i = src1_idx_base + offset * 256;
637
- var sum = 0.0;
638
- for (var ib: u32 = 0; ib < 8; ib++) {
639
- let ls = ((get_byte(block.scales_l, ib / 2) >> (4 * (ib % 2))) & 0xF) | (((scales_h >> (2 * ib)) & 3) << 4);
640
- let dl = d * (f32(ls) - 32.0);
641
- for (var j: u32 = 0; j < 16; j++) {
642
- let iqs = ib * 16 + j;
643
- let qsb = get_byte(block.qs[iqs / 4], iqs % 4);
644
- sum += dl * f32(kvalues_iq4nl[qsb & 0xF]) * src1[src1_i];
645
- sum += dl * f32(kvalues_iq4nl[qsb >> 4]) * src1[src1_i + 16];
646
- src1_i++;
647
- }
648
- src1_i += 16;
649
- }
650
- return sum;
651
- }
652
- #endif
653
-
654
- struct MulMatParams {
655
- offset_src0: u32, // in elements/blocks
656
- offset_src1: u32, // in elements/blocks
657
- offset_dst: u32, // in elements/blocks
658
- m: u32,
659
- n: u32,
660
- k: u32,
661
- // all strides are in elements/blocks
662
- stride_01: u32,
663
- stride_11: u32,
664
- stride_02: u32,
665
- stride_12: u32,
666
- stride_03: u32,
667
- stride_13: u32,
668
-
669
- bs02: u32,
670
- bs03: u32,
671
- broadcast2: u32,
672
- broadcast3: u32
673
- };
674
-
675
- @group(0) @binding(0) var<storage, read_write> src0: array<SRC0_TYPE>; // M rows, K columns
676
- @group(0) @binding(1) var<storage, read_write> src1: array<SRC1_TYPE>; // K rows, N columns (transposed)
677
- @group(0) @binding(2) var<storage, read_write> dst: array<f32>; // M rows, N columns
678
-
679
- @group(0) @binding(3) var<uniform> params: MulMatParams;
680
-
681
- @compute @workgroup_size(256)
682
- fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
683
- let total = params.m * params.n * params.bs02 * params.broadcast2 * params.bs03 * params.broadcast3;
684
- if (global_id.x >= total) {
685
- return;
686
- }
687
-
688
- let dst2_stride = params.m * params.n;
689
- let dst3_stride = dst2_stride * params.bs02 * params.broadcast2;
690
-
691
- let dst3_idx = global_id.x / dst3_stride;
692
- let src03_idx = dst3_idx / params.broadcast3; // src0 may be broadcast along the third dimension
693
- let src13_idx = dst3_idx; // src1 is not broadcast
694
- let dst3_rem = global_id.x % dst3_stride;
695
-
696
- let dst2_idx = dst3_rem / dst2_stride;
697
- let src02_idx = dst2_idx / params.broadcast2; // src0 may also be broadcast along the second dimension
698
- let src12_idx = dst2_idx; // src1 is not broadcast
699
-
700
- let dst2_rem = dst3_rem % dst2_stride;
701
-
702
- let row = dst2_rem / params.m; // output row
703
- let col = dst2_rem % params.m; // output column
704
-
705
- let src0_idx_base = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02 + col * params.stride_01;
706
- let src1_idx_base = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12 + row * params.stride_11;
707
-
708
- var sum = 0.0;
709
- for (var i: u32 = 0u; i < params.k/BLOCK_SIZE; i = i + 1u) {
710
- sum += multiply_add(src0_idx_base, src1_idx_base, i);
711
- }
712
- dst[params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride + row * params.m + col] = sum;
713
- }