@inferrlm/react-native-mlx 0.2.0-inferrlm.2 → 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 +9 -3
- package/ios/Sources/AudioCaptureManager.swift +110 -0
- package/ios/Sources/HybridLLM.swift +562 -74
- 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/nitrogen/generated/ios/MLXReactNative+autolinking.rb +1 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.cpp +76 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.hpp +338 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Umbrella.hpp +28 -1
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.mm +17 -1
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.swift +31 -1
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.hpp +18 -3
- package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.hpp +1 -1
- 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_std__shared_ptr_Promise_std__shared_ptr_Promise_std__shared_ptr_AnyMap______std__shared_ptr_AnyMap_.swift +62 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_AnyMap_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +1 -1
- package/nitrogen/generated/ios/swift/GenerationStats.swift +14 -3
- package/nitrogen/generated/ios/swift/HybridLLMSpec.swift +3 -2
- package/nitrogen/generated/ios/swift/HybridLLMSpec_cxx.swift +38 -2
- package/nitrogen/generated/ios/swift/HybridModelManagerSpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridModelManagerSpec_cxx.swift +1 -1
- 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/LLMLoadOptions.swift +44 -2
- package/nitrogen/generated/ios/swift/LLMMessage.swift +1 -1
- 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/ios/swift/ToolDefinition.swift +113 -0
- package/nitrogen/generated/ios/swift/ToolParameter.swift +69 -0
- package/nitrogen/generated/shared/c++/GenerationStats.hpp +7 -3
- package/nitrogen/generated/shared/c++/HybridLLMSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridLLMSpec.hpp +3 -2
- package/nitrogen/generated/shared/c++/HybridModelManagerSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridModelManagerSpec.hpp +1 -1
- 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++/LLMLoadOptions.hpp +10 -3
- package/nitrogen/generated/shared/c++/LLMMessage.hpp +1 -1
- 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/nitrogen/generated/shared/c++/ToolDefinition.hpp +93 -0
- package/nitrogen/generated/shared/c++/ToolParameter.hpp +87 -0
- package/package.json +13 -8
- package/src/index.ts +48 -4
- package/src/llm.ts +90 -5
- package/src/models.ts +347 -0
- package/src/specs/LLM.nitro.ts +111 -7
- package/src/specs/STT.nitro.ts +35 -0
- package/src/specs/TTS.nitro.ts +30 -0
- package/src/stt.ts +67 -0
- package/src/tool-utils.ts +74 -0
- package/src/tts.ts +60 -0
- package/lib/module/index.js +0 -6
- package/lib/module/index.js.map +0 -1
- package/lib/module/llm.js +0 -125
- package/lib/module/llm.js.map +0 -1
- package/lib/module/modelManager.js +0 -79
- package/lib/module/modelManager.js.map +0 -1
- package/lib/module/models.js +0 -41
- package/lib/module/models.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/specs/LLM.nitro.js +0 -4
- package/lib/module/specs/LLM.nitro.js.map +0 -1
- package/lib/module/specs/ModelManager.nitro.js +0 -4
- package/lib/module/specs/ModelManager.nitro.js.map +0 -1
- package/lib/typescript/package.json +0 -1
- package/lib/typescript/src/index.d.ts +0 -6
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/llm.d.ts +0 -87
- package/lib/typescript/src/llm.d.ts.map +0 -1
- package/lib/typescript/src/modelManager.d.ts +0 -53
- package/lib/typescript/src/modelManager.d.ts.map +0 -1
- package/lib/typescript/src/models.d.ts +0 -29
- package/lib/typescript/src/models.d.ts.map +0 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +0 -88
- package/lib/typescript/src/specs/LLM.nitro.d.ts.map +0 -1
- package/lib/typescript/src/specs/ModelManager.nitro.d.ts +0 -41
- package/lib/typescript/src/specs/ModelManager.nitro.d.ts.map +0 -1
package/src/models.ts
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
export enum ModelFamily {
|
|
2
|
+
Llama = 'Llama',
|
|
3
|
+
Qwen = 'Qwen',
|
|
4
|
+
Gemma = 'Gemma',
|
|
5
|
+
Phi = 'Phi',
|
|
6
|
+
SmolLM = 'SmolLM',
|
|
7
|
+
OpenELM = 'OpenELM',
|
|
8
|
+
PocketTTS = 'PocketTTS',
|
|
9
|
+
GLMASR = 'GLMASR',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export enum ModelProvider {
|
|
13
|
+
Meta = 'Meta',
|
|
14
|
+
Alibaba = 'Alibaba',
|
|
15
|
+
Google = 'Google',
|
|
16
|
+
Microsoft = 'Microsoft',
|
|
17
|
+
HuggingFace = 'HuggingFace',
|
|
18
|
+
Apple = 'Apple',
|
|
19
|
+
Kyutai = 'Kyutai',
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type ModelQuantization = '4bit' | '8bit' | 'bf16'
|
|
23
|
+
|
|
24
|
+
export type ModelType = 'llm' | 'tts' | 'stt'
|
|
25
|
+
|
|
26
|
+
export interface ModelInfo {
|
|
27
|
+
id: MLXModel
|
|
28
|
+
family: ModelFamily
|
|
29
|
+
provider: ModelProvider
|
|
30
|
+
parameters: string
|
|
31
|
+
quantization: ModelQuantization
|
|
32
|
+
displayName: string
|
|
33
|
+
downloadSize: number
|
|
34
|
+
type: ModelType
|
|
35
|
+
}
|
|
36
|
+
|
|
1
37
|
export enum MLXModel {
|
|
2
38
|
// Llama 3.2 (Meta) - 1B and 3B variants
|
|
3
39
|
Llama_3_2_1B_Instruct_4bit = 'mlx-community/Llama-3.2-1B-Instruct-4bit',
|
|
@@ -42,4 +78,315 @@ export enum MLXModel {
|
|
|
42
78
|
OpenELM_1_1B_8bit = 'mlx-community/OpenELM-1_1B-8bit',
|
|
43
79
|
OpenELM_3B_4bit = 'mlx-community/OpenELM-3B-4bit',
|
|
44
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',
|
|
45
89
|
}
|
|
90
|
+
|
|
91
|
+
export const MLXModels: ModelInfo[] = [
|
|
92
|
+
{
|
|
93
|
+
id: MLXModel.Llama_3_2_1B_Instruct_4bit,
|
|
94
|
+
family: ModelFamily.Llama,
|
|
95
|
+
provider: ModelProvider.Meta,
|
|
96
|
+
parameters: '1B',
|
|
97
|
+
quantization: '4bit',
|
|
98
|
+
displayName: 'Llama 3.2 1B Instruct (4-bit)',
|
|
99
|
+
downloadSize: 1407777762,
|
|
100
|
+
type: 'llm',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: MLXModel.Llama_3_2_1B_Instruct_8bit,
|
|
104
|
+
family: ModelFamily.Llama,
|
|
105
|
+
provider: ModelProvider.Meta,
|
|
106
|
+
parameters: '1B',
|
|
107
|
+
quantization: '8bit',
|
|
108
|
+
displayName: 'Llama 3.2 1B Instruct (8-bit)',
|
|
109
|
+
downloadSize: 1313157436,
|
|
110
|
+
type: 'llm',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: MLXModel.Llama_3_2_3B_Instruct_4bit,
|
|
114
|
+
family: ModelFamily.Llama,
|
|
115
|
+
provider: ModelProvider.Meta,
|
|
116
|
+
parameters: '3B',
|
|
117
|
+
quantization: '4bit',
|
|
118
|
+
displayName: 'Llama 3.2 3B Instruct (4-bit)',
|
|
119
|
+
downloadSize: 2019397474,
|
|
120
|
+
type: 'llm',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: MLXModel.Llama_3_2_3B_Instruct_8bit,
|
|
124
|
+
family: ModelFamily.Llama,
|
|
125
|
+
provider: ModelProvider.Meta,
|
|
126
|
+
parameters: '3B',
|
|
127
|
+
quantization: '8bit',
|
|
128
|
+
displayName: 'Llama 3.2 3B Instruct (8-bit)',
|
|
129
|
+
downloadSize: 3413784042,
|
|
130
|
+
type: 'llm',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
id: MLXModel.Qwen2_5_0_5B_Instruct_4bit,
|
|
134
|
+
family: ModelFamily.Qwen,
|
|
135
|
+
provider: ModelProvider.Alibaba,
|
|
136
|
+
parameters: '0.5B',
|
|
137
|
+
quantization: '4bit',
|
|
138
|
+
displayName: 'Qwen 2.5 0.5B Instruct (4-bit)',
|
|
139
|
+
downloadSize: 278064920,
|
|
140
|
+
type: 'llm',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: MLXModel.Qwen2_5_0_5B_Instruct_8bit,
|
|
144
|
+
family: ModelFamily.Qwen,
|
|
145
|
+
provider: ModelProvider.Alibaba,
|
|
146
|
+
parameters: '0.5B',
|
|
147
|
+
quantization: '8bit',
|
|
148
|
+
displayName: 'Qwen 2.5 0.5B Instruct (8-bit)',
|
|
149
|
+
downloadSize: 525045902,
|
|
150
|
+
type: 'llm',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: MLXModel.Qwen2_5_1_5B_Instruct_4bit,
|
|
154
|
+
family: ModelFamily.Qwen,
|
|
155
|
+
provider: ModelProvider.Alibaba,
|
|
156
|
+
parameters: '1.5B',
|
|
157
|
+
quantization: '4bit',
|
|
158
|
+
displayName: 'Qwen 2.5 1.5B Instruct (4-bit)',
|
|
159
|
+
downloadSize: 868628559,
|
|
160
|
+
type: 'llm',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: MLXModel.Qwen2_5_1_5B_Instruct_8bit,
|
|
164
|
+
family: ModelFamily.Qwen,
|
|
165
|
+
provider: ModelProvider.Alibaba,
|
|
166
|
+
parameters: '1.5B',
|
|
167
|
+
quantization: '8bit',
|
|
168
|
+
displayName: 'Qwen 2.5 1.5B Instruct (8-bit)',
|
|
169
|
+
downloadSize: 1640414038,
|
|
170
|
+
type: 'llm',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
id: MLXModel.Qwen2_5_3B_Instruct_4bit,
|
|
174
|
+
family: ModelFamily.Qwen,
|
|
175
|
+
provider: ModelProvider.Alibaba,
|
|
176
|
+
parameters: '3B',
|
|
177
|
+
quantization: '4bit',
|
|
178
|
+
displayName: 'Qwen 2.5 3B Instruct (4-bit)',
|
|
179
|
+
downloadSize: 1736293090,
|
|
180
|
+
type: 'llm',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: MLXModel.Qwen2_5_3B_Instruct_8bit,
|
|
184
|
+
family: ModelFamily.Qwen,
|
|
185
|
+
provider: ModelProvider.Alibaba,
|
|
186
|
+
parameters: '3B',
|
|
187
|
+
quantization: '8bit',
|
|
188
|
+
displayName: 'Qwen 2.5 3B Instruct (8-bit)',
|
|
189
|
+
downloadSize: 3279142142,
|
|
190
|
+
type: 'llm',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
id: MLXModel.Qwen3_1_7B_4bit,
|
|
194
|
+
family: ModelFamily.Qwen,
|
|
195
|
+
provider: ModelProvider.Alibaba,
|
|
196
|
+
parameters: '1.7B',
|
|
197
|
+
quantization: '4bit',
|
|
198
|
+
displayName: 'Qwen 3 1.7B (4-bit)',
|
|
199
|
+
downloadSize: 979502864,
|
|
200
|
+
type: 'llm',
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
id: MLXModel.Qwen3_1_7B_8bit,
|
|
204
|
+
family: ModelFamily.Qwen,
|
|
205
|
+
provider: ModelProvider.Alibaba,
|
|
206
|
+
parameters: '1.7B',
|
|
207
|
+
quantization: '8bit',
|
|
208
|
+
displayName: 'Qwen 3 1.7B (8-bit)',
|
|
209
|
+
downloadSize: 1839729195,
|
|
210
|
+
type: 'llm',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
id: MLXModel.Gemma_3_1B_IT_4bit,
|
|
214
|
+
family: ModelFamily.Gemma,
|
|
215
|
+
provider: ModelProvider.Google,
|
|
216
|
+
parameters: '1B',
|
|
217
|
+
quantization: '4bit',
|
|
218
|
+
displayName: 'Gemma 3 1B IT (4-bit)',
|
|
219
|
+
downloadSize: 770650946,
|
|
220
|
+
type: 'llm',
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: MLXModel.Gemma_3_1B_IT_8bit,
|
|
224
|
+
family: ModelFamily.Gemma,
|
|
225
|
+
provider: ModelProvider.Google,
|
|
226
|
+
parameters: '1B',
|
|
227
|
+
quantization: '8bit',
|
|
228
|
+
displayName: 'Gemma 3 1B IT (8-bit)',
|
|
229
|
+
downloadSize: 1421522471,
|
|
230
|
+
type: 'llm',
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: MLXModel.Phi_3_5_Mini_Instruct_4bit,
|
|
234
|
+
family: ModelFamily.Phi,
|
|
235
|
+
provider: ModelProvider.Microsoft,
|
|
236
|
+
parameters: '3.8B',
|
|
237
|
+
quantization: '4bit',
|
|
238
|
+
displayName: 'Phi 3.5 Mini Instruct (4-bit)',
|
|
239
|
+
downloadSize: 2150195856,
|
|
240
|
+
type: 'llm',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
id: MLXModel.Phi_3_5_Mini_Instruct_8bit,
|
|
244
|
+
family: ModelFamily.Phi,
|
|
245
|
+
provider: ModelProvider.Microsoft,
|
|
246
|
+
parameters: '3.8B',
|
|
247
|
+
quantization: '8bit',
|
|
248
|
+
displayName: 'Phi 3.5 Mini Instruct (8-bit)',
|
|
249
|
+
downloadSize: 4060636056,
|
|
250
|
+
type: 'llm',
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
id: MLXModel.Phi_4_Mini_Instruct_4bit,
|
|
254
|
+
family: ModelFamily.Phi,
|
|
255
|
+
provider: ModelProvider.Microsoft,
|
|
256
|
+
parameters: '3.8B',
|
|
257
|
+
quantization: '4bit',
|
|
258
|
+
displayName: 'Phi 4 Mini Instruct (4-bit)',
|
|
259
|
+
downloadSize: 2173624891,
|
|
260
|
+
type: 'llm',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
id: MLXModel.Phi_4_Mini_Instruct_8bit,
|
|
264
|
+
family: ModelFamily.Phi,
|
|
265
|
+
provider: ModelProvider.Microsoft,
|
|
266
|
+
parameters: '3.8B',
|
|
267
|
+
quantization: '8bit',
|
|
268
|
+
displayName: 'Phi 4 Mini Instruct (8-bit)',
|
|
269
|
+
downloadSize: 4091536167,
|
|
270
|
+
type: 'llm',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
id: MLXModel.SmolLM_1_7B_Instruct_4bit,
|
|
274
|
+
family: ModelFamily.SmolLM,
|
|
275
|
+
provider: ModelProvider.HuggingFace,
|
|
276
|
+
parameters: '1.7B',
|
|
277
|
+
quantization: '4bit',
|
|
278
|
+
displayName: 'SmolLM 1.7B Instruct (4-bit)',
|
|
279
|
+
downloadSize: 962855374,
|
|
280
|
+
type: 'llm',
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
id: MLXModel.SmolLM_1_7B_Instruct_8bit,
|
|
284
|
+
family: ModelFamily.SmolLM,
|
|
285
|
+
provider: ModelProvider.HuggingFace,
|
|
286
|
+
parameters: '1.7B',
|
|
287
|
+
quantization: '8bit',
|
|
288
|
+
displayName: 'SmolLM 1.7B Instruct (8-bit)',
|
|
289
|
+
downloadSize: 1818493993,
|
|
290
|
+
type: 'llm',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
id: MLXModel.SmolLM2_1_7B_Instruct_4bit,
|
|
294
|
+
family: ModelFamily.SmolLM,
|
|
295
|
+
provider: ModelProvider.HuggingFace,
|
|
296
|
+
parameters: '1.7B',
|
|
297
|
+
quantization: '4bit',
|
|
298
|
+
displayName: 'SmolLM2 1.7B Instruct (4-bit)',
|
|
299
|
+
downloadSize: 980000000,
|
|
300
|
+
type: 'llm',
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
id: MLXModel.SmolLM2_1_7B_Instruct_8bit,
|
|
304
|
+
family: ModelFamily.SmolLM,
|
|
305
|
+
provider: ModelProvider.HuggingFace,
|
|
306
|
+
parameters: '1.7B',
|
|
307
|
+
quantization: '8bit',
|
|
308
|
+
displayName: 'SmolLM2 1.7B Instruct (8-bit)',
|
|
309
|
+
downloadSize: 1850000000,
|
|
310
|
+
type: 'llm',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
id: MLXModel.OpenELM_1_1B_4bit,
|
|
314
|
+
family: ModelFamily.OpenELM,
|
|
315
|
+
provider: ModelProvider.Apple,
|
|
316
|
+
parameters: '1.1B',
|
|
317
|
+
quantization: '4bit',
|
|
318
|
+
displayName: 'OpenELM 1.1B (4-bit)',
|
|
319
|
+
downloadSize: 608162655,
|
|
320
|
+
type: 'llm',
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
id: MLXModel.OpenELM_1_1B_8bit,
|
|
324
|
+
family: ModelFamily.OpenELM,
|
|
325
|
+
provider: ModelProvider.Apple,
|
|
326
|
+
parameters: '1.1B',
|
|
327
|
+
quantization: '8bit',
|
|
328
|
+
displayName: 'OpenELM 1.1B (8-bit)',
|
|
329
|
+
downloadSize: 1148048397,
|
|
330
|
+
type: 'llm',
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
id: MLXModel.OpenELM_3B_4bit,
|
|
334
|
+
family: ModelFamily.OpenELM,
|
|
335
|
+
provider: ModelProvider.Apple,
|
|
336
|
+
parameters: '3B',
|
|
337
|
+
quantization: '4bit',
|
|
338
|
+
displayName: 'OpenELM 3B (4-bit)',
|
|
339
|
+
downloadSize: 1650000000,
|
|
340
|
+
type: 'llm',
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
id: MLXModel.OpenELM_3B_8bit,
|
|
344
|
+
family: ModelFamily.OpenELM,
|
|
345
|
+
provider: ModelProvider.Apple,
|
|
346
|
+
parameters: '3B',
|
|
347
|
+
quantization: '8bit',
|
|
348
|
+
displayName: 'OpenELM 3B (8-bit)',
|
|
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',
|
|
391
|
+
},
|
|
392
|
+
]
|
package/src/specs/LLM.nitro.ts
CHANGED
|
@@ -1,24 +1,109 @@
|
|
|
1
|
-
import type { HybridObject } from 'react-native-nitro-modules'
|
|
1
|
+
import type { AnyMap, HybridObject } from 'react-native-nitro-modules'
|
|
2
2
|
|
|
3
3
|
/**
|
|
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
|
|
20
85
|
}
|
|
21
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Parameter definition for a tool.
|
|
89
|
+
*/
|
|
90
|
+
export interface ToolParameter {
|
|
91
|
+
name: string
|
|
92
|
+
type: string
|
|
93
|
+
description: string
|
|
94
|
+
required: boolean
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Tool definition that can be called by the model.
|
|
99
|
+
*/
|
|
100
|
+
export interface ToolDefinition {
|
|
101
|
+
name: string
|
|
102
|
+
description: string
|
|
103
|
+
parameters: ToolParameter[]
|
|
104
|
+
handler: (args: AnyMap) => Promise<AnyMap>
|
|
105
|
+
}
|
|
106
|
+
|
|
22
107
|
/** Options for loading a model.
|
|
23
108
|
*/
|
|
24
109
|
export interface LLMLoadOptions {
|
|
@@ -28,6 +113,8 @@ export interface LLMLoadOptions {
|
|
|
28
113
|
additionalContext?: LLMMessage[]
|
|
29
114
|
/** Whether to automatically manage message history */
|
|
30
115
|
manageHistory?: boolean
|
|
116
|
+
/** Tools available for the model to call */
|
|
117
|
+
tools?: ToolDefinition[]
|
|
31
118
|
}
|
|
32
119
|
|
|
33
120
|
/**
|
|
@@ -50,12 +137,23 @@ export interface LLM extends HybridObject<{ ios: 'swift' }> {
|
|
|
50
137
|
generate(prompt: string): Promise<string>
|
|
51
138
|
|
|
52
139
|
/**
|
|
53
|
-
* Stream a response token by token.
|
|
140
|
+
* Stream a response token by token with optional tool calling support.
|
|
141
|
+
* Tools are automatically executed when the model calls them.
|
|
54
142
|
* @param prompt - The input text to generate a response for
|
|
55
143
|
* @param onToken - Callback invoked for each generated token
|
|
144
|
+
* @param onToolCall - Optional callback invoked when a tool is called (for UI feedback)
|
|
56
145
|
* @returns The complete generated text
|
|
57
146
|
*/
|
|
58
|
-
stream(
|
|
147
|
+
stream(
|
|
148
|
+
prompt: string,
|
|
149
|
+
onToken: (token: string) => void,
|
|
150
|
+
onToolCall?: (toolName: string, args: string) => void,
|
|
151
|
+
): Promise<string>
|
|
152
|
+
|
|
153
|
+
streamWithEvents(
|
|
154
|
+
prompt: string,
|
|
155
|
+
onEvent: (eventJson: string) => void,
|
|
156
|
+
): Promise<string>
|
|
59
157
|
|
|
60
158
|
/**
|
|
61
159
|
* Stop the current generation.
|
|
@@ -96,3 +194,9 @@ export interface LLM extends HybridObject<{ ios: 'swift' }> {
|
|
|
96
194
|
/** System prompt used when loading the model */
|
|
97
195
|
systemPrompt: string
|
|
98
196
|
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Supported parameter types for tool definitions.
|
|
200
|
+
* Used for type safety in createTool().
|
|
201
|
+
*/
|
|
202
|
+
export type ToolParameterType = 'string' | 'number' | 'boolean' | 'array' | 'object'
|
|
@@ -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
|
+
}
|