@inferrlm/react-native-mlx 0.4.2-alpha.9 → 0.4.8
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 +8 -2
- package/app.plugin.js +63 -0
- package/ios/Sources/HybridLLM.swift +223 -18
- package/ios/Sources/LLMError.swift +1 -0
- package/lib/module/llm.js +6 -0
- package/lib/module/llm.js.map +1 -1
- package/lib/typescript/src/llm.d.ts +1 -0
- package/lib/typescript/src/llm.d.ts.map +1 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +2 -0
- package/lib/typescript/src/specs/LLM.nitro.d.ts.map +1 -1
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.hpp +18 -0
- package/nitrogen/generated/ios/swift/HybridLLMSpec.swift +3 -0
- package/nitrogen/generated/ios/swift/HybridLLMSpec_cxx.swift +33 -0
- package/nitrogen/generated/shared/c++/HybridLLMSpec.cpp +6 -0
- package/nitrogen/generated/shared/c++/HybridLLMSpec.hpp +6 -0
- package/package.json +1 -1
- package/src/llm.ts +8 -0
- package/src/specs/LLM.nitro.ts +2 -0
package/MLXReactNative.podspec
CHANGED
|
@@ -24,13 +24,19 @@ Pod::Spec.new do |s|
|
|
|
24
24
|
|
|
25
25
|
spm_dependency(s,
|
|
26
26
|
url: "https://github.com/ml-explore/mlx-swift-lm.git",
|
|
27
|
-
requirement: {kind: "
|
|
27
|
+
requirement: {kind: "upToNextMinorVersion", minimumVersion: "3.31.3"},
|
|
28
28
|
products: ["MLXLLM", "MLXLMCommon"]
|
|
29
29
|
)
|
|
30
30
|
|
|
31
|
+
spm_dependency(s,
|
|
32
|
+
url: "https://github.com/huggingface/swift-transformers",
|
|
33
|
+
requirement: {kind: "upToNextMinorVersion", minimumVersion: "1.2.0"},
|
|
34
|
+
products: ["Tokenizers"]
|
|
35
|
+
)
|
|
36
|
+
|
|
31
37
|
spm_dependency(s,
|
|
32
38
|
url: "https://github.com/Blaizzy/mlx-audio-swift.git",
|
|
33
|
-
requirement: {kind: "
|
|
39
|
+
requirement: {kind: "revision", revision: "856e04afb3c6eb931d92bb0d6ae7bbfbdfa89b15"},
|
|
34
40
|
products: ["MLXAudioTTS", "MLXAudioSTT", "MLXAudioCore"]
|
|
35
41
|
)
|
|
36
42
|
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const { withPodfile } = require('@expo/config-plugins');
|
|
2
|
+
|
|
3
|
+
function disableDeterministicPodUuids(contents) {
|
|
4
|
+
const line = "install! 'cocoapods', :deterministic_uuids => false";
|
|
5
|
+
|
|
6
|
+
if (contents.includes(line)) {
|
|
7
|
+
return contents;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const anchor = 'prepare_react_native_project!';
|
|
11
|
+
|
|
12
|
+
if (!contents.includes(anchor)) {
|
|
13
|
+
return contents;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return contents.replace(anchor, `${line}\n\n${anchor}`);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function injectSpmRootFix(contents) {
|
|
20
|
+
const block = [
|
|
21
|
+
'if defined?(::SPMManager) && ::SPMManager.instance_methods.include?(:add_spm_to_target)',
|
|
22
|
+
' ::SPMManager.class_eval do',
|
|
23
|
+
' unless method_defined?(:inferrlm_add_spm_to_target)',
|
|
24
|
+
' alias_method :inferrlm_add_spm_to_target, :add_spm_to_target',
|
|
25
|
+
'',
|
|
26
|
+
' def add_spm_to_target(project, target, url, requirement, products)',
|
|
27
|
+
' root = project.root_object',
|
|
28
|
+
' if root && project.objects_by_uuid[root.uuid] != root',
|
|
29
|
+
' root.add_referrer(project)',
|
|
30
|
+
' end',
|
|
31
|
+
'',
|
|
32
|
+
' inferrlm_add_spm_to_target(project, target, url, requirement, products)',
|
|
33
|
+
' end',
|
|
34
|
+
' end',
|
|
35
|
+
' end',
|
|
36
|
+
'end',
|
|
37
|
+
].join('\n');
|
|
38
|
+
|
|
39
|
+
if (contents.includes('::SPMManager.class_eval do')) {
|
|
40
|
+
return contents;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const anchor = 'prepare_react_native_project!';
|
|
44
|
+
|
|
45
|
+
if (!contents.includes(anchor)) {
|
|
46
|
+
return contents;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return contents.replace(anchor, `${block}\n\n${anchor}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = function withMlxIosPods(config) {
|
|
53
|
+
return withPodfile(config, (modConfig) => {
|
|
54
|
+
modConfig.modResults.contents = disableDeterministicPodUuids(modConfig.modResults.contents);
|
|
55
|
+
modConfig.modResults.contents = injectSpmRootFix(modConfig.modResults.contents);
|
|
56
|
+
return modConfig;
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
module.exports._helpers = {
|
|
61
|
+
disableDeterministicPodUuids,
|
|
62
|
+
injectSpmRootFix,
|
|
63
|
+
};
|
|
@@ -1,9 +1,149 @@
|
|
|
1
1
|
import Foundation
|
|
2
2
|
import NitroModules
|
|
3
|
+
import Tokenizers
|
|
3
4
|
internal import MLX
|
|
4
5
|
internal import MLXLLM
|
|
5
6
|
internal import MLXLMCommon
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
private typealias ToolSpec = [String: Any]
|
|
9
|
+
|
|
10
|
+
private func isJANGModel(at dir: URL) -> Bool {
|
|
11
|
+
FileManager.default.fileExists(atPath: dir.appendingPathComponent("jang_config.json").path)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
private protocol ChatTemplateConfigurableTokenizer: MLXLMCommon.Tokenizer {
|
|
15
|
+
func applyChatTemplate(
|
|
16
|
+
messages: [[String: any Sendable]],
|
|
17
|
+
chatTemplate: Tokenizers.ChatTemplateArgument?,
|
|
18
|
+
addGenerationPrompt: Bool,
|
|
19
|
+
truncation: Bool,
|
|
20
|
+
maxLength: Int?,
|
|
21
|
+
tools: [[String: any Sendable]]?,
|
|
22
|
+
additionalContext: [String: any Sendable]?
|
|
23
|
+
) throws -> [Int]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private extension MLXLMCommon.Tokenizer {
|
|
27
|
+
func applyChatTemplate(
|
|
28
|
+
messages: [[String: any Sendable]],
|
|
29
|
+
chatTemplate: Tokenizers.ChatTemplateArgument?,
|
|
30
|
+
addGenerationPrompt: Bool,
|
|
31
|
+
truncation: Bool,
|
|
32
|
+
maxLength: Int?,
|
|
33
|
+
tools: [[String: any Sendable]]?,
|
|
34
|
+
additionalContext: [String: any Sendable]?
|
|
35
|
+
) throws -> [Int] {
|
|
36
|
+
guard let tokenizer = self as? any ChatTemplateConfigurableTokenizer else {
|
|
37
|
+
throw MLXLMCommon.TokenizerError.missingChatTemplate
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return try tokenizer.applyChatTemplate(
|
|
41
|
+
messages: messages,
|
|
42
|
+
chatTemplate: chatTemplate,
|
|
43
|
+
addGenerationPrompt: addGenerationPrompt,
|
|
44
|
+
truncation: truncation,
|
|
45
|
+
maxLength: maxLength,
|
|
46
|
+
tools: tools,
|
|
47
|
+
additionalContext: additionalContext
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private struct TransformersTokenizerBridge: ChatTemplateConfigurableTokenizer {
|
|
53
|
+
private let upstream: any Tokenizers.Tokenizer
|
|
54
|
+
|
|
55
|
+
init(_ upstream: any Tokenizers.Tokenizer) {
|
|
56
|
+
self.upstream = upstream
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
func encode(text: String, addSpecialTokens: Bool) -> [Int] {
|
|
60
|
+
upstream.encode(text: text, addSpecialTokens: addSpecialTokens)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
func decode(tokenIds: [Int], skipSpecialTokens: Bool) -> String {
|
|
64
|
+
upstream.decode(tokens: tokenIds, skipSpecialTokens: skipSpecialTokens)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
func convertTokenToId(_ token: String) -> Int? {
|
|
68
|
+
upstream.convertTokenToId(token)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func convertIdToToken(_ id: Int) -> String? {
|
|
72
|
+
upstream.convertIdToToken(id)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
var bosToken: String? { upstream.bosToken }
|
|
76
|
+
var eosToken: String? { upstream.eosToken }
|
|
77
|
+
var unknownToken: String? { upstream.unknownToken }
|
|
78
|
+
|
|
79
|
+
func applyChatTemplate(
|
|
80
|
+
messages: [[String: any Sendable]],
|
|
81
|
+
tools: [[String: any Sendable]]?,
|
|
82
|
+
additionalContext: [String: any Sendable]?
|
|
83
|
+
) throws -> [Int] {
|
|
84
|
+
do {
|
|
85
|
+
return try upstream.applyChatTemplate(
|
|
86
|
+
messages: messages,
|
|
87
|
+
tools: tools,
|
|
88
|
+
additionalContext: additionalContext
|
|
89
|
+
)
|
|
90
|
+
} catch Tokenizers.TokenizerError.missingChatTemplate {
|
|
91
|
+
throw MLXLMCommon.TokenizerError.missingChatTemplate
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
func applyChatTemplate(
|
|
96
|
+
messages: [[String: any Sendable]],
|
|
97
|
+
chatTemplate: Tokenizers.ChatTemplateArgument?,
|
|
98
|
+
addGenerationPrompt: Bool,
|
|
99
|
+
truncation: Bool,
|
|
100
|
+
maxLength: Int?,
|
|
101
|
+
tools: [[String: any Sendable]]?,
|
|
102
|
+
additionalContext: [String: any Sendable]?
|
|
103
|
+
) throws -> [Int] {
|
|
104
|
+
do {
|
|
105
|
+
return try upstream.applyChatTemplate(
|
|
106
|
+
messages: messages,
|
|
107
|
+
chatTemplate: chatTemplate,
|
|
108
|
+
addGenerationPrompt: addGenerationPrompt,
|
|
109
|
+
truncation: truncation,
|
|
110
|
+
maxLength: maxLength,
|
|
111
|
+
tools: tools,
|
|
112
|
+
additionalContext: additionalContext
|
|
113
|
+
)
|
|
114
|
+
} catch Tokenizers.TokenizerError.missingChatTemplate {
|
|
115
|
+
throw MLXLMCommon.TokenizerError.missingChatTemplate
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private struct TransformersTokenizerLoader: MLXLMCommon.TokenizerLoader {
|
|
121
|
+
func load(from directory: URL) async throws -> any MLXLMCommon.Tokenizer {
|
|
122
|
+
let upstream = try await Tokenizers.AutoTokenizer.from(modelFolder: directory)
|
|
123
|
+
return TransformersTokenizerBridge(upstream)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@MainActor
|
|
128
|
+
private final class LoadProgress {
|
|
129
|
+
private let callback: ((Double) -> Void)?
|
|
130
|
+
private(set) var value: Double = 0
|
|
131
|
+
|
|
132
|
+
init(callback: ((Double) -> Void)?) {
|
|
133
|
+
self.callback = callback
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func set(_ nextValue: Double) {
|
|
137
|
+
let clamped = min(1.0, max(value, nextValue))
|
|
138
|
+
guard clamped > value else { return }
|
|
139
|
+
value = clamped
|
|
140
|
+
callback?(clamped)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
func tick(toward upperBound: Double, step: Double) {
|
|
144
|
+
set(min(upperBound, value + step))
|
|
145
|
+
}
|
|
146
|
+
}
|
|
7
147
|
|
|
8
148
|
class HybridLLM: HybridLLMSpec {
|
|
9
149
|
private var session: ChatSession?
|
|
@@ -16,7 +156,6 @@ class HybridLLM: HybridLLMSpec {
|
|
|
16
156
|
totalTime: 0,
|
|
17
157
|
toolExecutionTime: 0
|
|
18
158
|
)
|
|
19
|
-
private var modelFactory: ModelFactory = LLMModelFactory.shared
|
|
20
159
|
private var manageHistory: Bool = false
|
|
21
160
|
private var messageHistory: [LLMMessage] = []
|
|
22
161
|
private var loadTask: Task<Void, Error>?
|
|
@@ -29,9 +168,11 @@ class HybridLLM: HybridLLMSpec {
|
|
|
29
168
|
var modelId: String = ""
|
|
30
169
|
var debug: Bool = false
|
|
31
170
|
var systemPrompt: String = "You are a helpful assistant."
|
|
32
|
-
var maxTokens:
|
|
33
|
-
var temperature:
|
|
171
|
+
var maxTokens: Double = 2048
|
|
172
|
+
var temperature: Double = 0.7
|
|
173
|
+
var enableThinking: Bool = true
|
|
34
174
|
var additionalContext: LLMMessage = LLMMessage()
|
|
175
|
+
private var lastInputContainedThinkTag = false
|
|
35
176
|
|
|
36
177
|
private func log(_ message: String) {
|
|
37
178
|
if debug {
|
|
@@ -140,6 +281,9 @@ class HybridLLM: HybridLLMSpec {
|
|
|
140
281
|
|
|
141
282
|
return Promise.async { [self] in
|
|
142
283
|
let task = Task { @MainActor in
|
|
284
|
+
let progress = LoadProgress(callback: options?.onProgress)
|
|
285
|
+
progress.set(0.02)
|
|
286
|
+
|
|
143
287
|
Memory.cacheLimit = 2000000
|
|
144
288
|
|
|
145
289
|
self.currentTask?.cancel()
|
|
@@ -149,6 +293,7 @@ class HybridLLM: HybridLLMSpec {
|
|
|
149
293
|
self.tools = []
|
|
150
294
|
self.toolSchemas = []
|
|
151
295
|
Memory.clearCache()
|
|
296
|
+
progress.set(0.12)
|
|
152
297
|
|
|
153
298
|
let memoryAfterCleanup = self.getMemoryUsage()
|
|
154
299
|
let gpuAfterCleanup = self.getGPUMemoryUsage()
|
|
@@ -156,13 +301,30 @@ class HybridLLM: HybridLLMSpec {
|
|
|
156
301
|
|
|
157
302
|
let modelDir = await ModelDownloader.shared.getModelDirectory(modelId: modelId)
|
|
158
303
|
log("Loading from directory: \(modelDir.path)")
|
|
304
|
+
progress.set(0.18)
|
|
159
305
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
306
|
+
if isJANGModel(at: modelDir) {
|
|
307
|
+
throw LLMError.unsupportedModel("JANG model format is not supported by the current MLX dependency set")
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
var loadingPulse: Task<Void, Never>?
|
|
311
|
+
if options?.onProgress != nil {
|
|
312
|
+
loadingPulse = Task { @MainActor in
|
|
313
|
+
while !Task.isCancelled {
|
|
314
|
+
try? await Task.sleep(nanoseconds: 250_000_000)
|
|
315
|
+
progress.tick(toward: 0.78, step: 0.04)
|
|
316
|
+
}
|
|
317
|
+
}
|
|
165
318
|
}
|
|
319
|
+
defer { loadingPulse?.cancel() }
|
|
320
|
+
|
|
321
|
+
progress.set(0.22)
|
|
322
|
+
|
|
323
|
+
let loadedContainer = try await LLMModelFactory.shared.loadContainer(
|
|
324
|
+
from: modelDir,
|
|
325
|
+
using: TransformersTokenizerLoader()
|
|
326
|
+
)
|
|
327
|
+
progress.set(0.86)
|
|
166
328
|
|
|
167
329
|
try Task.checkCancellation()
|
|
168
330
|
|
|
@@ -192,6 +354,9 @@ class HybridLLM: HybridLLMSpec {
|
|
|
192
354
|
let updatedExtra = await loadedContainer.configuration.extraEOSTokens
|
|
193
355
|
log("EOS patched - ids: \(updated), extra: \(updatedExtra)")
|
|
194
356
|
}
|
|
357
|
+
progress.set(0.92)
|
|
358
|
+
|
|
359
|
+
progress.set(0.95)
|
|
195
360
|
|
|
196
361
|
let memoryAfterContainer = self.getMemoryUsage()
|
|
197
362
|
let gpuAfterContainer = self.getGPUMemoryUsage()
|
|
@@ -203,10 +368,14 @@ class HybridLLM: HybridLLMSpec {
|
|
|
203
368
|
log("Loaded \(self.tools.count) tools: \(self.tools.map { $0.name })")
|
|
204
369
|
}
|
|
205
370
|
|
|
206
|
-
let additionalContextDict: [String:
|
|
207
|
-
|
|
371
|
+
let additionalContextDict: [String: any Sendable]?
|
|
372
|
+
if let messages = options?.additionalContext {
|
|
373
|
+
let contextMessages: [[String: String]] = messages.map {
|
|
374
|
+
["role": $0.role, "content": $0.content]
|
|
375
|
+
}
|
|
376
|
+
additionalContextDict = ["messages": contextMessages]
|
|
208
377
|
} else {
|
|
209
|
-
nil
|
|
378
|
+
additionalContextDict = nil
|
|
210
379
|
}
|
|
211
380
|
|
|
212
381
|
self.container = loadedContainer
|
|
@@ -219,6 +388,8 @@ class HybridLLM: HybridLLMSpec {
|
|
|
219
388
|
if self.manageHistory {
|
|
220
389
|
log("History management enabled with \(self.messageHistory.count) initial messages")
|
|
221
390
|
}
|
|
391
|
+
|
|
392
|
+
progress.set(1.0)
|
|
222
393
|
}
|
|
223
394
|
|
|
224
395
|
self.loadTask = task
|
|
@@ -454,7 +625,8 @@ class HybridLLM: HybridLLMSpec {
|
|
|
454
625
|
chat: [Chat.Message]
|
|
455
626
|
) async throws -> LMInput {
|
|
456
627
|
let tools = !self.toolSchemas.isEmpty ? self.toolSchemas : nil
|
|
457
|
-
let
|
|
628
|
+
let thinkingEnabled = self.enableThinking
|
|
629
|
+
let additionalCtx: [String: any Sendable] = ["enable_thinking": thinkingEnabled]
|
|
458
630
|
|
|
459
631
|
let messages: [[String: any Sendable]] = chat.map {
|
|
460
632
|
["role": $0.role.rawValue, "content": $0.content]
|
|
@@ -464,13 +636,13 @@ class HybridLLM: HybridLLMSpec {
|
|
|
464
636
|
do {
|
|
465
637
|
let result = try context.tokenizer.applyChatTemplate(
|
|
466
638
|
messages: messages,
|
|
467
|
-
addGenerationPrompt: true,
|
|
468
639
|
tools: tools,
|
|
469
640
|
additionalContext: additionalCtx
|
|
470
641
|
)
|
|
471
642
|
self.log("template_applied token_count=\(result.count)")
|
|
472
|
-
let decoded = context.tokenizer.decode(
|
|
643
|
+
let decoded = context.tokenizer.decode(tokenIds: Array(result.suffix(60)))
|
|
473
644
|
self.log("input_tail_decoded: \(decoded)")
|
|
645
|
+
self.lastInputContainedThinkTag = decoded.contains("<think>")
|
|
474
646
|
return result
|
|
475
647
|
} catch {
|
|
476
648
|
self.log("template_error: \(error), retrying with fallback")
|
|
@@ -484,8 +656,9 @@ class HybridLLM: HybridLLMSpec {
|
|
|
484
656
|
additionalContext: additionalCtx
|
|
485
657
|
)
|
|
486
658
|
self.log("fallback_template_applied token_count=\(result.count)")
|
|
487
|
-
let decoded = context.tokenizer.decode(
|
|
659
|
+
let decoded = context.tokenizer.decode(tokenIds: Array(result.suffix(60)))
|
|
488
660
|
self.log("fallback_input_tail_decoded: \(decoded)")
|
|
661
|
+
self.lastInputContainedThinkTag = decoded.contains("<think>")
|
|
489
662
|
return result
|
|
490
663
|
}
|
|
491
664
|
}
|
|
@@ -536,8 +709,21 @@ class HybridLLM: HybridLLMSpec {
|
|
|
536
709
|
let lmInput = try await prepareInput(container: container, chat: chat)
|
|
537
710
|
log("perform_gen_events input_prepared messages=\(chat.count) maxTokens=\(self.maxTokens) temperature=\(self.temperature)")
|
|
538
711
|
|
|
712
|
+
if self.lastInputContainedThinkTag {
|
|
713
|
+
let seed = thinkingMachine.process(token: "<think>")
|
|
714
|
+
for seedOutput in seed {
|
|
715
|
+
switch seedOutput {
|
|
716
|
+
case .thinkingStart:
|
|
717
|
+
log("thinking_seeded_events")
|
|
718
|
+
emitter.emitThinkingStart()
|
|
719
|
+
default:
|
|
720
|
+
break
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
539
725
|
let stream = try await container.perform { context in
|
|
540
|
-
let parameters = GenerateParameters(maxTokens: self.maxTokens, temperature: Float(self.temperature))
|
|
726
|
+
let parameters = GenerateParameters(maxTokens: Int(self.maxTokens), temperature: Float(self.temperature))
|
|
541
727
|
return try MLXLMCommon.generate(
|
|
542
728
|
input: lmInput,
|
|
543
729
|
parameters: parameters,
|
|
@@ -725,8 +911,27 @@ class HybridLLM: HybridLLMSpec {
|
|
|
725
911
|
let lmInput = try await prepareInput(container: container, chat: chat)
|
|
726
912
|
log("perform_gen input_prepared messages=\(chat.count) maxTokens=\(self.maxTokens) temperature=\(self.temperature)")
|
|
727
913
|
|
|
914
|
+
/*
|
|
915
|
+
When the chat template injects <think> at the end of the prompt,
|
|
916
|
+
the model generates thinking content directly — the opening tag
|
|
917
|
+
is NOT part of the generated stream. Seed the state machine so
|
|
918
|
+
the TS layer receives <think> and sets isThinking = true.
|
|
919
|
+
*/
|
|
920
|
+
if self.lastInputContainedThinkTag {
|
|
921
|
+
let seed = thinkingMachine.process(token: "<think>")
|
|
922
|
+
for seedOutput in seed {
|
|
923
|
+
switch seedOutput {
|
|
924
|
+
case .thinkingStart:
|
|
925
|
+
log("thinking_seeded")
|
|
926
|
+
onToken("<think>")
|
|
927
|
+
default:
|
|
928
|
+
break
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
|
|
728
933
|
let stream = try await container.perform { context in
|
|
729
|
-
let parameters = GenerateParameters(maxTokens: self.maxTokens, temperature: Float(self.temperature))
|
|
934
|
+
let parameters = GenerateParameters(maxTokens: Int(self.maxTokens), temperature: Float(self.temperature))
|
|
730
935
|
return try MLXLMCommon.generate(
|
|
731
936
|
input: lmInput,
|
|
732
937
|
parameters: parameters,
|
package/lib/module/llm.js
CHANGED
|
@@ -200,6 +200,12 @@ export const LLM = {
|
|
|
200
200
|
},
|
|
201
201
|
set temperature(value) {
|
|
202
202
|
getInstance().temperature = value;
|
|
203
|
+
},
|
|
204
|
+
get enableThinking() {
|
|
205
|
+
return getInstance().enableThinking;
|
|
206
|
+
},
|
|
207
|
+
set enableThinking(value) {
|
|
208
|
+
getInstance().enableThinking = value;
|
|
203
209
|
}
|
|
204
210
|
};
|
|
205
211
|
//# sourceMappingURL=llm.js.map
|
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","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","maxTokens","temperature"],"sourceRoot":"../../src","sources":["llm.ts"],"mappings":"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","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","maxTokens","temperature","enableThinking"],"sourceRoot":"../../src","sources":["llm.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAIxD,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,YAAY,CAAA;IACtB,YAAY,EAAE,YAAY,EAAE,CAAA;CAC7B,CAAA;AASD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,GAAG;IACd;;;;OAIG;kBACW,MAAM,WAAW,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;;;OAKG;qBACc,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzC;;;;;;;;;OASG;mBAEO,MAAM,WACL,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,eACnB,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAC5C,OAAO,CAAC,MAAM,CAAC;IAyBlB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;6BACsB,MAAM,WAAW,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzE;;OAEG;YACK,IAAI;IAIZ;;;OAGG;cACO,IAAI;IAId;;;OAGG;8BACuB,eAAe;IAIzC;;;OAGG;kBACW,OAAO,EAAE;IAIvB;;OAEG;oBACa,IAAI;IAIpB,mEAAmE;uBACnD,OAAO;IAIvB,gDAAgD;2BAC5B,OAAO;IAI3B,oEAAoE;sBACrD,MAAM;IAIrB,sCAAsC;WACzB,OAAO;IAQpB;;;;OAIG;kBACiB,MAAM;eAQT,MAAM;iBAQJ,MAAM;
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAIxD,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,YAAY,CAAA;IACtB,YAAY,EAAE,YAAY,EAAE,CAAA;CAC7B,CAAA;AASD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,GAAG;IACd;;;;OAIG;kBACW,MAAM,WAAW,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;;;OAKG;qBACc,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzC;;;;;;;;;OASG;mBAEO,MAAM,WACL,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,eACnB,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAC5C,OAAO,CAAC,MAAM,CAAC;IAyBlB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;6BACsB,MAAM,WAAW,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzE;;OAEG;YACK,IAAI;IAIZ;;;OAGG;cACO,IAAI;IAId;;;OAGG;8BACuB,eAAe;IAIzC;;;OAGG;kBACW,OAAO,EAAE;IAIvB;;OAEG;oBACa,IAAI;IAIpB,mEAAmE;uBACnD,OAAO;IAIvB,gDAAgD;2BAC5B,OAAO;IAI3B,oEAAoE;sBACrD,MAAM;IAIrB,sCAAsC;WACzB,OAAO;IAQpB;;;;OAIG;kBACiB,MAAM;eAQT,MAAM;iBAQJ,MAAM;oBAQH,OAAO;CAO9B,CAAA"}
|
|
@@ -155,6 +155,8 @@ export interface LLM extends HybridObject<{
|
|
|
155
155
|
maxTokens: number;
|
|
156
156
|
/** Sampling temperature (0 = deterministic, higher = more random) */
|
|
157
157
|
temperature: number;
|
|
158
|
+
/** Enable thinking mode for models that support it */
|
|
159
|
+
enableThinking: boolean;
|
|
158
160
|
}
|
|
159
161
|
/**
|
|
160
162
|
* Supported parameter types for tool definitions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLM.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/LLM.nitro.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"LLM.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/LLM.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,6 +98,24 @@ namespace margelo::nitro::mlxreactnative {
|
|
|
98
98
|
inline void setSystemPrompt(const std::string& systemPrompt) noexcept override {
|
|
99
99
|
_swiftPart.setSystemPrompt(systemPrompt);
|
|
100
100
|
}
|
|
101
|
+
inline double getMaxTokens() noexcept override {
|
|
102
|
+
return _swiftPart.getMaxTokens();
|
|
103
|
+
}
|
|
104
|
+
inline void setMaxTokens(double maxTokens) noexcept override {
|
|
105
|
+
_swiftPart.setMaxTokens(std::forward<decltype(maxTokens)>(maxTokens));
|
|
106
|
+
}
|
|
107
|
+
inline double getTemperature() noexcept override {
|
|
108
|
+
return _swiftPart.getTemperature();
|
|
109
|
+
}
|
|
110
|
+
inline void setTemperature(double temperature) noexcept override {
|
|
111
|
+
_swiftPart.setTemperature(std::forward<decltype(temperature)>(temperature));
|
|
112
|
+
}
|
|
113
|
+
inline bool getEnableThinking() noexcept override {
|
|
114
|
+
return _swiftPart.getEnableThinking();
|
|
115
|
+
}
|
|
116
|
+
inline void setEnableThinking(bool enableThinking) noexcept override {
|
|
117
|
+
_swiftPart.setEnableThinking(std::forward<decltype(enableThinking)>(enableThinking));
|
|
118
|
+
}
|
|
101
119
|
|
|
102
120
|
public:
|
|
103
121
|
// Methods
|
|
@@ -16,6 +16,9 @@ public protocol HybridLLMSpec_protocol: HybridObject {
|
|
|
16
16
|
var modelId: String { get }
|
|
17
17
|
var debug: Bool { get set }
|
|
18
18
|
var systemPrompt: String { get set }
|
|
19
|
+
var maxTokens: Double { get set }
|
|
20
|
+
var temperature: Double { get set }
|
|
21
|
+
var enableThinking: Bool { get set }
|
|
19
22
|
|
|
20
23
|
// Methods
|
|
21
24
|
func load(modelId: String, options: LLMLoadOptions?) throws -> Promise<Void>
|
|
@@ -156,6 +156,39 @@ open class HybridLLMSpec_cxx {
|
|
|
156
156
|
self.__implementation.systemPrompt = String(newValue)
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
|
+
|
|
160
|
+
public final var maxTokens: Double {
|
|
161
|
+
@inline(__always)
|
|
162
|
+
get {
|
|
163
|
+
return self.__implementation.maxTokens
|
|
164
|
+
}
|
|
165
|
+
@inline(__always)
|
|
166
|
+
set {
|
|
167
|
+
self.__implementation.maxTokens = newValue
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
public final var temperature: Double {
|
|
172
|
+
@inline(__always)
|
|
173
|
+
get {
|
|
174
|
+
return self.__implementation.temperature
|
|
175
|
+
}
|
|
176
|
+
@inline(__always)
|
|
177
|
+
set {
|
|
178
|
+
self.__implementation.temperature = newValue
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
public final var enableThinking: Bool {
|
|
183
|
+
@inline(__always)
|
|
184
|
+
get {
|
|
185
|
+
return self.__implementation.enableThinking
|
|
186
|
+
}
|
|
187
|
+
@inline(__always)
|
|
188
|
+
set {
|
|
189
|
+
self.__implementation.enableThinking = newValue
|
|
190
|
+
}
|
|
191
|
+
}
|
|
159
192
|
|
|
160
193
|
// Methods
|
|
161
194
|
@inline(__always)
|
|
@@ -21,6 +21,12 @@ namespace margelo::nitro::mlxreactnative {
|
|
|
21
21
|
prototype.registerHybridSetter("debug", &HybridLLMSpec::setDebug);
|
|
22
22
|
prototype.registerHybridGetter("systemPrompt", &HybridLLMSpec::getSystemPrompt);
|
|
23
23
|
prototype.registerHybridSetter("systemPrompt", &HybridLLMSpec::setSystemPrompt);
|
|
24
|
+
prototype.registerHybridGetter("maxTokens", &HybridLLMSpec::getMaxTokens);
|
|
25
|
+
prototype.registerHybridSetter("maxTokens", &HybridLLMSpec::setMaxTokens);
|
|
26
|
+
prototype.registerHybridGetter("temperature", &HybridLLMSpec::getTemperature);
|
|
27
|
+
prototype.registerHybridSetter("temperature", &HybridLLMSpec::setTemperature);
|
|
28
|
+
prototype.registerHybridGetter("enableThinking", &HybridLLMSpec::getEnableThinking);
|
|
29
|
+
prototype.registerHybridSetter("enableThinking", &HybridLLMSpec::setEnableThinking);
|
|
24
30
|
prototype.registerHybridMethod("load", &HybridLLMSpec::load);
|
|
25
31
|
prototype.registerHybridMethod("generate", &HybridLLMSpec::generate);
|
|
26
32
|
prototype.registerHybridMethod("stream", &HybridLLMSpec::stream);
|
|
@@ -63,6 +63,12 @@ namespace margelo::nitro::mlxreactnative {
|
|
|
63
63
|
virtual void setDebug(bool debug) = 0;
|
|
64
64
|
virtual std::string getSystemPrompt() = 0;
|
|
65
65
|
virtual void setSystemPrompt(const std::string& systemPrompt) = 0;
|
|
66
|
+
virtual double getMaxTokens() = 0;
|
|
67
|
+
virtual void setMaxTokens(double maxTokens) = 0;
|
|
68
|
+
virtual double getTemperature() = 0;
|
|
69
|
+
virtual void setTemperature(double temperature) = 0;
|
|
70
|
+
virtual bool getEnableThinking() = 0;
|
|
71
|
+
virtual void setEnableThinking(bool enableThinking) = 0;
|
|
66
72
|
|
|
67
73
|
public:
|
|
68
74
|
// Methods
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inferrlm/react-native-mlx",
|
|
3
3
|
"description": "MLX Swift integration for React Native - InferrLM fork with enhanced features",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.8",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"module": "./lib/module/index.js",
|
|
7
7
|
"types": "./lib/typescript/src/index.d.ts",
|
package/src/llm.ts
CHANGED
|
@@ -242,4 +242,12 @@ export const LLM = {
|
|
|
242
242
|
set temperature(value: number) {
|
|
243
243
|
getInstance().temperature = value
|
|
244
244
|
},
|
|
245
|
+
|
|
246
|
+
get enableThinking(): boolean {
|
|
247
|
+
return getInstance().enableThinking
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
set enableThinking(value: boolean) {
|
|
251
|
+
getInstance().enableThinking = value
|
|
252
|
+
},
|
|
245
253
|
}
|
package/src/specs/LLM.nitro.ts
CHANGED
|
@@ -197,6 +197,8 @@ export interface LLM extends HybridObject<{ ios: 'swift' }> {
|
|
|
197
197
|
maxTokens: number
|
|
198
198
|
/** Sampling temperature (0 = deterministic, higher = more random) */
|
|
199
199
|
temperature: number
|
|
200
|
+
/** Enable thinking mode for models that support it */
|
|
201
|
+
enableThinking: boolean
|
|
200
202
|
}
|
|
201
203
|
|
|
202
204
|
/**
|