@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,74 @@
1
+ import type { AnyMap } from 'react-native-nitro-modules'
2
+ import type { z } from 'zod'
3
+ import type { ToolDefinition, ToolParameter, ToolParameterType } from './specs/LLM.nitro'
4
+
5
+ type ZodObjectSchema = z.ZodObject<z.core.$ZodShape>
6
+ type InferArgs<T extends ZodObjectSchema> = z.infer<T>
7
+
8
+ export interface TypeSafeToolDefinition<T extends ZodObjectSchema> {
9
+ name: string
10
+ description: string
11
+ arguments: T
12
+ handler: (args: InferArgs<T>) => Promise<Record<string, unknown>>
13
+ }
14
+
15
+ function getZodTypeString(zodType: z.ZodType): ToolParameterType {
16
+ const typeName = zodType._zod.def.type
17
+ switch (typeName) {
18
+ case 'string':
19
+ return 'string'
20
+ case 'number':
21
+ case 'int':
22
+ return 'number'
23
+ case 'boolean':
24
+ return 'boolean'
25
+ case 'array':
26
+ return 'array'
27
+ case 'object':
28
+ return 'object'
29
+ case 'optional':
30
+ return getZodTypeString((zodType as z.ZodOptional<z.ZodType>)._zod.def.innerType)
31
+ case 'default':
32
+ return getZodTypeString((zodType as z.ZodDefault<z.ZodType>)._zod.def.innerType)
33
+ default:
34
+ return 'string'
35
+ }
36
+ }
37
+
38
+ function isZodOptional(zodType: z.ZodType): boolean {
39
+ const typeName = zodType._zod.def.type
40
+ return typeName === 'optional' || typeName === 'default'
41
+ }
42
+
43
+ function zodSchemaToParameters(schema: ZodObjectSchema): ToolParameter[] {
44
+ const shape = schema._zod.def.shape
45
+ const parameters: ToolParameter[] = []
46
+
47
+ for (const [key, zodType] of Object.entries(shape)) {
48
+ const zType = zodType as z.ZodType
49
+ parameters.push({
50
+ name: key,
51
+ type: getZodTypeString(zType),
52
+ description: zType.description ?? '',
53
+ required: !isZodOptional(zType),
54
+ })
55
+ }
56
+
57
+ return parameters
58
+ }
59
+
60
+ export function createTool<T extends ZodObjectSchema>(
61
+ definition: TypeSafeToolDefinition<T>,
62
+ ): ToolDefinition {
63
+ return {
64
+ name: definition.name,
65
+ description: definition.description,
66
+ parameters: zodSchemaToParameters(definition.arguments),
67
+ handler: async (args: AnyMap) => {
68
+ const argsObj = args as unknown as Record<string, unknown>
69
+ const parsedArgs = definition.arguments.parse(argsObj)
70
+ const result = await definition.handler(parsedArgs)
71
+ return result as unknown as AnyMap
72
+ },
73
+ }
74
+ }
package/src/tts.ts ADDED
@@ -0,0 +1,60 @@
1
+ import { NitroModules } from 'react-native-nitro-modules'
2
+ import type {
3
+ TTS as TTSSpec,
4
+ TTSLoadOptions,
5
+ TTSGenerateOptions,
6
+ } from './specs/TTS.nitro'
7
+
8
+ let instance: TTSSpec | null = null
9
+
10
+ function getInstance(): TTSSpec {
11
+ if (!instance) {
12
+ instance = NitroModules.createHybridObject<TTSSpec>('TTS')
13
+ }
14
+ return instance
15
+ }
16
+
17
+ export const TTS = {
18
+ load(modelId: string, options?: TTSLoadOptions): Promise<void> {
19
+ return getInstance().load(modelId, options)
20
+ },
21
+
22
+ generate(
23
+ text: string,
24
+ options?: TTSGenerateOptions
25
+ ): Promise<ArrayBuffer> {
26
+ return getInstance().generate(text, options)
27
+ },
28
+
29
+ stream(
30
+ text: string,
31
+ onAudioChunk: (audio: ArrayBuffer) => void,
32
+ options?: TTSGenerateOptions
33
+ ): Promise<void> {
34
+ return getInstance().stream(text, onAudioChunk, options)
35
+ },
36
+
37
+ stop(): void {
38
+ getInstance().stop()
39
+ },
40
+
41
+ unload(): void {
42
+ getInstance().unload()
43
+ },
44
+
45
+ get isLoaded(): boolean {
46
+ return getInstance().isLoaded
47
+ },
48
+
49
+ get isGenerating(): boolean {
50
+ return getInstance().isGenerating
51
+ },
52
+
53
+ get modelId(): string {
54
+ return getInstance().modelId
55
+ },
56
+
57
+ get sampleRate(): number {
58
+ return getInstance().sampleRate
59
+ },
60
+ }