@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.
Files changed (110) hide show
  1. package/MLXReactNative.podspec +9 -3
  2. package/ios/Sources/AudioCaptureManager.swift +110 -0
  3. package/ios/Sources/HybridLLM.swift +562 -74
  4. package/ios/Sources/HybridSTT.swift +202 -0
  5. package/ios/Sources/HybridTTS.swift +145 -0
  6. package/ios/Sources/JSONHelpers.swift +9 -0
  7. package/ios/Sources/ModelDownloader.swift +26 -12
  8. package/ios/Sources/StreamEventEmitter.swift +132 -0
  9. package/ios/Sources/ThinkingStateMachine.swift +206 -0
  10. package/lib/module/index.js +4 -1
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/module/llm.js +72 -4
  13. package/lib/module/llm.js.map +1 -1
  14. package/lib/module/models.js +319 -0
  15. package/lib/module/models.js.map +1 -1
  16. package/lib/module/specs/STT.nitro.js +4 -0
  17. package/lib/module/specs/STT.nitro.js.map +1 -0
  18. package/lib/module/specs/TTS.nitro.js +4 -0
  19. package/lib/module/specs/TTS.nitro.js.map +1 -0
  20. package/lib/module/stt.js +49 -0
  21. package/lib/module/stt.js.map +1 -0
  22. package/lib/module/tool-utils.js +56 -0
  23. package/lib/module/tool-utils.js.map +1 -0
  24. package/lib/module/tts.js +40 -0
  25. package/lib/module/tts.js.map +1 -0
  26. package/lib/typescript/src/index.d.ts +8 -3
  27. package/lib/typescript/src/index.d.ts.map +1 -1
  28. package/lib/typescript/src/llm.d.ts +46 -4
  29. package/lib/typescript/src/llm.d.ts.map +1 -1
  30. package/lib/typescript/src/models.d.ts +39 -1
  31. package/lib/typescript/src/models.d.ts.map +1 -1
  32. package/lib/typescript/src/specs/LLM.nitro.d.ts +79 -7
  33. package/lib/typescript/src/specs/LLM.nitro.d.ts.map +1 -1
  34. package/lib/typescript/src/specs/STT.nitro.d.ts +28 -0
  35. package/lib/typescript/src/specs/STT.nitro.d.ts.map +1 -0
  36. package/lib/typescript/src/specs/TTS.nitro.d.ts +22 -0
  37. package/lib/typescript/src/specs/TTS.nitro.d.ts.map +1 -0
  38. package/lib/typescript/src/stt.d.ts +16 -0
  39. package/lib/typescript/src/stt.d.ts.map +1 -0
  40. package/lib/typescript/src/tool-utils.d.ts +13 -0
  41. package/lib/typescript/src/tool-utils.d.ts.map +1 -0
  42. package/lib/typescript/src/tts.d.ts +13 -0
  43. package/lib/typescript/src/tts.d.ts.map +1 -0
  44. package/nitrogen/generated/ios/MLXReactNative+autolinking.rb +1 -1
  45. package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.cpp +76 -1
  46. package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.hpp +338 -1
  47. package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Umbrella.hpp +28 -1
  48. package/nitrogen/generated/ios/MLXReactNativeAutolinking.mm +17 -1
  49. package/nitrogen/generated/ios/MLXReactNativeAutolinking.swift +31 -1
  50. package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.cpp +1 -1
  51. package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.hpp +18 -3
  52. package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.cpp +1 -1
  53. package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.hpp +1 -1
  54. package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.cpp +11 -0
  55. package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.hpp +149 -0
  56. package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.cpp +11 -0
  57. package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.hpp +128 -0
  58. 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
  59. package/nitrogen/generated/ios/swift/Func_void.swift +1 -1
  60. package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -1
  61. package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -1
  62. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -1
  63. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_AnyMap_.swift +47 -0
  64. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +47 -0
  65. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___.swift +67 -0
  66. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -1
  67. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +47 -0
  68. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +1 -1
  69. package/nitrogen/generated/ios/swift/GenerationStats.swift +14 -3
  70. package/nitrogen/generated/ios/swift/HybridLLMSpec.swift +3 -2
  71. package/nitrogen/generated/ios/swift/HybridLLMSpec_cxx.swift +38 -2
  72. package/nitrogen/generated/ios/swift/HybridModelManagerSpec.swift +1 -1
  73. package/nitrogen/generated/ios/swift/HybridModelManagerSpec_cxx.swift +1 -1
  74. package/nitrogen/generated/ios/swift/HybridSTTSpec.swift +66 -0
  75. package/nitrogen/generated/ios/swift/HybridSTTSpec_cxx.swift +286 -0
  76. package/nitrogen/generated/ios/swift/HybridTTSSpec.swift +63 -0
  77. package/nitrogen/generated/ios/swift/HybridTTSSpec_cxx.swift +229 -0
  78. package/nitrogen/generated/ios/swift/LLMLoadOptions.swift +44 -2
  79. package/nitrogen/generated/ios/swift/LLMMessage.swift +1 -1
  80. package/nitrogen/generated/ios/swift/STTLoadOptions.swift +66 -0
  81. package/nitrogen/generated/ios/swift/TTSGenerateOptions.swift +78 -0
  82. package/nitrogen/generated/ios/swift/TTSLoadOptions.swift +66 -0
  83. package/nitrogen/generated/ios/swift/ToolDefinition.swift +113 -0
  84. package/nitrogen/generated/ios/swift/ToolParameter.swift +69 -0
  85. package/nitrogen/generated/shared/c++/GenerationStats.hpp +7 -3
  86. package/nitrogen/generated/shared/c++/HybridLLMSpec.cpp +2 -1
  87. package/nitrogen/generated/shared/c++/HybridLLMSpec.hpp +3 -2
  88. package/nitrogen/generated/shared/c++/HybridModelManagerSpec.cpp +1 -1
  89. package/nitrogen/generated/shared/c++/HybridModelManagerSpec.hpp +1 -1
  90. package/nitrogen/generated/shared/c++/HybridSTTSpec.cpp +32 -0
  91. package/nitrogen/generated/shared/c++/HybridSTTSpec.hpp +78 -0
  92. package/nitrogen/generated/shared/c++/HybridTTSSpec.cpp +29 -0
  93. package/nitrogen/generated/shared/c++/HybridTTSSpec.hpp +78 -0
  94. package/nitrogen/generated/shared/c++/LLMLoadOptions.hpp +10 -3
  95. package/nitrogen/generated/shared/c++/LLMMessage.hpp +1 -1
  96. package/nitrogen/generated/shared/c++/STTLoadOptions.hpp +76 -0
  97. package/nitrogen/generated/shared/c++/TTSGenerateOptions.hpp +80 -0
  98. package/nitrogen/generated/shared/c++/TTSLoadOptions.hpp +76 -0
  99. package/nitrogen/generated/shared/c++/ToolDefinition.hpp +93 -0
  100. package/nitrogen/generated/shared/c++/ToolParameter.hpp +87 -0
  101. package/package.json +13 -8
  102. package/src/index.ts +48 -4
  103. package/src/llm.ts +90 -5
  104. package/src/models.ts +371 -0
  105. package/src/specs/LLM.nitro.ts +111 -7
  106. package/src/specs/STT.nitro.ts +35 -0
  107. package/src/specs/TTS.nitro.ts +30 -0
  108. package/src/stt.ts +67 -0
  109. package/src/tool-utils.ts +74 -0
  110. 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
+ }
@@ -2,5 +2,8 @@
2
2
 
3
3
  export { LLM } from "./llm.js";
4
4
  export { ModelManager } from "./modelManager.js";
5
- export { MLXModel } from "./models.js";
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
@@ -1 +1 @@
1
- {"version":3,"names":["LLM","ModelManager","MLXModel"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,GAAG,QAAsB,UAAO;AACzC,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,QAAQ,QAAQ,aAAU","ignoreList":[]}
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
- return getInstance().stream(prompt, onToken);
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 total time
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();
@@ -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;AAGzD,IAAIC,QAAwB,GAAG,IAAI;AAOnC,SAASC,WAAWA,CAAA,EAAY;EAC9B,IAAI,CAACD,QAAQ,EAAE;IACbA,QAAQ,GAAGD,YAAY,CAACG,kBAAkB,CAAU,KAAK,CAAC;EAC5D;EACA,OAAOF,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,GAAG,GAAG;EACjB;AACF;AACA;AACA;AACA;EACEC,IAAIA,CAACC,OAAe,EAAEC,OAAuB,EAAiB;IAC5D,OAAOL,WAAW,CAAC,CAAC,CAACG,IAAI,CAACC,OAAO,EAAEC,OAAO,CAAC;EAC7C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,QAAQA,CAACC,MAAc,EAAmB;IACxC,OAAOP,WAAW,CAAC,CAAC,CAACM,QAAQ,CAACC,MAAM,CAAC;EACvC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,MAAMA,CAACD,MAAc,EAAEE,OAAgC,EAAmB;IACxE,OAAOT,WAAW,CAAC,CAAC,CAACQ,MAAM,CAACD,MAAM,EAAEE,OAAO,CAAC;EAC9C,CAAC;EAED;AACF;AACA;EACEC,IAAIA,CAAA,EAAS;IACXV,WAAW,CAAC,CAAC,CAACU,IAAI,CAAC,CAAC;EACtB,CAAC;EAED;AACF;AACA;AACA;EACEC,MAAMA,CAAA,EAAS;IACbX,WAAW,CAAC,CAAC,CAACW,MAAM,CAAC,CAAC;EACxB,CAAC;EAED;AACF;AACA;AACA;EACEC,sBAAsBA,CAAA,EAAoB;IACxC,OAAOZ,WAAW,CAAC,CAAC,CAACY,sBAAsB,CAAC,CAAC;EAC/C,CAAC;EAED;AACF;AACA;AACA;EACEC,UAAUA,CAAA,EAAc;IACtB,OAAOb,WAAW,CAAC,CAAC,CAACa,UAAU,CAAC,CAAC;EACnC,CAAC;EAED;AACF;AACA;EACEC,YAAYA,CAAA,EAAS;IACnBd,WAAW,CAAC,CAAC,CAACc,YAAY,CAAC,CAAC;EAC9B,CAAC;EAED;EACA,IAAIC,QAAQA,CAAA,EAAY;IACtB,OAAOf,WAAW,CAAC,CAAC,CAACe,QAAQ;EAC/B,CAAC;EAED;EACA,IAAIC,YAAYA,CAAA,EAAY;IAC1B,OAAOhB,WAAW,CAAC,CAAC,CAACgB,YAAY;EACnC,CAAC;EAED;EACA,IAAIZ,OAAOA,CAAA,EAAW;IACpB,OAAOJ,WAAW,CAAC,CAAC,CAACI,OAAO;EAC9B,CAAC;EAED;EACA,IAAIa,KAAKA,CAAA,EAAY;IACnB,OAAOjB,WAAW,CAAC,CAAC,CAACiB,KAAK;EAC5B,CAAC;EAED,IAAIA,KAAKA,CAACC,KAAc,EAAE;IACxBlB,WAAW,CAAC,CAAC,CAACiB,KAAK,GAAGC,KAAK;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;EACE,IAAIC,YAAYA,CAAA,EAAW;IACzB,OAAOnB,WAAW,CAAC,CAAC,CAACmB,YAAY;EACnC,CAAC;EAED,IAAIA,YAAYA,CAACD,KAAa,EAAE;IAC9BlB,WAAW,CAAC,CAAC,CAACmB,YAAY,GAAGD,KAAK;EACpC;AACF,CAAC","ignoreList":[]}
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":[]}
@@ -1,5 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ export let ModelFamily = /*#__PURE__*/function (ModelFamily) {
4
+ ModelFamily["Llama"] = "Llama";
5
+ ModelFamily["Qwen"] = "Qwen";
6
+ ModelFamily["Gemma"] = "Gemma";
7
+ ModelFamily["Phi"] = "Phi";
8
+ ModelFamily["SmolLM"] = "SmolLM";
9
+ ModelFamily["OpenELM"] = "OpenELM";
10
+ ModelFamily["PocketTTS"] = "PocketTTS";
11
+ ModelFamily["GLMASR"] = "GLMASR";
12
+ return ModelFamily;
13
+ }({});
14
+ export let ModelProvider = /*#__PURE__*/function (ModelProvider) {
15
+ ModelProvider["Meta"] = "Meta";
16
+ ModelProvider["Alibaba"] = "Alibaba";
17
+ ModelProvider["Google"] = "Google";
18
+ ModelProvider["Microsoft"] = "Microsoft";
19
+ ModelProvider["HuggingFace"] = "HuggingFace";
20
+ ModelProvider["Apple"] = "Apple";
21
+ ModelProvider["Kyutai"] = "Kyutai";
22
+ return ModelProvider;
23
+ }({});
3
24
  export let MLXModel = /*#__PURE__*/function (MLXModel) {
4
25
  // Llama 3.2 (Meta) - 1B and 3B variants
5
26
  MLXModel["Llama_3_2_1B_Instruct_4bit"] = "mlx-community/Llama-3.2-1B-Instruct-4bit";
@@ -16,6 +37,9 @@ export let MLXModel = /*#__PURE__*/function (MLXModel) {
16
37
  // Qwen 3 - 1.7B variant
17
38
  MLXModel["Qwen3_1_7B_4bit"] = "mlx-community/Qwen3-1.7B-4bit";
18
39
  MLXModel["Qwen3_1_7B_8bit"] = "mlx-community/Qwen3-1.7B-8bit";
40
+ // Qwen 3.5 - 0.8B variant
41
+ MLXModel["Qwen3_5_0_8B_MLX_4bit"] = "mlx-community/Qwen3.5-0.8B-MLX-4bit";
42
+ MLXModel["Qwen3_5_0_8B_MLX_8bit"] = "mlx-community/Qwen3.5-0.8B-MLX-8bit";
19
43
  // Gemma 3 (Google) - 1B variant
20
44
  MLXModel["Gemma_3_1B_IT_4bit"] = "mlx-community/gemma-3-1b-it-4bit";
21
45
  MLXModel["Gemma_3_1B_IT_8bit"] = "mlx-community/gemma-3-1b-it-8bit";
@@ -36,6 +60,301 @@ export let MLXModel = /*#__PURE__*/function (MLXModel) {
36
60
  MLXModel["OpenELM_1_1B_8bit"] = "mlx-community/OpenELM-1_1B-8bit";
37
61
  MLXModel["OpenELM_3B_4bit"] = "mlx-community/OpenELM-3B-4bit";
38
62
  MLXModel["OpenELM_3B_8bit"] = "mlx-community/OpenELM-3B-8bit";
63
+ // PocketTTS (Kyutai) - 44.6M
64
+ MLXModel["PocketTTS"] = "mlx-community/pocket-tts";
65
+ MLXModel["PocketTTS_8bit"] = "mlx-community/pocket-tts-8bit";
66
+ MLXModel["PocketTTS_4bit"] = "mlx-community/pocket-tts-4bit";
67
+ // GLM-ASR (GLMASR) - Speech-to-Text
68
+ MLXModel["GLM_ASR_Nano_4bit"] = "mlx-community/GLM-ASR-Nano-2512-4bit";
39
69
  return MLXModel;
40
70
  }({});
71
+ export const MLXModels = [{
72
+ id: MLXModel.Llama_3_2_1B_Instruct_4bit,
73
+ family: ModelFamily.Llama,
74
+ provider: ModelProvider.Meta,
75
+ parameters: '1B',
76
+ quantization: '4bit',
77
+ displayName: 'Llama 3.2 1B Instruct (4-bit)',
78
+ downloadSize: 1407777762,
79
+ type: 'llm'
80
+ }, {
81
+ id: MLXModel.Llama_3_2_1B_Instruct_8bit,
82
+ family: ModelFamily.Llama,
83
+ provider: ModelProvider.Meta,
84
+ parameters: '1B',
85
+ quantization: '8bit',
86
+ displayName: 'Llama 3.2 1B Instruct (8-bit)',
87
+ downloadSize: 1313157436,
88
+ type: 'llm'
89
+ }, {
90
+ id: MLXModel.Llama_3_2_3B_Instruct_4bit,
91
+ family: ModelFamily.Llama,
92
+ provider: ModelProvider.Meta,
93
+ parameters: '3B',
94
+ quantization: '4bit',
95
+ displayName: 'Llama 3.2 3B Instruct (4-bit)',
96
+ downloadSize: 2019397474,
97
+ type: 'llm'
98
+ }, {
99
+ id: MLXModel.Llama_3_2_3B_Instruct_8bit,
100
+ family: ModelFamily.Llama,
101
+ provider: ModelProvider.Meta,
102
+ parameters: '3B',
103
+ quantization: '8bit',
104
+ displayName: 'Llama 3.2 3B Instruct (8-bit)',
105
+ downloadSize: 3413784042,
106
+ type: 'llm'
107
+ }, {
108
+ id: MLXModel.Qwen2_5_0_5B_Instruct_4bit,
109
+ family: ModelFamily.Qwen,
110
+ provider: ModelProvider.Alibaba,
111
+ parameters: '0.5B',
112
+ quantization: '4bit',
113
+ displayName: 'Qwen 2.5 0.5B Instruct (4-bit)',
114
+ downloadSize: 278064920,
115
+ type: 'llm'
116
+ }, {
117
+ id: MLXModel.Qwen2_5_0_5B_Instruct_8bit,
118
+ family: ModelFamily.Qwen,
119
+ provider: ModelProvider.Alibaba,
120
+ parameters: '0.5B',
121
+ quantization: '8bit',
122
+ displayName: 'Qwen 2.5 0.5B Instruct (8-bit)',
123
+ downloadSize: 525045902,
124
+ type: 'llm'
125
+ }, {
126
+ id: MLXModel.Qwen2_5_1_5B_Instruct_4bit,
127
+ family: ModelFamily.Qwen,
128
+ provider: ModelProvider.Alibaba,
129
+ parameters: '1.5B',
130
+ quantization: '4bit',
131
+ displayName: 'Qwen 2.5 1.5B Instruct (4-bit)',
132
+ downloadSize: 868628559,
133
+ type: 'llm'
134
+ }, {
135
+ id: MLXModel.Qwen2_5_1_5B_Instruct_8bit,
136
+ family: ModelFamily.Qwen,
137
+ provider: ModelProvider.Alibaba,
138
+ parameters: '1.5B',
139
+ quantization: '8bit',
140
+ displayName: 'Qwen 2.5 1.5B Instruct (8-bit)',
141
+ downloadSize: 1640414038,
142
+ type: 'llm'
143
+ }, {
144
+ id: MLXModel.Qwen2_5_3B_Instruct_4bit,
145
+ family: ModelFamily.Qwen,
146
+ provider: ModelProvider.Alibaba,
147
+ parameters: '3B',
148
+ quantization: '4bit',
149
+ displayName: 'Qwen 2.5 3B Instruct (4-bit)',
150
+ downloadSize: 1736293090,
151
+ type: 'llm'
152
+ }, {
153
+ id: MLXModel.Qwen2_5_3B_Instruct_8bit,
154
+ family: ModelFamily.Qwen,
155
+ provider: ModelProvider.Alibaba,
156
+ parameters: '3B',
157
+ quantization: '8bit',
158
+ displayName: 'Qwen 2.5 3B Instruct (8-bit)',
159
+ downloadSize: 3279142142,
160
+ type: 'llm'
161
+ }, {
162
+ id: MLXModel.Qwen3_1_7B_4bit,
163
+ family: ModelFamily.Qwen,
164
+ provider: ModelProvider.Alibaba,
165
+ parameters: '1.7B',
166
+ quantization: '4bit',
167
+ displayName: 'Qwen 3 1.7B (4-bit)',
168
+ downloadSize: 979502864,
169
+ type: 'llm'
170
+ }, {
171
+ id: MLXModel.Qwen3_1_7B_8bit,
172
+ family: ModelFamily.Qwen,
173
+ provider: ModelProvider.Alibaba,
174
+ parameters: '1.7B',
175
+ quantization: '8bit',
176
+ displayName: 'Qwen 3 1.7B (8-bit)',
177
+ downloadSize: 1839729195,
178
+ type: 'llm'
179
+ }, {
180
+ id: MLXModel.Qwen3_5_0_8B_MLX_4bit,
181
+ family: ModelFamily.Qwen,
182
+ provider: ModelProvider.Alibaba,
183
+ parameters: '0.8B',
184
+ quantization: '4bit',
185
+ displayName: 'Qwen 3.5 0.8B (4-bit)',
186
+ downloadSize: 550000000,
187
+ type: 'llm'
188
+ }, {
189
+ id: MLXModel.Qwen3_5_0_8B_MLX_8bit,
190
+ family: ModelFamily.Qwen,
191
+ provider: ModelProvider.Alibaba,
192
+ parameters: '0.8B',
193
+ quantization: '8bit',
194
+ displayName: 'Qwen 3.5 0.8B (8-bit)',
195
+ downloadSize: 950000000,
196
+ type: 'llm'
197
+ }, {
198
+ id: MLXModel.Gemma_3_1B_IT_4bit,
199
+ family: ModelFamily.Gemma,
200
+ provider: ModelProvider.Google,
201
+ parameters: '1B',
202
+ quantization: '4bit',
203
+ displayName: 'Gemma 3 1B IT (4-bit)',
204
+ downloadSize: 770650946,
205
+ type: 'llm'
206
+ }, {
207
+ id: MLXModel.Gemma_3_1B_IT_8bit,
208
+ family: ModelFamily.Gemma,
209
+ provider: ModelProvider.Google,
210
+ parameters: '1B',
211
+ quantization: '8bit',
212
+ displayName: 'Gemma 3 1B IT (8-bit)',
213
+ downloadSize: 1421522471,
214
+ type: 'llm'
215
+ }, {
216
+ id: MLXModel.Phi_3_5_Mini_Instruct_4bit,
217
+ family: ModelFamily.Phi,
218
+ provider: ModelProvider.Microsoft,
219
+ parameters: '3.8B',
220
+ quantization: '4bit',
221
+ displayName: 'Phi 3.5 Mini Instruct (4-bit)',
222
+ downloadSize: 2150195856,
223
+ type: 'llm'
224
+ }, {
225
+ id: MLXModel.Phi_3_5_Mini_Instruct_8bit,
226
+ family: ModelFamily.Phi,
227
+ provider: ModelProvider.Microsoft,
228
+ parameters: '3.8B',
229
+ quantization: '8bit',
230
+ displayName: 'Phi 3.5 Mini Instruct (8-bit)',
231
+ downloadSize: 4060636056,
232
+ type: 'llm'
233
+ }, {
234
+ id: MLXModel.Phi_4_Mini_Instruct_4bit,
235
+ family: ModelFamily.Phi,
236
+ provider: ModelProvider.Microsoft,
237
+ parameters: '3.8B',
238
+ quantization: '4bit',
239
+ displayName: 'Phi 4 Mini Instruct (4-bit)',
240
+ downloadSize: 2173624891,
241
+ type: 'llm'
242
+ }, {
243
+ id: MLXModel.Phi_4_Mini_Instruct_8bit,
244
+ family: ModelFamily.Phi,
245
+ provider: ModelProvider.Microsoft,
246
+ parameters: '3.8B',
247
+ quantization: '8bit',
248
+ displayName: 'Phi 4 Mini Instruct (8-bit)',
249
+ downloadSize: 4091536167,
250
+ type: 'llm'
251
+ }, {
252
+ id: MLXModel.SmolLM_1_7B_Instruct_4bit,
253
+ family: ModelFamily.SmolLM,
254
+ provider: ModelProvider.HuggingFace,
255
+ parameters: '1.7B',
256
+ quantization: '4bit',
257
+ displayName: 'SmolLM 1.7B Instruct (4-bit)',
258
+ downloadSize: 962855374,
259
+ type: 'llm'
260
+ }, {
261
+ id: MLXModel.SmolLM_1_7B_Instruct_8bit,
262
+ family: ModelFamily.SmolLM,
263
+ provider: ModelProvider.HuggingFace,
264
+ parameters: '1.7B',
265
+ quantization: '8bit',
266
+ displayName: 'SmolLM 1.7B Instruct (8-bit)',
267
+ downloadSize: 1818493993,
268
+ type: 'llm'
269
+ }, {
270
+ id: MLXModel.SmolLM2_1_7B_Instruct_4bit,
271
+ family: ModelFamily.SmolLM,
272
+ provider: ModelProvider.HuggingFace,
273
+ parameters: '1.7B',
274
+ quantization: '4bit',
275
+ displayName: 'SmolLM2 1.7B Instruct (4-bit)',
276
+ downloadSize: 980000000,
277
+ type: 'llm'
278
+ }, {
279
+ id: MLXModel.SmolLM2_1_7B_Instruct_8bit,
280
+ family: ModelFamily.SmolLM,
281
+ provider: ModelProvider.HuggingFace,
282
+ parameters: '1.7B',
283
+ quantization: '8bit',
284
+ displayName: 'SmolLM2 1.7B Instruct (8-bit)',
285
+ downloadSize: 1850000000,
286
+ type: 'llm'
287
+ }, {
288
+ id: MLXModel.OpenELM_1_1B_4bit,
289
+ family: ModelFamily.OpenELM,
290
+ provider: ModelProvider.Apple,
291
+ parameters: '1.1B',
292
+ quantization: '4bit',
293
+ displayName: 'OpenELM 1.1B (4-bit)',
294
+ downloadSize: 608162655,
295
+ type: 'llm'
296
+ }, {
297
+ id: MLXModel.OpenELM_1_1B_8bit,
298
+ family: ModelFamily.OpenELM,
299
+ provider: ModelProvider.Apple,
300
+ parameters: '1.1B',
301
+ quantization: '8bit',
302
+ displayName: 'OpenELM 1.1B (8-bit)',
303
+ downloadSize: 1148048397,
304
+ type: 'llm'
305
+ }, {
306
+ id: MLXModel.OpenELM_3B_4bit,
307
+ family: ModelFamily.OpenELM,
308
+ provider: ModelProvider.Apple,
309
+ parameters: '3B',
310
+ quantization: '4bit',
311
+ displayName: 'OpenELM 3B (4-bit)',
312
+ downloadSize: 1650000000,
313
+ type: 'llm'
314
+ }, {
315
+ id: MLXModel.OpenELM_3B_8bit,
316
+ family: ModelFamily.OpenELM,
317
+ provider: ModelProvider.Apple,
318
+ parameters: '3B',
319
+ quantization: '8bit',
320
+ displayName: 'OpenELM 3B (8-bit)',
321
+ downloadSize: 3100000000,
322
+ type: 'llm'
323
+ }, {
324
+ id: MLXModel.PocketTTS,
325
+ family: ModelFamily.PocketTTS,
326
+ provider: ModelProvider.Kyutai,
327
+ parameters: '44.6M',
328
+ quantization: 'bf16',
329
+ displayName: 'PocketTTS (bf16)',
330
+ downloadSize: 180000000,
331
+ type: 'tts'
332
+ }, {
333
+ id: MLXModel.PocketTTS_8bit,
334
+ family: ModelFamily.PocketTTS,
335
+ provider: ModelProvider.Kyutai,
336
+ parameters: '44.6M',
337
+ quantization: '8bit',
338
+ displayName: 'PocketTTS (8-bit)',
339
+ downloadSize: 140000000,
340
+ type: 'tts'
341
+ }, {
342
+ id: MLXModel.PocketTTS_4bit,
343
+ family: ModelFamily.PocketTTS,
344
+ provider: ModelProvider.Kyutai,
345
+ parameters: '44.6M',
346
+ quantization: '4bit',
347
+ displayName: 'PocketTTS (4-bit)',
348
+ downloadSize: 80000000,
349
+ type: 'tts'
350
+ }, {
351
+ id: MLXModel.GLM_ASR_Nano_4bit,
352
+ family: ModelFamily.GLMASR,
353
+ provider: ModelProvider.Alibaba,
354
+ parameters: '1B',
355
+ quantization: '4bit',
356
+ displayName: 'GLM-ASR Nano (4-bit)',
357
+ downloadSize: 600000000,
358
+ type: 'stt'
359
+ }];
41
360
  //# sourceMappingURL=models.js.map