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.
- package/CHANGELOG.md +295 -0
- package/LICENSE +21 -0
- package/LlamaCpp.podspec +33 -0
- package/LlamaCppCapacitor.podspec +33 -0
- package/Package.swift +29 -0
- package/README.md +93 -0
- package/android/build.gradle +88 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/CMakeLists-arm64.txt +138 -0
- package/android/src/main/CMakeLists-x86_64.txt +141 -0
- package/android/src/main/CMakeLists.txt +138 -0
- package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCpp.java +1340 -0
- package/android/src/main/java/ai/annadata/plugin/capacitor/LlamaCppPlugin.java +814 -0
- package/android/src/main/java/ai/annadata/plugin/capacitor/ModelAdmissionController.java +214 -0
- package/android/src/main/jni-chat-session.cpp +261 -0
- package/android/src/main/jni-lora.cpp +197 -0
- package/android/src/main/jni-multimodal.cpp +167 -0
- package/android/src/main/jni-tts.cpp +290 -0
- package/android/src/main/jni-utils.h +148 -0
- package/android/src/main/jni.cpp +1808 -0
- package/android/src/main/jniLibs/arm64-v8a/libllama-cpp-arm64.so +0 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/build-native.sh +280 -0
- package/cmake/desktop-metal-embed.cmake +30 -0
- package/cmake/desktop-sources.cmake +100 -0
- package/cmake/ggml-backends.cmake +44 -0
- package/cpp/LICENSE +21 -0
- package/cpp/README.md +15 -0
- package/cpp/anyascii.c +22223 -0
- package/cpp/anyascii.h +42 -0
- package/cpp/cap-completion.cpp +942 -0
- package/cpp/cap-completion.h +127 -0
- package/cpp/cap-embedding.cpp +193 -0
- package/cpp/cap-embedding.h +35 -0
- package/cpp/cap-ios-bridge.cpp +1810 -0
- package/cpp/cap-ios-bridge.h +61 -0
- package/cpp/cap-llama.cpp +412 -0
- package/cpp/cap-llama.h +161 -0
- package/cpp/cap-mtmd.hpp +602 -0
- package/cpp/cap-native-server.cpp +1095 -0
- package/cpp/cap-native-server.h +40 -0
- package/cpp/cap-tts.cpp +591 -0
- package/cpp/cap-tts.h +59 -0
- package/cpp/cap-wasm-fs.cpp +156 -0
- package/cpp/cap-wasm-jspi.cpp +19 -0
- package/cpp/cap-wasm-jspi.h +30 -0
- package/cpp/cap-wasm-vfs.cpp +22 -0
- package/cpp/chat-parser.cpp +393 -0
- package/cpp/chat-parser.h +120 -0
- package/cpp/chat.cpp +2315 -0
- package/cpp/chat.h +221 -0
- package/cpp/common.cpp +1664 -0
- package/cpp/common.h +744 -0
- package/cpp/ggml-alloc.c +1028 -0
- package/cpp/ggml-alloc.h +76 -0
- package/cpp/ggml-backend-impl.h +255 -0
- package/cpp/ggml-backend-reg.cpp +600 -0
- package/cpp/ggml-backend.cpp +2121 -0
- package/cpp/ggml-backend.h +354 -0
- package/cpp/ggml-common.h +1878 -0
- package/cpp/ggml-cpp.h +39 -0
- package/cpp/ggml-cpu/amx/amx.cpp +221 -0
- package/cpp/ggml-cpu/amx/amx.h +8 -0
- package/cpp/ggml-cpu/amx/common.h +91 -0
- package/cpp/ggml-cpu/amx/mmq.cpp +2512 -0
- package/cpp/ggml-cpu/amx/mmq.h +10 -0
- package/cpp/ggml-cpu/arch/arm/cpu-feats.cpp +94 -0
- package/cpp/ggml-cpu/arch/arm/quants.c +3650 -0
- package/cpp/ggml-cpu/arch/arm/repack.cpp +1891 -0
- package/cpp/ggml-cpu/arch/x86/cpu-feats.cpp +327 -0
- package/cpp/ggml-cpu/arch/x86/quants.c +3820 -0
- package/cpp/ggml-cpu/arch/x86/repack.cpp +6307 -0
- package/cpp/ggml-cpu/arch-fallback.h +215 -0
- package/cpp/ggml-cpu/binary-ops.cpp +158 -0
- package/cpp/ggml-cpu/binary-ops.h +16 -0
- package/cpp/ggml-cpu/common.h +73 -0
- package/cpp/ggml-cpu/ggml-cpu-impl.h +559 -0
- package/cpp/ggml-cpu/ggml-cpu.c +3578 -0
- package/cpp/ggml-cpu/ggml-cpu.cpp +672 -0
- package/cpp/ggml-cpu/ops.cpp +10587 -0
- package/cpp/ggml-cpu/ops.h +114 -0
- package/cpp/ggml-cpu/quants.c +1193 -0
- package/cpp/ggml-cpu/quants.h +97 -0
- package/cpp/ggml-cpu/repack.cpp +1982 -0
- package/cpp/ggml-cpu/repack.h +120 -0
- package/cpp/ggml-cpu/simd-mappings.h +1184 -0
- package/cpp/ggml-cpu/traits.cpp +36 -0
- package/cpp/ggml-cpu/traits.h +38 -0
- package/cpp/ggml-cpu/unary-ops.cpp +186 -0
- package/cpp/ggml-cpu/unary-ops.h +28 -0
- package/cpp/ggml-cpu/vec.cpp +348 -0
- package/cpp/ggml-cpu/vec.h +1121 -0
- package/cpp/ggml-cpu.h +145 -0
- package/cpp/ggml-impl.h +622 -0
- package/cpp/ggml-metal-impl.h +688 -0
- package/cpp/ggml-metal.h +66 -0
- package/cpp/ggml-metal.m +6833 -0
- package/cpp/ggml-metal.metal +10754 -0
- package/cpp/ggml-opt.cpp +1093 -0
- package/cpp/ggml-opt.h +256 -0
- package/cpp/ggml-quants.c +5324 -0
- package/cpp/ggml-quants.h +106 -0
- package/cpp/ggml-threading.cpp +12 -0
- package/cpp/ggml-threading.h +14 -0
- package/cpp/ggml.c +7108 -0
- package/cpp/ggml.h +2492 -0
- package/cpp/gguf.cpp +1358 -0
- package/cpp/gguf.h +202 -0
- package/cpp/json-partial.cpp +256 -0
- package/cpp/json-partial.h +38 -0
- package/cpp/json-schema-to-grammar.cpp +985 -0
- package/cpp/json-schema-to-grammar.h +21 -0
- package/cpp/llama-adapter.cpp +388 -0
- package/cpp/llama-adapter.h +76 -0
- package/cpp/llama-arch.cpp +2355 -0
- package/cpp/llama-arch.h +499 -0
- package/cpp/llama-batch.cpp +875 -0
- package/cpp/llama-batch.h +160 -0
- package/cpp/llama-chat.cpp +783 -0
- package/cpp/llama-chat.h +65 -0
- package/cpp/llama-context.cpp +2788 -0
- package/cpp/llama-context.h +306 -0
- package/cpp/llama-cparams.cpp +5 -0
- package/cpp/llama-cparams.h +41 -0
- package/cpp/llama-cpp.h +30 -0
- package/cpp/llama-grammar.cpp +1229 -0
- package/cpp/llama-grammar.h +173 -0
- package/cpp/llama-graph.cpp +1891 -0
- package/cpp/llama-graph.h +810 -0
- package/cpp/llama-hparams.cpp +180 -0
- package/cpp/llama-hparams.h +233 -0
- package/cpp/llama-impl.cpp +167 -0
- package/cpp/llama-impl.h +61 -0
- package/cpp/llama-io.cpp +15 -0
- package/cpp/llama-io.h +35 -0
- package/cpp/llama-kv-cache-iswa.cpp +318 -0
- package/cpp/llama-kv-cache-iswa.h +135 -0
- package/cpp/llama-kv-cache.cpp +2059 -0
- package/cpp/llama-kv-cache.h +374 -0
- package/cpp/llama-kv-cells.h +491 -0
- package/cpp/llama-memory-hybrid.cpp +258 -0
- package/cpp/llama-memory-hybrid.h +137 -0
- package/cpp/llama-memory-recurrent.cpp +1146 -0
- package/cpp/llama-memory-recurrent.h +179 -0
- package/cpp/llama-memory.cpp +59 -0
- package/cpp/llama-memory.h +119 -0
- package/cpp/llama-mmap.cpp +609 -0
- package/cpp/llama-mmap.h +68 -0
- package/cpp/llama-model-loader.cpp +1166 -0
- package/cpp/llama-model-loader.h +170 -0
- package/cpp/llama-model-saver.cpp +282 -0
- package/cpp/llama-model-saver.h +37 -0
- package/cpp/llama-model.cpp +19061 -0
- package/cpp/llama-model.h +491 -0
- package/cpp/llama-sampling.cpp +2575 -0
- package/cpp/llama-sampling.h +32 -0
- package/cpp/llama-vocab.cpp +3792 -0
- package/cpp/llama-vocab.h +176 -0
- package/cpp/llama.cpp +358 -0
- package/cpp/llama.h +1373 -0
- package/cpp/log.cpp +428 -0
- package/cpp/log.h +103 -0
- package/cpp/minja/chat-template.hpp +550 -0
- package/cpp/minja/minja.hpp +3009 -0
- package/cpp/nlohmann/json.hpp +25526 -0
- package/cpp/nlohmann/json_fwd.hpp +187 -0
- package/cpp/regex-partial.cpp +204 -0
- package/cpp/regex-partial.h +56 -0
- package/cpp/sampling.cpp +579 -0
- package/cpp/sampling.h +107 -0
- package/cpp/tools/mtmd/clip-impl.h +473 -0
- package/cpp/tools/mtmd/clip.cpp +4322 -0
- package/cpp/tools/mtmd/clip.h +106 -0
- package/cpp/tools/mtmd/miniaudio/miniaudio.h +93468 -0
- package/cpp/tools/mtmd/mtmd-audio.cpp +769 -0
- package/cpp/tools/mtmd/mtmd-audio.h +47 -0
- package/cpp/tools/mtmd/mtmd-helper.cpp +460 -0
- package/cpp/tools/mtmd/mtmd-helper.h +95 -0
- package/cpp/tools/mtmd/mtmd.cpp +1066 -0
- package/cpp/tools/mtmd/mtmd.h +302 -0
- package/cpp/tools/mtmd/stb/stb_image.h +7988 -0
- package/cpp/unicode-data.cpp +7034 -0
- package/cpp/unicode-data.h +20 -0
- package/cpp/unicode.cpp +1061 -0
- package/cpp/unicode.h +68 -0
- package/cpp/vendor/cpp-httplib/httplib.cpp +16509 -0
- package/cpp/vendor/cpp-httplib/httplib.h +3883 -0
- package/desktop/electron-builder.config.cjs +157 -0
- package/desktop/entitlements.mac.plist +12 -0
- package/desktop/package.json +11 -0
- package/desktop/resolve-package-root.cjs +88 -0
- package/desktop/src/main/backend-selector.cjs +148 -0
- package/desktop/src/main/gpu-probe.cjs +142 -0
- package/desktop/src/main/index.cjs +58 -0
- package/desktop/src/main/ipc-handlers.cjs +212 -0
- package/desktop/src/main/model-store.cjs +50 -0
- package/desktop/src/main/preload.cjs +39 -0
- package/desktop/src/main/sidecar-client.cjs +76 -0
- package/desktop/src/main/sidecar-manager.cjs +364 -0
- package/dist/docs.json +14357 -0
- package/dist/esm/definitions.d.ts +731 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/desktop.d.ts +37 -0
- package/dist/esm/desktop.js +133 -0
- package/dist/esm/desktop.js.map +1 -0
- package/dist/esm/index.d.ts +200 -0
- package/dist/esm/index.js +612 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/isomorphic/desktop.runtime.d.ts +37 -0
- package/dist/esm/isomorphic/desktop.runtime.js +36 -0
- package/dist/esm/isomorphic/desktop.runtime.js.map +1 -0
- package/dist/esm/isomorphic/errors.d.ts +6 -0
- package/dist/esm/isomorphic/errors.js +9 -0
- package/dist/esm/isomorphic/errors.js.map +1 -0
- package/dist/esm/isomorphic/model.admission.d.ts +17 -0
- package/dist/esm/isomorphic/model.admission.js +27 -0
- package/dist/esm/isomorphic/model.admission.js.map +1 -0
- package/dist/esm/isomorphic/model.scheduler.d.ts +31 -0
- package/dist/esm/isomorphic/model.scheduler.js +95 -0
- package/dist/esm/isomorphic/model.scheduler.js.map +1 -0
- package/dist/esm/isomorphic/provider.desktop.d.ts +40 -0
- package/dist/esm/isomorphic/provider.desktop.js +411 -0
- package/dist/esm/isomorphic/provider.desktop.js.map +1 -0
- package/dist/esm/isomorphic/provider.factory.d.ts +2 -0
- package/dist/esm/isomorphic/provider.factory.js +16 -0
- package/dist/esm/isomorphic/provider.factory.js.map +1 -0
- package/dist/esm/isomorphic/provider.interface.d.ts +76 -0
- package/dist/esm/isomorphic/provider.interface.js +2 -0
- package/dist/esm/isomorphic/provider.interface.js.map +1 -0
- package/dist/esm/isomorphic/provider.native.d.ts +18 -0
- package/dist/esm/isomorphic/provider.native.js +173 -0
- package/dist/esm/isomorphic/provider.native.js.map +1 -0
- package/dist/esm/isomorphic/provider.web.d.ts +88 -0
- package/dist/esm/isomorphic/provider.web.js +573 -0
- package/dist/esm/isomorphic/provider.web.js.map +1 -0
- package/dist/esm/isomorphic/sidecar-sse.d.ts +14 -0
- package/dist/esm/isomorphic/sidecar-sse.js +76 -0
- package/dist/esm/isomorphic/sidecar-sse.js.map +1 -0
- package/dist/esm/isomorphic/wasmMemoryCalibration.d.ts +26 -0
- package/dist/esm/isomorphic/wasmMemoryCalibration.js +60 -0
- package/dist/esm/isomorphic/wasmMemoryCalibration.js.map +1 -0
- package/dist/esm/isomorphic/wasmMemoryPolicy.d.ts +55 -0
- package/dist/esm/isomorphic/wasmMemoryPolicy.js +93 -0
- package/dist/esm/isomorphic/wasmMemoryPolicy.js.map +1 -0
- package/dist/esm/storage/manifest.d.ts +13 -0
- package/dist/esm/storage/manifest.js +87 -0
- package/dist/esm/storage/manifest.js.map +1 -0
- package/dist/esm/storage/opfs.store.d.ts +31 -0
- package/dist/esm/storage/opfs.store.js +241 -0
- package/dist/esm/storage/opfs.store.js.map +1 -0
- package/dist/esm/web.d.ts +206 -0
- package/dist/esm/web.js +521 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/esm/workers/async-file.d.ts +13 -0
- package/dist/esm/workers/async-file.js +12 -0
- package/dist/esm/workers/async-file.js.map +1 -0
- package/dist/esm/workers/heapfs.d.ts +55 -0
- package/dist/esm/workers/heapfs.js +115 -0
- package/dist/esm/workers/heapfs.js.map +1 -0
- package/dist/esm/workers/wasm.engine.d.ts +86 -0
- package/dist/esm/workers/wasm.engine.js +504 -0
- package/dist/esm/workers/wasm.engine.js.map +1 -0
- package/dist/esm/workers/worker.protocol.d.ts +160 -0
- package/dist/esm/workers/worker.protocol.js +2 -0
- package/dist/esm/workers/worker.protocol.js.map +1 -0
- package/dist/plugin.cjs +3179 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.js +3181 -0
- package/dist/plugin.js.map +1 -0
- package/dist/wasm/llama_engine.d.ts +74 -0
- package/dist/wasm/llama_engine.js +1829 -0
- package/dist/wasm/llama_engine.wasm +0 -0
- package/dist/wasm/llama_engine_emscripten.mjs +2 -0
- package/dist/wasm/package.json +16 -0
- package/dist/workers/llm.worker.js +1226 -0
- package/dist/workers/llm.worker.js.map +7 -0
- package/extraResources/llama-wasm/llama_engine.d.ts +74 -0
- package/extraResources/llama-wasm/llama_engine.js +1829 -0
- package/extraResources/llama-wasm/llama_engine.wasm +0 -0
- package/extraResources/llama-wasm/llama_engine_emscripten.mjs +2 -0
- package/extraResources/llama-wasm/package.json +16 -0
- package/extraResources/sidecar/README.md +11 -0
- package/extraResources/sidecar/darwin-arm64 +0 -0
- package/extraResources/sidecar/darwin-x64 +0 -0
- package/ios/CMakeLists-arm64.txt +161 -0
- package/ios/CMakeLists-x86_64.txt +188 -0
- package/ios/CMakeLists.txt +161 -0
- package/ios/Frameworks/llama-cpp.framework/Info.plist +28 -0
- package/ios/Frameworks/llama-cpp.framework/llama-cpp +0 -0
- package/ios/Sources/LlamaCppCapacitor/LlamaCpp.swift +1365 -0
- package/ios/Sources/LlamaCppCapacitor/LlamaCppPlugin.swift +694 -0
- package/ios/Sources/LlamaCppCapacitor/LlamaNativeBridge.swift +349 -0
- package/ios/Sources/LlamaCppCapacitor/ModelAdmissionController.swift +177 -0
- package/ios/embed-metal-shaders.sh +24 -0
- package/ios/metal-embed.cmake +29 -0
- package/package.json +281 -0
- package/scripts/build-js-preserve-wasm.cjs +53 -0
- package/scripts/build-sidecar-linux.sh +6 -0
- package/scripts/build-sidecar-win.bat +19 -0
- package/scripts/build-sidecar.sh +184 -0
- package/scripts/embed-llama-ios-app-framework.sh +63 -0
- package/scripts/ensure-desktop-sidecar-bundle.cjs +103 -0
- package/scripts/ensure-llama-ios-xcframework.sh +108 -0
- package/scripts/fix-esm-extensions.cjs +45 -0
- package/scripts/prepare-js-dist.cjs +28 -0
- package/scripts/stage-desktop-resources.cjs +116 -0
- package/sidecar/CMakeLists.txt +192 -0
- package/sidecar/cap-sidecar-main.cpp +68 -0
- package/types/llama-cpp-pro.d.ts +441 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* electron-builder configuration for apps using llama-cpp-pro on desktop.
|
|
3
|
+
*
|
|
4
|
+
* Merge into your Electron app's package.json:
|
|
5
|
+
* const llamaDesktop = require('llama-cpp-pro/desktop/electron-builder');
|
|
6
|
+
* module.exports = { ...yourConfig, ...llamaDesktop.merge(yourConfig) };
|
|
7
|
+
*
|
|
8
|
+
* Or spread extraResources / entitlements manually from this module.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const path = require('path');
|
|
12
|
+
|
|
13
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
/** @param {string} [root] - llama-cpp-pro package root (default: auto) */
|
|
16
|
+
function getSidecarResourceEntries(root = PACKAGE_ROOT) {
|
|
17
|
+
return {
|
|
18
|
+
mac: [
|
|
19
|
+
{
|
|
20
|
+
from: path.join(root, 'extraResources/sidecar/darwin-${arch}'),
|
|
21
|
+
to: 'sidecar/darwin-${arch}',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
from: path.join(root, 'extraResources/sidecar/ggml-plugins/darwin-${arch}'),
|
|
25
|
+
to: 'sidecar/ggml-plugins/darwin-${arch}',
|
|
26
|
+
filter: ['**/*'],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
win: [
|
|
30
|
+
{
|
|
31
|
+
from: path.join(root, 'extraResources/sidecar/win32-${arch}.exe'),
|
|
32
|
+
to: 'sidecar/win32-${arch}.exe',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
from: path.join(root, 'extraResources/sidecar/win32-${arch}-rocm.exe'),
|
|
36
|
+
to: 'sidecar/win32-${arch}-rocm.exe',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
from: path.join(root, 'extraResources/sidecar/win32-${arch}-cuda.exe'),
|
|
40
|
+
to: 'sidecar/win32-${arch}-cuda.exe',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
from: path.join(root, 'extraResources/sidecar/ggml-plugins/win32-${arch}'),
|
|
44
|
+
to: 'sidecar/ggml-plugins/win32-${arch}',
|
|
45
|
+
filter: ['**/*.dll'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
from: path.join(root, 'extraResources/sidecar/runtime-libs/win32-${arch}'),
|
|
49
|
+
to: 'sidecar/runtime-libs/win32-${arch}',
|
|
50
|
+
filter: ['**/*.dll'],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
linux: [
|
|
54
|
+
{
|
|
55
|
+
from: path.join(root, 'extraResources/sidecar/linux-${arch}'),
|
|
56
|
+
to: 'sidecar/linux-${arch}',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
from: path.join(root, 'extraResources/sidecar/linux-${arch}-rocm'),
|
|
60
|
+
to: 'sidecar/linux-${arch}-rocm',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
from: path.join(root, 'extraResources/sidecar/linux-${arch}-cuda'),
|
|
64
|
+
to: 'sidecar/linux-${arch}-cuda',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
from: path.join(root, 'extraResources/sidecar/ggml-plugins/linux-${arch}'),
|
|
68
|
+
to: 'sidecar/ggml-plugins/linux-${arch}',
|
|
69
|
+
filter: ['**/*.so', '**/*.so.*'],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
from: path.join(root, 'extraResources/sidecar/runtime-libs/linux-${arch}'),
|
|
73
|
+
to: 'sidecar/runtime-libs/linux-${arch}',
|
|
74
|
+
filter: ['**/*.so', '**/*.so.*'],
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
wasm: [
|
|
78
|
+
{
|
|
79
|
+
from: path.join(root, 'dist/wasm'),
|
|
80
|
+
to: 'llama-wasm',
|
|
81
|
+
filter: ['**/*'],
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Recommended electron-builder fragment for llama-cpp desktop support.
|
|
89
|
+
* @param {object} [opts]
|
|
90
|
+
* @param {string} [opts.packageRoot]
|
|
91
|
+
* @returns {object}
|
|
92
|
+
*/
|
|
93
|
+
function buildConfig(opts = {}) {
|
|
94
|
+
const root = opts.packageRoot || PACKAGE_ROOT;
|
|
95
|
+
const sidecar = getSidecarResourceEntries(root);
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
asar: false,
|
|
99
|
+
mac: {
|
|
100
|
+
entitlements: path.join(root, 'desktop/entitlements.mac.plist'),
|
|
101
|
+
entitlementsInherit: path.join(root, 'desktop/entitlements.mac.plist'),
|
|
102
|
+
hardenedRuntime: true,
|
|
103
|
+
gatekeeperAssess: false,
|
|
104
|
+
extraResources: [...sidecar.mac, ...sidecar.wasm],
|
|
105
|
+
},
|
|
106
|
+
win: {
|
|
107
|
+
extraResources: [...sidecar.win, ...sidecar.wasm],
|
|
108
|
+
},
|
|
109
|
+
linux: {
|
|
110
|
+
extraResources: [...sidecar.linux, ...sidecar.wasm],
|
|
111
|
+
},
|
|
112
|
+
nsis: {
|
|
113
|
+
oneClick: false,
|
|
114
|
+
perMachine: true,
|
|
115
|
+
allowToChangeInstallationDirectory: true,
|
|
116
|
+
createDesktopShortcut: true,
|
|
117
|
+
},
|
|
118
|
+
deb: {
|
|
119
|
+
depends: ['libvulkan1', 'libgomp1'],
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Deep-merge llama desktop resources into an existing electron-builder config.
|
|
126
|
+
* @param {object} base - your app's electron-builder config
|
|
127
|
+
* @param {object} [opts]
|
|
128
|
+
* @returns {object}
|
|
129
|
+
*/
|
|
130
|
+
function merge(base = {}, opts = {}) {
|
|
131
|
+
const llama = buildConfig(opts);
|
|
132
|
+
const out = { ...base, ...llama, asar: base.asar ?? llama.asar };
|
|
133
|
+
|
|
134
|
+
for (const platform of ['mac', 'win', 'linux']) {
|
|
135
|
+
if (!out[platform]) out[platform] = {};
|
|
136
|
+
const baseExtra = base[platform]?.extraResources ?? [];
|
|
137
|
+
const llamaExtra = llama[platform]?.extraResources ?? [];
|
|
138
|
+
out[platform] = {
|
|
139
|
+
...llama[platform],
|
|
140
|
+
...out[platform],
|
|
141
|
+
extraResources: [...baseExtra, ...llamaExtra],
|
|
142
|
+
};
|
|
143
|
+
if (platform === 'mac' && base.mac?.entitlements) {
|
|
144
|
+
out.mac.entitlements = base.mac.entitlements;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
module.exports = {
|
|
152
|
+
buildConfig,
|
|
153
|
+
merge,
|
|
154
|
+
getSidecarResourceEntries,
|
|
155
|
+
entitlementsMac: path.join(PACKAGE_ROOT, 'desktop/entitlements.mac.plist'),
|
|
156
|
+
packageRoot: PACKAGE_ROOT,
|
|
157
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
6
|
+
<true/>
|
|
7
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
8
|
+
<true/>
|
|
9
|
+
<key>com.apple.security.cs.disable-library-validation</key>
|
|
10
|
+
<true/>
|
|
11
|
+
</dict>
|
|
12
|
+
</plist>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "llama-cpp-pro-desktop",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "Desktop runtime modules for llama-cpp-pro (Electron main process)",
|
|
6
|
+
"main": "src/main/index.cjs",
|
|
7
|
+
"type": "commonjs",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=18"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable resolution of the llama-cpp-pro package root and dev extraResources.
|
|
3
|
+
*
|
|
4
|
+
* Used by host apps (PKC, annadata-app) during co-development (file:../llama-cpp-pro)
|
|
5
|
+
* and after npm publish (require('llama-cpp-pro')).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
|
|
11
|
+
const SIBLING_DIR = 'llama-cpp-pro';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {object} [opts]
|
|
15
|
+
* @param {string} [opts.fromDir] - resolve installed package from this directory
|
|
16
|
+
* @param {string} [opts.siblingOf] - fallback: <siblingOf>/../llama-cpp-pro
|
|
17
|
+
* @returns {string}
|
|
18
|
+
*/
|
|
19
|
+
function resolvePackageRoot(opts = {}) {
|
|
20
|
+
const fromEnv = process.env.LLAMA_CPP_PRO_ROOT;
|
|
21
|
+
if (fromEnv) return path.resolve(fromEnv);
|
|
22
|
+
|
|
23
|
+
const fromDir = opts.fromDir || process.cwd();
|
|
24
|
+
try {
|
|
25
|
+
return path.dirname(require.resolve('llama-cpp-pro/package.json', { paths: [fromDir] }));
|
|
26
|
+
} catch {
|
|
27
|
+
/* not installed from this tree yet */
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (opts.siblingOf) {
|
|
31
|
+
return path.resolve(opts.siblingOf, '..', SIBLING_DIR);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Loaded from llama-cpp-pro/desktop/resolve-package-root.cjs
|
|
35
|
+
return path.resolve(__dirname, '..');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Dev-only extraResources directory (sidecar + wasm staged by stage:desktop).
|
|
40
|
+
* @param {object} [opts] - forwarded to resolvePackageRoot
|
|
41
|
+
* @returns {string}
|
|
42
|
+
*/
|
|
43
|
+
function getDevExtraResourcesDir(opts = {}) {
|
|
44
|
+
return path.join(resolvePackageRoot(opts), 'extraResources');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* resourcesPath for Electron: packaged → process.resourcesPath; dev → extraResources/.
|
|
49
|
+
* @param {import('electron').App | null | undefined} app
|
|
50
|
+
* @param {object} [opts] - forwarded to resolvePackageRoot (fromDir defaults to app.getAppPath())
|
|
51
|
+
* @returns {string}
|
|
52
|
+
*/
|
|
53
|
+
function getResourcesPathForApp(app, opts = {}) {
|
|
54
|
+
if (app && app.isPackaged) {
|
|
55
|
+
return process.resourcesPath;
|
|
56
|
+
}
|
|
57
|
+
const resolveOpts = { ...opts };
|
|
58
|
+
if (!resolveOpts.fromDir && app && typeof app.getAppPath === 'function') {
|
|
59
|
+
resolveOpts.fromDir = app.getAppPath();
|
|
60
|
+
}
|
|
61
|
+
return getDevExtraResourcesDir(resolveOpts);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Ensure a platform sidecar binary exists under resourcesPath (throws with build hint).
|
|
66
|
+
* @param {string} resourcesPath
|
|
67
|
+
* @param {object} [deps] - forwarded to resolveBinaryPath
|
|
68
|
+
* @returns {string}
|
|
69
|
+
*/
|
|
70
|
+
function assertSidecarBinary(resourcesPath, deps) {
|
|
71
|
+
const { resolveBinaryPath } = require('./src/main/sidecar-manager.cjs');
|
|
72
|
+
const binary = resolveBinaryPath({ ...(deps || {}), resourcesPath });
|
|
73
|
+
const _fs = (deps && deps.fs) || fs;
|
|
74
|
+
if (!_fs.existsSync(binary)) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`llama-cpp-pro sidecar missing at ${binary}. ` +
|
|
77
|
+
'From llama-cpp-pro run: npm run build:sidecar && npm run stage:desktop',
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
return binary;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
module.exports = {
|
|
84
|
+
resolvePackageRoot,
|
|
85
|
+
getDevExtraResourcesDir,
|
|
86
|
+
getResourcesPathForApp,
|
|
87
|
+
assertSidecarBinary,
|
|
88
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend ranking and selection for desktop llama-cpp.
|
|
3
|
+
* Adapted from ref-code/annadata-vad-dt/src/main/backend-selector.cjs.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const { getSettingsDir } = require('./model-store.cjs');
|
|
9
|
+
|
|
10
|
+
const NPU_RANK = ['coreml-npu', 'openvino-npu'];
|
|
11
|
+
const VALID_OVERRIDES = ['auto', 'sidecar-npu', 'sidecar-gpu', 'sidecar-cpu', 'wasm-cpu'];
|
|
12
|
+
|
|
13
|
+
function getGpuRank(platform = process.platform) {
|
|
14
|
+
if (platform === 'darwin') {
|
|
15
|
+
return ['metal', 'cuda', 'rocm', 'openvino-gpu', 'vulkan'];
|
|
16
|
+
}
|
|
17
|
+
return ['vulkan', 'cuda', 'rocm', 'openvino-gpu'];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getSettingsPath(deps) {
|
|
21
|
+
return path.join(getSettingsDir(deps), 'settings.json');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getUserOverride(deps) {
|
|
25
|
+
const _fs = (deps && deps.fs) || fs;
|
|
26
|
+
try {
|
|
27
|
+
const raw = _fs.readFileSync(getSettingsPath(deps), 'utf8');
|
|
28
|
+
const data = JSON.parse(raw);
|
|
29
|
+
const value = data && data.backendOverride;
|
|
30
|
+
if (!value || value === 'auto') return null;
|
|
31
|
+
if (VALID_OVERRIDES.includes(value)) return value;
|
|
32
|
+
return null;
|
|
33
|
+
} catch (err) {
|
|
34
|
+
if (err && err.code === 'ENOENT') return null;
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function setUserOverride(backend, deps) {
|
|
40
|
+
const _fs = (deps && deps.fs) || fs;
|
|
41
|
+
const settingsPath = getSettingsPath(deps);
|
|
42
|
+
let data = {};
|
|
43
|
+
try {
|
|
44
|
+
data = JSON.parse(_fs.readFileSync(settingsPath, 'utf8'));
|
|
45
|
+
} catch (_) { /* new file */ }
|
|
46
|
+
data.backendOverride = backend;
|
|
47
|
+
_fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
|
|
48
|
+
_fs.writeFileSync(settingsPath, JSON.stringify(data, null, 2), 'utf8');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function findBestBackend(probeResult, rank) {
|
|
52
|
+
for (const name of rank) {
|
|
53
|
+
const b = probeResult.backends.find((x) => x.name === name && x.available);
|
|
54
|
+
if (b) return name;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Map detected GPU backend name to sidecar binary variant suffix.
|
|
61
|
+
* @param {string|null} gpuBackend
|
|
62
|
+
* @param {NodeJS.Platform} platform
|
|
63
|
+
* @returns {string}
|
|
64
|
+
*/
|
|
65
|
+
function backendToVariant(gpuBackend, platform) {
|
|
66
|
+
if (platform === 'darwin') {
|
|
67
|
+
if (gpuBackend === 'coreml-npu') return 'metal-coreml';
|
|
68
|
+
return 'metal';
|
|
69
|
+
}
|
|
70
|
+
switch (gpuBackend) {
|
|
71
|
+
case 'cuda': return 'cuda';
|
|
72
|
+
case 'rocm': return 'rocm';
|
|
73
|
+
case 'vulkan': return 'vulkan';
|
|
74
|
+
case 'openvino-gpu':
|
|
75
|
+
case 'openvino-npu': return 'cuda-openvino';
|
|
76
|
+
default: return 'vulkan-openblas';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function selectBackend(probeResult, userOverride, deps) {
|
|
81
|
+
const platform = (deps && deps.platform) || process.platform;
|
|
82
|
+
const gpuRank = getGpuRank(platform);
|
|
83
|
+
|
|
84
|
+
if (userOverride === 'wasm-cpu') {
|
|
85
|
+
return { type: 'wasm-cpu', gpuBackend: null, variant: null, reason: 'User selected WASM CPU' };
|
|
86
|
+
}
|
|
87
|
+
if (userOverride === 'sidecar-cpu') {
|
|
88
|
+
return { type: 'sidecar-cpu', gpuBackend: null, variant: 'cpu', reason: 'User selected native CPU' };
|
|
89
|
+
}
|
|
90
|
+
if (userOverride === 'sidecar-gpu') {
|
|
91
|
+
const bestGpu = findBestBackend(probeResult, gpuRank);
|
|
92
|
+
if (bestGpu) {
|
|
93
|
+
return {
|
|
94
|
+
type: 'sidecar-gpu', gpuBackend: bestGpu, variant: backendToVariant(bestGpu, platform),
|
|
95
|
+
reason: `User GPU override: ${bestGpu}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { type: 'wasm-cpu', gpuBackend: null, variant: null, reason: 'No GPU detected' };
|
|
99
|
+
}
|
|
100
|
+
if (userOverride === 'sidecar-npu') {
|
|
101
|
+
const bestNpu = findBestBackend(probeResult, NPU_RANK);
|
|
102
|
+
if (bestNpu) {
|
|
103
|
+
return {
|
|
104
|
+
type: 'sidecar-npu', gpuBackend: bestNpu, variant: backendToVariant(bestNpu, platform),
|
|
105
|
+
reason: `User NPU override: ${bestNpu}`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const bestNpu = findBestBackend(probeResult, NPU_RANK);
|
|
111
|
+
if (bestNpu) {
|
|
112
|
+
return {
|
|
113
|
+
type: 'sidecar-npu', gpuBackend: bestNpu, variant: backendToVariant(bestNpu, platform),
|
|
114
|
+
reason: `Auto-selected NPU: ${bestNpu}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const bestGpu = findBestBackend(probeResult, gpuRank);
|
|
119
|
+
if (bestGpu) {
|
|
120
|
+
return {
|
|
121
|
+
type: 'sidecar-gpu', gpuBackend: bestGpu, variant: backendToVariant(bestGpu, platform),
|
|
122
|
+
reason: `Auto-selected GPU: ${bestGpu}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (platform !== 'darwin') {
|
|
127
|
+
return {
|
|
128
|
+
type: 'sidecar-cpu', gpuBackend: null, variant: 'openblas',
|
|
129
|
+
reason: 'No accelerator detected — native CPU sidecar',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
type: 'wasm-cpu', gpuBackend: null, variant: null,
|
|
135
|
+
reason: 'No accelerator on macOS — WASM fallback (or set sidecar-cpu override)',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
module.exports = {
|
|
140
|
+
selectBackend,
|
|
141
|
+
getUserOverride,
|
|
142
|
+
setUserOverride,
|
|
143
|
+
findBestBackend,
|
|
144
|
+
getGpuRank,
|
|
145
|
+
backendToVariant,
|
|
146
|
+
NPU_RANK,
|
|
147
|
+
VALID_OVERRIDES,
|
|
148
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU / NPU backend detection for desktop llama-cpp sidecar.
|
|
3
|
+
* Adapted from ref-code/annadata-vad-dt/src/main/gpu-probe.cjs.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
function findLibrary(candidates, _fs) {
|
|
10
|
+
for (const p of candidates) {
|
|
11
|
+
try {
|
|
12
|
+
if (_fs.existsSync(p)) return { found: true, path: p };
|
|
13
|
+
} catch (_) { /* skip */ }
|
|
14
|
+
}
|
|
15
|
+
return { found: false };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function versionedCandidates(dirs, base) {
|
|
19
|
+
const suffixes = ['', '.1', '.2', '.530', '.520', '.515', '.510'];
|
|
20
|
+
const out = [];
|
|
21
|
+
for (const d of dirs) {
|
|
22
|
+
for (const s of suffixes) out.push(path.join(d, base + s));
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function probeWindows(_fs) {
|
|
28
|
+
const sys32 = path.join(process.env.SYSTEMROOT || 'C:\\Windows', 'System32');
|
|
29
|
+
const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
|
|
30
|
+
const backends = [];
|
|
31
|
+
|
|
32
|
+
const cuda = findLibrary([path.join(sys32, 'nvcuda.dll')], _fs);
|
|
33
|
+
backends.push({
|
|
34
|
+
name: 'cuda', kind: 'gpu', available: cuda.found,
|
|
35
|
+
reason: cuda.found ? `found ${cuda.path}` : 'nvcuda.dll not found',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const rocmCandidates = [path.join(sys32, 'amdhip64.dll')];
|
|
39
|
+
const rocm = findLibrary(rocmCandidates, _fs);
|
|
40
|
+
backends.push({
|
|
41
|
+
name: 'rocm', kind: 'gpu', available: rocm.found,
|
|
42
|
+
reason: rocm.found ? `found ${rocm.path}` : 'amdhip64.dll not found',
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const vulkan = findLibrary([path.join(sys32, 'vulkan-1.dll')], _fs);
|
|
46
|
+
backends.push({
|
|
47
|
+
name: 'vulkan', kind: 'gpu', available: vulkan.found,
|
|
48
|
+
reason: vulkan.found ? `found ${vulkan.path}` : 'vulkan-1.dll not found',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const openvinoCandidates = [
|
|
52
|
+
path.join(sys32, 'openvino.dll'),
|
|
53
|
+
path.join(programFiles, 'Intel', 'openvino_2025', 'runtime', 'bin', 'intel64', 'Release', 'openvino.dll'),
|
|
54
|
+
];
|
|
55
|
+
const openvino = findLibrary(openvinoCandidates, _fs);
|
|
56
|
+
backends.push({
|
|
57
|
+
name: 'openvino-npu', kind: 'npu', available: openvino.found,
|
|
58
|
+
reason: openvino.found ? `found ${openvino.path}` : 'OpenVINO runtime not found',
|
|
59
|
+
});
|
|
60
|
+
backends.push({
|
|
61
|
+
name: 'openvino-gpu', kind: 'gpu', available: openvino.found,
|
|
62
|
+
reason: openvino.found ? `found ${openvino.path}` : 'OpenVINO runtime not found',
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return backends;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function probeDarwin(_fs) {
|
|
69
|
+
const backends = [];
|
|
70
|
+
backends.push({
|
|
71
|
+
name: 'metal', kind: 'gpu', available: true,
|
|
72
|
+
reason: 'Metal is always available on macOS',
|
|
73
|
+
});
|
|
74
|
+
const coreml = findLibrary([
|
|
75
|
+
'/System/Library/Frameworks/CoreML.framework/CoreML',
|
|
76
|
+
], _fs);
|
|
77
|
+
backends.push({
|
|
78
|
+
name: 'coreml-npu', kind: 'npu', available: coreml.found,
|
|
79
|
+
reason: coreml.found ? 'CoreML framework found (ANE on Apple Silicon)' : 'CoreML not found',
|
|
80
|
+
});
|
|
81
|
+
return backends;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function probeLinux(_fs) {
|
|
85
|
+
const libDirs = [
|
|
86
|
+
'/usr/lib', '/usr/lib64', '/usr/lib/x86_64-linux-gnu',
|
|
87
|
+
'/usr/local/lib', '/usr/local/cuda/lib64', '/opt/rocm/lib',
|
|
88
|
+
];
|
|
89
|
+
const backends = [];
|
|
90
|
+
|
|
91
|
+
const cuda = findLibrary(versionedCandidates(libDirs, 'libcuda.so'), _fs);
|
|
92
|
+
backends.push({
|
|
93
|
+
name: 'cuda', kind: 'gpu', available: cuda.found,
|
|
94
|
+
reason: cuda.found ? `found ${cuda.path}` : 'libcuda.so not found',
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const rocm = findLibrary(versionedCandidates(libDirs, 'libamdhip64.so'), _fs);
|
|
98
|
+
backends.push({
|
|
99
|
+
name: 'rocm', kind: 'gpu', available: rocm.found,
|
|
100
|
+
reason: rocm.found ? `found ${rocm.path}` : 'libamdhip64.so not found',
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const vulkan = findLibrary(versionedCandidates(libDirs, 'libvulkan.so'), _fs);
|
|
104
|
+
backends.push({
|
|
105
|
+
name: 'vulkan', kind: 'gpu', available: vulkan.found,
|
|
106
|
+
reason: vulkan.found ? `found ${vulkan.path}` : 'libvulkan.so not found',
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const openvino = findLibrary(versionedCandidates(libDirs, 'libopenvino.so'), _fs);
|
|
110
|
+
backends.push({
|
|
111
|
+
name: 'openvino-gpu', kind: 'gpu', available: openvino.found,
|
|
112
|
+
reason: openvino.found ? `found ${openvino.path}` : 'libopenvino.so not found',
|
|
113
|
+
});
|
|
114
|
+
backends.push({
|
|
115
|
+
name: 'openvino-npu', kind: 'npu', available: openvino.found,
|
|
116
|
+
reason: openvino.found ? `found ${openvino.path}` : 'OpenVINO not found',
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return backends;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function probe(opts) {
|
|
123
|
+
const _platform = (opts && opts.platform) || process.platform;
|
|
124
|
+
const _fs = (opts && opts.fs) || fs;
|
|
125
|
+
let backends = [];
|
|
126
|
+
|
|
127
|
+
switch (_platform) {
|
|
128
|
+
case 'win32': backends = probeWindows(_fs); break;
|
|
129
|
+
case 'darwin': backends = probeDarwin(_fs); break;
|
|
130
|
+
case 'linux': backends = probeLinux(_fs); break;
|
|
131
|
+
default: backends = []; break;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
backends.push({
|
|
135
|
+
name: 'cpu', kind: 'cpu', available: true,
|
|
136
|
+
reason: 'CPU fallback is always available',
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
return { backends };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
module.exports = { probe };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop runtime entry — GPU probe, backend selection, sidecar lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* Usage (Electron main process):
|
|
5
|
+
* const desktop = require('llama-cpp-pro/desktop');
|
|
6
|
+
* const probe = desktop.probeGpu();
|
|
7
|
+
* const selection = desktop.selectBackend(probe);
|
|
8
|
+
* const manager = desktop.createSidecarManager();
|
|
9
|
+
* await manager.start({ modelPath: '/path/to/model.gguf', selection });
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const { probe } = require('./gpu-probe.cjs');
|
|
13
|
+
const {
|
|
14
|
+
selectBackend,
|
|
15
|
+
getUserOverride,
|
|
16
|
+
setUserOverride,
|
|
17
|
+
} = require('./backend-selector.cjs');
|
|
18
|
+
const { createSidecarManager, resolveBinaryPath } = require('./sidecar-manager.cjs');
|
|
19
|
+
const { createSidecarClient } = require('./sidecar-client.cjs');
|
|
20
|
+
const { getModelsDir, getSettingsDir } = require('./model-store.cjs');
|
|
21
|
+
const {
|
|
22
|
+
resolvePackageRoot,
|
|
23
|
+
getDevExtraResourcesDir,
|
|
24
|
+
getResourcesPathForApp,
|
|
25
|
+
assertSidecarBinary,
|
|
26
|
+
} = require('../../resolve-package-root.cjs');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Full desktop bootstrap: probe hardware, read user settings, select backend.
|
|
30
|
+
* @param {object} [deps]
|
|
31
|
+
* @returns {{ probe: object, selection: object }}
|
|
32
|
+
*/
|
|
33
|
+
function detectBackend(deps) {
|
|
34
|
+
const probeResult = probe(deps);
|
|
35
|
+
const override = getUserOverride(deps);
|
|
36
|
+
const selection = selectBackend(probeResult, override, deps);
|
|
37
|
+
return { probe: probeResult, selection };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
module.exports = {
|
|
41
|
+
probeGpu: probe,
|
|
42
|
+
selectBackend,
|
|
43
|
+
getUserOverride,
|
|
44
|
+
setUserOverride,
|
|
45
|
+
detectBackend,
|
|
46
|
+
createSidecarManager,
|
|
47
|
+
createSidecarClient,
|
|
48
|
+
resolveBinaryPath,
|
|
49
|
+
resolvePackageRoot,
|
|
50
|
+
getDevExtraResourcesDir,
|
|
51
|
+
getResourcesPathForApp,
|
|
52
|
+
assertSidecarBinary,
|
|
53
|
+
getModelsDir,
|
|
54
|
+
getSettingsDir,
|
|
55
|
+
registerLlamaDesktopIpc: require('./ipc-handlers.cjs').registerLlamaDesktopIpc,
|
|
56
|
+
installPreload: require('./preload.cjs'),
|
|
57
|
+
electronBuilder: require('../../electron-builder.config.cjs'),
|
|
58
|
+
};
|