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
package/package.json ADDED
@@ -0,0 +1,281 @@
1
+ {
2
+ "name": "llama-cpp-pro",
3
+ "version": "0.2.2",
4
+ "description": "Pro llama.cpp Capacitor plugin for offline AI on iOS, Android, Web/PWA, and Desktop — text generation, chat, multimodal, TTS, LoRA, embeddings, and more.",
5
+ "main": "dist/plugin.cjs",
6
+ "type": "module",
7
+ "module": "dist/esm/index.js",
8
+ "types": "dist/esm/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/esm/index.d.ts",
12
+ "import": "./dist/esm/index.js",
13
+ "require": "./dist/plugin.cjs",
14
+ "default": "./dist/esm/index.js"
15
+ },
16
+ "./wasm/llama_engine.js": {
17
+ "types": "./dist/wasm/llama_engine.d.ts",
18
+ "default": "./dist/wasm/llama_engine.js"
19
+ },
20
+ "./wasm/llama_engine.wasm": "./dist/wasm/llama_engine.wasm",
21
+ "./wasm/llama_engine_emscripten.mjs": "./dist/wasm/llama_engine_emscripten.mjs",
22
+ "./wasm/package.json": "./dist/wasm/package.json",
23
+ "./dist/*": "./dist/*",
24
+ "./desktop": "./desktop/src/main/index.cjs",
25
+ "./desktop/electron-builder": "./desktop/electron-builder.config.cjs",
26
+ "./desktop/resolve-package-root": "./desktop/resolve-package-root.cjs",
27
+ "./desktop/ipc-handlers": "./desktop/src/main/ipc-handlers.cjs",
28
+ "./desktop/preload": "./desktop/src/main/preload.cjs",
29
+ "./desktop/entitlements.mac.plist": "./desktop/entitlements.mac.plist",
30
+ "./package.json": "./package.json"
31
+ },
32
+ "unpkg": "dist/plugin.js",
33
+ "files": [
34
+ "README.md",
35
+ "LICENSE",
36
+ "CHANGELOG.md",
37
+ "android/src/main/",
38
+ "android/build.gradle",
39
+ "build-native.sh",
40
+ "cpp/",
41
+ "dist/",
42
+ "ios/CMakeLists.txt",
43
+ "ios/CMakeLists-arm64.txt",
44
+ "ios/CMakeLists-x86_64.txt",
45
+ "ios/metal-embed.cmake",
46
+ "ios/embed-metal-shaders.sh",
47
+ "ios/Sources",
48
+ "ios/Frameworks",
49
+ "scripts/ensure-llama-ios-xcframework.sh",
50
+ "scripts/embed-llama-ios-app-framework.sh",
51
+ "Package.swift",
52
+ "LlamaCpp.podspec",
53
+ "LlamaCppCapacitor.podspec",
54
+ "types/",
55
+ "desktop/",
56
+ "sidecar/CMakeLists.txt",
57
+ "sidecar/cap-sidecar-main.cpp",
58
+ "cmake/",
59
+ "extraResources/",
60
+ "scripts/stage-desktop-resources.cjs",
61
+ "scripts/ensure-desktop-sidecar-bundle.cjs",
62
+ "scripts/build-sidecar.sh",
63
+ "scripts/build-sidecar-linux.sh",
64
+ "scripts/build-sidecar-win.bat",
65
+ "scripts/build-js-preserve-wasm.cjs",
66
+ "scripts/fix-esm-extensions.cjs",
67
+ "scripts/prepare-js-dist.cjs"
68
+ ],
69
+ "readme": "README.md",
70
+ "author": "Mr. Yakub Mohammad <yakub@annadata.ai> (yakub@arusatech.com, yakub@arusallc.com)",
71
+ "license": "MIT",
72
+ "repository": {
73
+ "type": "git",
74
+ "url": "git+https://github.com/arusatech/llama-cpp-pro.git"
75
+ },
76
+ "bugs": {
77
+ "url": "https://github.com/arusatech/llama-cpp-pro/issues"
78
+ },
79
+ "homepage": "https://annadata.ai",
80
+ "keywords": [
81
+ "capacitor",
82
+ "plugin",
83
+ "native",
84
+ "ios",
85
+ "rocm",
86
+ "intel",
87
+ "amd",
88
+ "nvidia",
89
+ "cuda",
90
+ "vulkan",
91
+ "metal",
92
+ "opengl",
93
+ "webgpu",
94
+ "webgl",
95
+ "webassembly",
96
+ "wasm",
97
+ "beaglebone",
98
+ "raspberry-pi",
99
+ "android",
100
+ "llama",
101
+ "llama-cpp",
102
+ "llama.cpp",
103
+ "bindings",
104
+ "ai",
105
+ "cmake",
106
+ "cmake-js",
107
+ "prebuilt-binaries",
108
+ "llm",
109
+ "gguf",
110
+ "grammar",
111
+ "embedding",
112
+ "rerank",
113
+ "reranking",
114
+ "json-grammar",
115
+ "json-schema-grammar",
116
+ "functions",
117
+ "function-calling",
118
+ "token-prediction",
119
+ "speculative-decoding",
120
+ "temperature",
121
+ "minP",
122
+ "topK",
123
+ "topP",
124
+ "seed",
125
+ "xtc",
126
+ "json-schema",
127
+ "self-hosted",
128
+ "local",
129
+ "catai",
130
+ "mistral",
131
+ "deepseek",
132
+ "qwen",
133
+ "qwq",
134
+ "gpt",
135
+ "gpt-oss",
136
+ "typescript",
137
+ "lora",
138
+ "batching",
139
+ "gpu",
140
+ "machine-learning",
141
+ "offline-ai",
142
+ "text-generation",
143
+ "multimodal",
144
+ "tts",
145
+ "text-to-speech",
146
+ "embeddings",
147
+ "chat-completion",
148
+ "annadata",
149
+ "annadata.ai",
150
+ "llama-cpp-pro",
151
+ "llama-cpp-capacitor",
152
+ "large-language-model"
153
+ ],
154
+ "scripts": {
155
+ "verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
156
+ "verify:ios": "xcodebuild -scheme LlamaCpp -destination generic/platform=iOS",
157
+ "verify:android": "cd android && gradlew.bat clean build test && cd ..",
158
+ "verify:web": "npm run build",
159
+ "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
160
+ "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
161
+ "eslint": "eslint . --ext ts",
162
+ "prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
163
+ "swiftlint": "node-swiftlint",
164
+ "docgen": "npx docgen --api LlamaCppPlugin --output-readme README.md --output-json dist/docs.json",
165
+ "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
166
+ "build:js": "node ./scripts/build-js-preserve-wasm.cjs",
167
+ "prepare": "node ./scripts/prepare-js-dist.cjs",
168
+ "build:wasm": "LLAMA_WASM_JSPI=1 LLAMA_WASM_PTHREAD=0 ./scripts/build-wasm.sh",
169
+ "build:wasm:jspi": "LLAMA_WASM_JSPI=1 LLAMA_WASM_PTHREAD=0 ./scripts/build-wasm.sh",
170
+ "build:wasm:pthreads": "LLAMA_WASM_JSPI=1 LLAMA_WASM_PTHREAD=1 ./scripts/build-wasm.sh",
171
+ "build:wasm:full": "LLAMA_WASM_JSPI=1 LLAMA_WASM_PTHREAD=0 ./scripts/build-wasm.sh",
172
+ "build:worker": "node ./scripts/build-worker.mjs",
173
+ "build:wasm:assets": "node ./scripts/copy-wasm-assets.mjs",
174
+ "build:native": "./build-native.sh",
175
+ "build:sidecar": "./scripts/build-sidecar.sh",
176
+ "build:sidecar:metal": "./scripts/build-sidecar.sh metal-coreml",
177
+ "build:sidecar:cpu": "./scripts/build-sidecar.sh cpu",
178
+ "build:sidecar:linux": "bash ./scripts/build-sidecar-linux.sh",
179
+ "build:sidecar:win": "scripts\\build-sidecar-win.bat",
180
+ "build:sidecar:cuda": "./scripts/build-sidecar.sh cuda",
181
+ "build:sidecar:rocm": "./scripts/build-sidecar.sh rocm",
182
+ "build:sidecar:vulkan": "./scripts/build-sidecar.sh vulkan-openblas",
183
+ "build:sidecar:intel": "./scripts/build-sidecar.sh vulkan",
184
+ "build:sidecar:darwin-x64": "./scripts/build-sidecar.sh darwin-x64",
185
+ "build:sidecar:universal": "./scripts/build-sidecar.sh universal",
186
+ "stage:desktop": "node ./scripts/stage-desktop-resources.cjs",
187
+ "verify:desktop:bundle": "node ./scripts/ensure-desktop-sidecar-bundle.cjs",
188
+ "build:desktop": "npm run build:pwa && npm run build:sidecar && npm run stage:desktop",
189
+ "build:desktop:universal": "npm run build:pwa && npm run build:sidecar:universal && npm run stage:desktop",
190
+ "build:all": "npm run build && npm run build:native",
191
+ "build:pwa": "npm run build:wasm && npm run build:worker && npm run build:wasm:assets",
192
+ "build:pwa:full": "npm run build:wasm:full && npm run build:worker && npm run build:wasm:assets",
193
+ "build:ios:xcframework": "bash ./scripts/ensure-llama-ios-xcframework.sh",
194
+ "ios:prepare": "npm run build:ios:xcframework",
195
+ "build:package": "npm run build && npm run build:native && npm run build:pwa",
196
+ "build:package:full": "npm run build && npm run build:native && npm run build:pwa:full",
197
+ "verify:pack:artifacts": "node ./scripts/verify-pack-artifacts.mjs",
198
+ "build:ios": "cd ios && cmake -B build -S . && cmake --build build --config Release",
199
+ "build:android": "cd android && gradlew.bat assembleRelease",
200
+ "prepack": "npm run build:package && npm run verify:pack:artifacts",
201
+ "pack": "npm pack --dry-run",
202
+ "pack:full": "npm run build:package:full && npm run verify:pack:artifacts && npm pack --ignore-scripts",
203
+ "release:pack": "npm run build:wasm:assets && npm run verify:pack:artifacts && npm pack --ignore-scripts",
204
+ "release:0.2.0": "npm run build:package:full && npm run verify:pwa && npm run release:pack",
205
+ "test": "jest",
206
+ "test:pwa:smoke": "jest --config test/jest.pwa.config.cjs",
207
+ "verify:pwa": "npx tsc -p tsconfig.json --noEmit && npm run test:pwa:smoke",
208
+ "release:gate:pwa": "./scripts/pwa-release-gate.sh",
209
+ "test:integration": "./scripts/test-integration.sh",
210
+ "test:integration:jest": "jest --config test/jest.integration.config.js",
211
+ "test:integration:custom": "ts-node test/integration/test-runner.ts",
212
+ "test:unit": "jest --testPathIgnorePatterns=test/integration",
213
+ "test:coverage": "jest --coverage",
214
+ "clean": "rimraf ./dist",
215
+ "clean:native": "rimraf ios/build ios/Frameworks android/build android/src/main/jniLibs",
216
+ "clean:wasm": "rimraf src-rust/target src-rust/pkg dist/wasm",
217
+ "clean:all": "npm run clean && npm run clean:native && npm run clean:wasm",
218
+ "clean:test": "rimraf test/output test/coverage",
219
+ "watch": "tsc --watch",
220
+ "prepublishOnly": "npm run build"
221
+ },
222
+ "devDependencies": {
223
+ "@capacitor/android": "^8.0.0",
224
+ "@capacitor/core": "^8.0.0",
225
+ "@capacitor/docgen": "^0.3.0",
226
+ "@capacitor/ios": "^8.0.0",
227
+ "@ionic/eslint-config": "^0.4.0",
228
+ "@ionic/prettier-config": "^4.0.0",
229
+ "@ionic/swiftlint-config": "^2.0.0",
230
+ "@types/jest": "^30.0.0",
231
+ "eslint": "^8.57.0",
232
+ "jest": "^30.4.2",
233
+ "prettier": "^3.4.2",
234
+ "prettier-plugin-java": "^2.6.6",
235
+ "rimraf": "^6.0.1",
236
+ "rollup": "^4.30.1",
237
+ "swiftlint": "^2.0.0",
238
+ "ts-jest": "^29.4.11",
239
+ "typescript": "^5.0.0"
240
+ },
241
+ "peerDependencies": {
242
+ "@capacitor/core": ">=6.0.0"
243
+ },
244
+ "peerDependenciesMeta": {
245
+ "@capacitor/core": {
246
+ "optional": false
247
+ }
248
+ },
249
+ "prettier": "@ionic/prettier-config",
250
+ "swiftlint": "@ionic/swiftlint-config",
251
+ "eslintConfig": {
252
+ "extends": "@ionic/eslint-config/recommended"
253
+ },
254
+ "jest": {
255
+ "preset": "ts-jest",
256
+ "testEnvironment": "node",
257
+ "roots": [
258
+ "<rootDir>/test"
259
+ ],
260
+ "testMatch": [
261
+ "**/*.test.ts"
262
+ ],
263
+ "moduleFileExtensions": [
264
+ "ts",
265
+ "js",
266
+ "json"
267
+ ],
268
+ "collectCoverageFrom": [
269
+ "src/**/*.ts",
270
+ "!src/**/*.d.ts"
271
+ ]
272
+ },
273
+ "capacitor": {
274
+ "ios": {
275
+ "src": "ios"
276
+ },
277
+ "android": {
278
+ "src": "android"
279
+ }
280
+ }
281
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Build TypeScript + Rollup JS without wiping dist/wasm (or workers).
3
+ */
4
+ const { existsSync, mkdirSync, rmSync, renameSync, cpSync } = require('node:fs');
5
+ const { join } = require('node:path');
6
+ const { spawnSync } = require('node:child_process');
7
+
8
+ const root = join(__dirname, '..');
9
+ const dist = join(root, 'dist');
10
+ const stash = join(root, '.dist-stash');
11
+
12
+ const run = (cmd, args) => {
13
+ const r = spawnSync(cmd, args, { cwd: root, stdio: 'inherit', shell: process.platform === 'win32' });
14
+ if (r.status !== 0) process.exit(r.status ?? 1);
15
+ };
16
+
17
+ // Stash large assets if present.
18
+ if (existsSync(stash)) rmSync(stash, { recursive: true, force: true });
19
+ mkdirSync(stash, { recursive: true });
20
+ for (const name of ['wasm', 'workers']) {
21
+ const from = join(dist, name);
22
+ if (existsSync(from)) {
23
+ renameSync(from, join(stash, name));
24
+ }
25
+ }
26
+
27
+ for (const name of [
28
+ 'esm',
29
+ 'plugin.js',
30
+ 'plugin.cjs',
31
+ 'plugin.cjs.js',
32
+ 'plugin.js.map',
33
+ 'plugin.cjs.map',
34
+ 'plugin.cjs.js.map',
35
+ 'docs.json',
36
+ ]) {
37
+ const p = join(dist, name);
38
+ if (existsSync(p)) rmSync(p, { recursive: true, force: true });
39
+ }
40
+
41
+ run(join(root, 'node_modules', '.bin', 'tsc'), []);
42
+ run(process.execPath, [join(root, 'scripts', 'fix-esm-extensions.cjs')]);
43
+ run(join(root, 'node_modules', '.bin', 'rollup'), ['-c', 'rollup.config.mjs']);
44
+ mkdirSync(dist, { recursive: true });
45
+ for (const name of ['wasm', 'workers']) {
46
+ const from = join(stash, name);
47
+ if (existsSync(from)) {
48
+ cpSync(from, join(dist, name), { recursive: true });
49
+ }
50
+ }
51
+ rmSync(stash, { recursive: true, force: true });
52
+
53
+ console.log('[llama-cpp-pro] build:js complete (wasm preserved if present)');
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ # Build llama-cpp sidecar for Linux (x64) with Vulkan default; optional variant arg.
3
+ set -euo pipefail
4
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
5
+ VARIANT="${1:-vulkan-openblas}"
6
+ exec "${ROOT}/scripts/build-sidecar.sh" "${VARIANT}"
@@ -0,0 +1,19 @@
1
+ @echo off
2
+ REM Build llama-cpp sidecar for Windows x64 (Vulkan + OpenBLAS default)
3
+ setlocal
4
+ set ROOT=%~dp0..
5
+ set VARIANT=%1
6
+ if "%VARIANT%"=="" set VARIANT=vulkan-openblas
7
+
8
+ if not exist "%ROOT%\sidecar\build" mkdir "%ROOT%\sidecar\build"
9
+
10
+ cmake -B "%ROOT%\sidecar\build" -S "%ROOT%\sidecar" ^
11
+ -DCMAKE_BUILD_TYPE=Release ^
12
+ -DSIDECAR_VARIANT=%VARIANT%
13
+
14
+ cmake --build "%ROOT%\sidecar\build" --config Release -j
15
+
16
+ if not exist "%ROOT%\sidecar\bin" mkdir "%ROOT%\sidecar\bin"
17
+ copy /Y "%ROOT%\sidecar\build\bin\*" "%ROOT%\sidecar\bin\"
18
+
19
+ echo Sidecar built: %ROOT%\sidecar\bin
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env bash
2
+ # Build the llama-cpp desktop sidecar for the current host platform.
3
+ #
4
+ # Usage:
5
+ # ./scripts/build-sidecar.sh [variant]
6
+ # ./scripts/build-sidecar.sh [variant] --arch arm64|x64|host
7
+ # ./scripts/build-sidecar.sh darwin-x64 # cross-build Intel Mac binary
8
+ # ./scripts/build-sidecar.sh universal # arm64 + x64 on macOS
9
+ #
10
+ # Variants: metal-coreml | metal | vulkan-openblas | cuda | rocm | cpu | openblas | vulkan
11
+ #
12
+ # Optional env:
13
+ # LLAMA_CPP_UPSTREAM=/path/to/llama.cpp — also build ggml GPU backend plugins
14
+ # OPENBLAS_ROOT=/path/to/openblas
15
+ # SIDECAR_ARCH=arm64|x64 — same as --arch
16
+
17
+ set -euo pipefail
18
+
19
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
20
+ VARIANT=""
21
+ ARCH_OPT="${SIDECAR_ARCH:-host}"
22
+
23
+ while [[ $# -gt 0 ]]; do
24
+ case "$1" in
25
+ --arch)
26
+ shift
27
+ ARCH_OPT="${1:-}"
28
+ if [[ -z "${ARCH_OPT}" ]]; then
29
+ echo "error: --arch requires arm64|x64|host" >&2
30
+ exit 1
31
+ fi
32
+ ;;
33
+ --arch=*)
34
+ ARCH_OPT="${1#--arch=}"
35
+ ;;
36
+ -h|--help)
37
+ sed -n '2,16p' "$0"
38
+ exit 0
39
+ ;;
40
+ *)
41
+ if [[ -z "${VARIANT}" ]]; then
42
+ VARIANT="$1"
43
+ else
44
+ echo "error: unexpected argument: $1" >&2
45
+ exit 1
46
+ fi
47
+ ;;
48
+ esac
49
+ shift
50
+ done
51
+
52
+ # Aliases that imply arch + Metal backend on macOS
53
+ if [[ "${VARIANT}" == "darwin-x64" ]]; then
54
+ VARIANT="metal"
55
+ ARCH_OPT="x64"
56
+ elif [[ "${VARIANT}" == "darwin-arm64" ]]; then
57
+ if [[ "$(uname -m)" == "arm64" ]]; then
58
+ VARIANT="metal-coreml"
59
+ else
60
+ VARIANT="metal"
61
+ fi
62
+ ARCH_OPT="arm64"
63
+ elif [[ "${VARIANT}" == "universal" ]]; then
64
+ if [[ "$(uname -s)" != "Darwin" ]]; then
65
+ echo "error: universal sidecar builds are only supported on macOS" >&2
66
+ exit 1
67
+ fi
68
+ echo "==> Building universal macOS sidecars (arm64 + x64)"
69
+ "$0" metal-coreml --arch=arm64
70
+ "$0" metal --arch=x64
71
+ echo "==> Universal sidecar binaries:"
72
+ ls -la "${ROOT}/sidecar/bin"/darwin-* || true
73
+ exit 0
74
+ fi
75
+
76
+ if [[ -z "${VARIANT}" ]]; then
77
+ case "$(uname -s)" in
78
+ Darwin)
79
+ if [[ "$(uname -m)" == "arm64" && "${ARCH_OPT}" != "x64" ]]; then
80
+ VARIANT="metal-coreml"
81
+ else
82
+ VARIANT="metal"
83
+ fi
84
+ ;;
85
+ Linux) VARIANT="vulkan-openblas" ;;
86
+ *) VARIANT="cpu" ;;
87
+ esac
88
+ fi
89
+
90
+ # Resolve arch → CMAKE_OSX_ARCHITECTURES / build dir suffix
91
+ HOST_ARCH="$(uname -m)"
92
+ case "${ARCH_OPT}" in
93
+ host|"")
94
+ if [[ "${HOST_ARCH}" == "arm64" ]]; then
95
+ TARGET_ARCH="arm64"
96
+ OSX_ARCH="arm64"
97
+ else
98
+ TARGET_ARCH="x64"
99
+ OSX_ARCH="x86_64"
100
+ fi
101
+ ;;
102
+ arm64)
103
+ TARGET_ARCH="arm64"
104
+ OSX_ARCH="arm64"
105
+ ;;
106
+ x64|x86_64|amd64)
107
+ TARGET_ARCH="x64"
108
+ OSX_ARCH="x86_64"
109
+ ;;
110
+ *)
111
+ echo "error: unknown arch '${ARCH_OPT}' (use arm64|x64|host)" >&2
112
+ exit 1
113
+ ;;
114
+ esac
115
+
116
+ # metal-coreml is Apple Silicon only
117
+ if [[ "${VARIANT}" == "metal-coreml" && "${TARGET_ARCH}" == "x64" ]]; then
118
+ echo "==> Note: metal-coreml is arm64-only; using metal for darwin-x64"
119
+ VARIANT="metal"
120
+ fi
121
+
122
+ BUILD_DIR="${ROOT}/sidecar/build-${TARGET_ARCH}"
123
+ BIN_DIR="${ROOT}/sidecar/bin"
124
+ mkdir -p "${BIN_DIR}"
125
+
126
+ CMAKE_ARGS=(
127
+ -B "${BUILD_DIR}"
128
+ -S "${ROOT}/sidecar"
129
+ -DCMAKE_BUILD_TYPE=Release
130
+ "-DSIDECAR_VARIANT=${VARIANT}"
131
+ )
132
+
133
+ if [[ "$(uname -s)" == "Darwin" ]]; then
134
+ CMAKE_ARGS+=("-DCMAKE_OSX_ARCHITECTURES=${OSX_ARCH}")
135
+ fi
136
+
137
+ if [[ -n "${LLAMA_CPP_UPSTREAM:-}" ]]; then
138
+ CMAKE_ARGS+=("-DLLAMA_CPP_UPSTREAM=${LLAMA_CPP_UPSTREAM}")
139
+ fi
140
+
141
+ echo "==> Configuring sidecar (variant=${VARIANT} arch=${TARGET_ARCH})"
142
+ cmake "${CMAKE_ARGS[@]}"
143
+
144
+ echo "==> Building sidecar"
145
+ cmake --build "${BUILD_DIR}" --config Release -j"$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)"
146
+
147
+ echo "==> Staging binaries to sidecar/bin/"
148
+ # Prefer the expected named binary; fall back to copying executables from build/bin
149
+ EXPECTED_NAME=""
150
+ if [[ "$(uname -s)" == "Darwin" ]]; then
151
+ EXPECTED_NAME="darwin-${TARGET_ARCH}"
152
+ elif [[ "$(uname -s)" == "Linux" ]]; then
153
+ if [[ "${VARIANT}" == "vulkan-openblas" ]]; then
154
+ EXPECTED_NAME="linux-${TARGET_ARCH}"
155
+ else
156
+ EXPECTED_NAME="linux-${TARGET_ARCH}-${VARIANT}"
157
+ fi
158
+ fi
159
+
160
+ if [[ -n "${EXPECTED_NAME}" && -f "${BUILD_DIR}/bin/${EXPECTED_NAME}" ]]; then
161
+ cp -f "${BUILD_DIR}/bin/${EXPECTED_NAME}" "${BIN_DIR}/"
162
+ elif [[ -n "${EXPECTED_NAME}" && -f "${BUILD_DIR}/bin/${EXPECTED_NAME}.exe" ]]; then
163
+ cp -f "${BUILD_DIR}/bin/${EXPECTED_NAME}.exe" "${BIN_DIR}/"
164
+ else
165
+ find "${BUILD_DIR}/bin" -maxdepth 1 -type f -perm +111 2>/dev/null | while read -r f; do
166
+ cp -f "$f" "${BIN_DIR}/"
167
+ done
168
+ fi
169
+
170
+ find "${BUILD_DIR}/bin" -maxdepth 1 -type f \( -name "*.exe" -o -name "*.dll" -o -name "*.so" -o -name "libggml-*" -o -name "ggml-*" \) 2>/dev/null | while read -r f; do
171
+ cp -f "$f" "${BIN_DIR}/" || true
172
+ done
173
+
174
+ if [[ -n "${EXPECTED_NAME}" ]]; then
175
+ STAGED="${BIN_DIR}/${EXPECTED_NAME}"
176
+ if [[ -f "${STAGED}" ]]; then
177
+ echo "==> Built $(file "${STAGED}")"
178
+ else
179
+ echo "warning: expected ${EXPECTED_NAME} not found in ${BIN_DIR}" >&2
180
+ fi
181
+ fi
182
+
183
+ echo "==> Done. Binaries in ${BIN_DIR}:"
184
+ ls -la "${BIN_DIR}" || true
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env bash
2
+ # Copy the correct llama-cpp.xcframework slice into App.app/Frameworks for dlopen.
3
+ # Invoked from the iOS app Xcode target (Run Script) or manually with Xcode env vars set.
4
+ set -euo pipefail
5
+
6
+ if [ -z "${TARGET_BUILD_DIR:-}" ] || [ -z "${FRAMEWORKS_FOLDER_PATH:-}" ]; then
7
+ echo "embed-llama-ios-app-framework: skip (not running inside an Xcode build)."
8
+ exit 0
9
+ fi
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12
+ PLUGIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
13
+ XCF="$PLUGIN_DIR/ios/Frameworks/llama-cpp.xcframework"
14
+
15
+ if [ ! -d "$XCF" ]; then
16
+ echo "error: missing $XCF" >&2
17
+ echo " From your app root run: npm run ios:prepare-llama-cpp" >&2
18
+ exit 1
19
+ fi
20
+
21
+ pick_slice() {
22
+ case "${PLATFORM_NAME:-}" in
23
+ iphoneos)
24
+ echo "ios-arm64"
25
+ ;;
26
+ iphonesimulator)
27
+ if [ -d "$XCF/ios-arm64-simulator" ]; then
28
+ echo "ios-arm64-simulator"
29
+ elif [ -d "$XCF/ios-x86_64-simulator" ]; then
30
+ echo "ios-x86_64-simulator"
31
+ else
32
+ echo "error: no simulator slice in $XCF" >&2
33
+ exit 1
34
+ fi
35
+ ;;
36
+ *)
37
+ echo "error: unsupported PLATFORM_NAME=${PLATFORM_NAME:-}" >&2
38
+ exit 1
39
+ ;;
40
+ esac
41
+ }
42
+
43
+ SLICE="$(pick_slice)"
44
+ SRC_FW="$XCF/$SLICE/llama-cpp.framework"
45
+ DEST_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
46
+ DEST_FW="$DEST_DIR/llama-cpp.framework"
47
+ DEST_BIN="$DEST_FW/llama-cpp"
48
+
49
+ if [ ! -f "$SRC_FW/llama-cpp" ]; then
50
+ echo "error: xcframework slice binary missing: $SRC_FW/llama-cpp" >&2
51
+ exit 1
52
+ fi
53
+
54
+ mkdir -p "$DEST_DIR"
55
+ rm -rf "$DEST_FW"
56
+ ditto "$SRC_FW" "$DEST_FW"
57
+
58
+ if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" ] && [ "${CODE_SIGNING_ALLOWED:-}" != "NO" ]; then
59
+ /usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" \
60
+ --preserve-metadata=identifier,entitlements,flags "$DEST_BIN" 2>/dev/null || true
61
+ fi
62
+
63
+ echo "Embedded llama-cpp.framework ($SLICE) -> $DEST_FW"