@qvac/llm-llamacpp 0.67.0 → 0.68.0

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/README.md CHANGED
@@ -114,7 +114,7 @@ const args = {
114
114
 
115
115
  The `args` obj contains the following properties:
116
116
 
117
- * `files.model`: Required. An array of absolute paths to the GGUF model file(s) to load. The caller is responsible for passing the complete set of files for the model, including every shard and the `.tensors.txt` companion for multi-shard models (see [Sharded models](#sharded-models) below).
117
+ * `files.model`: Exactly one absolute disk path: the single GGUF file or only the first shard. Fabric reads the remaining shards from the same directory.
118
118
  * `files.projectionModel`: Optional. Absolute path to the projection model file. This is required for multimodal support.
119
119
  * `config`: The model configuration object (see next section).
120
120
  * `logger`: This property is used to create a [`QvacLogger`](../logging) instance, which handles all logging functionality.
@@ -122,46 +122,24 @@ The `args` obj contains the following properties:
122
122
 
123
123
  #### Sharded models
124
124
 
125
- The addon no longer expands sharded models internally. If you are loading a multi-shard GGUF model, **the caller MUST pass every file** — including the `.tensors.txt` companion file that lives alongside the shards — in `files.model`. Anything missing will cause the addon to fail during weight streaming.
125
+ Models load from disk only. Pass exactly one absolute path in `files.model`:
126
+ the single GGUF file, or the first shard (`*-00001-of-000NN.gguf`). All shards
127
+ must already be in the same directory with their original names. Fabric reads
128
+ the GGUF metadata, discovers the remaining shards and reads their weights.
129
+ No JavaScript weight buffers or `.tensors.txt` file are needed.
126
130
 
127
- **Required ordering for multi-shard models:**
128
- 1. The `.tensors.txt` companion file **first**.
129
- 2. Each `*-NNNNN-of-MMMMM.gguf` shard in **numerical order** (shard `00001` before `00002`, and so on).
130
-
131
- Example — loading a 5-shard model:
131
+ Passing multiple paths or weight buffers is rejected. Migrate an old all-files
132
+ list to `[firstShardPath]`. The `loadWeights()` API has been removed.
133
+ This removes model-weight streaming, while generated output still streams as before.
132
134
 
133
135
  ```js
134
- const path = require('bare-path')
135
- const LlmLlamacpp = require('@qvac/llm-llamacpp')
136
-
137
- const dir = path.resolve('./models')
138
- const modelBase = 'my-big-model-Q4_K_M'
139
-
140
136
  const model = new LlmLlamacpp({
141
- files: {
142
- model: [
143
- path.join(dir, `${modelBase}.tensors.txt`),
144
- path.join(dir, `${modelBase}-00001-of-00005.gguf`),
145
- path.join(dir, `${modelBase}-00002-of-00005.gguf`),
146
- path.join(dir, `${modelBase}-00003-of-00005.gguf`),
147
- path.join(dir, `${modelBase}-00004-of-00005.gguf`),
148
- path.join(dir, `${modelBase}-00005-of-00005.gguf`)
149
- ]
150
- },
151
- config,
152
- logger: console,
153
- opts: { stats: true }
137
+ files: { model: ['/absolute/models/model-00001-of-00003.gguf'] },
138
+ config
154
139
  })
155
-
156
140
  await model.load()
157
141
  ```
158
142
 
159
- For single-file GGUF models, pass a one-element array:
160
-
161
- ```js
162
- files: { model: [path.join(dir, 'Llama-3.2-1B-Instruct-Q4_0.gguf')] }
163
- ```
164
-
165
143
  ### 3. Create the `config` obj
166
144
 
167
145
  The `config` obj consists of a set of hyper-parameters which can be used to tweak the behaviour of the model.
package/addon.d.ts CHANGED
@@ -55,11 +55,6 @@ export type AddonBatchRunResult = {
55
55
  id?: never;
56
56
  ids: string[];
57
57
  };
58
- export interface LoadWeightsData {
59
- filename: string;
60
- chunk: Uint8Array | null;
61
- completed: boolean;
62
- }
63
58
  export interface AddonConfigurationParams {
64
59
  path: string;
65
60
  projectionPath: string;
@@ -74,7 +69,6 @@ export interface AddonCalcTokensParams {
74
69
  }
75
70
  export interface LlamaBinding {
76
71
  createInstance(owner: LlamaInterface, configurationParams: AddonConfigurationParams, outputCallback: AddonOutputCallback, reserved: null): object;
77
- loadWeights(handle: unknown, data: LoadWeightsData): Promise<void> | void;
78
72
  activate(handle: unknown): Promise<void> | void;
79
73
  activeJobs(handle: unknown): number;
80
74
  activeSlots(handle: unknown): number;
@@ -105,7 +99,6 @@ export declare class LlamaInterface {
105
99
  private readonly _binding;
106
100
  private _handle;
107
101
  constructor(binding: unknown, configurationParams: AddonConfigurationParams, outputCb: AddonOutputCallback);
108
- loadWeights(weightsData: LoadWeightsData): Promise<void>;
109
102
  /**
110
103
  * Moves addon to the LISTENING state after all the initialization is done
111
104
  */
package/addon.js CHANGED
@@ -80,9 +80,6 @@ class LlamaInterface {
80
80
  }
81
81
  this._handle = this._binding.createInstance(this, configurationParams, outputCb, null);
82
82
  }
83
- loadWeights(weightsData) {
84
- return Promise.resolve(this._binding.loadWeights(this._handle, weightsData));
85
- }
86
83
  /**
87
84
  * Moves addon to the LISTENING state after all the initialization is done
88
85
  */
package/index.d.ts CHANGED
@@ -16,11 +16,10 @@ type LlmLlamacppArgs = LlmLlamacpp.LlmLlamacppArgs;
16
16
  type Message = LlmLlamacpp.Message;
17
17
  type RunOptions = LlmLlamacpp.RunOptions;
18
18
  /**
19
- * Returns the first shard (matching `-NNNNN-of-MMMMM.gguf`) or the sole
20
- * entry for single-file models. Matches the C++ shard-expansion contract
21
- * in `GGUFShards::expandGGUFIntoShards`.
19
+ * Validates the single disk path. For a sharded GGUF, pass only the first
20
+ * shard; Fabric discovers the remaining shards. Weight streaming is unsupported.
22
21
  */
23
- declare function pickPrimaryGgufPath(files: string[]): string;
22
+ declare function validateModelPath(files: string[]): string;
24
23
  interface LlmLlamacpp {
25
24
  /** The native addon, or `null` before `load()` and after `unload()`. Advanced/test access only. */
26
25
  addon: LlmLlamacpp.Addon | null;
@@ -93,8 +92,8 @@ interface LlmLlamacpp {
93
92
  interface LlmLlamacppConstructor {
94
93
  new (args: LlmLlamacppArgs): LlmLlamacpp;
95
94
  readonly prototype: LlmLlamacpp;
96
- /** Returns the first shard (matching `-NNNNN-of-MMMMM.gguf`) or the sole entry for single-file models. */
97
- readonly pickPrimaryGgufPath: typeof pickPrimaryGgufPath;
95
+ /** Validates and returns the single absolute disk path; split models require the first shard. */
96
+ readonly validateModelPath: typeof validateModelPath;
98
97
  readonly assessFit: typeof assessFitImpl;
99
98
  }
100
99
  /** LLM client wrapping the native LlamaInterface for inference, finetuning, and pause/resume. */
@@ -119,11 +118,6 @@ declare namespace LlmLlamacpp {
119
118
  */
120
119
  type AddonBatchRunResult = AddonModule.AddonBatchRunResult;
121
120
  interface Addon {
122
- loadWeights(data: {
123
- filename: string;
124
- chunk: Uint8Array | null;
125
- completed: boolean;
126
- }, logger?: QvacLogger): Promise<void>;
127
121
  activate(): Promise<void>;
128
122
  /** Single-request admission: resolves the accepted flag plus the native-assigned job id. */
129
123
  runJob(data: AddonRunJobMessage[]): Promise<AddonRunJobResult>;
@@ -433,8 +427,9 @@ declare namespace LlmLlamacpp {
433
427
  [key: string]: string | number | boolean | string[] | undefined;
434
428
  }
435
429
  interface LlmLlamacppArgs {
430
+ /** One absolute disk path, or only the first shard path. Weight buffers, multiple paths and tensor-name files are unsupported. */
436
431
  files: {
437
- model: string[];
432
+ model: [string];
438
433
  projectionModel?: string;
439
434
  };
440
435
  config: LlamaConfig;
package/index.js CHANGED
@@ -273,13 +273,24 @@ function normalizeFinetuneParams(opts) {
273
273
  return out;
274
274
  }
275
275
  /**
276
- * Returns the first shard (matching `-NNNNN-of-MMMMM.gguf`) or the sole
277
- * entry for single-file models. Matches the C++ shard-expansion contract
278
- * in `GGUFShards::expandGGUFIntoShards`.
276
+ * Validates the single disk path. For a sharded GGUF, pass only the first
277
+ * shard; Fabric discovers the remaining shards. Weight streaming is unsupported.
279
278
  */
280
- function pickPrimaryGgufPath(files) {
281
- const SHARD_REGEX = /-\d+-of-\d+\.gguf$/;
282
- return files.find((p) => SHARD_REGEX.test(p)) || files[0];
279
+ function validateModelPath(files) {
280
+ if (!Array.isArray(files) || files.length === 0) {
281
+ throw new TypeError("files.model must contain one absolute disk path");
282
+ }
283
+ if (files.length !== 1) {
284
+ throw new TypeError("Weight streaming is no longer supported. Pass only one disk path in files.model; " +
285
+ "for a sharded model, pass only the first shard path. Do not pass a tensor-name file.");
286
+ }
287
+ if (typeof files[0] !== "string" || files[0].length === 0 || !path.isAbsolute(files[0])) {
288
+ throw new TypeError("files.model[0] must be an absolute disk path string; weight buffers are not supported");
289
+ }
290
+ if (files[0].endsWith(".tensors.txt")) {
291
+ throw new TypeError("Weight streaming is no longer supported. Pass the first GGUF shard path, not a tensor-name file.");
292
+ }
293
+ return files[0];
283
294
  }
284
295
  // Replace media Uint8Array contents with a small summary so the logger never
285
296
  // asks V8 to JSON.stringify multi-MB binary blobs.
@@ -305,7 +316,7 @@ function sanitizePromptForLog(prompt) {
305
316
  }
306
317
  /** LLM client wrapping the native LlamaInterface for inference, finetuning, and pause/resume. */
307
318
  const LlmLlamacpp = class LlmLlamacpp {
308
- static pickPrimaryGgufPath = pickPrimaryGgufPath;
319
+ static validateModelPath = validateModelPath;
309
320
  static assessFit = fit_1.assessFit;
310
321
  // Attached for tests; untyped because `typeof QvacResponse` is not nameable by consumers.
311
322
  static QvacResponse = infer_base_1.QvacResponse;
@@ -313,7 +324,7 @@ const LlmLlamacpp = class LlmLlamacpp {
313
324
  opts;
314
325
  logger;
315
326
  state;
316
- _files;
327
+ _modelPath;
317
328
  _projectionModelPath;
318
329
  _config;
319
330
  _finetuneJob;
@@ -324,17 +335,7 @@ const LlmLlamacpp = class LlmLlamacpp {
324
335
  _batchHandler;
325
336
  _checkpointSaveDir;
326
337
  constructor({ files, config, logger = null, opts = {} }) {
327
- if (!files || !Array.isArray(files.model) || files.model.length === 0) {
328
- throw new TypeError("files.model must be a non-empty array of absolute paths");
329
- }
330
- for (const [i, entry] of files.model.entries()) {
331
- if (typeof entry !== "string" || entry.length === 0) {
332
- throw new TypeError(`files.model[${i}] must be an absolute path string`);
333
- }
334
- if (!path.isAbsolute(entry)) {
335
- throw new TypeError(`files.model[${i}] must be an absolute path (got: ${entry})`);
336
- }
337
- }
338
+ this._modelPath = validateModelPath(files?.model);
338
339
  if (files.projectionModel !== undefined) {
339
340
  if (typeof files.projectionModel !== "string" || files.projectionModel.length === 0) {
340
341
  throw new TypeError("files.projectionModel must be an absolute path string");
@@ -343,7 +344,6 @@ const LlmLlamacpp = class LlmLlamacpp {
343
344
  throw new TypeError(`files.projectionModel must be an absolute path (got: ${files.projectionModel})`);
344
345
  }
345
346
  }
346
- this._files = files.model;
347
347
  this._projectionModelPath = files.projectionModel || "";
348
348
  this._config = config;
349
349
  this.logger = new QvacLogger(logger);
@@ -404,18 +404,14 @@ const LlmLlamacpp = class LlmLlamacpp {
404
404
  }
405
405
  async _load() {
406
406
  this.logger.info("Starting model load");
407
- const primaryGgufPath = pickPrimaryGgufPath(this._files);
408
407
  const configurationParams = {
409
- path: primaryGgufPath,
408
+ path: this._modelPath,
410
409
  projectionPath: this._projectionModelPath,
411
410
  config: { ...this._config },
412
411
  };
413
412
  this.logger.info("Creating addon with configuration:", configurationParams);
414
413
  try {
415
414
  this.addon = this._createAddon(configurationParams);
416
- if (this._files.length > 1) {
417
- await this._streamShards();
418
- }
419
415
  this.logger.info("Activating addon");
420
416
  await this.addon.activate();
421
417
  }
@@ -432,17 +428,6 @@ const LlmLlamacpp = class LlmLlamacpp {
432
428
  }
433
429
  this.logger.info("Model load completed successfully");
434
430
  }
435
- async _streamShards() {
436
- for (const filePath of this._files) {
437
- const filename = path.basename(filePath);
438
- const stream = fs.createReadStream(filePath);
439
- for await (const chunk of stream) {
440
- await this.addon.loadWeights({ filename, chunk, completed: false });
441
- }
442
- await this.addon.loadWeights({ filename, chunk: null, completed: true });
443
- this.logger.info(`Streamed weights for ${filename}`);
444
- }
445
- }
446
431
  run(prompt, runOptions) {
447
432
  if (BatchHandler.isBatchInput(prompt)) {
448
433
  if (runOptions !== undefined) {
@@ -931,7 +916,7 @@ const LlmLlamacpp = class LlmLlamacpp {
931
916
  };
932
917
  // Runtime-redundant: ESM named imports need the top-level `module.exports.X =` form.
933
918
  /* eslint-disable @typescript-eslint/no-unsafe-member-access -- `module.exports` is untyped CommonJS surface. */
934
- module.exports.pickPrimaryGgufPath = pickPrimaryGgufPath;
919
+ module.exports.validateModelPath = validateModelPath;
935
920
  module.exports.assessFit = fit_1.assessFit;
936
921
  module.exports.QvacResponse = infer_base_1.QvacResponse;
937
922
  module.exports = LlmLlamacpp;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qvac/llm-llamacpp",
3
- "version": "0.67.0",
3
+ "version": "0.68.0",
4
4
  "description": "llama addon for qvac",
5
5
  "addon": true,
6
6
  "scripts": {
@@ -79,8 +79,8 @@
79
79
  "bugs": "https://github.com/tetherto/qvac/issues",
80
80
  "homepage": "https://qvac.tether.io",
81
81
  "devDependencies": {
82
- "@qvac/fabric-android-arm64": "^0.25.0",
83
- "@qvac/fabric-ios": "^0.25.0",
82
+ "@qvac/fabric-android-arm64": "^0.26.0",
83
+ "@qvac/fabric-ios": "^0.26.0",
84
84
  "@types/node": "^24.2.1",
85
85
  "bare-crypto": "^1.15.3",
86
86
  "bare-process": "^4.2.2",
@@ -102,22 +102,22 @@
102
102
  "typescript-eslint": "^8.63.0"
103
103
  },
104
104
  "dependencies": {
105
- "@qvac/fabric": "^0.25.0",
105
+ "@qvac/fabric": "^0.26.0",
106
106
  "@qvac/infer-base": "^0.8.0",
107
107
  "@qvac/logging": "^0.1.0",
108
108
  "bare-fs": "^4.5.1",
109
109
  "bare-path": "^3.0.0"
110
110
  },
111
111
  "optionalDependencies": {
112
- "@qvac/fabric-linux-x64": "^0.25.0",
113
- "@qvac/fabric-linux-arm64": "^0.25.0",
114
- "@qvac/fabric-darwin-arm64": "^0.25.0",
115
- "@qvac/fabric-darwin-x64": "^0.25.0",
116
- "@qvac/fabric-win32-x64": "^0.25.0"
112
+ "@qvac/fabric-linux-x64": "^0.26.0",
113
+ "@qvac/fabric-linux-arm64": "^0.26.0",
114
+ "@qvac/fabric-darwin-arm64": "^0.26.0",
115
+ "@qvac/fabric-darwin-x64": "^0.26.0",
116
+ "@qvac/fabric-win32-x64": "^0.26.0"
117
117
  },
118
118
  "peerDependencies": {
119
- "@qvac/fabric-android-arm64": "^0.25.0",
120
- "@qvac/fabric-ios": "^0.25.0"
119
+ "@qvac/fabric-android-arm64": "^0.26.0",
120
+ "@qvac/fabric-ios": "^0.26.0"
121
121
  },
122
122
  "peerDependenciesMeta": {
123
123
  "@qvac/fabric-android-arm64": {
@@ -7,7 +7,7 @@
7
7
  ],
8
8
  "current_versions": [
9
9
  {
10
- "version": "0.67"
10
+ "version": "0.68"
11
11
  }
12
12
  ],
13
13
  "exported_symbols": [
@@ -42,7 +42,6 @@
42
42
  "__ZZN30qvac_lib_inference_addon_llama6runFitENS_10FitRequestEE8fitMutex",
43
43
  "__ZGVZN30qvac_lib_inference_addon_llama6runFitENS_10FitRequestEE8fitMutex",
44
44
  "__ZNSt3__19__any_imp17__unique_typeinfoIN24llama_finetuning_helpers21FinetuneProgressStatsEE4__idE",
45
- "__ZZN10InitLoader17getLoadingContextERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEE12numInstances",
46
45
  "__ZN28qvac_lib_inference_addon_cpp6logger8JsLogger6state_E",
47
46
  "__ZNSt3__19__any_imp17__unique_typeinfoIN10LlamaModel6PromptEE4__idE",
48
47
  "__ZN28qvac_lib_inference_addon_cpp6logger8JsLogger12queue_mutex_E",
@@ -237,7 +236,6 @@
237
236
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler15failGroupLockedERKNSt3__110shared_ptrINS1_10BatchGroupEEESt13exception_ptrNS1_15SaveCachePolicyE",
238
237
  "__ZN14TextLlmContext20evalMessageWithToolsERKNSt3__16vectorI15common_chat_msgNS0_9allocatorIS2_EEEERKNS1_I16common_chat_toolNS3_IS8_EEEEbb",
239
238
  "__ZN17backend_selection13chooseBackendENS_11BackendTypeEPFv14ggml_log_levelPKcPvERKNSt3__18optionalINS7_7variantIJiNS_11MainGpuTypeEEEEEEPK13ModelMetaDataPNS8_IiEEbPbRKNS7_6vectorINS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEENSP_ISR_EEEE",
240
- "__ZNK18AsyncWeightsLoader12isFirstShardERKNSt3__14__fs10filesystem4pathE",
241
239
  "__ZN14MtmdLlmContext22configureReasoningTagsERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_RKNS0_8optionalIN30qvac_lib_inference_addon_llama5utils13ReasoningTagsEEE",
242
240
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchSchedulerC1E15LlmModelContextjjmiRK13common_paramsNSt3__18functionIFNS6_10unique_ptrI14SequenceDriverNS6_14default_deleteIS9_EEEES5_jiEEE",
243
241
  "__ZNK30qvac_lib_inference_addon_llama8batching20RuntimeStatsSnapshot22prefillTokensPerSecondEv",
@@ -257,20 +255,18 @@
257
255
  "__ZN26LlamaLazyInitializeBackend16initializeLockedERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_",
258
256
  "__ZThn48_N14MtmdLlmContext18onDraftLogitsReadyEiijRKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
259
257
  "__ZN10LlamaModel32setFinetuneCancelSavesCheckpointEbRKNSt3__16vectorIyNS0_9allocatorIyEEEE",
260
- "__ZN13ModelMetaData5parseERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEERK10GGUFShardsbPKc",
261
258
  "__ZN30qvac_lib_inference_addon_llama11speculative18resetDraftSequenceEP13llama_contexti",
262
259
  "__ZNK10LlamaModel15cancelInferenceEv",
263
260
  "__ZN14LlamaFinetuner17clearPauseRequestEv",
264
261
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler29writeStateToFileOrThrowLockedEjRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS2_6vectorIiNS6_IiEEEERKNS2_5dequeINS_5cache10CheckpointENS6_ISI_EEEE",
265
262
  "__ZN14LlamaFinetuner12requestPauseEb",
266
- "__ZN10LlamaModel17resolveShardPathsER10GGUFShardsRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE",
267
263
  "__ZN12CacheManager13saveForCallerERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
268
264
  "__ZN14TextLlmContext18commitCacheRequestEv",
265
+ "__ZN30qvac_lib_inference_addon_llama5utils25getThinkingForcedOpenTextERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_",
269
266
  "__ZN14TextLlmContext9onFailureERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
270
267
  "__ZN14MtmdLlmContext23advanceDecodedTextTokenEi",
271
268
  "__ZN24llama_finetuning_helpers19savePauseCheckpointEP16ggml_opt_contextRNS_23TrainingCheckpointStateEbx",
272
269
  "__ZN14MtmdLlmContext14setCacheTokensEi",
273
- "__ZN30qvac_lib_inference_addon_llama5utils25getThinkingForcedOpenTextERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_",
274
270
  "__ZN17backend_selection26getEffectiveGpuDeviceCountERKNS_16BackendInterfaceE",
275
271
  "__ZN30qvac_lib_inference_addon_llama5utils21SequenceStateSnapshotC1EOS1_",
276
272
  "__ZN24llama_finetuning_helpers25setCurrentCheckpointStateEPNS_23TrainingCheckpointStateE",
@@ -316,13 +312,12 @@
316
312
  "__ZN30qvac_lib_inference_addon_llama8batching7Request18isOptAwaitingMediaERKNSt3__18optionalIS1_EE",
317
313
  "__ZN30qvac_lib_inference_addon_llama8batching7Request13isOptFinishedERKNSt3__18optionalIS1_EE",
318
314
  "__ZN10LlamaModel8isLoadedEv",
319
- "__ZN18AsyncWeightsLoaderC2ERK10GGUFShardsR10InitLoaderRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEP13ModelMetaData",
315
+ "__ZThn48_N14MtmdLlmContext9loadCacheERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEb",
320
316
  "__ZN14TextLlmContext14preparePrefillERKNSt3__16vectorI15common_chat_msgNS0_9allocatorIS2_EEEERKNS1_I16common_chat_toolNS3_IS8_EEEERKNS1_INS1_IhNS3_IhEEEENS3_ISE_EEEERKNS1_I12PlannedMediaNS3_ISJ_EEEEbb",
321
317
  "__ZThn48_N14MtmdLlmContext17onPrefillCompleteEim",
322
318
  "__ZN14TextLlmContext21initializeCommonStateEv",
323
319
  "__ZNK14LlamaFinetuner31getCurrentCheckpointStateSharedEv",
324
320
  "__ZThn16_N10LlamaModelD1Ev",
325
- "__ZThn48_N14MtmdLlmContext9loadCacheERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEb",
326
321
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler30prepareSpeculativeDraftsLockedEPNSt3__111unique_lockINS2_5mutexEEE",
327
322
  "__ZN10LlamaModelC1EONSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES7_ONS0_13unordered_mapIS6_S6_NS0_4hashIS6_EENS0_8equal_toIS6_EENS4_INS0_4pairIKS6_S6_EEEEEE",
328
323
  "__ZN14MtmdLlmContext23prepareSpeculativeDraftEiij",
@@ -355,17 +350,16 @@
355
350
  "__ZN14TextLlmContext23prepareSpeculativeDraftEiij",
356
351
  "__ZN14TextLlmContext29adoptCheckpointsFromCacheFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEy",
357
352
  "__ZN22load_fit_normalization17tuneLoadConfigMapERNSt3__113unordered_mapINS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES7_NS0_4hashIS7_EENS0_8equal_toIS7_EENS5_INS0_4pairIKS7_S7_EEEEEERK13ModelMetaDataRKNS0_8optionalIiEERK23FinetuneConfigOverridesbbbbb",
358
- "__ZN18AsyncWeightsLoader31lendFirstShardAndWaitForReleaseEONSt3__110unique_ptrINS0_15basic_streambufIcNS0_11char_traitsIcEEEENS0_14default_deleteIS5_EEEE",
353
+ "__ZN30qvac_lib_inference_addon_llama8batching7Request22isOptGenerationPendingERKNSt3__18optionalIS1_EE",
359
354
  "__ZNK14MtmdLlmContext10ctxCeilingEv",
360
355
  "__ZThn48_N14TextLlmContext18adoptResidentStateERKNSt3__16vectorIiNS0_9allocatorIiEEEE",
361
- "__ZN30qvac_lib_inference_addon_llama8batching7Request22isOptGenerationPendingERKNSt3__18optionalIS1_EE",
356
+ "__ZThn48_N14MtmdLlmContext13onSequenceEndERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
362
357
  "__ZNK30qvac_lib_inference_addon_llama8batching7Request16isPrefillPendingEv",
363
358
  "__ZThn32_NK10LlamaModel10cancelByIdEy",
364
359
  "__ZN30qvac_lib_inference_addon_llama8batching20RuntimeStatsSnapshot14accumulateSlotExxRKNS0_7RequestE",
365
360
  "__ZNK14MtmdLlmContext25getToolDefinitionsDroppedEv",
366
361
  "__ZN30qvac_lib_inference_addon_llama8batching19MultiRequestBatcher13releaseBudgetEj",
367
362
  "__ZN12CacheManager10invalidateEv",
368
- "__ZThn48_N14MtmdLlmContext13onSequenceEndERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
369
363
  "__ZN14MtmdLlmContextD1Ev",
370
364
  "__ZN10LlamaModel16beginFinetuneJobEy",
371
365
  "__ZN30qvac_lib_inference_addon_llama5utils21SequenceStateSnapshot11adoptBufferENSt3__16vectorIhNS2_9allocatorIhEEEEi",
@@ -388,7 +382,6 @@
388
382
  "__ZThn48_N14TextLlmContext14preparePrefillERKNSt3__16vectorI15common_chat_msgNS0_9allocatorIS2_EEEERKNS1_I16common_chat_toolNS3_IS8_EEEERKNS1_INS1_IhNS3_IhEEEENS3_ISE_EEEERKNS1_I12PlannedMediaNS3_ISJ_EEEEbb",
389
383
  "__ZN14MtmdLlmContext9loadMediaERKNSt3__16vectorIhNS0_9allocatorIhEEEE",
390
384
  "__ZN14TextLlmContext23restoreCacheStateTokensERKNSt3__16vectorIiNS0_9allocatorIiEEEE",
391
- "__ZN18AsyncWeightsLoader20joinFirstShardWorkerEv",
392
385
  "__ZN30qvac_lib_inference_addon_llama8batching24generationBudgetExceededEjjij",
393
386
  "__ZNK14MtmdLlmContext28appendCheckpointsToCacheFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
394
387
  "__ZThn48_N14TextLlmContext29adoptCheckpointsFromCacheFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEy",
@@ -401,8 +394,8 @@
401
394
  "__ZNK12CacheManager15isCacheDisabledEv",
402
395
  "__ZNK14MtmdLlmContext14getCacheTokensEv",
403
396
  "__ZN30qvac_lib_inference_addon_llama5utils21SequenceStateSnapshot5clearEv",
404
- "__ZN14TextLlmContext15adoptDonorStateERKN30qvac_lib_inference_addon_llama5cache10DonorStateERKNS1_6LedgerEb",
405
397
  "__ZN14TextLlmContext15reconcilePromptERKNSt3__16vectorIiNS0_9allocatorIiEEEEb",
398
+ "__ZN14TextLlmContext15adoptDonorStateERKN30qvac_lib_inference_addon_llama5cache10DonorStateERKNS1_6LedgerEb",
406
399
  "__ZThn48_NK14TextLlmContext19residentStateTokensEv",
407
400
  "__ZN17backend_selection23getSplitDeviceSelectionERKNS_16BackendInterfaceE",
408
401
  "__ZN14TextLlmContext12syncPositionEi",
@@ -508,11 +501,12 @@
508
501
  "__ZN14TextLlmContext21rollbackFailedRequestEv",
509
502
  "__ZN17backend_selection20splitModeDeviceNamesERKNS_16BackendInterfaceERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE",
510
503
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler12submitLockedEONS1_13QueuedRequestE",
504
+ "__ZN13ModelMetaData5parseERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEPKc",
511
505
  "__ZNK30qvac_lib_inference_addon_llama8batching19MultiRequestBatcher12draftDroppedEj",
512
506
  "__ZN14MtmdLlmContext13onLogitsReadyEijRKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEEP10LlamaBatch",
513
507
  "__ZN14TextLlmContext23resetStateKeepingMemoryEb",
514
508
  "__ZN30qvac_lib_inference_addon_llama11speculative18SpeculativeRuntime6createER13common_paramsP11llama_modelP13llama_context",
515
- "__ZNK18AsyncWeightsLoader25hasIndividualStreamedFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
509
+ "__ZThn48_N14TextLlmContext8onCancelERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
516
510
  "__ZN14MtmdLlmContext24snapshotPreRequestCursorEv",
517
511
  "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler19donorHitsForTestingEv",
518
512
  "__ZN14MtmdLlmContext18onDraftLogitsReadyEiijRKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
@@ -539,16 +533,14 @@
539
533
  "__ZN12CacheManager17atomicPromoteFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_",
540
534
  "__ZN14MtmdLlmContext14requireSamplerEv",
541
535
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler19discardConversationERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE",
542
- "__ZN18AsyncWeightsLoader17setWeightsForFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEONS0_10unique_ptrINS0_15basic_streambufIcS3_EENS0_14default_deleteISB_EEEE",
543
536
  "__ZN14MtmdLlmContext4stopEv",
544
- "__ZThn48_N14TextLlmContext8onCancelERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE",
545
537
  "__ZN12CacheManager20isFileMissingOrEmptyERKNSt3__14__fs10filesystem4pathE",
546
538
  "__ZN14TextLlmContext27restorePreRequestCacheStateEv",
547
539
  "__ZN14TextLlmContext24captureHistoryCheckpointEi",
548
540
  "__ZN22load_fit_normalization22productionDependenciesEPFv14ggml_log_levelPKcPvE",
549
541
  "__ZN30qvac_lib_inference_addon_llama28applyGenerationParamHandlersEP8js_env_sRN28qvac_lib_inference_addon_cpp2js6ObjectER16GenerationParams",
550
542
  "__ZN30qvac_lib_inference_addon_llama11speculative19SpeculativeSequence12discardDraftEv",
551
- "__ZNK18AsyncWeightsLoader20shouldLendFirstShardERKNSt3__14__fs10filesystem4pathE",
543
+ "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler15hasValidDriverFEv",
552
544
  "__ZN10LlamaModel19flushResidentCachesEv",
553
545
  "__ZN14TextLlmContext24rebuildSamplerFromLedgerERKN30qvac_lib_inference_addon_llama5cache6LedgerE",
554
546
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler28serviceCheckpointStopsLockedEv",
@@ -557,7 +549,6 @@
557
549
  "__ZN30qvac_lib_inference_addon_llama5utils20historyReasoningTagsEPK21common_chat_templatesPK11llama_modelb",
558
550
  "__ZN24llama_finetuning_helpers20clearPauseCheckpointERKNSt3__14__fs10filesystem4pathE",
559
551
  "__ZN14MtmdLlmContext30capturePreRequestCacheSnapshotEv",
560
- "__ZN18AsyncWeightsLoader30extractIndividualStreamedFilesEv",
561
552
  "__ZN30qvac_lib_inference_addon_llama8batching20computeObservedStatsENSt3__16chrono10time_pointINS2_12steady_clockENS2_8durationIxNS1_5ratioILl1ELl1000000000EEEEEEERKNS0_7RequestENS1_8optionalI20GenerationStopReasonEE",
562
553
  "__ZN10LlamaModel15getCommonParamsEv",
563
554
  "__ZN14MtmdLlmContextC2ERK13common_paramsRK15LlmModelContextP12mtmd_contextiiy",
@@ -569,7 +560,7 @@
569
560
  "__ZThn24_N10LlamaModel7processERKNSt3__13anyEy",
570
561
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler5clearEv",
571
562
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler29serviceNextMediaSegmentLockedEPNSt3__111unique_lockINS2_5mutexEEE",
572
- "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler15hasValidDriverFEv",
563
+ "__ZThn48_NK14MtmdLlmContext9saveCacheERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
573
564
  "__ZN30qvac_lib_inference_addon_llama5utils13isGemma4ModelEPK11llama_model",
574
565
  "__ZN10LlamaModel24validateCheckpointBudgetERNS_15ReloadableStateE",
575
566
  "__ZN22load_fit_normalization31validateMobileMultiDeviceConfigERKNSt3__113unordered_mapINS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES7_NS0_4hashIS7_EENS0_8equal_toIS7_EENS5_INS0_4pairIKS7_S7_EEEEEE16llama_split_mode",
@@ -580,7 +571,6 @@
580
571
  "__ZN24llama_finetuning_helpers21tryHandlePauseRequestEP16ggml_opt_contextPNS_23TrainingCheckpointStateEbxx",
581
572
  "__ZN10LlamaModel21isMultiBatchActivatedERNS_15ReloadableStateE",
582
573
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchSchedulerC2E15LlmModelContextjjmiRK13common_paramsNSt3__18functionIFNS6_10unique_ptrI14SequenceDriverNS6_14default_deleteIS9_EEEES5_jiEEE",
583
- "__ZThn48_NK14MtmdLlmContext9saveCacheERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
584
574
  "__ZN12CacheManager24isParentDirectoryMissingERKNSt3__14__fs10filesystem4pathE",
585
575
  "__ZN14MtmdLlmContext16sampleFromLogitsEijRKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEEP10LlamaBatch",
586
576
  "__ZN14MtmdLlmContext24rebuildSamplerFromLedgerERKN30qvac_lib_inference_addon_llama5cache6LedgerE",
@@ -599,7 +589,6 @@
599
589
  "__ZN30qvac_lib_inference_addon_llama5utils21SequenceStateSnapshot19seedEmptyForTestingEi",
600
590
  "__ZThn48_N14MtmdLlmContext29adoptCheckpointsFromCacheFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEy",
601
591
  "__ZThn48_N14TextLlmContextD0Ev",
602
- "__ZN18AsyncWeightsLoaderC1ERK10GGUFShardsR10InitLoaderRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEP13ModelMetaData",
603
592
  "__ZN17backend_selection20parseBackendOverrideERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
604
593
  "__ZN12CacheManager9loadCacheEv",
605
594
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler14enqueueSaveJobERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEb",
@@ -614,7 +603,6 @@
614
603
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler29verifySpeculativeDraftsLockedEv",
615
604
  "__ZNK14TextLlmContext28appendCheckpointsToCacheFileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
616
605
  "__ZN12CacheManagerC1EP10LlmContextNSt3__18functionIFvbEEE",
617
- "__ZNK18AsyncWeightsLoader11isLastShardERKNSt3__14__fs10filesystem4pathE",
618
606
  "__ZN30qvac_lib_inference_addon_llama11speculative22applySpeculativeConfigERKNS0_17SpeculativeConfigER13common_params",
619
607
  "__ZN14TextLlmContext19appendResidentTokenEi",
620
608
  "__ZN30qvac_lib_inference_addon_llama8batching7Request23isOptAwaitingCheckpointERKNSt3__18optionalIS1_EE",
@@ -638,7 +626,6 @@
638
626
  "__ZN14LlamaFinetuner24validateFinetuningParamsERKN30qvac_lib_inference_addon_llama21LlamaFinetuningParamsE",
639
627
  "__ZN14MtmdLlmContext15checkAntipromptEmi",
640
628
  "__ZN30qvac_lib_inference_addon_llama5utils21SequenceStateSnapshotC2EOS1_",
641
- "__ZN13ModelMetaData28FirstFileFromGgufStreamState7provideER13BorrowablePtrINSt3__115basic_streambufIcNS2_11char_traitsIcEEEEE",
642
629
  "__ZN10LlamaModel20isConcurrentEligibleERKNS_6PromptE",
643
630
  "__ZNK30qvac_lib_inference_addon_llama8batching7Request15isAwaitingMediaEv",
644
631
  "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler15numActiveLockedEv",
@@ -716,18 +703,18 @@
716
703
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler23cancelKeyDeferredLockedEv",
717
704
  "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler13hasWorkLockedEv",
718
705
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler18notifyDoneNoexceptEj",
706
+ "__ZN30qvac_lib_inference_addon_llama5utils14isHarmonyModelEPK11llama_model",
719
707
  "__ZN10LlamaModel10resetStateEb",
720
- "__ZN14TextLlmContext24snapshotPreRequestCursorEv",
721
708
  "__ZN10LlamaModel22processConcurrentBatchERKNSt3__16vectorINS_6PromptENS0_9allocatorIS2_EEEEy",
722
- "__ZN14MtmdLlmContext9loadMediaERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
709
+ "__ZN14TextLlmContext24snapshotPreRequestCursorEv",
723
710
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler17prefillCompleteFnEv",
724
- "__ZN14TextLlmContext19generateSpeculativeERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEERj",
711
+ "__ZN14MtmdLlmContext9loadMediaERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
725
712
  "__ZN14MtmdLlmContext14preparePrefillERKNSt3__16vectorI15common_chat_msgNS0_9allocatorIS2_EEEERKNS1_I16common_chat_toolNS3_IS8_EEEERKNS1_INS1_IhNS3_IhEEEENS3_ISE_EEEERKNS1_I12PlannedMediaNS3_ISJ_EEEEbb",
726
713
  "__ZNK30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler24teardownPendingForLockedEj",
714
+ "__ZN14TextLlmContext19generateSpeculativeERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEERj",
727
715
  "__ZNK14TextLlmContext9saveCacheERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE",
728
716
  "__Z33qvacLibInferenceAddonLlamaExportsP8js_env_sP10js_value_s",
729
717
  "__ZN30qvac_lib_inference_addon_llama8batching24ContinuousBatchScheduler25ensureWorkerStartedLockedEv",
730
- "__ZN30qvac_lib_inference_addon_llama5utils14isHarmonyModelEPK11llama_model",
731
718
  "__ZN14MtmdLlmContext13onSequenceEndERKNSt3__18functionIFvRKNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEEE"
732
719
  ],
733
720
  "weak": [
@@ -764,7 +751,6 @@
764
751
  "__ZN28qvac_lib_inference_addon_cpp2js11JsAsyncTask13onEnvTeardownImEEvP22js_deferred_teardown_sPv",
765
752
  "__ZN28qvac_lib_inference_addon_cpp6logger8JsLogger13onEnvTeardownEPv",
766
753
  "__ZN28qvac_lib_inference_addon_cpp11JsInterface9setLoggerEP8js_env_sP18js_callback_info_s",
767
- "__ZN28qvac_lib_inference_addon_cpp11JsInterface11loadWeightsEP8js_env_sP18js_callback_info_s",
768
754
  "__ZN28qvac_lib_inference_addon_cpp16OutputCallBackJs13onEnvTeardownEPv",
769
755
  "__ZN28qvac_lib_inference_addon_cpp16OutputCallBackJs16jsOutputCallbackEP10uv_async_s"
770
756
  ]