@runanywhere/web-llamacpp 0.1.0-beta.10

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 (94) hide show
  1. package/README.md +75 -0
  2. package/dist/Extensions/DiffusionTypes.d.ts +64 -0
  3. package/dist/Extensions/DiffusionTypes.d.ts.map +1 -0
  4. package/dist/Extensions/DiffusionTypes.js +28 -0
  5. package/dist/Extensions/DiffusionTypes.js.map +1 -0
  6. package/dist/Extensions/EmbeddingsTypes.d.ts +33 -0
  7. package/dist/Extensions/EmbeddingsTypes.d.ts.map +1 -0
  8. package/dist/Extensions/EmbeddingsTypes.js +13 -0
  9. package/dist/Extensions/EmbeddingsTypes.js.map +1 -0
  10. package/dist/Extensions/RunAnywhere+Diffusion.d.ts +44 -0
  11. package/dist/Extensions/RunAnywhere+Diffusion.d.ts.map +1 -0
  12. package/dist/Extensions/RunAnywhere+Diffusion.js +185 -0
  13. package/dist/Extensions/RunAnywhere+Diffusion.js.map +1 -0
  14. package/dist/Extensions/RunAnywhere+Embeddings.d.ts +56 -0
  15. package/dist/Extensions/RunAnywhere+Embeddings.d.ts.map +1 -0
  16. package/dist/Extensions/RunAnywhere+Embeddings.js +236 -0
  17. package/dist/Extensions/RunAnywhere+Embeddings.js.map +1 -0
  18. package/dist/Extensions/RunAnywhere+StructuredOutput.d.ts +69 -0
  19. package/dist/Extensions/RunAnywhere+StructuredOutput.d.ts.map +1 -0
  20. package/dist/Extensions/RunAnywhere+StructuredOutput.js +194 -0
  21. package/dist/Extensions/RunAnywhere+StructuredOutput.js.map +1 -0
  22. package/dist/Extensions/RunAnywhere+TextGeneration.d.ts +87 -0
  23. package/dist/Extensions/RunAnywhere+TextGeneration.d.ts.map +1 -0
  24. package/dist/Extensions/RunAnywhere+TextGeneration.js +525 -0
  25. package/dist/Extensions/RunAnywhere+TextGeneration.js.map +1 -0
  26. package/dist/Extensions/RunAnywhere+ToolCalling.d.ts +82 -0
  27. package/dist/Extensions/RunAnywhere+ToolCalling.d.ts.map +1 -0
  28. package/dist/Extensions/RunAnywhere+ToolCalling.js +574 -0
  29. package/dist/Extensions/RunAnywhere+ToolCalling.js.map +1 -0
  30. package/dist/Extensions/RunAnywhere+VLM.d.ts +57 -0
  31. package/dist/Extensions/RunAnywhere+VLM.d.ts.map +1 -0
  32. package/dist/Extensions/RunAnywhere+VLM.js +258 -0
  33. package/dist/Extensions/RunAnywhere+VLM.js.map +1 -0
  34. package/dist/Extensions/ToolCallingTypes.d.ts +78 -0
  35. package/dist/Extensions/ToolCallingTypes.d.ts.map +1 -0
  36. package/dist/Extensions/ToolCallingTypes.js +8 -0
  37. package/dist/Extensions/ToolCallingTypes.js.map +1 -0
  38. package/dist/Extensions/VLMTypes.d.ts +16 -0
  39. package/dist/Extensions/VLMTypes.d.ts.map +1 -0
  40. package/dist/Extensions/VLMTypes.js +18 -0
  41. package/dist/Extensions/VLMTypes.js.map +1 -0
  42. package/dist/Foundation/AnalyticsEventsBridge.d.ts +38 -0
  43. package/dist/Foundation/AnalyticsEventsBridge.d.ts.map +1 -0
  44. package/dist/Foundation/AnalyticsEventsBridge.js +394 -0
  45. package/dist/Foundation/AnalyticsEventsBridge.js.map +1 -0
  46. package/dist/Foundation/LlamaCppBridge.d.ts +182 -0
  47. package/dist/Foundation/LlamaCppBridge.d.ts.map +1 -0
  48. package/dist/Foundation/LlamaCppBridge.js +483 -0
  49. package/dist/Foundation/LlamaCppBridge.js.map +1 -0
  50. package/dist/Foundation/LlamaCppOffsets.d.ts +32 -0
  51. package/dist/Foundation/LlamaCppOffsets.d.ts.map +1 -0
  52. package/dist/Foundation/LlamaCppOffsets.js +191 -0
  53. package/dist/Foundation/LlamaCppOffsets.js.map +1 -0
  54. package/dist/Foundation/PlatformAdapter.d.ts +109 -0
  55. package/dist/Foundation/PlatformAdapter.d.ts.map +1 -0
  56. package/dist/Foundation/PlatformAdapter.js +417 -0
  57. package/dist/Foundation/PlatformAdapter.js.map +1 -0
  58. package/dist/Foundation/TelemetryService.d.ts +96 -0
  59. package/dist/Foundation/TelemetryService.d.ts.map +1 -0
  60. package/dist/Foundation/TelemetryService.js +345 -0
  61. package/dist/Foundation/TelemetryService.js.map +1 -0
  62. package/dist/Foundation/WASMAnalyticsEmitter.d.ts +29 -0
  63. package/dist/Foundation/WASMAnalyticsEmitter.d.ts.map +1 -0
  64. package/dist/Foundation/WASMAnalyticsEmitter.js +70 -0
  65. package/dist/Foundation/WASMAnalyticsEmitter.js.map +1 -0
  66. package/dist/Infrastructure/VLMWorkerBridge.d.ts +219 -0
  67. package/dist/Infrastructure/VLMWorkerBridge.d.ts.map +1 -0
  68. package/dist/Infrastructure/VLMWorkerBridge.js +288 -0
  69. package/dist/Infrastructure/VLMWorkerBridge.js.map +1 -0
  70. package/dist/Infrastructure/VLMWorkerRuntime.d.ts +38 -0
  71. package/dist/Infrastructure/VLMWorkerRuntime.d.ts.map +1 -0
  72. package/dist/Infrastructure/VLMWorkerRuntime.js +620 -0
  73. package/dist/Infrastructure/VLMWorkerRuntime.js.map +1 -0
  74. package/dist/LlamaCPP.d.ts +49 -0
  75. package/dist/LlamaCPP.d.ts.map +1 -0
  76. package/dist/LlamaCPP.js +63 -0
  77. package/dist/LlamaCPP.js.map +1 -0
  78. package/dist/LlamaCppProvider.d.ts +32 -0
  79. package/dist/LlamaCppProvider.d.ts.map +1 -0
  80. package/dist/LlamaCppProvider.js +106 -0
  81. package/dist/LlamaCppProvider.js.map +1 -0
  82. package/dist/index.d.ts +43 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +41 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/workers/vlm-worker.d.ts +9 -0
  87. package/dist/workers/vlm-worker.d.ts.map +1 -0
  88. package/dist/workers/vlm-worker.js +10 -0
  89. package/dist/workers/vlm-worker.js.map +1 -0
  90. package/package.json +69 -0
  91. package/wasm/racommons-llamacpp-webgpu.js +159 -0
  92. package/wasm/racommons-llamacpp-webgpu.wasm +0 -0
  93. package/wasm/racommons-llamacpp.js +129 -0
  94. package/wasm/racommons-llamacpp.wasm +0 -0
@@ -0,0 +1,394 @@
1
+ /**
2
+ * AnalyticsEventsBridge.ts
3
+ *
4
+ * Bridges C++ analytics events (rac_analytics_events_set_callback) to the
5
+ * TypeScript EventBus. Mirrors the role of TelemetryBridge.cpp in React Native.
6
+ *
7
+ * Responsibilities:
8
+ * 1. Register a JS function pointer via module.addFunction() using Emscripten's
9
+ * dynamic function table — signature 'viii' (void, i32 type, ptr data, ptr userData)
10
+ * 2. Call _rac_analytics_events_set_callback(callbackPtr, 0) to wire up WASM
11
+ * 3. On each callback: read event_type + union fields from WASM memory
12
+ * 4. Emit typed events to TypeScript EventBus
13
+ * 5. Forward raw event+data to TelemetryService for batching
14
+ */
15
+ import { EventBus, SDKEventType, SDKLogger } from '@runanywhere/web';
16
+ const logger = new SDKLogger('AnalyticsEventsBridge');
17
+ // ---------------------------------------------------------------------------
18
+ // C++ rac_event_type_t constants (from rac_analytics_events.h)
19
+ // ---------------------------------------------------------------------------
20
+ var RACEventType;
21
+ (function (RACEventType) {
22
+ // LLM (100-199)
23
+ RACEventType[RACEventType["LLM_MODEL_LOAD_STARTED"] = 100] = "LLM_MODEL_LOAD_STARTED";
24
+ RACEventType[RACEventType["LLM_MODEL_LOAD_COMPLETED"] = 101] = "LLM_MODEL_LOAD_COMPLETED";
25
+ RACEventType[RACEventType["LLM_MODEL_LOAD_FAILED"] = 102] = "LLM_MODEL_LOAD_FAILED";
26
+ RACEventType[RACEventType["LLM_MODEL_UNLOADED"] = 103] = "LLM_MODEL_UNLOADED";
27
+ RACEventType[RACEventType["LLM_GENERATION_STARTED"] = 110] = "LLM_GENERATION_STARTED";
28
+ RACEventType[RACEventType["LLM_GENERATION_COMPLETED"] = 111] = "LLM_GENERATION_COMPLETED";
29
+ RACEventType[RACEventType["LLM_GENERATION_FAILED"] = 112] = "LLM_GENERATION_FAILED";
30
+ RACEventType[RACEventType["LLM_FIRST_TOKEN"] = 113] = "LLM_FIRST_TOKEN";
31
+ RACEventType[RACEventType["LLM_STREAMING_UPDATE"] = 114] = "LLM_STREAMING_UPDATE";
32
+ // STT (200-299)
33
+ RACEventType[RACEventType["STT_MODEL_LOAD_STARTED"] = 200] = "STT_MODEL_LOAD_STARTED";
34
+ RACEventType[RACEventType["STT_MODEL_LOAD_COMPLETED"] = 201] = "STT_MODEL_LOAD_COMPLETED";
35
+ RACEventType[RACEventType["STT_MODEL_LOAD_FAILED"] = 202] = "STT_MODEL_LOAD_FAILED";
36
+ RACEventType[RACEventType["STT_MODEL_UNLOADED"] = 203] = "STT_MODEL_UNLOADED";
37
+ RACEventType[RACEventType["STT_TRANSCRIPTION_STARTED"] = 210] = "STT_TRANSCRIPTION_STARTED";
38
+ RACEventType[RACEventType["STT_TRANSCRIPTION_COMPLETED"] = 211] = "STT_TRANSCRIPTION_COMPLETED";
39
+ RACEventType[RACEventType["STT_TRANSCRIPTION_FAILED"] = 212] = "STT_TRANSCRIPTION_FAILED";
40
+ RACEventType[RACEventType["STT_PARTIAL_TRANSCRIPT"] = 213] = "STT_PARTIAL_TRANSCRIPT";
41
+ // TTS (300-399)
42
+ RACEventType[RACEventType["TTS_VOICE_LOAD_STARTED"] = 300] = "TTS_VOICE_LOAD_STARTED";
43
+ RACEventType[RACEventType["TTS_VOICE_LOAD_COMPLETED"] = 301] = "TTS_VOICE_LOAD_COMPLETED";
44
+ RACEventType[RACEventType["TTS_VOICE_LOAD_FAILED"] = 302] = "TTS_VOICE_LOAD_FAILED";
45
+ RACEventType[RACEventType["TTS_VOICE_UNLOADED"] = 303] = "TTS_VOICE_UNLOADED";
46
+ RACEventType[RACEventType["TTS_SYNTHESIS_STARTED"] = 310] = "TTS_SYNTHESIS_STARTED";
47
+ RACEventType[RACEventType["TTS_SYNTHESIS_COMPLETED"] = 311] = "TTS_SYNTHESIS_COMPLETED";
48
+ RACEventType[RACEventType["TTS_SYNTHESIS_FAILED"] = 312] = "TTS_SYNTHESIS_FAILED";
49
+ RACEventType[RACEventType["TTS_SYNTHESIS_CHUNK"] = 313] = "TTS_SYNTHESIS_CHUNK";
50
+ // VAD (400-499)
51
+ RACEventType[RACEventType["VAD_STARTED"] = 400] = "VAD_STARTED";
52
+ RACEventType[RACEventType["VAD_STOPPED"] = 401] = "VAD_STOPPED";
53
+ RACEventType[RACEventType["VAD_SPEECH_STARTED"] = 402] = "VAD_SPEECH_STARTED";
54
+ RACEventType[RACEventType["VAD_SPEECH_ENDED"] = 403] = "VAD_SPEECH_ENDED";
55
+ RACEventType[RACEventType["VAD_PAUSED"] = 404] = "VAD_PAUSED";
56
+ RACEventType[RACEventType["VAD_RESUMED"] = 405] = "VAD_RESUMED";
57
+ // Voice Agent (500-599)
58
+ RACEventType[RACEventType["VOICE_AGENT_TURN_STARTED"] = 500] = "VOICE_AGENT_TURN_STARTED";
59
+ RACEventType[RACEventType["VOICE_AGENT_TURN_COMPLETED"] = 501] = "VOICE_AGENT_TURN_COMPLETED";
60
+ RACEventType[RACEventType["VOICE_AGENT_TURN_FAILED"] = 502] = "VOICE_AGENT_TURN_FAILED";
61
+ RACEventType[RACEventType["VOICE_AGENT_STT_STATE_CHANGED"] = 510] = "VOICE_AGENT_STT_STATE_CHANGED";
62
+ RACEventType[RACEventType["VOICE_AGENT_LLM_STATE_CHANGED"] = 511] = "VOICE_AGENT_LLM_STATE_CHANGED";
63
+ RACEventType[RACEventType["VOICE_AGENT_TTS_STATE_CHANGED"] = 512] = "VOICE_AGENT_TTS_STATE_CHANGED";
64
+ RACEventType[RACEventType["VOICE_AGENT_ALL_READY"] = 513] = "VOICE_AGENT_ALL_READY";
65
+ // SDK Lifecycle (600-699)
66
+ RACEventType[RACEventType["SDK_INIT_STARTED"] = 600] = "SDK_INIT_STARTED";
67
+ RACEventType[RACEventType["SDK_INIT_COMPLETED"] = 601] = "SDK_INIT_COMPLETED";
68
+ RACEventType[RACEventType["SDK_INIT_FAILED"] = 602] = "SDK_INIT_FAILED";
69
+ RACEventType[RACEventType["SDK_MODELS_LOADED"] = 603] = "SDK_MODELS_LOADED";
70
+ // Model Download (700-719)
71
+ RACEventType[RACEventType["MODEL_DOWNLOAD_STARTED"] = 700] = "MODEL_DOWNLOAD_STARTED";
72
+ RACEventType[RACEventType["MODEL_DOWNLOAD_PROGRESS"] = 701] = "MODEL_DOWNLOAD_PROGRESS";
73
+ RACEventType[RACEventType["MODEL_DOWNLOAD_COMPLETED"] = 702] = "MODEL_DOWNLOAD_COMPLETED";
74
+ RACEventType[RACEventType["MODEL_DOWNLOAD_FAILED"] = 703] = "MODEL_DOWNLOAD_FAILED";
75
+ RACEventType[RACEventType["MODEL_DOWNLOAD_CANCELLED"] = 704] = "MODEL_DOWNLOAD_CANCELLED";
76
+ // Model Extraction (710-719)
77
+ RACEventType[RACEventType["MODEL_EXTRACTION_STARTED"] = 710] = "MODEL_EXTRACTION_STARTED";
78
+ RACEventType[RACEventType["MODEL_EXTRACTION_PROGRESS"] = 711] = "MODEL_EXTRACTION_PROGRESS";
79
+ RACEventType[RACEventType["MODEL_EXTRACTION_COMPLETED"] = 712] = "MODEL_EXTRACTION_COMPLETED";
80
+ RACEventType[RACEventType["MODEL_EXTRACTION_FAILED"] = 713] = "MODEL_EXTRACTION_FAILED";
81
+ // Model Deletion (720-729)
82
+ RACEventType[RACEventType["MODEL_DELETED"] = 720] = "MODEL_DELETED";
83
+ // Storage (800-899)
84
+ RACEventType[RACEventType["STORAGE_CACHE_CLEARED"] = 800] = "STORAGE_CACHE_CLEARED";
85
+ RACEventType[RACEventType["STORAGE_CACHE_CLEAR_FAILED"] = 801] = "STORAGE_CACHE_CLEAR_FAILED";
86
+ RACEventType[RACEventType["STORAGE_TEMP_CLEANED"] = 802] = "STORAGE_TEMP_CLEANED";
87
+ // Device (900-999)
88
+ RACEventType[RACEventType["DEVICE_REGISTERED"] = 900] = "DEVICE_REGISTERED";
89
+ RACEventType[RACEventType["DEVICE_REGISTRATION_FAILED"] = 901] = "DEVICE_REGISTRATION_FAILED";
90
+ // Network (1000-1099)
91
+ RACEventType[RACEventType["NETWORK_CONNECTIVITY_CHANGED"] = 1000] = "NETWORK_CONNECTIVITY_CHANGED";
92
+ // Error (1100-1199)
93
+ RACEventType[RACEventType["SDK_ERROR"] = 1100] = "SDK_ERROR";
94
+ // Framework (1200-1299)
95
+ RACEventType[RACEventType["FRAMEWORK_MODELS_REQUESTED"] = 1200] = "FRAMEWORK_MODELS_REQUESTED";
96
+ RACEventType[RACEventType["FRAMEWORK_MODELS_RETRIEVED"] = 1201] = "FRAMEWORK_MODELS_RETRIEVED";
97
+ })(RACEventType || (RACEventType = {}));
98
+ // ---------------------------------------------------------------------------
99
+ // AnalyticsEventsBridge
100
+ // ---------------------------------------------------------------------------
101
+ /**
102
+ * Registers the analytics callback with the WASM module and translates
103
+ * C++ analytics events into TypeScript EventBus emissions.
104
+ */
105
+ export class AnalyticsEventsBridge {
106
+ _module = null;
107
+ _callbackPtr = 0;
108
+ _telemetryCallback = null;
109
+ /**
110
+ * Register this bridge with the WASM module.
111
+ * Must be called after the module is loaded.
112
+ */
113
+ register(module, telemetryCallback) {
114
+ if (this._callbackPtr !== 0) {
115
+ logger.warning('AnalyticsEventsBridge already registered');
116
+ return;
117
+ }
118
+ this._module = module;
119
+ this._telemetryCallback = telemetryCallback ?? null;
120
+ if (typeof module._rac_analytics_events_set_callback !== 'function') {
121
+ logger.warning('_rac_analytics_events_set_callback not available in WASM module');
122
+ return;
123
+ }
124
+ // Register JS function as WASM function pointer.
125
+ // Signature 'viii': void(i32 type, i32 dataPtr, i32 userData)
126
+ this._callbackPtr = module.addFunction((eventType, dataPtr, _userData) => {
127
+ this.handleEvent(eventType, dataPtr);
128
+ }, 'viii');
129
+ const result = module._rac_analytics_events_set_callback(this._callbackPtr, 0);
130
+ if (result === 0) {
131
+ logger.info('Analytics events callback registered');
132
+ }
133
+ else {
134
+ logger.warning(`Analytics events callback registration returned: ${result}`);
135
+ }
136
+ }
137
+ /**
138
+ * Unregister and free the function pointer.
139
+ */
140
+ cleanup() {
141
+ if (!this._module || this._callbackPtr === 0)
142
+ return;
143
+ if (typeof this._module._rac_analytics_events_set_callback === 'function') {
144
+ this._module._rac_analytics_events_set_callback(0, 0);
145
+ }
146
+ if (typeof this._module.removeFunction === 'function') {
147
+ this._module.removeFunction(this._callbackPtr);
148
+ }
149
+ this._callbackPtr = 0;
150
+ this._module = null;
151
+ this._telemetryCallback = null;
152
+ logger.debug('Analytics events callback unregistered');
153
+ }
154
+ // ---------------------------------------------------------------------------
155
+ // Event dispatch
156
+ // ---------------------------------------------------------------------------
157
+ handleEvent(eventType, dataPtr) {
158
+ // Forward to TelemetryService (before reading memory, which is valid only during callback)
159
+ if (this._telemetryCallback) {
160
+ try {
161
+ this._telemetryCallback(eventType, dataPtr);
162
+ }
163
+ catch {
164
+ // Silent — telemetry must never crash the app
165
+ }
166
+ }
167
+ // Emit to public TypeScript EventBus
168
+ try {
169
+ this.emitToEventBus(eventType, dataPtr);
170
+ }
171
+ catch {
172
+ // Silent — analytics events must never crash the app
173
+ }
174
+ }
175
+ emitToEventBus(eventType, dataPtr) {
176
+ const m = this._module;
177
+ if (!m)
178
+ return;
179
+ // The rac_analytics_event_data_t struct layout (WASM32):
180
+ // offset 0: int32 type (4 bytes)
181
+ // offset 4: union data (largest member determines size)
182
+ const DATA_OFFSET = 4; // after the type field
183
+ switch (eventType) {
184
+ // ------- LLM events -------
185
+ case RACEventType.LLM_GENERATION_COMPLETED: {
186
+ // rac_analytics_llm_generation_t fields (all at DATA_OFFSET):
187
+ // char* generation_id [+0]
188
+ // char* model_id [+4]
189
+ // char* model_name [+8]
190
+ // int32 input_tokens [+12]
191
+ // int32 output_tokens [+16]
192
+ // double duration_ms [+20] (8 bytes, aligned to 8)
193
+ // double tps [+28]
194
+ // int32 is_streaming [+36]
195
+ // double ttft_ms [+40] (8 bytes)
196
+ const base = dataPtr + DATA_OFFSET;
197
+ const modelId = this.readStringAt(m, base + 4);
198
+ const outputTokens = m.getValue(base + 16, 'i32');
199
+ const durationMs = m.getValue(base + 20, 'double');
200
+ const tokensPerSec = m.getValue(base + 28, 'double');
201
+ EventBus.shared.emit('generation.completed', SDKEventType.Generation, {
202
+ tokensUsed: outputTokens,
203
+ latencyMs: durationMs,
204
+ });
205
+ // tokensPerSec and modelId are available for observers that need them
206
+ logger.debug(`LLM generation completed: modelId=${modelId} tps=${tokensPerSec.toFixed(1)}`);
207
+ break;
208
+ }
209
+ case RACEventType.LLM_GENERATION_STARTED: {
210
+ EventBus.shared.emit('generation.started', SDKEventType.Generation, { prompt: '' });
211
+ break;
212
+ }
213
+ case RACEventType.LLM_GENERATION_FAILED: {
214
+ const base = dataPtr + DATA_OFFSET;
215
+ const errPtr = m.getValue(base + 60, 'i32'); // error_message is near end of struct
216
+ const error = errPtr ? m.UTF8ToString(errPtr) : 'generation failed';
217
+ EventBus.shared.emit('generation.failed', SDKEventType.Error, { error });
218
+ break;
219
+ }
220
+ case RACEventType.LLM_MODEL_LOAD_COMPLETED: {
221
+ // rac_analytics_llm_model_t: char* model_id [+0], char* model_name [+4], int64 size [+8], double duration_ms [+16]
222
+ const base = dataPtr + DATA_OFFSET;
223
+ const modelId = this.readStringAt(m, base);
224
+ const durationMs = m.getValue(base + 16, 'double');
225
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, {
226
+ modelId,
227
+ component: 'llm',
228
+ category: 'llm',
229
+ loadTimeMs: durationMs,
230
+ });
231
+ break;
232
+ }
233
+ case RACEventType.LLM_MODEL_LOAD_FAILED: {
234
+ const base = dataPtr + DATA_OFFSET;
235
+ const modelId = this.readStringAt(m, base);
236
+ const errPtr = m.getValue(base + 28, 'i32');
237
+ const error = errPtr ? m.UTF8ToString(errPtr) : 'model load failed';
238
+ EventBus.shared.emit('model.loadFailed', SDKEventType.Model, { modelId, error });
239
+ break;
240
+ }
241
+ case RACEventType.LLM_MODEL_UNLOADED: {
242
+ const base = dataPtr + DATA_OFFSET;
243
+ const modelId = this.readStringAt(m, base);
244
+ EventBus.shared.emit('model.unloaded', SDKEventType.Model, { modelId, category: 'llm' });
245
+ break;
246
+ }
247
+ // ------- STT events -------
248
+ case RACEventType.STT_TRANSCRIPTION_COMPLETED: {
249
+ // rac_analytics_stt_transcription_t (WASM32, 4-byte aligned doubles):
250
+ // char* transcription_id [+0], char* model_id [+4], char* model_name [+8],
251
+ // char* text [+12], float confidence [+16],
252
+ // double duration_ms [+20], double audio_length_ms [+28],
253
+ // int32 audio_size_bytes [+36], int32 word_count [+40],
254
+ // double real_time_factor [+44], char* language [+52],
255
+ // int32 sample_rate [+56], int32 is_streaming [+60],
256
+ // int32 framework [+64], int32 error_code [+68], char* error_message [+72]
257
+ const base = dataPtr + DATA_OFFSET;
258
+ const textPtr = m.getValue(base + 12, 'i32');
259
+ const text = textPtr ? m.UTF8ToString(textPtr) : '';
260
+ const confidence = m.getValue(base + 16, 'float');
261
+ const audioDurationMs = m.getValue(base + 28, 'double');
262
+ const wordCount = m.getValue(base + 40, 'i32');
263
+ EventBus.shared.emit('stt.transcribed', SDKEventType.Voice, {
264
+ text,
265
+ confidence,
266
+ audioDurationMs,
267
+ wordCount,
268
+ });
269
+ break;
270
+ }
271
+ case RACEventType.STT_TRANSCRIPTION_FAILED: {
272
+ // rac_analytics_stt_transcription_t: error_message at [+72]
273
+ const base = dataPtr + DATA_OFFSET;
274
+ const errPtr = m.getValue(base + 72, 'i32');
275
+ const error = errPtr ? m.UTF8ToString(errPtr) : 'transcription failed';
276
+ EventBus.shared.emit('stt.transcriptionFailed', SDKEventType.Error, { error });
277
+ break;
278
+ }
279
+ case RACEventType.STT_MODEL_LOAD_COMPLETED: {
280
+ const base = dataPtr + DATA_OFFSET;
281
+ const modelId = this.readStringAt(m, base);
282
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, {
283
+ modelId,
284
+ component: 'stt',
285
+ category: 'stt',
286
+ });
287
+ break;
288
+ }
289
+ // ------- TTS events -------
290
+ case RACEventType.TTS_SYNTHESIS_COMPLETED: {
291
+ // rac_analytics_tts_synthesis_t (WASM32, 4-byte aligned doubles):
292
+ // char* synthesis_id [+0], char* model_id [+4], char* model_name [+8],
293
+ // int32 character_count [+12],
294
+ // double audio_duration_ms [+16], int32 audio_size_bytes [+24],
295
+ // double processing_duration_ms [+28], double characters_per_second [+36],
296
+ // int32 sample_rate [+44], int32 framework [+48],
297
+ // int32 error_code [+52], char* error_message [+56]
298
+ const base = dataPtr + DATA_OFFSET;
299
+ const characterCount = m.getValue(base + 12, 'i32');
300
+ const audioDurationMs = m.getValue(base + 16, 'double');
301
+ const processingMs = m.getValue(base + 28, 'double');
302
+ const charsPerSec = m.getValue(base + 36, 'double');
303
+ const sampleRate = m.getValue(base + 44, 'i32');
304
+ EventBus.shared.emit('tts.synthesized', SDKEventType.Voice, {
305
+ durationMs: audioDurationMs,
306
+ processingMs,
307
+ sampleRate,
308
+ characterCount,
309
+ charsPerSec,
310
+ });
311
+ logger.debug(`TTS synthesis completed: durationMs=${audioDurationMs.toFixed(0)} processingMs=${processingMs.toFixed(0)}`);
312
+ break;
313
+ }
314
+ case RACEventType.TTS_SYNTHESIS_FAILED: {
315
+ // rac_analytics_tts_synthesis_t: error_message at [+56]
316
+ const base = dataPtr + DATA_OFFSET;
317
+ const errPtr = m.getValue(base + 56, 'i32');
318
+ const error = errPtr ? m.UTF8ToString(errPtr) : 'synthesis failed';
319
+ EventBus.shared.emit('tts.synthesisFailed', SDKEventType.Error, { error });
320
+ break;
321
+ }
322
+ case RACEventType.TTS_VOICE_LOAD_COMPLETED: {
323
+ const base = dataPtr + DATA_OFFSET;
324
+ const modelId = this.readStringAt(m, base);
325
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, {
326
+ modelId,
327
+ component: 'tts',
328
+ category: 'tts',
329
+ });
330
+ break;
331
+ }
332
+ // ------- VAD events -------
333
+ case RACEventType.VAD_SPEECH_STARTED:
334
+ EventBus.shared.emit('vad.speechStarted', SDKEventType.Voice, { activity: 'started' });
335
+ break;
336
+ case RACEventType.VAD_SPEECH_ENDED: {
337
+ // rac_analytics_vad_t: double speech_duration_ms [+0], float energy_level [+8]
338
+ const base = dataPtr + DATA_OFFSET;
339
+ const speechDurationMs = m.getValue(base, 'double');
340
+ EventBus.shared.emit('vad.speechEnded', SDKEventType.Voice, {
341
+ activity: 'ended',
342
+ speechDurationMs,
343
+ });
344
+ break;
345
+ }
346
+ // ------- Model download events -------
347
+ case RACEventType.MODEL_DOWNLOAD_PROGRESS: {
348
+ // rac_analytics_model_download_t: char* model_id [+0], double progress [+4 or aligned 8], int64 bytes_downloaded, int64 total_bytes
349
+ const base = dataPtr + DATA_OFFSET;
350
+ const modelId = this.readStringAt(m, base);
351
+ // progress field: after char* (4 bytes), aligned to 8 → offset 8
352
+ const progress = m.getValue(base + 8, 'double');
353
+ const bytesDownloaded = m.getValue(base + 16, 'i64');
354
+ const totalBytes = m.getValue(base + 24, 'i64');
355
+ EventBus.shared.emit('model.downloadProgress', SDKEventType.Model, {
356
+ modelId,
357
+ progress,
358
+ bytesDownloaded,
359
+ totalBytes,
360
+ });
361
+ break;
362
+ }
363
+ case RACEventType.MODEL_DOWNLOAD_COMPLETED: {
364
+ const base = dataPtr + DATA_OFFSET;
365
+ const modelId = this.readStringAt(m, base);
366
+ const sizeBytes = m.getValue(base + 40, 'i64'); // size_bytes field
367
+ EventBus.shared.emit('model.downloadCompleted', SDKEventType.Model, {
368
+ modelId,
369
+ sizeBytes,
370
+ });
371
+ break;
372
+ }
373
+ case RACEventType.MODEL_DOWNLOAD_FAILED: {
374
+ const base = dataPtr + DATA_OFFSET;
375
+ const modelId = this.readStringAt(m, base);
376
+ const errPtr = m.getValue(base + 56, 'i32');
377
+ const error = errPtr ? m.UTF8ToString(errPtr) : 'download failed';
378
+ EventBus.shared.emit('model.downloadFailed', SDKEventType.Model, { modelId, error });
379
+ break;
380
+ }
381
+ default:
382
+ // Other events (SDK lifecycle, storage, etc.) are telemetry-only
383
+ logger.debug(`Unhandled analytics event type: ${eventType}`);
384
+ break;
385
+ }
386
+ }
387
+ readStringAt(m, ptrAddr) {
388
+ const ptr = m.getValue(ptrAddr, 'i32');
389
+ if (!ptr)
390
+ return '';
391
+ return m.UTF8ToString(ptr);
392
+ }
393
+ }
394
+ //# sourceMappingURL=AnalyticsEventsBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsEventsBridge.js","sourceRoot":"","sources":["../../src/Foundation/AnalyticsEventsBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * LlamaCppBridge - Independent WASM module bridge for the llama.cpp backend
3
+ *
4
+ * Loads racommons-llamacpp.wasm (which contains rac_commons + llama.cpp)
5
+ * as a fully independent WASM module with its own Emscripten runtime,
6
+ * linear memory, and virtual filesystem.
7
+ *
8
+ * Follows the same pattern as SherpaONNXBridge in @runanywhere/web-onnx:
9
+ * - Singleton with lazy loading
10
+ * - Dynamic import of glue JS + fetch of .wasm binary
11
+ * - Async WebAssembly.instantiate
12
+ * - Own MEMFS for model files
13
+ * - Platform adapter registration
14
+ * - rac_init() + backend registration
15
+ *
16
+ * This module is completely independent from any core WASM — the core
17
+ * package (@runanywhere/web) is pure TypeScript.
18
+ */
19
+ import type { AccelerationMode } from '@runanywhere/web';
20
+ import './PlatformAdapter';
21
+ /**
22
+ * Emscripten module interface for the racommons-llamacpp WASM.
23
+ * Contains both core RACommons functions and llama.cpp backend functions.
24
+ */
25
+ export interface LlamaCppModule {
26
+ ccall: (ident: string, returnType: string | null, argTypes: string[], args: unknown[], opts?: object) => unknown;
27
+ cwrap: (ident: string, returnType: string | null, argTypes: string[]) => (...args: unknown[]) => unknown;
28
+ addFunction: (func: (...args: number[]) => number | void, signature: string) => number;
29
+ removeFunction: (ptr: number) => void;
30
+ _malloc: (size: number) => number;
31
+ _free: (ptr: number) => void;
32
+ setValue: (ptr: number, value: number, type: string) => void;
33
+ getValue: (ptr: number, type: string) => number;
34
+ UTF8ToString: (ptr: number, maxBytesToRead?: number) => string;
35
+ stringToUTF8: (str: string, outPtr: number, maxBytesToWrite: number) => void;
36
+ lengthBytesUTF8: (str: string) => number;
37
+ HEAPU8?: Uint8Array;
38
+ HEAPF32?: Float32Array;
39
+ _rac_init: (configPtr: number) => number;
40
+ _rac_shutdown: () => void;
41
+ _rac_wasm_ping: () => number;
42
+ _rac_wasm_sizeof_platform_adapter: () => number;
43
+ _rac_wasm_sizeof_config: () => number;
44
+ _rac_set_platform_adapter: (adapterPtr: number) => number;
45
+ _rac_error_message: (code: number) => number;
46
+ _rac_backend_llamacpp_register?: () => number;
47
+ _rac_backend_llamacpp_vlm_register?: () => number;
48
+ _rac_llm_component_create: (outHandlePtr: number) => number;
49
+ _rac_llm_component_load_model: (handle: number, pathPtr: number, idPtr: number, namePtr: number) => number;
50
+ _rac_llm_component_unload: (handle: number) => number;
51
+ _rac_llm_component_generate: (handle: number, promptPtr: number, optionsPtr: number, outResultPtr: number) => number;
52
+ _rac_llm_component_generate_stream: (handle: number, promptPtr: number, optionsPtr: number, tokenCb: number, completeCb: number, errorCb: number, userData: number) => number;
53
+ _rac_llm_component_cancel: (handle: number) => number;
54
+ _rac_llm_component_destroy: (handle: number) => void;
55
+ _rac_llm_component_is_loaded: (handle: number) => number;
56
+ _rac_llm_component_get_model_id: (handle: number) => number;
57
+ _rac_llm_result_free: (resultPtr: number) => void;
58
+ _rac_vlm_component_create?: (outHandlePtr: number) => number;
59
+ _rac_vlm_component_load_model?: (handle: number, modelPath: number, mmprojPath: number, modelId: number, modelName: number) => number;
60
+ _rac_vlm_component_process?: (handle: number, imagePtr: number, promptPtr: number, optionsPtr: number, resultPtr: number) => number;
61
+ _rac_vlm_component_destroy?: (handle: number) => void;
62
+ _rac_vlm_component_cancel?: (handle: number) => void;
63
+ _rac_vlm_result_free?: (resultPtr: number) => void;
64
+ _rac_wasm_sizeof_llm_options: () => number;
65
+ _rac_wasm_sizeof_llm_result: () => number;
66
+ _rac_wasm_sizeof_vlm_image: () => number;
67
+ _rac_wasm_sizeof_vlm_options: () => number;
68
+ _rac_wasm_sizeof_vlm_result: () => number;
69
+ _rac_wasm_sizeof_structured_output_config: () => number;
70
+ _rac_wasm_sizeof_embeddings_options: () => number;
71
+ _rac_wasm_sizeof_embeddings_result: () => number;
72
+ _rac_wasm_sizeof_diffusion_options: () => number;
73
+ _rac_wasm_sizeof_diffusion_result: () => number;
74
+ _rac_wasm_create_llm_options_default: () => number;
75
+ _rac_structured_output_prepare_prompt?: (promptPtr: number, schemaPtr: number) => number;
76
+ _rac_structured_output_validate?: (textPtr: number, schemaPtr: number) => number;
77
+ _rac_embeddings_component_create?: (outHandlePtr: number) => number;
78
+ _rac_diffusion_component_create?: (outHandlePtr: number) => number;
79
+ _rac_tool_call_parse?: (textPtr: number, outResultPtr: number) => number;
80
+ _rac_telemetry_manager_create?: (env: number, deviceIdPtr: number, platformPtr: number, sdkVersionPtr: number) => number;
81
+ _rac_telemetry_manager_destroy?: (handle: number) => void;
82
+ _rac_telemetry_manager_set_device_info?: (handle: number, modelPtr: number, osVersionPtr: number) => void;
83
+ _rac_telemetry_manager_set_http_callback?: (handle: number, callbackPtr: number, userData: number) => void;
84
+ _rac_telemetry_manager_track_analytics?: (handle: number, eventType: number, dataPtr: number) => number;
85
+ _rac_telemetry_manager_flush?: (handle: number) => number;
86
+ _rac_telemetry_manager_http_complete?: (handle: number, success: number, responsePtr: number, errorPtr: number) => void;
87
+ _rac_analytics_events_set_callback?: (callbackPtr: number, userData: number) => number;
88
+ _rac_analytics_events_has_callback?: () => number;
89
+ _rac_analytics_emit_stt_model_load_completed?: (modelIdPtr: number, modelNamePtr: number, durationMs: number, framework: number) => void;
90
+ _rac_analytics_emit_stt_model_load_failed?: (modelIdPtr: number, errorCode: number, errorMsgPtr: number) => void;
91
+ _rac_analytics_emit_stt_transcription_completed?: (transcriptionIdPtr: number, modelIdPtr: number, textPtr: number, confidence: number, durationMs: number, audioLengthMs: number, audioSizeBytes: number, wordCount: number, realTimeFactor: number, languagePtr: number, sampleRate: number, framework: number) => void;
92
+ _rac_analytics_emit_stt_transcription_failed?: (transcriptionIdPtr: number, modelIdPtr: number, errorCode: number, errorMsgPtr: number) => void;
93
+ _rac_analytics_emit_tts_voice_load_completed?: (modelIdPtr: number, modelNamePtr: number, durationMs: number, framework: number) => void;
94
+ _rac_analytics_emit_tts_voice_load_failed?: (modelIdPtr: number, errorCode: number, errorMsgPtr: number) => void;
95
+ _rac_analytics_emit_tts_synthesis_completed?: (synthesisIdPtr: number, modelIdPtr: number, characterCount: number, audioDurationMs: number, audioSizeBytes: number, processingDurationMs: number, charactersPerSecond: number, sampleRate: number, framework: number) => void;
96
+ _rac_analytics_emit_tts_synthesis_failed?: (synthesisIdPtr: number, modelIdPtr: number, errorCode: number, errorMsgPtr: number) => void;
97
+ _rac_analytics_emit_vad_speech_started?: () => void;
98
+ _rac_analytics_emit_vad_speech_ended?: (speechDurationMs: number, energyLevel: number) => void;
99
+ _rac_analytics_emit_model_download_started?: (modelIdPtr: number) => void;
100
+ _rac_analytics_emit_model_download_completed?: (modelIdPtr: number, fileSizeBytes: number, durationMs: number) => void;
101
+ _rac_analytics_emit_model_download_failed?: (modelIdPtr: number, errorMsgPtr: number) => void;
102
+ _rac_wasm_dev_config_is_available?: () => number;
103
+ _rac_wasm_dev_config_get_supabase_url?: () => number;
104
+ _rac_wasm_dev_config_get_supabase_key?: () => number;
105
+ _rac_wasm_dev_config_get_build_token?: () => number;
106
+ FS_createPath?: (parent: string, path: string, canRead: boolean, canWrite: boolean) => void;
107
+ FS_createDataFile?: (parent: string, name: string, data: Uint8Array, canRead: boolean, canWrite: boolean, canOwn: boolean) => void;
108
+ FS_unlink?: (path: string) => void;
109
+ FS_mkdir?: (path: string) => void;
110
+ FS_rmdir?: (path: string) => void;
111
+ FS_mount?: (type: any, opts: any, mountpoint: string) => void;
112
+ FS_unmount?: (mountpoint: string) => void;
113
+ WORKERFS?: any;
114
+ [key: string]: unknown;
115
+ }
116
+ export declare class LlamaCppBridge {
117
+ private static _instance;
118
+ private static _nextMountId;
119
+ private _module;
120
+ private _loaded;
121
+ private _loading;
122
+ private _accelerationMode;
123
+ private _platformAdapter;
124
+ private _analyticsEventsBridge;
125
+ private _telemetryService;
126
+ /** Override the default URL to the racommons-llamacpp.js glue file. */
127
+ wasmUrl: string | null;
128
+ /** Override the URL for the WebGPU variant. */
129
+ webgpuWasmUrl: string | null;
130
+ static get shared(): LlamaCppBridge;
131
+ get isLoaded(): boolean;
132
+ get module(): LlamaCppModule;
133
+ get accelerationMode(): AccelerationMode;
134
+ ensureLoaded(acceleration?: 'auto' | 'webgpu' | 'cpu'): Promise<void>;
135
+ private _doLoad;
136
+ private initRACommons;
137
+ private registerBackend;
138
+ /**
139
+ * Write a model file to this WASM module's Emscripten virtual filesystem.
140
+ */
141
+ writeFile(path: string, data: Uint8Array): void;
142
+ /**
143
+ * Write a model from a ReadableStream to this WASM module's Emscripten virtual filesystem.
144
+ * Useful for loading models without buffering the entire file in JS memory.
145
+ */
146
+ writeFileStream(path: string, stream: ReadableStream<Uint8Array>): Promise<void>;
147
+ /**
148
+ * Remove a file from this WASM module's filesystem.
149
+ */
150
+ unlinkFile(path: string): void;
151
+ /**
152
+ * Mount a File object into the WASM filesystem (if WORKERFS is available).
153
+ * Returns the path to the mounted file, or null if mounting failed/unsupported.
154
+ *
155
+ * @param file - The browser File object
156
+ * @returns The absolute path to the file in WASM FS (e.g. /mnt-123/model.gguf) or null
157
+ */
158
+ mountFile(file: File): string | null;
159
+ /**
160
+ * Unmount a directory (and remove it).
161
+ * @param mountDir - The directory path (e.g. /mnt-123)
162
+ */
163
+ unmount(mountPath: string): void;
164
+ private detectWebGPUWithJSPI;
165
+ allocString(str: string): number;
166
+ readString(ptr: number): string;
167
+ free(ptr: number): void;
168
+ writeBytes(src: Uint8Array, destPtr: number): void;
169
+ readBytes(srcPtr: number, length: number): Uint8Array;
170
+ readFloat32Array(srcPtr: number, count: number): Float32Array;
171
+ writeFloat32Array(src: Float32Array, destPtr: number): void;
172
+ readFloat32(ptr: number): number;
173
+ checkResult(result: number, operation: string): void;
174
+ getErrorMessage(resultCode: number): string;
175
+ callFunction<T = number>(funcName: string, returnType: string | null, argTypes: string[], args: unknown[], opts?: {
176
+ async?: boolean;
177
+ }): T;
178
+ wasmOffsetOf(name: string): number;
179
+ wasmSizeOf(name: string): number;
180
+ shutdown(): void;
181
+ }
182
+ //# sourceMappingURL=LlamaCppBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlamaCppBridge.d.ts","sourceRoot":"","sources":["../../src/Foundation/LlamaCppBridge.ts"],"names":[],"mappings":"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"}