@inferrlm/react-native-mlx 0.2.0-inferrlm.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/llm.js +72 -4
- package/lib/module/llm.js.map +1 -1
- package/lib/module/models.js +319 -0
- 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/tool-utils.js +56 -0
- package/lib/module/tool-utils.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 +8 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/llm.d.ts +46 -4
- package/lib/typescript/src/llm.d.ts.map +1 -1
- package/lib/typescript/src/models.d.ts +39 -1
- package/lib/typescript/src/models.d.ts.map +1 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +79 -7
- 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/tool-utils.d.ts +13 -0
- package/lib/typescript/src/tool-utils.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+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 +371 -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/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',
|
|
@@ -17,6 +53,10 @@ export enum MLXModel {
|
|
|
17
53
|
Qwen3_1_7B_4bit = 'mlx-community/Qwen3-1.7B-4bit',
|
|
18
54
|
Qwen3_1_7B_8bit = 'mlx-community/Qwen3-1.7B-8bit',
|
|
19
55
|
|
|
56
|
+
// Qwen 3.5 - 0.8B variant
|
|
57
|
+
Qwen3_5_0_8B_MLX_4bit = 'mlx-community/Qwen3.5-0.8B-MLX-4bit',
|
|
58
|
+
Qwen3_5_0_8B_MLX_8bit = 'mlx-community/Qwen3.5-0.8B-MLX-8bit',
|
|
59
|
+
|
|
20
60
|
// Gemma 3 (Google) - 1B variant
|
|
21
61
|
Gemma_3_1B_IT_4bit = 'mlx-community/gemma-3-1b-it-4bit',
|
|
22
62
|
Gemma_3_1B_IT_8bit = 'mlx-community/gemma-3-1b-it-8bit',
|
|
@@ -42,4 +82,335 @@ export enum MLXModel {
|
|
|
42
82
|
OpenELM_1_1B_8bit = 'mlx-community/OpenELM-1_1B-8bit',
|
|
43
83
|
OpenELM_3B_4bit = 'mlx-community/OpenELM-3B-4bit',
|
|
44
84
|
OpenELM_3B_8bit = 'mlx-community/OpenELM-3B-8bit',
|
|
85
|
+
|
|
86
|
+
// PocketTTS (Kyutai) - 44.6M
|
|
87
|
+
PocketTTS = 'mlx-community/pocket-tts',
|
|
88
|
+
PocketTTS_8bit = 'mlx-community/pocket-tts-8bit',
|
|
89
|
+
PocketTTS_4bit = 'mlx-community/pocket-tts-4bit',
|
|
90
|
+
|
|
91
|
+
// GLM-ASR (GLMASR) - Speech-to-Text
|
|
92
|
+
GLM_ASR_Nano_4bit = 'mlx-community/GLM-ASR-Nano-2512-4bit',
|
|
45
93
|
}
|
|
94
|
+
|
|
95
|
+
export const MLXModels: ModelInfo[] = [
|
|
96
|
+
{
|
|
97
|
+
id: MLXModel.Llama_3_2_1B_Instruct_4bit,
|
|
98
|
+
family: ModelFamily.Llama,
|
|
99
|
+
provider: ModelProvider.Meta,
|
|
100
|
+
parameters: '1B',
|
|
101
|
+
quantization: '4bit',
|
|
102
|
+
displayName: 'Llama 3.2 1B Instruct (4-bit)',
|
|
103
|
+
downloadSize: 1407777762,
|
|
104
|
+
type: 'llm',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: MLXModel.Llama_3_2_1B_Instruct_8bit,
|
|
108
|
+
family: ModelFamily.Llama,
|
|
109
|
+
provider: ModelProvider.Meta,
|
|
110
|
+
parameters: '1B',
|
|
111
|
+
quantization: '8bit',
|
|
112
|
+
displayName: 'Llama 3.2 1B Instruct (8-bit)',
|
|
113
|
+
downloadSize: 1313157436,
|
|
114
|
+
type: 'llm',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: MLXModel.Llama_3_2_3B_Instruct_4bit,
|
|
118
|
+
family: ModelFamily.Llama,
|
|
119
|
+
provider: ModelProvider.Meta,
|
|
120
|
+
parameters: '3B',
|
|
121
|
+
quantization: '4bit',
|
|
122
|
+
displayName: 'Llama 3.2 3B Instruct (4-bit)',
|
|
123
|
+
downloadSize: 2019397474,
|
|
124
|
+
type: 'llm',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: MLXModel.Llama_3_2_3B_Instruct_8bit,
|
|
128
|
+
family: ModelFamily.Llama,
|
|
129
|
+
provider: ModelProvider.Meta,
|
|
130
|
+
parameters: '3B',
|
|
131
|
+
quantization: '8bit',
|
|
132
|
+
displayName: 'Llama 3.2 3B Instruct (8-bit)',
|
|
133
|
+
downloadSize: 3413784042,
|
|
134
|
+
type: 'llm',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: MLXModel.Qwen2_5_0_5B_Instruct_4bit,
|
|
138
|
+
family: ModelFamily.Qwen,
|
|
139
|
+
provider: ModelProvider.Alibaba,
|
|
140
|
+
parameters: '0.5B',
|
|
141
|
+
quantization: '4bit',
|
|
142
|
+
displayName: 'Qwen 2.5 0.5B Instruct (4-bit)',
|
|
143
|
+
downloadSize: 278064920,
|
|
144
|
+
type: 'llm',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: MLXModel.Qwen2_5_0_5B_Instruct_8bit,
|
|
148
|
+
family: ModelFamily.Qwen,
|
|
149
|
+
provider: ModelProvider.Alibaba,
|
|
150
|
+
parameters: '0.5B',
|
|
151
|
+
quantization: '8bit',
|
|
152
|
+
displayName: 'Qwen 2.5 0.5B Instruct (8-bit)',
|
|
153
|
+
downloadSize: 525045902,
|
|
154
|
+
type: 'llm',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: MLXModel.Qwen2_5_1_5B_Instruct_4bit,
|
|
158
|
+
family: ModelFamily.Qwen,
|
|
159
|
+
provider: ModelProvider.Alibaba,
|
|
160
|
+
parameters: '1.5B',
|
|
161
|
+
quantization: '4bit',
|
|
162
|
+
displayName: 'Qwen 2.5 1.5B Instruct (4-bit)',
|
|
163
|
+
downloadSize: 868628559,
|
|
164
|
+
type: 'llm',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: MLXModel.Qwen2_5_1_5B_Instruct_8bit,
|
|
168
|
+
family: ModelFamily.Qwen,
|
|
169
|
+
provider: ModelProvider.Alibaba,
|
|
170
|
+
parameters: '1.5B',
|
|
171
|
+
quantization: '8bit',
|
|
172
|
+
displayName: 'Qwen 2.5 1.5B Instruct (8-bit)',
|
|
173
|
+
downloadSize: 1640414038,
|
|
174
|
+
type: 'llm',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: MLXModel.Qwen2_5_3B_Instruct_4bit,
|
|
178
|
+
family: ModelFamily.Qwen,
|
|
179
|
+
provider: ModelProvider.Alibaba,
|
|
180
|
+
parameters: '3B',
|
|
181
|
+
quantization: '4bit',
|
|
182
|
+
displayName: 'Qwen 2.5 3B Instruct (4-bit)',
|
|
183
|
+
downloadSize: 1736293090,
|
|
184
|
+
type: 'llm',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
id: MLXModel.Qwen2_5_3B_Instruct_8bit,
|
|
188
|
+
family: ModelFamily.Qwen,
|
|
189
|
+
provider: ModelProvider.Alibaba,
|
|
190
|
+
parameters: '3B',
|
|
191
|
+
quantization: '8bit',
|
|
192
|
+
displayName: 'Qwen 2.5 3B Instruct (8-bit)',
|
|
193
|
+
downloadSize: 3279142142,
|
|
194
|
+
type: 'llm',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: MLXModel.Qwen3_1_7B_4bit,
|
|
198
|
+
family: ModelFamily.Qwen,
|
|
199
|
+
provider: ModelProvider.Alibaba,
|
|
200
|
+
parameters: '1.7B',
|
|
201
|
+
quantization: '4bit',
|
|
202
|
+
displayName: 'Qwen 3 1.7B (4-bit)',
|
|
203
|
+
downloadSize: 979502864,
|
|
204
|
+
type: 'llm',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: MLXModel.Qwen3_1_7B_8bit,
|
|
208
|
+
family: ModelFamily.Qwen,
|
|
209
|
+
provider: ModelProvider.Alibaba,
|
|
210
|
+
parameters: '1.7B',
|
|
211
|
+
quantization: '8bit',
|
|
212
|
+
displayName: 'Qwen 3 1.7B (8-bit)',
|
|
213
|
+
downloadSize: 1839729195,
|
|
214
|
+
type: 'llm',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: MLXModel.Qwen3_5_0_8B_MLX_4bit,
|
|
218
|
+
family: ModelFamily.Qwen,
|
|
219
|
+
provider: ModelProvider.Alibaba,
|
|
220
|
+
parameters: '0.8B',
|
|
221
|
+
quantization: '4bit',
|
|
222
|
+
displayName: 'Qwen 3.5 0.8B (4-bit)',
|
|
223
|
+
downloadSize: 550000000,
|
|
224
|
+
type: 'llm',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
id: MLXModel.Qwen3_5_0_8B_MLX_8bit,
|
|
228
|
+
family: ModelFamily.Qwen,
|
|
229
|
+
provider: ModelProvider.Alibaba,
|
|
230
|
+
parameters: '0.8B',
|
|
231
|
+
quantization: '8bit',
|
|
232
|
+
displayName: 'Qwen 3.5 0.8B (8-bit)',
|
|
233
|
+
downloadSize: 950000000,
|
|
234
|
+
type: 'llm',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: MLXModel.Gemma_3_1B_IT_4bit,
|
|
238
|
+
family: ModelFamily.Gemma,
|
|
239
|
+
provider: ModelProvider.Google,
|
|
240
|
+
parameters: '1B',
|
|
241
|
+
quantization: '4bit',
|
|
242
|
+
displayName: 'Gemma 3 1B IT (4-bit)',
|
|
243
|
+
downloadSize: 770650946,
|
|
244
|
+
type: 'llm',
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: MLXModel.Gemma_3_1B_IT_8bit,
|
|
248
|
+
family: ModelFamily.Gemma,
|
|
249
|
+
provider: ModelProvider.Google,
|
|
250
|
+
parameters: '1B',
|
|
251
|
+
quantization: '8bit',
|
|
252
|
+
displayName: 'Gemma 3 1B IT (8-bit)',
|
|
253
|
+
downloadSize: 1421522471,
|
|
254
|
+
type: 'llm',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: MLXModel.Phi_3_5_Mini_Instruct_4bit,
|
|
258
|
+
family: ModelFamily.Phi,
|
|
259
|
+
provider: ModelProvider.Microsoft,
|
|
260
|
+
parameters: '3.8B',
|
|
261
|
+
quantization: '4bit',
|
|
262
|
+
displayName: 'Phi 3.5 Mini Instruct (4-bit)',
|
|
263
|
+
downloadSize: 2150195856,
|
|
264
|
+
type: 'llm',
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
id: MLXModel.Phi_3_5_Mini_Instruct_8bit,
|
|
268
|
+
family: ModelFamily.Phi,
|
|
269
|
+
provider: ModelProvider.Microsoft,
|
|
270
|
+
parameters: '3.8B',
|
|
271
|
+
quantization: '8bit',
|
|
272
|
+
displayName: 'Phi 3.5 Mini Instruct (8-bit)',
|
|
273
|
+
downloadSize: 4060636056,
|
|
274
|
+
type: 'llm',
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
id: MLXModel.Phi_4_Mini_Instruct_4bit,
|
|
278
|
+
family: ModelFamily.Phi,
|
|
279
|
+
provider: ModelProvider.Microsoft,
|
|
280
|
+
parameters: '3.8B',
|
|
281
|
+
quantization: '4bit',
|
|
282
|
+
displayName: 'Phi 4 Mini Instruct (4-bit)',
|
|
283
|
+
downloadSize: 2173624891,
|
|
284
|
+
type: 'llm',
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
id: MLXModel.Phi_4_Mini_Instruct_8bit,
|
|
288
|
+
family: ModelFamily.Phi,
|
|
289
|
+
provider: ModelProvider.Microsoft,
|
|
290
|
+
parameters: '3.8B',
|
|
291
|
+
quantization: '8bit',
|
|
292
|
+
displayName: 'Phi 4 Mini Instruct (8-bit)',
|
|
293
|
+
downloadSize: 4091536167,
|
|
294
|
+
type: 'llm',
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
id: MLXModel.SmolLM_1_7B_Instruct_4bit,
|
|
298
|
+
family: ModelFamily.SmolLM,
|
|
299
|
+
provider: ModelProvider.HuggingFace,
|
|
300
|
+
parameters: '1.7B',
|
|
301
|
+
quantization: '4bit',
|
|
302
|
+
displayName: 'SmolLM 1.7B Instruct (4-bit)',
|
|
303
|
+
downloadSize: 962855374,
|
|
304
|
+
type: 'llm',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
id: MLXModel.SmolLM_1_7B_Instruct_8bit,
|
|
308
|
+
family: ModelFamily.SmolLM,
|
|
309
|
+
provider: ModelProvider.HuggingFace,
|
|
310
|
+
parameters: '1.7B',
|
|
311
|
+
quantization: '8bit',
|
|
312
|
+
displayName: 'SmolLM 1.7B Instruct (8-bit)',
|
|
313
|
+
downloadSize: 1818493993,
|
|
314
|
+
type: 'llm',
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
id: MLXModel.SmolLM2_1_7B_Instruct_4bit,
|
|
318
|
+
family: ModelFamily.SmolLM,
|
|
319
|
+
provider: ModelProvider.HuggingFace,
|
|
320
|
+
parameters: '1.7B',
|
|
321
|
+
quantization: '4bit',
|
|
322
|
+
displayName: 'SmolLM2 1.7B Instruct (4-bit)',
|
|
323
|
+
downloadSize: 980000000,
|
|
324
|
+
type: 'llm',
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
id: MLXModel.SmolLM2_1_7B_Instruct_8bit,
|
|
328
|
+
family: ModelFamily.SmolLM,
|
|
329
|
+
provider: ModelProvider.HuggingFace,
|
|
330
|
+
parameters: '1.7B',
|
|
331
|
+
quantization: '8bit',
|
|
332
|
+
displayName: 'SmolLM2 1.7B Instruct (8-bit)',
|
|
333
|
+
downloadSize: 1850000000,
|
|
334
|
+
type: 'llm',
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
id: MLXModel.OpenELM_1_1B_4bit,
|
|
338
|
+
family: ModelFamily.OpenELM,
|
|
339
|
+
provider: ModelProvider.Apple,
|
|
340
|
+
parameters: '1.1B',
|
|
341
|
+
quantization: '4bit',
|
|
342
|
+
displayName: 'OpenELM 1.1B (4-bit)',
|
|
343
|
+
downloadSize: 608162655,
|
|
344
|
+
type: 'llm',
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
id: MLXModel.OpenELM_1_1B_8bit,
|
|
348
|
+
family: ModelFamily.OpenELM,
|
|
349
|
+
provider: ModelProvider.Apple,
|
|
350
|
+
parameters: '1.1B',
|
|
351
|
+
quantization: '8bit',
|
|
352
|
+
displayName: 'OpenELM 1.1B (8-bit)',
|
|
353
|
+
downloadSize: 1148048397,
|
|
354
|
+
type: 'llm',
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: MLXModel.OpenELM_3B_4bit,
|
|
358
|
+
family: ModelFamily.OpenELM,
|
|
359
|
+
provider: ModelProvider.Apple,
|
|
360
|
+
parameters: '3B',
|
|
361
|
+
quantization: '4bit',
|
|
362
|
+
displayName: 'OpenELM 3B (4-bit)',
|
|
363
|
+
downloadSize: 1650000000,
|
|
364
|
+
type: 'llm',
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
id: MLXModel.OpenELM_3B_8bit,
|
|
368
|
+
family: ModelFamily.OpenELM,
|
|
369
|
+
provider: ModelProvider.Apple,
|
|
370
|
+
parameters: '3B',
|
|
371
|
+
quantization: '8bit',
|
|
372
|
+
displayName: 'OpenELM 3B (8-bit)',
|
|
373
|
+
downloadSize: 3100000000,
|
|
374
|
+
type: 'llm',
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
id: MLXModel.PocketTTS,
|
|
378
|
+
family: ModelFamily.PocketTTS,
|
|
379
|
+
provider: ModelProvider.Kyutai,
|
|
380
|
+
parameters: '44.6M',
|
|
381
|
+
quantization: 'bf16',
|
|
382
|
+
displayName: 'PocketTTS (bf16)',
|
|
383
|
+
downloadSize: 180000000,
|
|
384
|
+
type: 'tts',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
id: MLXModel.PocketTTS_8bit,
|
|
388
|
+
family: ModelFamily.PocketTTS,
|
|
389
|
+
provider: ModelProvider.Kyutai,
|
|
390
|
+
parameters: '44.6M',
|
|
391
|
+
quantization: '8bit',
|
|
392
|
+
displayName: 'PocketTTS (8-bit)',
|
|
393
|
+
downloadSize: 140000000,
|
|
394
|
+
type: 'tts',
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: MLXModel.PocketTTS_4bit,
|
|
398
|
+
family: ModelFamily.PocketTTS,
|
|
399
|
+
provider: ModelProvider.Kyutai,
|
|
400
|
+
parameters: '44.6M',
|
|
401
|
+
quantization: '4bit',
|
|
402
|
+
displayName: 'PocketTTS (4-bit)',
|
|
403
|
+
downloadSize: 80000000,
|
|
404
|
+
type: 'tts',
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
id: MLXModel.GLM_ASR_Nano_4bit,
|
|
408
|
+
family: ModelFamily.GLMASR,
|
|
409
|
+
provider: ModelProvider.Alibaba,
|
|
410
|
+
parameters: '1B',
|
|
411
|
+
quantization: '4bit',
|
|
412
|
+
displayName: 'GLM-ASR Nano (4-bit)',
|
|
413
|
+
downloadSize: 600000000,
|
|
414
|
+
type: 'stt',
|
|
415
|
+
},
|
|
416
|
+
]
|
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
|
+
}
|