@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.
@@ -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
- return Promise.async { [self] in
269
- if self.manageHistory {
270
- self.messageHistory.append(LLMMessage(role: "user", content: prompt))
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("Stream complete - \(tokenCount) tokens, \(String(format: "%.1f", tokensPerSecond)) tokens/s")
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
- return Promise.async { [self] in
332
- if self.manageHistory {
333
- self.messageHistory.append(LLMMessage(role: "user", content: prompt))
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 chat = buildChatMessages(prompt: prompt, toolResults: toolResults, depth: depth)
465
- let userInput = UserInput(
466
- chat: chat,
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
- let lmInput = try await container.prepare(input: userInput)
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: 2048, temperature: 0.7)
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 { break }
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
- output += token
492
- emitter.emitToken(token)
493
- onTokenProcessed()
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("Generation info: \(info.generationTokenCount) tokens, \(String(format: "%.1f", info.tokensPerSecond)) tokens/s")
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 chat = buildChatMessages(prompt: prompt, toolResults: toolResults, depth: depth)
620
- let userInput = UserInput(
621
- chat: chat,
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
- let lmInput = try await container.prepare(input: userInput)
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: 2048, temperature: 0.7)
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 { break }
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
- output += text
642
- onToken(text)
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("Generation info: \(info.generationTokenCount) tokens, \(String(format: "%.1f", info.tokensPerSecond)) tokens/s")
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
- log("Message history cleared")
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
@@ -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":[]}
@@ -125,5 +125,8 @@ export declare const LLM: {
125
125
  * @default "You are a helpful assistant."
126
126
  */
127
127
  systemPrompt: string;
128
+ maxTokens: number;
129
+ temperature: number;
130
+ enableThinking: boolean;
128
131
  };
129
132
  //# sourceMappingURL=llm.d.ts.map
@@ -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;CAO3B,CAAA"}
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":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAEtE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAA;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,kBAAkB,CAAA;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,eAAe,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,GACnB,oBAAoB,GACpB,UAAU,GACV,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,sBAAsB,GACtB,sBAAsB,GACtB,mBAAmB,GACnB,kBAAkB,CAAA;AAEtB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3C;AAED;GACG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAA;IAChC,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,GAAI,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;IACzD;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEzC;;;;;;;OAOG;IACH,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,MAAM,CAAC,CAAA;IAElB,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAAA;IAElB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAA;IAEZ;;OAEG;IACH,MAAM,IAAI,IAAI,CAAA;IAEd;;;OAGG;IACH,sBAAsB,IAAI,eAAe,CAAA;IAEzC;;;OAGG;IACH,UAAU,IAAI,UAAU,EAAE,CAAA;IAE1B;;OAEG;IACH,YAAY,IAAI,IAAI,CAAA;IAEpB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA"}
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.1",
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
  }
@@ -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
  /**