llama-cpp-pro 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/CHANGELOG.md +295 -0
  2. package/LICENSE +21 -0
  3. package/LlamaCpp.podspec +33 -0
  4. package/LlamaCppCapacitor.podspec +33 -0
  5. package/Package.swift +29 -0
  6. package/README.md +93 -0
  7. package/android/build.gradle +88 -0
  8. package/android/src/main/AndroidManifest.xml +4 -0
  9. package/android/src/main/CMakeLists-arm64.txt +138 -0
  10. package/android/src/main/CMakeLists-x86_64.txt +141 -0
  11. package/android/src/main/CMakeLists.txt +138 -0
  12. package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCpp.java +1340 -0
  13. package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCppPlugin.java +814 -0
  14. package/android/src/main/java/ai/annadata/plugin/capacitor/ModelAdmissionController.java +214 -0
  15. package/android/src/main/jni-chat-session.cpp +261 -0
  16. package/android/src/main/jni-lora.cpp +197 -0
  17. package/android/src/main/jni-multimodal.cpp +167 -0
  18. package/android/src/main/jni-tts.cpp +290 -0
  19. package/android/src/main/jni-utils.h +148 -0
  20. package/android/src/main/jni.cpp +1808 -0
  21. package/android/src/main/jniLibs/arm64-v8a/libllama-cpp-arm64.so +0 -0
  22. package/android/src/main/res/.gitkeep +0 -0
  23. package/build-native.sh +280 -0
  24. package/cmake/desktop-metal-embed.cmake +30 -0
  25. package/cmake/desktop-sources.cmake +100 -0
  26. package/cmake/ggml-backends.cmake +44 -0
  27. package/cpp/LICENSE +21 -0
  28. package/cpp/README.md +15 -0
  29. package/cpp/anyascii.c +22223 -0
  30. package/cpp/anyascii.h +42 -0
  31. package/cpp/cap-completion.cpp +942 -0
  32. package/cpp/cap-completion.h +127 -0
  33. package/cpp/cap-embedding.cpp +193 -0
  34. package/cpp/cap-embedding.h +35 -0
  35. package/cpp/cap-ios-bridge.cpp +1810 -0
  36. package/cpp/cap-ios-bridge.h +61 -0
  37. package/cpp/cap-llama.cpp +412 -0
  38. package/cpp/cap-llama.h +161 -0
  39. package/cpp/cap-mtmd.hpp +602 -0
  40. package/cpp/cap-native-server.cpp +1095 -0
  41. package/cpp/cap-native-server.h +40 -0
  42. package/cpp/cap-tts.cpp +591 -0
  43. package/cpp/cap-tts.h +59 -0
  44. package/cpp/cap-wasm-fs.cpp +156 -0
  45. package/cpp/cap-wasm-jspi.cpp +19 -0
  46. package/cpp/cap-wasm-jspi.h +30 -0
  47. package/cpp/cap-wasm-vfs.cpp +22 -0
  48. package/cpp/chat-parser.cpp +393 -0
  49. package/cpp/chat-parser.h +120 -0
  50. package/cpp/chat.cpp +2315 -0
  51. package/cpp/chat.h +221 -0
  52. package/cpp/common.cpp +1664 -0
  53. package/cpp/common.h +744 -0
  54. package/cpp/ggml-alloc.c +1028 -0
  55. package/cpp/ggml-alloc.h +76 -0
  56. package/cpp/ggml-backend-impl.h +255 -0
  57. package/cpp/ggml-backend-reg.cpp +600 -0
  58. package/cpp/ggml-backend.cpp +2121 -0
  59. package/cpp/ggml-backend.h +354 -0
  60. package/cpp/ggml-common.h +1878 -0
  61. package/cpp/ggml-cpp.h +39 -0
  62. package/cpp/ggml-cpu/amx/amx.cpp +221 -0
  63. package/cpp/ggml-cpu/amx/amx.h +8 -0
  64. package/cpp/ggml-cpu/amx/common.h +91 -0
  65. package/cpp/ggml-cpu/amx/mmq.cpp +2512 -0
  66. package/cpp/ggml-cpu/amx/mmq.h +10 -0
  67. package/cpp/ggml-cpu/arch/arm/cpu-feats.cpp +94 -0
  68. package/cpp/ggml-cpu/arch/arm/quants.c +3650 -0
  69. package/cpp/ggml-cpu/arch/arm/repack.cpp +1891 -0
  70. package/cpp/ggml-cpu/arch/x86/cpu-feats.cpp +327 -0
  71. package/cpp/ggml-cpu/arch/x86/quants.c +3820 -0
  72. package/cpp/ggml-cpu/arch/x86/repack.cpp +6307 -0
  73. package/cpp/ggml-cpu/arch-fallback.h +215 -0
  74. package/cpp/ggml-cpu/binary-ops.cpp +158 -0
  75. package/cpp/ggml-cpu/binary-ops.h +16 -0
  76. package/cpp/ggml-cpu/common.h +73 -0
  77. package/cpp/ggml-cpu/ggml-cpu-impl.h +559 -0
  78. package/cpp/ggml-cpu/ggml-cpu.c +3578 -0
  79. package/cpp/ggml-cpu/ggml-cpu.cpp +672 -0
  80. package/cpp/ggml-cpu/ops.cpp +10587 -0
  81. package/cpp/ggml-cpu/ops.h +114 -0
  82. package/cpp/ggml-cpu/quants.c +1193 -0
  83. package/cpp/ggml-cpu/quants.h +97 -0
  84. package/cpp/ggml-cpu/repack.cpp +1982 -0
  85. package/cpp/ggml-cpu/repack.h +120 -0
  86. package/cpp/ggml-cpu/simd-mappings.h +1184 -0
  87. package/cpp/ggml-cpu/traits.cpp +36 -0
  88. package/cpp/ggml-cpu/traits.h +38 -0
  89. package/cpp/ggml-cpu/unary-ops.cpp +186 -0
  90. package/cpp/ggml-cpu/unary-ops.h +28 -0
  91. package/cpp/ggml-cpu/vec.cpp +348 -0
  92. package/cpp/ggml-cpu/vec.h +1121 -0
  93. package/cpp/ggml-cpu.h +145 -0
  94. package/cpp/ggml-impl.h +622 -0
  95. package/cpp/ggml-metal-impl.h +688 -0
  96. package/cpp/ggml-metal.h +66 -0
  97. package/cpp/ggml-metal.m +6833 -0
  98. package/cpp/ggml-metal.metal +10754 -0
  99. package/cpp/ggml-opt.cpp +1093 -0
  100. package/cpp/ggml-opt.h +256 -0
  101. package/cpp/ggml-quants.c +5324 -0
  102. package/cpp/ggml-quants.h +106 -0
  103. package/cpp/ggml-threading.cpp +12 -0
  104. package/cpp/ggml-threading.h +14 -0
  105. package/cpp/ggml.c +7108 -0
  106. package/cpp/ggml.h +2492 -0
  107. package/cpp/gguf.cpp +1358 -0
  108. package/cpp/gguf.h +202 -0
  109. package/cpp/json-partial.cpp +256 -0
  110. package/cpp/json-partial.h +38 -0
  111. package/cpp/json-schema-to-grammar.cpp +985 -0
  112. package/cpp/json-schema-to-grammar.h +21 -0
  113. package/cpp/llama-adapter.cpp +388 -0
  114. package/cpp/llama-adapter.h +76 -0
  115. package/cpp/llama-arch.cpp +2355 -0
  116. package/cpp/llama-arch.h +499 -0
  117. package/cpp/llama-batch.cpp +875 -0
  118. package/cpp/llama-batch.h +160 -0
  119. package/cpp/llama-chat.cpp +783 -0
  120. package/cpp/llama-chat.h +65 -0
  121. package/cpp/llama-context.cpp +2788 -0
  122. package/cpp/llama-context.h +306 -0
  123. package/cpp/llama-cparams.cpp +5 -0
  124. package/cpp/llama-cparams.h +41 -0
  125. package/cpp/llama-cpp.h +30 -0
  126. package/cpp/llama-grammar.cpp +1229 -0
  127. package/cpp/llama-grammar.h +173 -0
  128. package/cpp/llama-graph.cpp +1891 -0
  129. package/cpp/llama-graph.h +810 -0
  130. package/cpp/llama-hparams.cpp +180 -0
  131. package/cpp/llama-hparams.h +233 -0
  132. package/cpp/llama-impl.cpp +167 -0
  133. package/cpp/llama-impl.h +61 -0
  134. package/cpp/llama-io.cpp +15 -0
  135. package/cpp/llama-io.h +35 -0
  136. package/cpp/llama-kv-cache-iswa.cpp +318 -0
  137. package/cpp/llama-kv-cache-iswa.h +135 -0
  138. package/cpp/llama-kv-cache.cpp +2059 -0
  139. package/cpp/llama-kv-cache.h +374 -0
  140. package/cpp/llama-kv-cells.h +491 -0
  141. package/cpp/llama-memory-hybrid.cpp +258 -0
  142. package/cpp/llama-memory-hybrid.h +137 -0
  143. package/cpp/llama-memory-recurrent.cpp +1146 -0
  144. package/cpp/llama-memory-recurrent.h +179 -0
  145. package/cpp/llama-memory.cpp +59 -0
  146. package/cpp/llama-memory.h +119 -0
  147. package/cpp/llama-mmap.cpp +609 -0
  148. package/cpp/llama-mmap.h +68 -0
  149. package/cpp/llama-model-loader.cpp +1166 -0
  150. package/cpp/llama-model-loader.h +170 -0
  151. package/cpp/llama-model-saver.cpp +282 -0
  152. package/cpp/llama-model-saver.h +37 -0
  153. package/cpp/llama-model.cpp +19061 -0
  154. package/cpp/llama-model.h +491 -0
  155. package/cpp/llama-sampling.cpp +2575 -0
  156. package/cpp/llama-sampling.h +32 -0
  157. package/cpp/llama-vocab.cpp +3792 -0
  158. package/cpp/llama-vocab.h +176 -0
  159. package/cpp/llama.cpp +358 -0
  160. package/cpp/llama.h +1373 -0
  161. package/cpp/log.cpp +428 -0
  162. package/cpp/log.h +103 -0
  163. package/cpp/minja/chat-template.hpp +550 -0
  164. package/cpp/minja/minja.hpp +3009 -0
  165. package/cpp/nlohmann/json.hpp +25526 -0
  166. package/cpp/nlohmann/json_fwd.hpp +187 -0
  167. package/cpp/regex-partial.cpp +204 -0
  168. package/cpp/regex-partial.h +56 -0
  169. package/cpp/sampling.cpp +579 -0
  170. package/cpp/sampling.h +107 -0
  171. package/cpp/tools/mtmd/clip-impl.h +473 -0
  172. package/cpp/tools/mtmd/clip.cpp +4322 -0
  173. package/cpp/tools/mtmd/clip.h +106 -0
  174. package/cpp/tools/mtmd/miniaudio/miniaudio.h +93468 -0
  175. package/cpp/tools/mtmd/mtmd-audio.cpp +769 -0
  176. package/cpp/tools/mtmd/mtmd-audio.h +47 -0
  177. package/cpp/tools/mtmd/mtmd-helper.cpp +460 -0
  178. package/cpp/tools/mtmd/mtmd-helper.h +95 -0
  179. package/cpp/tools/mtmd/mtmd.cpp +1066 -0
  180. package/cpp/tools/mtmd/mtmd.h +302 -0
  181. package/cpp/tools/mtmd/stb/stb_image.h +7988 -0
  182. package/cpp/unicode-data.cpp +7034 -0
  183. package/cpp/unicode-data.h +20 -0
  184. package/cpp/unicode.cpp +1061 -0
  185. package/cpp/unicode.h +68 -0
  186. package/cpp/vendor/cpp-httplib/httplib.cpp +16509 -0
  187. package/cpp/vendor/cpp-httplib/httplib.h +3883 -0
  188. package/desktop/electron-builder.config.cjs +157 -0
  189. package/desktop/entitlements.mac.plist +12 -0
  190. package/desktop/package.json +11 -0
  191. package/desktop/resolve-package-root.cjs +88 -0
  192. package/desktop/src/main/backend-selector.cjs +148 -0
  193. package/desktop/src/main/gpu-probe.cjs +142 -0
  194. package/desktop/src/main/index.cjs +58 -0
  195. package/desktop/src/main/ipc-handlers.cjs +212 -0
  196. package/desktop/src/main/model-store.cjs +50 -0
  197. package/desktop/src/main/preload.cjs +39 -0
  198. package/desktop/src/main/sidecar-client.cjs +76 -0
  199. package/desktop/src/main/sidecar-manager.cjs +364 -0
  200. package/dist/docs.json +14357 -0
  201. package/dist/esm/definitions.d.ts +731 -0
  202. package/dist/esm/definitions.js +2 -0
  203. package/dist/esm/definitions.js.map +1 -0
  204. package/dist/esm/desktop.d.ts +37 -0
  205. package/dist/esm/desktop.js +133 -0
  206. package/dist/esm/desktop.js.map +1 -0
  207. package/dist/esm/index.d.ts +200 -0
  208. package/dist/esm/index.js +612 -0
  209. package/dist/esm/index.js.map +1 -0
  210. package/dist/esm/isomorphic/desktop.runtime.d.ts +37 -0
  211. package/dist/esm/isomorphic/desktop.runtime.js +36 -0
  212. package/dist/esm/isomorphic/desktop.runtime.js.map +1 -0
  213. package/dist/esm/isomorphic/errors.d.ts +6 -0
  214. package/dist/esm/isomorphic/errors.js +9 -0
  215. package/dist/esm/isomorphic/errors.js.map +1 -0
  216. package/dist/esm/isomorphic/model.admission.d.ts +17 -0
  217. package/dist/esm/isomorphic/model.admission.js +27 -0
  218. package/dist/esm/isomorphic/model.admission.js.map +1 -0
  219. package/dist/esm/isomorphic/model.scheduler.d.ts +31 -0
  220. package/dist/esm/isomorphic/model.scheduler.js +95 -0
  221. package/dist/esm/isomorphic/model.scheduler.js.map +1 -0
  222. package/dist/esm/isomorphic/provider.desktop.d.ts +40 -0
  223. package/dist/esm/isomorphic/provider.desktop.js +411 -0
  224. package/dist/esm/isomorphic/provider.desktop.js.map +1 -0
  225. package/dist/esm/isomorphic/provider.factory.d.ts +2 -0
  226. package/dist/esm/isomorphic/provider.factory.js +16 -0
  227. package/dist/esm/isomorphic/provider.factory.js.map +1 -0
  228. package/dist/esm/isomorphic/provider.interface.d.ts +76 -0
  229. package/dist/esm/isomorphic/provider.interface.js +2 -0
  230. package/dist/esm/isomorphic/provider.interface.js.map +1 -0
  231. package/dist/esm/isomorphic/provider.native.d.ts +18 -0
  232. package/dist/esm/isomorphic/provider.native.js +173 -0
  233. package/dist/esm/isomorphic/provider.native.js.map +1 -0
  234. package/dist/esm/isomorphic/provider.web.d.ts +88 -0
  235. package/dist/esm/isomorphic/provider.web.js +573 -0
  236. package/dist/esm/isomorphic/provider.web.js.map +1 -0
  237. package/dist/esm/isomorphic/sidecar-sse.d.ts +14 -0
  238. package/dist/esm/isomorphic/sidecar-sse.js +76 -0
  239. package/dist/esm/isomorphic/sidecar-sse.js.map +1 -0
  240. package/dist/esm/isomorphic/wasmMemoryCalibration.d.ts +26 -0
  241. package/dist/esm/isomorphic/wasmMemoryCalibration.js +60 -0
  242. package/dist/esm/isomorphic/wasmMemoryCalibration.js.map +1 -0
  243. package/dist/esm/isomorphic/wasmMemoryPolicy.d.ts +55 -0
  244. package/dist/esm/isomorphic/wasmMemoryPolicy.js +93 -0
  245. package/dist/esm/isomorphic/wasmMemoryPolicy.js.map +1 -0
  246. package/dist/esm/storage/manifest.d.ts +13 -0
  247. package/dist/esm/storage/manifest.js +87 -0
  248. package/dist/esm/storage/manifest.js.map +1 -0
  249. package/dist/esm/storage/opfs.store.d.ts +31 -0
  250. package/dist/esm/storage/opfs.store.js +241 -0
  251. package/dist/esm/storage/opfs.store.js.map +1 -0
  252. package/dist/esm/web.d.ts +206 -0
  253. package/dist/esm/web.js +521 -0
  254. package/dist/esm/web.js.map +1 -0
  255. package/dist/esm/workers/async-file.d.ts +13 -0
  256. package/dist/esm/workers/async-file.js +12 -0
  257. package/dist/esm/workers/async-file.js.map +1 -0
  258. package/dist/esm/workers/heapfs.d.ts +55 -0
  259. package/dist/esm/workers/heapfs.js +115 -0
  260. package/dist/esm/workers/heapfs.js.map +1 -0
  261. package/dist/esm/workers/wasm.engine.d.ts +86 -0
  262. package/dist/esm/workers/wasm.engine.js +504 -0
  263. package/dist/esm/workers/wasm.engine.js.map +1 -0
  264. package/dist/esm/workers/worker.protocol.d.ts +160 -0
  265. package/dist/esm/workers/worker.protocol.js +2 -0
  266. package/dist/esm/workers/worker.protocol.js.map +1 -0
  267. package/dist/plugin.cjs +3179 -0
  268. package/dist/plugin.cjs.map +1 -0
  269. package/dist/plugin.js +3181 -0
  270. package/dist/plugin.js.map +1 -0
  271. package/dist/wasm/llama_engine.d.ts +74 -0
  272. package/dist/wasm/llama_engine.js +1829 -0
  273. package/dist/wasm/llama_engine.wasm +0 -0
  274. package/dist/wasm/llama_engine_emscripten.mjs +2 -0
  275. package/dist/wasm/package.json +16 -0
  276. package/dist/workers/llm.worker.js +1226 -0
  277. package/dist/workers/llm.worker.js.map +7 -0
  278. package/extraResources/llama-wasm/llama_engine.d.ts +74 -0
  279. package/extraResources/llama-wasm/llama_engine.js +1829 -0
  280. package/extraResources/llama-wasm/llama_engine.wasm +0 -0
  281. package/extraResources/llama-wasm/llama_engine_emscripten.mjs +2 -0
  282. package/extraResources/llama-wasm/package.json +16 -0
  283. package/extraResources/sidecar/README.md +11 -0
  284. package/extraResources/sidecar/darwin-arm64 +0 -0
  285. package/extraResources/sidecar/darwin-x64 +0 -0
  286. package/ios/CMakeLists-arm64.txt +161 -0
  287. package/ios/CMakeLists-x86_64.txt +188 -0
  288. package/ios/CMakeLists.txt +161 -0
  289. package/ios/Frameworks/llama-cpp.framework/Info.plist +28 -0
  290. package/ios/Frameworks/llama-cpp.framework/llama-cpp +0 -0
  291. package/ios/Sources/LlamaCppCapacitor/LlamaCpp.swift +1365 -0
  292. package/ios/Sources/LlamaCppCapacitor/LlamaCppPlugin.swift +694 -0
  293. package/ios/Sources/LlamaCppCapacitor/LlamaNativeBridge.swift +349 -0
  294. package/ios/Sources/LlamaCppCapacitor/ModelAdmissionController.swift +177 -0
  295. package/ios/embed-metal-shaders.sh +24 -0
  296. package/ios/metal-embed.cmake +29 -0
  297. package/package.json +281 -0
  298. package/scripts/build-js-preserve-wasm.cjs +53 -0
  299. package/scripts/build-sidecar-linux.sh +6 -0
  300. package/scripts/build-sidecar-win.bat +19 -0
  301. package/scripts/build-sidecar.sh +184 -0
  302. package/scripts/embed-llama-ios-app-framework.sh +63 -0
  303. package/scripts/ensure-desktop-sidecar-bundle.cjs +103 -0
  304. package/scripts/ensure-llama-ios-xcframework.sh +108 -0
  305. package/scripts/fix-esm-extensions.cjs +45 -0
  306. package/scripts/prepare-js-dist.cjs +28 -0
  307. package/scripts/stage-desktop-resources.cjs +116 -0
  308. package/sidecar/CMakeLists.txt +192 -0
  309. package/sidecar/cap-sidecar-main.cpp +68 -0
  310. package/types/llama-cpp-pro.d.ts +441 -0
File without changes
@@ -0,0 +1,280 @@
1
+ #!/bin/bash
2
+
3
+ # Build script for llama-cpp Capacitor plugin
4
+ # This script compiles the native llama.cpp library for iOS and Android
5
+
6
+ set -e
7
+
8
+ # Colors for output
9
+ RED='\033[0;31m'
10
+ GREEN='\033[0;32m'
11
+ YELLOW='\033[1;33m'
12
+ BLUE='\033[0;34m'
13
+ NC='\033[0m' # No Color
14
+
15
+ # Function to print colored output
16
+ print_status() {
17
+ echo -e "${BLUE}[INFO]${NC} $1"
18
+ }
19
+
20
+ print_success() {
21
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
22
+ }
23
+
24
+ print_warning() {
25
+ echo -e "${YELLOW}[WARNING]${NC} $1"
26
+ }
27
+
28
+ print_error() {
29
+ echo -e "${RED}[ERROR]${NC} $1"
30
+ }
31
+
32
+ bytes_to_mb() {
33
+ awk -v bytes="$1" 'BEGIN { printf "%.2f", bytes / 1048576 }'
34
+ }
35
+
36
+ # Check if we're on macOS for iOS builds
37
+ check_macos() {
38
+ if [[ "$OSTYPE" != "darwin"* ]]; then
39
+ print_warning "iOS builds require macOS. Skipping iOS build."
40
+ return 1
41
+ fi
42
+ return 0
43
+ }
44
+
45
+ # Check if Android SDK is available
46
+ check_android_sdk() {
47
+ if [ -z "$ANDROID_HOME" ] && [ -z "$ANDROID_SDK_ROOT" ]; then
48
+ print_warning "Android SDK not found. Please set ANDROID_HOME or ANDROID_SDK_ROOT."
49
+ print_warning "Skipping Android build."
50
+ return 1
51
+ fi
52
+ return 0
53
+ }
54
+
55
+ # Detect NDK path: ndk/<version>/build/cmake/android.toolchain.cmake
56
+ # Uses latest versioned NDK under $ANDROID_SDK/ndk/ (e.g. ndk/29.0.13113456).
57
+ detect_ndk() {
58
+ local sdk="${ANDROID_HOME:-$ANDROID_SDK_ROOT}"
59
+ local ndk_root="$sdk/ndk"
60
+ if [ ! -d "$ndk_root" ]; then
61
+ echo ""
62
+ return 1
63
+ fi
64
+ local latest=""
65
+ local latest_ver=0
66
+ for v in "$ndk_root"/*; do
67
+ [ -d "$v" ] || continue
68
+ local base=$(basename "$v")
69
+ if [[ "$base" =~ ^[0-9] ]]; then
70
+ local ver=$(echo "$base" | sed 's/[^0-9]//g' | head -c 10)
71
+ ver=${ver:-0}
72
+ if [ "$ver" -gt "$latest_ver" ] 2>/dev/null; then
73
+ latest_ver=$ver
74
+ latest=$v
75
+ fi
76
+ fi
77
+ done
78
+ if [ -n "$latest" ] && [ -f "$latest/build/cmake/android.toolchain.cmake" ]; then
79
+ echo "$latest"
80
+ return 0
81
+ fi
82
+ echo ""
83
+ return 1
84
+ }
85
+
86
+ # Build iOS library
87
+ build_ios() {
88
+ print_status "Building iOS library..."
89
+
90
+ if ! check_macos; then
91
+ return 1
92
+ fi
93
+
94
+ # Always start from a clean iOS build directory to avoid stale Xcode settings
95
+ rm -rf ios/build
96
+ mkdir -p ios/build
97
+ cd ios/build
98
+
99
+ # Configure with CMake
100
+ # IMPORTANT: CMAKE_OSX_SYSROOT=iphoneos ensures we build for iOS, not macOS.
101
+ # Without it, the framework would be built for macOS and fail to link in an iOS app.
102
+ # IMPORTANT: build iOS framework as **ARM64-only**.
103
+ # Including x86_64 here makes CMake/Xcode try to link an x86_64 slice,
104
+ # but we only compile ARM-specific kernels (arch/arm), which leads to
105
+ # undefined symbols like lm_ggml_gemm_* for x86_64.
106
+ cmake .. \
107
+ -DCMAKE_BUILD_TYPE=Release \
108
+ -DCMAKE_OSX_SYSROOT=iphoneos \
109
+ -DCMAKE_OSX_ARCHITECTURES="arm64" \
110
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 \
111
+ -DCMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE=NO
112
+
113
+ # Build (parallel: -j uses available CPU cores)
114
+ JOBS=$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)
115
+ cmake --build . --config Release -- -j"$JOBS"
116
+
117
+ # CMake builds the framework directly (FRAMEWORK TRUE in CMakeLists.txt)
118
+ # Verify the framework was created
119
+ if [ -d "llama-cpp.framework" ]; then
120
+ print_success "iOS framework built successfully at: $(pwd)/llama-cpp.framework"
121
+
122
+ # Binary location: CMake may produce flat (llama-cpp) or Versions/A/ layout
123
+ BINARY=""
124
+ if [ -f "llama-cpp.framework/llama-cpp" ]; then
125
+ BINARY="llama-cpp.framework/llama-cpp"
126
+ elif [ -f "llama-cpp.framework/Versions/A/llama-cpp" ]; then
127
+ BINARY="llama-cpp.framework/Versions/A/llama-cpp"
128
+ fi
129
+ if [ -n "$BINARY" ]; then
130
+ if xcrun strip -x -S "$BINARY" 2>/dev/null; then
131
+ print_status "Stripped debug symbols from iOS framework"
132
+ fi
133
+ fi
134
+
135
+ # Build flat framework (single binary, no duplication) for npm publishing
136
+ if [ -z "$BINARY" ] || [ ! -f "$BINARY" ]; then
137
+ print_error "iOS framework binary not found"
138
+ cd ../..
139
+ return 1
140
+ fi
141
+ rm -rf ../Frameworks/llama-cpp.framework
142
+ mkdir -p ../Frameworks/llama-cpp.framework/Resources
143
+ cp "$BINARY" ../Frameworks/llama-cpp.framework/llama-cpp
144
+ [ -f llama-cpp.framework/Info.plist ] && cp llama-cpp.framework/Info.plist ../Frameworks/llama-cpp.framework/
145
+ [ -f llama-cpp.framework/Versions/A/Resources/Info.plist ] && cp llama-cpp.framework/Versions/A/Resources/Info.plist ../Frameworks/llama-cpp.framework/Resources/
146
+ print_success "iOS framework copied to ios/Frameworks/ for npm package (flat, no duplication)"
147
+ else
148
+ print_error "iOS framework not found after build"
149
+ cd ../..
150
+ return 1
151
+ fi
152
+
153
+ cd ../..
154
+ }
155
+
156
+ # Build Android library
157
+ build_android() {
158
+ print_status "Building Android library..."
159
+
160
+ if ! check_android_sdk; then
161
+ return 1
162
+ fi
163
+
164
+ ANDROID_NDK=$(detect_ndk)
165
+ if [ -z "$ANDROID_NDK" ]; then
166
+ print_error "Android NDK not found. Install NDK via Android Studio (SDK Manager → NDK)."
167
+ print_error "Expected: \$ANDROID_HOME/ndk/<version>/build/cmake/android.toolchain.cmake"
168
+ return 1
169
+ fi
170
+ print_status "Using NDK: $ANDROID_NDK"
171
+
172
+ TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake"
173
+ if [ ! -f "$TOOLCHAIN_FILE" ]; then
174
+ print_error "Toolchain file not found: $TOOLCHAIN_FILE"
175
+ return 1
176
+ fi
177
+
178
+ rm -rf android/build
179
+ mkdir -p android/build
180
+ cd android/build
181
+
182
+ # Build only arm64-v8a to minimize app store size.
183
+ # build.gradle uses abiFilters 'arm64-v8a'; armeabi-v7a is not included in the app.
184
+ # Skipping armeabi-v7a saves ~25–48 MB in package and keeps app size minimal.
185
+ arch="arm64-v8a"
186
+ print_status "Building for $arch (only ABI shipped in app)..."
187
+ rm -rf CMakeCache.txt CMakeFiles Makefile cmake_install.cmake 2>/dev/null || true
188
+ find . -maxdepth 1 -name '*.so' -delete 2>/dev/null || true
189
+
190
+ cmake ../src/main \
191
+ -DCMAKE_BUILD_TYPE=Release \
192
+ -DANDROID_ABI=$arch \
193
+ -DANDROID_PLATFORM=android-21 \
194
+ -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
195
+ -DANDROID_STL=c++_shared
196
+
197
+ JOBS=$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)
198
+ cmake --build . --config Release -- -j"$JOBS"
199
+
200
+ FINAL_SO="../src/main/jniLibs/$arch/libllama-cpp-arm64.so"
201
+ if [ -f "$FINAL_SO" ]; then
202
+ PREBUILT="$ANDROID_NDK/toolchains/llvm/prebuilt"
203
+ TOOL_BIN=""
204
+ if [ -d "$PREBUILT/darwin-x86_64" ]; then
205
+ TOOL_BIN="$PREBUILT/darwin-x86_64/bin"
206
+ elif [ -d "$PREBUILT/darwin-aarch64" ]; then
207
+ TOOL_BIN="$PREBUILT/darwin-aarch64/bin"
208
+ fi
209
+ if [ -n "$TOOL_BIN" ]; then
210
+ STRIP_TOOL="$TOOL_BIN/llvm-strip"
211
+ OBJCOPY_TOOL="$TOOL_BIN/llvm-objcopy"
212
+ else
213
+ STRIP_TOOL=$(find "$ANDROID_NDK/toolchains" -name "llvm-strip" -type f 2>/dev/null | head -1)
214
+ OBJCOPY_TOOL=$(find "$ANDROID_NDK/toolchains" -name "llvm-objcopy" -type f 2>/dev/null | head -1)
215
+ fi
216
+
217
+ BEFORE_SIZE=$(wc -c < "$FINAL_SO")
218
+ SYMBOLS_DIR="../symbols/$arch"
219
+ SYMBOL_FILE="$SYMBOLS_DIR/libllama-cpp-arm64.so.debug"
220
+ mkdir -p "$SYMBOLS_DIR"
221
+
222
+ if [ -f "$OBJCOPY_TOOL" ]; then
223
+ "$OBJCOPY_TOOL" --only-keep-debug "$FINAL_SO" "$SYMBOL_FILE"
224
+ print_status "Saved Android debug symbols to: $SYMBOL_FILE"
225
+ else
226
+ cp "$FINAL_SO" "$SYMBOL_FILE"
227
+ print_warning "llvm-objcopy not found; copied unstripped library as debug symbol file"
228
+ fi
229
+
230
+ if [ -f "$STRIP_TOOL" ]; then
231
+ "$STRIP_TOOL" --strip-unneeded "$FINAL_SO"
232
+ if [ -f "$OBJCOPY_TOOL" ]; then
233
+ "$OBJCOPY_TOOL" --add-gnu-debuglink="$SYMBOL_FILE" "$FINAL_SO" || true
234
+ fi
235
+ AFTER_SIZE=$(wc -c < "$FINAL_SO")
236
+ print_status "Stripped Android release library (--strip-unneeded): $(bytes_to_mb "$BEFORE_SIZE") MB -> $(bytes_to_mb "$AFTER_SIZE") MB"
237
+ fi
238
+ else
239
+ print_warning "Expected Android library not found at $FINAL_SO"
240
+ fi
241
+ print_success "Built for $arch"
242
+
243
+ print_success "Android library built successfully"
244
+ cd ../..
245
+ }
246
+
247
+ # Main build function
248
+ main() {
249
+ print_status "Starting llama-cpp Capacitor plugin build..."
250
+
251
+ # Always start clean - remove previous build outputs
252
+ rm -rf ios/build ios/Frameworks android/build
253
+ print_status "Cleaned build directories"
254
+
255
+ # Check dependencies
256
+ if ! command -v cmake &> /dev/null; then
257
+ print_error "CMake is required but not installed"
258
+ exit 1
259
+ fi
260
+
261
+ if ! command -v make &> /dev/null; then
262
+ print_error "Make is required but not installed"
263
+ exit 1
264
+ fi
265
+
266
+ # Build iOS
267
+ if check_macos; then
268
+ build_ios
269
+ fi
270
+
271
+ # Build Android
272
+ if check_android_sdk; then
273
+ build_android
274
+ fi
275
+
276
+ print_success "Build completed successfully!"
277
+ }
278
+
279
+ # Run main function (ignore any args npm may pass)
280
+ main
@@ -0,0 +1,30 @@
1
+ # Embed ggml-metal.metal for desktop sidecar builds.
2
+ # Same as ios/metal-embed.cmake but paths are relative to this repo root.
3
+
4
+ set(SOURCE_DIR "${ANNADATA_CPP_DIR}")
5
+ set(METALLIB_COMMON "${SOURCE_DIR}/ggml-common.h")
6
+ set(METALLIB_SOURCE "${SOURCE_DIR}/ggml-metal.metal")
7
+ set(METALLIB_IMPL "${SOURCE_DIR}/ggml-metal-impl.h")
8
+ set(METALLIB_EMBED_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/../ios/embed-metal-shaders.sh")
9
+
10
+ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/autogenerated")
11
+
12
+ set(METALLIB_EMBED_ASM "${CMAKE_CURRENT_BINARY_DIR}/autogenerated/ggml-metal-embed.s")
13
+ set(METALLIB_SOURCE_EMBED "${CMAKE_CURRENT_BINARY_DIR}/autogenerated/ggml-metal-embed.metal")
14
+
15
+ add_custom_command(
16
+ OUTPUT "${METALLIB_EMBED_ASM}"
17
+ COMMAND "${METALLIB_EMBED_SCRIPT}"
18
+ "${METALLIB_COMMON}"
19
+ "${METALLIB_SOURCE}"
20
+ "${METALLIB_IMPL}"
21
+ "${METALLIB_EMBED_ASM}"
22
+ "${METALLIB_SOURCE_EMBED}"
23
+ DEPENDS
24
+ "${METALLIB_EMBED_SCRIPT}"
25
+ "${METALLIB_COMMON}"
26
+ "${METALLIB_SOURCE}"
27
+ "${METALLIB_IMPL}"
28
+ COMMENT "Generate assembly for embedded Metal shader source (desktop sidecar)"
29
+ VERBATIM
30
+ )
@@ -0,0 +1,100 @@
1
+ # Shared llama.cpp / cap-* source list for desktop sidecar builds.
2
+ # Included by sidecar/CMakeLists.txt.
3
+
4
+ set(ANNADATA_CPP_DIR "${CMAKE_CURRENT_LIST_DIR}/../cpp")
5
+
6
+ set(ANNADATA_DESKTOP_CORE_SOURCES
7
+ ${ANNADATA_CPP_DIR}/ggml.c
8
+ ${ANNADATA_CPP_DIR}/ggml-alloc.c
9
+ ${ANNADATA_CPP_DIR}/ggml-backend.cpp
10
+ ${ANNADATA_CPP_DIR}/ggml-backend-reg.cpp
11
+ ${ANNADATA_CPP_DIR}/ggml-cpu/amx/amx.cpp
12
+ ${ANNADATA_CPP_DIR}/ggml-cpu/amx/mmq.cpp
13
+ ${ANNADATA_CPP_DIR}/ggml-cpu/ggml-cpu.c
14
+ ${ANNADATA_CPP_DIR}/ggml-cpu/ggml-cpu.cpp
15
+ ${ANNADATA_CPP_DIR}/ggml-cpu/quants.c
16
+ ${ANNADATA_CPP_DIR}/ggml-cpu/traits.cpp
17
+ ${ANNADATA_CPP_DIR}/ggml-cpu/repack.cpp
18
+ ${ANNADATA_CPP_DIR}/ggml-cpu/unary-ops.cpp
19
+ ${ANNADATA_CPP_DIR}/ggml-cpu/binary-ops.cpp
20
+ ${ANNADATA_CPP_DIR}/ggml-cpu/vec.cpp
21
+ ${ANNADATA_CPP_DIR}/ggml-cpu/ops.cpp
22
+ ${ANNADATA_CPP_DIR}/ggml-opt.cpp
23
+ ${ANNADATA_CPP_DIR}/ggml-threading.cpp
24
+ ${ANNADATA_CPP_DIR}/ggml-quants.c
25
+ ${ANNADATA_CPP_DIR}/gguf.cpp
26
+ ${ANNADATA_CPP_DIR}/log.cpp
27
+ ${ANNADATA_CPP_DIR}/llama-impl.cpp
28
+ ${ANNADATA_CPP_DIR}/chat-parser.cpp
29
+ ${ANNADATA_CPP_DIR}/json-partial.cpp
30
+ ${ANNADATA_CPP_DIR}/regex-partial.cpp
31
+ ${ANNADATA_CPP_DIR}/tools/mtmd/mtmd.cpp
32
+ ${ANNADATA_CPP_DIR}/tools/mtmd/mtmd-audio.cpp
33
+ ${ANNADATA_CPP_DIR}/tools/mtmd/clip.cpp
34
+ ${ANNADATA_CPP_DIR}/tools/mtmd/mtmd-helper.cpp
35
+ ${ANNADATA_CPP_DIR}/llama-grammar.cpp
36
+ ${ANNADATA_CPP_DIR}/llama-sampling.cpp
37
+ ${ANNADATA_CPP_DIR}/llama-vocab.cpp
38
+ ${ANNADATA_CPP_DIR}/llama-adapter.cpp
39
+ ${ANNADATA_CPP_DIR}/llama-chat.cpp
40
+ ${ANNADATA_CPP_DIR}/llama-context.cpp
41
+ ${ANNADATA_CPP_DIR}/llama-arch.cpp
42
+ ${ANNADATA_CPP_DIR}/llama-batch.cpp
43
+ ${ANNADATA_CPP_DIR}/llama-cparams.cpp
44
+ ${ANNADATA_CPP_DIR}/llama-hparams.cpp
45
+ ${ANNADATA_CPP_DIR}/llama.cpp
46
+ ${ANNADATA_CPP_DIR}/llama-model.cpp
47
+ ${ANNADATA_CPP_DIR}/llama-model-loader.cpp
48
+ ${ANNADATA_CPP_DIR}/llama-model-saver.cpp
49
+ ${ANNADATA_CPP_DIR}/llama-kv-cache.cpp
50
+ ${ANNADATA_CPP_DIR}/llama-kv-cache-iswa.cpp
51
+ ${ANNADATA_CPP_DIR}/llama-memory-hybrid.cpp
52
+ ${ANNADATA_CPP_DIR}/llama-memory-recurrent.cpp
53
+ ${ANNADATA_CPP_DIR}/llama-mmap.cpp
54
+ ${ANNADATA_CPP_DIR}/llama-memory.cpp
55
+ ${ANNADATA_CPP_DIR}/llama-io.cpp
56
+ ${ANNADATA_CPP_DIR}/llama-graph.cpp
57
+ ${ANNADATA_CPP_DIR}/sampling.cpp
58
+ ${ANNADATA_CPP_DIR}/unicode-data.cpp
59
+ ${ANNADATA_CPP_DIR}/unicode.cpp
60
+ ${ANNADATA_CPP_DIR}/common.cpp
61
+ ${ANNADATA_CPP_DIR}/chat.cpp
62
+ ${ANNADATA_CPP_DIR}/json-schema-to-grammar.cpp
63
+ ${ANNADATA_CPP_DIR}/anyascii.c
64
+ ${ANNADATA_CPP_DIR}/cap-llama.cpp
65
+ ${ANNADATA_CPP_DIR}/cap-completion.cpp
66
+ ${ANNADATA_CPP_DIR}/cap-tts.cpp
67
+ ${ANNADATA_CPP_DIR}/cap-embedding.cpp
68
+ ${ANNADATA_CPP_DIR}/cap-ios-bridge.cpp
69
+ ${ANNADATA_CPP_DIR}/cap-native-server.cpp
70
+ ${ANNADATA_CPP_DIR}/vendor/cpp-httplib/httplib.cpp
71
+ )
72
+
73
+ # Architecture-specific CPU kernels
74
+ set(_DESKTOP_IS_ARM64 OFF)
75
+ if(APPLE)
76
+ if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
77
+ set(_DESKTOP_IS_ARM64 ON)
78
+ elseif(NOT CMAKE_OSX_ARCHITECTURES OR CMAKE_OSX_ARCHITECTURES STREQUAL "")
79
+ execute_process(COMMAND uname -m OUTPUT_VARIABLE _UNAME_M OUTPUT_STRIP_TRAILING_WHITESPACE)
80
+ if(_UNAME_M STREQUAL "arm64")
81
+ set(_DESKTOP_IS_ARM64 ON)
82
+ endif()
83
+ endif()
84
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
85
+ set(_DESKTOP_IS_ARM64 ON)
86
+ endif()
87
+
88
+ if(_DESKTOP_IS_ARM64)
89
+ list(APPEND ANNADATA_DESKTOP_CORE_SOURCES
90
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/arm/quants.c
91
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/arm/repack.cpp
92
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/arm/cpu-feats.cpp
93
+ )
94
+ else()
95
+ list(APPEND ANNADATA_DESKTOP_CORE_SOURCES
96
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/x86/quants.c
97
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/x86/repack.cpp
98
+ ${ANNADATA_CPP_DIR}/ggml-cpu/arch/x86/cpu-feats.cpp
99
+ )
100
+ endif()
@@ -0,0 +1,44 @@
1
+ # Optional ggml GPU backend plugin builds
2
+ #
3
+ # Requires LLAMA_CPP_UPSTREAM pointing at a full upstream llama.cpp checkout.
4
+ # Produces libggml-vulkan.so, libggml-cuda.so, libggml-hip.so next to the sidecar.
5
+ #
6
+ # Usage:
7
+ # cmake -B sidecar/build -DLLAMA_CPP_UPSTREAM=/path/to/llama.cpp -DSIDECAR_VARIANT=vulkan-openblas
8
+ # cmake --build sidecar/build --target ggml-backends
9
+
10
+ if(NOT LLAMA_CPP_UPSTREAM OR NOT EXISTS "${LLAMA_CPP_UPSTREAM}/ggml/CMakeLists.txt")
11
+ message(STATUS "ggml-backends: LLAMA_CPP_UPSTREAM not set — skipping GPU plugin build")
12
+ return()
13
+ endif()
14
+
15
+ message(STATUS "ggml-backends: building plugins from ${LLAMA_CPP_UPSTREAM}")
16
+
17
+ set(GGML_BUILD_TESTS OFF CACHE BOOL "" FORCE)
18
+ set(GGML_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
19
+ set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
20
+
21
+ set(_GGML_VULKAN OFF)
22
+ set(_GGML_CUDA OFF)
23
+ set(_GGML_HIP OFF)
24
+
25
+ if(SIDECAR_VARIANT MATCHES "vulkan")
26
+ set(_GGML_VULKAN ON)
27
+ elseif(SIDECAR_VARIANT STREQUAL "cuda")
28
+ set(_GGML_CUDA ON)
29
+ elseif(SIDECAR_VARIANT STREQUAL "rocm")
30
+ set(_GGML_HIP ON)
31
+ elseif(SIDECAR_VARIANT STREQUAL "vulkan-openblas")
32
+ set(_GGML_VULKAN ON)
33
+ endif()
34
+
35
+ set(GGML_VULKAN ${_GGML_VULKAN} CACHE BOOL "" FORCE)
36
+ set(GGML_CUDA ${_GGML_CUDA} CACHE BOOL "" FORCE)
37
+ set(GGML_HIP ${_GGML_HIP} CACHE BOOL "" FORCE)
38
+
39
+ add_subdirectory("${LLAMA_CPP_UPSTREAM}/ggml" "${CMAKE_BINARY_DIR}/ggml-upstream")
40
+
41
+ add_custom_target(ggml-backends ALL
42
+ DEPENDS ggml
43
+ COMMENT "ggml GPU backend plugins built into ${CMAKE_BINARY_DIR}/bin"
44
+ )
package/cpp/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-2024 The ggml authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/cpp/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # Note
2
+
3
+ - The **project-specific** files in this folder (never overwritten by bootstrap) are:
4
+ - `cap-llama.cpp` / `cap-llama.h` – Capacitor bridge (context, model load)
5
+ - `cap-completion.cpp` / `cap-completion.h` – completion
6
+ - `cap-tts.cpp` / `cap-tts.h` – TTS
7
+ - `cap-embedding.cpp` / `cap-embedding.h` – embeddings
8
+ - `cap-mtmd.hpp` – multimodal/vision
9
+ - `tools/mtmd/` – multimodal/vision tooling
10
+ - All other sources are synced from [llama.cpp](https://github.com/ggerganov/llama.cpp).
11
+ - **Update native source** (e.g. for a newer llama.cpp or vision support): run from repo root:
12
+ ```bash
13
+ ./scripts/bootstrap.sh [branch-or-tag-or-commit]
14
+ ```
15
+ See [scripts/bootstrap.sh](../scripts/bootstrap.sh) and [docs/IOS_IMPLEMENTATION_GUIDE.md](../docs/IOS_IMPLEMENTATION_GUIDE.md).