@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,125 @@
1
+ ///
2
+ /// JLLMConfig.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 <fbjni/fbjni.h>
11
+ #include "LLMConfig.hpp"
12
+
13
+ #include "Backend.hpp"
14
+ #include "JBackend.hpp"
15
+ #include "JToolDefinition.hpp"
16
+ #include "ToolDefinition.hpp"
17
+ #include <optional>
18
+ #include <string>
19
+ #include <vector>
20
+
21
+ namespace margelo::nitro::litertlm {
22
+
23
+ using namespace facebook;
24
+
25
+ /**
26
+ * The C++ JNI bridge between the C++ struct "LLMConfig" and the the Kotlin data class "LLMConfig".
27
+ */
28
+ struct JLLMConfig final: public jni::JavaClass<JLLMConfig> {
29
+ public:
30
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/LLMConfig;";
31
+
32
+ public:
33
+ /**
34
+ * Convert this Java/Kotlin-based struct to the C++ struct LLMConfig by copying all values to C++.
35
+ */
36
+ [[maybe_unused]]
37
+ [[nodiscard]]
38
+ LLMConfig toCpp() const {
39
+ static const auto clazz = javaClassStatic();
40
+ static const auto fieldSystemPrompt = clazz->getField<jni::JString>("systemPrompt");
41
+ jni::local_ref<jni::JString> systemPrompt = this->getFieldValue(fieldSystemPrompt);
42
+ static const auto fieldBackend = clazz->getField<JBackend>("backend");
43
+ jni::local_ref<JBackend> backend = this->getFieldValue(fieldBackend);
44
+ static const auto fieldMaxContextTokens = clazz->getField<jni::JDouble>("maxContextTokens");
45
+ jni::local_ref<jni::JDouble> maxContextTokens = this->getFieldValue(fieldMaxContextTokens);
46
+ static const auto fieldMaxOutputTokens = clazz->getField<jni::JDouble>("maxOutputTokens");
47
+ jni::local_ref<jni::JDouble> maxOutputTokens = this->getFieldValue(fieldMaxOutputTokens);
48
+ static const auto fieldMaxTokens = clazz->getField<jni::JDouble>("maxTokens");
49
+ jni::local_ref<jni::JDouble> maxTokens = this->getFieldValue(fieldMaxTokens);
50
+ static const auto fieldTemperature = clazz->getField<jni::JDouble>("temperature");
51
+ jni::local_ref<jni::JDouble> temperature = this->getFieldValue(fieldTemperature);
52
+ static const auto fieldTopK = clazz->getField<jni::JDouble>("topK");
53
+ jni::local_ref<jni::JDouble> topK = this->getFieldValue(fieldTopK);
54
+ static const auto fieldTopP = clazz->getField<jni::JDouble>("topP");
55
+ jni::local_ref<jni::JDouble> topP = this->getFieldValue(fieldTopP);
56
+ static const auto fieldMultimodal = clazz->getField<jni::JBoolean>("multimodal");
57
+ jni::local_ref<jni::JBoolean> multimodal = this->getFieldValue(fieldMultimodal);
58
+ static const auto fieldTools = clazz->getField<jni::JArrayClass<JToolDefinition>>("tools");
59
+ jni::local_ref<jni::JArrayClass<JToolDefinition>> tools = this->getFieldValue(fieldTools);
60
+ static const auto fieldEnableSpeculativeDecoding = clazz->getField<jni::JBoolean>("enableSpeculativeDecoding");
61
+ jni::local_ref<jni::JBoolean> enableSpeculativeDecoding = this->getFieldValue(fieldEnableSpeculativeDecoding);
62
+ static const auto fieldEnableThinking = clazz->getField<jni::JBoolean>("enableThinking");
63
+ jni::local_ref<jni::JBoolean> enableThinking = this->getFieldValue(fieldEnableThinking);
64
+ return LLMConfig(
65
+ systemPrompt != nullptr ? std::make_optional(systemPrompt->toStdString()) : std::nullopt,
66
+ backend != nullptr ? std::make_optional(backend->toCpp()) : std::nullopt,
67
+ maxContextTokens != nullptr ? std::make_optional(maxContextTokens->value()) : std::nullopt,
68
+ maxOutputTokens != nullptr ? std::make_optional(maxOutputTokens->value()) : std::nullopt,
69
+ maxTokens != nullptr ? std::make_optional(maxTokens->value()) : std::nullopt,
70
+ temperature != nullptr ? std::make_optional(temperature->value()) : std::nullopt,
71
+ topK != nullptr ? std::make_optional(topK->value()) : std::nullopt,
72
+ topP != nullptr ? std::make_optional(topP->value()) : std::nullopt,
73
+ multimodal != nullptr ? std::make_optional(static_cast<bool>(multimodal->value())) : std::nullopt,
74
+ tools != nullptr ? std::make_optional([&](auto&& __input) {
75
+ size_t __size = __input->size();
76
+ std::vector<ToolDefinition> __vector;
77
+ __vector.reserve(__size);
78
+ for (size_t __i = 0; __i < __size; __i++) {
79
+ auto __element = __input->getElement(__i);
80
+ __vector.push_back(__element->toCpp());
81
+ }
82
+ return __vector;
83
+ }(tools)) : std::nullopt,
84
+ enableSpeculativeDecoding != nullptr ? std::make_optional(static_cast<bool>(enableSpeculativeDecoding->value())) : std::nullopt,
85
+ enableThinking != nullptr ? std::make_optional(static_cast<bool>(enableThinking->value())) : std::nullopt
86
+ );
87
+ }
88
+
89
+ public:
90
+ /**
91
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
92
+ */
93
+ [[maybe_unused]]
94
+ static jni::local_ref<JLLMConfig::javaobject> fromCpp(const LLMConfig& value) {
95
+ using JSignature = JLLMConfig(jni::alias_ref<jni::JString>, jni::alias_ref<JBackend>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JArrayClass<JToolDefinition>>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>);
96
+ static const auto clazz = javaClassStatic();
97
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
98
+ return create(
99
+ clazz,
100
+ value.systemPrompt.has_value() ? jni::make_jstring(value.systemPrompt.value()) : nullptr,
101
+ value.backend.has_value() ? JBackend::fromCpp(value.backend.value()) : nullptr,
102
+ value.maxContextTokens.has_value() ? jni::JDouble::valueOf(value.maxContextTokens.value()) : nullptr,
103
+ value.maxOutputTokens.has_value() ? jni::JDouble::valueOf(value.maxOutputTokens.value()) : nullptr,
104
+ value.maxTokens.has_value() ? jni::JDouble::valueOf(value.maxTokens.value()) : nullptr,
105
+ value.temperature.has_value() ? jni::JDouble::valueOf(value.temperature.value()) : nullptr,
106
+ value.topK.has_value() ? jni::JDouble::valueOf(value.topK.value()) : nullptr,
107
+ value.topP.has_value() ? jni::JDouble::valueOf(value.topP.value()) : nullptr,
108
+ value.multimodal.has_value() ? jni::JBoolean::valueOf(value.multimodal.value()) : nullptr,
109
+ value.tools.has_value() ? [&](auto&& __input) {
110
+ size_t __size = __input.size();
111
+ jni::local_ref<jni::JArrayClass<JToolDefinition>> __array = jni::JArrayClass<JToolDefinition>::newArray(__size);
112
+ for (size_t __i = 0; __i < __size; __i++) {
113
+ const auto& __element = __input[__i];
114
+ auto __elementJni = JToolDefinition::fromCpp(__element);
115
+ __array->setElement(__i, *__elementJni);
116
+ }
117
+ return __array;
118
+ }(value.tools.value()) : nullptr,
119
+ value.enableSpeculativeDecoding.has_value() ? jni::JBoolean::valueOf(value.enableSpeculativeDecoding.value()) : nullptr,
120
+ value.enableThinking.has_value() ? jni::JBoolean::valueOf(value.enableThinking.value()) : nullptr
121
+ );
122
+ }
123
+ };
124
+
125
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// JMemoryUsage.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 <fbjni/fbjni.h>
11
+ #include "MemoryUsage.hpp"
12
+
13
+
14
+
15
+ namespace margelo::nitro::litertlm {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "MemoryUsage" and the the Kotlin data class "MemoryUsage".
21
+ */
22
+ struct JMemoryUsage final: public jni::JavaClass<JMemoryUsage> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/MemoryUsage;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct MemoryUsage by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ MemoryUsage toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldNativeHeapBytes = clazz->getField<double>("nativeHeapBytes");
35
+ double nativeHeapBytes = this->getFieldValue(fieldNativeHeapBytes);
36
+ static const auto fieldResidentBytes = clazz->getField<double>("residentBytes");
37
+ double residentBytes = this->getFieldValue(fieldResidentBytes);
38
+ static const auto fieldAvailableMemoryBytes = clazz->getField<double>("availableMemoryBytes");
39
+ double availableMemoryBytes = this->getFieldValue(fieldAvailableMemoryBytes);
40
+ static const auto fieldIsLowMemory = clazz->getField<jboolean>("isLowMemory");
41
+ jboolean isLowMemory = this->getFieldValue(fieldIsLowMemory);
42
+ return MemoryUsage(
43
+ nativeHeapBytes,
44
+ residentBytes,
45
+ availableMemoryBytes,
46
+ static_cast<bool>(isLowMemory)
47
+ );
48
+ }
49
+
50
+ public:
51
+ /**
52
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
53
+ */
54
+ [[maybe_unused]]
55
+ static jni::local_ref<JMemoryUsage::javaobject> fromCpp(const MemoryUsage& value) {
56
+ using JSignature = JMemoryUsage(double, double, double, jboolean);
57
+ static const auto clazz = javaClassStatic();
58
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
59
+ return create(
60
+ clazz,
61
+ value.nativeHeapBytes,
62
+ value.residentBytes,
63
+ value.availableMemoryBytes,
64
+ value.isLowMemory
65
+ );
66
+ }
67
+ };
68
+
69
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,63 @@
1
+ ///
2
+ /// JMessage.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 <fbjni/fbjni.h>
11
+ #include "Message.hpp"
12
+
13
+ #include "JRole.hpp"
14
+ #include "Role.hpp"
15
+ #include <string>
16
+
17
+ namespace margelo::nitro::litertlm {
18
+
19
+ using namespace facebook;
20
+
21
+ /**
22
+ * The C++ JNI bridge between the C++ struct "Message" and the the Kotlin data class "Message".
23
+ */
24
+ struct JMessage final: public jni::JavaClass<JMessage> {
25
+ public:
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/Message;";
27
+
28
+ public:
29
+ /**
30
+ * Convert this Java/Kotlin-based struct to the C++ struct Message by copying all values to C++.
31
+ */
32
+ [[maybe_unused]]
33
+ [[nodiscard]]
34
+ Message toCpp() const {
35
+ static const auto clazz = javaClassStatic();
36
+ static const auto fieldRole = clazz->getField<JRole>("role");
37
+ jni::local_ref<JRole> role = this->getFieldValue(fieldRole);
38
+ static const auto fieldContent = clazz->getField<jni::JString>("content");
39
+ jni::local_ref<jni::JString> content = this->getFieldValue(fieldContent);
40
+ return Message(
41
+ role->toCpp(),
42
+ content->toStdString()
43
+ );
44
+ }
45
+
46
+ public:
47
+ /**
48
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
49
+ */
50
+ [[maybe_unused]]
51
+ static jni::local_ref<JMessage::javaobject> fromCpp(const Message& value) {
52
+ using JSignature = JMessage(jni::alias_ref<JRole>, jni::alias_ref<jni::JString>);
53
+ static const auto clazz = javaClassStatic();
54
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
55
+ return create(
56
+ clazz,
57
+ JRole::fromCpp(value.role),
58
+ jni::make_jstring(value.content)
59
+ );
60
+ }
61
+ };
62
+
63
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// JModelFile.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 <fbjni/fbjni.h>
11
+ #include "ModelFile.hpp"
12
+
13
+ #include <string>
14
+
15
+ namespace margelo::nitro::litertlm {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "ModelFile" and the the Kotlin data class "ModelFile".
21
+ */
22
+ struct JModelFile final: public jni::JavaClass<JModelFile> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/ModelFile;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct ModelFile by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ ModelFile toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldFileName = clazz->getField<jni::JString>("fileName");
35
+ jni::local_ref<jni::JString> fileName = this->getFieldValue(fieldFileName);
36
+ static const auto fieldAbsolutePath = clazz->getField<jni::JString>("absolutePath");
37
+ jni::local_ref<jni::JString> absolutePath = this->getFieldValue(fieldAbsolutePath);
38
+ static const auto fieldSizeBytes = clazz->getField<double>("sizeBytes");
39
+ double sizeBytes = this->getFieldValue(fieldSizeBytes);
40
+ static const auto fieldLastModifiedMs = clazz->getField<double>("lastModifiedMs");
41
+ double lastModifiedMs = this->getFieldValue(fieldLastModifiedMs);
42
+ return ModelFile(
43
+ fileName->toStdString(),
44
+ absolutePath->toStdString(),
45
+ sizeBytes,
46
+ lastModifiedMs
47
+ );
48
+ }
49
+
50
+ public:
51
+ /**
52
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
53
+ */
54
+ [[maybe_unused]]
55
+ static jni::local_ref<JModelFile::javaobject> fromCpp(const ModelFile& value) {
56
+ using JSignature = JModelFile(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, double, double);
57
+ static const auto clazz = javaClassStatic();
58
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
59
+ return create(
60
+ clazz,
61
+ jni::make_jstring(value.fileName),
62
+ jni::make_jstring(value.absolutePath),
63
+ value.sizeBytes,
64
+ value.lastModifiedMs
65
+ );
66
+ }
67
+ };
68
+
69
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,78 @@
1
+ ///
2
+ /// JMultimodalPart.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 <fbjni/fbjni.h>
11
+ #include "MultimodalPart.hpp"
12
+
13
+ #include "JPartType.hpp"
14
+ #include "PartType.hpp"
15
+ #include <NitroModules/ArrayBuffer.hpp>
16
+ #include <NitroModules/JArrayBuffer.hpp>
17
+ #include <optional>
18
+ #include <string>
19
+
20
+ namespace margelo::nitro::litertlm {
21
+
22
+ using namespace facebook;
23
+
24
+ /**
25
+ * The C++ JNI bridge between the C++ struct "MultimodalPart" and the the Kotlin data class "MultimodalPart".
26
+ */
27
+ struct JMultimodalPart final: public jni::JavaClass<JMultimodalPart> {
28
+ public:
29
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/MultimodalPart;";
30
+
31
+ public:
32
+ /**
33
+ * Convert this Java/Kotlin-based struct to the C++ struct MultimodalPart by copying all values to C++.
34
+ */
35
+ [[maybe_unused]]
36
+ [[nodiscard]]
37
+ MultimodalPart toCpp() const {
38
+ static const auto clazz = javaClassStatic();
39
+ static const auto fieldType = clazz->getField<JPartType>("type");
40
+ jni::local_ref<JPartType> type = this->getFieldValue(fieldType);
41
+ static const auto fieldText = clazz->getField<jni::JString>("text");
42
+ jni::local_ref<jni::JString> text = this->getFieldValue(fieldText);
43
+ static const auto fieldPath = clazz->getField<jni::JString>("path");
44
+ jni::local_ref<jni::JString> path = this->getFieldValue(fieldPath);
45
+ static const auto fieldImageBuffer = clazz->getField<JArrayBuffer::javaobject>("imageBuffer");
46
+ jni::local_ref<JArrayBuffer::javaobject> imageBuffer = this->getFieldValue(fieldImageBuffer);
47
+ static const auto fieldAudioBuffer = clazz->getField<JArrayBuffer::javaobject>("audioBuffer");
48
+ jni::local_ref<JArrayBuffer::javaobject> audioBuffer = this->getFieldValue(fieldAudioBuffer);
49
+ return MultimodalPart(
50
+ type->toCpp(),
51
+ text != nullptr ? std::make_optional(text->toStdString()) : std::nullopt,
52
+ path != nullptr ? std::make_optional(path->toStdString()) : std::nullopt,
53
+ imageBuffer != nullptr ? std::make_optional(imageBuffer->cthis()->getArrayBuffer()) : std::nullopt,
54
+ audioBuffer != nullptr ? std::make_optional(audioBuffer->cthis()->getArrayBuffer()) : std::nullopt
55
+ );
56
+ }
57
+
58
+ public:
59
+ /**
60
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
61
+ */
62
+ [[maybe_unused]]
63
+ static jni::local_ref<JMultimodalPart::javaobject> fromCpp(const MultimodalPart& value) {
64
+ using JSignature = JMultimodalPart(jni::alias_ref<JPartType>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<JArrayBuffer::javaobject>, jni::alias_ref<JArrayBuffer::javaobject>);
65
+ static const auto clazz = javaClassStatic();
66
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
67
+ return create(
68
+ clazz,
69
+ JPartType::fromCpp(value.type),
70
+ value.text.has_value() ? jni::make_jstring(value.text.value()) : nullptr,
71
+ value.path.has_value() ? jni::make_jstring(value.path.value()) : nullptr,
72
+ value.imageBuffer.has_value() ? JArrayBuffer::wrap(value.imageBuffer.value()) : nullptr,
73
+ value.audioBuffer.has_value() ? JArrayBuffer::wrap(value.audioBuffer.value()) : nullptr
74
+ );
75
+ }
76
+ };
77
+
78
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JPartType.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 <fbjni/fbjni.h>
11
+ #include "PartType.hpp"
12
+
13
+ namespace margelo::nitro::litertlm {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "PartType" and the the Kotlin enum "PartType".
19
+ */
20
+ struct JPartType final: public jni::JavaClass<JPartType> {
21
+ public:
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/PartType;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum PartType.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ PartType toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<PartType>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JPartType> fromCpp(PartType value) {
43
+ static const auto clazz = javaClassStatic();
44
+ switch (value) {
45
+ case PartType::TEXT:
46
+ static const auto fieldTEXT = clazz->getStaticField<JPartType>("TEXT");
47
+ return clazz->getStaticFieldValue(fieldTEXT);
48
+ case PartType::IMAGE:
49
+ static const auto fieldIMAGE = clazz->getStaticField<JPartType>("IMAGE");
50
+ return clazz->getStaticFieldValue(fieldIMAGE);
51
+ case PartType::AUDIO:
52
+ static const auto fieldAUDIO = clazz->getStaticField<JPartType>("AUDIO");
53
+ return clazz->getStaticFieldValue(fieldAUDIO);
54
+ default:
55
+ std::string stringValue = std::to_string(static_cast<int>(value));
56
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
57
+ }
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JRole.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 <fbjni/fbjni.h>
11
+ #include "Role.hpp"
12
+
13
+ namespace margelo::nitro::litertlm {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "Role" and the the Kotlin enum "Role".
19
+ */
20
+ struct JRole final: public jni::JavaClass<JRole> {
21
+ public:
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/Role;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum Role.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ Role toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<Role>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JRole> fromCpp(Role value) {
43
+ static const auto clazz = javaClassStatic();
44
+ switch (value) {
45
+ case Role::USER:
46
+ static const auto fieldUSER = clazz->getStaticField<JRole>("USER");
47
+ return clazz->getStaticFieldValue(fieldUSER);
48
+ case Role::MODEL:
49
+ static const auto fieldMODEL = clazz->getStaticField<JRole>("MODEL");
50
+ return clazz->getStaticFieldValue(fieldMODEL);
51
+ case Role::SYSTEM:
52
+ static const auto fieldSYSTEM = clazz->getStaticField<JRole>("SYSTEM");
53
+ return clazz->getStaticFieldValue(fieldSYSTEM);
54
+ default:
55
+ std::string stringValue = std::to_string(static_cast<int>(value));
56
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
57
+ }
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JToolCall.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 <fbjni/fbjni.h>
11
+ #include "ToolCall.hpp"
12
+
13
+ #include <string>
14
+
15
+ namespace margelo::nitro::litertlm {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "ToolCall" and the the Kotlin data class "ToolCall".
21
+ */
22
+ struct JToolCall final: public jni::JavaClass<JToolCall> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/ToolCall;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct ToolCall by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ ToolCall toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldName = clazz->getField<jni::JString>("name");
35
+ jni::local_ref<jni::JString> name = this->getFieldValue(fieldName);
36
+ static const auto fieldArgumentsJson = clazz->getField<jni::JString>("argumentsJson");
37
+ jni::local_ref<jni::JString> argumentsJson = this->getFieldValue(fieldArgumentsJson);
38
+ return ToolCall(
39
+ name->toStdString(),
40
+ argumentsJson->toStdString()
41
+ );
42
+ }
43
+
44
+ public:
45
+ /**
46
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
47
+ */
48
+ [[maybe_unused]]
49
+ static jni::local_ref<JToolCall::javaobject> fromCpp(const ToolCall& value) {
50
+ using JSignature = JToolCall(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>);
51
+ static const auto clazz = javaClassStatic();
52
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
53
+ return create(
54
+ clazz,
55
+ jni::make_jstring(value.name),
56
+ jni::make_jstring(value.argumentsJson)
57
+ );
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::litertlm
@@ -0,0 +1,65 @@
1
+ ///
2
+ /// JToolDefinition.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 <fbjni/fbjni.h>
11
+ #include "ToolDefinition.hpp"
12
+
13
+ #include <string>
14
+
15
+ namespace margelo::nitro::litertlm {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "ToolDefinition" and the the Kotlin data class "ToolDefinition".
21
+ */
22
+ struct JToolDefinition final: public jni::JavaClass<JToolDefinition> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/dev/litert/litertlm/ToolDefinition;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct ToolDefinition by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ ToolDefinition toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldName = clazz->getField<jni::JString>("name");
35
+ jni::local_ref<jni::JString> name = this->getFieldValue(fieldName);
36
+ static const auto fieldDescription = clazz->getField<jni::JString>("description");
37
+ jni::local_ref<jni::JString> description = this->getFieldValue(fieldDescription);
38
+ static const auto fieldParametersJson = clazz->getField<jni::JString>("parametersJson");
39
+ jni::local_ref<jni::JString> parametersJson = this->getFieldValue(fieldParametersJson);
40
+ return ToolDefinition(
41
+ name->toStdString(),
42
+ description->toStdString(),
43
+ parametersJson->toStdString()
44
+ );
45
+ }
46
+
47
+ public:
48
+ /**
49
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
50
+ */
51
+ [[maybe_unused]]
52
+ static jni::local_ref<JToolDefinition::javaobject> fromCpp(const ToolDefinition& value) {
53
+ using JSignature = JToolDefinition(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>);
54
+ static const auto clazz = javaClassStatic();
55
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
56
+ return create(
57
+ clazz,
58
+ jni::make_jstring(value.name),
59
+ jni::make_jstring(value.description),
60
+ jni::make_jstring(value.parametersJson)
61
+ );
62
+ }
63
+ };
64
+
65
+ } // namespace margelo::nitro::litertlm