@dr33m/react-native-litert-lm 0.5.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.
Files changed (168) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +627 -0
  3. package/android/CMakeLists.txt +32 -0
  4. package/android/build.gradle +104 -0
  5. package/android/src/main/AndroidManifest.xml +19 -0
  6. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/HybridLiteRTLM.kt +888 -0
  7. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/HybridModelStore.kt +189 -0
  8. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/LiteRTLMRegistry.kt +32 -0
  9. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/MultimodalPartFactories.kt +15 -0
  10. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/StreamingCallbackListener.kt +89 -0
  11. package/android/src/main/java/dev/litert/litertlm/LiteRTLMInitProvider.kt +57 -0
  12. package/android/src/main/java/dev/litert/litertlm/LiteRTLMPackage.kt +43 -0
  13. package/android/src/test/java/com/margelo/nitro/core/Promise.kt +46 -0
  14. package/android/src/test/java/com/margelo/nitro/dev/litert/litertlm/HybridLiteRTLMTest.kt +122 -0
  15. package/app.plugin.js +58 -0
  16. package/cpp/cpp-adapter.cpp +21 -0
  17. package/cpp/include/README.md +32 -0
  18. package/cpp/include/litert_lm_engine.h +516 -0
  19. package/cpp/include/stb_image.h +7988 -0
  20. package/ios/HybridLiteRTLM+Execute.swift +287 -0
  21. package/ios/HybridLiteRTLM+Streaming.swift +153 -0
  22. package/ios/HybridLiteRTLM.swift +541 -0
  23. package/ios/HybridModelStore.swift +206 -0
  24. package/ios/MultimodalPart+Factories.swift +22 -0
  25. package/ios/Tests/HybridLiteRTLMTests.swift +187 -0
  26. package/lib/__mocks__/react-native-nitro-modules.d.ts +81 -0
  27. package/lib/__mocks__/react-native-nitro-modules.js +98 -0
  28. package/lib/__tests__/hooks.test.d.ts +1 -0
  29. package/lib/__tests__/hooks.test.js +175 -0
  30. package/lib/__tests__/inferenceRouting.test.d.ts +1 -0
  31. package/lib/__tests__/inferenceRouting.test.js +28 -0
  32. package/lib/__tests__/memoryTracker.test.d.ts +1 -0
  33. package/lib/__tests__/memoryTracker.test.js +74 -0
  34. package/lib/__tests__/modelFactory.test.d.ts +1 -0
  35. package/lib/__tests__/modelFactory.test.js +107 -0
  36. package/lib/__tests__/modelPath.test.d.ts +1 -0
  37. package/lib/__tests__/modelPath.test.js +12 -0
  38. package/lib/__tests__/modelRegistry.test.d.ts +1 -0
  39. package/lib/__tests__/modelRegistry.test.js +61 -0
  40. package/lib/hooks.d.ts +46 -0
  41. package/lib/hooks.js +159 -0
  42. package/lib/index.d.ts +142 -0
  43. package/lib/index.js +184 -0
  44. package/lib/inferenceRouting.d.ts +18 -0
  45. package/lib/inferenceRouting.js +63 -0
  46. package/lib/memoryTracker.d.ts +128 -0
  47. package/lib/memoryTracker.js +155 -0
  48. package/lib/modelFactory.d.ts +24 -0
  49. package/lib/modelFactory.js +128 -0
  50. package/lib/modelPath.d.ts +8 -0
  51. package/lib/modelPath.js +18 -0
  52. package/lib/modelRegistry.d.ts +55 -0
  53. package/lib/modelRegistry.js +82 -0
  54. package/lib/specs/LiteRTLM.nitro.d.ts +380 -0
  55. package/lib/specs/LiteRTLM.nitro.js +2 -0
  56. package/nitrogen/generated/.gitattributes +1 -0
  57. package/nitrogen/generated/android/LiteRTLM+autolinking.cmake +83 -0
  58. package/nitrogen/generated/android/LiteRTLM+autolinking.gradle +27 -0
  59. package/nitrogen/generated/android/LiteRTLMOnLoad.cpp +74 -0
  60. package/nitrogen/generated/android/LiteRTLMOnLoad.hpp +34 -0
  61. package/nitrogen/generated/android/c++/JBackend.hpp +61 -0
  62. package/nitrogen/generated/android/c++/JExecuteResult.hpp +86 -0
  63. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
  64. package/nitrogen/generated/android/c++/JFunc_void_std__string_bool.hpp +76 -0
  65. package/nitrogen/generated/android/c++/JGenerationStats.hpp +77 -0
  66. package/nitrogen/generated/android/c++/JHybridLiteRTLMSpec.cpp +371 -0
  67. package/nitrogen/generated/android/c++/JHybridLiteRTLMSpec.hpp +83 -0
  68. package/nitrogen/generated/android/c++/JHybridModelStoreSpec.cpp +101 -0
  69. package/nitrogen/generated/android/c++/JHybridModelStoreSpec.hpp +67 -0
  70. package/nitrogen/generated/android/c++/JLLMConfig.hpp +125 -0
  71. package/nitrogen/generated/android/c++/JMemoryUsage.hpp +69 -0
  72. package/nitrogen/generated/android/c++/JMessage.hpp +63 -0
  73. package/nitrogen/generated/android/c++/JModelFile.hpp +69 -0
  74. package/nitrogen/generated/android/c++/JMultimodalPart.hpp +78 -0
  75. package/nitrogen/generated/android/c++/JPartType.hpp +61 -0
  76. package/nitrogen/generated/android/c++/JRole.hpp +61 -0
  77. package/nitrogen/generated/android/c++/JToolCall.hpp +61 -0
  78. package/nitrogen/generated/android/c++/JToolDefinition.hpp +65 -0
  79. package/nitrogen/generated/android/c++/JToolResponse.hpp +61 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Backend.kt +24 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/ExecuteResult.kt +61 -0
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Func_void_double.kt +80 -0
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Func_void_std__string_bool.kt +80 -0
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/GenerationStats.kt +76 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/HybridLiteRTLMSpec.kt +165 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/HybridModelStoreSpec.kt +76 -0
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/LLMConfig.kt +106 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/LiteRTLMOnLoad.kt +35 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/MemoryUsage.kt +66 -0
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Message.kt +56 -0
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/ModelFile.kt +66 -0
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/MultimodalPart.kt +71 -0
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/PartType.kt +24 -0
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Role.kt +24 -0
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/ToolCall.kt +56 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/ToolDefinition.kt +61 -0
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/ToolResponse.kt +56 -0
  98. package/nitrogen/generated/ios/LiteRTLM+autolinking.rb +62 -0
  99. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Bridge.cpp +98 -0
  100. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Bridge.hpp +585 -0
  101. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Umbrella.hpp +93 -0
  102. package/nitrogen/generated/ios/LiteRTLMAutolinking.mm +41 -0
  103. package/nitrogen/generated/ios/LiteRTLMAutolinking.swift +38 -0
  104. package/nitrogen/generated/ios/c++/HybridLiteRTLMSpecSwift.cpp +11 -0
  105. package/nitrogen/generated/ios/c++/HybridLiteRTLMSpecSwift.hpp +279 -0
  106. package/nitrogen/generated/ios/c++/HybridModelStoreSpecSwift.cpp +11 -0
  107. package/nitrogen/generated/ios/c++/HybridModelStoreSpecSwift.hpp +117 -0
  108. package/nitrogen/generated/ios/swift/Backend.swift +44 -0
  109. package/nitrogen/generated/ios/swift/ExecuteResult.swift +45 -0
  110. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  111. package/nitrogen/generated/ios/swift/Func_void_ExecuteResult.swift +46 -0
  112. package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
  113. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  114. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  115. package/nitrogen/generated/ios/swift/Func_void_std__string_bool.swift +46 -0
  116. package/nitrogen/generated/ios/swift/GenerationStats.swift +54 -0
  117. package/nitrogen/generated/ios/swift/HybridLiteRTLMSpec.swift +75 -0
  118. package/nitrogen/generated/ios/swift/HybridLiteRTLMSpec_cxx.swift +516 -0
  119. package/nitrogen/generated/ios/swift/HybridModelStoreSpec.swift +59 -0
  120. package/nitrogen/generated/ios/swift/HybridModelStoreSpec_cxx.swift +203 -0
  121. package/nitrogen/generated/ios/swift/LLMConfig.swift +239 -0
  122. package/nitrogen/generated/ios/swift/MemoryUsage.swift +44 -0
  123. package/nitrogen/generated/ios/swift/Message.swift +34 -0
  124. package/nitrogen/generated/ios/swift/ModelFile.swift +44 -0
  125. package/nitrogen/generated/ios/swift/MultimodalPart.swift +101 -0
  126. package/nitrogen/generated/ios/swift/PartType.swift +44 -0
  127. package/nitrogen/generated/ios/swift/Role.swift +44 -0
  128. package/nitrogen/generated/ios/swift/ToolCall.swift +34 -0
  129. package/nitrogen/generated/ios/swift/ToolDefinition.swift +39 -0
  130. package/nitrogen/generated/ios/swift/ToolResponse.swift +34 -0
  131. package/nitrogen/generated/shared/c++/Backend.hpp +80 -0
  132. package/nitrogen/generated/shared/c++/ExecuteResult.hpp +94 -0
  133. package/nitrogen/generated/shared/c++/GenerationStats.hpp +103 -0
  134. package/nitrogen/generated/shared/c++/HybridLiteRTLMSpec.cpp +41 -0
  135. package/nitrogen/generated/shared/c++/HybridLiteRTLMSpec.hpp +109 -0
  136. package/nitrogen/generated/shared/c++/HybridModelStoreSpec.cpp +25 -0
  137. package/nitrogen/generated/shared/c++/HybridModelStoreSpec.hpp +71 -0
  138. package/nitrogen/generated/shared/c++/LLMConfig.hpp +134 -0
  139. package/nitrogen/generated/shared/c++/MemoryUsage.hpp +95 -0
  140. package/nitrogen/generated/shared/c++/Message.hpp +89 -0
  141. package/nitrogen/generated/shared/c++/ModelFile.hpp +95 -0
  142. package/nitrogen/generated/shared/c++/MultimodalPart.hpp +103 -0
  143. package/nitrogen/generated/shared/c++/PartType.hpp +80 -0
  144. package/nitrogen/generated/shared/c++/Role.hpp +80 -0
  145. package/nitrogen/generated/shared/c++/ToolCall.hpp +87 -0
  146. package/nitrogen/generated/shared/c++/ToolDefinition.hpp +91 -0
  147. package/nitrogen/generated/shared/c++/ToolResponse.hpp +87 -0
  148. package/package.json +115 -0
  149. package/react-native-litert-lm.podspec +62 -0
  150. package/react-native.config.js +16 -0
  151. package/scripts/download-ios-frameworks.sh +39 -0
  152. package/scripts/framework-source.js +46 -0
  153. package/scripts/postinstall.js +145 -0
  154. package/src/__mocks__/react-native-nitro-modules.ts +132 -0
  155. package/src/__tests__/hooks.test.ts +216 -0
  156. package/src/__tests__/inferenceRouting.test.ts +36 -0
  157. package/src/__tests__/memoryTracker.test.ts +87 -0
  158. package/src/__tests__/modelFactory.test.ts +153 -0
  159. package/src/__tests__/modelPath.test.ts +14 -0
  160. package/src/__tests__/modelRegistry.test.ts +73 -0
  161. package/src/hooks.ts +234 -0
  162. package/src/index.ts +214 -0
  163. package/src/inferenceRouting.ts +80 -0
  164. package/src/memoryTracker.ts +268 -0
  165. package/src/modelFactory.ts +163 -0
  166. package/src/modelPath.ts +16 -0
  167. package/src/modelRegistry.ts +104 -0
  168. package/src/specs/LiteRTLM.nitro.ts +451 -0
@@ -0,0 +1,41 @@
1
+ ///
2
+ /// LiteRTLMAutolinking.mm
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <NitroModules/HybridObjectRegistry.hpp>
10
+ #import "LiteRTLM-Swift-Cxx-Umbrella.hpp"
11
+ #import <type_traits>
12
+
13
+ #include "HybridLiteRTLMSpecSwift.hpp"
14
+ #include "HybridModelStoreSpecSwift.hpp"
15
+
16
+ @interface LiteRTLMAutolinking : NSObject
17
+ @end
18
+
19
+ @implementation LiteRTLMAutolinking
20
+
21
+ + (void) load {
22
+ using namespace margelo::nitro;
23
+ using namespace margelo::nitro::litertlm;
24
+
25
+ HybridObjectRegistry::registerHybridObjectConstructor(
26
+ "LiteRTLM",
27
+ []() -> std::shared_ptr<HybridObject> {
28
+ std::shared_ptr<HybridLiteRTLMSpec> hybridObject = LiteRTLM::LiteRTLMAutolinking::createLiteRTLM();
29
+ return hybridObject;
30
+ }
31
+ );
32
+ HybridObjectRegistry::registerHybridObjectConstructor(
33
+ "ModelStore",
34
+ []() -> std::shared_ptr<HybridObject> {
35
+ std::shared_ptr<HybridModelStoreSpec> hybridObject = LiteRTLM::LiteRTLMAutolinking::createModelStore();
36
+ return hybridObject;
37
+ }
38
+ );
39
+ }
40
+
41
+ @end
@@ -0,0 +1,38 @@
1
+ ///
2
+ /// LiteRTLMAutolinking.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ // TODO: Use empty enums once Swift supports exporting them as namespaces
11
+ // See: https://github.com/swiftlang/swift/pull/83616
12
+ public final class LiteRTLMAutolinking {
13
+ public typealias bridge = margelo.nitro.litertlm.bridge.swift
14
+
15
+ public static func createLiteRTLM() -> bridge.std__shared_ptr_HybridLiteRTLMSpec_ {
16
+ let hybridObject = HybridLiteRTLM()
17
+ return { () -> bridge.std__shared_ptr_HybridLiteRTLMSpec_ in
18
+ let __cxxWrapped = hybridObject.getCxxWrapper()
19
+ return __cxxWrapped.getCxxPart()
20
+ }()
21
+ }
22
+
23
+ public static func isLiteRTLMRecyclable() -> Bool {
24
+ return HybridLiteRTLM.self is any RecyclableView.Type
25
+ }
26
+
27
+ public static func createModelStore() -> bridge.std__shared_ptr_HybridModelStoreSpec_ {
28
+ let hybridObject = HybridModelStore()
29
+ return { () -> bridge.std__shared_ptr_HybridModelStoreSpec_ in
30
+ let __cxxWrapped = hybridObject.getCxxWrapper()
31
+ return __cxxWrapped.getCxxPart()
32
+ }()
33
+ }
34
+
35
+ public static func isModelStoreRecyclable() -> Bool {
36
+ return HybridModelStore.self is any RecyclableView.Type
37
+ }
38
+ }
@@ -0,0 +1,11 @@
1
+ ///
2
+ /// HybridLiteRTLMSpecSwift.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridLiteRTLMSpecSwift.hpp"
9
+
10
+ namespace margelo::nitro::litertlm {
11
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,279 @@
1
+ ///
2
+ /// HybridLiteRTLMSpecSwift.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include "HybridLiteRTLMSpec.hpp"
11
+
12
+ // Forward declaration of `HybridLiteRTLMSpec_cxx` to properly resolve imports.
13
+ namespace LiteRTLM { class HybridLiteRTLMSpec_cxx; }
14
+
15
+ // Forward declaration of `LLMConfig` to properly resolve imports.
16
+ namespace margelo::nitro::litertlm { struct LLMConfig; }
17
+ // Forward declaration of `Backend` to properly resolve imports.
18
+ namespace margelo::nitro::litertlm { enum class Backend; }
19
+ // Forward declaration of `ToolDefinition` to properly resolve imports.
20
+ namespace margelo::nitro::litertlm { struct ToolDefinition; }
21
+ // Forward declaration of `ExecuteResult` to properly resolve imports.
22
+ namespace margelo::nitro::litertlm { struct ExecuteResult; }
23
+ // Forward declaration of `ToolCall` to properly resolve imports.
24
+ namespace margelo::nitro::litertlm { struct ToolCall; }
25
+ // Forward declaration of `MultimodalPart` to properly resolve imports.
26
+ namespace margelo::nitro::litertlm { struct MultimodalPart; }
27
+ // Forward declaration of `PartType` to properly resolve imports.
28
+ namespace margelo::nitro::litertlm { enum class PartType; }
29
+ // Forward declaration of `ArrayBufferHolder` to properly resolve imports.
30
+ namespace NitroModules { class ArrayBufferHolder; }
31
+ // Forward declaration of `Message` to properly resolve imports.
32
+ namespace margelo::nitro::litertlm { struct Message; }
33
+ // Forward declaration of `Role` to properly resolve imports.
34
+ namespace margelo::nitro::litertlm { enum class Role; }
35
+ // Forward declaration of `GenerationStats` to properly resolve imports.
36
+ namespace margelo::nitro::litertlm { struct GenerationStats; }
37
+ // Forward declaration of `MemoryUsage` to properly resolve imports.
38
+ namespace margelo::nitro::litertlm { struct MemoryUsage; }
39
+ // Forward declaration of `ToolResponse` to properly resolve imports.
40
+ namespace margelo::nitro::litertlm { struct ToolResponse; }
41
+
42
+ #include <NitroModules/Promise.hpp>
43
+ #include <string>
44
+ #include "LLMConfig.hpp"
45
+ #include <optional>
46
+ #include "Backend.hpp"
47
+ #include "ToolDefinition.hpp"
48
+ #include <vector>
49
+ #include "ExecuteResult.hpp"
50
+ #include "ToolCall.hpp"
51
+ #include <functional>
52
+ #include "MultimodalPart.hpp"
53
+ #include "PartType.hpp"
54
+ #include <NitroModules/ArrayBuffer.hpp>
55
+ #include <NitroModules/ArrayBufferHolder.hpp>
56
+ #include "Message.hpp"
57
+ #include "Role.hpp"
58
+ #include "GenerationStats.hpp"
59
+ #include "MemoryUsage.hpp"
60
+ #include "ToolResponse.hpp"
61
+
62
+ #include "LiteRTLM-Swift-Cxx-Umbrella.hpp"
63
+
64
+ namespace margelo::nitro::litertlm {
65
+
66
+ /**
67
+ * The C++ part of HybridLiteRTLMSpec_cxx.swift.
68
+ *
69
+ * HybridLiteRTLMSpecSwift (C++) accesses HybridLiteRTLMSpec_cxx (Swift), and might
70
+ * contain some additional bridging code for C++ <> Swift interop.
71
+ *
72
+ * Since this obviously introduces an overhead, I hope at some point in
73
+ * the future, HybridLiteRTLMSpec_cxx can directly inherit from the C++ class HybridLiteRTLMSpec
74
+ * to simplify the whole structure and memory management.
75
+ */
76
+ class HybridLiteRTLMSpecSwift: public virtual HybridLiteRTLMSpec {
77
+ public:
78
+ // Constructor from a Swift instance
79
+ explicit HybridLiteRTLMSpecSwift(const LiteRTLM::HybridLiteRTLMSpec_cxx& swiftPart):
80
+ HybridObject(HybridLiteRTLMSpec::TAG),
81
+ _swiftPart(swiftPart) { }
82
+
83
+ public:
84
+ // Get the Swift part
85
+ inline LiteRTLM::HybridLiteRTLMSpec_cxx& getSwiftPart() noexcept {
86
+ return _swiftPart;
87
+ }
88
+
89
+ public:
90
+ inline size_t getExternalMemorySize() noexcept override {
91
+ return _swiftPart.getMemorySize();
92
+ }
93
+ bool equals(const std::shared_ptr<HybridObject>& other) override {
94
+ if (auto otherCast = std::dynamic_pointer_cast<HybridLiteRTLMSpecSwift>(other)) {
95
+ return _swiftPart.equals(otherCast->_swiftPart);
96
+ }
97
+ return false;
98
+ }
99
+ void dispose() noexcept override {
100
+ _swiftPart.dispose();
101
+ }
102
+ std::string toString() override {
103
+ return _swiftPart.toString();
104
+ }
105
+
106
+ public:
107
+ // Properties
108
+
109
+
110
+ public:
111
+ // Methods
112
+ inline std::shared_ptr<Promise<void>> loadModel(const std::string& modelPath, const std::optional<LLMConfig>& config) override {
113
+ auto __result = _swiftPart.loadModel(modelPath, config);
114
+ if (__result.hasError()) [[unlikely]] {
115
+ std::rethrow_exception(__result.error());
116
+ }
117
+ auto __value = std::move(__result.value());
118
+ return __value;
119
+ }
120
+ inline std::shared_ptr<Promise<ExecuteResult>> sendMessage(const std::string& message) override {
121
+ auto __result = _swiftPart.sendMessage(message);
122
+ if (__result.hasError()) [[unlikely]] {
123
+ std::rethrow_exception(__result.error());
124
+ }
125
+ auto __value = std::move(__result.value());
126
+ return __value;
127
+ }
128
+ inline std::shared_ptr<Promise<ExecuteResult>> sendMessageWithImage(const std::string& message, const std::string& imagePath) override {
129
+ auto __result = _swiftPart.sendMessageWithImage(message, imagePath);
130
+ if (__result.hasError()) [[unlikely]] {
131
+ std::rethrow_exception(__result.error());
132
+ }
133
+ auto __value = std::move(__result.value());
134
+ return __value;
135
+ }
136
+ inline std::shared_ptr<Promise<void>> sendMessageWithImageAsync(const std::string& message, const std::string& imagePath, const std::function<void(const std::string& /* token */, bool /* done */)>& onToken) override {
137
+ auto __result = _swiftPart.sendMessageWithImageAsync(message, imagePath, onToken);
138
+ if (__result.hasError()) [[unlikely]] {
139
+ std::rethrow_exception(__result.error());
140
+ }
141
+ auto __value = std::move(__result.value());
142
+ return __value;
143
+ }
144
+ inline std::shared_ptr<Promise<std::string>> downloadModel(const std::string& url, const std::string& fileName, const std::optional<std::function<void(double /* progress */)>>& onProgress) override {
145
+ auto __result = _swiftPart.downloadModel(url, fileName, onProgress);
146
+ if (__result.hasError()) [[unlikely]] {
147
+ std::rethrow_exception(__result.error());
148
+ }
149
+ auto __value = std::move(__result.value());
150
+ return __value;
151
+ }
152
+ inline std::shared_ptr<Promise<void>> deleteModel(const std::string& fileName) override {
153
+ auto __result = _swiftPart.deleteModel(fileName);
154
+ if (__result.hasError()) [[unlikely]] {
155
+ std::rethrow_exception(__result.error());
156
+ }
157
+ auto __value = std::move(__result.value());
158
+ return __value;
159
+ }
160
+ inline std::shared_ptr<Promise<ExecuteResult>> sendMessageWithAudio(const std::string& message, const std::string& audioPath) override {
161
+ auto __result = _swiftPart.sendMessageWithAudio(message, audioPath);
162
+ if (__result.hasError()) [[unlikely]] {
163
+ std::rethrow_exception(__result.error());
164
+ }
165
+ auto __value = std::move(__result.value());
166
+ return __value;
167
+ }
168
+ inline std::shared_ptr<Promise<void>> sendMessageWithAudioAsync(const std::string& message, const std::string& audioPath, const std::function<void(const std::string& /* token */, bool /* done */)>& onToken) override {
169
+ auto __result = _swiftPart.sendMessageWithAudioAsync(message, audioPath, onToken);
170
+ if (__result.hasError()) [[unlikely]] {
171
+ std::rethrow_exception(__result.error());
172
+ }
173
+ auto __value = std::move(__result.value());
174
+ return __value;
175
+ }
176
+ inline std::shared_ptr<Promise<ExecuteResult>> sendMultimodalMessage(const std::vector<MultimodalPart>& parts) override {
177
+ auto __result = _swiftPart.sendMultimodalMessage(parts);
178
+ if (__result.hasError()) [[unlikely]] {
179
+ std::rethrow_exception(__result.error());
180
+ }
181
+ auto __value = std::move(__result.value());
182
+ return __value;
183
+ }
184
+ inline std::shared_ptr<Promise<void>> sendMessageAsync(const std::string& message, const std::function<void(const std::string& /* token */, bool /* done */)>& onToken) override {
185
+ auto __result = _swiftPart.sendMessageAsync(message, onToken);
186
+ if (__result.hasError()) [[unlikely]] {
187
+ std::rethrow_exception(__result.error());
188
+ }
189
+ auto __value = std::move(__result.value());
190
+ return __value;
191
+ }
192
+ inline std::vector<Message> getHistory() override {
193
+ auto __result = _swiftPart.getHistory();
194
+ if (__result.hasError()) [[unlikely]] {
195
+ std::rethrow_exception(__result.error());
196
+ }
197
+ auto __value = std::move(__result.value());
198
+ return __value;
199
+ }
200
+ inline void resetConversation() override {
201
+ auto __result = _swiftPart.resetConversation();
202
+ if (__result.hasError()) [[unlikely]] {
203
+ std::rethrow_exception(__result.error());
204
+ }
205
+ }
206
+ inline bool isReady() override {
207
+ auto __result = _swiftPart.isReady();
208
+ if (__result.hasError()) [[unlikely]] {
209
+ std::rethrow_exception(__result.error());
210
+ }
211
+ auto __value = std::move(__result.value());
212
+ return __value;
213
+ }
214
+ inline GenerationStats getStats() override {
215
+ auto __result = _swiftPart.getStats();
216
+ if (__result.hasError()) [[unlikely]] {
217
+ std::rethrow_exception(__result.error());
218
+ }
219
+ auto __value = std::move(__result.value());
220
+ return __value;
221
+ }
222
+ inline double countTokens(const std::string& text) override {
223
+ auto __result = _swiftPart.countTokens(text);
224
+ if (__result.hasError()) [[unlikely]] {
225
+ std::rethrow_exception(__result.error());
226
+ }
227
+ auto __value = std::move(__result.value());
228
+ return __value;
229
+ }
230
+ inline MemoryUsage getMemoryUsage() override {
231
+ auto __result = _swiftPart.getMemoryUsage();
232
+ if (__result.hasError()) [[unlikely]] {
233
+ std::rethrow_exception(__result.error());
234
+ }
235
+ auto __value = std::move(__result.value());
236
+ return __value;
237
+ }
238
+ inline std::shared_ptr<Promise<ExecuteResult>> execute(const std::vector<MultimodalPart>& parts, const std::optional<std::function<void(const std::string& /* token */, bool /* done */)>>& onToken) override {
239
+ auto __result = _swiftPart.execute(parts, onToken);
240
+ if (__result.hasError()) [[unlikely]] {
241
+ std::rethrow_exception(__result.error());
242
+ }
243
+ auto __value = std::move(__result.value());
244
+ return __value;
245
+ }
246
+ inline std::shared_ptr<Promise<ExecuteResult>> sendToolResponse(const std::vector<ToolResponse>& responses, const std::optional<std::function<void(const std::string& /* token */, bool /* done */)>>& onToken) override {
247
+ auto __result = _swiftPart.sendToolResponse(responses, onToken);
248
+ if (__result.hasError()) [[unlikely]] {
249
+ std::rethrow_exception(__result.error());
250
+ }
251
+ auto __value = std::move(__result.value());
252
+ return __value;
253
+ }
254
+ inline Backend getActiveBackend() override {
255
+ auto __result = _swiftPart.getActiveBackend();
256
+ if (__result.hasError()) [[unlikely]] {
257
+ std::rethrow_exception(__result.error());
258
+ }
259
+ auto __value = std::move(__result.value());
260
+ return __value;
261
+ }
262
+ inline void stopGeneration() override {
263
+ auto __result = _swiftPart.stopGeneration();
264
+ if (__result.hasError()) [[unlikely]] {
265
+ std::rethrow_exception(__result.error());
266
+ }
267
+ }
268
+ inline void close() override {
269
+ auto __result = _swiftPart.close();
270
+ if (__result.hasError()) [[unlikely]] {
271
+ std::rethrow_exception(__result.error());
272
+ }
273
+ }
274
+
275
+ private:
276
+ LiteRTLM::HybridLiteRTLMSpec_cxx _swiftPart;
277
+ };
278
+
279
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,11 @@
1
+ ///
2
+ /// HybridModelStoreSpecSwift.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridModelStoreSpecSwift.hpp"
9
+
10
+ namespace margelo::nitro::litertlm {
11
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,117 @@
1
+ ///
2
+ /// HybridModelStoreSpecSwift.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include "HybridModelStoreSpec.hpp"
11
+
12
+ // Forward declaration of `HybridModelStoreSpec_cxx` to properly resolve imports.
13
+ namespace LiteRTLM { class HybridModelStoreSpec_cxx; }
14
+
15
+ // Forward declaration of `ModelFile` to properly resolve imports.
16
+ namespace margelo::nitro::litertlm { struct ModelFile; }
17
+
18
+ #include <string>
19
+ #include "ModelFile.hpp"
20
+ #include <vector>
21
+ #include <NitroModules/Promise.hpp>
22
+ #include <functional>
23
+
24
+ #include "LiteRTLM-Swift-Cxx-Umbrella.hpp"
25
+
26
+ namespace margelo::nitro::litertlm {
27
+
28
+ /**
29
+ * The C++ part of HybridModelStoreSpec_cxx.swift.
30
+ *
31
+ * HybridModelStoreSpecSwift (C++) accesses HybridModelStoreSpec_cxx (Swift), and might
32
+ * contain some additional bridging code for C++ <> Swift interop.
33
+ *
34
+ * Since this obviously introduces an overhead, I hope at some point in
35
+ * the future, HybridModelStoreSpec_cxx can directly inherit from the C++ class HybridModelStoreSpec
36
+ * to simplify the whole structure and memory management.
37
+ */
38
+ class HybridModelStoreSpecSwift: public virtual HybridModelStoreSpec {
39
+ public:
40
+ // Constructor from a Swift instance
41
+ explicit HybridModelStoreSpecSwift(const LiteRTLM::HybridModelStoreSpec_cxx& swiftPart):
42
+ HybridObject(HybridModelStoreSpec::TAG),
43
+ _swiftPart(swiftPart) { }
44
+
45
+ public:
46
+ // Get the Swift part
47
+ inline LiteRTLM::HybridModelStoreSpec_cxx& getSwiftPart() noexcept {
48
+ return _swiftPart;
49
+ }
50
+
51
+ public:
52
+ inline size_t getExternalMemorySize() noexcept override {
53
+ return _swiftPart.getMemorySize();
54
+ }
55
+ bool equals(const std::shared_ptr<HybridObject>& other) override {
56
+ if (auto otherCast = std::dynamic_pointer_cast<HybridModelStoreSpecSwift>(other)) {
57
+ return _swiftPart.equals(otherCast->_swiftPart);
58
+ }
59
+ return false;
60
+ }
61
+ void dispose() noexcept override {
62
+ _swiftPart.dispose();
63
+ }
64
+ std::string toString() override {
65
+ return _swiftPart.toString();
66
+ }
67
+
68
+ public:
69
+ // Properties
70
+
71
+
72
+ public:
73
+ // Methods
74
+ inline bool isCached(const std::string& fileName) override {
75
+ auto __result = _swiftPart.isCached(fileName);
76
+ if (__result.hasError()) [[unlikely]] {
77
+ std::rethrow_exception(__result.error());
78
+ }
79
+ auto __value = std::move(__result.value());
80
+ return __value;
81
+ }
82
+ inline std::string getFilePath(const std::string& fileName) override {
83
+ auto __result = _swiftPart.getFilePath(fileName);
84
+ if (__result.hasError()) [[unlikely]] {
85
+ std::rethrow_exception(__result.error());
86
+ }
87
+ auto __value = std::move(__result.value());
88
+ return __value;
89
+ }
90
+ inline std::vector<ModelFile> listCachedFiles() override {
91
+ auto __result = _swiftPart.listCachedFiles();
92
+ if (__result.hasError()) [[unlikely]] {
93
+ std::rethrow_exception(__result.error());
94
+ }
95
+ auto __value = std::move(__result.value());
96
+ return __value;
97
+ }
98
+ inline void deleteFile(const std::string& fileName) override {
99
+ auto __result = _swiftPart.deleteFile(fileName);
100
+ if (__result.hasError()) [[unlikely]] {
101
+ std::rethrow_exception(__result.error());
102
+ }
103
+ }
104
+ inline std::shared_ptr<Promise<std::string>> downloadFile(const std::string& url, const std::string& fileName, const std::string& headersJson, const std::function<void(double /* progress */)>& onProgress) override {
105
+ auto __result = _swiftPart.downloadFile(url, fileName, headersJson, onProgress);
106
+ if (__result.hasError()) [[unlikely]] {
107
+ std::rethrow_exception(__result.error());
108
+ }
109
+ auto __value = std::move(__result.value());
110
+ return __value;
111
+ }
112
+
113
+ private:
114
+ LiteRTLM::HybridModelStoreSpec_cxx _swiftPart;
115
+ };
116
+
117
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,44 @@
1
+ ///
2
+ /// Backend.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /**
9
+ * Represents the JS union `Backend`, backed by a C++ enum.
10
+ */
11
+ public typealias Backend = margelo.nitro.litertlm.Backend
12
+
13
+ public extension Backend {
14
+ /**
15
+ * Get a Backend for the given String value, or
16
+ * return `nil` if the given value was invalid/unknown.
17
+ */
18
+ init?(fromString string: String) {
19
+ switch string {
20
+ case "cpu":
21
+ self = .cpu
22
+ case "gpu":
23
+ self = .gpu
24
+ case "npu":
25
+ self = .npu
26
+ default:
27
+ return nil
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Get the String value this Backend represents.
33
+ */
34
+ var stringValue: String {
35
+ switch self {
36
+ case .cpu:
37
+ return "cpu"
38
+ case .gpu:
39
+ return "gpu"
40
+ case .npu:
41
+ return "npu"
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,45 @@
1
+ ///
2
+ /// ExecuteResult.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Represents an instance of `ExecuteResult`, backed by a C++ struct.
12
+ */
13
+ public typealias ExecuteResult = margelo.nitro.litertlm.ExecuteResult
14
+
15
+ public extension ExecuteResult {
16
+ private typealias bridge = margelo.nitro.litertlm.bridge.swift
17
+
18
+ /**
19
+ * Create a new instance of `ExecuteResult`.
20
+ */
21
+ init(text: String, toolCalls: [ToolCall], thinkingText: String) {
22
+ self.init(std.string(text), { () -> bridge.std__vector_ToolCall_ in
23
+ var __vector = bridge.create_std__vector_ToolCall_(toolCalls.count)
24
+ for __item in toolCalls {
25
+ __vector.push_back(__item)
26
+ }
27
+ return __vector
28
+ }(), std.string(thinkingText))
29
+ }
30
+
31
+ @inline(__always)
32
+ var text: String {
33
+ return String(self.__text)
34
+ }
35
+
36
+ @inline(__always)
37
+ var toolCalls: [ToolCall] {
38
+ return self.__toolCalls.map({ __item in __item })
39
+ }
40
+
41
+ @inline(__always)
42
+ var thinkingText: String {
43
+ return String(self.__thinkingText)
44
+ }
45
+ }
@@ -0,0 +1,46 @@
1
+ ///
2
+ /// Func_void.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Wraps a Swift `() -> Void` as a class.
12
+ * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`.
13
+ */
14
+ public final class Func_void {
15
+ public typealias bridge = margelo.nitro.litertlm.bridge.swift
16
+
17
+ private let closure: () -> Void
18
+
19
+ public init(_ closure: @escaping () -> Void) {
20
+ self.closure = closure
21
+ }
22
+
23
+ @inline(__always)
24
+ public func call() -> Void {
25
+ self.closure()
26
+ }
27
+
28
+ /**
29
+ * Casts this instance to a retained unsafe raw pointer.
30
+ * This acquires one additional strong reference on the object!
31
+ */
32
+ @inline(__always)
33
+ public func toUnsafe() -> UnsafeMutableRawPointer {
34
+ return Unmanaged.passRetained(self).toOpaque()
35
+ }
36
+
37
+ /**
38
+ * Casts an unsafe pointer to a `Func_void`.
39
+ * The pointer has to be a retained opaque `Unmanaged<Func_void>`.
40
+ * This removes one strong reference from the object!
41
+ */
42
+ @inline(__always)
43
+ public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void {
44
+ return Unmanaged<Func_void>.fromOpaque(pointer).takeRetainedValue()
45
+ }
46
+ }
@@ -0,0 +1,46 @@
1
+ ///
2
+ /// Func_void_ExecuteResult.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Wraps a Swift `(_ value: ExecuteResult) -> Void` as a class.
12
+ * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`.
13
+ */
14
+ public final class Func_void_ExecuteResult {
15
+ public typealias bridge = margelo.nitro.litertlm.bridge.swift
16
+
17
+ private let closure: (_ value: ExecuteResult) -> Void
18
+
19
+ public init(_ closure: @escaping (_ value: ExecuteResult) -> Void) {
20
+ self.closure = closure
21
+ }
22
+
23
+ @inline(__always)
24
+ public func call(value: ExecuteResult) -> Void {
25
+ self.closure(value)
26
+ }
27
+
28
+ /**
29
+ * Casts this instance to a retained unsafe raw pointer.
30
+ * This acquires one additional strong reference on the object!
31
+ */
32
+ @inline(__always)
33
+ public func toUnsafe() -> UnsafeMutableRawPointer {
34
+ return Unmanaged.passRetained(self).toOpaque()
35
+ }
36
+
37
+ /**
38
+ * Casts an unsafe pointer to a `Func_void_ExecuteResult`.
39
+ * The pointer has to be a retained opaque `Unmanaged<Func_void_ExecuteResult>`.
40
+ * This removes one strong reference from the object!
41
+ */
42
+ @inline(__always)
43
+ public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_ExecuteResult {
44
+ return Unmanaged<Func_void_ExecuteResult>.fromOpaque(pointer).takeRetainedValue()
45
+ }
46
+ }