@litert-lm/core 0.12.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.
Files changed (82) hide show
  1. package/README.md +145 -0
  2. package/dist/cleanup.d.ts +25 -0
  3. package/dist/cleanup.d.ts.map +1 -0
  4. package/dist/cleanup.js +36 -0
  5. package/dist/cleanup.js.map +1 -0
  6. package/dist/conversation.d.ts +43 -0
  7. package/dist/conversation.d.ts.map +1 -0
  8. package/dist/conversation.js +153 -0
  9. package/dist/conversation.js.map +1 -0
  10. package/dist/conversation_config.d.ts +107 -0
  11. package/dist/conversation_config.d.ts.map +1 -0
  12. package/dist/conversation_config.js +17 -0
  13. package/dist/conversation_config.js.map +1 -0
  14. package/dist/engine.d.ts +37 -0
  15. package/dist/engine.d.ts.map +1 -0
  16. package/dist/engine.js +200 -0
  17. package/dist/engine.js.map +1 -0
  18. package/dist/engine_settings.d.ts +56 -0
  19. package/dist/engine_settings.d.ts.map +1 -0
  20. package/dist/engine_settings.js +110 -0
  21. package/dist/engine_settings.js.map +1 -0
  22. package/dist/global_litertlm.d.ts +66 -0
  23. package/dist/global_litertlm.d.ts.map +1 -0
  24. package/dist/global_litertlm.js +85 -0
  25. package/dist/global_litertlm.js.map +1 -0
  26. package/dist/index.d.ts +27 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +27 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/litertlm_web.d.ts +32 -0
  31. package/dist/litertlm_web.d.ts.map +1 -0
  32. package/dist/litertlm_web.js +75 -0
  33. package/dist/litertlm_web.js.map +1 -0
  34. package/dist/load.d.ts +28 -0
  35. package/dist/load.d.ts.map +1 -0
  36. package/dist/load.js +43 -0
  37. package/dist/load.js.map +1 -0
  38. package/dist/load_litertlm.d.ts +58 -0
  39. package/dist/load_litertlm.d.ts.map +1 -0
  40. package/dist/load_litertlm.js +75 -0
  41. package/dist/load_litertlm.js.map +1 -0
  42. package/dist/mutex.d.ts +45 -0
  43. package/dist/mutex.d.ts.map +1 -0
  44. package/dist/mutex.js +62 -0
  45. package/dist/mutex.js.map +1 -0
  46. package/dist/readable_stream_data_stream_wrapper.d.ts +44 -0
  47. package/dist/readable_stream_data_stream_wrapper.d.ts.map +1 -0
  48. package/dist/readable_stream_data_stream_wrapper.js +315 -0
  49. package/dist/readable_stream_data_stream_wrapper.js.map +1 -0
  50. package/dist/session.d.ts +46 -0
  51. package/dist/session.d.ts.map +1 -0
  52. package/dist/session.js +88 -0
  53. package/dist/session.js.map +1 -0
  54. package/dist/session_config.d.ts +55 -0
  55. package/dist/session_config.d.ts.map +1 -0
  56. package/dist/session_config.js +109 -0
  57. package/dist/session_config.js.map +1 -0
  58. package/dist/types.d.ts +42 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +17 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/url_path_utils.d.ts +28 -0
  63. package/dist/url_path_utils.d.ts.map +1 -0
  64. package/dist/url_path_utils.js +34 -0
  65. package/dist/url_path_utils.js.map +1 -0
  66. package/dist/wasm_binding_types.d.ts +365 -0
  67. package/dist/wasm_binding_types.d.ts.map +1 -0
  68. package/dist/wasm_binding_types.js +39 -0
  69. package/dist/wasm_binding_types.js.map +1 -0
  70. package/dist/wasm_feature_detect.d.ts +42 -0
  71. package/dist/wasm_feature_detect.d.ts.map +1 -0
  72. package/dist/wasm_feature_detect.js +117 -0
  73. package/dist/wasm_feature_detect.js.map +1 -0
  74. package/dist/wasm_utils.d.ts +30 -0
  75. package/dist/wasm_utils.d.ts.map +1 -0
  76. package/dist/wasm_utils.js +41 -0
  77. package/dist/wasm_utils.js.map +1 -0
  78. package/package.json +46 -0
  79. package/wasm/litertlm_wasm_compat_internal.js +8400 -0
  80. package/wasm/litertlm_wasm_compat_internal.wasm +0 -0
  81. package/wasm/litertlm_wasm_internal.js +8389 -0
  82. package/wasm/litertlm_wasm_internal.wasm +0 -0
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ class Slice {
17
+ size;
18
+ data;
19
+ fullyDiscarded = false;
20
+ discardedRegions = [];
21
+ constructor(size) {
22
+ this.size = size;
23
+ }
24
+ discard(start, end) {
25
+ if (this.fullyDiscarded)
26
+ return;
27
+ if (this.discardedRegions.length === 0) {
28
+ // No discarded regions yet, so add this one.
29
+ this.discardedRegions.push([start, end]);
30
+ this.checkFullyDiscarded();
31
+ return;
32
+ }
33
+ this.discardedRegions.push([start, end]);
34
+ this.discardedRegions.sort((a, b) => a[0] - b[0]);
35
+ // Merge overlapping regions.
36
+ const mergedRegions = [];
37
+ for (const region of this.discardedRegions) {
38
+ const lastRegion = mergedRegions[mergedRegions.length - 1];
39
+ if (!lastRegion || lastRegion[1] < region[0]) {
40
+ mergedRegions.push(region);
41
+ }
42
+ else {
43
+ lastRegion[1] = Math.max(lastRegion[1], region[1]);
44
+ }
45
+ }
46
+ this.discardedRegions = mergedRegions;
47
+ this.checkFullyDiscarded();
48
+ }
49
+ getDiscardedRegions(start = 0, end = this.size) {
50
+ const result = [];
51
+ for (const [rStart, rEnd] of this.discardedRegions) {
52
+ // If the region starts after the end of the requested range,
53
+ // no further regions will overlap.
54
+ if (rStart >= end) {
55
+ break;
56
+ }
57
+ // If the region ends before or at the start of the requested range, skip
58
+ // it.
59
+ if (rEnd <= start) {
60
+ continue;
61
+ }
62
+ result.push([rStart, rEnd]);
63
+ }
64
+ return result;
65
+ }
66
+ checkFullyDiscarded() {
67
+ if (this.discardedRegions.length === 1 &&
68
+ this.discardedRegions[0][0] === 0 &&
69
+ this.discardedRegions[0][1] === this.size) {
70
+ this.fullyDiscarded = true;
71
+ this.data = undefined;
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Wraps a ReadableStream for use in LiteRT LM C++ streamed model loading.
77
+ */
78
+ export class ReadableStreamDataStreamWrapper {
79
+ stream;
80
+ getWasmHeap;
81
+ bytesPerSlice;
82
+ slices = [];
83
+ streamDone = false;
84
+ globalPosition = 0;
85
+ reader;
86
+ leftoverData;
87
+ isReading = false;
88
+ constructor(stream,
89
+ // Heap is detached whenever it's resized, so we get it each time.
90
+ getWasmHeap, bytesPerSlice = 10_000_000) {
91
+ this.stream = stream;
92
+ this.getWasmHeap = getWasmHeap;
93
+ this.bytesPerSlice = bytesPerSlice;
94
+ try {
95
+ this.reader = { byobReader: this.stream.getReader({ mode: 'byob' }) };
96
+ }
97
+ catch (e) {
98
+ this.reader = { defaultReader: this.stream.getReader() };
99
+ }
100
+ }
101
+ *getViews(start, end) {
102
+ if (start >= end) {
103
+ return;
104
+ }
105
+ // A scratch buffer for creating new slices if needed.
106
+ // If the slice is fully discarded, we'll reuse this buffer instead of
107
+ // creating a new one.
108
+ let scratchBuffer;
109
+ let previousSlice;
110
+ let position = start;
111
+ while (position < end) {
112
+ const sliceIndex = Math.floor(position / this.bytesPerSlice);
113
+ const slicePosition = position % this.bytesPerSlice;
114
+ const sliceStartGlobalPosition = sliceIndex * this.bytesPerSlice;
115
+ let slice = this.slices[sliceIndex];
116
+ if (!slice) {
117
+ if (!previousSlice || !previousSlice.fullyDiscarded) {
118
+ // Make a new scratch buffer since the old one was assigned to the
119
+ // previous slice (or there is no previous slice).
120
+ scratchBuffer = new Uint8Array(this.bytesPerSlice);
121
+ }
122
+ slice = new Slice(this.bytesPerSlice);
123
+ slice.data = scratchBuffer;
124
+ this.slices[sliceIndex] = slice;
125
+ }
126
+ const viewEnd = Math.min(this.bytesPerSlice, end - sliceStartGlobalPosition);
127
+ const discardView = () => {
128
+ slice.discard(slicePosition, viewEnd);
129
+ };
130
+ const viewLength = viewEnd - slicePosition;
131
+ const setView = (view) => {
132
+ // Necessary when a BYOB reader invalidates the buffer.
133
+ slice.data = new Uint8Array(view.buffer, 0, view.buffer.byteLength);
134
+ scratchBuffer = slice.data;
135
+ };
136
+ const checkReadable = () => {
137
+ const discardedRegions = slice.getDiscardedRegions(slicePosition, viewEnd);
138
+ if (discardedRegions.length > 0) {
139
+ const globalDiscardedRegions = discardedRegions.map(([start, end]) => `[${start + sliceStartGlobalPosition}, ${end + sliceStartGlobalPosition}]`);
140
+ throw new Error(`Slice ${sliceIndex} for data at ${position} overlaps discarded regions: [${globalDiscardedRegions.join(', ')}]`);
141
+ }
142
+ if (!slice.data) {
143
+ throw new Error(`No ArrayBuffer for slice ${sliceIndex} at position ${position}`);
144
+ }
145
+ };
146
+ const getView = () => {
147
+ checkReadable();
148
+ return new Uint8Array(slice.data.buffer, slice.data.byteOffset + slicePosition, slice.data.byteOffset + viewLength);
149
+ };
150
+ yield {
151
+ getView,
152
+ discardView,
153
+ setView,
154
+ checkReadable,
155
+ };
156
+ previousSlice = slice;
157
+ position += viewLength;
158
+ }
159
+ }
160
+ async readInternal(destAddress, offset, count, discard) {
161
+ if (this.isReading) {
162
+ throw new Error('Concurrent reads are not supported');
163
+ }
164
+ this.isReading = true;
165
+ try {
166
+ // 1. Read and cache all unfetched data before the requested region.
167
+ for (const { getView, setView, checkReadable } of this.getViews(this.globalPosition, offset)) {
168
+ checkReadable();
169
+ // We do not discard or change destAddress here as this is before the
170
+ // requested region.
171
+ const newView = await this.fillBufferFromStream(getView());
172
+ setView(newView);
173
+ if (newView.length === 0) {
174
+ break; // Hit EOF early
175
+ }
176
+ }
177
+ // 2. Copy cached data from existing slices. This may be a no-op if none
178
+ // of the requested region is cached.
179
+ const endOfCachedRead = Math.min(this.globalPosition, offset + count);
180
+ for (const { getView, discardView } of this.getViews(offset, endOfCachedRead)) {
181
+ const view = getView();
182
+ this.getWasmHeap().set(view, destAddress);
183
+ if (discard)
184
+ discardView();
185
+ destAddress += view.length;
186
+ }
187
+ // 3. Read and optionally cache remaining unfetched data and copy it to
188
+ // the destination.
189
+ const startOfUncachedRead = Math.max(endOfCachedRead, offset);
190
+ for (const { getView, setView, discardView } of this.getViews(startOfUncachedRead, offset + count)) {
191
+ // If we are already at EOF (e.g. from step 1 or a previous iteration
192
+ // here), stop reading
193
+ if (this.streamDone && this.globalPosition <= startOfUncachedRead)
194
+ break;
195
+ const newView = await this.fillBufferFromStream(getView());
196
+ setView(newView);
197
+ this.getWasmHeap().set(newView, destAddress);
198
+ if (discard)
199
+ discardView();
200
+ destAddress += newView.length;
201
+ }
202
+ }
203
+ finally {
204
+ this.isReading = false;
205
+ }
206
+ }
207
+ async fillBufferFromStream(buffer) {
208
+ // Must read byteLength now as buffer will be invalidated.
209
+ const byteLength = buffer.byteLength;
210
+ if (byteLength === 0) {
211
+ return buffer;
212
+ }
213
+ const byteOffset = buffer.byteOffset;
214
+ let bytesRead = 0;
215
+ let arrayBuffer = buffer.buffer;
216
+ while (bytesRead < byteLength) {
217
+ if (this.streamDone &&
218
+ (!this.leftoverData || this.leftoverData.length === 0)) {
219
+ throw new Error(`Read from stream returned early EOF at position ${this.globalPosition}. Expected ${byteLength - bytesRead} more bytes.`);
220
+ }
221
+ if (this.reader.byobReader) {
222
+ // Create a view of the remaining region to be written to. We have to
223
+ // do this each time since the BYOB reader will detach the view and
224
+ // its underlying ArrayBuffer.
225
+ const view = new Uint8Array(arrayBuffer, byteOffset + bytesRead, byteLength - bytesRead);
226
+ const result = await this.reader.byobReader.read(view);
227
+ if (result.done) {
228
+ this.streamDone = true;
229
+ }
230
+ if (!result.value) {
231
+ throw new Error('Read from stream returned null value');
232
+ }
233
+ this.globalPosition += result.value.byteLength;
234
+ bytesRead += result.value.byteLength;
235
+ arrayBuffer = result.value.buffer;
236
+ }
237
+ else {
238
+ let chunk;
239
+ if (this.leftoverData && this.leftoverData.length > 0) {
240
+ chunk = this.leftoverData;
241
+ this.leftoverData = undefined;
242
+ }
243
+ else {
244
+ const result = await this.reader.defaultReader.read();
245
+ if (result.done) {
246
+ this.streamDone = true;
247
+ if (!result.value) {
248
+ continue;
249
+ }
250
+ }
251
+ if (!result.value) {
252
+ throw new Error('Read from stream returned null value');
253
+ }
254
+ chunk = result.value;
255
+ }
256
+ const bytesNeeded = byteLength - bytesRead;
257
+ const bytesToCopy = Math.min(chunk.length, bytesNeeded);
258
+ const destView = new Uint8Array(arrayBuffer, byteOffset + bytesRead, bytesToCopy);
259
+ destView.set(chunk.subarray(0, bytesToCopy));
260
+ if (chunk.length > bytesToCopy) {
261
+ this.leftoverData = chunk.subarray(bytesToCopy);
262
+ }
263
+ this.globalPosition += bytesToCopy;
264
+ bytesRead += bytesToCopy;
265
+ }
266
+ }
267
+ const result = new Uint8Array(arrayBuffer, byteOffset, bytesRead);
268
+ if (result.length !== byteLength) {
269
+ throw new Error(`Read from stream returned ${result.length} bytes, expected ${byteLength}`);
270
+ }
271
+ return result;
272
+ }
273
+ doDiscard(offset, count) {
274
+ for (const { discardView } of this.getViews(offset, offset + count)) {
275
+ discardView();
276
+ }
277
+ }
278
+ async readAndDiscard(destAddress, offset, count) {
279
+ try {
280
+ await this.readInternal(destAddress >>> 0, toNumber(offset), toNumber(count), true);
281
+ return {};
282
+ }
283
+ catch (e) {
284
+ return { error: e };
285
+ }
286
+ }
287
+ async readAndPreserve(destAddress, offset, count) {
288
+ try {
289
+ await this.readInternal(destAddress >>> 0, toNumber(offset), toNumber(count), false);
290
+ return {};
291
+ }
292
+ catch (e) {
293
+ return { error: e };
294
+ }
295
+ }
296
+ async discard(offset, count) {
297
+ try {
298
+ this.doDiscard(toNumber(offset), toNumber(count));
299
+ return {};
300
+ }
301
+ catch (e) {
302
+ return { error: e };
303
+ }
304
+ }
305
+ }
306
+ function toNumber(val) {
307
+ if (typeof val === 'number') {
308
+ return val;
309
+ }
310
+ if (val > Number.MAX_SAFE_INTEGER) {
311
+ throw new Error(`BigInt value ${val} too large to be represented as a number`);
312
+ }
313
+ return Number(val);
314
+ }
315
+ //# sourceMappingURL=readable_stream_data_stream_wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readable_stream_data_stream_wrapper.js","sourceRoot":"","sources":["../src/readable_stream_data_stream_wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Mutex } from './mutex';
17
+ import { SessionConfig } from './session_config';
18
+ import { RecursiveRequired } from './types';
19
+ import { Responses as WasmResponses, Session as WasmSession } from './wasm_binding_types';
20
+ /**
21
+ * LiteRT-LM Session
22
+ */
23
+ export declare class Session {
24
+ private readonly session;
25
+ private readonly mutexes;
26
+ readonly config: RecursiveRequired<SessionConfig>;
27
+ private isBusy;
28
+ constructor(session: WasmSession, mutexes: {
29
+ executor: Mutex;
30
+ });
31
+ runPrefill(inputs: string[]): Promise<void>;
32
+ runDecode(): Promise<Responses>;
33
+ /**
34
+ * Sends a signal to cancel any current generation.
35
+ */
36
+ cancel(): void;
37
+ delete(): Promise<void>;
38
+ }
39
+ declare class Responses {
40
+ private readonly responses;
41
+ constructor(responses: WasmResponses);
42
+ getTexts(): string[];
43
+ delete(): void;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAmC,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAC,SAAS,IAAI,aAAa,EAAE,OAAO,IAAI,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAKxF;;GAEG;AACH,qBAAa,OAAO;IAIN,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAe,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH3E,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAS;gBAEM,OAAO,EAAE,WAAW,EAAmB,OAAO,EAAE;QAC3E,QAAQ,EAAE,KAAK,CAAC;KACjB;IAMK,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3C,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAerC;;OAEG;IACH,MAAM;IAIA,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B;AAED,cAAM,SAAS;IACD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,aAAa;IAErD,QAAQ,IAAI,MAAM,EAAE;IAKpB,MAAM;CAGP"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { wasmSessionConfigToSessionConfig } from './session_config';
17
+ import { consumeEmscriptenVectorToArray } from './wasm_utils';
18
+ const BUSY_MESSAGE = 'Session is busy. An operation is already in progress.';
19
+ /**
20
+ * LiteRT-LM Session
21
+ */
22
+ export class Session {
23
+ session;
24
+ mutexes;
25
+ config;
26
+ isBusy = false;
27
+ constructor(session, mutexes) {
28
+ this.session = session;
29
+ this.mutexes = mutexes;
30
+ const wasmSessionConfig = session.getSessionConfig();
31
+ this.config = wasmSessionConfigToSessionConfig(wasmSessionConfig);
32
+ wasmSessionConfig.delete();
33
+ }
34
+ async runPrefill(inputs) {
35
+ if (this.isBusy) {
36
+ throw new Error(BUSY_MESSAGE);
37
+ }
38
+ this.isBusy = true;
39
+ try {
40
+ await this.mutexes.executor.acquireAndRun(async () => {
41
+ await this.session.runPrefill(inputs);
42
+ });
43
+ }
44
+ finally {
45
+ this.isBusy = false;
46
+ }
47
+ }
48
+ async runDecode() {
49
+ if (this.isBusy) {
50
+ throw new Error(BUSY_MESSAGE);
51
+ }
52
+ this.isBusy = true;
53
+ try {
54
+ return await this.mutexes.executor.acquireAndRun(async () => {
55
+ const wasmResponses = await this.session.runDecode();
56
+ return new Responses(wasmResponses);
57
+ });
58
+ }
59
+ finally {
60
+ this.isBusy = false;
61
+ }
62
+ }
63
+ /**
64
+ * Sends a signal to cancel any current generation.
65
+ */
66
+ cancel() {
67
+ this.session.cancelProcess();
68
+ }
69
+ async delete() {
70
+ await this.mutexes.executor.acquireAndRun(() => {
71
+ this.session.delete();
72
+ });
73
+ }
74
+ }
75
+ class Responses {
76
+ responses;
77
+ constructor(responses) {
78
+ this.responses = responses;
79
+ }
80
+ getTexts() {
81
+ const texts = this.responses.getTexts();
82
+ return consumeEmscriptenVectorToArray(texts);
83
+ }
84
+ delete() {
85
+ this.responses.delete();
86
+ }
87
+ }
88
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAgB,gCAAgC,EAAC,MAAM,kBAAkB,CAAC;AAGjF,OAAO,EAAC,8BAA8B,EAAC,MAAM,cAAc,CAAC;AAE5D,MAAM,YAAY,GAAG,uDAAuD,CAAC;AAE7E;;GAEG;AACH,MAAM,OAAO,OAAO;IAIW;IAAuC;IAH3D,MAAM,CAAmC;IAC1C,MAAM,GAAG,KAAK,CAAC;IAEvB,YAA6B,OAAoB,EAAmB,OAEnE;QAF4B,YAAO,GAAP,OAAO,CAAa;QAAmB,YAAO,GAAP,OAAO,CAE1E;QACC,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,gCAAgC,CAAC,iBAAiB,CAAC,CAAC;QAClE,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAgB;QAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gBACnD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gBAC1D,MAAM,aAAa,GAAkB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpE,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE;YAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,SAAS;IACgB;IAA7B,YAA6B,SAAwB;QAAxB,cAAS,GAAT,SAAS,CAAe;IAAG,CAAC;IAEzD,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { RecursiveRequired } from './types';
17
+ import { Backend, SamplerType, SessionConfig as WasmSessionConfig } from './wasm_binding_types';
18
+ export { SamplerType };
19
+ /**
20
+ * Configures how to sample the next token.
21
+ */
22
+ export interface SamplerParameters {
23
+ type?: SamplerType;
24
+ k?: number;
25
+ p?: number;
26
+ temperature?: number;
27
+ seed?: number;
28
+ }
29
+ /**
30
+ * Configures a LiteRT-LM Session.
31
+ */
32
+ export interface SessionConfig {
33
+ audioModalityEnabled?: boolean;
34
+ visionModalityEnabled?: boolean;
35
+ samplerParams?: SamplerParameters;
36
+ stopTokenIds?: number[][];
37
+ startTokenId?: number;
38
+ numOutputCandidates?: number;
39
+ samplerBackend?: Backend;
40
+ applyPromptTemplateInSession?: boolean;
41
+ useExternalSampler?: boolean;
42
+ maxOutputTokens?: number;
43
+ }
44
+ /**
45
+ * Converts a SessionConfig to a WasmSessionConfig.
46
+ */
47
+ export declare function sessionConfigToWasmSessionConfig(sessionConfig: SessionConfig, wasm?: import("./wasm_binding_types").LiteRtLmWasm): WasmSessionConfig;
48
+ /**
49
+ * Converts a WasmSessionConfig to a SessionConfig.
50
+ *
51
+ * All fields will be populated with the WASM object's values, which may be
52
+ * default values if they were not set.
53
+ */
54
+ export declare function wasmSessionConfigToSessionConfig(wasmSessionConfig: WasmSessionConfig): RecursiveRequired<SessionConfig>;
55
+ //# sourceMappingURL=session_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_config.d.ts","sourceRoot":"","sources":["../src/session_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,aAAa,IAAI,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAI9F,OAAO,EAAC,WAAW,EAAC,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC5C,aAAa,EAAE,aAAa,EAC5B,IAAI,8CAAmC,GAAG,iBAAiB,CA6D9D;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC5C,iBAAiB,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAwB1E"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { getGlobalLiteRtLm } from './global_litertlm';
17
+ import { SamplerType } from './wasm_binding_types';
18
+ import { consumeEmscriptenVectorToArray, fillEmscriptenVector } from './wasm_utils';
19
+ // Re-export SamplerType as it's compatible with the TS API.
20
+ export { SamplerType };
21
+ /**
22
+ * Converts a SessionConfig to a WasmSessionConfig.
23
+ */
24
+ export function sessionConfigToWasmSessionConfig(sessionConfig, wasm = getGlobalLiteRtLm().liteRtLmWasm) {
25
+ const wasmSessionConfig = wasm.SessionConfig.createDefault();
26
+ if (sessionConfig.audioModalityEnabled !== undefined) {
27
+ wasmSessionConfig.setAudioModalityEnabled(sessionConfig.audioModalityEnabled);
28
+ }
29
+ if (sessionConfig.visionModalityEnabled !== undefined) {
30
+ wasmSessionConfig.setVisionModalityEnabled(sessionConfig.visionModalityEnabled);
31
+ }
32
+ if (sessionConfig.samplerParams !== undefined) {
33
+ const samplerParams = wasmSessionConfig.getMutableSamplerParams();
34
+ if (sessionConfig.samplerParams.type !== undefined) {
35
+ samplerParams.setType({ value: sessionConfig.samplerParams.type });
36
+ }
37
+ if (sessionConfig.samplerParams.k !== undefined) {
38
+ samplerParams.setK(sessionConfig.samplerParams.k);
39
+ }
40
+ if (sessionConfig.samplerParams.p !== undefined) {
41
+ samplerParams.setP(sessionConfig.samplerParams.p);
42
+ }
43
+ if (sessionConfig.samplerParams.temperature !== undefined) {
44
+ samplerParams.setTemperature(sessionConfig.samplerParams.temperature);
45
+ }
46
+ if (sessionConfig.samplerParams.seed !== undefined) {
47
+ samplerParams.setSeed(sessionConfig.samplerParams.seed);
48
+ }
49
+ }
50
+ if (sessionConfig.startTokenId !== undefined) {
51
+ wasmSessionConfig.setStartTokenId(sessionConfig.startTokenId);
52
+ }
53
+ if (sessionConfig.numOutputCandidates !== undefined) {
54
+ wasmSessionConfig.setNumOutputCandidates(sessionConfig.numOutputCandidates);
55
+ }
56
+ if (sessionConfig.samplerBackend !== undefined) {
57
+ wasmSessionConfig.setSamplerBackend({ value: sessionConfig.samplerBackend });
58
+ }
59
+ if (sessionConfig.applyPromptTemplateInSession !== undefined) {
60
+ wasmSessionConfig.setApplyPromptTemplateInSession(sessionConfig.applyPromptTemplateInSession);
61
+ }
62
+ if (sessionConfig.useExternalSampler !== undefined) {
63
+ wasmSessionConfig.setUseExternalSampler(sessionConfig.useExternalSampler);
64
+ }
65
+ if (sessionConfig.maxOutputTokens !== undefined) {
66
+ wasmSessionConfig.setMaxOutputTokens(sessionConfig.maxOutputTokens);
67
+ }
68
+ if (sessionConfig.stopTokenIds !== undefined) {
69
+ const outerVec = new wasm.VectorVectorInt();
70
+ for (const innerArr of sessionConfig.stopTokenIds) {
71
+ const innerVec = new wasm.VectorInt();
72
+ fillEmscriptenVector(innerArr, innerVec);
73
+ outerVec.push_back(innerVec);
74
+ innerVec.delete();
75
+ }
76
+ wasmSessionConfig.setStopTokenIds(outerVec);
77
+ outerVec.delete();
78
+ }
79
+ return wasmSessionConfig;
80
+ }
81
+ /**
82
+ * Converts a WasmSessionConfig to a SessionConfig.
83
+ *
84
+ * All fields will be populated with the WASM object's values, which may be
85
+ * default values if they were not set.
86
+ */
87
+ export function wasmSessionConfigToSessionConfig(wasmSessionConfig) {
88
+ const samplerParams = wasmSessionConfig.getMutableSamplerParams();
89
+ return {
90
+ audioModalityEnabled: wasmSessionConfig.getAudioModalityEnabled(),
91
+ visionModalityEnabled: wasmSessionConfig.getVisionModalityEnabled(),
92
+ samplerParams: {
93
+ type: samplerParams.type().value,
94
+ k: samplerParams.k(),
95
+ p: samplerParams.p(),
96
+ temperature: samplerParams.temperature(),
97
+ seed: samplerParams.seed(),
98
+ },
99
+ stopTokenIds: consumeEmscriptenVectorToArray(wasmSessionConfig.getStopTokenIds())
100
+ .map(consumeEmscriptenVectorToArray),
101
+ startTokenId: wasmSessionConfig.getStartTokenId(),
102
+ numOutputCandidates: wasmSessionConfig.getNumOutputCandidates(),
103
+ samplerBackend: wasmSessionConfig.getSamplerBackend().value,
104
+ applyPromptTemplateInSession: wasmSessionConfig.getApplyPromptTemplateInSession(),
105
+ useExternalSampler: wasmSessionConfig.getUseExternalSampler(),
106
+ maxOutputTokens: wasmSessionConfig.getMaxOutputTokens(),
107
+ };
108
+ }
109
+ //# sourceMappingURL=session_config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_config.js","sourceRoot":"","sources":["../src/session_config.ts"],"names":[],"mappings":"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"}