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,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HeapFS — allocate model bytes directly in WASM linear memory (wllama-style).
|
|
3
|
+
*
|
|
4
|
+
* Standard Emscripten MEMFS stores file contents in the JS heap; reads/mmap
|
|
5
|
+
* copy into WASM. HeapFS patches MEMFS so file contents are a subarray of
|
|
6
|
+
* HEAPU8 at an mmapAlloc'd address, enabling zero-copy mmap for llama.cpp.
|
|
7
|
+
*
|
|
8
|
+
* Ref: ref-code/wllama/src/workers-code/llama-cpp.js
|
|
9
|
+
*/
|
|
10
|
+
export type EmscriptenModule = {
|
|
11
|
+
MEMFS: {
|
|
12
|
+
stream_ops: Record<string, unknown> & {
|
|
13
|
+
read: (...args: unknown[]) => unknown;
|
|
14
|
+
write: (...args: unknown[]) => unknown;
|
|
15
|
+
llseek: (...args: unknown[]) => unknown;
|
|
16
|
+
allocate: (...args: unknown[]) => unknown;
|
|
17
|
+
mmap: (...args: unknown[]) => unknown;
|
|
18
|
+
msync: (...args: unknown[]) => unknown;
|
|
19
|
+
_read?: (...args: unknown[]) => unknown;
|
|
20
|
+
_write?: (...args: unknown[]) => unknown;
|
|
21
|
+
_llseek?: (...args: unknown[]) => unknown;
|
|
22
|
+
_allocate?: (...args: unknown[]) => unknown;
|
|
23
|
+
_mmap?: (...args: unknown[]) => unknown;
|
|
24
|
+
_msync?: (...args: unknown[]) => unknown;
|
|
25
|
+
};
|
|
26
|
+
ops_table: {
|
|
27
|
+
file: {
|
|
28
|
+
stream: Record<string, unknown>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
FS: {
|
|
33
|
+
mkdir: (path: string) => void;
|
|
34
|
+
analyzePath: (path: string) => {
|
|
35
|
+
exists: boolean;
|
|
36
|
+
};
|
|
37
|
+
createPath?: (parent: string, path: string, canRead: boolean, canWrite: boolean) => void;
|
|
38
|
+
mount: (type: unknown, opts: unknown, mountpoint: string) => void;
|
|
39
|
+
createDataFile: (parent: string, name: string, data: ArrayBuffer, canRead: boolean, canWrite: boolean, canOwn: boolean) => void;
|
|
40
|
+
};
|
|
41
|
+
mmapAlloc: (size: number) => number;
|
|
42
|
+
HEAPU8: Uint8Array;
|
|
43
|
+
};
|
|
44
|
+
/** Patch MEMFS stream ops so mmap/read use WASM-heap-backed file storage. */
|
|
45
|
+
export declare const patchHeapFS: (mod: EmscriptenModule) => void;
|
|
46
|
+
/** Ensure MEMFS /tmp exists for VFS model streaming (fopen fails without it). */
|
|
47
|
+
export declare const ensureWasmTmpDir: (mod: EmscriptenModule) => void;
|
|
48
|
+
/** Allocate `size` bytes in WASM heap for a model file; returns file id. */
|
|
49
|
+
export declare const heapfsAlloc: (mod: EmscriptenModule, name: string, size: number, allocBuffer?: boolean) => number;
|
|
50
|
+
/** Write bytes at `offset` into a HeapFS file. Returns bytes written. */
|
|
51
|
+
export declare const heapfsWrite: (mod: EmscriptenModule, id: number, buffer: Uint8Array, offset: number) => number;
|
|
52
|
+
/** VFS path for a model basename under /models/. */
|
|
53
|
+
export declare const heapfsModelPath: (basename: string) => string;
|
|
54
|
+
/** Whether HeapFS runtime methods are present on the module. */
|
|
55
|
+
export declare const supportsHeapFS: (mod: unknown) => mod is EmscriptenModule;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HeapFS — allocate model bytes directly in WASM linear memory (wllama-style).
|
|
3
|
+
*
|
|
4
|
+
* Standard Emscripten MEMFS stores file contents in the JS heap; reads/mmap
|
|
5
|
+
* copy into WASM. HeapFS patches MEMFS so file contents are a subarray of
|
|
6
|
+
* HEAPU8 at an mmapAlloc'd address, enabling zero-copy mmap for llama.cpp.
|
|
7
|
+
*
|
|
8
|
+
* Ref: ref-code/wllama/src/workers-code/llama-cpp.js
|
|
9
|
+
*/
|
|
10
|
+
const fsNameToFile = {};
|
|
11
|
+
const fsIdToFile = {};
|
|
12
|
+
let currFileId = 0;
|
|
13
|
+
let patched = false;
|
|
14
|
+
const getHeapU8 = (mod) => {
|
|
15
|
+
var _a, _b, _c;
|
|
16
|
+
const buf = (_b = (_a = mod.wasmMemory) === null || _a === void 0 ? void 0 : _a.buffer) !== null && _b !== void 0 ? _b : (_c = mod.HEAPU8) === null || _c === void 0 ? void 0 : _c.buffer;
|
|
17
|
+
if (!buf)
|
|
18
|
+
throw new Error('HeapFS requires WASM linear memory');
|
|
19
|
+
return new Uint8Array(buf);
|
|
20
|
+
};
|
|
21
|
+
const patchStream = (mod, stream) => {
|
|
22
|
+
const name = stream.node.name;
|
|
23
|
+
const f = fsNameToFile[name];
|
|
24
|
+
if (!f)
|
|
25
|
+
return;
|
|
26
|
+
const heap = getHeapU8(mod);
|
|
27
|
+
const ptr = Number(f.ptr);
|
|
28
|
+
stream.node.contents = heap.subarray(ptr, ptr + f.size);
|
|
29
|
+
stream.node.usedBytes = f.size;
|
|
30
|
+
};
|
|
31
|
+
/** Patch MEMFS stream ops so mmap/read use WASM-heap-backed file storage. */
|
|
32
|
+
export const patchHeapFS = (mod) => {
|
|
33
|
+
var _a, _b, _c, _d, _e, _f;
|
|
34
|
+
if (patched)
|
|
35
|
+
return;
|
|
36
|
+
patched = true;
|
|
37
|
+
const ops = mod.MEMFS.stream_ops;
|
|
38
|
+
ops._read = (_a = ops._read) !== null && _a !== void 0 ? _a : ops.read;
|
|
39
|
+
ops._write = (_b = ops._write) !== null && _b !== void 0 ? _b : ops.write;
|
|
40
|
+
ops._llseek = (_c = ops._llseek) !== null && _c !== void 0 ? _c : ops.llseek;
|
|
41
|
+
ops._allocate = (_d = ops._allocate) !== null && _d !== void 0 ? _d : ops.allocate;
|
|
42
|
+
ops._mmap = (_e = ops._mmap) !== null && _e !== void 0 ? _e : ops.mmap;
|
|
43
|
+
ops._msync = (_f = ops._msync) !== null && _f !== void 0 ? _f : ops.msync;
|
|
44
|
+
ops.read = function (stream, ...rest) {
|
|
45
|
+
patchStream(mod, stream);
|
|
46
|
+
return ops._read.call(this, stream, ...rest);
|
|
47
|
+
};
|
|
48
|
+
mod.MEMFS.ops_table.file.stream.read = ops.read;
|
|
49
|
+
ops.llseek = function (stream, ...rest) {
|
|
50
|
+
patchStream(mod, stream);
|
|
51
|
+
return ops._llseek.call(this, stream, ...rest);
|
|
52
|
+
};
|
|
53
|
+
mod.MEMFS.ops_table.file.stream.llseek = ops.llseek;
|
|
54
|
+
ops.mmap = function (stream, length, position, prot, flags) {
|
|
55
|
+
patchStream(mod, stream);
|
|
56
|
+
const name = stream.node.name;
|
|
57
|
+
const f = fsNameToFile[name];
|
|
58
|
+
if (f) {
|
|
59
|
+
return { ptr: Number(f.ptr) + Number(position), allocated: false };
|
|
60
|
+
}
|
|
61
|
+
return ops._mmap.call(this, stream, length, position, prot, flags);
|
|
62
|
+
};
|
|
63
|
+
mod.MEMFS.ops_table.file.stream.mmap = ops.mmap;
|
|
64
|
+
mod.FS.mkdir('/models');
|
|
65
|
+
mod.FS.mount(mod.MEMFS, { root: '.' }, '/models');
|
|
66
|
+
};
|
|
67
|
+
/** Ensure MEMFS /tmp exists for VFS model streaming (fopen fails without it). */
|
|
68
|
+
export const ensureWasmTmpDir = (mod) => {
|
|
69
|
+
const fs = mod.FS;
|
|
70
|
+
if (fs.analyzePath('/tmp').exists)
|
|
71
|
+
return;
|
|
72
|
+
try {
|
|
73
|
+
if (typeof fs.createPath === 'function') {
|
|
74
|
+
fs.createPath('/', 'tmp', true, true);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
fs.mkdir('/tmp');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (_a) {
|
|
81
|
+
if (!fs.analyzePath('/tmp').exists) {
|
|
82
|
+
throw new Error('Failed to create MEMFS /tmp for model VFS streaming');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
/** Allocate `size` bytes in WASM heap for a model file; returns file id. */
|
|
87
|
+
export const heapfsAlloc = (mod, name, size, allocBuffer = true) => {
|
|
88
|
+
if (size < 1)
|
|
89
|
+
throw new Error('HeapFS file size must be > 0');
|
|
90
|
+
const ptr = allocBuffer ? Number(mod.mmapAlloc(size)) : 0;
|
|
91
|
+
const file = { ptr, size, id: currFileId++ };
|
|
92
|
+
fsIdToFile[file.id] = file;
|
|
93
|
+
fsNameToFile[name] = file;
|
|
94
|
+
return file.id;
|
|
95
|
+
};
|
|
96
|
+
/** Write bytes at `offset` into a HeapFS file. Returns bytes written. */
|
|
97
|
+
export const heapfsWrite = (mod, id, buffer, offset) => {
|
|
98
|
+
const f = fsIdToFile[id];
|
|
99
|
+
if (!f)
|
|
100
|
+
throw new Error(`HeapFS file id ${id} not found`);
|
|
101
|
+
const after = offset + buffer.byteLength;
|
|
102
|
+
if (after > f.size) {
|
|
103
|
+
throw new Error(`HeapFS write out of bounds: ${after} > ${f.size}`);
|
|
104
|
+
}
|
|
105
|
+
getHeapU8(mod).set(buffer, Number(f.ptr) + offset);
|
|
106
|
+
return buffer.byteLength;
|
|
107
|
+
};
|
|
108
|
+
/** VFS path for a model basename under /models/. */
|
|
109
|
+
export const heapfsModelPath = (basename) => `/models/${basename}`;
|
|
110
|
+
/** Whether HeapFS runtime methods are present on the module. */
|
|
111
|
+
export const supportsHeapFS = (mod) => !!mod &&
|
|
112
|
+
typeof mod.mmapAlloc === 'function' &&
|
|
113
|
+
typeof mod.MEMFS === 'object' &&
|
|
114
|
+
typeof mod.FS === 'object';
|
|
115
|
+
//# sourceMappingURL=heapfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heapfs.js","sourceRoot":"","sources":["../../../src/workers/heapfs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HeapFS — allocate model bytes directly in WASM linear memory (wllama-style).\n *\n * Standard Emscripten MEMFS stores file contents in the JS heap; reads/mmap\n * copy into WASM. HeapFS patches MEMFS so file contents are a subarray of\n * HEAPU8 at an mmapAlloc'd address, enabling zero-copy mmap for llama.cpp.\n *\n * Ref: ref-code/wllama/src/workers-code/llama-cpp.js\n */\n\nexport type EmscriptenModule = {\n MEMFS: {\n stream_ops: Record<string, unknown> & {\n read: (...args: unknown[]) => unknown;\n write: (...args: unknown[]) => unknown;\n llseek: (...args: unknown[]) => unknown;\n allocate: (...args: unknown[]) => unknown;\n mmap: (...args: unknown[]) => unknown;\n msync: (...args: unknown[]) => unknown;\n _read?: (...args: unknown[]) => unknown;\n _write?: (...args: unknown[]) => unknown;\n _llseek?: (...args: unknown[]) => unknown;\n _allocate?: (...args: unknown[]) => unknown;\n _mmap?: (...args: unknown[]) => unknown;\n _msync?: (...args: unknown[]) => unknown;\n };\n ops_table: { file: { stream: Record<string, unknown> } };\n };\n FS: {\n mkdir: (path: string) => void;\n analyzePath: (path: string) => { exists: boolean };\n createPath?: (parent: string, path: string, canRead: boolean, canWrite: boolean) => void;\n mount: (type: unknown, opts: unknown, mountpoint: string) => void;\n createDataFile: (\n parent: string,\n name: string,\n data: ArrayBuffer,\n canRead: boolean,\n canWrite: boolean,\n canOwn: boolean,\n ) => void;\n };\n mmapAlloc: (size: number) => number;\n HEAPU8: Uint8Array;\n};\n\ntype HeapFile = {\n ptr: number;\n size: number;\n id: number;\n};\n\nconst fsNameToFile: Record<string, HeapFile> = {};\nconst fsIdToFile: Record<number, HeapFile> = {};\nlet currFileId = 0;\nlet patched = false;\n\nconst getHeapU8 = (mod: EmscriptenModule): Uint8Array => {\n const buf = (mod as { wasmMemory?: WebAssembly.Memory }).wasmMemory?.buffer ?? mod.HEAPU8?.buffer;\n if (!buf) throw new Error('HeapFS requires WASM linear memory');\n return new Uint8Array(buf);\n};\n\nconst patchStream = (mod: EmscriptenModule, stream: { node: { name: string; contents?: Uint8Array; usedBytes?: number } }) => {\n const name = stream.node.name;\n const f = fsNameToFile[name];\n if (!f) return;\n const heap = getHeapU8(mod);\n const ptr = Number(f.ptr);\n stream.node.contents = heap.subarray(ptr, ptr + f.size);\n stream.node.usedBytes = f.size;\n};\n\n/** Patch MEMFS stream ops so mmap/read use WASM-heap-backed file storage. */\nexport const patchHeapFS = (mod: EmscriptenModule): void => {\n if (patched) return;\n patched = true;\n\n const ops = mod.MEMFS.stream_ops;\n ops._read = ops._read ?? ops.read;\n ops._write = ops._write ?? ops.write;\n ops._llseek = ops._llseek ?? ops.llseek;\n ops._allocate = ops._allocate ?? ops.allocate;\n ops._mmap = ops._mmap ?? ops.mmap;\n ops._msync = ops._msync ?? ops.msync;\n\n ops.read = function (this: unknown, stream: Parameters<typeof ops._read>[0], ...rest: unknown[]) {\n patchStream(mod, stream as Parameters<typeof patchStream>[1]);\n return (ops._read as (...a: unknown[]) => unknown).call(this, stream, ...rest);\n };\n mod.MEMFS.ops_table.file.stream.read = ops.read;\n\n ops.llseek = function (this: unknown, stream: Parameters<typeof ops._llseek>[0], ...rest: unknown[]) {\n patchStream(mod, stream as Parameters<typeof patchStream>[1]);\n return (ops._llseek as (...a: unknown[]) => unknown).call(this, stream, ...rest);\n };\n mod.MEMFS.ops_table.file.stream.llseek = ops.llseek;\n\n ops.mmap = function (this: unknown, stream: unknown, length: unknown, position: unknown, prot: unknown, flags: unknown) {\n patchStream(mod, stream as Parameters<typeof patchStream>[1]);\n const name = (stream as { node: { name: string } }).node.name;\n const f = fsNameToFile[name];\n if (f) {\n return { ptr: Number(f.ptr) + Number(position), allocated: false };\n }\n return (ops._mmap as (...a: unknown[]) => unknown).call(this, stream, length, position, prot, flags);\n };\n mod.MEMFS.ops_table.file.stream.mmap = ops.mmap;\n\n mod.FS.mkdir('/models');\n mod.FS.mount(mod.MEMFS, { root: '.' }, '/models');\n};\n\n/** Ensure MEMFS /tmp exists for VFS model streaming (fopen fails without it). */\nexport const ensureWasmTmpDir = (mod: EmscriptenModule): void => {\n const fs = mod.FS;\n if (fs.analyzePath('/tmp').exists) return;\n try {\n if (typeof fs.createPath === 'function') {\n fs.createPath('/', 'tmp', true, true);\n } else {\n fs.mkdir('/tmp');\n }\n } catch {\n if (!fs.analyzePath('/tmp').exists) {\n throw new Error('Failed to create MEMFS /tmp for model VFS streaming');\n }\n }\n};\n\n/** Allocate `size` bytes in WASM heap for a model file; returns file id. */\nexport const heapfsAlloc = (mod: EmscriptenModule, name: string, size: number, allocBuffer = true): number => {\n if (size < 1) throw new Error('HeapFS file size must be > 0');\n const ptr = allocBuffer ? Number(mod.mmapAlloc(size)) : 0;\n const file: HeapFile = { ptr, size, id: currFileId++ };\n fsIdToFile[file.id] = file;\n fsNameToFile[name] = file;\n return file.id;\n};\n\n/** Write bytes at `offset` into a HeapFS file. Returns bytes written. */\nexport const heapfsWrite = (mod: EmscriptenModule, id: number, buffer: Uint8Array, offset: number): number => {\n const f = fsIdToFile[id];\n if (!f) throw new Error(`HeapFS file id ${id} not found`);\n const after = offset + buffer.byteLength;\n if (after > f.size) {\n throw new Error(`HeapFS write out of bounds: ${after} > ${f.size}`);\n }\n getHeapU8(mod).set(buffer, Number(f.ptr) + offset);\n return buffer.byteLength;\n};\n\n/** VFS path for a model basename under /models/. */\nexport const heapfsModelPath = (basename: string): string => `/models/${basename}`;\n\n/** Whether HeapFS runtime methods are present on the module. */\nexport const supportsHeapFS = (mod: unknown): mod is EmscriptenModule =>\n !!mod &&\n typeof (mod as EmscriptenModule).mmapAlloc === 'function' &&\n typeof (mod as EmscriptenModule).MEMFS === 'object' &&\n typeof (mod as EmscriptenModule).FS === 'object';\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
type GenerateRequest = {
|
|
2
|
+
prompt?: string;
|
|
3
|
+
messages?: Array<{
|
|
4
|
+
role: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}>;
|
|
7
|
+
max_tokens?: number;
|
|
8
|
+
temperature?: number;
|
|
9
|
+
stream?: boolean;
|
|
10
|
+
};
|
|
11
|
+
type GenerateResult = {
|
|
12
|
+
text: string;
|
|
13
|
+
tokens_predicted: number;
|
|
14
|
+
tokens_evaluated: number;
|
|
15
|
+
finish_reason: 'stop' | 'length' | 'error';
|
|
16
|
+
};
|
|
17
|
+
type EmbedResult = {
|
|
18
|
+
vectors: number[][];
|
|
19
|
+
};
|
|
20
|
+
export type TokenizeResult = {
|
|
21
|
+
tokens: number[];
|
|
22
|
+
has_media?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type DetokenizeResult = {
|
|
25
|
+
text: string;
|
|
26
|
+
};
|
|
27
|
+
export type WasmEngine = {
|
|
28
|
+
init?: () => Promise<void> | void;
|
|
29
|
+
loadModel: (modelId: string, modelBuffer: ArrayBuffer, opts?: Record<string, unknown>) => Promise<void> | void;
|
|
30
|
+
/** Stream from OPFS sync handle without holding full model in JS heap (#9). */
|
|
31
|
+
loadModelFromOpfsReader?: (modelId: string, reader: {
|
|
32
|
+
sizeBytes: number;
|
|
33
|
+
readChunk: (offset: number, length?: number) => Uint8Array;
|
|
34
|
+
close: () => void;
|
|
35
|
+
}, opts?: Record<string, unknown>) => Promise<void> | void;
|
|
36
|
+
unloadModel: (modelId: string) => Promise<void> | void;
|
|
37
|
+
generate: (modelId: string, req: GenerateRequest, onToken?: (token: string, index: number) => void) => Promise<GenerateResult> | GenerateResult;
|
|
38
|
+
embed: (modelId: string, input: string | string[]) => Promise<EmbedResult> | EmbedResult;
|
|
39
|
+
/** Tokenize text using the loaded model vocabulary. */
|
|
40
|
+
tokenize?: (modelId: string, text: string) => Promise<TokenizeResult> | TokenizeResult;
|
|
41
|
+
/** Detokenize a token ID array back to text. */
|
|
42
|
+
detokenize?: (modelId: string, tokens: number[]) => Promise<DetokenizeResult> | DetokenizeResult;
|
|
43
|
+
/** Convert a JSON Schema to a GBNF grammar string for constrained sampling. */
|
|
44
|
+
convertJsonSchemaToGrammar?: (schemaJson: string) => Promise<string> | string;
|
|
45
|
+
rerank?: (modelId: string, query: string, documents: string[]) => Promise<Array<{
|
|
46
|
+
index: number;
|
|
47
|
+
score: number;
|
|
48
|
+
}>>;
|
|
49
|
+
bench?: (modelId: string, pp: number, tg: number, pl: number, nr: number) => Promise<string>;
|
|
50
|
+
saveSession?: (modelId: string, filepath: string, tokenSize: number) => Promise<{
|
|
51
|
+
tokens_saved: number;
|
|
52
|
+
}>;
|
|
53
|
+
loadSession?: (modelId: string, filepath: string) => Promise<{
|
|
54
|
+
tokens_loaded: number;
|
|
55
|
+
prompt: string;
|
|
56
|
+
}>;
|
|
57
|
+
applyLoraAdapters?: (modelId: string, loraAdapters: Array<{
|
|
58
|
+
path: string;
|
|
59
|
+
scaled?: number;
|
|
60
|
+
}>) => Promise<void>;
|
|
61
|
+
removeLoraAdapters?: (modelId: string) => Promise<void>;
|
|
62
|
+
getLoadedLoraAdapters?: (modelId: string) => Promise<Array<{
|
|
63
|
+
path: string;
|
|
64
|
+
scaled?: number;
|
|
65
|
+
}>>;
|
|
66
|
+
initMultimodal?: (modelId: string, path: string, useGpu?: boolean) => Promise<boolean>;
|
|
67
|
+
multimodalStatus?: (modelId: string) => Promise<{
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
vision: boolean;
|
|
70
|
+
audio: boolean;
|
|
71
|
+
}>;
|
|
72
|
+
releaseMultimodal?: (modelId: string) => Promise<void>;
|
|
73
|
+
initVocoder?: (modelId: string, path: string, nBatch?: number) => Promise<boolean>;
|
|
74
|
+
vocoderEnabled?: (modelId: string) => Promise<boolean>;
|
|
75
|
+
releaseVocoder?: (modelId: string) => Promise<void>;
|
|
76
|
+
formattedAudioCompletion?: (modelId: string, speakerJson: string, textToSpeak: string) => Promise<{
|
|
77
|
+
prompt: string;
|
|
78
|
+
grammar?: string;
|
|
79
|
+
}>;
|
|
80
|
+
audioGuideTokens?: (modelId: string, textToSpeak: string) => Promise<number[]>;
|
|
81
|
+
decodeAudioTokens?: (modelId: string, tokens: number[]) => Promise<number[]>;
|
|
82
|
+
health?: () => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
83
|
+
memory?: () => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
84
|
+
};
|
|
85
|
+
export declare const loadLlamaWasmEngine: () => Promise<WasmEngine>;
|
|
86
|
+
export {};
|