@runanywhere/web 0.1.0-beta.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 (205) hide show
  1. package/README.md +795 -0
  2. package/dist/Foundation/ErrorTypes.d.ts +61 -0
  3. package/dist/Foundation/ErrorTypes.d.ts.map +1 -0
  4. package/dist/Foundation/ErrorTypes.js +90 -0
  5. package/dist/Foundation/ErrorTypes.js.map +1 -0
  6. package/dist/Foundation/EventBus.d.ts +171 -0
  7. package/dist/Foundation/EventBus.d.ts.map +1 -0
  8. package/dist/Foundation/EventBus.js +113 -0
  9. package/dist/Foundation/EventBus.js.map +1 -0
  10. package/dist/Foundation/PlatformAdapter.d.ts +101 -0
  11. package/dist/Foundation/PlatformAdapter.d.ts.map +1 -0
  12. package/dist/Foundation/PlatformAdapter.js +417 -0
  13. package/dist/Foundation/PlatformAdapter.js.map +1 -0
  14. package/dist/Foundation/SDKLogger.d.ts +33 -0
  15. package/dist/Foundation/SDKLogger.d.ts.map +1 -0
  16. package/dist/Foundation/SDKLogger.js +82 -0
  17. package/dist/Foundation/SDKLogger.js.map +1 -0
  18. package/dist/Foundation/SherpaONNXBridge.d.ts +134 -0
  19. package/dist/Foundation/SherpaONNXBridge.d.ts.map +1 -0
  20. package/dist/Foundation/SherpaONNXBridge.js +332 -0
  21. package/dist/Foundation/SherpaONNXBridge.js.map +1 -0
  22. package/dist/Foundation/StructOffsets.d.ts +147 -0
  23. package/dist/Foundation/StructOffsets.d.ts.map +1 -0
  24. package/dist/Foundation/StructOffsets.js +161 -0
  25. package/dist/Foundation/StructOffsets.js.map +1 -0
  26. package/dist/Foundation/WASMBridge.d.ts +241 -0
  27. package/dist/Foundation/WASMBridge.d.ts.map +1 -0
  28. package/dist/Foundation/WASMBridge.js +393 -0
  29. package/dist/Foundation/WASMBridge.js.map +1 -0
  30. package/dist/Infrastructure/ArchiveUtility.d.ts +25 -0
  31. package/dist/Infrastructure/ArchiveUtility.d.ts.map +1 -0
  32. package/dist/Infrastructure/ArchiveUtility.js +139 -0
  33. package/dist/Infrastructure/ArchiveUtility.js.map +1 -0
  34. package/dist/Infrastructure/AudioCapture.d.ts +87 -0
  35. package/dist/Infrastructure/AudioCapture.d.ts.map +1 -0
  36. package/dist/Infrastructure/AudioCapture.js +231 -0
  37. package/dist/Infrastructure/AudioCapture.js.map +1 -0
  38. package/dist/Infrastructure/AudioPlayback.d.ts +53 -0
  39. package/dist/Infrastructure/AudioPlayback.d.ts.map +1 -0
  40. package/dist/Infrastructure/AudioPlayback.js +117 -0
  41. package/dist/Infrastructure/AudioPlayback.js.map +1 -0
  42. package/dist/Infrastructure/DeviceCapabilities.d.ts +39 -0
  43. package/dist/Infrastructure/DeviceCapabilities.d.ts.map +1 -0
  44. package/dist/Infrastructure/DeviceCapabilities.js +111 -0
  45. package/dist/Infrastructure/DeviceCapabilities.js.map +1 -0
  46. package/dist/Infrastructure/ExtensionRegistry.d.ts +30 -0
  47. package/dist/Infrastructure/ExtensionRegistry.d.ts.map +1 -0
  48. package/dist/Infrastructure/ExtensionRegistry.js +41 -0
  49. package/dist/Infrastructure/ExtensionRegistry.js.map +1 -0
  50. package/dist/Infrastructure/ModelDownloader.d.ts +98 -0
  51. package/dist/Infrastructure/ModelDownloader.d.ts.map +1 -0
  52. package/dist/Infrastructure/ModelDownloader.js +431 -0
  53. package/dist/Infrastructure/ModelDownloader.js.map +1 -0
  54. package/dist/Infrastructure/ModelLoaderTypes.d.ts +34 -0
  55. package/dist/Infrastructure/ModelLoaderTypes.d.ts.map +1 -0
  56. package/dist/Infrastructure/ModelLoaderTypes.js +12 -0
  57. package/dist/Infrastructure/ModelLoaderTypes.js.map +1 -0
  58. package/dist/Infrastructure/ModelManager.d.ts +219 -0
  59. package/dist/Infrastructure/ModelManager.d.ts.map +1 -0
  60. package/dist/Infrastructure/ModelManager.js +885 -0
  61. package/dist/Infrastructure/ModelManager.js.map +1 -0
  62. package/dist/Infrastructure/ModelRegistry.d.ts +131 -0
  63. package/dist/Infrastructure/ModelRegistry.d.ts.map +1 -0
  64. package/dist/Infrastructure/ModelRegistry.js +122 -0
  65. package/dist/Infrastructure/ModelRegistry.js.map +1 -0
  66. package/dist/Infrastructure/OPFSStorage.d.ts +143 -0
  67. package/dist/Infrastructure/OPFSStorage.d.ts.map +1 -0
  68. package/dist/Infrastructure/OPFSStorage.js +330 -0
  69. package/dist/Infrastructure/OPFSStorage.js.map +1 -0
  70. package/dist/Infrastructure/VLMWorkerBridge.d.ts +211 -0
  71. package/dist/Infrastructure/VLMWorkerBridge.d.ts.map +1 -0
  72. package/dist/Infrastructure/VLMWorkerBridge.js +264 -0
  73. package/dist/Infrastructure/VLMWorkerBridge.js.map +1 -0
  74. package/dist/Infrastructure/VLMWorkerRuntime.d.ts +38 -0
  75. package/dist/Infrastructure/VLMWorkerRuntime.d.ts.map +1 -0
  76. package/dist/Infrastructure/VLMWorkerRuntime.js +503 -0
  77. package/dist/Infrastructure/VLMWorkerRuntime.js.map +1 -0
  78. package/dist/Infrastructure/VideoCapture.d.ts +118 -0
  79. package/dist/Infrastructure/VideoCapture.d.ts.map +1 -0
  80. package/dist/Infrastructure/VideoCapture.js +207 -0
  81. package/dist/Infrastructure/VideoCapture.js.map +1 -0
  82. package/dist/Public/Extensions/DiffusionTypes.d.ts +64 -0
  83. package/dist/Public/Extensions/DiffusionTypes.d.ts.map +1 -0
  84. package/dist/Public/Extensions/DiffusionTypes.js +28 -0
  85. package/dist/Public/Extensions/DiffusionTypes.js.map +1 -0
  86. package/dist/Public/Extensions/EmbeddingsTypes.d.ts +33 -0
  87. package/dist/Public/Extensions/EmbeddingsTypes.d.ts.map +1 -0
  88. package/dist/Public/Extensions/EmbeddingsTypes.js +13 -0
  89. package/dist/Public/Extensions/EmbeddingsTypes.js.map +1 -0
  90. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts +44 -0
  91. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts.map +1 -0
  92. package/dist/Public/Extensions/RunAnywhere+Diffusion.js +189 -0
  93. package/dist/Public/Extensions/RunAnywhere+Diffusion.js.map +1 -0
  94. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts +56 -0
  95. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts.map +1 -0
  96. package/dist/Public/Extensions/RunAnywhere+Embeddings.js +240 -0
  97. package/dist/Public/Extensions/RunAnywhere+Embeddings.js.map +1 -0
  98. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts +53 -0
  99. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts.map +1 -0
  100. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js +153 -0
  101. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js.map +1 -0
  102. package/dist/Public/Extensions/RunAnywhere+STT.d.ts +95 -0
  103. package/dist/Public/Extensions/RunAnywhere+STT.d.ts.map +1 -0
  104. package/dist/Public/Extensions/RunAnywhere+STT.js +417 -0
  105. package/dist/Public/Extensions/RunAnywhere+STT.js.map +1 -0
  106. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts +69 -0
  107. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts.map +1 -0
  108. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js +196 -0
  109. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js.map +1 -0
  110. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts +55 -0
  111. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts.map +1 -0
  112. package/dist/Public/Extensions/RunAnywhere+TTS.js +253 -0
  113. package/dist/Public/Extensions/RunAnywhere+TTS.js.map +1 -0
  114. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts +80 -0
  115. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts.map +1 -0
  116. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js +436 -0
  117. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js.map +1 -0
  118. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts +82 -0
  119. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts.map +1 -0
  120. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js +576 -0
  121. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js.map +1 -0
  122. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts +70 -0
  123. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts.map +1 -0
  124. package/dist/Public/Extensions/RunAnywhere+VAD.js +231 -0
  125. package/dist/Public/Extensions/RunAnywhere+VAD.js.map +1 -0
  126. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts +58 -0
  127. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts.map +1 -0
  128. package/dist/Public/Extensions/RunAnywhere+VLM.js +262 -0
  129. package/dist/Public/Extensions/RunAnywhere+VLM.js.map +1 -0
  130. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts +49 -0
  131. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts.map +1 -0
  132. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js +222 -0
  133. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js.map +1 -0
  134. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts +63 -0
  135. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts.map +1 -0
  136. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js +168 -0
  137. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js.map +1 -0
  138. package/dist/Public/Extensions/STTTypes.d.ts +53 -0
  139. package/dist/Public/Extensions/STTTypes.d.ts.map +1 -0
  140. package/dist/Public/Extensions/STTTypes.js +16 -0
  141. package/dist/Public/Extensions/STTTypes.js.map +1 -0
  142. package/dist/Public/Extensions/TTSTypes.d.ts +31 -0
  143. package/dist/Public/Extensions/TTSTypes.d.ts.map +1 -0
  144. package/dist/Public/Extensions/TTSTypes.js +3 -0
  145. package/dist/Public/Extensions/TTSTypes.js.map +1 -0
  146. package/dist/Public/Extensions/ToolCallingTypes.d.ts +78 -0
  147. package/dist/Public/Extensions/ToolCallingTypes.d.ts.map +1 -0
  148. package/dist/Public/Extensions/ToolCallingTypes.js +8 -0
  149. package/dist/Public/Extensions/ToolCallingTypes.js.map +1 -0
  150. package/dist/Public/Extensions/VADTypes.d.ts +30 -0
  151. package/dist/Public/Extensions/VADTypes.d.ts.map +1 -0
  152. package/dist/Public/Extensions/VADTypes.js +8 -0
  153. package/dist/Public/Extensions/VADTypes.js.map +1 -0
  154. package/dist/Public/Extensions/VLMTypes.d.ts +56 -0
  155. package/dist/Public/Extensions/VLMTypes.d.ts.map +1 -0
  156. package/dist/Public/Extensions/VLMTypes.js +24 -0
  157. package/dist/Public/Extensions/VLMTypes.js.map +1 -0
  158. package/dist/Public/Extensions/VoiceAgentTypes.d.ts +42 -0
  159. package/dist/Public/Extensions/VoiceAgentTypes.d.ts.map +1 -0
  160. package/dist/Public/Extensions/VoiceAgentTypes.js +12 -0
  161. package/dist/Public/Extensions/VoiceAgentTypes.js.map +1 -0
  162. package/dist/Public/Extensions/VoicePipelineTypes.d.ts +69 -0
  163. package/dist/Public/Extensions/VoicePipelineTypes.d.ts.map +1 -0
  164. package/dist/Public/Extensions/VoicePipelineTypes.js +9 -0
  165. package/dist/Public/Extensions/VoicePipelineTypes.js.map +1 -0
  166. package/dist/Public/RunAnywhere.d.ts +121 -0
  167. package/dist/Public/RunAnywhere.d.ts.map +1 -0
  168. package/dist/Public/RunAnywhere.js +332 -0
  169. package/dist/Public/RunAnywhere.js.map +1 -0
  170. package/dist/index.d.ts +67 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +53 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/types/LLMTypes.d.ts +48 -0
  175. package/dist/types/LLMTypes.d.ts.map +1 -0
  176. package/dist/types/LLMTypes.js +8 -0
  177. package/dist/types/LLMTypes.js.map +1 -0
  178. package/dist/types/enums.d.ts +144 -0
  179. package/dist/types/enums.d.ts.map +1 -0
  180. package/dist/types/enums.js +159 -0
  181. package/dist/types/enums.js.map +1 -0
  182. package/dist/types/index.d.ts +9 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +8 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/models.d.ts +154 -0
  187. package/dist/types/models.d.ts.map +1 -0
  188. package/dist/types/models.js +8 -0
  189. package/dist/types/models.js.map +1 -0
  190. package/dist/workers/vlm-worker.d.ts +9 -0
  191. package/dist/workers/vlm-worker.d.ts.map +1 -0
  192. package/dist/workers/vlm-worker.js +10 -0
  193. package/dist/workers/vlm-worker.js.map +1 -0
  194. package/package.json +62 -0
  195. package/wasm/racommons-webgpu.js +156 -0
  196. package/wasm/racommons-webgpu.wasm +0 -0
  197. package/wasm/racommons.js +126 -0
  198. package/wasm/racommons.wasm +0 -0
  199. package/wasm/sherpa/sherpa-onnx-asr.js +1538 -0
  200. package/wasm/sherpa/sherpa-onnx-glue-original.js +19 -0
  201. package/wasm/sherpa/sherpa-onnx-glue.js +17 -0
  202. package/wasm/sherpa/sherpa-onnx-tts.js +657 -0
  203. package/wasm/sherpa/sherpa-onnx-vad.js +337 -0
  204. package/wasm/sherpa/sherpa-onnx-wave.js +88 -0
  205. package/wasm/sherpa/sherpa-onnx.wasm +0 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Embeddings Extension
3
+ *
4
+ * Adds text embedding generation capabilities via RACommons WASM.
5
+ * Uses the rac_embeddings_component_* C API for model lifecycle
6
+ * and embedding generation.
7
+ *
8
+ * Embeddings convert text into fixed-dimensional dense vectors
9
+ * useful for semantic search, clustering, and RAG.
10
+ *
11
+ * Backend: llama.cpp (GGUF embedding models like nomic-embed-text)
12
+ *
13
+ * Usage:
14
+ * import { Embeddings } from '@runanywhere/web';
15
+ *
16
+ * await Embeddings.loadModel('/models/nomic-embed-text-v1.5.Q4_K_M.gguf', 'nomic-embed');
17
+ * const result = await Embeddings.embed('Hello, world!');
18
+ * console.log('Dimension:', result.dimension);
19
+ * console.log('Vector:', result.embeddings[0].data);
20
+ *
21
+ * // Batch embedding
22
+ * const batch = await Embeddings.embedBatch(['text1', 'text2', 'text3']);
23
+ */
24
+ import type { EmbeddingsResult, EmbeddingsOptions } from './EmbeddingsTypes';
25
+ export { EmbeddingsNormalize, EmbeddingsPooling, type EmbeddingVector, type EmbeddingsResult, type EmbeddingsOptions, } from './EmbeddingsTypes';
26
+ declare class EmbeddingsImpl {
27
+ readonly extensionName = "Embeddings";
28
+ private _embeddingsComponentHandle;
29
+ private requireBridge;
30
+ private ensureEmbeddingsComponent;
31
+ /**
32
+ * Load an embedding model (GGUF format).
33
+ */
34
+ loadModel(modelPath: string, modelId: string, modelName?: string): Promise<void>;
35
+ /** Unload the embeddings model. */
36
+ unloadModel(): Promise<void>;
37
+ /** Check if an embeddings model is loaded. */
38
+ get isModelLoaded(): boolean;
39
+ /**
40
+ * Generate embedding for a single text.
41
+ */
42
+ embed(text: string, options?: EmbeddingsOptions): Promise<EmbeddingsResult>;
43
+ /**
44
+ * Generate embeddings for multiple texts at once.
45
+ */
46
+ embedBatch(texts: string[], options?: EmbeddingsOptions): Promise<EmbeddingsResult>;
47
+ /**
48
+ * Compute cosine similarity between two embedding vectors.
49
+ * Pure TypeScript utility -- no WASM call needed.
50
+ */
51
+ cosineSimilarity(a: Float32Array, b: Float32Array): number;
52
+ /** Clean up the embeddings component. */
53
+ cleanup(): void;
54
+ }
55
+ export declare const Embeddings: EmbeddingsImpl;
56
+ //# sourceMappingURL=RunAnywhere+Embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+Embeddings.d.ts","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+Embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAQ3B,cAAM,cAAc;IAClB,QAAQ,CAAC,aAAa,gBAAgB;IACtC,OAAO,CAAC,0BAA0B,CAAK;IAEvC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,yBAAyB;IAmBjC;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BtF,mCAAmC;IAC7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC,8CAA8C;IAC9C,IAAI,aAAa,IAAI,OAAO,CAO3B;IAED;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwCrF;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiD7F;;;OAGG;IACH,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IAgB1D,yCAAyC;IACzC,OAAO,IAAI,IAAI;CAUhB;AAED,eAAO,MAAM,UAAU,gBAAuB,CAAC"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Embeddings Extension
3
+ *
4
+ * Adds text embedding generation capabilities via RACommons WASM.
5
+ * Uses the rac_embeddings_component_* C API for model lifecycle
6
+ * and embedding generation.
7
+ *
8
+ * Embeddings convert text into fixed-dimensional dense vectors
9
+ * useful for semantic search, clustering, and RAG.
10
+ *
11
+ * Backend: llama.cpp (GGUF embedding models like nomic-embed-text)
12
+ *
13
+ * Usage:
14
+ * import { Embeddings } from '@runanywhere/web';
15
+ *
16
+ * await Embeddings.loadModel('/models/nomic-embed-text-v1.5.Q4_K_M.gguf', 'nomic-embed');
17
+ * const result = await Embeddings.embed('Hello, world!');
18
+ * console.log('Dimension:', result.dimension);
19
+ * console.log('Vector:', result.embeddings[0].data);
20
+ *
21
+ * // Batch embedding
22
+ * const batch = await Embeddings.embedBatch(['text1', 'text2', 'text3']);
23
+ */
24
+ import { RunAnywhere } from '../RunAnywhere';
25
+ import { WASMBridge } from '../../Foundation/WASMBridge';
26
+ import { Offsets } from '../../Foundation/StructOffsets';
27
+ import { SDKError, SDKErrorCode } from '../../Foundation/ErrorTypes';
28
+ import { SDKLogger } from '../../Foundation/SDKLogger';
29
+ import { EventBus } from '../../Foundation/EventBus';
30
+ import { SDKEventType } from '../../types/enums';
31
+ export { EmbeddingsNormalize, EmbeddingsPooling, } from './EmbeddingsTypes';
32
+ const logger = new SDKLogger('Embeddings');
33
+ // ---------------------------------------------------------------------------
34
+ // Embeddings Extension
35
+ // ---------------------------------------------------------------------------
36
+ class EmbeddingsImpl {
37
+ extensionName = 'Embeddings';
38
+ _embeddingsComponentHandle = 0;
39
+ requireBridge() {
40
+ if (!RunAnywhere.isInitialized)
41
+ throw SDKError.notInitialized();
42
+ return WASMBridge.shared;
43
+ }
44
+ ensureEmbeddingsComponent() {
45
+ if (this._embeddingsComponentHandle !== 0)
46
+ return this._embeddingsComponentHandle;
47
+ const bridge = this.requireBridge();
48
+ const m = bridge.module;
49
+ const handlePtr = m._malloc(4);
50
+ const result = bridge.callFunction('rac_embeddings_component_create', 'number', ['number'], [handlePtr]);
51
+ if (result !== 0) {
52
+ m._free(handlePtr);
53
+ bridge.checkResult(result, 'rac_embeddings_component_create');
54
+ }
55
+ this._embeddingsComponentHandle = m.getValue(handlePtr, 'i32');
56
+ m._free(handlePtr);
57
+ logger.debug('Embeddings component created');
58
+ return this._embeddingsComponentHandle;
59
+ }
60
+ /**
61
+ * Load an embedding model (GGUF format).
62
+ */
63
+ async loadModel(modelPath, modelId, modelName) {
64
+ const bridge = this.requireBridge();
65
+ const m = bridge.module;
66
+ const handle = this.ensureEmbeddingsComponent();
67
+ logger.info(`Loading embeddings model: ${modelId} from ${modelPath}`);
68
+ EventBus.shared.emit('model.loadStarted', SDKEventType.Model, { modelId, component: 'embeddings' });
69
+ const pathPtr = bridge.allocString(modelPath);
70
+ const idPtr = bridge.allocString(modelId);
71
+ const namePtr = bridge.allocString(modelName ?? modelId);
72
+ try {
73
+ const result = m.ccall('rac_embeddings_component_load_model', 'number', ['number', 'number', 'number', 'number'], [handle, pathPtr, idPtr, namePtr]);
74
+ bridge.checkResult(result, 'rac_embeddings_component_load_model');
75
+ logger.info(`Embeddings model loaded: ${modelId}`);
76
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, { modelId, component: 'embeddings' });
77
+ }
78
+ finally {
79
+ bridge.free(pathPtr);
80
+ bridge.free(idPtr);
81
+ bridge.free(namePtr);
82
+ }
83
+ }
84
+ /** Unload the embeddings model. */
85
+ async unloadModel() {
86
+ if (this._embeddingsComponentHandle === 0)
87
+ return;
88
+ const bridge = this.requireBridge();
89
+ const result = bridge.module.ccall('rac_embeddings_component_unload', 'number', ['number'], [this._embeddingsComponentHandle]);
90
+ bridge.checkResult(result, 'rac_embeddings_component_unload');
91
+ logger.info('Embeddings model unloaded');
92
+ }
93
+ /** Check if an embeddings model is loaded. */
94
+ get isModelLoaded() {
95
+ if (this._embeddingsComponentHandle === 0)
96
+ return false;
97
+ try {
98
+ return WASMBridge.shared.module.ccall('rac_embeddings_component_is_loaded', 'number', ['number'], [this._embeddingsComponentHandle]) === 1;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ /**
105
+ * Generate embedding for a single text.
106
+ */
107
+ async embed(text, options = {}) {
108
+ const bridge = this.requireBridge();
109
+ const m = bridge.module;
110
+ const handle = this.ensureEmbeddingsComponent();
111
+ if (!this.isModelLoaded) {
112
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No embeddings model loaded. Call loadModel() first.');
113
+ }
114
+ logger.debug(`Embedding text (${text.length} chars)`);
115
+ const textPtr = bridge.allocString(text);
116
+ // Build rac_embeddings_options_t
117
+ const optSize = m._rac_wasm_sizeof_embeddings_options();
118
+ const optPtr = m._malloc(optSize);
119
+ const eOpt = Offsets.embeddingsOptions;
120
+ m.setValue(optPtr + eOpt.normalize, options.normalize !== undefined ? options.normalize : -1, 'i32');
121
+ m.setValue(optPtr + eOpt.pooling, options.pooling !== undefined ? options.pooling : -1, 'i32');
122
+ m.setValue(optPtr + eOpt.nThreads, 0, 'i32'); // n_threads = auto
123
+ // Result struct
124
+ const resSize = m._rac_wasm_sizeof_embeddings_result();
125
+ const resPtr = m._malloc(resSize);
126
+ try {
127
+ const r = m.ccall('rac_embeddings_component_embed', 'number', ['number', 'number', 'number', 'number'], [handle, textPtr, optPtr, resPtr]);
128
+ bridge.checkResult(r, 'rac_embeddings_component_embed');
129
+ return readEmbeddingsResult(bridge, m, resPtr);
130
+ }
131
+ finally {
132
+ bridge.free(textPtr);
133
+ m._free(optPtr);
134
+ }
135
+ }
136
+ /**
137
+ * Generate embeddings for multiple texts at once.
138
+ */
139
+ async embedBatch(texts, options = {}) {
140
+ const bridge = this.requireBridge();
141
+ const m = bridge.module;
142
+ const handle = this.ensureEmbeddingsComponent();
143
+ if (!this.isModelLoaded) {
144
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No embeddings model loaded. Call loadModel() first.');
145
+ }
146
+ logger.debug(`Embedding batch of ${texts.length} texts`);
147
+ // Allocate array of string pointers
148
+ const textPtrs = [];
149
+ const textArrayPtr = m._malloc(texts.length * 4);
150
+ for (let i = 0; i < texts.length; i++) {
151
+ const ptr = bridge.allocString(texts[i]);
152
+ textPtrs.push(ptr);
153
+ m.setValue(textArrayPtr + i * 4, ptr, '*');
154
+ }
155
+ // Options
156
+ const optSize = m._rac_wasm_sizeof_embeddings_options();
157
+ const optPtr = m._malloc(optSize);
158
+ const eOpt2 = Offsets.embeddingsOptions;
159
+ m.setValue(optPtr + eOpt2.normalize, options.normalize !== undefined ? options.normalize : -1, 'i32');
160
+ m.setValue(optPtr + eOpt2.pooling, options.pooling !== undefined ? options.pooling : -1, 'i32');
161
+ m.setValue(optPtr + eOpt2.nThreads, 0, 'i32');
162
+ // Result
163
+ const resSize = m._rac_wasm_sizeof_embeddings_result();
164
+ const resPtr = m._malloc(resSize);
165
+ try {
166
+ const r = m.ccall('rac_embeddings_component_embed_batch', 'number', ['number', 'number', 'number', 'number', 'number'], [handle, textArrayPtr, texts.length, optPtr, resPtr]);
167
+ bridge.checkResult(r, 'rac_embeddings_component_embed_batch');
168
+ return readEmbeddingsResult(bridge, m, resPtr);
169
+ }
170
+ finally {
171
+ for (const ptr of textPtrs)
172
+ bridge.free(ptr);
173
+ m._free(textArrayPtr);
174
+ m._free(optPtr);
175
+ }
176
+ }
177
+ /**
178
+ * Compute cosine similarity between two embedding vectors.
179
+ * Pure TypeScript utility -- no WASM call needed.
180
+ */
181
+ cosineSimilarity(a, b) {
182
+ if (a.length !== b.length)
183
+ throw new Error('Vectors must have the same dimension');
184
+ let dot = 0;
185
+ let normA = 0;
186
+ let normB = 0;
187
+ for (let i = 0; i < a.length; i++) {
188
+ dot += a[i] * b[i];
189
+ normA += a[i] * a[i];
190
+ normB += b[i] * b[i];
191
+ }
192
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
193
+ return denominator === 0 ? 0 : dot / denominator;
194
+ }
195
+ /** Clean up the embeddings component. */
196
+ cleanup() {
197
+ if (this._embeddingsComponentHandle !== 0) {
198
+ try {
199
+ WASMBridge.shared.module.ccall('rac_embeddings_component_destroy', null, ['number'], [this._embeddingsComponentHandle]);
200
+ }
201
+ catch { /* ignore */ }
202
+ this._embeddingsComponentHandle = 0;
203
+ }
204
+ }
205
+ }
206
+ export const Embeddings = new EmbeddingsImpl();
207
+ // ---------------------------------------------------------------------------
208
+ // Helper: Read rac_embeddings_result_t from WASM memory
209
+ // ---------------------------------------------------------------------------
210
+ function readEmbeddingsResult(bridge, m, resPtr) {
211
+ // rac_embeddings_result_t (offsets from compiler via StructOffsets)
212
+ const eRes = Offsets.embeddingsResult;
213
+ const embeddingsArrayPtr = m.getValue(resPtr + eRes.embeddings, '*');
214
+ const numEmbeddings = m.getValue(resPtr + eRes.numEmbeddings, 'i32');
215
+ const dimension = m.getValue(resPtr + eRes.dimension, 'i32');
216
+ const processingTimeMs = m.getValue(resPtr + eRes.processingTimeMs, 'i32'); // low 32 bits of int64
217
+ const totalTokens = m.getValue(resPtr + eRes.totalTokens, 'i32');
218
+ const embeddings = [];
219
+ const ev = Offsets.embeddingVector;
220
+ for (let i = 0; i < numEmbeddings; i++) {
221
+ // Each rac_embedding_vector_t
222
+ const vecPtr = embeddingsArrayPtr + i * ev.structSize;
223
+ const dataPtr = m.getValue(vecPtr + ev.data, '*');
224
+ const vecDim = m.getValue(vecPtr + ev.dimension, 'i32');
225
+ const data = new Float32Array(vecDim);
226
+ if (dataPtr && vecDim > 0) {
227
+ data.set(bridge.readFloat32Array(dataPtr, vecDim));
228
+ }
229
+ embeddings.push({ data, dimension: vecDim });
230
+ }
231
+ // Free C result
232
+ m.ccall('rac_embeddings_result_free', null, ['number'], [resPtr]);
233
+ EventBus.shared.emit('embeddings.generated', SDKEventType.Generation, {
234
+ numEmbeddings,
235
+ dimension,
236
+ processingTimeMs,
237
+ });
238
+ return { embeddings, dimension, processingTimeMs, totalTokens };
239
+ }
240
+ //# sourceMappingURL=RunAnywhere+Embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+Embeddings.js","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+Embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOjD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;AAE3C,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,cAAc;IACT,aAAa,GAAG,YAAY,CAAC;IAC9B,0BAA0B,GAAG,CAAC,CAAC;IAE/B,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,aAAa;YAAE,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChE,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,0BAA0B,CAAC;QAElF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAS,iCAAiC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjH,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,0BAA0B,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAE,SAAkB;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,SAAS,SAAS,EAAE,CAAC,CAAC;QACtE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAEpG,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CACpB,qCAAqC,EAAE,QAAQ,EAC/C,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACxC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CACxB,CAAC;YACZ,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;YACnD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACxG,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC;YAAE,OAAO;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAChC,iCAAiC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CACjF,CAAC;QACZ,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,8CAA8C;IAC9C,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,CAAC;YACH,OAAQ,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACpC,oCAAoC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CACnF,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,UAA6B,EAAE;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,qDAAqD,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzC,iCAAiC;QACjC,MAAM,OAAO,GAAG,CAAC,CAAC,mCAAmC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACvC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;QAEjE,gBAAgB;QAChB,MAAM,OAAO,GAAG,CAAC,CAAC,kCAAkC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CACf,gCAAgC,EAAE,QAAQ,EAC1C,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACxC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CACxB,CAAC;YACZ,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAExD,OAAO,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe,EAAE,UAA6B,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,qDAAqD,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAEzD,oCAAoC;QACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,UAAU;QACV,MAAM,OAAO,GAAG,CAAC,CAAC,mCAAmC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACxC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAE9C,SAAS;QACT,MAAM,OAAO,GAAG,CAAC,CAAC,kCAAkC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CACf,sCAAsC,EAAE,QAAQ,EAChD,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAClD,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAC3C,CAAC;YACZ,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,sCAAsC,CAAC,CAAC;YAE9D,OAAO,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,KAAK,MAAM,GAAG,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,CAAe,EAAE,CAAe;QAC/C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAEnF,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC;IACnD,CAAC;IAED,yCAAyC;IACzC,OAAO;QACL,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAC5B,kCAAkC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CACxF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;AAE/C,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,SAAS,oBAAoB,CAC3B,MAAkB,EAClB,CAAuB,EACvB,MAAc;IAEd,oEAAoE;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACtC,MAAM,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,uBAAuB;IACnG,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,8BAA8B;QAC9B,MAAM,MAAM,GAAG,kBAAkB,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;QACtD,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB;IAChB,CAAC,CAAC,KAAK,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,UAAU,EAAE;QACpE,aAAa;QACb,SAAS;QACT,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Model Management Extension
3
+ *
4
+ * Handles model downloading, storage, and lifecycle in the browser.
5
+ * Uses Fetch API for downloads and Emscripten FS for storage.
6
+ *
7
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/
8
+ * ModelManagement/RunAnywhere+ModelManagement.swift
9
+ */
10
+ /** Download progress callback */
11
+ export type DownloadProgressCallback = (bytesDownloaded: number, totalBytes: number, progress: number) => void;
12
+ /** Model download options */
13
+ export interface ModelDownloadOptions {
14
+ /** Override destination path (default: /models/<filename>) */
15
+ destPath?: string;
16
+ /** Progress callback */
17
+ onProgress?: DownloadProgressCallback;
18
+ /** AbortController signal for cancellation */
19
+ signal?: AbortSignal;
20
+ }
21
+ export declare const ModelManagement: {
22
+ /**
23
+ * Download a model file from a URL to Emscripten FS.
24
+ *
25
+ * Uses Fetch API with ReadableStream for progress tracking.
26
+ * The downloaded file is stored in the Emscripten virtual filesystem
27
+ * and can be loaded by llama.cpp / whisper.cpp directly.
28
+ *
29
+ * @param url - URL to download the model from
30
+ * @param modelId - Identifier for the model
31
+ * @param options - Download options (progress callback, dest path, etc.)
32
+ * @returns Local path where model was saved (in Emscripten FS)
33
+ */
34
+ downloadModel(url: string, modelId: string, options?: ModelDownloadOptions): Promise<string>;
35
+ /**
36
+ * Check if a model file exists in Emscripten FS.
37
+ */
38
+ isModelDownloaded(path: string): boolean;
39
+ /**
40
+ * Delete a downloaded model from Emscripten FS.
41
+ */
42
+ deleteModel(path: string): void;
43
+ /**
44
+ * Get the size of a downloaded model file.
45
+ * @returns Size in bytes, or 0 if not found
46
+ */
47
+ getModelSize(path: string): number;
48
+ /**
49
+ * List all model files in the models directory.
50
+ */
51
+ listDownloadedModels(): string[];
52
+ };
53
+ //# sourceMappingURL=RunAnywhere+ModelManagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+ModelManagement.d.ts","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+ModelManagement.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG,CACrC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;AAEV,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAKD,eAAO,MAAM,eAAe;IAC1B;;;;;;;;;;;OAWG;uBAEI,MAAM,WACF,MAAM,YACN,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IA2FlB;;OAEG;4BACqB,MAAM,GAAG,OAAO;IASxC;;OAEG;sBACe,MAAM,GAAG,IAAI;IAU/B;;;OAGG;uBACgB,MAAM,GAAG,MAAM;IASlC;;OAEG;4BACqB,MAAM,EAAE;CAKjC,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Model Management Extension
3
+ *
4
+ * Handles model downloading, storage, and lifecycle in the browser.
5
+ * Uses Fetch API for downloads and Emscripten FS for storage.
6
+ *
7
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/
8
+ * ModelManagement/RunAnywhere+ModelManagement.swift
9
+ */
10
+ import { RunAnywhere } from '../RunAnywhere';
11
+ import { WASMBridge } from '../../Foundation/WASMBridge';
12
+ import { SDKError } from '../../Foundation/ErrorTypes';
13
+ import { SDKLogger } from '../../Foundation/SDKLogger';
14
+ import { EventBus } from '../../Foundation/EventBus';
15
+ import { SDKEventType } from '../../types/enums';
16
+ const logger = new SDKLogger('ModelManagement');
17
+ /** Models directory in Emscripten FS */
18
+ const MODELS_DIR = '/models';
19
+ export const ModelManagement = {
20
+ /**
21
+ * Download a model file from a URL to Emscripten FS.
22
+ *
23
+ * Uses Fetch API with ReadableStream for progress tracking.
24
+ * The downloaded file is stored in the Emscripten virtual filesystem
25
+ * and can be loaded by llama.cpp / whisper.cpp directly.
26
+ *
27
+ * @param url - URL to download the model from
28
+ * @param modelId - Identifier for the model
29
+ * @param options - Download options (progress callback, dest path, etc.)
30
+ * @returns Local path where model was saved (in Emscripten FS)
31
+ */
32
+ async downloadModel(url, modelId, options = {}) {
33
+ if (!RunAnywhere.isInitialized) {
34
+ throw SDKError.notInitialized();
35
+ }
36
+ const bridge = WASMBridge.shared;
37
+ const m = bridge.module;
38
+ // Determine destination path
39
+ const filename = url.split('/').pop() ?? `${modelId}.gguf`;
40
+ const destPath = options.destPath ?? `${MODELS_DIR}/${filename}`;
41
+ logger.info(`Downloading model: ${modelId} from ${url}`);
42
+ EventBus.shared.emit('model.downloadStarted', SDKEventType.Model, { modelId, url });
43
+ // Ensure models directory exists
44
+ try {
45
+ m.FS.mkdir(MODELS_DIR);
46
+ }
47
+ catch {
48
+ // Directory already exists
49
+ }
50
+ try {
51
+ const response = await fetch(url, { signal: options.signal });
52
+ if (!response.ok) {
53
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
54
+ }
55
+ const contentLength = parseInt(response.headers.get('content-length') ?? '0', 10);
56
+ const reader = response.body?.getReader();
57
+ if (!reader) {
58
+ throw new Error('ReadableStream not supported');
59
+ }
60
+ const chunks = [];
61
+ let downloaded = 0;
62
+ while (true) {
63
+ const { done, value } = await reader.read();
64
+ if (done)
65
+ break;
66
+ chunks.push(value);
67
+ downloaded += value.length;
68
+ const progress = contentLength > 0 ? downloaded / contentLength : 0;
69
+ options.onProgress?.(downloaded, contentLength, progress);
70
+ EventBus.shared.emit('model.downloadProgress', SDKEventType.Model, {
71
+ modelId,
72
+ progress,
73
+ bytesDownloaded: downloaded,
74
+ totalBytes: contentLength,
75
+ });
76
+ }
77
+ // Combine chunks
78
+ const totalData = new Uint8Array(downloaded);
79
+ let offset = 0;
80
+ for (const chunk of chunks) {
81
+ totalData.set(chunk, offset);
82
+ offset += chunk.length;
83
+ }
84
+ // Write to Emscripten FS
85
+ m.FS.writeFile(destPath, totalData);
86
+ // Verify
87
+ const stat = m.FS.stat(destPath);
88
+ logger.info(`Model downloaded: ${modelId} (${(stat.size / 1024 / 1024).toFixed(1)} MB) -> ${destPath}`);
89
+ EventBus.shared.emit('model.downloadCompleted', SDKEventType.Model, {
90
+ modelId,
91
+ localPath: destPath,
92
+ sizeBytes: stat.size,
93
+ });
94
+ return destPath;
95
+ }
96
+ catch (error) {
97
+ const message = error instanceof Error ? error.message : String(error);
98
+ logger.error(`Download failed for ${modelId}: ${message}`);
99
+ EventBus.shared.emit('model.downloadFailed', SDKEventType.Model, {
100
+ modelId,
101
+ error: message,
102
+ });
103
+ throw error;
104
+ }
105
+ },
106
+ /**
107
+ * Check if a model file exists in Emscripten FS.
108
+ */
109
+ isModelDownloaded(path) {
110
+ try {
111
+ const m = WASMBridge.shared.module;
112
+ return m.FS.analyzePath(path).exists;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ },
118
+ /**
119
+ * Delete a downloaded model from Emscripten FS.
120
+ */
121
+ deleteModel(path) {
122
+ try {
123
+ const m = WASMBridge.shared.module;
124
+ m.FS.unlink(path);
125
+ logger.info(`Model deleted: ${path}`);
126
+ }
127
+ catch (error) {
128
+ logger.error(`Failed to delete model: ${error}`);
129
+ }
130
+ },
131
+ /**
132
+ * Get the size of a downloaded model file.
133
+ * @returns Size in bytes, or 0 if not found
134
+ */
135
+ getModelSize(path) {
136
+ try {
137
+ const m = WASMBridge.shared.module;
138
+ return m.FS.stat(path).size;
139
+ }
140
+ catch {
141
+ return 0;
142
+ }
143
+ },
144
+ /**
145
+ * List all model files in the models directory.
146
+ */
147
+ listDownloadedModels() {
148
+ // Note: Emscripten FS readdir requires node-like API
149
+ // For now, return empty -- this will be enhanced with OPFS in Phase 5
150
+ return [];
151
+ },
152
+ };
153
+ //# sourceMappingURL=RunAnywhere+ModelManagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+ModelManagement.js","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+ModelManagement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Speech-to-Text Extension
3
+ *
4
+ * Adds STT (speech recognition) capabilities via sherpa-onnx WASM.
5
+ * Supports both offline (Whisper) and online (streaming Zipformer) models.
6
+ *
7
+ * Uses the sherpa-onnx C struct packing helpers from sherpa-onnx-asr.js
8
+ * to properly allocate config structs in WASM memory (NOT JSON strings).
9
+ *
10
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/STT/
11
+ *
12
+ * Usage:
13
+ * import { STT } from '@runanywhere/web';
14
+ *
15
+ * // Load model files (downloaded separately)
16
+ * await STT.loadModel({
17
+ * modelId: 'whisper-tiny-en',
18
+ * type: 'whisper',
19
+ * modelFiles: {
20
+ * encoder: '/models/whisper-tiny-en/encoder.onnx',
21
+ * decoder: '/models/whisper-tiny-en/decoder.onnx',
22
+ * tokens: '/models/whisper-tiny-en/tokens.txt',
23
+ * },
24
+ * });
25
+ *
26
+ * const result = await STT.transcribe(audioFloat32Array);
27
+ * console.log(result.text);
28
+ */
29
+ import { STTModelType } from './STTTypes';
30
+ import type { STTModelConfig, STTTranscriptionResult } from './STTTypes';
31
+ export { STTModelType } from './STTTypes';
32
+ export type { STTModelConfig, STTWhisperFiles, STTZipformerFiles, STTParaformerFiles, STTTranscriptionResult, STTWord } from './STTTypes';
33
+ export interface STTTranscribeOptions {
34
+ language?: string;
35
+ sampleRate?: number;
36
+ }
37
+ /** Callback for streaming STT partial results */
38
+ export type STTStreamCallback = (text: string, isFinal: boolean) => void;
39
+ declare class STTImpl {
40
+ readonly extensionName = "STT";
41
+ private _offlineRecognizerHandle;
42
+ private _onlineRecognizerHandle;
43
+ private _currentModelType;
44
+ private _currentModelId;
45
+ /** Returns the currently loaded STT model type. */
46
+ get currentModelType(): STTModelType;
47
+ /**
48
+ * Load an STT model via sherpa-onnx.
49
+ * Model files must already be written to sherpa-onnx virtual FS
50
+ * (use SherpaONNXBridge.shared.downloadAndWrite() or .writeFile()).
51
+ */
52
+ loadModel(config: STTModelConfig): Promise<void>;
53
+ /** Unload the STT model. */
54
+ unloadModel(): Promise<void>;
55
+ /** Check if an STT model is loaded. */
56
+ get isModelLoaded(): boolean;
57
+ /** Get the current model ID. */
58
+ get modelId(): string;
59
+ /**
60
+ * Transcribe audio data (offline / non-streaming).
61
+ *
62
+ * @param audioSamples - Float32Array of PCM audio samples (mono, 16kHz)
63
+ * @param options - Transcription options
64
+ * @returns Transcription result
65
+ */
66
+ transcribe(audioSamples: Float32Array, options?: STTTranscribeOptions): Promise<STTTranscriptionResult>;
67
+ /** Internal: Transcribe via online recognizer (for streaming models used non-streaming) */
68
+ _transcribeViaOnline(audioSamples: Float32Array, options?: STTTranscribeOptions): Promise<STTTranscriptionResult>;
69
+ /**
70
+ * Create a streaming transcription session.
71
+ * Returns an object to feed audio chunks and get results.
72
+ */
73
+ createStreamingSession(options?: STTTranscribeOptions): STTStreamingSession;
74
+ /** Clean up the STT resources. */
75
+ cleanup(): void;
76
+ }
77
+ export declare const STT: STTImpl;
78
+ /** Returns the currently loaded STT model type. */
79
+ export declare function getCurrentSTTModelType(): STTModelType;
80
+ export interface STTStreamingSession {
81
+ /** Feed audio samples to the recognizer */
82
+ acceptWaveform(samples: Float32Array, sampleRate?: number): void;
83
+ /** Signal end of audio input */
84
+ inputFinished(): void;
85
+ /** Get current partial/final result */
86
+ getResult(): {
87
+ text: string;
88
+ isEndpoint: boolean;
89
+ };
90
+ /** Reset after endpoint */
91
+ reset(): void;
92
+ /** Destroy the streaming session */
93
+ destroy(): void;
94
+ }
95
+ //# sourceMappingURL=RunAnywhere+STT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+STT.d.ts","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+STT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAA0D,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAejI,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1I,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AA8HzE,cAAM,OAAO;IACX,QAAQ,CAAC,aAAa,SAAS;IAC/B,OAAO,CAAC,wBAAwB,CAAK;IACrC,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,OAAO,CAAC,eAAe,CAAM;IAE7B,mDAAmD;IACnD,IAAI,gBAAgB,IAAI,YAAY,CAEnC;IAED;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDtD,4BAA4B;IACtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,uCAAuC;IACvC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,gCAAgC;IAChC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;;OAMG;IACG,UAAU,CACd,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,sBAAsB,CAAC;IA6DlC,2FAA2F;IACrF,oBAAoB,CACxB,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,sBAAsB,CAAC;IAuClC;;;OAGG;IACH,sBAAsB,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB;IAW/E,kCAAkC;IAClC,OAAO,IAAI,IAAI;CAkBhB;AAED,eAAO,MAAM,GAAG,SAAgB,CAAC;AAEjC,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,YAAY,CAErD;AAMD,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,gCAAgC;IAChC,aAAa,IAAI,IAAI,CAAC;IACtB,uCAAuC;IACvC,SAAS,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,2BAA2B;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd,oCAAoC;IACpC,OAAO,IAAI,IAAI,CAAC;CACjB"}