@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,236 @@
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, SDKError, SDKErrorCode, SDKLogger, EventBus, SDKEventType } from '@runanywhere/web';
25
+ import { LlamaCppBridge } from '../Foundation/LlamaCppBridge';
26
+ import { Offsets } from '../Foundation/LlamaCppOffsets';
27
+ export { EmbeddingsNormalize, EmbeddingsPooling, } from './EmbeddingsTypes';
28
+ const logger = new SDKLogger('Embeddings');
29
+ // ---------------------------------------------------------------------------
30
+ // Embeddings Extension
31
+ // ---------------------------------------------------------------------------
32
+ class EmbeddingsImpl {
33
+ extensionName = 'Embeddings';
34
+ _embeddingsComponentHandle = 0;
35
+ requireBridge() {
36
+ if (!RunAnywhere.isInitialized)
37
+ throw SDKError.notInitialized();
38
+ return LlamaCppBridge.shared;
39
+ }
40
+ ensureEmbeddingsComponent() {
41
+ if (this._embeddingsComponentHandle !== 0)
42
+ return this._embeddingsComponentHandle;
43
+ const bridge = this.requireBridge();
44
+ const m = bridge.module;
45
+ const handlePtr = m._malloc(4);
46
+ const result = bridge.callFunction('rac_embeddings_component_create', 'number', ['number'], [handlePtr]);
47
+ if (result !== 0) {
48
+ m._free(handlePtr);
49
+ bridge.checkResult(result, 'rac_embeddings_component_create');
50
+ }
51
+ this._embeddingsComponentHandle = m.getValue(handlePtr, 'i32');
52
+ m._free(handlePtr);
53
+ logger.debug('Embeddings component created');
54
+ return this._embeddingsComponentHandle;
55
+ }
56
+ /**
57
+ * Load an embedding model (GGUF format).
58
+ */
59
+ async loadModel(modelPath, modelId, modelName) {
60
+ const bridge = this.requireBridge();
61
+ const m = bridge.module;
62
+ const handle = this.ensureEmbeddingsComponent();
63
+ logger.info(`Loading embeddings model: ${modelId} from ${modelPath}`);
64
+ EventBus.shared.emit('model.loadStarted', SDKEventType.Model, { modelId, component: 'embeddings' });
65
+ const pathPtr = bridge.allocString(modelPath);
66
+ const idPtr = bridge.allocString(modelId);
67
+ const namePtr = bridge.allocString(modelName ?? modelId);
68
+ try {
69
+ const result = m.ccall('rac_embeddings_component_load_model', 'number', ['number', 'number', 'number', 'number'], [handle, pathPtr, idPtr, namePtr]);
70
+ bridge.checkResult(result, 'rac_embeddings_component_load_model');
71
+ logger.info(`Embeddings model loaded: ${modelId}`);
72
+ EventBus.shared.emit('model.loadCompleted', SDKEventType.Model, { modelId, component: 'embeddings' });
73
+ }
74
+ finally {
75
+ bridge.free(pathPtr);
76
+ bridge.free(idPtr);
77
+ bridge.free(namePtr);
78
+ }
79
+ }
80
+ /** Unload the embeddings model. */
81
+ async unloadModel() {
82
+ if (this._embeddingsComponentHandle === 0)
83
+ return;
84
+ const bridge = this.requireBridge();
85
+ const result = bridge.module.ccall('rac_embeddings_component_unload', 'number', ['number'], [this._embeddingsComponentHandle]);
86
+ bridge.checkResult(result, 'rac_embeddings_component_unload');
87
+ logger.info('Embeddings model unloaded');
88
+ }
89
+ /** Check if an embeddings model is loaded. */
90
+ get isModelLoaded() {
91
+ if (this._embeddingsComponentHandle === 0)
92
+ return false;
93
+ try {
94
+ return LlamaCppBridge.shared.module.ccall('rac_embeddings_component_is_loaded', 'number', ['number'], [this._embeddingsComponentHandle]) === 1;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Generate embedding for a single text.
102
+ */
103
+ async embed(text, options = {}) {
104
+ const bridge = this.requireBridge();
105
+ const m = bridge.module;
106
+ const handle = this.ensureEmbeddingsComponent();
107
+ if (!this.isModelLoaded) {
108
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No embeddings model loaded. Call loadModel() first.');
109
+ }
110
+ logger.debug(`Embedding text (${text.length} chars)`);
111
+ const textPtr = bridge.allocString(text);
112
+ // Build rac_embeddings_options_t
113
+ const optSize = m._rac_wasm_sizeof_embeddings_options();
114
+ const optPtr = m._malloc(optSize);
115
+ const eOpt = Offsets.embeddingsOptions;
116
+ m.setValue(optPtr + eOpt.normalize, options.normalize !== undefined ? options.normalize : -1, 'i32');
117
+ m.setValue(optPtr + eOpt.pooling, options.pooling !== undefined ? options.pooling : -1, 'i32');
118
+ m.setValue(optPtr + eOpt.nThreads, 0, 'i32'); // n_threads = auto
119
+ // Result struct
120
+ const resSize = m._rac_wasm_sizeof_embeddings_result();
121
+ const resPtr = m._malloc(resSize);
122
+ try {
123
+ const r = m.ccall('rac_embeddings_component_embed', 'number', ['number', 'number', 'number', 'number'], [handle, textPtr, optPtr, resPtr]);
124
+ bridge.checkResult(r, 'rac_embeddings_component_embed');
125
+ return readEmbeddingsResult(bridge, m, resPtr);
126
+ }
127
+ finally {
128
+ bridge.free(textPtr);
129
+ m._free(optPtr);
130
+ }
131
+ }
132
+ /**
133
+ * Generate embeddings for multiple texts at once.
134
+ */
135
+ async embedBatch(texts, options = {}) {
136
+ const bridge = this.requireBridge();
137
+ const m = bridge.module;
138
+ const handle = this.ensureEmbeddingsComponent();
139
+ if (!this.isModelLoaded) {
140
+ throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No embeddings model loaded. Call loadModel() first.');
141
+ }
142
+ logger.debug(`Embedding batch of ${texts.length} texts`);
143
+ // Allocate array of string pointers
144
+ const textPtrs = [];
145
+ const textArrayPtr = m._malloc(texts.length * 4);
146
+ for (let i = 0; i < texts.length; i++) {
147
+ const ptr = bridge.allocString(texts[i]);
148
+ textPtrs.push(ptr);
149
+ m.setValue(textArrayPtr + i * 4, ptr, '*');
150
+ }
151
+ // Options
152
+ const optSize = m._rac_wasm_sizeof_embeddings_options();
153
+ const optPtr = m._malloc(optSize);
154
+ const eOpt2 = Offsets.embeddingsOptions;
155
+ m.setValue(optPtr + eOpt2.normalize, options.normalize !== undefined ? options.normalize : -1, 'i32');
156
+ m.setValue(optPtr + eOpt2.pooling, options.pooling !== undefined ? options.pooling : -1, 'i32');
157
+ m.setValue(optPtr + eOpt2.nThreads, 0, 'i32');
158
+ // Result
159
+ const resSize = m._rac_wasm_sizeof_embeddings_result();
160
+ const resPtr = m._malloc(resSize);
161
+ try {
162
+ const r = m.ccall('rac_embeddings_component_embed_batch', 'number', ['number', 'number', 'number', 'number', 'number'], [handle, textArrayPtr, texts.length, optPtr, resPtr]);
163
+ bridge.checkResult(r, 'rac_embeddings_component_embed_batch');
164
+ return readEmbeddingsResult(bridge, m, resPtr);
165
+ }
166
+ finally {
167
+ for (const ptr of textPtrs)
168
+ bridge.free(ptr);
169
+ m._free(textArrayPtr);
170
+ m._free(optPtr);
171
+ }
172
+ }
173
+ /**
174
+ * Compute cosine similarity between two embedding vectors.
175
+ * Pure TypeScript utility -- no WASM call needed.
176
+ */
177
+ cosineSimilarity(a, b) {
178
+ if (a.length !== b.length)
179
+ throw new Error('Vectors must have the same dimension');
180
+ let dot = 0;
181
+ let normA = 0;
182
+ let normB = 0;
183
+ for (let i = 0; i < a.length; i++) {
184
+ dot += a[i] * b[i];
185
+ normA += a[i] * a[i];
186
+ normB += b[i] * b[i];
187
+ }
188
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
189
+ return denominator === 0 ? 0 : dot / denominator;
190
+ }
191
+ /** Clean up the embeddings component. */
192
+ cleanup() {
193
+ if (this._embeddingsComponentHandle !== 0) {
194
+ try {
195
+ LlamaCppBridge.shared.module.ccall('rac_embeddings_component_destroy', null, ['number'], [this._embeddingsComponentHandle]);
196
+ }
197
+ catch { /* ignore */ }
198
+ this._embeddingsComponentHandle = 0;
199
+ }
200
+ }
201
+ }
202
+ export const Embeddings = new EmbeddingsImpl();
203
+ // ---------------------------------------------------------------------------
204
+ // Helper: Read rac_embeddings_result_t from WASM memory
205
+ // ---------------------------------------------------------------------------
206
+ function readEmbeddingsResult(bridge, m, resPtr) {
207
+ // rac_embeddings_result_t (offsets from compiler via StructOffsets)
208
+ const eRes = Offsets.embeddingsResult;
209
+ const embeddingsArrayPtr = m.getValue(resPtr + eRes.embeddings, '*');
210
+ const numEmbeddings = m.getValue(resPtr + eRes.numEmbeddings, 'i32');
211
+ const dimension = m.getValue(resPtr + eRes.dimension, 'i32');
212
+ const processingTimeMs = m.getValue(resPtr + eRes.processingTimeMs, 'i32'); // low 32 bits of int64
213
+ const totalTokens = m.getValue(resPtr + eRes.totalTokens, 'i32');
214
+ const embeddings = [];
215
+ const ev = Offsets.embeddingVector;
216
+ for (let i = 0; i < numEmbeddings; i++) {
217
+ // Each rac_embedding_vector_t
218
+ const vecPtr = embeddingsArrayPtr + i * ev.structSize;
219
+ const dataPtr = m.getValue(vecPtr + ev.data, '*');
220
+ const vecDim = m.getValue(vecPtr + ev.dimension, 'i32');
221
+ const data = new Float32Array(vecDim);
222
+ if (dataPtr && vecDim > 0) {
223
+ data.set(bridge.readFloat32Array(dataPtr, vecDim));
224
+ }
225
+ embeddings.push({ data, dimension: vecDim });
226
+ }
227
+ // Free C result
228
+ m.ccall('rac_embeddings_result_free', null, ['number'], [resPtr]);
229
+ EventBus.shared.emit('embeddings.generated', SDKEventType.Generation, {
230
+ numEmbeddings,
231
+ dimension,
232
+ processingTimeMs,
233
+ });
234
+ return { embeddings, dimension, processingTimeMs, totalTokens };
235
+ }
236
+ //# sourceMappingURL=RunAnywhere+Embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+Embeddings.js","sourceRoot":"","sources":["../../src/Extensions/RunAnywhere+Embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Structured Output Extension
3
+ *
4
+ * Adds JSON-structured output capabilities for LLM generation.
5
+ * Uses the RACommons rac_structured_output_* C API for schema-guided
6
+ * generation and JSON extraction/validation.
7
+ *
8
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/StructuredOutput/
9
+ *
10
+ * Usage:
11
+ * import { StructuredOutput, TextGeneration } from '@runanywhere/web';
12
+ *
13
+ * const schema = JSON.stringify({ type: 'object', properties: { name: { type: 'string' } } });
14
+ * const prompt = await StructuredOutput.preparePrompt('List 3 colors', schema);
15
+ * const result = await TextGeneration.generate(prompt);
16
+ * const validated = StructuredOutput.validate(result.text, schema);
17
+ * console.log(validated.extractedJson); // parsed JSON
18
+ */
19
+ export interface StructuredOutputConfig {
20
+ /** JSON Schema string */
21
+ jsonSchema: string;
22
+ /** Whether to include the schema in the prompt (default: true) */
23
+ includeSchemaInPrompt?: boolean;
24
+ }
25
+ export interface StructuredOutputValidation {
26
+ isValid: boolean;
27
+ errorMessage?: string;
28
+ extractedJson?: string;
29
+ }
30
+ export declare const StructuredOutput: {
31
+ /**
32
+ * Extract JSON from a text response (finds first complete JSON object/array).
33
+ *
34
+ * @param text - Raw LLM output text
35
+ * @returns Extracted JSON string, or null if none found
36
+ */
37
+ extractJson(text: string): string | null;
38
+ /**
39
+ * Prepare a prompt with schema instructions for structured output.
40
+ *
41
+ * @param originalPrompt - The user's original prompt
42
+ * @param config - Schema configuration
43
+ * @returns Enhanced prompt with schema instructions
44
+ */
45
+ preparePrompt(originalPrompt: string, config: StructuredOutputConfig): string;
46
+ /**
47
+ * Get a system prompt that instructs the LLM to produce JSON matching a schema.
48
+ *
49
+ * @param jsonSchema - JSON Schema string
50
+ * @returns System prompt string
51
+ */
52
+ getSystemPrompt(jsonSchema: string): string;
53
+ /**
54
+ * Validate LLM output against a JSON schema.
55
+ *
56
+ * @param text - Raw LLM output
57
+ * @param config - Schema configuration
58
+ * @returns Validation result with extracted JSON if valid
59
+ */
60
+ validate(text: string, config: StructuredOutputConfig): StructuredOutputValidation;
61
+ /**
62
+ * Check if text contains a complete JSON object or array.
63
+ *
64
+ * @param text - Text to check
65
+ * @returns True if a complete JSON block was found
66
+ */
67
+ hasCompleteJson(text: string): boolean;
68
+ };
69
+ //# sourceMappingURL=RunAnywhere+StructuredOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+StructuredOutput.d.ts","sourceRoot":"","sources":["../../src/Extensions/RunAnywhere+StructuredOutput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAiBH,MAAM,WAAW,sBAAsB;IACrC,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,gBAAgB;IAC3B;;;;;OAKG;sBACe,MAAM,GAAG,MAAM,GAAG,IAAI;IA8BxC;;;;;;OAMG;kCAC2B,MAAM,UAAU,sBAAsB,GAAG,MAAM;IA0C7E;;;;;OAKG;gCACyB,MAAM,GAAG,MAAM;IA4B3C;;;;;;OAMG;mBACY,MAAM,UAAU,sBAAsB,GAAG,0BAA0B;IAkDlF;;;;;OAKG;0BACmB,MAAM,GAAG,OAAO;CAqBvC,CAAC"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Structured Output Extension
3
+ *
4
+ * Adds JSON-structured output capabilities for LLM generation.
5
+ * Uses the RACommons rac_structured_output_* C API for schema-guided
6
+ * generation and JSON extraction/validation.
7
+ *
8
+ * Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/StructuredOutput/
9
+ *
10
+ * Usage:
11
+ * import { StructuredOutput, TextGeneration } from '@runanywhere/web';
12
+ *
13
+ * const schema = JSON.stringify({ type: 'object', properties: { name: { type: 'string' } } });
14
+ * const prompt = await StructuredOutput.preparePrompt('List 3 colors', schema);
15
+ * const result = await TextGeneration.generate(prompt);
16
+ * const validated = StructuredOutput.validate(result.text, schema);
17
+ * console.log(validated.extractedJson); // parsed JSON
18
+ */
19
+ import { RunAnywhere, SDKError, SDKLogger } from '@runanywhere/web';
20
+ import { LlamaCppBridge } from '../Foundation/LlamaCppBridge';
21
+ import { Offsets } from '../Foundation/LlamaCppOffsets';
22
+ const logger = new SDKLogger('StructuredOutput');
23
+ function requireBridge() {
24
+ if (!RunAnywhere.isInitialized)
25
+ throw SDKError.notInitialized();
26
+ return LlamaCppBridge.shared;
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Structured Output Extension
30
+ // ---------------------------------------------------------------------------
31
+ export const StructuredOutput = {
32
+ /**
33
+ * Extract JSON from a text response (finds first complete JSON object/array).
34
+ *
35
+ * @param text - Raw LLM output text
36
+ * @returns Extracted JSON string, or null if none found
37
+ */
38
+ extractJson(text) {
39
+ const bridge = requireBridge();
40
+ const m = bridge.module;
41
+ const textPtr = bridge.allocString(text);
42
+ const outJsonPtr = m._malloc(4); // char** out_json
43
+ const outLenPtr = m._malloc(4); // size_t* out_length
44
+ try {
45
+ const result = m.ccall('rac_structured_output_extract_json', 'number', ['number', 'number', 'number'], [textPtr, outJsonPtr, outLenPtr]);
46
+ if (result !== 0)
47
+ return null;
48
+ const jsonPtr = m.getValue(outJsonPtr, '*');
49
+ if (!jsonPtr)
50
+ return null;
51
+ const json = bridge.readString(jsonPtr);
52
+ m._free(jsonPtr); // rac_strdup'd, so we free it
53
+ return json;
54
+ }
55
+ finally {
56
+ bridge.free(textPtr);
57
+ m._free(outJsonPtr);
58
+ m._free(outLenPtr);
59
+ }
60
+ },
61
+ /**
62
+ * Prepare a prompt with schema instructions for structured output.
63
+ *
64
+ * @param originalPrompt - The user's original prompt
65
+ * @param config - Schema configuration
66
+ * @returns Enhanced prompt with schema instructions
67
+ */
68
+ preparePrompt(originalPrompt, config) {
69
+ const bridge = requireBridge();
70
+ const m = bridge.module;
71
+ const promptPtr = bridge.allocString(originalPrompt);
72
+ // Build rac_structured_output_config_t: { json_schema, include_schema_in_prompt }
73
+ const configSize = m._rac_wasm_sizeof_structured_output_config();
74
+ const configPtr = m._malloc(configSize);
75
+ const soConf = Offsets.structuredOutputConfig;
76
+ const schemaPtr = bridge.allocString(config.jsonSchema);
77
+ m.setValue(configPtr + soConf.jsonSchema, schemaPtr, '*');
78
+ m.setValue(configPtr + soConf.includeSchemaInPrompt, (config.includeSchemaInPrompt !== false) ? 1 : 0, 'i32');
79
+ const outPromptPtr = m._malloc(4);
80
+ try {
81
+ const result = m.ccall('rac_structured_output_prepare_prompt', 'number', ['number', 'number', 'number'], [promptPtr, configPtr, outPromptPtr]);
82
+ if (result !== 0) {
83
+ logger.warning('Failed to prepare structured prompt, returning original');
84
+ return originalPrompt;
85
+ }
86
+ const preparedPtr = m.getValue(outPromptPtr, '*');
87
+ if (!preparedPtr)
88
+ return originalPrompt;
89
+ const prepared = bridge.readString(preparedPtr);
90
+ m._free(preparedPtr);
91
+ return prepared;
92
+ }
93
+ finally {
94
+ bridge.free(promptPtr);
95
+ bridge.free(schemaPtr);
96
+ m._free(configPtr);
97
+ m._free(outPromptPtr);
98
+ }
99
+ },
100
+ /**
101
+ * Get a system prompt that instructs the LLM to produce JSON matching a schema.
102
+ *
103
+ * @param jsonSchema - JSON Schema string
104
+ * @returns System prompt string
105
+ */
106
+ getSystemPrompt(jsonSchema) {
107
+ const bridge = requireBridge();
108
+ const m = bridge.module;
109
+ const schemaPtr = bridge.allocString(jsonSchema);
110
+ const outPtr = m._malloc(4);
111
+ try {
112
+ const result = m.ccall('rac_structured_output_get_system_prompt', 'number', ['number', 'number'], [schemaPtr, outPtr]);
113
+ if (result !== 0)
114
+ return '';
115
+ const ptr = m.getValue(outPtr, '*');
116
+ if (!ptr)
117
+ return '';
118
+ const prompt = bridge.readString(ptr);
119
+ m._free(ptr);
120
+ return prompt;
121
+ }
122
+ finally {
123
+ bridge.free(schemaPtr);
124
+ m._free(outPtr);
125
+ }
126
+ },
127
+ /**
128
+ * Validate LLM output against a JSON schema.
129
+ *
130
+ * @param text - Raw LLM output
131
+ * @param config - Schema configuration
132
+ * @returns Validation result with extracted JSON if valid
133
+ */
134
+ validate(text, config) {
135
+ const bridge = requireBridge();
136
+ const m = bridge.module;
137
+ const textPtr = bridge.allocString(text);
138
+ const configSize = m._rac_wasm_sizeof_structured_output_config();
139
+ const configPtr = m._malloc(configSize);
140
+ const soConf2 = Offsets.structuredOutputConfig;
141
+ const schemaPtr = bridge.allocString(config.jsonSchema);
142
+ m.setValue(configPtr + soConf2.jsonSchema, schemaPtr, '*');
143
+ m.setValue(configPtr + soConf2.includeSchemaInPrompt, (config.includeSchemaInPrompt !== false) ? 1 : 0, 'i32');
144
+ // rac_structured_output_validation_t (size from sizeof helper)
145
+ const valSize = 12; // 3 fields × 4 bytes on wasm32 — all i32/ptr
146
+ const valPtr = m._malloc(valSize);
147
+ try {
148
+ const result = m.ccall('rac_structured_output_validate', 'number', ['number', 'number', 'number'], [textPtr, configPtr, valPtr]);
149
+ if (result !== 0) {
150
+ return { isValid: false, errorMessage: 'Validation call failed' };
151
+ }
152
+ const soVal = Offsets.structuredOutputValidation;
153
+ const isValid = m.getValue(valPtr + soVal.isValid, 'i32') === 1;
154
+ const errorMsgPtr = m.getValue(valPtr + soVal.errorMessage, '*');
155
+ const extractedPtr = m.getValue(valPtr + soVal.extractedJson, '*');
156
+ const validation = {
157
+ isValid,
158
+ errorMessage: errorMsgPtr ? bridge.readString(errorMsgPtr) : undefined,
159
+ extractedJson: extractedPtr ? bridge.readString(extractedPtr) : undefined,
160
+ };
161
+ // Free C validation struct
162
+ m.ccall('rac_structured_output_validation_free', null, ['number'], [valPtr]);
163
+ return validation;
164
+ }
165
+ finally {
166
+ bridge.free(textPtr);
167
+ bridge.free(schemaPtr);
168
+ m._free(configPtr);
169
+ }
170
+ },
171
+ /**
172
+ * Check if text contains a complete JSON object or array.
173
+ *
174
+ * @param text - Text to check
175
+ * @returns True if a complete JSON block was found
176
+ */
177
+ hasCompleteJson(text) {
178
+ const bridge = requireBridge();
179
+ const m = bridge.module;
180
+ const textPtr = bridge.allocString(text);
181
+ const startPtr = m._malloc(4);
182
+ const endPtr = m._malloc(4);
183
+ try {
184
+ const found = m.ccall('rac_structured_output_find_complete_json', 'number', ['number', 'number', 'number'], [textPtr, startPtr, endPtr]);
185
+ return found === 1;
186
+ }
187
+ finally {
188
+ bridge.free(textPtr);
189
+ m._free(startPtr);
190
+ m._free(endPtr);
191
+ }
192
+ },
193
+ };
194
+ //# sourceMappingURL=RunAnywhere+StructuredOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+StructuredOutput.js","sourceRoot":"","sources":["../../src/Extensions/RunAnywhere+StructuredOutput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
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 type { ModelLoadContext } from '@runanywhere/web';
20
+ import type { LLMGenerationOptions, LLMGenerationResult, LLMStreamingResult } from '@runanywhere/web';
21
+ declare class TextGenerationImpl {
22
+ readonly extensionName = "TextGeneration";
23
+ private _llmComponentHandle;
24
+ private _mountedPath;
25
+ /** Ensure the SDK is initialized and return the bridge. */
26
+ private requireBridge;
27
+ /** Ensure the LLM component is created. */
28
+ private ensureLLMComponent;
29
+ /**
30
+ * Load an LLM model from raw data or stream via ModelLoadContext.
31
+ * Implements LLMModelLoader interface for ModelManager integration.
32
+ */
33
+ loadModelFromData(ctx: ModelLoadContext): Promise<void>;
34
+ /**
35
+ * Load an LLM model for text generation.
36
+ *
37
+ * @param modelPath - Path to the model file (in Emscripten FS)
38
+ * @param modelId - Model identifier
39
+ * @param modelName - Human-readable model name
40
+ */
41
+ loadModel(modelPath: string, modelId: string, modelName?: string): Promise<void>;
42
+ /**
43
+ * Unload the currently loaded LLM model.
44
+ */
45
+ unloadModel(): Promise<void>;
46
+ /**
47
+ * Check if an LLM model is currently loaded.
48
+ */
49
+ get isModelLoaded(): boolean;
50
+ /**
51
+ * Generate text from a prompt (non-streaming).
52
+ *
53
+ * Uses `ccall` with `{async: true}` so that Emscripten's JSPI / Asyncify
54
+ * can suspend the WASM stack for async WebGPU buffer operations. Without
55
+ * this the blocking C function traps with `RuntimeError: unreachable` on
56
+ * WebGPU builds because the browser event-loop cannot pump GPU command
57
+ * buffers while the main thread is blocked in a synchronous ccall.
58
+ *
59
+ * @param prompt - Input text prompt
60
+ * @param options - Generation options (temperature, maxTokens, etc.)
61
+ * @returns Generation result with text and metrics
62
+ */
63
+ generate(prompt: string, options?: LLMGenerationOptions): Promise<LLMGenerationResult>;
64
+ /**
65
+ * Generate text with streaming (returns AsyncIterable of tokens).
66
+ *
67
+ * Async because the underlying C call uses `{async: true}` so Emscripten's
68
+ * JSPI can suspend the WASM stack during WebGPU buffer operations. On
69
+ * CPU-only builds the result is simply an already-resolved Promise.
70
+ *
71
+ * @param prompt - Input text prompt
72
+ * @param options - Generation options
73
+ * @returns Streaming result with async token stream and final result promise
74
+ */
75
+ generateStream(prompt: string, options?: LLMGenerationOptions): Promise<LLMStreamingResult>;
76
+ /**
77
+ * Cancel any in-progress generation.
78
+ */
79
+ cancel(): void;
80
+ /**
81
+ * Clean up the LLM component (frees memory).
82
+ */
83
+ cleanup(): void;
84
+ }
85
+ export declare const TextGeneration: TextGenerationImpl;
86
+ export {};
87
+ //# sourceMappingURL=RunAnywhere+TextGeneration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunAnywhere+TextGeneration.d.ts","sourceRoot":"","sources":["../../src/Extensions/RunAnywhere+TextGeneration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQtG,cAAM,kBAAkB;IACtB,QAAQ,CAAC,aAAa,oBAAoB;IAC1C,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,YAAY,CAAuB;IAE3C,2DAA2D;IAC3D,OAAO,CAAC,aAAa;IAOrB,2CAA2C;YAC7B,kBAAkB;IA2BhC;;;OAGG;IACG,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC7D;;;;;;OAMG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCtF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBlC;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAQ3B;IAED;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4IhG;;;;;;;;;;OAUG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2MrG;;OAEG;IACH,MAAM,IAAI,IAAI;IAUd;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB;AAED,eAAO,MAAM,cAAc,oBAA2B,CAAC"}