react-native-nitro-mlx 0.2.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 +7 -1
- package/ios/Sources/AudioCaptureManager.swift +110 -0
- package/ios/Sources/HybridLLM.swift +518 -42
- 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 +3 -0
- 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 +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/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 +13 -4
- 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 +40 -3
- package/src/llm.ts +90 -5
- package/src/models.ts +81 -1
- 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
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
struct ThinkingStateMachine {
|
|
4
|
+
enum Output {
|
|
5
|
+
case token(String)
|
|
6
|
+
case thinkingStart
|
|
7
|
+
case thinkingChunk(String)
|
|
8
|
+
case thinkingEnd(String)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
private enum State {
|
|
12
|
+
case idle
|
|
13
|
+
case bufferingOpenTag(String)
|
|
14
|
+
case inThinking
|
|
15
|
+
case bufferingCloseTag(String)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private var state: State = .idle
|
|
19
|
+
private var thinkingContent: String = ""
|
|
20
|
+
|
|
21
|
+
private let openTag = "<think>"
|
|
22
|
+
private let closeTag = "</think>"
|
|
23
|
+
|
|
24
|
+
mutating func process(token: String) -> [Output] {
|
|
25
|
+
var outputs: [Output] = []
|
|
26
|
+
var remaining = token
|
|
27
|
+
|
|
28
|
+
while !remaining.isEmpty {
|
|
29
|
+
switch state {
|
|
30
|
+
case .idle:
|
|
31
|
+
outputs.append(contentsOf: processIdle(&remaining))
|
|
32
|
+
|
|
33
|
+
case .bufferingOpenTag(let buffer):
|
|
34
|
+
outputs.append(contentsOf: processBufferingOpenTag(buffer: buffer, remaining: &remaining))
|
|
35
|
+
|
|
36
|
+
case .inThinking:
|
|
37
|
+
outputs.append(contentsOf: processInThinking(&remaining))
|
|
38
|
+
|
|
39
|
+
case .bufferingCloseTag(let buffer):
|
|
40
|
+
outputs.append(contentsOf: processBufferingCloseTag(buffer: buffer, remaining: &remaining))
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return outputs
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
mutating func flush() -> [Output] {
|
|
48
|
+
var outputs: [Output] = []
|
|
49
|
+
|
|
50
|
+
switch state {
|
|
51
|
+
case .bufferingOpenTag(let buffer):
|
|
52
|
+
if !buffer.isEmpty {
|
|
53
|
+
outputs.append(.token(buffer))
|
|
54
|
+
}
|
|
55
|
+
case .bufferingCloseTag(let buffer):
|
|
56
|
+
if !buffer.isEmpty {
|
|
57
|
+
outputs.append(.thinkingChunk(buffer))
|
|
58
|
+
}
|
|
59
|
+
outputs.append(.thinkingEnd(thinkingContent + buffer))
|
|
60
|
+
case .inThinking:
|
|
61
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
62
|
+
case .idle:
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
state = .idle
|
|
67
|
+
thinkingContent = ""
|
|
68
|
+
return outputs
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private mutating func processIdle(_ remaining: inout String) -> [Output] {
|
|
72
|
+
var outputs: [Output] = []
|
|
73
|
+
|
|
74
|
+
if let tagRange = remaining.range(of: openTag) {
|
|
75
|
+
let before = String(remaining[..<tagRange.lowerBound])
|
|
76
|
+
if !before.isEmpty {
|
|
77
|
+
outputs.append(.token(before))
|
|
78
|
+
}
|
|
79
|
+
outputs.append(.thinkingStart)
|
|
80
|
+
state = .inThinking
|
|
81
|
+
thinkingContent = ""
|
|
82
|
+
remaining = String(remaining[tagRange.upperBound...])
|
|
83
|
+
} else if let partialMatch = findPartialMatch(remaining, target: openTag) {
|
|
84
|
+
let before = String(remaining[..<partialMatch.range.lowerBound])
|
|
85
|
+
if !before.isEmpty {
|
|
86
|
+
outputs.append(.token(before))
|
|
87
|
+
}
|
|
88
|
+
state = .bufferingOpenTag(partialMatch.matched)
|
|
89
|
+
remaining = ""
|
|
90
|
+
} else {
|
|
91
|
+
outputs.append(.token(remaining))
|
|
92
|
+
remaining = ""
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return outputs
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private mutating func processBufferingOpenTag(buffer: String, remaining: inout String) -> [Output] {
|
|
99
|
+
var outputs: [Output] = []
|
|
100
|
+
let combined = buffer + remaining
|
|
101
|
+
|
|
102
|
+
if let tagRange = combined.range(of: openTag) {
|
|
103
|
+
let before = String(combined[..<tagRange.lowerBound])
|
|
104
|
+
if !before.isEmpty {
|
|
105
|
+
outputs.append(.token(before))
|
|
106
|
+
}
|
|
107
|
+
outputs.append(.thinkingStart)
|
|
108
|
+
state = .inThinking
|
|
109
|
+
thinkingContent = ""
|
|
110
|
+
remaining = String(combined[tagRange.upperBound...])
|
|
111
|
+
} else if openTag.hasPrefix(combined) {
|
|
112
|
+
state = .bufferingOpenTag(combined)
|
|
113
|
+
remaining = ""
|
|
114
|
+
} else if let partialMatch = findPartialMatch(combined, target: openTag) {
|
|
115
|
+
let before = String(combined[..<partialMatch.range.lowerBound])
|
|
116
|
+
if !before.isEmpty {
|
|
117
|
+
outputs.append(.token(before))
|
|
118
|
+
}
|
|
119
|
+
state = .bufferingOpenTag(partialMatch.matched)
|
|
120
|
+
remaining = ""
|
|
121
|
+
} else {
|
|
122
|
+
outputs.append(.token(combined))
|
|
123
|
+
state = .idle
|
|
124
|
+
remaining = ""
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return outputs
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private mutating func processInThinking(_ remaining: inout String) -> [Output] {
|
|
131
|
+
var outputs: [Output] = []
|
|
132
|
+
|
|
133
|
+
if let tagRange = remaining.range(of: closeTag) {
|
|
134
|
+
let before = String(remaining[..<tagRange.lowerBound])
|
|
135
|
+
if !before.isEmpty {
|
|
136
|
+
thinkingContent += before
|
|
137
|
+
outputs.append(.thinkingChunk(before))
|
|
138
|
+
}
|
|
139
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
140
|
+
state = .idle
|
|
141
|
+
thinkingContent = ""
|
|
142
|
+
remaining = String(remaining[tagRange.upperBound...])
|
|
143
|
+
} else if let partialMatch = findPartialMatch(remaining, target: closeTag) {
|
|
144
|
+
let before = String(remaining[..<partialMatch.range.lowerBound])
|
|
145
|
+
if !before.isEmpty {
|
|
146
|
+
thinkingContent += before
|
|
147
|
+
outputs.append(.thinkingChunk(before))
|
|
148
|
+
}
|
|
149
|
+
state = .bufferingCloseTag(partialMatch.matched)
|
|
150
|
+
remaining = ""
|
|
151
|
+
} else {
|
|
152
|
+
thinkingContent += remaining
|
|
153
|
+
outputs.append(.thinkingChunk(remaining))
|
|
154
|
+
remaining = ""
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return outputs
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private mutating func processBufferingCloseTag(buffer: String, remaining: inout String) -> [Output] {
|
|
161
|
+
var outputs: [Output] = []
|
|
162
|
+
let combined = buffer + remaining
|
|
163
|
+
|
|
164
|
+
if let tagRange = combined.range(of: closeTag) {
|
|
165
|
+
let before = String(combined[..<tagRange.lowerBound])
|
|
166
|
+
if !before.isEmpty {
|
|
167
|
+
thinkingContent += before
|
|
168
|
+
outputs.append(.thinkingChunk(before))
|
|
169
|
+
}
|
|
170
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
171
|
+
state = .idle
|
|
172
|
+
thinkingContent = ""
|
|
173
|
+
remaining = String(combined[tagRange.upperBound...])
|
|
174
|
+
} else if closeTag.hasPrefix(combined) {
|
|
175
|
+
state = .bufferingCloseTag(combined)
|
|
176
|
+
remaining = ""
|
|
177
|
+
} else if let partialMatch = findPartialMatch(combined, target: closeTag) {
|
|
178
|
+
let before = String(combined[..<partialMatch.range.lowerBound])
|
|
179
|
+
if !before.isEmpty {
|
|
180
|
+
thinkingContent += before
|
|
181
|
+
outputs.append(.thinkingChunk(before))
|
|
182
|
+
}
|
|
183
|
+
state = .bufferingCloseTag(partialMatch.matched)
|
|
184
|
+
remaining = ""
|
|
185
|
+
} else {
|
|
186
|
+
thinkingContent += combined
|
|
187
|
+
outputs.append(.thinkingChunk(combined))
|
|
188
|
+
state = .inThinking
|
|
189
|
+
remaining = ""
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return outputs
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
private func findPartialMatch(_ str: String, target: String) -> (range: Range<String.Index>, matched: String)? {
|
|
196
|
+
for i in stride(from: target.count - 1, through: 1, by: -1) {
|
|
197
|
+
let suffix = String(str.suffix(i))
|
|
198
|
+
let prefix = String(target.prefix(i))
|
|
199
|
+
if suffix == prefix {
|
|
200
|
+
let startIndex = str.index(str.endIndex, offsetBy: -i)
|
|
201
|
+
return (startIndex..<str.endIndex, suffix)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return nil
|
|
205
|
+
}
|
|
206
|
+
}
|
package/lib/module/index.js
CHANGED
|
@@ -3,4 +3,7 @@
|
|
|
3
3
|
export { LLM } from "./llm.js";
|
|
4
4
|
export { ModelManager } from "./modelManager.js";
|
|
5
5
|
export { MLXModel, MLXModels, ModelFamily, ModelProvider } from "./models.js";
|
|
6
|
+
export { createTool } from "./tool-utils.js";
|
|
7
|
+
export { TTS } from "./tts.js";
|
|
8
|
+
export { STT } from "./stt.js";
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LLM","ModelManager","MLXModel","MLXModels","ModelFamily","ModelProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"names":["LLM","ModelManager","MLXModel","MLXModels","ModelFamily","ModelProvider","createTool","TTS","STT"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SACEA,GAAG,QAKE,UAAO;AACd,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SACEC,QAAQ,EACRC,SAAS,EACTC,WAAW,EAEXC,aAAa,QAGR,aAAU;AAqBjB,SAASC,UAAU,QAAqC,iBAAc;AACtE,SAASC,GAAG,QAAQ,UAAO;AAM3B,SAASC,GAAG,QAAQ,UAAO","ignoreList":[]}
|
package/lib/module/llm.js
CHANGED
|
@@ -50,13 +50,81 @@ export const LLM = {
|
|
|
50
50
|
return getInstance().generate(prompt);
|
|
51
51
|
},
|
|
52
52
|
/**
|
|
53
|
-
* Stream a response token by token.
|
|
53
|
+
* Stream a response token by token with optional tool calling support.
|
|
54
|
+
* Tools must be provided when loading the model via `load()` options.
|
|
55
|
+
* Tools are automatically executed when the model calls them.
|
|
54
56
|
* @param prompt - The input text to generate a response for
|
|
55
57
|
* @param onToken - Callback invoked for each generated token
|
|
58
|
+
* @param onToolCall - Optional callback invoked when a tool is called.
|
|
59
|
+
* Receives the current tool call and an accumulated array of all tool calls so far.
|
|
56
60
|
* @returns The complete generated text
|
|
57
61
|
*/
|
|
58
|
-
stream(prompt, onToken) {
|
|
59
|
-
|
|
62
|
+
stream(prompt, onToken, onToolCall) {
|
|
63
|
+
const accumulatedToolCalls = [];
|
|
64
|
+
return getInstance().stream(prompt, onToken, (name, argsJson) => {
|
|
65
|
+
if (onToolCall) {
|
|
66
|
+
try {
|
|
67
|
+
const args = JSON.parse(argsJson);
|
|
68
|
+
const toolCall = {
|
|
69
|
+
name,
|
|
70
|
+
arguments: args
|
|
71
|
+
};
|
|
72
|
+
accumulatedToolCalls.push(toolCall);
|
|
73
|
+
onToolCall({
|
|
74
|
+
toolCall,
|
|
75
|
+
allToolCalls: [...accumulatedToolCalls]
|
|
76
|
+
});
|
|
77
|
+
} catch {
|
|
78
|
+
const toolCall = {
|
|
79
|
+
name,
|
|
80
|
+
arguments: {}
|
|
81
|
+
};
|
|
82
|
+
accumulatedToolCalls.push(toolCall);
|
|
83
|
+
onToolCall({
|
|
84
|
+
toolCall,
|
|
85
|
+
allToolCalls: [...accumulatedToolCalls]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
/**
|
|
92
|
+
* Stream with typed events for thinking blocks and tool calls.
|
|
93
|
+
* Provides granular lifecycle events for UI updates.
|
|
94
|
+
*
|
|
95
|
+
* @param prompt - The input text
|
|
96
|
+
* @param onEvent - Callback receiving typed StreamEvent objects
|
|
97
|
+
* @returns Promise resolving to final content string (thinking content stripped)
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* await LLM.streamWithEvents(prompt, (event) => {
|
|
102
|
+
* switch (event.type) {
|
|
103
|
+
* case 'token':
|
|
104
|
+
* appendToContent(event.token)
|
|
105
|
+
* break
|
|
106
|
+
* case 'thinking_start':
|
|
107
|
+
* showThinkingIndicator()
|
|
108
|
+
* break
|
|
109
|
+
* case 'thinking_chunk':
|
|
110
|
+
* appendToThinking(event.chunk)
|
|
111
|
+
* break
|
|
112
|
+
* case 'tool_call_start':
|
|
113
|
+
* showToolCallCard(event.name, event.arguments)
|
|
114
|
+
* break
|
|
115
|
+
* }
|
|
116
|
+
* })
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
streamWithEvents(prompt, onEvent) {
|
|
120
|
+
return getInstance().streamWithEvents(prompt, eventJson => {
|
|
121
|
+
try {
|
|
122
|
+
const event = JSON.parse(eventJson);
|
|
123
|
+
onEvent(event);
|
|
124
|
+
} catch {
|
|
125
|
+
// Silently ignore malformed events
|
|
126
|
+
}
|
|
127
|
+
});
|
|
60
128
|
},
|
|
61
129
|
/**
|
|
62
130
|
* Stop the current generation. Safe to call even if not generating.
|
|
@@ -73,7 +141,7 @@ export const LLM = {
|
|
|
73
141
|
},
|
|
74
142
|
/**
|
|
75
143
|
* Get statistics from the last generation.
|
|
76
|
-
* @returns Statistics including token count, tokens/sec, TTFT, and
|
|
144
|
+
* @returns Statistics including token count, tokens/sec (excluding tool execution), TTFT, total time, and tool execution time
|
|
77
145
|
*/
|
|
78
146
|
getLastGenerationStats() {
|
|
79
147
|
return getInstance().getLastGenerationStats();
|
package/lib/module/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NitroModules","instance","getInstance","createHybridObject","LLM","load","modelId","options","generate","prompt","stream","onToken","stop","unload","getLastGenerationStats","getHistory","clearHistory","isLoaded","isGenerating","debug","value","systemPrompt"],"sourceRoot":"../../src","sources":["llm.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;
|
|
1
|
+
{"version":3,"names":["NitroModules","instance","getInstance","createHybridObject","LLM","load","modelId","options","generate","prompt","stream","onToken","onToolCall","accumulatedToolCalls","name","argsJson","args","JSON","parse","toolCall","arguments","push","allToolCalls","streamWithEvents","onEvent","eventJson","event","stop","unload","getLastGenerationStats","getHistory","clearHistory","isLoaded","isGenerating","debug","value","systemPrompt"],"sourceRoot":"../../src","sources":["llm.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/models.js
CHANGED
|
@@ -7,6 +7,8 @@ export let ModelFamily = /*#__PURE__*/function (ModelFamily) {
|
|
|
7
7
|
ModelFamily["Phi"] = "Phi";
|
|
8
8
|
ModelFamily["SmolLM"] = "SmolLM";
|
|
9
9
|
ModelFamily["OpenELM"] = "OpenELM";
|
|
10
|
+
ModelFamily["PocketTTS"] = "PocketTTS";
|
|
11
|
+
ModelFamily["GLMASR"] = "GLMASR";
|
|
10
12
|
return ModelFamily;
|
|
11
13
|
}({});
|
|
12
14
|
export let ModelProvider = /*#__PURE__*/function (ModelProvider) {
|
|
@@ -16,6 +18,7 @@ export let ModelProvider = /*#__PURE__*/function (ModelProvider) {
|
|
|
16
18
|
ModelProvider["Microsoft"] = "Microsoft";
|
|
17
19
|
ModelProvider["HuggingFace"] = "HuggingFace";
|
|
18
20
|
ModelProvider["Apple"] = "Apple";
|
|
21
|
+
ModelProvider["Kyutai"] = "Kyutai";
|
|
19
22
|
return ModelProvider;
|
|
20
23
|
}({});
|
|
21
24
|
export let MLXModel = /*#__PURE__*/function (MLXModel) {
|
|
@@ -54,6 +57,12 @@ export let MLXModel = /*#__PURE__*/function (MLXModel) {
|
|
|
54
57
|
MLXModel["OpenELM_1_1B_8bit"] = "mlx-community/OpenELM-1_1B-8bit";
|
|
55
58
|
MLXModel["OpenELM_3B_4bit"] = "mlx-community/OpenELM-3B-4bit";
|
|
56
59
|
MLXModel["OpenELM_3B_8bit"] = "mlx-community/OpenELM-3B-8bit";
|
|
60
|
+
// PocketTTS (Kyutai) - 44.6M
|
|
61
|
+
MLXModel["PocketTTS"] = "mlx-community/pocket-tts";
|
|
62
|
+
MLXModel["PocketTTS_8bit"] = "mlx-community/pocket-tts-8bit";
|
|
63
|
+
MLXModel["PocketTTS_4bit"] = "mlx-community/pocket-tts-4bit";
|
|
64
|
+
// GLM-ASR (GLMASR) - Speech-to-Text
|
|
65
|
+
MLXModel["GLM_ASR_Nano_4bit"] = "mlx-community/GLM-ASR-Nano-2512-4bit";
|
|
57
66
|
return MLXModel;
|
|
58
67
|
}({});
|
|
59
68
|
export const MLXModels = [{
|
|
@@ -63,7 +72,8 @@ export const MLXModels = [{
|
|
|
63
72
|
parameters: '1B',
|
|
64
73
|
quantization: '4bit',
|
|
65
74
|
displayName: 'Llama 3.2 1B Instruct (4-bit)',
|
|
66
|
-
downloadSize: 1407777762
|
|
75
|
+
downloadSize: 1407777762,
|
|
76
|
+
type: 'llm'
|
|
67
77
|
}, {
|
|
68
78
|
id: MLXModel.Llama_3_2_1B_Instruct_8bit,
|
|
69
79
|
family: ModelFamily.Llama,
|
|
@@ -71,7 +81,8 @@ export const MLXModels = [{
|
|
|
71
81
|
parameters: '1B',
|
|
72
82
|
quantization: '8bit',
|
|
73
83
|
displayName: 'Llama 3.2 1B Instruct (8-bit)',
|
|
74
|
-
downloadSize: 1313157436
|
|
84
|
+
downloadSize: 1313157436,
|
|
85
|
+
type: 'llm'
|
|
75
86
|
}, {
|
|
76
87
|
id: MLXModel.Llama_3_2_3B_Instruct_4bit,
|
|
77
88
|
family: ModelFamily.Llama,
|
|
@@ -79,7 +90,8 @@ export const MLXModels = [{
|
|
|
79
90
|
parameters: '3B',
|
|
80
91
|
quantization: '4bit',
|
|
81
92
|
displayName: 'Llama 3.2 3B Instruct (4-bit)',
|
|
82
|
-
downloadSize: 2019397474
|
|
93
|
+
downloadSize: 2019397474,
|
|
94
|
+
type: 'llm'
|
|
83
95
|
}, {
|
|
84
96
|
id: MLXModel.Llama_3_2_3B_Instruct_8bit,
|
|
85
97
|
family: ModelFamily.Llama,
|
|
@@ -87,7 +99,8 @@ export const MLXModels = [{
|
|
|
87
99
|
parameters: '3B',
|
|
88
100
|
quantization: '8bit',
|
|
89
101
|
displayName: 'Llama 3.2 3B Instruct (8-bit)',
|
|
90
|
-
downloadSize: 3413784042
|
|
102
|
+
downloadSize: 3413784042,
|
|
103
|
+
type: 'llm'
|
|
91
104
|
}, {
|
|
92
105
|
id: MLXModel.Qwen2_5_0_5B_Instruct_4bit,
|
|
93
106
|
family: ModelFamily.Qwen,
|
|
@@ -95,7 +108,8 @@ export const MLXModels = [{
|
|
|
95
108
|
parameters: '0.5B',
|
|
96
109
|
quantization: '4bit',
|
|
97
110
|
displayName: 'Qwen 2.5 0.5B Instruct (4-bit)',
|
|
98
|
-
downloadSize: 278064920
|
|
111
|
+
downloadSize: 278064920,
|
|
112
|
+
type: 'llm'
|
|
99
113
|
}, {
|
|
100
114
|
id: MLXModel.Qwen2_5_0_5B_Instruct_8bit,
|
|
101
115
|
family: ModelFamily.Qwen,
|
|
@@ -103,7 +117,8 @@ export const MLXModels = [{
|
|
|
103
117
|
parameters: '0.5B',
|
|
104
118
|
quantization: '8bit',
|
|
105
119
|
displayName: 'Qwen 2.5 0.5B Instruct (8-bit)',
|
|
106
|
-
downloadSize: 525045902
|
|
120
|
+
downloadSize: 525045902,
|
|
121
|
+
type: 'llm'
|
|
107
122
|
}, {
|
|
108
123
|
id: MLXModel.Qwen2_5_1_5B_Instruct_4bit,
|
|
109
124
|
family: ModelFamily.Qwen,
|
|
@@ -111,7 +126,8 @@ export const MLXModels = [{
|
|
|
111
126
|
parameters: '1.5B',
|
|
112
127
|
quantization: '4bit',
|
|
113
128
|
displayName: 'Qwen 2.5 1.5B Instruct (4-bit)',
|
|
114
|
-
downloadSize: 868628559
|
|
129
|
+
downloadSize: 868628559,
|
|
130
|
+
type: 'llm'
|
|
115
131
|
}, {
|
|
116
132
|
id: MLXModel.Qwen2_5_1_5B_Instruct_8bit,
|
|
117
133
|
family: ModelFamily.Qwen,
|
|
@@ -119,7 +135,8 @@ export const MLXModels = [{
|
|
|
119
135
|
parameters: '1.5B',
|
|
120
136
|
quantization: '8bit',
|
|
121
137
|
displayName: 'Qwen 2.5 1.5B Instruct (8-bit)',
|
|
122
|
-
downloadSize: 1640414038
|
|
138
|
+
downloadSize: 1640414038,
|
|
139
|
+
type: 'llm'
|
|
123
140
|
}, {
|
|
124
141
|
id: MLXModel.Qwen2_5_3B_Instruct_4bit,
|
|
125
142
|
family: ModelFamily.Qwen,
|
|
@@ -127,7 +144,8 @@ export const MLXModels = [{
|
|
|
127
144
|
parameters: '3B',
|
|
128
145
|
quantization: '4bit',
|
|
129
146
|
displayName: 'Qwen 2.5 3B Instruct (4-bit)',
|
|
130
|
-
downloadSize: 1736293090
|
|
147
|
+
downloadSize: 1736293090,
|
|
148
|
+
type: 'llm'
|
|
131
149
|
}, {
|
|
132
150
|
id: MLXModel.Qwen2_5_3B_Instruct_8bit,
|
|
133
151
|
family: ModelFamily.Qwen,
|
|
@@ -135,7 +153,8 @@ export const MLXModels = [{
|
|
|
135
153
|
parameters: '3B',
|
|
136
154
|
quantization: '8bit',
|
|
137
155
|
displayName: 'Qwen 2.5 3B Instruct (8-bit)',
|
|
138
|
-
downloadSize: 3279142142
|
|
156
|
+
downloadSize: 3279142142,
|
|
157
|
+
type: 'llm'
|
|
139
158
|
}, {
|
|
140
159
|
id: MLXModel.Qwen3_1_7B_4bit,
|
|
141
160
|
family: ModelFamily.Qwen,
|
|
@@ -143,7 +162,8 @@ export const MLXModels = [{
|
|
|
143
162
|
parameters: '1.7B',
|
|
144
163
|
quantization: '4bit',
|
|
145
164
|
displayName: 'Qwen 3 1.7B (4-bit)',
|
|
146
|
-
downloadSize: 979502864
|
|
165
|
+
downloadSize: 979502864,
|
|
166
|
+
type: 'llm'
|
|
147
167
|
}, {
|
|
148
168
|
id: MLXModel.Qwen3_1_7B_8bit,
|
|
149
169
|
family: ModelFamily.Qwen,
|
|
@@ -151,7 +171,8 @@ export const MLXModels = [{
|
|
|
151
171
|
parameters: '1.7B',
|
|
152
172
|
quantization: '8bit',
|
|
153
173
|
displayName: 'Qwen 3 1.7B (8-bit)',
|
|
154
|
-
downloadSize: 1839729195
|
|
174
|
+
downloadSize: 1839729195,
|
|
175
|
+
type: 'llm'
|
|
155
176
|
}, {
|
|
156
177
|
id: MLXModel.Gemma_3_1B_IT_4bit,
|
|
157
178
|
family: ModelFamily.Gemma,
|
|
@@ -159,7 +180,8 @@ export const MLXModels = [{
|
|
|
159
180
|
parameters: '1B',
|
|
160
181
|
quantization: '4bit',
|
|
161
182
|
displayName: 'Gemma 3 1B IT (4-bit)',
|
|
162
|
-
downloadSize: 770650946
|
|
183
|
+
downloadSize: 770650946,
|
|
184
|
+
type: 'llm'
|
|
163
185
|
}, {
|
|
164
186
|
id: MLXModel.Gemma_3_1B_IT_8bit,
|
|
165
187
|
family: ModelFamily.Gemma,
|
|
@@ -167,7 +189,8 @@ export const MLXModels = [{
|
|
|
167
189
|
parameters: '1B',
|
|
168
190
|
quantization: '8bit',
|
|
169
191
|
displayName: 'Gemma 3 1B IT (8-bit)',
|
|
170
|
-
downloadSize: 1421522471
|
|
192
|
+
downloadSize: 1421522471,
|
|
193
|
+
type: 'llm'
|
|
171
194
|
}, {
|
|
172
195
|
id: MLXModel.Phi_3_5_Mini_Instruct_4bit,
|
|
173
196
|
family: ModelFamily.Phi,
|
|
@@ -175,7 +198,8 @@ export const MLXModels = [{
|
|
|
175
198
|
parameters: '3.8B',
|
|
176
199
|
quantization: '4bit',
|
|
177
200
|
displayName: 'Phi 3.5 Mini Instruct (4-bit)',
|
|
178
|
-
downloadSize: 2150195856
|
|
201
|
+
downloadSize: 2150195856,
|
|
202
|
+
type: 'llm'
|
|
179
203
|
}, {
|
|
180
204
|
id: MLXModel.Phi_3_5_Mini_Instruct_8bit,
|
|
181
205
|
family: ModelFamily.Phi,
|
|
@@ -183,7 +207,8 @@ export const MLXModels = [{
|
|
|
183
207
|
parameters: '3.8B',
|
|
184
208
|
quantization: '8bit',
|
|
185
209
|
displayName: 'Phi 3.5 Mini Instruct (8-bit)',
|
|
186
|
-
downloadSize: 4060636056
|
|
210
|
+
downloadSize: 4060636056,
|
|
211
|
+
type: 'llm'
|
|
187
212
|
}, {
|
|
188
213
|
id: MLXModel.Phi_4_Mini_Instruct_4bit,
|
|
189
214
|
family: ModelFamily.Phi,
|
|
@@ -191,7 +216,8 @@ export const MLXModels = [{
|
|
|
191
216
|
parameters: '3.8B',
|
|
192
217
|
quantization: '4bit',
|
|
193
218
|
displayName: 'Phi 4 Mini Instruct (4-bit)',
|
|
194
|
-
downloadSize: 2173624891
|
|
219
|
+
downloadSize: 2173624891,
|
|
220
|
+
type: 'llm'
|
|
195
221
|
}, {
|
|
196
222
|
id: MLXModel.Phi_4_Mini_Instruct_8bit,
|
|
197
223
|
family: ModelFamily.Phi,
|
|
@@ -199,7 +225,8 @@ export const MLXModels = [{
|
|
|
199
225
|
parameters: '3.8B',
|
|
200
226
|
quantization: '8bit',
|
|
201
227
|
displayName: 'Phi 4 Mini Instruct (8-bit)',
|
|
202
|
-
downloadSize: 4091536167
|
|
228
|
+
downloadSize: 4091536167,
|
|
229
|
+
type: 'llm'
|
|
203
230
|
}, {
|
|
204
231
|
id: MLXModel.SmolLM_1_7B_Instruct_4bit,
|
|
205
232
|
family: ModelFamily.SmolLM,
|
|
@@ -207,7 +234,8 @@ export const MLXModels = [{
|
|
|
207
234
|
parameters: '1.7B',
|
|
208
235
|
quantization: '4bit',
|
|
209
236
|
displayName: 'SmolLM 1.7B Instruct (4-bit)',
|
|
210
|
-
downloadSize: 962855374
|
|
237
|
+
downloadSize: 962855374,
|
|
238
|
+
type: 'llm'
|
|
211
239
|
}, {
|
|
212
240
|
id: MLXModel.SmolLM_1_7B_Instruct_8bit,
|
|
213
241
|
family: ModelFamily.SmolLM,
|
|
@@ -215,7 +243,8 @@ export const MLXModels = [{
|
|
|
215
243
|
parameters: '1.7B',
|
|
216
244
|
quantization: '8bit',
|
|
217
245
|
displayName: 'SmolLM 1.7B Instruct (8-bit)',
|
|
218
|
-
downloadSize: 1818493993
|
|
246
|
+
downloadSize: 1818493993,
|
|
247
|
+
type: 'llm'
|
|
219
248
|
}, {
|
|
220
249
|
id: MLXModel.SmolLM2_1_7B_Instruct_4bit,
|
|
221
250
|
family: ModelFamily.SmolLM,
|
|
@@ -223,7 +252,8 @@ export const MLXModels = [{
|
|
|
223
252
|
parameters: '1.7B',
|
|
224
253
|
quantization: '4bit',
|
|
225
254
|
displayName: 'SmolLM2 1.7B Instruct (4-bit)',
|
|
226
|
-
downloadSize: 980000000
|
|
255
|
+
downloadSize: 980000000,
|
|
256
|
+
type: 'llm'
|
|
227
257
|
}, {
|
|
228
258
|
id: MLXModel.SmolLM2_1_7B_Instruct_8bit,
|
|
229
259
|
family: ModelFamily.SmolLM,
|
|
@@ -231,7 +261,8 @@ export const MLXModels = [{
|
|
|
231
261
|
parameters: '1.7B',
|
|
232
262
|
quantization: '8bit',
|
|
233
263
|
displayName: 'SmolLM2 1.7B Instruct (8-bit)',
|
|
234
|
-
downloadSize: 1850000000
|
|
264
|
+
downloadSize: 1850000000,
|
|
265
|
+
type: 'llm'
|
|
235
266
|
}, {
|
|
236
267
|
id: MLXModel.OpenELM_1_1B_4bit,
|
|
237
268
|
family: ModelFamily.OpenELM,
|
|
@@ -239,7 +270,8 @@ export const MLXModels = [{
|
|
|
239
270
|
parameters: '1.1B',
|
|
240
271
|
quantization: '4bit',
|
|
241
272
|
displayName: 'OpenELM 1.1B (4-bit)',
|
|
242
|
-
downloadSize: 608162655
|
|
273
|
+
downloadSize: 608162655,
|
|
274
|
+
type: 'llm'
|
|
243
275
|
}, {
|
|
244
276
|
id: MLXModel.OpenELM_1_1B_8bit,
|
|
245
277
|
family: ModelFamily.OpenELM,
|
|
@@ -247,7 +279,8 @@ export const MLXModels = [{
|
|
|
247
279
|
parameters: '1.1B',
|
|
248
280
|
quantization: '8bit',
|
|
249
281
|
displayName: 'OpenELM 1.1B (8-bit)',
|
|
250
|
-
downloadSize: 1148048397
|
|
282
|
+
downloadSize: 1148048397,
|
|
283
|
+
type: 'llm'
|
|
251
284
|
}, {
|
|
252
285
|
id: MLXModel.OpenELM_3B_4bit,
|
|
253
286
|
family: ModelFamily.OpenELM,
|
|
@@ -255,7 +288,8 @@ export const MLXModels = [{
|
|
|
255
288
|
parameters: '3B',
|
|
256
289
|
quantization: '4bit',
|
|
257
290
|
displayName: 'OpenELM 3B (4-bit)',
|
|
258
|
-
downloadSize: 1650000000
|
|
291
|
+
downloadSize: 1650000000,
|
|
292
|
+
type: 'llm'
|
|
259
293
|
}, {
|
|
260
294
|
id: MLXModel.OpenELM_3B_8bit,
|
|
261
295
|
family: ModelFamily.OpenELM,
|
|
@@ -263,6 +297,43 @@ export const MLXModels = [{
|
|
|
263
297
|
parameters: '3B',
|
|
264
298
|
quantization: '8bit',
|
|
265
299
|
displayName: 'OpenELM 3B (8-bit)',
|
|
266
|
-
downloadSize: 3100000000
|
|
300
|
+
downloadSize: 3100000000,
|
|
301
|
+
type: 'llm'
|
|
302
|
+
}, {
|
|
303
|
+
id: MLXModel.PocketTTS,
|
|
304
|
+
family: ModelFamily.PocketTTS,
|
|
305
|
+
provider: ModelProvider.Kyutai,
|
|
306
|
+
parameters: '44.6M',
|
|
307
|
+
quantization: 'bf16',
|
|
308
|
+
displayName: 'PocketTTS (bf16)',
|
|
309
|
+
downloadSize: 180000000,
|
|
310
|
+
type: 'tts'
|
|
311
|
+
}, {
|
|
312
|
+
id: MLXModel.PocketTTS_8bit,
|
|
313
|
+
family: ModelFamily.PocketTTS,
|
|
314
|
+
provider: ModelProvider.Kyutai,
|
|
315
|
+
parameters: '44.6M',
|
|
316
|
+
quantization: '8bit',
|
|
317
|
+
displayName: 'PocketTTS (8-bit)',
|
|
318
|
+
downloadSize: 140000000,
|
|
319
|
+
type: 'tts'
|
|
320
|
+
}, {
|
|
321
|
+
id: MLXModel.PocketTTS_4bit,
|
|
322
|
+
family: ModelFamily.PocketTTS,
|
|
323
|
+
provider: ModelProvider.Kyutai,
|
|
324
|
+
parameters: '44.6M',
|
|
325
|
+
quantization: '4bit',
|
|
326
|
+
displayName: 'PocketTTS (4-bit)',
|
|
327
|
+
downloadSize: 80000000,
|
|
328
|
+
type: 'tts'
|
|
329
|
+
}, {
|
|
330
|
+
id: MLXModel.GLM_ASR_Nano_4bit,
|
|
331
|
+
family: ModelFamily.GLMASR,
|
|
332
|
+
provider: ModelProvider.Alibaba,
|
|
333
|
+
parameters: '1B',
|
|
334
|
+
quantization: '4bit',
|
|
335
|
+
displayName: 'GLM-ASR Nano (4-bit)',
|
|
336
|
+
downloadSize: 600000000,
|
|
337
|
+
type: 'stt'
|
|
267
338
|
}];
|
|
268
339
|
//# sourceMappingURL=models.js.map
|