@inferrlm/react-native-mlx 0.2.0-inferrlm.2 → 0.4.0
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 +9 -3
- package/ios/Sources/AudioCaptureManager.swift +110 -0
- package/ios/Sources/HybridLLM.swift +562 -74
- package/ios/Sources/HybridSTT.swift +202 -0
- package/ios/Sources/HybridTTS.swift +145 -0
- package/ios/Sources/JSONHelpers.swift +9 -0
- package/ios/Sources/ModelDownloader.swift +26 -12
- package/ios/Sources/StreamEventEmitter.swift +132 -0
- package/ios/Sources/ThinkingStateMachine.swift +206 -0
- package/nitrogen/generated/ios/MLXReactNative+autolinking.rb +1 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.cpp +76 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Bridge.hpp +338 -1
- package/nitrogen/generated/ios/MLXReactNative-Swift-Cxx-Umbrella.hpp +28 -1
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.mm +17 -1
- package/nitrogen/generated/ios/MLXReactNativeAutolinking.swift +31 -1
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridLLMSpecSwift.hpp +18 -3
- package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridModelManagerSpecSwift.hpp +1 -1
- package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridSTTSpecSwift.hpp +149 -0
- package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridTTSSpecSwift.hpp +128 -0
- 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
- package/nitrogen/generated/ios/swift/Func_void.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_AnyMap_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -1
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +1 -1
- package/nitrogen/generated/ios/swift/GenerationStats.swift +14 -3
- package/nitrogen/generated/ios/swift/HybridLLMSpec.swift +3 -2
- package/nitrogen/generated/ios/swift/HybridLLMSpec_cxx.swift +38 -2
- package/nitrogen/generated/ios/swift/HybridModelManagerSpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridModelManagerSpec_cxx.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridSTTSpec.swift +66 -0
- package/nitrogen/generated/ios/swift/HybridSTTSpec_cxx.swift +286 -0
- package/nitrogen/generated/ios/swift/HybridTTSSpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridTTSSpec_cxx.swift +229 -0
- package/nitrogen/generated/ios/swift/LLMLoadOptions.swift +44 -2
- package/nitrogen/generated/ios/swift/LLMMessage.swift +1 -1
- package/nitrogen/generated/ios/swift/STTLoadOptions.swift +66 -0
- package/nitrogen/generated/ios/swift/TTSGenerateOptions.swift +78 -0
- package/nitrogen/generated/ios/swift/TTSLoadOptions.swift +66 -0
- package/nitrogen/generated/ios/swift/ToolDefinition.swift +113 -0
- package/nitrogen/generated/ios/swift/ToolParameter.swift +69 -0
- package/nitrogen/generated/shared/c++/GenerationStats.hpp +7 -3
- package/nitrogen/generated/shared/c++/HybridLLMSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridLLMSpec.hpp +3 -2
- package/nitrogen/generated/shared/c++/HybridModelManagerSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridModelManagerSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridSTTSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridSTTSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/HybridTTSSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridTTSSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/LLMLoadOptions.hpp +10 -3
- package/nitrogen/generated/shared/c++/LLMMessage.hpp +1 -1
- package/nitrogen/generated/shared/c++/STTLoadOptions.hpp +76 -0
- package/nitrogen/generated/shared/c++/TTSGenerateOptions.hpp +80 -0
- package/nitrogen/generated/shared/c++/TTSLoadOptions.hpp +76 -0
- package/nitrogen/generated/shared/c++/ToolDefinition.hpp +93 -0
- package/nitrogen/generated/shared/c++/ToolParameter.hpp +87 -0
- package/package.json +13 -8
- package/src/index.ts +48 -4
- package/src/llm.ts +90 -5
- package/src/models.ts +347 -0
- package/src/specs/LLM.nitro.ts +111 -7
- package/src/specs/STT.nitro.ts +35 -0
- package/src/specs/TTS.nitro.ts +30 -0
- package/src/stt.ts +67 -0
- package/src/tool-utils.ts +74 -0
- package/src/tts.ts +60 -0
- package/lib/module/index.js +0 -6
- package/lib/module/index.js.map +0 -1
- package/lib/module/llm.js +0 -125
- package/lib/module/llm.js.map +0 -1
- package/lib/module/modelManager.js +0 -79
- package/lib/module/modelManager.js.map +0 -1
- package/lib/module/models.js +0 -41
- package/lib/module/models.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/specs/LLM.nitro.js +0 -4
- package/lib/module/specs/LLM.nitro.js.map +0 -1
- package/lib/module/specs/ModelManager.nitro.js +0 -4
- package/lib/module/specs/ModelManager.nitro.js.map +0 -1
- package/lib/typescript/package.json +0 -1
- package/lib/typescript/src/index.d.ts +0 -6
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/llm.d.ts +0 -87
- package/lib/typescript/src/llm.d.ts.map +0 -1
- package/lib/typescript/src/modelManager.d.ts +0 -53
- package/lib/typescript/src/modelManager.d.ts.map +0 -1
- package/lib/typescript/src/models.d.ts +0 -29
- package/lib/typescript/src/models.d.ts.map +0 -1
- package/lib/typescript/src/specs/LLM.nitro.d.ts +0 -88
- package/lib/typescript/src/specs/LLM.nitro.d.ts.map +0 -1
- package/lib/typescript/src/specs/ModelManager.nitro.d.ts +0 -41
- package/lib/typescript/src/specs/ModelManager.nitro.d.ts.map +0 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
struct ThinkingStateMachine {
|
|
4
|
+
enum Output {
|
|
5
|
+
case token(String)
|
|
6
|
+
case thinkingStart
|
|
7
|
+
case thinkingChunk(String)
|
|
8
|
+
case thinkingEnd(String)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
private enum State {
|
|
12
|
+
case idle
|
|
13
|
+
case bufferingOpenTag(String)
|
|
14
|
+
case inThinking
|
|
15
|
+
case bufferingCloseTag(String)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private var state: State = .idle
|
|
19
|
+
private var thinkingContent: String = ""
|
|
20
|
+
|
|
21
|
+
private let openTag = "<think>"
|
|
22
|
+
private let closeTag = "</think>"
|
|
23
|
+
|
|
24
|
+
mutating func process(token: String) -> [Output] {
|
|
25
|
+
var outputs: [Output] = []
|
|
26
|
+
var remaining = token
|
|
27
|
+
|
|
28
|
+
while !remaining.isEmpty {
|
|
29
|
+
switch state {
|
|
30
|
+
case .idle:
|
|
31
|
+
outputs.append(contentsOf: processIdle(&remaining))
|
|
32
|
+
|
|
33
|
+
case .bufferingOpenTag(let buffer):
|
|
34
|
+
outputs.append(contentsOf: processBufferingOpenTag(buffer: buffer, remaining: &remaining))
|
|
35
|
+
|
|
36
|
+
case .inThinking:
|
|
37
|
+
outputs.append(contentsOf: processInThinking(&remaining))
|
|
38
|
+
|
|
39
|
+
case .bufferingCloseTag(let buffer):
|
|
40
|
+
outputs.append(contentsOf: processBufferingCloseTag(buffer: buffer, remaining: &remaining))
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return outputs
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
mutating func flush() -> [Output] {
|
|
48
|
+
var outputs: [Output] = []
|
|
49
|
+
|
|
50
|
+
switch state {
|
|
51
|
+
case .bufferingOpenTag(let buffer):
|
|
52
|
+
if !buffer.isEmpty {
|
|
53
|
+
outputs.append(.token(buffer))
|
|
54
|
+
}
|
|
55
|
+
case .bufferingCloseTag(let buffer):
|
|
56
|
+
if !buffer.isEmpty {
|
|
57
|
+
outputs.append(.thinkingChunk(buffer))
|
|
58
|
+
}
|
|
59
|
+
outputs.append(.thinkingEnd(thinkingContent + buffer))
|
|
60
|
+
case .inThinking:
|
|
61
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
62
|
+
case .idle:
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
state = .idle
|
|
67
|
+
thinkingContent = ""
|
|
68
|
+
return outputs
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private mutating func processIdle(_ remaining: inout String) -> [Output] {
|
|
72
|
+
var outputs: [Output] = []
|
|
73
|
+
|
|
74
|
+
if let tagRange = remaining.range(of: openTag) {
|
|
75
|
+
let before = String(remaining[..<tagRange.lowerBound])
|
|
76
|
+
if !before.isEmpty {
|
|
77
|
+
outputs.append(.token(before))
|
|
78
|
+
}
|
|
79
|
+
outputs.append(.thinkingStart)
|
|
80
|
+
state = .inThinking
|
|
81
|
+
thinkingContent = ""
|
|
82
|
+
remaining = String(remaining[tagRange.upperBound...])
|
|
83
|
+
} else if let partialMatch = findPartialMatch(remaining, target: openTag) {
|
|
84
|
+
let before = String(remaining[..<partialMatch.range.lowerBound])
|
|
85
|
+
if !before.isEmpty {
|
|
86
|
+
outputs.append(.token(before))
|
|
87
|
+
}
|
|
88
|
+
state = .bufferingOpenTag(partialMatch.matched)
|
|
89
|
+
remaining = ""
|
|
90
|
+
} else {
|
|
91
|
+
outputs.append(.token(remaining))
|
|
92
|
+
remaining = ""
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return outputs
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private mutating func processBufferingOpenTag(buffer: String, remaining: inout String) -> [Output] {
|
|
99
|
+
var outputs: [Output] = []
|
|
100
|
+
let combined = buffer + remaining
|
|
101
|
+
|
|
102
|
+
if let tagRange = combined.range(of: openTag) {
|
|
103
|
+
let before = String(combined[..<tagRange.lowerBound])
|
|
104
|
+
if !before.isEmpty {
|
|
105
|
+
outputs.append(.token(before))
|
|
106
|
+
}
|
|
107
|
+
outputs.append(.thinkingStart)
|
|
108
|
+
state = .inThinking
|
|
109
|
+
thinkingContent = ""
|
|
110
|
+
remaining = String(combined[tagRange.upperBound...])
|
|
111
|
+
} else if openTag.hasPrefix(combined) {
|
|
112
|
+
state = .bufferingOpenTag(combined)
|
|
113
|
+
remaining = ""
|
|
114
|
+
} else if let partialMatch = findPartialMatch(combined, target: openTag) {
|
|
115
|
+
let before = String(combined[..<partialMatch.range.lowerBound])
|
|
116
|
+
if !before.isEmpty {
|
|
117
|
+
outputs.append(.token(before))
|
|
118
|
+
}
|
|
119
|
+
state = .bufferingOpenTag(partialMatch.matched)
|
|
120
|
+
remaining = ""
|
|
121
|
+
} else {
|
|
122
|
+
outputs.append(.token(combined))
|
|
123
|
+
state = .idle
|
|
124
|
+
remaining = ""
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return outputs
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private mutating func processInThinking(_ remaining: inout String) -> [Output] {
|
|
131
|
+
var outputs: [Output] = []
|
|
132
|
+
|
|
133
|
+
if let tagRange = remaining.range(of: closeTag) {
|
|
134
|
+
let before = String(remaining[..<tagRange.lowerBound])
|
|
135
|
+
if !before.isEmpty {
|
|
136
|
+
thinkingContent += before
|
|
137
|
+
outputs.append(.thinkingChunk(before))
|
|
138
|
+
}
|
|
139
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
140
|
+
state = .idle
|
|
141
|
+
thinkingContent = ""
|
|
142
|
+
remaining = String(remaining[tagRange.upperBound...])
|
|
143
|
+
} else if let partialMatch = findPartialMatch(remaining, target: closeTag) {
|
|
144
|
+
let before = String(remaining[..<partialMatch.range.lowerBound])
|
|
145
|
+
if !before.isEmpty {
|
|
146
|
+
thinkingContent += before
|
|
147
|
+
outputs.append(.thinkingChunk(before))
|
|
148
|
+
}
|
|
149
|
+
state = .bufferingCloseTag(partialMatch.matched)
|
|
150
|
+
remaining = ""
|
|
151
|
+
} else {
|
|
152
|
+
thinkingContent += remaining
|
|
153
|
+
outputs.append(.thinkingChunk(remaining))
|
|
154
|
+
remaining = ""
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return outputs
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private mutating func processBufferingCloseTag(buffer: String, remaining: inout String) -> [Output] {
|
|
161
|
+
var outputs: [Output] = []
|
|
162
|
+
let combined = buffer + remaining
|
|
163
|
+
|
|
164
|
+
if let tagRange = combined.range(of: closeTag) {
|
|
165
|
+
let before = String(combined[..<tagRange.lowerBound])
|
|
166
|
+
if !before.isEmpty {
|
|
167
|
+
thinkingContent += before
|
|
168
|
+
outputs.append(.thinkingChunk(before))
|
|
169
|
+
}
|
|
170
|
+
outputs.append(.thinkingEnd(thinkingContent))
|
|
171
|
+
state = .idle
|
|
172
|
+
thinkingContent = ""
|
|
173
|
+
remaining = String(combined[tagRange.upperBound...])
|
|
174
|
+
} else if closeTag.hasPrefix(combined) {
|
|
175
|
+
state = .bufferingCloseTag(combined)
|
|
176
|
+
remaining = ""
|
|
177
|
+
} else if let partialMatch = findPartialMatch(combined, target: closeTag) {
|
|
178
|
+
let before = String(combined[..<partialMatch.range.lowerBound])
|
|
179
|
+
if !before.isEmpty {
|
|
180
|
+
thinkingContent += before
|
|
181
|
+
outputs.append(.thinkingChunk(before))
|
|
182
|
+
}
|
|
183
|
+
state = .bufferingCloseTag(partialMatch.matched)
|
|
184
|
+
remaining = ""
|
|
185
|
+
} else {
|
|
186
|
+
thinkingContent += combined
|
|
187
|
+
outputs.append(.thinkingChunk(combined))
|
|
188
|
+
state = .inThinking
|
|
189
|
+
remaining = ""
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return outputs
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
private func findPartialMatch(_ str: String, target: String) -> (range: Range<String.Index>, matched: String)? {
|
|
196
|
+
for i in stride(from: target.count - 1, through: 1, by: -1) {
|
|
197
|
+
let suffix = String(str.suffix(i))
|
|
198
|
+
let prefix = String(target.prefix(i))
|
|
199
|
+
if suffix == prefix {
|
|
200
|
+
let startIndex = str.index(str.endIndex, offsetBy: -i)
|
|
201
|
+
return (startIndex..<str.endIndex, suffix)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return nil
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# MLXReactNative+autolinking.rb
|
|
3
3
|
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
# https://github.com/mrousavy/nitro
|
|
5
|
-
# Copyright ©
|
|
5
|
+
# Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
#
|
|
7
7
|
|
|
8
8
|
# This is a Ruby script that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// MLXReactNative-Swift-Cxx-Bridge.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#include "MLXReactNative-Swift-Cxx-Bridge.hpp"
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
// Include C++ implementation defined types
|
|
11
11
|
#include "HybridLLMSpecSwift.hpp"
|
|
12
12
|
#include "HybridModelManagerSpecSwift.hpp"
|
|
13
|
+
#include "HybridSTTSpecSwift.hpp"
|
|
14
|
+
#include "HybridTTSSpecSwift.hpp"
|
|
13
15
|
#include "MLXReactNative-Swift-Cxx-Umbrella.hpp"
|
|
14
16
|
#include <NitroModules/NitroDefines.hpp>
|
|
15
17
|
|
|
@@ -39,6 +41,31 @@ namespace margelo::nitro::mlxreactnative::bridge::swift {
|
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
// pragma MARK: std::function<void(const std::shared_ptr<AnyMap>& /* result */)>
|
|
45
|
+
Func_void_std__shared_ptr_AnyMap_ create_Func_void_std__shared_ptr_AnyMap_(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
46
|
+
auto swiftClosure = MLXReactNative::Func_void_std__shared_ptr_AnyMap_::fromUnsafe(swiftClosureWrapper);
|
|
47
|
+
return [swiftClosure = std::move(swiftClosure)](const std::shared_ptr<AnyMap>& result) mutable -> void {
|
|
48
|
+
swiftClosure.call(result);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// pragma MARK: std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::shared_ptr<AnyMap>>>>>(const std::shared_ptr<AnyMap>& /* args */)>
|
|
53
|
+
Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__shared_ptr_AnyMap______std__shared_ptr_AnyMap_ create_Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__shared_ptr_AnyMap______std__shared_ptr_AnyMap_(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
54
|
+
auto swiftClosure = MLXReactNative::Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__shared_ptr_AnyMap______std__shared_ptr_AnyMap_::fromUnsafe(swiftClosureWrapper);
|
|
55
|
+
return [swiftClosure = std::move(swiftClosure)](const std::shared_ptr<AnyMap>& args) mutable -> std::shared_ptr<Promise<std::shared_ptr<Promise<std::shared_ptr<AnyMap>>>>> {
|
|
56
|
+
auto __result = swiftClosure.call(args);
|
|
57
|
+
return __result;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// pragma MARK: std::function<void(const std::shared_ptr<Promise<std::shared_ptr<AnyMap>>>& /* result */)>
|
|
62
|
+
Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___ create_Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
63
|
+
auto swiftClosure = MLXReactNative::Func_void_std__shared_ptr_Promise_std__shared_ptr_AnyMap___::fromUnsafe(swiftClosureWrapper);
|
|
64
|
+
return [swiftClosure = std::move(swiftClosure)](const std::shared_ptr<Promise<std::shared_ptr<AnyMap>>>& result) mutable -> void {
|
|
65
|
+
swiftClosure.call(result);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
42
69
|
// pragma MARK: std::function<void(const std::string& /* result */)>
|
|
43
70
|
Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
44
71
|
auto swiftClosure = MLXReactNative::Func_void_std__string::fromUnsafe(swiftClosureWrapper);
|
|
@@ -47,6 +74,14 @@ namespace margelo::nitro::mlxreactnative::bridge::swift {
|
|
|
47
74
|
};
|
|
48
75
|
}
|
|
49
76
|
|
|
77
|
+
// pragma MARK: std::function<void(const std::string& /* toolName */, const std::string& /* args */)>
|
|
78
|
+
Func_void_std__string_std__string create_Func_void_std__string_std__string(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
79
|
+
auto swiftClosure = MLXReactNative::Func_void_std__string_std__string::fromUnsafe(swiftClosureWrapper);
|
|
80
|
+
return [swiftClosure = std::move(swiftClosure)](const std::string& toolName, const std::string& args) mutable -> void {
|
|
81
|
+
swiftClosure.call(toolName, args);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
50
85
|
// pragma MARK: std::shared_ptr<HybridLLMSpec>
|
|
51
86
|
std::shared_ptr<HybridLLMSpec> create_std__shared_ptr_HybridLLMSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
|
|
52
87
|
MLXReactNative::HybridLLMSpec_cxx swiftPart = MLXReactNative::HybridLLMSpec_cxx::fromUnsafe(swiftUnsafePointer);
|
|
@@ -94,5 +129,45 @@ namespace margelo::nitro::mlxreactnative::bridge::swift {
|
|
|
94
129
|
MLXReactNative::HybridModelManagerSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
|
|
95
130
|
return swiftPart.toUnsafe();
|
|
96
131
|
}
|
|
132
|
+
|
|
133
|
+
// pragma MARK: std::shared_ptr<HybridSTTSpec>
|
|
134
|
+
std::shared_ptr<HybridSTTSpec> create_std__shared_ptr_HybridSTTSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
|
|
135
|
+
MLXReactNative::HybridSTTSpec_cxx swiftPart = MLXReactNative::HybridSTTSpec_cxx::fromUnsafe(swiftUnsafePointer);
|
|
136
|
+
return std::make_shared<margelo::nitro::mlxreactnative::HybridSTTSpecSwift>(swiftPart);
|
|
137
|
+
}
|
|
138
|
+
void* NON_NULL get_std__shared_ptr_HybridSTTSpec_(std__shared_ptr_HybridSTTSpec_ cppType) {
|
|
139
|
+
std::shared_ptr<margelo::nitro::mlxreactnative::HybridSTTSpecSwift> swiftWrapper = std::dynamic_pointer_cast<margelo::nitro::mlxreactnative::HybridSTTSpecSwift>(cppType);
|
|
140
|
+
#ifdef NITRO_DEBUG
|
|
141
|
+
if (swiftWrapper == nullptr) [[unlikely]] {
|
|
142
|
+
throw std::runtime_error("Class \"HybridSTTSpec\" is not implemented in Swift!");
|
|
143
|
+
}
|
|
144
|
+
#endif
|
|
145
|
+
MLXReactNative::HybridSTTSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
|
|
146
|
+
return swiftPart.toUnsafe();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// pragma MARK: std::function<void(const std::shared_ptr<ArrayBuffer>& /* result */)>
|
|
150
|
+
Func_void_std__shared_ptr_ArrayBuffer_ create_Func_void_std__shared_ptr_ArrayBuffer_(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
151
|
+
auto swiftClosure = MLXReactNative::Func_void_std__shared_ptr_ArrayBuffer_::fromUnsafe(swiftClosureWrapper);
|
|
152
|
+
return [swiftClosure = std::move(swiftClosure)](const std::shared_ptr<ArrayBuffer>& result) mutable -> void {
|
|
153
|
+
swiftClosure.call(ArrayBufferHolder(result));
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// pragma MARK: std::shared_ptr<HybridTTSSpec>
|
|
158
|
+
std::shared_ptr<HybridTTSSpec> create_std__shared_ptr_HybridTTSSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
|
|
159
|
+
MLXReactNative::HybridTTSSpec_cxx swiftPart = MLXReactNative::HybridTTSSpec_cxx::fromUnsafe(swiftUnsafePointer);
|
|
160
|
+
return std::make_shared<margelo::nitro::mlxreactnative::HybridTTSSpecSwift>(swiftPart);
|
|
161
|
+
}
|
|
162
|
+
void* NON_NULL get_std__shared_ptr_HybridTTSSpec_(std__shared_ptr_HybridTTSSpec_ cppType) {
|
|
163
|
+
std::shared_ptr<margelo::nitro::mlxreactnative::HybridTTSSpecSwift> swiftWrapper = std::dynamic_pointer_cast<margelo::nitro::mlxreactnative::HybridTTSSpecSwift>(cppType);
|
|
164
|
+
#ifdef NITRO_DEBUG
|
|
165
|
+
if (swiftWrapper == nullptr) [[unlikely]] {
|
|
166
|
+
throw std::runtime_error("Class \"HybridTTSSpec\" is not implemented in Swift!");
|
|
167
|
+
}
|
|
168
|
+
#endif
|
|
169
|
+
MLXReactNative::HybridTTSSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
|
|
170
|
+
return swiftPart.toUnsafe();
|
|
171
|
+
}
|
|
97
172
|
|
|
98
173
|
} // namespace margelo::nitro::mlxreactnative::bridge::swift
|