@inferrlm/react-native-mlx 0.4.2-alpha.1 → 0.4.2-alpha.10
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/ios/Sources/HybridLLM.swift +255 -37
- package/lib/module/llm.js +18 -0
- package/lib/module/llm.js.map +1 -1
- package/lib/typescript/src/llm.d.ts +3 -0
- package/lib/typescript/src/llm.d.ts.map +1 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +6 -0
- package/lib/typescript/src/specs/LLM.nitro.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/llm.ts +24 -0
- package/src/specs/LLM.nitro.ts +6 -0
|
@@ -29,7 +29,11 @@ class HybridLLM: HybridLLMSpec {
|
|
|
29
29
|
var modelId: String = ""
|
|
30
30
|
var debug: Bool = false
|
|
31
31
|
var systemPrompt: String = "You are a helpful assistant."
|
|
32
|
+
var maxTokens: Int = 2048
|
|
33
|
+
var temperature: Float = 0.7
|
|
34
|
+
var enableThinking: Bool = true
|
|
32
35
|
var additionalContext: LLMMessage = LLMMessage()
|
|
36
|
+
private var lastInputContainedThinkTag = false
|
|
33
37
|
|
|
34
38
|
private func log(_ message: String) {
|
|
35
39
|
if debug {
|
|
@@ -230,10 +234,6 @@ class HybridLLM: HybridLLMSpec {
|
|
|
230
234
|
}
|
|
231
235
|
|
|
232
236
|
return Promise.async { [self] in
|
|
233
|
-
if self.manageHistory {
|
|
234
|
-
self.messageHistory.append(LLMMessage(role: "user", content: prompt))
|
|
235
|
-
}
|
|
236
|
-
|
|
237
237
|
let task = Task<String, Error> {
|
|
238
238
|
log("Generating response for: \(prompt.prefix(50))...")
|
|
239
239
|
let result = try await session.respond(to: prompt)
|
|
@@ -247,6 +247,7 @@ class HybridLLM: HybridLLMSpec {
|
|
|
247
247
|
let result = try await task.value
|
|
248
248
|
|
|
249
249
|
if self.manageHistory {
|
|
250
|
+
self.messageHistory.append(LLMMessage(role: "user", content: prompt))
|
|
250
251
|
self.messageHistory.append(LLMMessage(role: "assistant", content: result))
|
|
251
252
|
}
|
|
252
253
|
|
|
@@ -265,16 +266,21 @@ class HybridLLM: HybridLLMSpec {
|
|
|
265
266
|
throw LLMError.notLoaded
|
|
266
267
|
}
|
|
267
268
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
if let prev = currentTask {
|
|
270
|
+
log("stream_cancelling_previous")
|
|
271
|
+
prev.cancel()
|
|
272
|
+
currentTask = nil
|
|
273
|
+
}
|
|
272
274
|
|
|
275
|
+
return Promise.async { [self] in
|
|
273
276
|
let task = Task<String, Error> {
|
|
274
277
|
let startTime = Date()
|
|
275
278
|
var firstTokenTime: Date?
|
|
276
279
|
var tokenCount = 0
|
|
277
280
|
|
|
281
|
+
log("stream_start prompt=\(prompt.count)chars history=\(self.messageHistory.count) manageHistory=\(self.manageHistory) maxTokens=\(self.maxTokens) temperature=\(self.temperature)")
|
|
282
|
+
log("stream_prompt: \(prompt)")
|
|
283
|
+
|
|
278
284
|
let result = try await self.performGeneration(
|
|
279
285
|
container: container,
|
|
280
286
|
prompt: prompt,
|
|
@@ -303,7 +309,8 @@ class HybridLLM: HybridLLMSpec {
|
|
|
303
309
|
toolExecutionTime: 0
|
|
304
310
|
)
|
|
305
311
|
|
|
306
|
-
log("
|
|
312
|
+
log("stream_done tokens=\(tokenCount) tps=\(String(format: "%.1f", tokensPerSecond)) result=\(result.count)chars")
|
|
313
|
+
log("stream_result: \(result)")
|
|
307
314
|
return result
|
|
308
315
|
}
|
|
309
316
|
|
|
@@ -313,7 +320,9 @@ class HybridLLM: HybridLLMSpec {
|
|
|
313
320
|
let result = try await task.value
|
|
314
321
|
|
|
315
322
|
if self.manageHistory {
|
|
323
|
+
self.messageHistory.append(LLMMessage(role: "user", content: prompt))
|
|
316
324
|
self.messageHistory.append(LLMMessage(role: "assistant", content: result))
|
|
325
|
+
log("stream_history_updated count=\(self.messageHistory.count)")
|
|
317
326
|
}
|
|
318
327
|
|
|
319
328
|
return result
|
|
@@ -328,11 +337,13 @@ class HybridLLM: HybridLLMSpec {
|
|
|
328
337
|
throw LLMError.notLoaded
|
|
329
338
|
}
|
|
330
339
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
340
|
+
if let prev = currentTask {
|
|
341
|
+
log("streamWithEvents_cancelling_previous")
|
|
342
|
+
prev.cancel()
|
|
343
|
+
currentTask = nil
|
|
344
|
+
}
|
|
335
345
|
|
|
346
|
+
return Promise.async { [self] in
|
|
336
347
|
let task = Task<String, Error> {
|
|
337
348
|
let startTime = Date()
|
|
338
349
|
var firstTokenTime: Date?
|
|
@@ -389,6 +400,7 @@ class HybridLLM: HybridLLMSpec {
|
|
|
389
400
|
let result = try await task.value
|
|
390
401
|
|
|
391
402
|
if self.manageHistory {
|
|
403
|
+
self.messageHistory.append(LLMMessage(role: "user", content: prompt))
|
|
392
404
|
self.messageHistory.append(LLMMessage(role: "assistant", content: result))
|
|
393
405
|
}
|
|
394
406
|
|
|
@@ -396,6 +408,8 @@ class HybridLLM: HybridLLMSpec {
|
|
|
396
408
|
}
|
|
397
409
|
}
|
|
398
410
|
|
|
411
|
+
private static let fallbackTemplate = "{%- for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{%- endfor %}{%- if add_generation_prompt %}{%- if enable_thinking is defined and enable_thinking is true %}{{ '<|im_start|>assistant\\n<think>\\n' }}{%- else %}{{ '<|im_start|>assistant\\n' }}{%- endif %}{%- endif %}"
|
|
412
|
+
|
|
399
413
|
private func buildChatMessages(
|
|
400
414
|
prompt: String,
|
|
401
415
|
toolResults: [String]?,
|
|
@@ -403,11 +417,14 @@ class HybridLLM: HybridLLMSpec {
|
|
|
403
417
|
) -> [Chat.Message] {
|
|
404
418
|
var chat: [Chat.Message] = []
|
|
405
419
|
|
|
420
|
+
log("build_chat depth=\(depth) history=\(self.messageHistory.count) prompt=\(prompt.count)chars")
|
|
421
|
+
|
|
406
422
|
if !self.systemPrompt.isEmpty {
|
|
407
423
|
chat.append(.system(self.systemPrompt))
|
|
424
|
+
log(" [system] \(self.systemPrompt)")
|
|
408
425
|
}
|
|
409
426
|
|
|
410
|
-
for msg in self.messageHistory {
|
|
427
|
+
for (i, msg) in self.messageHistory.enumerated() {
|
|
411
428
|
switch msg.role {
|
|
412
429
|
case "user": chat.append(.user(msg.content))
|
|
413
430
|
case "assistant": chat.append(.assistant(msg.content))
|
|
@@ -415,21 +432,71 @@ class HybridLLM: HybridLLMSpec {
|
|
|
415
432
|
case "tool": chat.append(.tool(msg.content))
|
|
416
433
|
default: break
|
|
417
434
|
}
|
|
435
|
+
log(" [\(i):\(msg.role)] \(msg.content)")
|
|
418
436
|
}
|
|
419
437
|
|
|
420
438
|
if depth == 0 {
|
|
421
439
|
chat.append(.user(prompt))
|
|
440
|
+
log(" [prompt] \(prompt)")
|
|
422
441
|
}
|
|
423
442
|
|
|
424
443
|
if let toolResults {
|
|
425
|
-
for result in toolResults {
|
|
444
|
+
for (i, result) in toolResults.enumerated() {
|
|
426
445
|
chat.append(.tool(result))
|
|
446
|
+
log(" [tool_result_\(i)] \(result)")
|
|
427
447
|
}
|
|
428
448
|
}
|
|
429
449
|
|
|
450
|
+
log("chat_built total=\(chat.count) messages")
|
|
430
451
|
return chat
|
|
431
452
|
}
|
|
432
453
|
|
|
454
|
+
private func prepareInput(
|
|
455
|
+
container: ModelContainer,
|
|
456
|
+
chat: [Chat.Message]
|
|
457
|
+
) async throws -> LMInput {
|
|
458
|
+
let tools = !self.toolSchemas.isEmpty ? self.toolSchemas : nil
|
|
459
|
+
let thinkingEnabled = self.enableThinking
|
|
460
|
+
let additionalCtx: [String: any Sendable] = ["enable_thinking": thinkingEnabled]
|
|
461
|
+
|
|
462
|
+
let messages: [[String: any Sendable]] = chat.map {
|
|
463
|
+
["role": $0.role.rawValue, "content": $0.content]
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
let tokens: [Int] = try await container.perform { (context: ModelContext) in
|
|
467
|
+
do {
|
|
468
|
+
let result = try context.tokenizer.applyChatTemplate(
|
|
469
|
+
messages: messages,
|
|
470
|
+
tools: tools,
|
|
471
|
+
additionalContext: additionalCtx
|
|
472
|
+
)
|
|
473
|
+
self.log("template_applied token_count=\(result.count)")
|
|
474
|
+
let decoded = context.tokenizer.decode(tokens: Array(result.suffix(60)))
|
|
475
|
+
self.log("input_tail_decoded: \(decoded)")
|
|
476
|
+
self.lastInputContainedThinkTag = decoded.contains("<think>")
|
|
477
|
+
return result
|
|
478
|
+
} catch {
|
|
479
|
+
self.log("template_error: \(error), retrying with fallback")
|
|
480
|
+
let result = try context.tokenizer.applyChatTemplate(
|
|
481
|
+
messages: messages,
|
|
482
|
+
chatTemplate: .literal(HybridLLM.fallbackTemplate),
|
|
483
|
+
addGenerationPrompt: true,
|
|
484
|
+
truncation: false,
|
|
485
|
+
maxLength: nil,
|
|
486
|
+
tools: nil,
|
|
487
|
+
additionalContext: additionalCtx
|
|
488
|
+
)
|
|
489
|
+
self.log("fallback_template_applied token_count=\(result.count)")
|
|
490
|
+
let decoded = context.tokenizer.decode(tokens: Array(result.suffix(60)))
|
|
491
|
+
self.log("fallback_input_tail_decoded: \(decoded)")
|
|
492
|
+
self.lastInputContainedThinkTag = decoded.contains("<think>")
|
|
493
|
+
return result
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
return LMInput(tokens: MLXArray(tokens))
|
|
498
|
+
}
|
|
499
|
+
|
|
433
500
|
private func executeToolCall(
|
|
434
501
|
tool: ToolDefinition,
|
|
435
502
|
argsDict: [String: Any]
|
|
@@ -460,17 +527,34 @@ class HybridLLM: HybridLLMSpec {
|
|
|
460
527
|
var output = ""
|
|
461
528
|
var thinkingMachine = ThinkingStateMachine()
|
|
462
529
|
var pendingToolCalls: [(id: String, tool: ToolDefinition, args: [String: Any], argsJson: String)] = []
|
|
530
|
+
var rawTokenLog = ""
|
|
463
531
|
|
|
464
|
-
let
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
tools: !self.toolSchemas.isEmpty ? self.toolSchemas : nil
|
|
532
|
+
let specialTokenPattern = try? NSRegularExpression(
|
|
533
|
+
pattern: "<\\|(?:im_end|im_start|endoftext|end|pad)\\|>",
|
|
534
|
+
options: []
|
|
468
535
|
)
|
|
469
536
|
|
|
470
|
-
|
|
537
|
+
log("perform_gen_events depth=\(depth) prompt=\(prompt.count)chars toolResults=\(toolResults?.count ?? 0)")
|
|
538
|
+
|
|
539
|
+
let chat = buildChatMessages(prompt: prompt, toolResults: toolResults, depth: depth)
|
|
540
|
+
let lmInput = try await prepareInput(container: container, chat: chat)
|
|
541
|
+
log("perform_gen_events input_prepared messages=\(chat.count) maxTokens=\(self.maxTokens) temperature=\(self.temperature)")
|
|
542
|
+
|
|
543
|
+
if self.lastInputContainedThinkTag {
|
|
544
|
+
let seed = thinkingMachine.process(token: "<think>")
|
|
545
|
+
for seedOutput in seed {
|
|
546
|
+
switch seedOutput {
|
|
547
|
+
case .thinkingStart:
|
|
548
|
+
log("thinking_seeded_events")
|
|
549
|
+
emitter.emitThinkingStart()
|
|
550
|
+
default:
|
|
551
|
+
break
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
471
555
|
|
|
472
556
|
let stream = try await container.perform { context in
|
|
473
|
-
let parameters = GenerateParameters(maxTokens:
|
|
557
|
+
let parameters = GenerateParameters(maxTokens: self.maxTokens, temperature: Float(self.temperature))
|
|
474
558
|
return try MLXLMCommon.generate(
|
|
475
559
|
input: lmInput,
|
|
476
560
|
parameters: parameters,
|
|
@@ -478,27 +562,53 @@ class HybridLLM: HybridLLMSpec {
|
|
|
478
562
|
)
|
|
479
563
|
}
|
|
480
564
|
|
|
565
|
+
var chunkCount = 0
|
|
481
566
|
for await generation in stream {
|
|
482
|
-
if Task.isCancelled {
|
|
567
|
+
if Task.isCancelled {
|
|
568
|
+
log("perform_gen_events cancelled at chunk=\(chunkCount)")
|
|
569
|
+
break
|
|
570
|
+
}
|
|
483
571
|
|
|
484
572
|
switch generation {
|
|
485
573
|
case .chunk(let text):
|
|
574
|
+
chunkCount += 1
|
|
575
|
+
rawTokenLog += text
|
|
576
|
+
if chunkCount <= 20 || chunkCount % 50 == 0 {
|
|
577
|
+
log("raw_chunk_events[\(chunkCount)] \(text.debugDescription)")
|
|
578
|
+
}
|
|
579
|
+
|
|
486
580
|
let outputs = thinkingMachine.process(token: text)
|
|
487
581
|
|
|
488
582
|
for machineOutput in outputs {
|
|
489
583
|
switch machineOutput {
|
|
490
584
|
case .token(let token):
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
585
|
+
var cleaned = token
|
|
586
|
+
if let regex = specialTokenPattern {
|
|
587
|
+
let before = cleaned
|
|
588
|
+
cleaned = regex.stringByReplacingMatches(
|
|
589
|
+
in: cleaned,
|
|
590
|
+
range: NSRange(cleaned.startIndex..., in: cleaned),
|
|
591
|
+
withTemplate: ""
|
|
592
|
+
)
|
|
593
|
+
if before != cleaned {
|
|
594
|
+
log("stripped_special_events: \(before.debugDescription) -> \(cleaned.debugDescription)")
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
if !cleaned.isEmpty {
|
|
598
|
+
output += cleaned
|
|
599
|
+
emitter.emitToken(cleaned)
|
|
600
|
+
onTokenProcessed()
|
|
601
|
+
}
|
|
494
602
|
|
|
495
603
|
case .thinkingStart:
|
|
604
|
+
log("thinking_start_events at chunk=\(chunkCount)")
|
|
496
605
|
emitter.emitThinkingStart()
|
|
497
606
|
|
|
498
607
|
case .thinkingChunk(let chunk):
|
|
499
608
|
emitter.emitThinkingChunk(chunk)
|
|
500
609
|
|
|
501
610
|
case .thinkingEnd(let content):
|
|
611
|
+
log("thinking_end_events at chunk=\(chunkCount)")
|
|
502
612
|
emitter.emitThinkingEnd(content)
|
|
503
613
|
}
|
|
504
614
|
}
|
|
@@ -519,12 +629,15 @@ class HybridLLM: HybridLLMSpec {
|
|
|
519
629
|
pendingToolCalls.append((id: toolCallId, tool: tool, args: argsDict, argsJson: argsJson))
|
|
520
630
|
|
|
521
631
|
case .info(let info):
|
|
522
|
-
log("
|
|
632
|
+
log("gen_info_events chunks=\(chunkCount) genTokens=\(info.generationTokenCount) tps=\(String(format: "%.1f", info.tokensPerSecond))")
|
|
523
633
|
let generationTime = info.tokensPerSecond > 0 ? Double(info.generationTokenCount) / info.tokensPerSecond * 1000 : 0
|
|
524
634
|
onGenerationInfo(info.generationTokenCount, generationTime)
|
|
525
635
|
}
|
|
526
636
|
}
|
|
527
637
|
|
|
638
|
+
log("perform_gen_events_loop_done chunks=\(chunkCount) output=\(output.count)chars")
|
|
639
|
+
log("raw_output_events: \(rawTokenLog)")
|
|
640
|
+
|
|
528
641
|
let flushOutputs = thinkingMachine.flush()
|
|
529
642
|
for machineOutput in flushOutputs {
|
|
530
643
|
switch machineOutput {
|
|
@@ -614,18 +727,42 @@ class HybridLLM: HybridLLMSpec {
|
|
|
614
727
|
}
|
|
615
728
|
|
|
616
729
|
var output = ""
|
|
730
|
+
var thinkingMachine = ThinkingStateMachine()
|
|
617
731
|
var pendingToolCalls: [(tool: ToolDefinition, args: [String: Any], argsJson: String)] = []
|
|
732
|
+
var rawTokenLog = ""
|
|
618
733
|
|
|
619
|
-
let
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
tools: !self.toolSchemas.isEmpty ? self.toolSchemas : nil
|
|
734
|
+
let specialTokenPattern = try? NSRegularExpression(
|
|
735
|
+
pattern: "<\\|(?:im_end|im_start|endoftext|end|pad)\\|>",
|
|
736
|
+
options: []
|
|
623
737
|
)
|
|
624
738
|
|
|
625
|
-
|
|
739
|
+
log("perform_gen depth=\(depth) prompt=\(prompt.count)chars toolResults=\(toolResults?.count ?? 0)")
|
|
740
|
+
|
|
741
|
+
let chat = buildChatMessages(prompt: prompt, toolResults: toolResults, depth: depth)
|
|
742
|
+
let lmInput = try await prepareInput(container: container, chat: chat)
|
|
743
|
+
log("perform_gen input_prepared messages=\(chat.count) maxTokens=\(self.maxTokens) temperature=\(self.temperature)")
|
|
744
|
+
|
|
745
|
+
/*
|
|
746
|
+
When the chat template injects <think> at the end of the prompt,
|
|
747
|
+
the model generates thinking content directly — the opening tag
|
|
748
|
+
is NOT part of the generated stream. Seed the state machine so
|
|
749
|
+
the TS layer receives <think> and sets isThinking = true.
|
|
750
|
+
*/
|
|
751
|
+
if self.lastInputContainedThinkTag {
|
|
752
|
+
let seed = thinkingMachine.process(token: "<think>")
|
|
753
|
+
for seedOutput in seed {
|
|
754
|
+
switch seedOutput {
|
|
755
|
+
case .thinkingStart:
|
|
756
|
+
log("thinking_seeded")
|
|
757
|
+
onToken("<think>")
|
|
758
|
+
default:
|
|
759
|
+
break
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
626
763
|
|
|
627
764
|
let stream = try await container.perform { context in
|
|
628
|
-
let parameters = GenerateParameters(maxTokens:
|
|
765
|
+
let parameters = GenerateParameters(maxTokens: self.maxTokens, temperature: Float(self.temperature))
|
|
629
766
|
return try MLXLMCommon.generate(
|
|
630
767
|
input: lmInput,
|
|
631
768
|
parameters: parameters,
|
|
@@ -633,13 +770,55 @@ class HybridLLM: HybridLLMSpec {
|
|
|
633
770
|
)
|
|
634
771
|
}
|
|
635
772
|
|
|
773
|
+
var chunkCount = 0
|
|
636
774
|
for await generation in stream {
|
|
637
|
-
if Task.isCancelled {
|
|
775
|
+
if Task.isCancelled {
|
|
776
|
+
log("perform_gen cancelled at chunk=\(chunkCount)")
|
|
777
|
+
break
|
|
778
|
+
}
|
|
638
779
|
|
|
639
780
|
switch generation {
|
|
640
781
|
case .chunk(let text):
|
|
641
|
-
|
|
642
|
-
|
|
782
|
+
chunkCount += 1
|
|
783
|
+
rawTokenLog += text
|
|
784
|
+
if chunkCount <= 20 || chunkCount % 50 == 0 {
|
|
785
|
+
log("raw_chunk[\(chunkCount)] \(text.debugDescription)")
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
let outputs = thinkingMachine.process(token: text)
|
|
789
|
+
|
|
790
|
+
for machineOutput in outputs {
|
|
791
|
+
switch machineOutput {
|
|
792
|
+
case .token(let token):
|
|
793
|
+
var cleaned = token
|
|
794
|
+
if let regex = specialTokenPattern {
|
|
795
|
+
let before = cleaned
|
|
796
|
+
cleaned = regex.stringByReplacingMatches(
|
|
797
|
+
in: cleaned,
|
|
798
|
+
range: NSRange(cleaned.startIndex..., in: cleaned),
|
|
799
|
+
withTemplate: ""
|
|
800
|
+
)
|
|
801
|
+
if before != cleaned {
|
|
802
|
+
log("stripped_special: \(before.debugDescription) -> \(cleaned.debugDescription)")
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if !cleaned.isEmpty {
|
|
806
|
+
output += cleaned
|
|
807
|
+
onToken(cleaned)
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
case .thinkingStart:
|
|
811
|
+
log("thinking_start at chunk=\(chunkCount)")
|
|
812
|
+
onToken("<think>")
|
|
813
|
+
|
|
814
|
+
case .thinkingChunk(let chunk):
|
|
815
|
+
onToken(chunk)
|
|
816
|
+
|
|
817
|
+
case .thinkingEnd:
|
|
818
|
+
log("thinking_end at chunk=\(chunkCount)")
|
|
819
|
+
onToken("</think>")
|
|
820
|
+
}
|
|
821
|
+
}
|
|
643
822
|
|
|
644
823
|
case .toolCall(let toolCall):
|
|
645
824
|
log("Tool call detected: \(toolCall.function.name)")
|
|
@@ -656,7 +835,38 @@ class HybridLLM: HybridLLMSpec {
|
|
|
656
835
|
onToolCall(toolCall.function.name, argsJson)
|
|
657
836
|
|
|
658
837
|
case .info(let info):
|
|
659
|
-
log("
|
|
838
|
+
log("gen_info chunks=\(chunkCount) genTokens=\(info.generationTokenCount) tps=\(String(format: "%.1f", info.tokensPerSecond))")
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
log("perform_gen_loop_done chunks=\(chunkCount) output=\(output.count)chars")
|
|
843
|
+
log("raw_output: \(rawTokenLog)")
|
|
844
|
+
|
|
845
|
+
let flushOutputs = thinkingMachine.flush()
|
|
846
|
+
if !flushOutputs.isEmpty {
|
|
847
|
+
log("flush_outputs count=\(flushOutputs.count)")
|
|
848
|
+
}
|
|
849
|
+
for machineOutput in flushOutputs {
|
|
850
|
+
switch machineOutput {
|
|
851
|
+
case .token(let token):
|
|
852
|
+
var cleaned = token
|
|
853
|
+
if let regex = specialTokenPattern {
|
|
854
|
+
cleaned = regex.stringByReplacingMatches(
|
|
855
|
+
in: cleaned,
|
|
856
|
+
range: NSRange(cleaned.startIndex..., in: cleaned),
|
|
857
|
+
withTemplate: ""
|
|
858
|
+
)
|
|
859
|
+
}
|
|
860
|
+
if !cleaned.isEmpty {
|
|
861
|
+
output += cleaned
|
|
862
|
+
onToken(cleaned)
|
|
863
|
+
}
|
|
864
|
+
case .thinkingStart:
|
|
865
|
+
onToken("<think>")
|
|
866
|
+
case .thinkingChunk(let chunk):
|
|
867
|
+
onToken(chunk)
|
|
868
|
+
case .thinkingEnd:
|
|
869
|
+
onToken("</think>")
|
|
660
870
|
}
|
|
661
871
|
}
|
|
662
872
|
|
|
@@ -710,6 +920,7 @@ class HybridLLM: HybridLLMSpec {
|
|
|
710
920
|
return output + continuation
|
|
711
921
|
}
|
|
712
922
|
|
|
923
|
+
log("perform_gen_result output=\(output.count)chars result: \(output)")
|
|
713
924
|
return output
|
|
714
925
|
}
|
|
715
926
|
|
|
@@ -793,7 +1004,14 @@ class HybridLLM: HybridLLMSpec {
|
|
|
793
1004
|
}
|
|
794
1005
|
|
|
795
1006
|
func clearHistory() throws {
|
|
1007
|
+
log("clear_history before=\(messageHistory.count) messages")
|
|
1008
|
+
for (i, msg) in messageHistory.enumerated() {
|
|
1009
|
+
log(" clearing[\(i):\(msg.role)] \(msg.content)")
|
|
1010
|
+
}
|
|
796
1011
|
messageHistory = []
|
|
797
|
-
|
|
1012
|
+
if let container = self.container {
|
|
1013
|
+
self.session = ChatSession(container, instructions: self.systemPrompt)
|
|
1014
|
+
}
|
|
1015
|
+
log("clear_history done session_reset")
|
|
798
1016
|
}
|
|
799
1017
|
}
|
package/lib/module/llm.js
CHANGED
|
@@ -188,6 +188,24 @@ export const LLM = {
|
|
|
188
188
|
},
|
|
189
189
|
set systemPrompt(value) {
|
|
190
190
|
getInstance().systemPrompt = value;
|
|
191
|
+
},
|
|
192
|
+
get maxTokens() {
|
|
193
|
+
return getInstance().maxTokens;
|
|
194
|
+
},
|
|
195
|
+
set maxTokens(value) {
|
|
196
|
+
getInstance().maxTokens = value;
|
|
197
|
+
},
|
|
198
|
+
get temperature() {
|
|
199
|
+
return getInstance().temperature;
|
|
200
|
+
},
|
|
201
|
+
set temperature(value) {
|
|
202
|
+
getInstance().temperature = value;
|
|
203
|
+
},
|
|
204
|
+
get enableThinking() {
|
|
205
|
+
return getInstance().enableThinking;
|
|
206
|
+
},
|
|
207
|
+
set enableThinking(value) {
|
|
208
|
+
getInstance().enableThinking = value;
|
|
191
209
|
}
|
|
192
210
|
};
|
|
193
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"],"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;
|
|
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"}
|
|
@@ -151,6 +151,12 @@ export interface LLM extends HybridObject<{
|
|
|
151
151
|
debug: boolean;
|
|
152
152
|
/** System prompt used when loading the model */
|
|
153
153
|
systemPrompt: string;
|
|
154
|
+
/** Maximum number of tokens to generate */
|
|
155
|
+
maxTokens: number;
|
|
156
|
+
/** Sampling temperature (0 = deterministic, higher = more random) */
|
|
157
|
+
temperature: number;
|
|
158
|
+
/** Enable thinking mode for models that support it */
|
|
159
|
+
enableThinking: boolean;
|
|
154
160
|
}
|
|
155
161
|
/**
|
|
156
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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"}
|
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.2-alpha.
|
|
4
|
+
"version": "0.4.2-alpha.10",
|
|
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
|
@@ -226,4 +226,28 @@ export const LLM = {
|
|
|
226
226
|
set systemPrompt(value: string) {
|
|
227
227
|
getInstance().systemPrompt = value
|
|
228
228
|
},
|
|
229
|
+
|
|
230
|
+
get maxTokens(): number {
|
|
231
|
+
return getInstance().maxTokens
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
set maxTokens(value: number) {
|
|
235
|
+
getInstance().maxTokens = value
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
get temperature(): number {
|
|
239
|
+
return getInstance().temperature
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
set temperature(value: number) {
|
|
243
|
+
getInstance().temperature = value
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
get enableThinking(): boolean {
|
|
247
|
+
return getInstance().enableThinking
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
set enableThinking(value: boolean) {
|
|
251
|
+
getInstance().enableThinking = value
|
|
252
|
+
},
|
|
229
253
|
}
|
package/src/specs/LLM.nitro.ts
CHANGED
|
@@ -193,6 +193,12 @@ export interface LLM extends HybridObject<{ ios: 'swift' }> {
|
|
|
193
193
|
debug: boolean
|
|
194
194
|
/** System prompt used when loading the model */
|
|
195
195
|
systemPrompt: string
|
|
196
|
+
/** Maximum number of tokens to generate */
|
|
197
|
+
maxTokens: number
|
|
198
|
+
/** Sampling temperature (0 = deterministic, higher = more random) */
|
|
199
|
+
temperature: number
|
|
200
|
+
/** Enable thinking mode for models that support it */
|
|
201
|
+
enableThinking: boolean
|
|
196
202
|
}
|
|
197
203
|
|
|
198
204
|
/**
|