react-native-nitro-mlx 0.3.0 → 0.4.0
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.
- package/MLXReactNative.podspec +7 -1
- package/ios/Sources/AudioCaptureManager.swift +110 -0
- package/ios/Sources/HybridLLM.swift +309 -68
- package/ios/Sources/HybridSTT.swift +202 -0
- package/ios/Sources/HybridTTS.swift +145 -0
- package/ios/Sources/JSONHelpers.swift +9 -0
- package/ios/Sources/ModelDownloader.swift +26 -12
- package/ios/Sources/StreamEventEmitter.swift +132 -0
- package/ios/Sources/ThinkingStateMachine.swift +206 -0
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/llm.js +39 -1
- package/lib/module/llm.js.map +1 -1
- package/lib/module/models.js +97 -26
- package/lib/module/models.js.map +1 -1
- package/lib/module/specs/STT.nitro.js +4 -0
- package/lib/module/specs/STT.nitro.js.map +1 -0
- package/lib/module/specs/TTS.nitro.js +4 -0
- package/lib/module/specs/TTS.nitro.js.map +1 -0
- package/lib/module/stt.js +49 -0
- package/lib/module/stt.js.map +1 -0
- package/lib/module/tts.js +40 -0
- package/lib/module/tts.js.map +1 -0
- package/lib/typescript/src/index.d.ts +7 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/llm.d.ts +32 -2
- package/lib/typescript/src/llm.d.ts.map +1 -1
- package/lib/typescript/src/models.d.ts +13 -4
- package/lib/typescript/src/models.d.ts.map +1 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +49 -4
- package/lib/typescript/src/specs/LLM.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/STT.nitro.d.ts +28 -0
- package/lib/typescript/src/specs/STT.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/TTS.nitro.d.ts +22 -0
- package/lib/typescript/src/specs/TTS.nitro.d.ts.map +1 -0
- package/lib/typescript/src/stt.d.ts +16 -0
- package/lib/typescript/src/stt.d.ts.map +1 -0
- package/lib/typescript/src/tts.d.ts +13 -0
- package/lib/typescript/src/tts.d.ts.map +1 -0
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.cpp +42 -0
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.hpp +165 -0
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Umbrella.hpp +20 -0
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.mm +16 -0
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.swift +30 -0
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.hpp +8 -0
- package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.hpp +149 -0
- package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.hpp +128 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +47 -0
- package/nitrogen/generated/ios/swift/GenerationStats.swift +13 -2
- package/nitrogen/generated/ios/swift/HybridLLMSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridLLMSpec_cxx.swift +24 -0
- package/nitrogen/generated/ios/swift/HybridSTTSpec.swift +66 -0
- package/nitrogen/generated/ios/swift/HybridSTTSpec_cxx.swift +286 -0
- package/nitrogen/generated/ios/swift/HybridTTSSpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridTTSSpec_cxx.swift +229 -0
- package/nitrogen/generated/ios/swift/STTLoadOptions.swift +66 -0
- package/nitrogen/generated/ios/swift/TTSGenerateOptions.swift +78 -0
- package/nitrogen/generated/ios/swift/TTSLoadOptions.swift +66 -0
- package/nitrogen/generated/shared/c++/GenerationStats.hpp +6 -2
- package/nitrogen/generated/shared/c++/HybridLLMSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridLLMSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/HybridSTTSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridSTTSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/HybridTTSSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridTTSSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/STTLoadOptions.hpp +76 -0
- package/nitrogen/generated/shared/c++/TTSGenerateOptions.hpp +80 -0
- package/nitrogen/generated/shared/c++/TTSLoadOptions.hpp +76 -0
- package/package.json +8 -4
- package/src/index.ts +31 -1
- package/src/llm.ts +48 -2
- package/src/models.ts +81 -1
- package/src/specs/LLM.nitro.ts +74 -4
- package/src/specs/STT.nitro.ts +35 -0
- package/src/specs/TTS.nitro.ts +30 -0
- package/src/stt.ts +67 -0
- package/src/tts.ts +60 -0
package/src/models.ts
CHANGED
|
@@ -5,6 +5,8 @@ export enum ModelFamily {
|
|
|
5
5
|
Phi = 'Phi',
|
|
6
6
|
SmolLM = 'SmolLM',
|
|
7
7
|
OpenELM = 'OpenELM',
|
|
8
|
+
PocketTTS = 'PocketTTS',
|
|
9
|
+
GLMASR = 'GLMASR',
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
export enum ModelProvider {
|
|
@@ -14,9 +16,12 @@ export enum ModelProvider {
|
|
|
14
16
|
Microsoft = 'Microsoft',
|
|
15
17
|
HuggingFace = 'HuggingFace',
|
|
16
18
|
Apple = 'Apple',
|
|
19
|
+
Kyutai = 'Kyutai',
|
|
17
20
|
}
|
|
18
21
|
|
|
19
|
-
export type ModelQuantization = '4bit' | '8bit'
|
|
22
|
+
export type ModelQuantization = '4bit' | '8bit' | 'bf16'
|
|
23
|
+
|
|
24
|
+
export type ModelType = 'llm' | 'tts' | 'stt'
|
|
20
25
|
|
|
21
26
|
export interface ModelInfo {
|
|
22
27
|
id: MLXModel
|
|
@@ -26,6 +31,7 @@ export interface ModelInfo {
|
|
|
26
31
|
quantization: ModelQuantization
|
|
27
32
|
displayName: string
|
|
28
33
|
downloadSize: number
|
|
34
|
+
type: ModelType
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
export enum MLXModel {
|
|
@@ -72,6 +78,14 @@ export enum MLXModel {
|
|
|
72
78
|
OpenELM_1_1B_8bit = 'mlx-community/OpenELM-1_1B-8bit',
|
|
73
79
|
OpenELM_3B_4bit = 'mlx-community/OpenELM-3B-4bit',
|
|
74
80
|
OpenELM_3B_8bit = 'mlx-community/OpenELM-3B-8bit',
|
|
81
|
+
|
|
82
|
+
// PocketTTS (Kyutai) - 44.6M
|
|
83
|
+
PocketTTS = 'mlx-community/pocket-tts',
|
|
84
|
+
PocketTTS_8bit = 'mlx-community/pocket-tts-8bit',
|
|
85
|
+
PocketTTS_4bit = 'mlx-community/pocket-tts-4bit',
|
|
86
|
+
|
|
87
|
+
// GLM-ASR (GLMASR) - Speech-to-Text
|
|
88
|
+
GLM_ASR_Nano_4bit = 'mlx-community/GLM-ASR-Nano-2512-4bit',
|
|
75
89
|
}
|
|
76
90
|
|
|
77
91
|
export const MLXModels: ModelInfo[] = [
|
|
@@ -83,6 +97,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
83
97
|
quantization: '4bit',
|
|
84
98
|
displayName: 'Llama 3.2 1B Instruct (4-bit)',
|
|
85
99
|
downloadSize: 1407777762,
|
|
100
|
+
type: 'llm',
|
|
86
101
|
},
|
|
87
102
|
{
|
|
88
103
|
id: MLXModel.Llama_3_2_1B_Instruct_8bit,
|
|
@@ -92,6 +107,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
92
107
|
quantization: '8bit',
|
|
93
108
|
displayName: 'Llama 3.2 1B Instruct (8-bit)',
|
|
94
109
|
downloadSize: 1313157436,
|
|
110
|
+
type: 'llm',
|
|
95
111
|
},
|
|
96
112
|
{
|
|
97
113
|
id: MLXModel.Llama_3_2_3B_Instruct_4bit,
|
|
@@ -101,6 +117,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
101
117
|
quantization: '4bit',
|
|
102
118
|
displayName: 'Llama 3.2 3B Instruct (4-bit)',
|
|
103
119
|
downloadSize: 2019397474,
|
|
120
|
+
type: 'llm',
|
|
104
121
|
},
|
|
105
122
|
{
|
|
106
123
|
id: MLXModel.Llama_3_2_3B_Instruct_8bit,
|
|
@@ -110,6 +127,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
110
127
|
quantization: '8bit',
|
|
111
128
|
displayName: 'Llama 3.2 3B Instruct (8-bit)',
|
|
112
129
|
downloadSize: 3413784042,
|
|
130
|
+
type: 'llm',
|
|
113
131
|
},
|
|
114
132
|
{
|
|
115
133
|
id: MLXModel.Qwen2_5_0_5B_Instruct_4bit,
|
|
@@ -119,6 +137,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
119
137
|
quantization: '4bit',
|
|
120
138
|
displayName: 'Qwen 2.5 0.5B Instruct (4-bit)',
|
|
121
139
|
downloadSize: 278064920,
|
|
140
|
+
type: 'llm',
|
|
122
141
|
},
|
|
123
142
|
{
|
|
124
143
|
id: MLXModel.Qwen2_5_0_5B_Instruct_8bit,
|
|
@@ -128,6 +147,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
128
147
|
quantization: '8bit',
|
|
129
148
|
displayName: 'Qwen 2.5 0.5B Instruct (8-bit)',
|
|
130
149
|
downloadSize: 525045902,
|
|
150
|
+
type: 'llm',
|
|
131
151
|
},
|
|
132
152
|
{
|
|
133
153
|
id: MLXModel.Qwen2_5_1_5B_Instruct_4bit,
|
|
@@ -137,6 +157,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
137
157
|
quantization: '4bit',
|
|
138
158
|
displayName: 'Qwen 2.5 1.5B Instruct (4-bit)',
|
|
139
159
|
downloadSize: 868628559,
|
|
160
|
+
type: 'llm',
|
|
140
161
|
},
|
|
141
162
|
{
|
|
142
163
|
id: MLXModel.Qwen2_5_1_5B_Instruct_8bit,
|
|
@@ -146,6 +167,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
146
167
|
quantization: '8bit',
|
|
147
168
|
displayName: 'Qwen 2.5 1.5B Instruct (8-bit)',
|
|
148
169
|
downloadSize: 1640414038,
|
|
170
|
+
type: 'llm',
|
|
149
171
|
},
|
|
150
172
|
{
|
|
151
173
|
id: MLXModel.Qwen2_5_3B_Instruct_4bit,
|
|
@@ -155,6 +177,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
155
177
|
quantization: '4bit',
|
|
156
178
|
displayName: 'Qwen 2.5 3B Instruct (4-bit)',
|
|
157
179
|
downloadSize: 1736293090,
|
|
180
|
+
type: 'llm',
|
|
158
181
|
},
|
|
159
182
|
{
|
|
160
183
|
id: MLXModel.Qwen2_5_3B_Instruct_8bit,
|
|
@@ -164,6 +187,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
164
187
|
quantization: '8bit',
|
|
165
188
|
displayName: 'Qwen 2.5 3B Instruct (8-bit)',
|
|
166
189
|
downloadSize: 3279142142,
|
|
190
|
+
type: 'llm',
|
|
167
191
|
},
|
|
168
192
|
{
|
|
169
193
|
id: MLXModel.Qwen3_1_7B_4bit,
|
|
@@ -173,6 +197,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
173
197
|
quantization: '4bit',
|
|
174
198
|
displayName: 'Qwen 3 1.7B (4-bit)',
|
|
175
199
|
downloadSize: 979502864,
|
|
200
|
+
type: 'llm',
|
|
176
201
|
},
|
|
177
202
|
{
|
|
178
203
|
id: MLXModel.Qwen3_1_7B_8bit,
|
|
@@ -182,6 +207,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
182
207
|
quantization: '8bit',
|
|
183
208
|
displayName: 'Qwen 3 1.7B (8-bit)',
|
|
184
209
|
downloadSize: 1839729195,
|
|
210
|
+
type: 'llm',
|
|
185
211
|
},
|
|
186
212
|
{
|
|
187
213
|
id: MLXModel.Gemma_3_1B_IT_4bit,
|
|
@@ -191,6 +217,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
191
217
|
quantization: '4bit',
|
|
192
218
|
displayName: 'Gemma 3 1B IT (4-bit)',
|
|
193
219
|
downloadSize: 770650946,
|
|
220
|
+
type: 'llm',
|
|
194
221
|
},
|
|
195
222
|
{
|
|
196
223
|
id: MLXModel.Gemma_3_1B_IT_8bit,
|
|
@@ -200,6 +227,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
200
227
|
quantization: '8bit',
|
|
201
228
|
displayName: 'Gemma 3 1B IT (8-bit)',
|
|
202
229
|
downloadSize: 1421522471,
|
|
230
|
+
type: 'llm',
|
|
203
231
|
},
|
|
204
232
|
{
|
|
205
233
|
id: MLXModel.Phi_3_5_Mini_Instruct_4bit,
|
|
@@ -209,6 +237,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
209
237
|
quantization: '4bit',
|
|
210
238
|
displayName: 'Phi 3.5 Mini Instruct (4-bit)',
|
|
211
239
|
downloadSize: 2150195856,
|
|
240
|
+
type: 'llm',
|
|
212
241
|
},
|
|
213
242
|
{
|
|
214
243
|
id: MLXModel.Phi_3_5_Mini_Instruct_8bit,
|
|
@@ -218,6 +247,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
218
247
|
quantization: '8bit',
|
|
219
248
|
displayName: 'Phi 3.5 Mini Instruct (8-bit)',
|
|
220
249
|
downloadSize: 4060636056,
|
|
250
|
+
type: 'llm',
|
|
221
251
|
},
|
|
222
252
|
{
|
|
223
253
|
id: MLXModel.Phi_4_Mini_Instruct_4bit,
|
|
@@ -227,6 +257,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
227
257
|
quantization: '4bit',
|
|
228
258
|
displayName: 'Phi 4 Mini Instruct (4-bit)',
|
|
229
259
|
downloadSize: 2173624891,
|
|
260
|
+
type: 'llm',
|
|
230
261
|
},
|
|
231
262
|
{
|
|
232
263
|
id: MLXModel.Phi_4_Mini_Instruct_8bit,
|
|
@@ -236,6 +267,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
236
267
|
quantization: '8bit',
|
|
237
268
|
displayName: 'Phi 4 Mini Instruct (8-bit)',
|
|
238
269
|
downloadSize: 4091536167,
|
|
270
|
+
type: 'llm',
|
|
239
271
|
},
|
|
240
272
|
{
|
|
241
273
|
id: MLXModel.SmolLM_1_7B_Instruct_4bit,
|
|
@@ -245,6 +277,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
245
277
|
quantization: '4bit',
|
|
246
278
|
displayName: 'SmolLM 1.7B Instruct (4-bit)',
|
|
247
279
|
downloadSize: 962855374,
|
|
280
|
+
type: 'llm',
|
|
248
281
|
},
|
|
249
282
|
{
|
|
250
283
|
id: MLXModel.SmolLM_1_7B_Instruct_8bit,
|
|
@@ -254,6 +287,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
254
287
|
quantization: '8bit',
|
|
255
288
|
displayName: 'SmolLM 1.7B Instruct (8-bit)',
|
|
256
289
|
downloadSize: 1818493993,
|
|
290
|
+
type: 'llm',
|
|
257
291
|
},
|
|
258
292
|
{
|
|
259
293
|
id: MLXModel.SmolLM2_1_7B_Instruct_4bit,
|
|
@@ -263,6 +297,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
263
297
|
quantization: '4bit',
|
|
264
298
|
displayName: 'SmolLM2 1.7B Instruct (4-bit)',
|
|
265
299
|
downloadSize: 980000000,
|
|
300
|
+
type: 'llm',
|
|
266
301
|
},
|
|
267
302
|
{
|
|
268
303
|
id: MLXModel.SmolLM2_1_7B_Instruct_8bit,
|
|
@@ -272,6 +307,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
272
307
|
quantization: '8bit',
|
|
273
308
|
displayName: 'SmolLM2 1.7B Instruct (8-bit)',
|
|
274
309
|
downloadSize: 1850000000,
|
|
310
|
+
type: 'llm',
|
|
275
311
|
},
|
|
276
312
|
{
|
|
277
313
|
id: MLXModel.OpenELM_1_1B_4bit,
|
|
@@ -281,6 +317,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
281
317
|
quantization: '4bit',
|
|
282
318
|
displayName: 'OpenELM 1.1B (4-bit)',
|
|
283
319
|
downloadSize: 608162655,
|
|
320
|
+
type: 'llm',
|
|
284
321
|
},
|
|
285
322
|
{
|
|
286
323
|
id: MLXModel.OpenELM_1_1B_8bit,
|
|
@@ -290,6 +327,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
290
327
|
quantization: '8bit',
|
|
291
328
|
displayName: 'OpenELM 1.1B (8-bit)',
|
|
292
329
|
downloadSize: 1148048397,
|
|
330
|
+
type: 'llm',
|
|
293
331
|
},
|
|
294
332
|
{
|
|
295
333
|
id: MLXModel.OpenELM_3B_4bit,
|
|
@@ -299,6 +337,7 @@ export const MLXModels: ModelInfo[] = [
|
|
|
299
337
|
quantization: '4bit',
|
|
300
338
|
displayName: 'OpenELM 3B (4-bit)',
|
|
301
339
|
downloadSize: 1650000000,
|
|
340
|
+
type: 'llm',
|
|
302
341
|
},
|
|
303
342
|
{
|
|
304
343
|
id: MLXModel.OpenELM_3B_8bit,
|
|
@@ -308,5 +347,46 @@ export const MLXModels: ModelInfo[] = [
|
|
|
308
347
|
quantization: '8bit',
|
|
309
348
|
displayName: 'OpenELM 3B (8-bit)',
|
|
310
349
|
downloadSize: 3100000000,
|
|
350
|
+
type: 'llm',
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
id: MLXModel.PocketTTS,
|
|
354
|
+
family: ModelFamily.PocketTTS,
|
|
355
|
+
provider: ModelProvider.Kyutai,
|
|
356
|
+
parameters: '44.6M',
|
|
357
|
+
quantization: 'bf16',
|
|
358
|
+
displayName: 'PocketTTS (bf16)',
|
|
359
|
+
downloadSize: 180000000,
|
|
360
|
+
type: 'tts',
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
id: MLXModel.PocketTTS_8bit,
|
|
364
|
+
family: ModelFamily.PocketTTS,
|
|
365
|
+
provider: ModelProvider.Kyutai,
|
|
366
|
+
parameters: '44.6M',
|
|
367
|
+
quantization: '8bit',
|
|
368
|
+
displayName: 'PocketTTS (8-bit)',
|
|
369
|
+
downloadSize: 140000000,
|
|
370
|
+
type: 'tts',
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
id: MLXModel.PocketTTS_4bit,
|
|
374
|
+
family: ModelFamily.PocketTTS,
|
|
375
|
+
provider: ModelProvider.Kyutai,
|
|
376
|
+
parameters: '44.6M',
|
|
377
|
+
quantization: '4bit',
|
|
378
|
+
displayName: 'PocketTTS (4-bit)',
|
|
379
|
+
downloadSize: 80000000,
|
|
380
|
+
type: 'tts',
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
id: MLXModel.GLM_ASR_Nano_4bit,
|
|
384
|
+
family: ModelFamily.GLMASR,
|
|
385
|
+
provider: ModelProvider.Alibaba,
|
|
386
|
+
parameters: '1B',
|
|
387
|
+
quantization: '4bit',
|
|
388
|
+
displayName: 'GLM-ASR Nano (4-bit)',
|
|
389
|
+
downloadSize: 600000000,
|
|
390
|
+
type: 'stt',
|
|
311
391
|
},
|
|
312
392
|
]
|
package/src/specs/LLM.nitro.ts
CHANGED
|
@@ -4,16 +4,81 @@ import type { AnyMap, HybridObject } from 'react-native-nitro-modules'
|
|
|
4
4
|
* Statistics from the last text generation.
|
|
5
5
|
*/
|
|
6
6
|
export interface GenerationStats {
|
|
7
|
-
/** Total number of tokens generated */
|
|
8
7
|
tokenCount: number
|
|
9
|
-
/** Generation speed in tokens per second */
|
|
10
8
|
tokensPerSecond: number
|
|
11
|
-
/** Time in milliseconds until the first token was generated */
|
|
12
9
|
timeToFirstToken: number
|
|
13
|
-
/** Total generation time in milliseconds */
|
|
14
10
|
totalTime: number
|
|
11
|
+
toolExecutionTime: number
|
|
15
12
|
}
|
|
16
13
|
|
|
14
|
+
export interface GenerationStartEvent {
|
|
15
|
+
type: 'generation_start'
|
|
16
|
+
timestamp: number
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface TokenEvent {
|
|
20
|
+
type: 'token'
|
|
21
|
+
token: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ThinkingStartEvent {
|
|
25
|
+
type: 'thinking_start'
|
|
26
|
+
timestamp: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ThinkingChunkEvent {
|
|
30
|
+
type: 'thinking_chunk'
|
|
31
|
+
chunk: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface ThinkingEndEvent {
|
|
35
|
+
type: 'thinking_end'
|
|
36
|
+
content: string
|
|
37
|
+
timestamp: number
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface ToolCallStartEvent {
|
|
41
|
+
type: 'tool_call_start'
|
|
42
|
+
id: string
|
|
43
|
+
name: string
|
|
44
|
+
arguments: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface ToolCallExecutingEvent {
|
|
48
|
+
type: 'tool_call_executing'
|
|
49
|
+
id: string
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ToolCallCompletedEvent {
|
|
53
|
+
type: 'tool_call_completed'
|
|
54
|
+
id: string
|
|
55
|
+
result: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ToolCallFailedEvent {
|
|
59
|
+
type: 'tool_call_failed'
|
|
60
|
+
id: string
|
|
61
|
+
error: string
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface GenerationEndEvent {
|
|
65
|
+
type: 'generation_end'
|
|
66
|
+
content: string
|
|
67
|
+
stats: GenerationStats
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type StreamEvent =
|
|
71
|
+
| GenerationStartEvent
|
|
72
|
+
| TokenEvent
|
|
73
|
+
| ThinkingStartEvent
|
|
74
|
+
| ThinkingChunkEvent
|
|
75
|
+
| ThinkingEndEvent
|
|
76
|
+
| ToolCallStartEvent
|
|
77
|
+
| ToolCallExecutingEvent
|
|
78
|
+
| ToolCallCompletedEvent
|
|
79
|
+
| ToolCallFailedEvent
|
|
80
|
+
| GenerationEndEvent
|
|
81
|
+
|
|
17
82
|
export interface LLMMessage {
|
|
18
83
|
role: string
|
|
19
84
|
content: string
|
|
@@ -85,6 +150,11 @@ export interface LLM extends HybridObject<{ ios: 'swift' }> {
|
|
|
85
150
|
onToolCall?: (toolName: string, args: string) => void,
|
|
86
151
|
): Promise<string>
|
|
87
152
|
|
|
153
|
+
streamWithEvents(
|
|
154
|
+
prompt: string,
|
|
155
|
+
onEvent: (eventJson: string) => void,
|
|
156
|
+
): Promise<string>
|
|
157
|
+
|
|
88
158
|
/**
|
|
89
159
|
* Stop the current generation.
|
|
90
160
|
*/
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules'
|
|
2
|
+
|
|
3
|
+
export interface STTLoadOptions {
|
|
4
|
+
onProgress?: (progress: number) => void
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface STTTranscriptionInfo {
|
|
8
|
+
promptTokens: number
|
|
9
|
+
generationTokens: number
|
|
10
|
+
tokensPerSecond: number
|
|
11
|
+
prefillTime: number
|
|
12
|
+
generateTime: number
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface STT extends HybridObject<{ ios: 'swift' }> {
|
|
16
|
+
readonly isLoaded: boolean
|
|
17
|
+
readonly isTranscribing: boolean
|
|
18
|
+
readonly isListening: boolean
|
|
19
|
+
readonly modelId: string
|
|
20
|
+
|
|
21
|
+
load(modelId: string, options?: STTLoadOptions): Promise<void>
|
|
22
|
+
|
|
23
|
+
transcribe(audio: ArrayBuffer): Promise<string>
|
|
24
|
+
transcribeStream(
|
|
25
|
+
audio: ArrayBuffer,
|
|
26
|
+
onToken: (token: string) => void
|
|
27
|
+
): Promise<string>
|
|
28
|
+
|
|
29
|
+
startListening(): Promise<void>
|
|
30
|
+
transcribeBuffer(): Promise<string>
|
|
31
|
+
stopListening(): Promise<string>
|
|
32
|
+
|
|
33
|
+
stop(): void
|
|
34
|
+
unload(): void
|
|
35
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules'
|
|
2
|
+
|
|
3
|
+
export interface TTSLoadOptions {
|
|
4
|
+
onProgress?: (progress: number) => void
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface TTSGenerateOptions {
|
|
8
|
+
voice?: string
|
|
9
|
+
speed?: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface TTS extends HybridObject<{ ios: 'swift' }> {
|
|
13
|
+
readonly isLoaded: boolean
|
|
14
|
+
readonly isGenerating: boolean
|
|
15
|
+
readonly modelId: string
|
|
16
|
+
readonly sampleRate: number
|
|
17
|
+
|
|
18
|
+
load(modelId: string, options?: TTSLoadOptions): Promise<void>
|
|
19
|
+
generate(
|
|
20
|
+
text: string,
|
|
21
|
+
options?: TTSGenerateOptions
|
|
22
|
+
): Promise<ArrayBuffer>
|
|
23
|
+
stream(
|
|
24
|
+
text: string,
|
|
25
|
+
onAudioChunk: (audio: ArrayBuffer) => void,
|
|
26
|
+
options?: TTSGenerateOptions
|
|
27
|
+
): Promise<void>
|
|
28
|
+
stop(): void
|
|
29
|
+
unload(): void
|
|
30
|
+
}
|
package/src/stt.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules'
|
|
2
|
+
import type {
|
|
3
|
+
STT as STTSpec,
|
|
4
|
+
STTLoadOptions,
|
|
5
|
+
} from './specs/STT.nitro'
|
|
6
|
+
|
|
7
|
+
let instance: STTSpec | null = null
|
|
8
|
+
|
|
9
|
+
function getInstance(): STTSpec {
|
|
10
|
+
if (!instance) {
|
|
11
|
+
instance = NitroModules.createHybridObject<STTSpec>('STT')
|
|
12
|
+
}
|
|
13
|
+
return instance
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const STT = {
|
|
17
|
+
load(modelId: string, options?: STTLoadOptions): Promise<void> {
|
|
18
|
+
return getInstance().load(modelId, options)
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
transcribe(audio: ArrayBuffer): Promise<string> {
|
|
22
|
+
return getInstance().transcribe(audio)
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
transcribeStream(
|
|
26
|
+
audio: ArrayBuffer,
|
|
27
|
+
onToken: (token: string) => void
|
|
28
|
+
): Promise<string> {
|
|
29
|
+
return getInstance().transcribeStream(audio, onToken)
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
startListening(): Promise<void> {
|
|
33
|
+
return getInstance().startListening()
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
transcribeBuffer(): Promise<string> {
|
|
37
|
+
return getInstance().transcribeBuffer()
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
stopListening(): Promise<string> {
|
|
41
|
+
return getInstance().stopListening()
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
stop(): void {
|
|
45
|
+
getInstance().stop()
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
unload(): void {
|
|
49
|
+
getInstance().unload()
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
get isLoaded(): boolean {
|
|
53
|
+
return getInstance().isLoaded
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
get isTranscribing(): boolean {
|
|
57
|
+
return getInstance().isTranscribing
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
get isListening(): boolean {
|
|
61
|
+
return getInstance().isListening
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
get modelId(): string {
|
|
65
|
+
return getInstance().modelId
|
|
66
|
+
},
|
|
67
|
+
}
|
package/src/tts.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules'
|
|
2
|
+
import type {
|
|
3
|
+
TTS as TTSSpec,
|
|
4
|
+
TTSLoadOptions,
|
|
5
|
+
TTSGenerateOptions,
|
|
6
|
+
} from './specs/TTS.nitro'
|
|
7
|
+
|
|
8
|
+
let instance: TTSSpec | null = null
|
|
9
|
+
|
|
10
|
+
function getInstance(): TTSSpec {
|
|
11
|
+
if (!instance) {
|
|
12
|
+
instance = NitroModules.createHybridObject<TTSSpec>('TTS')
|
|
13
|
+
}
|
|
14
|
+
return instance
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const TTS = {
|
|
18
|
+
load(modelId: string, options?: TTSLoadOptions): Promise<void> {
|
|
19
|
+
return getInstance().load(modelId, options)
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
generate(
|
|
23
|
+
text: string,
|
|
24
|
+
options?: TTSGenerateOptions
|
|
25
|
+
): Promise<ArrayBuffer> {
|
|
26
|
+
return getInstance().generate(text, options)
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
stream(
|
|
30
|
+
text: string,
|
|
31
|
+
onAudioChunk: (audio: ArrayBuffer) => void,
|
|
32
|
+
options?: TTSGenerateOptions
|
|
33
|
+
): Promise<void> {
|
|
34
|
+
return getInstance().stream(text, onAudioChunk, options)
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
stop(): void {
|
|
38
|
+
getInstance().stop()
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
unload(): void {
|
|
42
|
+
getInstance().unload()
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
get isLoaded(): boolean {
|
|
46
|
+
return getInstance().isLoaded
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
get isGenerating(): boolean {
|
|
50
|
+
return getInstance().isGenerating
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
get modelId(): string {
|
|
54
|
+
return getInstance().modelId
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
get sampleRate(): number {
|
|
58
|
+
return getInstance().sampleRate
|
|
59
|
+
},
|
|
60
|
+
}
|