@mlx-node/lm 0.0.7 → 0.0.8
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 +11 -11
- package/dist/chat-session.d.ts +340 -95
- package/dist/chat-session.d.ts.map +1 -1
- package/dist/chat-session.js +704 -157
- package/dist/index.d.ts +12 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -7
- package/dist/interfaces.d.ts +2 -17
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/models/lfm2-configs.d.ts.map +1 -1
- package/dist/models/lfm2-configs.js +59 -0
- package/dist/models/model-loader.d.ts +173 -4
- package/dist/models/model-loader.d.ts.map +1 -1
- package/dist/models/model-loader.js +226 -49
- package/dist/models/paged-config-override.d.ts +60 -0
- package/dist/models/paged-config-override.d.ts.map +1 -0
- package/dist/models/paged-config-override.js +254 -0
- package/dist/models/qwen3_5-configs.d.ts.map +1 -1
- package/dist/models/qwen3_5-configs.js +5 -0
- package/dist/stream.d.ts +181 -104
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +160 -227
- package/package.json +3 -3
package/dist/stream.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Gemma4Model as Gemma4ModelNative, Lfm2Model as Lfm2ModelNative, Qwen3Model as Qwen3ModelNative, Qwen35Model as Qwen35ModelNative, Qwen35MoeModel as Qwen35MoeModelNative } from '@mlx-node/core';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ChatStreamChunk, ChatStreamHandle, PerformanceMetrics, ToolCallResult } from '@mlx-node/core';
|
|
3
|
+
import type { SessionCapableModel } from './chat-session.js';
|
|
3
4
|
export interface ChatStreamDelta {
|
|
4
5
|
text: string;
|
|
5
6
|
done: false;
|
|
@@ -15,6 +16,29 @@ export interface ChatStreamFinal {
|
|
|
15
16
|
promptTokens: number;
|
|
16
17
|
reasoningTokens: number;
|
|
17
18
|
rawText: string;
|
|
19
|
+
/**
|
|
20
|
+
* Number of prompt tokens served from the reused KV-cache prefix on
|
|
21
|
+
* this turn. Mirrors the `cachedTokens` field on the non-streaming
|
|
22
|
+
* `ChatResult` so session-aware streaming consumers can observe
|
|
23
|
+
* prefix-cache reuse without round-tripping to the non-streaming
|
|
24
|
+
* path.
|
|
25
|
+
*
|
|
26
|
+
* The native `ChatStreamChunk` surfaces `cachedTokens` on the
|
|
27
|
+
* terminal (`done == true`) chunk for every streaming entry point
|
|
28
|
+
* (Qwen3, Qwen3.5 Dense / MoE, LFM2, Gemma4, QianfanOCR) — start-path
|
|
29
|
+
* chunks carry the matched prefix length from
|
|
30
|
+
* `verify_cache_prefix_direct`, delta-path chunks carry the reused
|
|
31
|
+
* prior-history length. Non-terminal deltas carry `None` /
|
|
32
|
+
* `undefined` (only the terminal chunk is authoritative).
|
|
33
|
+
*
|
|
34
|
+
* This field remains OPTIONAL because the bridge-level mock tests
|
|
35
|
+
* (and any future in-process driver that constructs its own
|
|
36
|
+
* `ChatStreamChunk`) may legitimately omit it. Consumers SHOULD
|
|
37
|
+
* treat `undefined` distinctly from `0` (e.g. skip emitting
|
|
38
|
+
* `X-Cached-Tokens` rather than reporting `0`); a numeric value is
|
|
39
|
+
* always authoritative.
|
|
40
|
+
*/
|
|
41
|
+
cachedTokens?: number;
|
|
18
42
|
performance?: PerformanceMetrics;
|
|
19
43
|
}
|
|
20
44
|
export type ChatStreamEvent = ChatStreamDelta | ChatStreamFinal;
|
|
@@ -57,128 +81,181 @@ export type ChatStreamEvent = ChatStreamDelta | ChatStreamFinal;
|
|
|
57
81
|
*/
|
|
58
82
|
export declare function _runChatStream(startCall: (callback: (err: Error | null, chunk: ChatStreamChunk) => void) => Promise<ChatStreamHandle>, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
59
83
|
/**
|
|
60
|
-
*
|
|
84
|
+
* The three callback-based session-streaming methods every native chat
|
|
85
|
+
* class carries on its prototype (and, structurally, on its instances).
|
|
86
|
+
* Used both as the native `prototype` shape and as the constructed
|
|
87
|
+
* instance type so `InstanceType<NativeStreamingCtor>` resolves to the
|
|
88
|
+
* full native instance surface (`generate`, `saveModel`,
|
|
89
|
+
* `numParameters`, `hasMtpWeights`, …) — see {@link NativeStreamingCtor}.
|
|
61
90
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* which adapt the callback-based native methods to
|
|
65
|
-
* `AsyncGenerator<ChatStreamEvent>` so the wrapper structurally satisfies
|
|
66
|
-
* `SessionCapableModel` and can be passed to `ChatSession<Qwen35Model>`.
|
|
91
|
+
* @internal Native callback streaming surface consumed by
|
|
92
|
+
* {@link makeStreamingModel}.
|
|
67
93
|
*/
|
|
68
|
-
export
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
94
|
+
export interface NativeStreamingInstance {
|
|
95
|
+
chatStreamSessionStart: (...args: never[]) => Promise<ChatStreamHandle>;
|
|
96
|
+
chatStreamSessionContinue: (...args: never[]) => Promise<ChatStreamHandle>;
|
|
97
|
+
chatStreamSessionContinueTool: (...args: never[]) => Promise<ChatStreamHandle>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Minimal structural shape of a native chat model constructor that the
|
|
101
|
+
* factory needs: a real `new (...)` signature (so `InstanceType<C>`
|
|
102
|
+
* resolves to the native instance surface and the factory return type
|
|
103
|
+
* can preserve `generate`/`saveModel`/`numParameters`/… on the public
|
|
104
|
+
* subclass), a `static load(path)`, and the three callback-based
|
|
105
|
+
* session-streaming methods on its prototype. The native NAPI classes
|
|
106
|
+
* (`Qwen35ModelNative` etc.) all satisfy this — the concrete generic
|
|
107
|
+
* `C` passed at each call site carries the full per-family instance
|
|
108
|
+
* type, which `InstanceType<C>` recovers.
|
|
109
|
+
*/
|
|
110
|
+
interface NativeStreamingCtor {
|
|
111
|
+
new (...args: never[]): NativeStreamingInstance;
|
|
112
|
+
load(modelPath: string): Promise<object>;
|
|
113
|
+
prototype: NativeStreamingInstance;
|
|
114
|
+
}
|
|
115
|
+
/** Tuning knobs for {@link makeStreamingModel}. */
|
|
116
|
+
interface StreamingModelOptions {
|
|
85
117
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* `chatStreamSessionStart`. Stops on `<|im_end|>`.
|
|
92
|
-
*
|
|
93
|
-
* `images` is the native opt-in guard parameter — callers that
|
|
94
|
-
* attach a new image set must restart the session via
|
|
95
|
-
* `chatStreamSessionStart` with the full history. The high-level
|
|
96
|
-
* `ChatSession` wrapper handles that routing; callers that drive
|
|
97
|
-
* the wrapper directly should pass `null` for text-only continues.
|
|
118
|
+
* When `true`, `static load` records the on-disk model path so the
|
|
119
|
+
* generated subclass can serve `applyChatTemplate` from a lazily
|
|
120
|
+
* constructed tokenizer (see {@link applyChatTemplateFromModelPath}).
|
|
121
|
+
* When `false` (QianfanOCR) the path is not recorded and
|
|
122
|
+
* `applyChatTemplate` is omitted.
|
|
98
123
|
*/
|
|
99
|
-
|
|
124
|
+
recordModelPath: boolean;
|
|
100
125
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* `chatStreamSessionStart`.
|
|
126
|
+
* Whether to attach an `applyChatTemplate` method. Defaults to
|
|
127
|
+
* `recordModelPath` because the method can only work when a path was
|
|
128
|
+
* recorded. Qwen3 (first-gen) records its path but keeps its native
|
|
129
|
+
* tokenizer-backed implementation; pass `applyTemplate: false` to suppress
|
|
130
|
+
* only the factory's path-backed replacement.
|
|
107
131
|
*/
|
|
108
|
-
|
|
132
|
+
applyTemplate?: boolean;
|
|
109
133
|
}
|
|
110
134
|
/**
|
|
111
|
-
*
|
|
135
|
+
* Shared base type produced by the factory: a `SessionCapableModel`
|
|
136
|
+
* whose static surface still exposes `load`. Concrete families extend
|
|
137
|
+
* the returned class with an empty body so they inherit everything and
|
|
138
|
+
* pick up the correct `.name` (and working `instanceof`) for free.
|
|
139
|
+
*/
|
|
140
|
+
export type StreamingModel = SessionCapableModel;
|
|
141
|
+
/**
|
|
142
|
+
* The effective `applyTemplate` flag resolved from the options literal:
|
|
143
|
+
* an explicit `applyTemplate` wins, otherwise it defaults to `recordModelPath`
|
|
144
|
+
* — mirroring the runtime `opts.applyTemplate ?? recordPath`. Requires the
|
|
145
|
+
* options to be inferred as a literal (the `const` type parameter below), so
|
|
146
|
+
* `{ recordModelPath: true }` yields `true`, not `boolean`.
|
|
147
|
+
*/
|
|
148
|
+
type ResolvedApplyTemplate<O extends StreamingModelOptions> = O extends {
|
|
149
|
+
applyTemplate: boolean;
|
|
150
|
+
} ? O['applyTemplate'] : O['recordModelPath'];
|
|
151
|
+
/** @internal Method names whose callback ABI is replaced by the generator wrapper. */
|
|
152
|
+
export type NativeStreamingMethod = keyof NativeStreamingInstance;
|
|
153
|
+
type StreamingReplacementMethod<O extends StreamingModelOptions> = NativeStreamingMethod | (ResolvedApplyTemplate<O> extends true ? 'applyChatTemplate' : never);
|
|
154
|
+
/**
|
|
155
|
+
* Instance surface of a generated streaming wrapper. Only methods replaced at
|
|
156
|
+
* runtime are removed from the native instance: the three callback streaming
|
|
157
|
+
* methods, plus `applyChatTemplate` when the wrapper installs its path-backed
|
|
158
|
+
* implementation. Intersecting the remaining native surface with
|
|
159
|
+
* `SessionCapableModel` preserves required native capabilities such as
|
|
160
|
+
* `hasBlockPagedCache()` while exposing the generator streaming signatures.
|
|
161
|
+
*
|
|
162
|
+
* When `applyTemplate` resolves false, an existing native implementation stays
|
|
163
|
+
* intact (notably Qwen3's required tokenizer-backed method), while models that
|
|
164
|
+
* never had one (QianfanOCR) retain the optional structural contract.
|
|
112
165
|
*
|
|
113
|
-
*
|
|
114
|
-
* adapt the callback-based native methods to
|
|
115
|
-
* `AsyncGenerator<ChatStreamEvent>` so the wrapper structurally
|
|
116
|
-
* satisfies `SessionCapableModel`.
|
|
166
|
+
* @internal Concrete instance type returned by {@link makeStreamingModel}.
|
|
117
167
|
*/
|
|
118
|
-
export
|
|
119
|
-
static load(modelPath: string): Promise<Qwen35MoeModel>;
|
|
120
|
-
/** Streaming variant of {@link Qwen35MoeModel#chatSessionStart}. */
|
|
121
|
-
chatStreamSessionStart(messages: ChatMessage[], config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
122
|
-
/** Streaming variant of {@link Qwen35MoeModel#chatSessionContinue}. */
|
|
123
|
-
chatStreamSessionContinue(userMessage: string, images: Uint8Array[] | null, config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
124
|
-
/** Streaming variant of {@link Qwen35MoeModel#chatSessionContinueTool}. */
|
|
125
|
-
chatStreamSessionContinueTool(toolCallId: string, content: string, config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
126
|
-
}
|
|
168
|
+
export type StreamingInstance<C extends NativeStreamingCtor, O extends StreamingModelOptions> = Omit<InstanceType<C>, StreamingReplacementMethod<O>> & SessionCapableModel & (ResolvedApplyTemplate<O> extends true ? Required<Pick<SessionCapableModel, 'applyChatTemplate'>> : object);
|
|
127
169
|
/**
|
|
128
|
-
*
|
|
170
|
+
* Build the streaming-model subclass for a native chat model class.
|
|
171
|
+
*
|
|
172
|
+
* The returned class:
|
|
173
|
+
* - captures the three native callback-based session-streaming methods
|
|
174
|
+
* from `NativeClass.prototype`,
|
|
175
|
+
* - overrides them as `async *` generators delegating to
|
|
176
|
+
* {@link _runChatStream} with identical argument plumbing (including
|
|
177
|
+
* `config ?? null`, `images`, `isError ?? null`, and the `signal`),
|
|
178
|
+
* - overrides `static load` to re-prototype the native instance onto
|
|
179
|
+
* the concrete subclass (`this`) and optionally record the path,
|
|
180
|
+
* - installs a path-backed `applyChatTemplate` when `opts.applyTemplate`
|
|
181
|
+
* (defaulting to `opts.recordModelPath`).
|
|
129
182
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* `AsyncGenerator<ChatStreamEvent>` so the wrapper structurally
|
|
133
|
-
* satisfies `SessionCapableModel`. LFM2 is text-only; the native
|
|
134
|
-
* `images` guard rejects non-empty image sets with an
|
|
135
|
-
* `IMAGE_CHANGE_REQUIRES_SESSION_RESTART:` prefix.
|
|
183
|
+
* @internal Exported so the VLM wrapper (`@mlx-node/vlm`) builds its
|
|
184
|
+
* `QianfanOCRModel` from the same factory. Not part of the public API.
|
|
136
185
|
*/
|
|
137
|
-
export declare
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
186
|
+
export declare function makeStreamingModel<C extends NativeStreamingCtor, const O extends StreamingModelOptions>(NativeClass: C, opts: O): {
|
|
187
|
+
new (...args: ConstructorParameters<C>): StreamingInstance<C, O>;
|
|
188
|
+
load(...args: Parameters<C['load']>): Promise<StreamingInstance<C, O>>;
|
|
189
|
+
};
|
|
190
|
+
declare const Qwen35Model_base: {
|
|
191
|
+
new (): StreamingInstance<typeof Qwen35ModelNative, {
|
|
192
|
+
readonly recordModelPath: true;
|
|
193
|
+
}>;
|
|
194
|
+
load(path: string): Promise<StreamingInstance<typeof Qwen35ModelNative, {
|
|
195
|
+
readonly recordModelPath: true;
|
|
196
|
+
}>>;
|
|
197
|
+
};
|
|
146
198
|
/**
|
|
147
|
-
*
|
|
199
|
+
* Qwen3.5 dense model with AsyncGenerator-based session streaming.
|
|
148
200
|
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* `
|
|
152
|
-
*
|
|
153
|
-
* current refactor scope; the native `images` guard rejects non-empty
|
|
154
|
-
* image sets with an `IMAGE_CHANGE_REQUIRES_SESSION_RESTART:` prefix.
|
|
201
|
+
* The empty `extends` inherits the factory's streaming overrides,
|
|
202
|
+
* `static load`, and `applyChatTemplate`, and supplies the concrete
|
|
203
|
+
* `.name === 'Qwen35Model'` and a working `instanceof`. Records its
|
|
204
|
+
* model path so `applyChatTemplate` can serve a lazily built tokenizer.
|
|
155
205
|
*/
|
|
156
|
-
export declare class
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
206
|
+
export declare class Qwen35Model extends Qwen35Model_base {
|
|
207
|
+
}
|
|
208
|
+
declare const Qwen35MoeModel_base: {
|
|
209
|
+
new (): StreamingInstance<typeof Qwen35MoeModelNative, {
|
|
210
|
+
readonly recordModelPath: true;
|
|
211
|
+
}>;
|
|
212
|
+
load(path: string): Promise<StreamingInstance<typeof Qwen35MoeModelNative, {
|
|
213
|
+
readonly recordModelPath: true;
|
|
214
|
+
}>>;
|
|
215
|
+
};
|
|
216
|
+
/** Qwen3.5 MoE model — see {@link Qwen35Model} for the wrapper shape. */
|
|
217
|
+
export declare class Qwen35MoeModel extends Qwen35MoeModel_base {
|
|
218
|
+
}
|
|
219
|
+
declare const Lfm2Model_base: {
|
|
220
|
+
new (): StreamingInstance<typeof Lfm2ModelNative, {
|
|
221
|
+
readonly recordModelPath: true;
|
|
222
|
+
}>;
|
|
223
|
+
load(modelPath: string): Promise<StreamingInstance<typeof Lfm2ModelNative, {
|
|
224
|
+
readonly recordModelPath: true;
|
|
225
|
+
}>>;
|
|
226
|
+
};
|
|
227
|
+
/** LFM2 model (text-only) — see {@link Qwen35Model} for the wrapper shape. */
|
|
228
|
+
export declare class Lfm2Model extends Lfm2Model_base {
|
|
229
|
+
}
|
|
230
|
+
declare const Gemma4Model_base: {
|
|
231
|
+
new (config: import("@mlx-node/core").Gemma4Config): StreamingInstance<typeof Gemma4ModelNative, {
|
|
232
|
+
readonly recordModelPath: true;
|
|
233
|
+
}>;
|
|
234
|
+
load(modelPath: string, options?: import("@mlx-node/core").Gemma4LoadOptions | null | undefined): Promise<StreamingInstance<typeof Gemma4ModelNative, {
|
|
235
|
+
readonly recordModelPath: true;
|
|
236
|
+
}>>;
|
|
237
|
+
};
|
|
238
|
+
/** Gemma4 model (text-only) — see {@link Qwen35Model} for the wrapper shape. */
|
|
239
|
+
export declare class Gemma4Model extends Gemma4Model_base {
|
|
164
240
|
}
|
|
241
|
+
declare const Qwen3Model_base: {
|
|
242
|
+
new (): StreamingInstance<typeof Qwen3ModelNative, {
|
|
243
|
+
readonly recordModelPath: true;
|
|
244
|
+
readonly applyTemplate: false;
|
|
245
|
+
}>;
|
|
246
|
+
load(modelPath: string): Promise<StreamingInstance<typeof Qwen3ModelNative, {
|
|
247
|
+
readonly recordModelPath: true;
|
|
248
|
+
readonly applyTemplate: false;
|
|
249
|
+
}>>;
|
|
250
|
+
};
|
|
165
251
|
/**
|
|
166
|
-
* Qwen3 (
|
|
252
|
+
* Qwen3 (first-gen, text-only) model.
|
|
167
253
|
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* `
|
|
171
|
-
* satisfies `SessionCapableModel`. Qwen3 legacy is text-only; the
|
|
172
|
-
* native `images` guard rejects non-empty image sets with an
|
|
173
|
-
* `IMAGE_CHANGE_REQUIRES_SESSION_RESTART:` prefix.
|
|
254
|
+
* Records its model path (so prototype-set + path-recording match the
|
|
255
|
+
* other families) but does not install the factory's path-backed
|
|
256
|
+
* `applyChatTemplate`; it retains the native tokenizer-backed method.
|
|
174
257
|
*/
|
|
175
|
-
export declare class Qwen3Model extends
|
|
176
|
-
static load(modelPath: string): Promise<Qwen3Model>;
|
|
177
|
-
/** Streaming variant of {@link Qwen3Model#chatSessionStart}. */
|
|
178
|
-
chatStreamSessionStart(messages: ChatMessage[], config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
179
|
-
/** Streaming variant of {@link Qwen3Model#chatSessionContinue}. */
|
|
180
|
-
chatStreamSessionContinue(userMessage: string, images: Uint8Array[] | null, config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
181
|
-
/** Streaming variant of {@link Qwen3Model#chatSessionContinueTool}. */
|
|
182
|
-
chatStreamSessionContinueTool(toolCallId: string, content: string, config?: ChatConfig | null, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
|
|
258
|
+
export declare class Qwen3Model extends Qwen3Model_base {
|
|
183
259
|
}
|
|
260
|
+
export {};
|
|
184
261
|
//# sourceMappingURL=stream.d.ts.map
|
package/dist/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|