@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,436 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Text Generation Extension
3
+ *
4
+ * Adds LLM text generation capabilities to RunAnywhere.
5
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/LLM/
6
+ *
7
+ * Usage:
8
+ * import { RunAnywhere } from '@runanywhere/web';
9
+ *
10
+ * await RunAnywhere.loadModel('tinyllama-1.1b-q4');
11
+ * const result = await RunAnywhere.generate('Hello!', { maxTokens: 100 });
12
+ * console.log(result.text);
13
+ *
14
+ * // Streaming
15
+ * for await (const token of RunAnywhere.generateStream('Tell me a story')) {
16
+ * process.stdout.write(token);
17
+ * }
18
+ */
19
+ import { RunAnywhere } from '../RunAnywhere';
20
+ import { WASMBridge } from '../../Foundation/WASMBridge';
21
+ import { Offsets } from '../../Foundation/StructOffsets';
22
+ import { SDKError, SDKErrorCode } from '../../Foundation/ErrorTypes';
23
+ import { SDKLogger } from '../../Foundation/SDKLogger';
24
+ import { EventBus } from '../../Foundation/EventBus';
25
+ import { SDKEventType, LLMFramework } from '../../types/enums';
26
+ const logger = new SDKLogger('TextGeneration');
27
+ // ---------------------------------------------------------------------------
28
+ // Text Generation Extension
29
+ // ---------------------------------------------------------------------------
30
+ class TextGenerationImpl {
31
+ extensionName = 'TextGeneration';
32
+ _llmComponentHandle = 0;
33
+ /** Ensure the SDK is initialized and return the bridge. */
34
+ requireBridge() {
35
+ if (!RunAnywhere.isInitialized) {
36
+ throw SDKError.notInitialized();
37
+ }
38
+ return WASMBridge.shared;
39
+ }
40
+ /** Ensure the LLM component is created. */
41
+ async ensureLLMComponent() {
42
+ if (this._llmComponentHandle !== 0) {
43
+ return this._llmComponentHandle;
44
+ }
45
+ const bridge = this.requireBridge();
46
+ const m = bridge.module;
47
+ // Allocate pointer for output handle
48
+ const handlePtr = m._malloc(4);
49
+ // {async: true} for JSPI -- component creation may init WebGPU context
50
+ const result = await bridge.callFunction('rac_llm_component_create', 'number', ['number'], [handlePtr], { async: true });
51
+ if (result !== 0) {
52
+ m._free(handlePtr);
53
+ bridge.checkResult(result, 'rac_llm_component_create');
54
+ }
55
+ this._llmComponentHandle = m.getValue(handlePtr, 'i32');
56
+ m._free(handlePtr);
57
+ logger.debug('LLM component created');
58
+ return this._llmComponentHandle;
59
+ }
60
+ /**
61
+ * Load an LLM model for text generation.
62
+ *
63
+ * @param modelPath - Path to the model file (in Emscripten FS)
64
+ * @param modelId - Model identifier
65
+ * @param modelName - Human-readable model name
66
+ */
67
+ async loadModel(modelPath, modelId, modelName) {
68
+ const bridge = this.requireBridge();
69
+ const handle = await this.ensureLLMComponent();
70
+ logger.info(`Loading LLM model: ${modelId} from ${modelPath}`);
71
+ EventBus.shared.emit('model.loadStarted', SDKEventType.Model, { modelId });
72
+ const pathPtr = bridge.allocString(modelPath);
73
+ const idPtr = bridge.allocString(modelId);
74
+ const namePtr = bridge.allocString(modelName ?? modelId);
75
+ try {
76
+ // {async: true} allows JSPI to suspend during WebGPU device/buffer
77
+ // initialization that happens inside load_model.
78
+ const result = await bridge.callFunction('rac_llm_component_load_model', 'number', ['number', 'number', 'number', 'number'], [handle, pathPtr, idPtr, namePtr], { async: true });
79
+ bridge.checkResult(result, 'rac_llm_component_load_model');
80
+ logger.info(`LLM model loaded: ${modelId}`);
81
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, { modelId });
82
+ }
83
+ catch (error) {
84
+ EventBus.shared.emit('model.loadFailed', SDKEventType.Model, {
85
+ modelId,
86
+ error: error instanceof Error ? error.message : String(error),
87
+ });
88
+ throw error;
89
+ }
90
+ finally {
91
+ bridge.free(pathPtr);
92
+ bridge.free(idPtr);
93
+ bridge.free(namePtr);
94
+ }
95
+ }
96
+ /**
97
+ * Unload the currently loaded LLM model.
98
+ */
99
+ async unloadModel() {
100
+ if (this._llmComponentHandle === 0)
101
+ return;
102
+ const bridge = this.requireBridge();
103
+ const result = await bridge.callFunction('rac_llm_component_unload', 'number', ['number'], [this._llmComponentHandle], { async: true });
104
+ bridge.checkResult(result, 'rac_llm_component_unload');
105
+ logger.info('LLM model unloaded');
106
+ }
107
+ /**
108
+ * Check if an LLM model is currently loaded.
109
+ */
110
+ get isModelLoaded() {
111
+ if (this._llmComponentHandle === 0)
112
+ return false;
113
+ try {
114
+ const m = WASMBridge.shared.module;
115
+ return m._rac_llm_component_is_loaded(this._llmComponentHandle) === 1;
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * Generate text from a prompt (non-streaming).
123
+ *
124
+ * Uses `ccall` with `{async: true}` so that Emscripten's JSPI / Asyncify
125
+ * can suspend the WASM stack for async WebGPU buffer operations. Without
126
+ * this the blocking C function traps with `RuntimeError: unreachable` on
127
+ * WebGPU builds because the browser event-loop cannot pump GPU command
128
+ * buffers while the main thread is blocked in a synchronous ccall.
129
+ *
130
+ * @param prompt - Input text prompt
131
+ * @param options - Generation options (temperature, maxTokens, etc.)
132
+ * @returns Generation result with text and metrics
133
+ */
134
+ async generate(prompt, options = {}) {
135
+ const bridge = this.requireBridge();
136
+ const m = bridge.module;
137
+ const handle = await this.ensureLLMComponent();
138
+ if (!this.isModelLoaded) {
139
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No LLM model loaded. Call loadModel() first.');
140
+ }
141
+ logger.debug(`Generating from prompt (${prompt.length} chars)`);
142
+ const startTime = performance.now();
143
+ EventBus.shared.emit('generation.started', SDKEventType.Generation, {
144
+ prompt: prompt.substring(0, 100),
145
+ });
146
+ // Allocate prompt string
147
+ const promptPtr = bridge.allocString(prompt);
148
+ // Create default options struct
149
+ const optionsPtr = m._rac_wasm_create_llm_options_default();
150
+ if (optionsPtr === 0) {
151
+ bridge.free(promptPtr);
152
+ throw new SDKError(SDKErrorCode.WASMMemoryError, 'Failed to allocate LLM options');
153
+ }
154
+ // Override options if provided (offsets from compiler via StructOffsets)
155
+ if (options.maxTokens !== undefined) {
156
+ m.setValue(optionsPtr + Offsets.llmOptions.maxTokens, options.maxTokens, 'i32');
157
+ }
158
+ if (options.temperature !== undefined) {
159
+ m.setValue(optionsPtr + Offsets.llmOptions.temperature, options.temperature, 'float');
160
+ }
161
+ if (options.topP !== undefined) {
162
+ m.setValue(optionsPtr + Offsets.llmOptions.topP, options.topP, 'float');
163
+ }
164
+ // Allocate and zero-initialise the result struct so any C++ code that
165
+ // reads a field before writing (e.g. checking `text != NULL`) does not
166
+ // encounter garbage memory.
167
+ const resultSize = m._rac_wasm_sizeof_llm_result();
168
+ const resultPtr = m._malloc(resultSize);
169
+ for (let i = 0; i < resultSize; i++)
170
+ m.setValue(resultPtr + i, 0, 'i8');
171
+ try {
172
+ // Call with {async: true} so Emscripten's JSPI / Asyncify can yield
173
+ // to the browser event-loop during WebGPU buffer map operations.
174
+ // On CPU-only builds this is harmless (the result is simply wrapped
175
+ // in an already-resolved Promise).
176
+ let result;
177
+ try {
178
+ logger.debug('Calling rac_llm_component_generate via ccall({async:true})');
179
+ const callResult = bridge.callFunction('rac_llm_component_generate', 'number', ['number', 'number', 'number', 'number'], [handle, promptPtr, optionsPtr, resultPtr], { async: true });
180
+ logger.debug(`ccall returned type=${typeof callResult}, isPromise=${callResult instanceof Promise}`);
181
+ result = await callResult;
182
+ logger.debug(`Generation returned result=${result}`);
183
+ }
184
+ catch (wasmErr) {
185
+ // Log the full error details including stack trace
186
+ if (wasmErr instanceof Error) {
187
+ logger.error(`WASM generation error: ${wasmErr.message}\nStack: ${wasmErr.stack}`);
188
+ }
189
+ else {
190
+ logger.error(`WASM generation error (raw): type=${typeof wasmErr}, value=${String(wasmErr)}`);
191
+ }
192
+ const detail = typeof wasmErr === 'number'
193
+ ? `WASM C++ exception (ptr=${wasmErr}). The model's chat template may be unsupported.`
194
+ : wasmErr instanceof Error ? wasmErr.message : String(wasmErr);
195
+ throw new SDKError(SDKErrorCode.GenerationFailed, `LLM generation crashed: ${detail}`);
196
+ }
197
+ bridge.checkResult(result, 'rac_llm_component_generate');
198
+ // Read result struct (offsets from compiler via StructOffsets)
199
+ const textPtr = m.getValue(resultPtr + Offsets.llmResult.text, '*');
200
+ const text = bridge.readString(textPtr);
201
+ const inputTokens = m.getValue(resultPtr + Offsets.llmResult.promptTokens, 'i32');
202
+ const outputTokens = m.getValue(resultPtr + Offsets.llmResult.completionTokens, 'i32');
203
+ const latencyMs = performance.now() - startTime;
204
+ const tokensPerSecond = outputTokens > 0 ? (outputTokens / (latencyMs / 1000)) : 0;
205
+ const genResult = {
206
+ text,
207
+ inputTokens,
208
+ tokensUsed: outputTokens,
209
+ modelUsed: bridge.readString(m._rac_llm_component_get_model_id(handle)),
210
+ latencyMs,
211
+ framework: LLMFramework.LlamaCpp,
212
+ hardwareUsed: bridge.accelerationMode,
213
+ tokensPerSecond,
214
+ thinkingTokens: 0,
215
+ responseTokens: outputTokens,
216
+ };
217
+ EventBus.shared.emit('generation.completed', SDKEventType.Generation, {
218
+ tokensUsed: outputTokens,
219
+ latencyMs,
220
+ });
221
+ // Free the text string allocated inside the result by the C++ side
222
+ m._rac_llm_result_free(resultPtr);
223
+ return genResult;
224
+ }
225
+ catch (error) {
226
+ EventBus.shared.emit('generation.failed', SDKEventType.Generation, {
227
+ error: error instanceof Error ? error.message : String(error),
228
+ });
229
+ throw error;
230
+ }
231
+ finally {
232
+ bridge.free(promptPtr);
233
+ m._free(optionsPtr);
234
+ // Free the result struct itself (separate from _rac_llm_result_free
235
+ // which only frees the inner `text` string).
236
+ m._free(resultPtr);
237
+ }
238
+ }
239
+ /**
240
+ * Generate text with streaming (returns AsyncIterable of tokens).
241
+ *
242
+ * Async because the underlying C call uses `{async: true}` so Emscripten's
243
+ * JSPI can suspend the WASM stack during WebGPU buffer operations. On
244
+ * CPU-only builds the result is simply an already-resolved Promise.
245
+ *
246
+ * @param prompt - Input text prompt
247
+ * @param options - Generation options
248
+ * @returns Streaming result with async token stream and final result promise
249
+ */
250
+ async generateStream(prompt, options = {}) {
251
+ const bridge = this.requireBridge();
252
+ const m = bridge.module;
253
+ const handle = await this.ensureLLMComponent();
254
+ if (!this.isModelLoaded) {
255
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No LLM model loaded. Call loadModel() first.');
256
+ }
257
+ // Token queue for async iteration
258
+ const tokenQueue = [];
259
+ let resolveNext = null;
260
+ let isDone = false;
261
+ let streamError = null;
262
+ // Result promise
263
+ let resolveResult = null;
264
+ let rejectResult = null;
265
+ const resultPromise = new Promise((resolve, reject) => {
266
+ resolveResult = resolve;
267
+ rejectResult = reject;
268
+ });
269
+ const startTime = performance.now();
270
+ let tokenCount = 0;
271
+ let fullText = '';
272
+ let timeToFirstToken;
273
+ // Register token callback
274
+ const tokenCbPtr = m.addFunction((tokenPtr, _userData) => {
275
+ const token = m.UTF8ToString(tokenPtr);
276
+ tokenCount++;
277
+ fullText += token;
278
+ if (timeToFirstToken === undefined) {
279
+ timeToFirstToken = performance.now() - startTime;
280
+ }
281
+ if (resolveNext) {
282
+ const resolve = resolveNext;
283
+ resolveNext = null;
284
+ resolve({ value: token, done: false });
285
+ }
286
+ else {
287
+ tokenQueue.push(token);
288
+ }
289
+ return 1; // RAC_TRUE = continue
290
+ }, 'iii');
291
+ // Register complete callback
292
+ const completeCbPtr = m.addFunction((_resultPtr, _userData) => {
293
+ isDone = true;
294
+ if (resolveNext) {
295
+ const resolve = resolveNext;
296
+ resolveNext = null;
297
+ resolve({ value: undefined, done: true });
298
+ }
299
+ const latencyMs = performance.now() - startTime;
300
+ const tokensPerSecond = tokenCount > 0 ? (tokenCount / (latencyMs / 1000)) : 0;
301
+ resolveResult?.({
302
+ text: fullText,
303
+ inputTokens: 0,
304
+ tokensUsed: tokenCount,
305
+ modelUsed: '',
306
+ latencyMs,
307
+ framework: LLMFramework.LlamaCpp,
308
+ hardwareUsed: bridge.accelerationMode,
309
+ tokensPerSecond,
310
+ timeToFirstTokenMs: timeToFirstToken,
311
+ thinkingTokens: 0,
312
+ responseTokens: tokenCount,
313
+ });
314
+ // Cleanup callback pointers
315
+ m.removeFunction(tokenCbPtr);
316
+ m.removeFunction(completeCbPtr);
317
+ m.removeFunction(errorCbPtr);
318
+ }, 'vii');
319
+ // Register error callback
320
+ const errorCbPtr = m.addFunction((errorCode, errorMsgPtr, _userData) => {
321
+ isDone = true;
322
+ const errorMsg = m.UTF8ToString(errorMsgPtr);
323
+ streamError = SDKError.fromRACResult(errorCode, errorMsg);
324
+ if (resolveNext) {
325
+ const resolve = resolveNext;
326
+ resolveNext = null;
327
+ resolve({ value: undefined, done: true });
328
+ }
329
+ rejectResult?.(streamError);
330
+ m.removeFunction(tokenCbPtr);
331
+ m.removeFunction(completeCbPtr);
332
+ m.removeFunction(errorCbPtr);
333
+ }, 'viii');
334
+ // Start streaming generation
335
+ const promptPtr = bridge.allocString(prompt);
336
+ const optionsPtr = m._rac_wasm_create_llm_options_default();
337
+ if (options.maxTokens !== undefined) {
338
+ m.setValue(optionsPtr + Offsets.llmOptions.maxTokens, options.maxTokens, 'i32');
339
+ }
340
+ if (options.temperature !== undefined) {
341
+ m.setValue(optionsPtr + Offsets.llmOptions.temperature, options.temperature, 'float');
342
+ }
343
+ let startResult;
344
+ try {
345
+ logger.debug('Calling rac_llm_component_generate_stream via ccall({async:true})');
346
+ const callResult = bridge.callFunction('rac_llm_component_generate_stream', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [handle, promptPtr, optionsPtr, tokenCbPtr, completeCbPtr, errorCbPtr, 0], { async: true });
347
+ logger.debug(`ccall returned type=${typeof callResult}, isPromise=${callResult instanceof Promise}`);
348
+ startResult = await callResult;
349
+ logger.debug(`Stream generation returned result=${startResult}`);
350
+ }
351
+ catch (wasmErr) {
352
+ bridge.free(promptPtr);
353
+ m._free(optionsPtr);
354
+ m.removeFunction(tokenCbPtr);
355
+ m.removeFunction(completeCbPtr);
356
+ m.removeFunction(errorCbPtr);
357
+ if (wasmErr instanceof Error) {
358
+ logger.error(`WASM stream generation error: ${wasmErr.message}\nStack: ${wasmErr.stack}`);
359
+ }
360
+ else {
361
+ logger.error(`WASM stream generation error (raw): type=${typeof wasmErr}, value=${String(wasmErr)}`);
362
+ }
363
+ const detail = typeof wasmErr === 'number'
364
+ ? `WASM C++ exception (ptr=${wasmErr}). The model's chat template may be unsupported.`
365
+ : wasmErr instanceof Error ? wasmErr.message : String(wasmErr);
366
+ throw new SDKError(SDKErrorCode.GenerationFailed, `LLM streaming generation crashed: ${detail}`);
367
+ }
368
+ bridge.free(promptPtr);
369
+ m._free(optionsPtr);
370
+ if (startResult !== 0) {
371
+ m.removeFunction(tokenCbPtr);
372
+ m.removeFunction(completeCbPtr);
373
+ m.removeFunction(errorCbPtr);
374
+ throw SDKError.fromRACResult(startResult, 'Failed to start streaming generation');
375
+ }
376
+ // Create async iterable
377
+ const stream = {
378
+ [Symbol.asyncIterator]() {
379
+ return {
380
+ next() {
381
+ if (streamError) {
382
+ return Promise.reject(streamError);
383
+ }
384
+ if (tokenQueue.length > 0) {
385
+ return Promise.resolve({ value: tokenQueue.shift(), done: false });
386
+ }
387
+ if (isDone) {
388
+ return Promise.resolve({ value: undefined, done: true });
389
+ }
390
+ return new Promise((resolve) => {
391
+ resolveNext = resolve;
392
+ });
393
+ },
394
+ };
395
+ },
396
+ };
397
+ return {
398
+ stream,
399
+ result: resultPromise,
400
+ cancel: () => {
401
+ m._rac_llm_component_cancel(handle);
402
+ },
403
+ };
404
+ }
405
+ /**
406
+ * Cancel any in-progress generation.
407
+ */
408
+ cancel() {
409
+ if (this._llmComponentHandle === 0)
410
+ return;
411
+ try {
412
+ const m = WASMBridge.shared.module;
413
+ m._rac_llm_component_cancel(this._llmComponentHandle);
414
+ }
415
+ catch {
416
+ // Ignore cancel errors
417
+ }
418
+ }
419
+ /**
420
+ * Clean up the LLM component (frees memory).
421
+ */
422
+ cleanup() {
423
+ if (this._llmComponentHandle !== 0) {
424
+ try {
425
+ const m = WASMBridge.shared.module;
426
+ m._rac_llm_component_destroy(this._llmComponentHandle);
427
+ }
428
+ catch {
429
+ // Ignore cleanup errors
430
+ }
431
+ this._llmComponentHandle = 0;
432
+ }
433
+ }
434
+ }
435
+ export const TextGeneration = new TextGenerationImpl();
436
+ //# sourceMappingURL=RunAnywhere+TextGeneration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+TextGeneration.js","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+TextGeneration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Tool Calling Extension
3
+ *
4
+ * Adds tool calling (function calling) capabilities to LLM generation.
5
+ * The LLM can request external actions (API calls, calculations, etc.)
6
+ * and the SDK orchestrates the generate -> parse -> execute -> loop cycle.
7
+ *
8
+ * Architecture:
9
+ * - C++ (rac_tool_calling.h): ALL parsing, prompt formatting, JSON handling
10
+ * - This file: Tool registry, executor storage, orchestration
11
+ *
12
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/LLM/
13
+ *
14
+ * Usage:
15
+ * import { ToolCalling } from '@runanywhere/web';
16
+ *
17
+ * ToolCalling.registerTool(
18
+ * { name: 'get_weather', description: 'Gets weather', parameters: [...] },
19
+ * async (args) => ({ temperature: '72F', condition: 'Sunny' })
20
+ * );
21
+ *
22
+ * const result = await ToolCalling.generateWithTools('What is the weather?');
23
+ * console.log(result.text);
24
+ */
25
+ import { type ToolValue, type ToolDefinition, type ToolCall, type ToolResult, type ToolCallingOptions, type ToolCallingResult, type ToolExecutor } from './ToolCallingTypes';
26
+ export { ToolCallFormat, type ToolValue, type ToolParameterType, type ToolParameter, type ToolDefinition, type ToolCall, type ToolResult, type ToolCallingOptions, type ToolCallingResult, type ToolExecutor, } from './ToolCallingTypes';
27
+ /** Create a ToolValue from a plain JS value. */
28
+ export declare function toToolValue(val: unknown): ToolValue;
29
+ /** Convert a ToolValue to a plain JS value. */
30
+ export declare function fromToolValue(tv: ToolValue): unknown;
31
+ /** Get a string argument from tool call args. */
32
+ export declare function getStringArg(args: Record<string, ToolValue>, key: string): string | undefined;
33
+ /** Get a number argument from tool call args. */
34
+ export declare function getNumberArg(args: Record<string, ToolValue>, key: string): number | undefined;
35
+ declare class ToolCallingImpl {
36
+ readonly extensionName = "ToolCalling";
37
+ private toolRegistry;
38
+ /**
39
+ * Register a tool that the LLM can use.
40
+ *
41
+ * @param definition - Tool definition (name, description, parameters)
42
+ * @param executor - Async function that executes the tool
43
+ */
44
+ registerTool(definition: ToolDefinition, executor: ToolExecutor): void;
45
+ /**
46
+ * Unregister a tool by name.
47
+ */
48
+ unregisterTool(name: string): void;
49
+ /**
50
+ * Get all registered tool definitions.
51
+ */
52
+ getRegisteredTools(): ToolDefinition[];
53
+ /**
54
+ * Clear all registered tools.
55
+ */
56
+ clearTools(): void;
57
+ /**
58
+ * Execute a tool call by looking up the registered executor.
59
+ */
60
+ executeTool(toolCall: ToolCall): Promise<ToolResult>;
61
+ /**
62
+ * Generate a response with tool calling support.
63
+ *
64
+ * Orchestrates: generate -> parse -> execute -> loop
65
+ *
66
+ * @param prompt - The user's prompt
67
+ * @param options - Tool calling options
68
+ * @returns Result with final text, all tool calls, and their results
69
+ */
70
+ generateWithTools(prompt: string, options?: ToolCallingOptions): Promise<ToolCallingResult>;
71
+ /**
72
+ * Clean up the tool calling extension (clears all registered tools).
73
+ */
74
+ cleanup(): void;
75
+ /**
76
+ * Continue generation after manual tool execution.
77
+ * Use when autoExecute is false.
78
+ */
79
+ continueWithToolResult(previousPrompt: string, toolCall: ToolCall, toolResult: ToolResult, options?: ToolCallingOptions): Promise<ToolCallingResult>;
80
+ }
81
+ export declare const ToolCalling: ToolCallingImpl;
82
+ //# sourceMappingURL=RunAnywhere+ToolCalling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+ToolCalling.d.ts","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+ToolCalling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAoC5B,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAcnD;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAepD;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7F;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7F;AA4VD,cAAM,eAAe;IACnB,QAAQ,CAAC,aAAa,iBAAiB;IACvC,OAAO,CAAC,YAAY,CAAqC;IAEzD;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAKtE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;IAItC;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IA6B1D;;;;;;;;OAQG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;IAsG7B;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACG,sBAAsB,CAC1B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;CAY9B;AAED,eAAO,MAAM,WAAW,iBAAwB,CAAC"}