@litert-lm/core 0.16.0 → 0.17.1

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 (118) hide show
  1. package/README.md +164 -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 +51 -0
  7. package/dist/conversation.d.ts.map +1 -0
  8. package/dist/conversation.js +171 -0
  9. package/dist/conversation.js.map +1 -0
  10. package/dist/conversation_config.d.ts +157 -0
  11. package/dist/conversation_config.d.ts.map +1 -0
  12. package/dist/conversation_config.js +42 -0
  13. package/dist/conversation_config.js.map +1 -0
  14. package/dist/embedding_engine.d.ts +51 -0
  15. package/dist/embedding_engine.d.ts.map +1 -0
  16. package/dist/embedding_engine.js +198 -0
  17. package/dist/embedding_engine.js.map +1 -0
  18. package/dist/embedding_engine_settings.d.ts +39 -0
  19. package/dist/embedding_engine_settings.d.ts.map +1 -0
  20. package/dist/embedding_engine_settings.js +35 -0
  21. package/dist/embedding_engine_settings.js.map +1 -0
  22. package/dist/engine.d.ts +37 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +203 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/engine_settings.d.ts +57 -0
  27. package/dist/engine_settings.d.ts.map +1 -0
  28. package/dist/engine_settings.js +114 -0
  29. package/dist/engine_settings.js.map +1 -0
  30. package/dist/global_litertlm.d.ts +66 -0
  31. package/dist/global_litertlm.d.ts.map +1 -0
  32. package/dist/global_litertlm.js +85 -0
  33. package/dist/global_litertlm.js.map +1 -0
  34. package/dist/index.d.ts +33 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +33 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/litertlm_web.d.ts +32 -0
  39. package/dist/litertlm_web.d.ts.map +1 -0
  40. package/dist/litertlm_web.js +75 -0
  41. package/dist/litertlm_web.js.map +1 -0
  42. package/dist/load.d.ts +28 -0
  43. package/dist/load.d.ts.map +1 -0
  44. package/dist/load.js +50 -0
  45. package/dist/load.js.map +1 -0
  46. package/dist/load_litertlm.d.ts +58 -0
  47. package/dist/load_litertlm.d.ts.map +1 -0
  48. package/dist/load_litertlm.js +87 -0
  49. package/dist/load_litertlm.js.map +1 -0
  50. package/dist/mutex.d.ts +45 -0
  51. package/dist/mutex.d.ts.map +1 -0
  52. package/dist/mutex.js +62 -0
  53. package/dist/mutex.js.map +1 -0
  54. package/dist/orchestration/auto_tool_chat.d.ts +82 -0
  55. package/dist/orchestration/auto_tool_chat.d.ts.map +1 -0
  56. package/dist/orchestration/auto_tool_chat.js +304 -0
  57. package/dist/orchestration/auto_tool_chat.js.map +1 -0
  58. package/dist/orchestration/chat_interface.d.ts +30 -0
  59. package/dist/orchestration/chat_interface.d.ts.map +1 -0
  60. package/dist/orchestration/chat_interface.js +17 -0
  61. package/dist/orchestration/chat_interface.js.map +1 -0
  62. package/dist/orchestration/webmcp_tool.d.ts +41 -0
  63. package/dist/orchestration/webmcp_tool.d.ts.map +1 -0
  64. package/dist/orchestration/webmcp_tool.js +32 -0
  65. package/dist/orchestration/webmcp_tool.js.map +1 -0
  66. package/dist/readable_stream_data_stream_wrapper.d.ts +44 -0
  67. package/dist/readable_stream_data_stream_wrapper.d.ts.map +1 -0
  68. package/dist/readable_stream_data_stream_wrapper.js +315 -0
  69. package/dist/readable_stream_data_stream_wrapper.js.map +1 -0
  70. package/dist/session.d.ts +51 -0
  71. package/dist/session.d.ts.map +1 -0
  72. package/dist/session.js +107 -0
  73. package/dist/session.js.map +1 -0
  74. package/dist/session_config.d.ts +60 -0
  75. package/dist/session_config.d.ts.map +1 -0
  76. package/dist/session_config.js +109 -0
  77. package/dist/session_config.js.map +1 -0
  78. package/dist/stream_utils.d.ts +25 -0
  79. package/dist/stream_utils.d.ts.map +1 -0
  80. package/dist/stream_utils.js +95 -0
  81. package/dist/stream_utils.js.map +1 -0
  82. package/dist/testing/fakes.d.ts +67 -0
  83. package/dist/testing/fakes.d.ts.map +1 -0
  84. package/dist/testing/fakes.js +125 -0
  85. package/dist/testing/fakes.js.map +1 -0
  86. package/dist/testing/index.d.ts +17 -0
  87. package/dist/testing/index.d.ts.map +1 -0
  88. package/dist/testing/index.js +17 -0
  89. package/dist/testing/index.js.map +1 -0
  90. package/dist/types.d.ts +42 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +17 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/url_path_utils.d.ts +28 -0
  95. package/dist/url_path_utils.d.ts.map +1 -0
  96. package/dist/url_path_utils.js +34 -0
  97. package/dist/url_path_utils.js.map +1 -0
  98. package/dist/wasm_binding_types.d.ts +473 -0
  99. package/dist/wasm_binding_types.d.ts.map +1 -0
  100. package/dist/wasm_binding_types.js +47 -0
  101. package/dist/wasm_binding_types.js.map +1 -0
  102. package/dist/wasm_feature_detect.d.ts +45 -0
  103. package/dist/wasm_feature_detect.d.ts.map +1 -0
  104. package/dist/wasm_feature_detect.js +139 -0
  105. package/dist/wasm_feature_detect.js.map +1 -0
  106. package/dist/wasm_utils.d.ts +30 -0
  107. package/dist/wasm_utils.d.ts.map +1 -0
  108. package/dist/wasm_utils.js +41 -0
  109. package/dist/wasm_utils.js.map +1 -0
  110. package/package.json +3 -2
  111. package/wasm/litertlm_wasm_asyncify_internal.js +8749 -0
  112. package/wasm/litertlm_wasm_asyncify_internal.wasm +0 -0
  113. package/wasm/litertlm_wasm_compat_asyncify_internal.js +8758 -0
  114. package/wasm/litertlm_wasm_compat_asyncify_internal.wasm +0 -0
  115. package/wasm/litertlm_wasm_compat_internal.js +8543 -0
  116. package/wasm/litertlm_wasm_compat_internal.wasm +0 -0
  117. package/wasm/litertlm_wasm_internal.js +8532 -0
  118. package/wasm/litertlm_wasm_internal.wasm +0 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
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 { ContentPart, SUPPORTED_AUDIO_MIME_TYPES, SUPPORTED_IMAGE_MIME_TYPES } from './conversation_config.js';
17
+ import { EmbeddingEngineSettings } from './embedding_engine_settings.js';
18
+ import { Deletable, EmbeddingOptions, InputOverflowStrategy } from './wasm_binding_types.js';
19
+ export { type EmbeddingOptions, InputOverflowStrategy, SUPPORTED_AUDIO_MIME_TYPES, SUPPORTED_IMAGE_MIME_TYPES, };
20
+ /**
21
+ * A single input part to the embedding engine.
22
+ */
23
+ export type SingleEmbeddingInput = string | ContentPart | Blob;
24
+ /**
25
+ * An input or sequence of inputs to compute an embedding for.
26
+ */
27
+ export type EmbeddingInput = SingleEmbeddingInput | SingleEmbeddingInput[];
28
+ /**
29
+ * Result of an embedding computation.
30
+ */
31
+ export interface EmbeddingResponse {
32
+ embedding: number[];
33
+ inputLength: number;
34
+ truncatedLength?: number;
35
+ numChunks: number;
36
+ }
37
+ /**
38
+ * LiteRT-LM Embedding Engine
39
+ */
40
+ export declare class EmbeddingEngine implements Deletable {
41
+ private readonly engine;
42
+ private readonly deleteCallback;
43
+ readonly settings: EmbeddingEngineSettings;
44
+ private readonly mutex;
45
+ private constructor();
46
+ static create(settings: EmbeddingEngineSettings): Promise<EmbeddingEngine>;
47
+ computeEmbedding(input: EmbeddingInput, options?: EmbeddingOptions): Promise<EmbeddingResponse>;
48
+ computeEmbeddingBatch(inputs: EmbeddingInput[], options?: EmbeddingOptions): Promise<EmbeddingResponse[]>;
49
+ delete(): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=embedding_engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding_engine.d.ts","sourceRoot":"","sources":["../src/embedding_engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,WAAW,EAAE,0BAA0B,EAAE,0BAA0B,EAAC,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAAC,uBAAuB,EAA6D,MAAM,gCAAgC,CAAC;AAKnI,OAAO,EAAU,SAAS,EAAkG,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAGpM,OAAO,EACL,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,GAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6DD;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAK3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IANnC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,OAAO;WAQM,MAAM,CAAC,QAAQ,EAAE,uBAAuB,GACjD,OAAO,CAAC,eAAe,CAAC;IA8EtB,gBAAgB,CAClB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;IAevB,qBAAqB,CACvB,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA0BzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
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 { Cleanup } from './cleanup.js';
17
+ import { SUPPORTED_AUDIO_MIME_TYPES, SUPPORTED_IMAGE_MIME_TYPES } from './conversation_config.js';
18
+ import { fillWasmEmbeddingEngineSettingsFromEmbeddingEngineSettings } from './embedding_engine_settings.js';
19
+ import { getOrLoadGlobalLiteRtLm } from './load_litertlm.js';
20
+ import { Mutex } from './mutex.js';
21
+ import { ReadableStreamDataStreamWrapper } from './readable_stream_data_stream_wrapper.js';
22
+ import { modelToStream, setupStreamWeightsCallback } from './stream_utils.js';
23
+ import { Backend, InputOverflowStrategy } from './wasm_binding_types.js';
24
+ import { consumeEmscriptenVectorToArray } from './wasm_utils.js';
25
+ export { InputOverflowStrategy, SUPPORTED_AUDIO_MIME_TYPES, SUPPORTED_IMAGE_MIME_TYPES, };
26
+ function toWasmEmbeddingOptions(options) {
27
+ return {
28
+ normalize: options?.normalize ?? true,
29
+ insertSpecialTokens: options?.insertSpecialTokens ?? true,
30
+ inputOverflowStrategy: options?.inputOverflowStrategy ?? InputOverflowStrategy.ERROR,
31
+ visionTokensPerImage: options?.visionTokensPerImage,
32
+ outputSize: options?.outputSize,
33
+ };
34
+ }
35
+ async function normalizeInputPart(part) {
36
+ if (typeof part === 'string') {
37
+ return { type: 'text', text: part };
38
+ }
39
+ if (part instanceof Blob) {
40
+ const mimeType = part.type.toLowerCase().split(';')[0].trim();
41
+ if (SUPPORTED_IMAGE_MIME_TYPES.has(mimeType)) {
42
+ const arrayBuffer = await part.arrayBuffer();
43
+ return { type: 'image', data: arrayBuffer };
44
+ }
45
+ if (SUPPORTED_AUDIO_MIME_TYPES.has(mimeType)) {
46
+ const arrayBuffer = await part.arrayBuffer();
47
+ return { type: 'audio', data: arrayBuffer };
48
+ }
49
+ throw new Error(`Unsupported Blob mime type: "${part.type}". Supported image types: ` +
50
+ `${[...SUPPORTED_IMAGE_MIME_TYPES].join(', ')}. Supported audio types: ` +
51
+ `${[...SUPPORTED_AUDIO_MIME_TYPES].join(', ')}.`);
52
+ }
53
+ if (typeof part === 'object' && part !== null) {
54
+ if (part.type === 'image') {
55
+ if (part.data instanceof Blob) {
56
+ const arrayBuffer = await part.data.arrayBuffer();
57
+ return { type: 'image', data: arrayBuffer };
58
+ }
59
+ return part;
60
+ }
61
+ if (part.type === 'audio') {
62
+ if (part.data instanceof Blob) {
63
+ const arrayBuffer = await part.data.arrayBuffer();
64
+ return { type: 'audio', data: arrayBuffer };
65
+ }
66
+ return part;
67
+ }
68
+ return part;
69
+ }
70
+ throw new Error(`Unsupported input part: ${JSON.stringify(part)}`);
71
+ }
72
+ async function normalizeInput(input) {
73
+ if (Array.isArray(input)) {
74
+ return Promise.all(input.map((p) => normalizeInputPart(p)));
75
+ }
76
+ return normalizeInputPart(input);
77
+ }
78
+ /**
79
+ * LiteRT-LM Embedding Engine
80
+ */
81
+ export class EmbeddingEngine {
82
+ engine;
83
+ deleteCallback;
84
+ settings;
85
+ mutex = new Mutex();
86
+ constructor(engine, settings, deleteCallback) {
87
+ this.engine = engine;
88
+ this.deleteCallback = deleteCallback;
89
+ this.settings = settings;
90
+ }
91
+ static async create(settings) {
92
+ const litertlm = await getOrLoadGlobalLiteRtLm();
93
+ const wasm = litertlm.liteRtLmWasm;
94
+ const backend = settings.backend ?? Backend.GPU;
95
+ settings = { ...settings, backend };
96
+ if (backend === Backend.GPU || backend === Backend.GPU_ARTISAN) {
97
+ await litertlm.setupDefaultWebGpuDevice();
98
+ }
99
+ const cleanup = new Cleanup();
100
+ const modelStream = await modelToStream(settings.model);
101
+ let engine;
102
+ try {
103
+ const streamWrapper = new ReadableStreamDataStreamWrapper(modelStream, () => wasm.HEAPU8);
104
+ const dataStream = wasm.ReadableStreamDataStream.create(streamWrapper);
105
+ cleanup.add(() => {
106
+ dataStream.delete();
107
+ });
108
+ const modelAssets = wasm.ModelAssets.createStreaming(dataStream);
109
+ const cleanupModelAssets = cleanup.add(() => {
110
+ modelAssets.delete();
111
+ });
112
+ let wasmSettings;
113
+ if (settings.visionBackend !== undefined ||
114
+ settings.audioBackend !== undefined) {
115
+ wasmSettings = wasm.EmbeddingEngineSettings.createDefaultMultimodal(modelAssets, { value: backend }, settings.visionBackend ? { value: settings.visionBackend } :
116
+ undefined, settings.audioBackend ? { value: settings.audioBackend } : undefined);
117
+ }
118
+ else {
119
+ wasmSettings = wasm.EmbeddingEngineSettings.createDefault(modelAssets, { value: backend });
120
+ }
121
+ cleanupModelAssets();
122
+ const cleanupWasmSettings = cleanup.add(() => {
123
+ wasmSettings.delete();
124
+ });
125
+ const resolvedBackend = wasmSettings.getMutableMainExecutorSettings().getBackend().value;
126
+ fillWasmEmbeddingEngineSettingsFromEmbeddingEngineSettings(wasmSettings, settings, resolvedBackend);
127
+ if (resolvedBackend === Backend.GPU) {
128
+ setupStreamWeightsCallback(wasm);
129
+ }
130
+ try {
131
+ engine = await wasm.EmbeddingEngine.createEngine(wasmSettings);
132
+ }
133
+ finally {
134
+ if (resolvedBackend === Backend.GPU) {
135
+ try {
136
+ wasm.registerStreamWeightsCallback(undefined);
137
+ await wasm.clearStoredWeightsStreams();
138
+ }
139
+ catch (cleanupError) {
140
+ console.error('Error during cleanup:', cleanupError);
141
+ }
142
+ }
143
+ }
144
+ cleanupWasmSettings();
145
+ cleanup.add(() => {
146
+ engine.delete();
147
+ });
148
+ return new EmbeddingEngine(engine, settings, () => cleanup.run());
149
+ }
150
+ catch (e) {
151
+ cleanup.run();
152
+ throw e;
153
+ }
154
+ }
155
+ async computeEmbedding(input, options = {}) {
156
+ const normalized = await normalizeInput(input);
157
+ return this.mutex.acquireAndRun(async () => {
158
+ const wasmResponse = await this.engine.computeEmbedding(normalized, toWasmEmbeddingOptions(options));
159
+ const embedding = consumeEmscriptenVectorToArray(wasmResponse.embedding);
160
+ return {
161
+ embedding,
162
+ inputLength: wasmResponse.inputLength,
163
+ truncatedLength: wasmResponse.truncatedLength,
164
+ numChunks: wasmResponse.numChunks,
165
+ };
166
+ });
167
+ }
168
+ async computeEmbeddingBatch(inputs, options = {}) {
169
+ const normalizedBatch = await Promise.all(inputs.map(normalizeInput));
170
+ return this.mutex.acquireAndRun(async () => {
171
+ const wasmResponses = await this.engine.computeEmbeddingBatch(normalizedBatch, toWasmEmbeddingOptions(options));
172
+ try {
173
+ const responses = [];
174
+ const count = wasmResponses.size();
175
+ for (let i = 0; i < count; i++) {
176
+ const wasmResp = wasmResponses.get(i);
177
+ const embedding = consumeEmscriptenVectorToArray(wasmResp.embedding);
178
+ responses.push({
179
+ embedding,
180
+ inputLength: wasmResp.inputLength,
181
+ truncatedLength: wasmResp.truncatedLength,
182
+ numChunks: wasmResp.numChunks,
183
+ });
184
+ }
185
+ return responses;
186
+ }
187
+ finally {
188
+ wasmResponses.delete();
189
+ }
190
+ });
191
+ }
192
+ async delete() {
193
+ await this.mutex.acquireAndRun(() => {
194
+ this.deleteCallback();
195
+ });
196
+ }
197
+ }
198
+ //# sourceMappingURL=embedding_engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding_engine.js","sourceRoot":"","sources":["../src/embedding_engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAc,0BAA0B,EAAE,0BAA0B,EAAC,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAA0B,0DAA0D,EAAC,MAAM,gCAAgC,CAAC;AACnI,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,+BAA+B,EAAC,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAC,aAAa,EAAE,0BAA0B,EAAC,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAC,OAAO,EAA+H,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACpM,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAEL,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,GAC3B,CAAC;AAsBF,SAAS,sBAAsB,CAAC,OAA0B;IACxD,OAAO;QACL,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;QACrC,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,IAAI;QACzD,qBAAqB,EACjB,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,CAAC,KAAK;QACjE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB;QACnD,UAAU,EAAE,OAAO,EAAE,UAAU;KAChC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAA0B;IAE1D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5C,CAAC;QACD,IAAI,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,KAAK,CACX,gCAAgC,IAAI,CAAC,IAAI,4BAA4B;YACrE,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B;YACxE,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,IAAI,YAAY,IAAI,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClD,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,IAAI,YAAY,IAAI,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClD,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAqB;IAEjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IAKL;IAEA;IANZ,QAAQ,CAA0B;IAC1B,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAErC,YACqB,MAA2B,EAC5C,QAAiC,EAChB,cAA0B;QAF1B,WAAM,GAAN,MAAM,CAAqB;QAE3B,mBAAc,GAAd,cAAc,CAAY;QAE7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAiC;QAEnD,MAAM,QAAQ,GAAG,MAAM,uBAAuB,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;QAChD,QAAQ,GAAG,EAAC,GAAG,QAAQ,EAAE,OAAO,EAAC,CAAC;QAElC,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/D,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,MAA2B,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,aAAa,GACf,IAAI,+BAA+B,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACf,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC1C,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,IAAI,YAAyC,CAAC;YAC9C,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;gBACpC,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACxC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAC/D,WAAW,EAAE,EAAC,KAAK,EAAE,OAAO,EAAC,EAC7B,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAC,CAAC,CAAC;oBACjC,SAAS,EAClC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CACrD,WAAW,EAAE,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;YACrC,CAAC;YACD,kBAAkB,EAAE,CAAC;YAErB,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC3C,YAAY,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAM,eAAe,GACjB,YAAY,CAAC,8BAA8B,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YAErE,0DAA0D,CACtD,YAAY,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAE7C,IAAI,eAAe,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;gBACpC,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACjE,CAAC;oBAAS,CAAC;gBACT,IAAI,eAAe,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;wBAC9C,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACzC,CAAC;oBAAC,OAAO,YAAY,EAAE,CAAC;wBACtB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,CAAC;YAEtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,eAAe,CACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAClB,KAAqB,EACrB,UAA4B,EAAE;QAEhC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,YAAY,GACd,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;YACpF,MAAM,SAAS,GAAG,8BAA8B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACzE,OAAO;gBACL,SAAS;gBACT,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,eAAe,EAAE,YAAY,CAAC,eAAe;gBAC7C,SAAS,EAAE,YAAY,CAAC,SAAS;aAClC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CACvB,MAAwB,EACxB,UAA4B,EAAE;QAEhC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACzD,eAAe,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAwB,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtC,MAAM,SAAS,GACX,8BAA8B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACvD,SAAS,CAAC,IAAI,CAAC;wBACb,SAAS;wBACT,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;wBACzC,SAAS,EAAE,QAAQ,CAAC,SAAS;qBAC9B,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
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 { Backend, EmbeddingEngineSettings as WasmEmbeddingEngineSettings } from './wasm_binding_types.js';
17
+ /**
18
+ * LiteRT-LM EmbeddingExecutorSettings
19
+ */
20
+ export interface EmbeddingExecutorSettings {
21
+ numThreads?: number;
22
+ }
23
+ /**
24
+ * LiteRT-LM EmbeddingEngineSettings
25
+ */
26
+ export interface EmbeddingEngineSettings {
27
+ model: string | Blob | ReadableStream<Uint8Array>;
28
+ backend?: Backend;
29
+ visionBackend?: Backend;
30
+ audioBackend?: Backend;
31
+ maxInputLength?: number;
32
+ visionTokensPerImage?: number;
33
+ mainExecutorSettings?: EmbeddingExecutorSettings;
34
+ }
35
+ /**
36
+ * Fills a WasmEmbeddingEngineSettings with the values from an EmbeddingEngineSettings.
37
+ */
38
+ export declare function fillWasmEmbeddingEngineSettingsFromEmbeddingEngineSettings(wasmSettings: WasmEmbeddingEngineSettings, settings: EmbeddingEngineSettings, backend: Backend): void;
39
+ //# sourceMappingURL=embedding_engine_settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding_engine_settings.d.ts","sourceRoot":"","sources":["../src/embedding_engine_settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,OAAO,EAAE,uBAAuB,IAAI,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;CAClD;AAED;;GAEG;AACH,wBAAgB,0DAA0D,CACtE,YAAY,EAAE,2BAA2B,EACzC,QAAQ,EAAE,uBAAuB,EACjC,OAAO,EAAE,OAAO,GACjB,IAAI,CAiBN"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
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
+ /**
17
+ * Fills a WasmEmbeddingEngineSettings with the values from an EmbeddingEngineSettings.
18
+ */
19
+ export function fillWasmEmbeddingEngineSettingsFromEmbeddingEngineSettings(wasmSettings, settings, backend) {
20
+ const wasmExecutorSettings = wasmSettings.getMutableMainExecutorSettings();
21
+ wasmExecutorSettings.setCacheDir(':nocache');
22
+ if (settings.maxInputLength !== undefined) {
23
+ wasmSettings.setMaxInputLength(settings.maxInputLength);
24
+ }
25
+ if (settings.visionTokensPerImage !== undefined) {
26
+ wasmSettings.setVisionTokensPerImage(settings.visionTokensPerImage);
27
+ }
28
+ if (settings.mainExecutorSettings) {
29
+ const mainExecutorSettings = settings.mainExecutorSettings;
30
+ if (mainExecutorSettings.numThreads !== undefined) {
31
+ wasmExecutorSettings.setNumThreads(mainExecutorSettings.numThreads);
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=embedding_engine_settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding_engine_settings.js","sourceRoot":"","sources":["../src/embedding_engine_settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH;;GAEG;AACH,MAAM,UAAU,0DAA0D,CACtE,YAAyC,EACzC,QAAiC,EACjC,OAAgB;IAElB,MAAM,oBAAoB,GAAG,YAAY,CAAC,8BAA8B,EAAE,CAAC;IAC3E,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,QAAQ,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAChD,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;QAC3D,IAAI,oBAAoB,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClD,oBAAoB,CAAC,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
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 { Conversation } from './conversation.js';
17
+ import { ConversationConfig } from './conversation_config.js';
18
+ import { EngineSettings } from './engine_settings.js';
19
+ import { Session } from './session.js';
20
+ import { RecursiveRequired } from './types.js';
21
+ import { Deletable } from './wasm_binding_types.js';
22
+ /**
23
+ * LiteRT-LM Engine
24
+ */
25
+ export declare class Engine implements Deletable {
26
+ private readonly wasm;
27
+ private readonly engine;
28
+ private readonly deleteCallback;
29
+ readonly settings: RecursiveRequired<EngineSettings>;
30
+ private mutexes;
31
+ private constructor();
32
+ static create(engineSettings: EngineSettings, inputPromptAsHint?: string): Promise<Engine>;
33
+ createSession(sessionConfig?: {}): Promise<Session>;
34
+ createConversation(config?: ConversationConfig): Promise<Conversation>;
35
+ delete(): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAC,cAAc,EAA+E,MAAM,sBAAsB,CAAC;AAKlI,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAwD,SAAS,EAAsF,MAAM,yBAAyB,CAAC;AAQ9L;;GAEG;AACH,qBAAa,MAAO,YAAW,SAAS;IAOlC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IATnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACrD,OAAO,CAAC,OAAO,CAEb;IAEF,OAAO;WAgBM,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,SAAK,GACtE,OAAO,CAAC,MAAM,CAAC;IAsFb,aAAa,CAAC,aAAa,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnD,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BtE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
package/dist/engine.js ADDED
@@ -0,0 +1,203 @@
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 { Cleanup } from './cleanup.js';
17
+ import { Conversation } from './conversation.js';
18
+ import { fillWasmEngineSettingsFromEngineSettings, wasmEngineSettingsToEngineSettings } from './engine_settings.js';
19
+ import { getOrLoadGlobalLiteRtLm } from './load_litertlm.js';
20
+ import { Mutex } from './mutex.js';
21
+ import { ReadableStreamDataStreamWrapper } from './readable_stream_data_stream_wrapper.js';
22
+ import { Session } from './session.js';
23
+ import { sessionConfigToWasmSessionConfig } from './session_config.js';
24
+ import { Backend } from './wasm_binding_types.js';
25
+ /**
26
+ * Global index to avoid writing to the sane VFS path.
27
+ */
28
+ // TODO: b/477709280 - Remove this when streaming loading works.
29
+ let modelPathIndex = 0;
30
+ /**
31
+ * LiteRT-LM Engine
32
+ */
33
+ export class Engine {
34
+ wasm;
35
+ engine;
36
+ deleteCallback;
37
+ settings;
38
+ mutexes = {
39
+ executor: new Mutex(),
40
+ };
41
+ constructor(wasm, engine, modelSource, deleteCallback) {
42
+ this.wasm = wasm;
43
+ this.engine = engine;
44
+ this.deleteCallback = deleteCallback;
45
+ const wasmEngineSettings = engine.getEngineSettings();
46
+ const settingsWithoutModel = wasmEngineSettingsToEngineSettings(wasmEngineSettings);
47
+ this.settings = {
48
+ ...settingsWithoutModel,
49
+ model: modelSource,
50
+ };
51
+ wasmEngineSettings.delete();
52
+ }
53
+ static async create(engineSettings, inputPromptAsHint = '') {
54
+ const litertlm = await getOrLoadGlobalLiteRtLm();
55
+ const wasm = litertlm.liteRtLmWasm;
56
+ // TODO: b/477709280 - Support other formats like .task.
57
+ const dstPath = `/model_${modelPathIndex++}.litertlm`;
58
+ // Default to GPU_ARTISAN if not specified.
59
+ const backend = engineSettings.backend ?? Backend.GPU_ARTISAN;
60
+ engineSettings = { ...engineSettings, backend };
61
+ const samplerBackend = engineSettings.mainExecutorSettings?.samplerBackend;
62
+ if (backend === Backend.GPU || backend === Backend.GPU_ARTISAN ||
63
+ samplerBackend === Backend.GPU ||
64
+ samplerBackend === Backend.GPU_ARTISAN) {
65
+ await litertlm.setupDefaultWebGpuDevice();
66
+ }
67
+ const cleanup = new Cleanup();
68
+ const modelStream = await modelToStream(engineSettings.model);
69
+ let engine;
70
+ try {
71
+ let modelAssets;
72
+ const isStreaming = backend === Backend.GPU_ARTISAN;
73
+ if (isStreaming) {
74
+ // GPU Artisan supports streamed loading.
75
+ const streamWrapper = new ReadableStreamDataStreamWrapper(modelStream, () => wasm.HEAPU8);
76
+ const dataStream = wasm.ReadableStreamDataStream.create(streamWrapper);
77
+ cleanup.add(() => {
78
+ dataStream.delete();
79
+ });
80
+ modelAssets = wasm.ModelAssets.createStreaming(dataStream);
81
+ }
82
+ else {
83
+ // Other backends must be fully loaded into Wasm memory first.
84
+ await loadModelToVfs(wasm, modelStream, dstPath);
85
+ cleanup.add(() => {
86
+ try {
87
+ wasm.FS.unlink(dstPath);
88
+ }
89
+ catch (e) {
90
+ console.error(`Error removing file from VFS:`, e);
91
+ }
92
+ });
93
+ modelAssets = wasm.ModelAssets.create(dstPath);
94
+ }
95
+ const cleanupModelAssets = cleanup.add(() => {
96
+ modelAssets.delete();
97
+ });
98
+ const wasmEngineSettings = wasm.EngineSettings.createDefault(modelAssets, { value: backend });
99
+ // Delete our copy of the ModelAssets object (not the underlying file).
100
+ cleanupModelAssets();
101
+ const cleanupWasmEngineSettings = cleanup.add(() => {
102
+ wasmEngineSettings.delete();
103
+ });
104
+ fillWasmEngineSettingsFromEngineSettings(wasmEngineSettings, engineSettings, backend, wasm);
105
+ wasmEngineSettings.setParallelFileSectionLoading(false);
106
+ wasmEngineSettings.setSingleThreadedExecution(true);
107
+ if (isStreaming) {
108
+ engine = await wasm.Engine.createStreaming(wasmEngineSettings, inputPromptAsHint);
109
+ }
110
+ else {
111
+ engine = await wasm.Engine.createEngine(wasmEngineSettings, inputPromptAsHint);
112
+ }
113
+ cleanupWasmEngineSettings();
114
+ cleanup.add(() => {
115
+ engine.delete();
116
+ });
117
+ return new Engine(wasm, engine, engineSettings.model, () => cleanup.run());
118
+ }
119
+ catch (e) {
120
+ cleanup.run();
121
+ throw e;
122
+ }
123
+ }
124
+ async createSession(sessionConfig = {}) {
125
+ return this.mutexes.executor.acquireAndRun(() => {
126
+ const wasmSessionConfig = sessionConfigToWasmSessionConfig(sessionConfig, this.wasm);
127
+ const wasmSession = this.engine.createSession(wasmSessionConfig);
128
+ wasmSessionConfig.delete();
129
+ return new Session(wasmSession, this.mutexes);
130
+ });
131
+ }
132
+ async createConversation(config) {
133
+ return this.mutexes.executor.acquireAndRun(async () => {
134
+ let wasmConfig;
135
+ let wasmSessionConfig;
136
+ if (config) {
137
+ wasmSessionConfig = sessionConfigToWasmSessionConfig(config.sessionConfig || {}, this.wasm);
138
+ const prefaceJson = config.preface ? JSON.stringify(config.preface) : '';
139
+ wasmConfig = this.wasm.ConversationConfig.createCustom(this.engine, wasmSessionConfig, !!config.enableConstrainedDecoding, !!config.prefillPrefaceOnInit, !!config.filterChannelContentFromKvCache, prefaceJson);
140
+ }
141
+ else {
142
+ wasmConfig = this.wasm.ConversationConfig.createDefault(this.engine);
143
+ }
144
+ const wasmConversation = await this.wasm.Conversation.create(this.engine, wasmConfig);
145
+ wasmConfig.delete();
146
+ if (wasmSessionConfig) {
147
+ wasmSessionConfig.delete();
148
+ }
149
+ return new Conversation(wasmConversation, this.engine, this.mutexes);
150
+ });
151
+ }
152
+ async delete() {
153
+ await this.mutexes.executor.acquireAndRun(() => {
154
+ this.deleteCallback();
155
+ });
156
+ }
157
+ }
158
+ async function modelToStream(model) {
159
+ if (model instanceof ReadableStream) {
160
+ return model;
161
+ }
162
+ if (model instanceof Blob) {
163
+ return model.stream();
164
+ }
165
+ const modelUrl = model;
166
+ const response = await fetch(modelUrl, {
167
+ credentials: 'same-origin',
168
+ });
169
+ if (!response.ok) {
170
+ throw new Error(`Failed to fetch model file from ${modelUrl}`);
171
+ }
172
+ return response.body;
173
+ }
174
+ // TODO: b/477709280 - Remove this when streaming loading works.
175
+ async function loadModelToVfs(module, modelStream, dstPath) {
176
+ let fileContent;
177
+ const reader = modelStream.getReader();
178
+ const chunks = [];
179
+ let totalLength = 0;
180
+ while (true) {
181
+ const { done, value } = await reader.read();
182
+ if (done)
183
+ break;
184
+ if (value) {
185
+ chunks.push(value);
186
+ totalLength += value.length;
187
+ }
188
+ }
189
+ fileContent = new Uint8Array(totalLength);
190
+ let offset = 0;
191
+ for (const chunk of chunks) {
192
+ fileContent.set(chunk, offset);
193
+ offset += chunk.length;
194
+ }
195
+ try {
196
+ module.FS.writeFile(dstPath, fileContent);
197
+ }
198
+ catch (e) {
199
+ console.error(`Error writing file to VFS:`, e);
200
+ throw e;
201
+ }
202
+ }
203
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}