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
@@ -0,0 +1,694 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ /**
5
+ * Please read the Capacitor iOS Plugin Development Guide
6
+ * here: https://capacitorjs.com/docs/plugins/ios
7
+ */
8
+ @objc(LlamaCppPlugin)
9
+ public class LlamaCppPlugin: CAPPlugin, CAPBridgedPlugin {
10
+ public let identifier = "LlamaCppPlugin"
11
+ public let jsName = "LlamaCpp"
12
+ public let pluginMethods: [CAPPluginMethod] = [
13
+ // Core initialization and management
14
+ CAPPluginMethod(name: "toggleNativeLog", returnType: CAPPluginReturnPromise),
15
+ CAPPluginMethod(name: "setContextLimit", returnType: CAPPluginReturnPromise),
16
+ CAPPluginMethod(name: "modelInfo", returnType: CAPPluginReturnPromise),
17
+ CAPPluginMethod(name: "initContext", returnType: CAPPluginReturnPromise),
18
+ CAPPluginMethod(name: "releaseContext", returnType: CAPPluginReturnPromise),
19
+ CAPPluginMethod(name: "releaseAllContexts", returnType: CAPPluginReturnPromise),
20
+
21
+ // Chat and completion
22
+ CAPPluginMethod(name: "getFormattedChat", returnType: CAPPluginReturnPromise),
23
+ CAPPluginMethod(name: "completion", returnType: CAPPluginReturnPromise),
24
+ CAPPluginMethod(name: "stopCompletion", returnType: CAPPluginReturnPromise),
25
+
26
+ // Chat-first methods (like llama-cli -sys)
27
+ CAPPluginMethod(name: "chat", returnType: CAPPluginReturnPromise),
28
+ CAPPluginMethod(name: "chatWithSystem", returnType: CAPPluginReturnPromise),
29
+ CAPPluginMethod(name: "generateText", returnType: CAPPluginReturnPromise),
30
+
31
+ // Session management
32
+ CAPPluginMethod(name: "loadSession", returnType: CAPPluginReturnPromise),
33
+ CAPPluginMethod(name: "saveSession", returnType: CAPPluginReturnPromise),
34
+
35
+ // Tokenization
36
+ CAPPluginMethod(name: "tokenize", returnType: CAPPluginReturnPromise),
37
+ CAPPluginMethod(name: "detokenize", returnType: CAPPluginReturnPromise),
38
+
39
+ // Embeddings and reranking
40
+ CAPPluginMethod(name: "embedding", returnType: CAPPluginReturnPromise),
41
+ CAPPluginMethod(name: "rerank", returnType: CAPPluginReturnPromise),
42
+
43
+ // Benchmarking
44
+ CAPPluginMethod(name: "bench", returnType: CAPPluginReturnPromise),
45
+
46
+ // LoRA adapters
47
+ CAPPluginMethod(name: "applyLoraAdapters", returnType: CAPPluginReturnPromise),
48
+ CAPPluginMethod(name: "removeLoraAdapters", returnType: CAPPluginReturnPromise),
49
+ CAPPluginMethod(name: "getLoadedLoraAdapters", returnType: CAPPluginReturnPromise),
50
+
51
+ // Multimodal methods
52
+ CAPPluginMethod(name: "initMultimodal", returnType: CAPPluginReturnPromise),
53
+ CAPPluginMethod(name: "isMultimodalEnabled", returnType: CAPPluginReturnPromise),
54
+ CAPPluginMethod(name: "getMultimodalSupport", returnType: CAPPluginReturnPromise),
55
+ CAPPluginMethod(name: "releaseMultimodal", returnType: CAPPluginReturnPromise),
56
+
57
+ // TTS methods
58
+ CAPPluginMethod(name: "initVocoder", returnType: CAPPluginReturnPromise),
59
+ CAPPluginMethod(name: "isVocoderEnabled", returnType: CAPPluginReturnPromise),
60
+ CAPPluginMethod(name: "getFormattedAudioCompletion", returnType: CAPPluginReturnPromise),
61
+ CAPPluginMethod(name: "getAudioCompletionGuideTokens", returnType: CAPPluginReturnPromise),
62
+ CAPPluginMethod(name: "decodeAudioTokens", returnType: CAPPluginReturnPromise),
63
+ CAPPluginMethod(name: "releaseVocoder", returnType: CAPPluginReturnPromise),
64
+
65
+ // Model download and management
66
+ CAPPluginMethod(name: "downloadModel", returnType: CAPPluginReturnPromise),
67
+ CAPPluginMethod(name: "getDownloadProgress", returnType: CAPPluginReturnPromise),
68
+ CAPPluginMethod(name: "cancelDownload", returnType: CAPPluginReturnPromise),
69
+ CAPPluginMethod(name: "getAvailableModels", returnType: CAPPluginReturnPromise),
70
+
71
+ // Grammar utilities
72
+ CAPPluginMethod(name: "convertJsonSchemaToGrammar", returnType: CAPPluginReturnPromise),
73
+
74
+ // Native in-process HTTP server (loopback)
75
+ CAPPluginMethod(name: "startNativeLlamaServer", returnType: CAPPluginReturnPromise),
76
+ CAPPluginMethod(name: "stopNativeLlamaServer", returnType: CAPPluginReturnPromise),
77
+ CAPPluginMethod(name: "isNativeLlamaServerRunning", returnType: CAPPluginReturnPromise),
78
+
79
+ // Events
80
+ CAPPluginMethod(name: "addListener", returnType: CAPPluginReturnPromise),
81
+ CAPPluginMethod(name: "removeAllListeners", returnType: CAPPluginReturnPromise)
82
+ ]
83
+
84
+ private let implementation = LlamaCpp()
85
+
86
+ // MARK: - Core initialization and management
87
+
88
+ @objc func toggleNativeLog(_ call: CAPPluginCall) {
89
+ let enabled = call.getBool("enabled") ?? false
90
+ implementation.toggleNativeLog(enabled: enabled) { result in
91
+ switch result {
92
+ case .success:
93
+ call.resolve()
94
+ case .failure(let error):
95
+ call.reject(error.localizedDescription)
96
+ }
97
+ }
98
+ }
99
+
100
+ @objc func setContextLimit(_ call: CAPPluginCall) {
101
+ let limit = call.getInt("limit") ?? 0
102
+ implementation.setContextLimit(limit: limit) { result in
103
+ switch result {
104
+ case .success:
105
+ call.resolve()
106
+ case .failure(let error):
107
+ call.reject(error.localizedDescription)
108
+ }
109
+ }
110
+ }
111
+
112
+ @objc func modelInfo(_ call: CAPPluginCall) {
113
+ let path = call.getString("path") ?? ""
114
+ let skip = call.getArray("skip", String.self) ?? []
115
+
116
+ implementation.modelInfo(path: path, skip: skip) { result in
117
+ switch result {
118
+ case .success(let modelInfo):
119
+ call.resolve(modelInfo)
120
+ case .failure(let error):
121
+ call.reject(error.localizedDescription)
122
+ }
123
+ }
124
+ }
125
+
126
+ @objc func initContext(_ call: CAPPluginCall) {
127
+ let contextId = call.getInt("contextId") ?? 0
128
+ let params = call.getObject("params") ?? [:]
129
+
130
+ implementation.initContext(contextId: contextId, params: params) { result in
131
+ switch result {
132
+ case .success(let context):
133
+ call.resolve(context)
134
+ case .failure(let error):
135
+ call.reject(error.localizedDescription)
136
+ }
137
+ }
138
+ }
139
+
140
+ @objc func releaseContext(_ call: CAPPluginCall) {
141
+ let contextId = call.getInt("contextId") ?? 0
142
+
143
+ implementation.releaseContext(contextId: contextId) { result in
144
+ switch result {
145
+ case .success:
146
+ call.resolve()
147
+ case .failure(let error):
148
+ call.reject(error.localizedDescription)
149
+ }
150
+ }
151
+ }
152
+
153
+ @objc func releaseAllContexts(_ call: CAPPluginCall) {
154
+ implementation.releaseAllContexts { result in
155
+ switch result {
156
+ case .success:
157
+ call.resolve()
158
+ case .failure(let error):
159
+ call.reject(error.localizedDescription)
160
+ }
161
+ }
162
+ }
163
+
164
+ // MARK: - Chat and completion
165
+
166
+ @objc func getFormattedChat(_ call: CAPPluginCall) {
167
+ let contextId = call.getInt("contextId") ?? 0
168
+ let messages = call.getString("messages") ?? ""
169
+ let chatTemplate = call.getString("chatTemplate")
170
+ let params = call.getObject("params")
171
+
172
+ implementation.getFormattedChat(
173
+ contextId: contextId,
174
+ messages: messages,
175
+ chatTemplate: chatTemplate,
176
+ params: params
177
+ ) { result in
178
+ switch result {
179
+ case .success(let formattedChat):
180
+ call.resolve(formattedChat)
181
+ case .failure(let error):
182
+ call.reject(error.localizedDescription)
183
+ }
184
+ }
185
+ }
186
+
187
+ @objc func completion(_ call: CAPPluginCall) {
188
+ let contextId = call.getInt("contextId") ?? 0
189
+ let params = call.getObject("params") ?? [:]
190
+
191
+ implementation.completion(contextId: contextId, params: params) { result in
192
+ switch result {
193
+ case .success(let completionResult):
194
+ call.resolve(completionResult)
195
+ case .failure(let error):
196
+ call.reject(error.localizedDescription)
197
+ }
198
+ }
199
+ }
200
+
201
+ @objc func stopCompletion(_ call: CAPPluginCall) {
202
+ let contextId = call.getInt("contextId") ?? 0
203
+
204
+ implementation.stopCompletion(contextId: contextId) { result in
205
+ switch result {
206
+ case .success:
207
+ call.resolve()
208
+ case .failure(let error):
209
+ call.reject(error.localizedDescription)
210
+ }
211
+ }
212
+ }
213
+
214
+ // MARK: - Chat-first methods (like llama-cli -sys)
215
+
216
+ @objc func chat(_ call: CAPPluginCall) {
217
+ let contextId = call.getInt("contextId") ?? 0
218
+ let messages = call.getArray("messages", JSObject.self) ?? []
219
+ let system = call.getString("system")
220
+ let chatTemplate = call.getString("chatTemplate")
221
+ let params = call.getObject("params")
222
+
223
+ implementation.chat(contextId: contextId, messages: messages, system: system, chatTemplate: chatTemplate, params: params) { result in
224
+ switch result {
225
+ case .success(let completionResult):
226
+ call.resolve(completionResult)
227
+ case .failure(let error):
228
+ call.reject(error.localizedDescription)
229
+ }
230
+ }
231
+ }
232
+
233
+ @objc func chatWithSystem(_ call: CAPPluginCall) {
234
+ let contextId = call.getInt("contextId") ?? 0
235
+ let system = call.getString("system") ?? ""
236
+ let message = call.getString("message") ?? ""
237
+ let params = call.getObject("params")
238
+
239
+ implementation.chatWithSystem(contextId: contextId, system: system, message: message, params: params) { result in
240
+ switch result {
241
+ case .success(let completionResult):
242
+ call.resolve(completionResult)
243
+ case .failure(let error):
244
+ call.reject(error.localizedDescription)
245
+ }
246
+ }
247
+ }
248
+
249
+ @objc func generateText(_ call: CAPPluginCall) {
250
+ let contextId = call.getInt("contextId") ?? 0
251
+ let prompt = call.getString("prompt") ?? ""
252
+ let params = call.getObject("params")
253
+
254
+ implementation.generateText(contextId: contextId, prompt: prompt, params: params) { result in
255
+ switch result {
256
+ case .success(let completionResult):
257
+ call.resolve(completionResult)
258
+ case .failure(let error):
259
+ call.reject(error.localizedDescription)
260
+ }
261
+ }
262
+ }
263
+
264
+ // MARK: - Session management
265
+
266
+ @objc func loadSession(_ call: CAPPluginCall) {
267
+ let contextId = call.getInt("contextId") ?? 0
268
+ let filepath = call.getString("filepath") ?? ""
269
+
270
+ implementation.loadSession(contextId: contextId, filepath: filepath) { result in
271
+ switch result {
272
+ case .success(let sessionResult):
273
+ call.resolve(sessionResult)
274
+ case .failure(let error):
275
+ call.reject(error.localizedDescription)
276
+ }
277
+ }
278
+ }
279
+
280
+ @objc func saveSession(_ call: CAPPluginCall) {
281
+ let contextId = call.getInt("contextId") ?? 0
282
+ let filepath = call.getString("filepath") ?? ""
283
+ let size = call.getInt("size") ?? -1
284
+
285
+ implementation.saveSession(contextId: contextId, filepath: filepath, size: size) { result in
286
+ switch result {
287
+ case .success(let tokensSaved):
288
+ call.resolve(["tokensSaved": tokensSaved])
289
+ case .failure(let error):
290
+ call.reject(error.localizedDescription)
291
+ }
292
+ }
293
+ }
294
+
295
+ // MARK: - Tokenization
296
+
297
+ @objc func tokenize(_ call: CAPPluginCall) {
298
+ let contextId = call.getInt("contextId") ?? 0
299
+ let text = call.getString("text") ?? ""
300
+ let imagePaths = call.getArray("imagePaths", String.self) ?? []
301
+
302
+ implementation.tokenize(contextId: contextId, text: text, imagePaths: imagePaths) { result in
303
+ switch result {
304
+ case .success(let tokenizeResult):
305
+ call.resolve(tokenizeResult)
306
+ case .failure(let error):
307
+ call.reject(error.localizedDescription)
308
+ }
309
+ }
310
+ }
311
+
312
+ @objc func detokenize(_ call: CAPPluginCall) {
313
+ let contextId = call.getInt("contextId") ?? 0
314
+ let tokens = call.getArray("tokens", Int.self) ?? []
315
+
316
+ implementation.detokenize(contextId: contextId, tokens: tokens) { result in
317
+ switch result {
318
+ case .success(let text):
319
+ call.resolve(["text": text])
320
+ case .failure(let error):
321
+ call.reject(error.localizedDescription)
322
+ }
323
+ }
324
+ }
325
+
326
+ // MARK: - Embeddings and reranking
327
+
328
+ @objc func embedding(_ call: CAPPluginCall) {
329
+ let contextId = call.getInt("contextId") ?? 0
330
+ let text = call.getString("text") ?? ""
331
+ let params = call.getObject("params") ?? [:]
332
+
333
+ implementation.embedding(contextId: contextId, text: text, params: params) { result in
334
+ switch result {
335
+ case .success(let embeddingResult):
336
+ call.resolve(embeddingResult)
337
+ case .failure(let error):
338
+ call.reject(error.localizedDescription)
339
+ }
340
+ }
341
+ }
342
+
343
+ @objc func rerank(_ call: CAPPluginCall) {
344
+ let contextId = call.getInt("contextId") ?? 0
345
+ let query = call.getString("query") ?? ""
346
+ let documents = call.getArray("documents", String.self) ?? []
347
+ let params = call.getObject("params")
348
+
349
+ implementation.rerank(contextId: contextId, query: query, documents: documents, params: params) { result in
350
+ switch result {
351
+ case .success(let rerankResults):
352
+ call.resolve(["results": rerankResults])
353
+ case .failure(let error):
354
+ call.reject(error.localizedDescription)
355
+ }
356
+ }
357
+ }
358
+
359
+ // MARK: - Benchmarking
360
+
361
+ @objc func bench(_ call: CAPPluginCall) {
362
+ let contextId = call.getInt("contextId") ?? 0
363
+ let pp = call.getInt("pp") ?? 0
364
+ let tg = call.getInt("tg") ?? 0
365
+ let pl = call.getInt("pl") ?? 0
366
+ let nr = call.getInt("nr") ?? 0
367
+
368
+ implementation.bench(contextId: contextId, pp: pp, tg: tg, pl: pl, nr: nr) { result in
369
+ switch result {
370
+ case .success(let benchResult):
371
+ call.resolve(["result": benchResult])
372
+ case .failure(let error):
373
+ call.reject(error.localizedDescription)
374
+ }
375
+ }
376
+ }
377
+
378
+ // MARK: - LoRA adapters
379
+
380
+ @objc func applyLoraAdapters(_ call: CAPPluginCall) {
381
+ let contextId = call.getInt("contextId") ?? 0
382
+ let loraAdapters = call.getArray("loraAdapters", [String: Any].self) ?? []
383
+
384
+ implementation.applyLoraAdapters(contextId: contextId, loraAdapters: loraAdapters) { result in
385
+ switch result {
386
+ case .success:
387
+ call.resolve()
388
+ case .failure(let error):
389
+ call.reject(error.localizedDescription)
390
+ }
391
+ }
392
+ }
393
+
394
+ @objc func removeLoraAdapters(_ call: CAPPluginCall) {
395
+ let contextId = call.getInt("contextId") ?? 0
396
+
397
+ implementation.removeLoraAdapters(contextId: contextId) { result in
398
+ switch result {
399
+ case .success:
400
+ call.resolve()
401
+ case .failure(let error):
402
+ call.reject(error.localizedDescription)
403
+ }
404
+ }
405
+ }
406
+
407
+ @objc func getLoadedLoraAdapters(_ call: CAPPluginCall) {
408
+ let contextId = call.getInt("contextId") ?? 0
409
+
410
+ implementation.getLoadedLoraAdapters(contextId: contextId) { result in
411
+ switch result {
412
+ case .success(let adapters):
413
+ call.resolve(["adapters": adapters])
414
+ case .failure(let error):
415
+ call.reject(error.localizedDescription)
416
+ }
417
+ }
418
+ }
419
+
420
+ // MARK: - Multimodal methods
421
+
422
+ @objc func initMultimodal(_ call: CAPPluginCall) {
423
+ let contextId = call.getInt("contextId") ?? 0
424
+ let params = call.getObject("params") ?? [:]
425
+ let path = params["path"] as? String ?? ""
426
+ let useGpu = params["use_gpu"] as? Bool ?? true
427
+
428
+ implementation.initMultimodal(contextId: contextId, path: path, useGpu: useGpu) { result in
429
+ switch result {
430
+ case .success(let success):
431
+ call.resolve(["success": success])
432
+ case .failure(let error):
433
+ call.reject(error.localizedDescription)
434
+ }
435
+ }
436
+ }
437
+
438
+ @objc func isMultimodalEnabled(_ call: CAPPluginCall) {
439
+ let contextId = call.getInt("contextId") ?? 0
440
+
441
+ implementation.isMultimodalEnabled(contextId: contextId) { result in
442
+ switch result {
443
+ case .success(let enabled):
444
+ call.resolve(["enabled": enabled])
445
+ case .failure(let error):
446
+ call.reject(error.localizedDescription)
447
+ }
448
+ }
449
+ }
450
+
451
+ @objc func getMultimodalSupport(_ call: CAPPluginCall) {
452
+ let contextId = call.getInt("contextId") ?? 0
453
+
454
+ implementation.getMultimodalSupport(contextId: contextId) { result in
455
+ switch result {
456
+ case .success(let support):
457
+ call.resolve(support)
458
+ case .failure(let error):
459
+ call.reject(error.localizedDescription)
460
+ }
461
+ }
462
+ }
463
+
464
+ @objc func releaseMultimodal(_ call: CAPPluginCall) {
465
+ let contextId = call.getInt("contextId") ?? 0
466
+
467
+ implementation.releaseMultimodal(contextId: contextId) { result in
468
+ switch result {
469
+ case .success:
470
+ call.resolve()
471
+ case .failure(let error):
472
+ call.reject(error.localizedDescription)
473
+ }
474
+ }
475
+ }
476
+
477
+ // MARK: - TTS methods
478
+
479
+ @objc func initVocoder(_ call: CAPPluginCall) {
480
+ let contextId = call.getInt("contextId") ?? 0
481
+ let params = call.getObject("params") ?? [:]
482
+ let path = params["path"] as? String ?? ""
483
+ let nBatch = params["n_batch"] as? Int
484
+
485
+ implementation.initVocoder(contextId: contextId, path: path, nBatch: nBatch) { result in
486
+ switch result {
487
+ case .success(let success):
488
+ call.resolve(["success": success])
489
+ case .failure(let error):
490
+ call.reject(error.localizedDescription)
491
+ }
492
+ }
493
+ }
494
+
495
+ @objc func isVocoderEnabled(_ call: CAPPluginCall) {
496
+ let contextId = call.getInt("contextId") ?? 0
497
+
498
+ implementation.isVocoderEnabled(contextId: contextId) { result in
499
+ switch result {
500
+ case .success(let enabled):
501
+ call.resolve(["enabled": enabled])
502
+ case .failure(let error):
503
+ call.reject(error.localizedDescription)
504
+ }
505
+ }
506
+ }
507
+
508
+ @objc func getFormattedAudioCompletion(_ call: CAPPluginCall) {
509
+ let contextId = call.getInt("contextId") ?? 0
510
+ let speakerJsonStr = call.getString("speakerJsonStr") ?? ""
511
+ let textToSpeak = call.getString("textToSpeak") ?? ""
512
+
513
+ implementation.getFormattedAudioCompletion(
514
+ contextId: contextId,
515
+ speakerJsonStr: speakerJsonStr,
516
+ textToSpeak: textToSpeak
517
+ ) { result in
518
+ switch result {
519
+ case .success(let audioCompletion):
520
+ call.resolve(audioCompletion)
521
+ case .failure(let error):
522
+ call.reject(error.localizedDescription)
523
+ }
524
+ }
525
+ }
526
+
527
+ @objc func getAudioCompletionGuideTokens(_ call: CAPPluginCall) {
528
+ let contextId = call.getInt("contextId") ?? 0
529
+ let textToSpeak = call.getString("textToSpeak") ?? ""
530
+
531
+ implementation.getAudioCompletionGuideTokens(contextId: contextId, textToSpeak: textToSpeak) { result in
532
+ switch result {
533
+ case .success(let tokens):
534
+ call.resolve(["tokens": tokens])
535
+ case .failure(let error):
536
+ call.reject(error.localizedDescription)
537
+ }
538
+ }
539
+ }
540
+
541
+ @objc func decodeAudioTokens(_ call: CAPPluginCall) {
542
+ let contextId = call.getInt("contextId") ?? 0
543
+ let tokens = call.getArray("tokens", Int.self) ?? []
544
+
545
+ implementation.decodeAudioTokens(contextId: contextId, tokens: tokens) { result in
546
+ switch result {
547
+ case .success(let decodedTokens):
548
+ call.resolve(["decodedTokens": decodedTokens])
549
+ case .failure(let error):
550
+ call.reject(error.localizedDescription)
551
+ }
552
+ }
553
+ }
554
+
555
+ @objc func releaseVocoder(_ call: CAPPluginCall) {
556
+ let contextId = call.getInt("contextId") ?? 0
557
+
558
+ implementation.releaseVocoder(contextId: contextId) { result in
559
+ switch result {
560
+ case .success:
561
+ call.resolve()
562
+ case .failure(let error):
563
+ call.reject(error.localizedDescription)
564
+ }
565
+ }
566
+ }
567
+
568
+ // MARK: - Events
569
+
570
+ @objc override public func addListener(_ call: CAPPluginCall) {
571
+ let eventName = call.getString("eventName") ?? ""
572
+ // Note: In Capacitor, event listeners are typically handled differently
573
+ // This is a placeholder for the event system
574
+ call.resolve()
575
+ }
576
+
577
+ @objc override public func removeAllListeners(_ call: CAPPluginCall) {
578
+ let eventName = call.getString("eventName") ?? ""
579
+ // Note: In Capacitor, event listeners are typically handled differently
580
+ // This is a placeholder for the event system
581
+ call.resolve()
582
+ }
583
+
584
+ // MARK: - Model download and management
585
+
586
+ @objc func downloadModel(_ call: CAPPluginCall) {
587
+ let url = call.getString("url") ?? ""
588
+ let filename = call.getString("filename") ?? ""
589
+
590
+ implementation.downloadModel(url: url, filename: filename) { result in
591
+ switch result {
592
+ case .success(let path):
593
+ call.resolve(["path": path])
594
+ case .failure(let error):
595
+ call.reject(error.localizedDescription)
596
+ }
597
+ }
598
+ }
599
+
600
+ @objc func getDownloadProgress(_ call: CAPPluginCall) {
601
+ let url = call.getString("url") ?? ""
602
+
603
+ implementation.getDownloadProgress(url: url) { result in
604
+ switch result {
605
+ case .success(let progress):
606
+ call.resolve(progress)
607
+ case .failure(let error):
608
+ call.reject(error.localizedDescription)
609
+ }
610
+ }
611
+ }
612
+
613
+ @objc func cancelDownload(_ call: CAPPluginCall) {
614
+ let url = call.getString("url") ?? ""
615
+
616
+ implementation.cancelDownload(url: url) { result in
617
+ switch result {
618
+ case .success(let cancelled):
619
+ call.resolve(["cancelled": cancelled])
620
+ case .failure(let error):
621
+ call.reject(error.localizedDescription)
622
+ }
623
+ }
624
+ }
625
+
626
+ @objc func getAvailableModels(_ call: CAPPluginCall) {
627
+ implementation.getAvailableModels { result in
628
+ switch result {
629
+ case .success(let models):
630
+ call.resolve(["models": models])
631
+ case .failure(let error):
632
+ call.reject(error.localizedDescription)
633
+ }
634
+ }
635
+ }
636
+
637
+ // MARK: - Native in-process HTTP server
638
+
639
+ @objc func startNativeLlamaServer(_ call: CAPPluginCall) {
640
+ let modelPath = call.getString("modelPath") ?? ""
641
+ if modelPath.isEmpty {
642
+ call.reject("modelPath is required")
643
+ return
644
+ }
645
+ let host = call.getString("host") ?? "127.0.0.1"
646
+ let port = call.getInt("port") ?? 8080
647
+ let params = call.getObject("params") as? [String: Any] ?? [:]
648
+ implementation.startNativeLlamaServer(modelPath: modelPath, host: host, port: port, params: params) { result in
649
+ switch result {
650
+ case .success(let data):
651
+ call.resolve(data)
652
+ case .failure(let error):
653
+ call.reject(error.localizedDescription)
654
+ }
655
+ }
656
+ }
657
+
658
+ @objc func stopNativeLlamaServer(_ call: CAPPluginCall) {
659
+ implementation.stopNativeLlamaServer { result in
660
+ switch result {
661
+ case .success:
662
+ call.resolve()
663
+ case .failure(let error):
664
+ call.reject(error.localizedDescription)
665
+ }
666
+ }
667
+ }
668
+
669
+ @objc func isNativeLlamaServerRunning(_ call: CAPPluginCall) {
670
+ implementation.isNativeLlamaServerRunning { result in
671
+ switch result {
672
+ case .success(let data):
673
+ call.resolve(data)
674
+ case .failure(let error):
675
+ call.reject(error.localizedDescription)
676
+ }
677
+ }
678
+ }
679
+
680
+ // MARK: - Grammar utilities
681
+
682
+ @objc func convertJsonSchemaToGrammar(_ call: CAPPluginCall) {
683
+ let schema = call.getString("schema") ?? ""
684
+
685
+ implementation.convertJsonSchemaToGrammar(schema: schema) { result in
686
+ switch result {
687
+ case .success(let grammar):
688
+ call.resolve(["grammar": grammar])
689
+ case .failure(let error):
690
+ call.reject(error.localizedDescription)
691
+ }
692
+ }
693
+ }
694
+ }