react-native-litert-lm 0.1.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +259 -0
  3. package/android/CMakeLists.txt +32 -0
  4. package/android/build.gradle +88 -0
  5. package/android/src/main/AndroidManifest.xml +11 -0
  6. package/android/src/main/java/com/margelo/nitro/dev/litert/litertlm/HybridLiteRTLM.kt +280 -0
  7. package/android/src/main/java/dev/litert/litertlm/LiteRTLMInitProvider.kt +43 -0
  8. package/android/src/main/java/dev/litert/litertlm/LiteRTLMPackage.kt +26 -0
  9. package/cpp/HybridLiteRTLM.cpp +483 -0
  10. package/cpp/HybridLiteRTLM.hpp +120 -0
  11. package/cpp/cpp-adapter.cpp +13 -0
  12. package/cpp/include/README.md +34 -0
  13. package/lib/index.d.ts +82 -0
  14. package/lib/index.js +106 -0
  15. package/lib/specs/LiteRTLM.nitro.d.ts +165 -0
  16. package/lib/specs/LiteRTLM.nitro.js +2 -0
  17. package/nitrogen/generated/.gitattributes +1 -0
  18. package/nitrogen/generated/android/LiteRTLM+autolinking.cmake +81 -0
  19. package/nitrogen/generated/android/LiteRTLM+autolinking.gradle +27 -0
  20. package/nitrogen/generated/android/LiteRTLMOnLoad.cpp +46 -0
  21. package/nitrogen/generated/android/LiteRTLMOnLoad.hpp +25 -0
  22. package/nitrogen/generated/android/c++/JBackend.hpp +61 -0
  23. package/nitrogen/generated/android/c++/JFunc_void_std__string_bool.hpp +76 -0
  24. package/nitrogen/generated/android/c++/JGenerationStats.hpp +77 -0
  25. package/nitrogen/generated/android/c++/JHybridLiteRTLMSpec.cpp +133 -0
  26. package/nitrogen/generated/android/c++/JHybridLiteRTLMSpec.hpp +75 -0
  27. package/nitrogen/generated/android/c++/JLLMConfig.hpp +75 -0
  28. package/nitrogen/generated/android/c++/JMessage.hpp +63 -0
  29. package/nitrogen/generated/android/c++/JRole.hpp +61 -0
  30. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Backend.kt +24 -0
  31. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Func_void_std__string_bool.kt +80 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/GenerationStats.kt +53 -0
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/HybridLiteRTLMSpec.kt +98 -0
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/LLMConfig.kt +50 -0
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/LiteRTLMOnLoad.kt +35 -0
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Message.kt +41 -0
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/dev/litert/litertlm/Role.kt +24 -0
  38. package/nitrogen/generated/ios/LiteRTLM+autolinking.rb +60 -0
  39. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Bridge.cpp +17 -0
  40. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Bridge.hpp +27 -0
  41. package/nitrogen/generated/ios/LiteRTLM-Swift-Cxx-Umbrella.hpp +38 -0
  42. package/nitrogen/generated/shared/c++/Backend.hpp +80 -0
  43. package/nitrogen/generated/shared/c++/GenerationStats.hpp +103 -0
  44. package/nitrogen/generated/shared/c++/HybridLiteRTLMSpec.cpp +30 -0
  45. package/nitrogen/generated/shared/c++/HybridLiteRTLMSpec.hpp +82 -0
  46. package/nitrogen/generated/shared/c++/LLMConfig.hpp +101 -0
  47. package/nitrogen/generated/shared/c++/Message.hpp +89 -0
  48. package/nitrogen/generated/shared/c++/Role.hpp +80 -0
  49. package/package.json +87 -0
  50. package/react-native-litert-lm.podspec +51 -0
  51. package/react-native.config.js +16 -0
  52. package/src/index.ts +125 -0
  53. package/src/specs/LiteRTLM.nitro.ts +187 -0
@@ -0,0 +1,187 @@
1
+ import type { HybridObject } from "react-native-nitro-modules";
2
+
3
+ /**
4
+ * Backend types for LLM inference.
5
+ * - 'cpu': CPU inference (slowest, always available)
6
+ * - 'gpu': GPU acceleration (fast, recommended for most devices)
7
+ * - 'npu': NPU/Neural Engine (fastest on supported hardware)
8
+ *
9
+ * @remarks
10
+ * NPU acceleration requires compatible hardware (e.g., Qualcomm Hexagon, MediaTek APU).
11
+ * If NPU is unavailable, LiteRT-LM automatically falls back to GPU.
12
+ */
13
+ export type Backend = "cpu" | "gpu" | "npu";
14
+
15
+ /**
16
+ * Message roles for conversation.
17
+ */
18
+ export type Role = "user" | "model" | "system";
19
+
20
+ /**
21
+ * Configuration options for loading an LLM.
22
+ */
23
+ export interface LLMConfig {
24
+ /**
25
+ * Primary compute backend for text generation.
26
+ * - 'cpu': CPU inference (slower but always available)
27
+ * - 'gpu': GPU acceleration (fast, recommended)
28
+ * - 'npu': NPU/Neural Engine (fastest on supported devices)
29
+ *
30
+ * If not specified, defaults to 'gpu'.
31
+ * If specified backend is unavailable, falls back automatically.
32
+ *
33
+ * @remarks
34
+ * Vision encoder is always set to GPU (required by Gemma 3n).
35
+ * Audio encoder is always set to CPU (optimal for audio processing).
36
+ *
37
+ * @default 'gpu'
38
+ */
39
+ backend?: Backend;
40
+
41
+ /**
42
+ * Maximum number of tokens to generate.
43
+ * @default 1024
44
+ */
45
+ maxTokens?: number;
46
+
47
+ /**
48
+ * Sampling temperature (0.0 = deterministic, 1.0 = creative).
49
+ * @default 0.7
50
+ */
51
+ temperature?: number;
52
+
53
+ /**
54
+ * Top-K sampling (number of top tokens to consider).
55
+ * @default 40
56
+ */
57
+ topK?: number;
58
+
59
+ /**
60
+ * Top-P (nucleus) sampling threshold.
61
+ * @default 0.95
62
+ */
63
+ topP?: number;
64
+ }
65
+
66
+ /**
67
+ * A simple message in the conversation.
68
+ * For multimodal, use sendMessageWithImage/sendMessageWithAudio instead.
69
+ */
70
+ export interface Message {
71
+ /** Role of the message sender */
72
+ role: Role;
73
+ /** Text content of the message */
74
+ content: string;
75
+ }
76
+
77
+ /**
78
+ * Generation statistics returned after completion.
79
+ */
80
+ export interface GenerationStats {
81
+ /** Number of tokens in the prompt */
82
+ promptTokens: number;
83
+ /** Number of tokens generated */
84
+ completionTokens: number;
85
+ /** Total tokens (prompt + completion) */
86
+ totalTokens: number;
87
+ /** Time to first token in milliseconds */
88
+ timeToFirstToken: number;
89
+ /** Total generation time in milliseconds */
90
+ totalTime: number;
91
+ /** Tokens per second */
92
+ tokensPerSecond: number;
93
+ }
94
+
95
+ /**
96
+ * LiteRT-LM: High-performance LLM inference engine.
97
+ * Supports Gemma 3n, Phi-4, Qwen, and other .litertlm models.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const llm = createLLM();
102
+ * llm.loadModel('/path/to/gemma-3n.litertlm', { backend: 'gpu' });
103
+ *
104
+ * // Blocking generation
105
+ * const response = llm.sendMessage('What is the capital of France?');
106
+ *
107
+ * // Streaming generation
108
+ * llm.sendMessageAsync('Tell me a story', (token, done) => {
109
+ * process.stdout.write(token);
110
+ * });
111
+ *
112
+ * llm.close();
113
+ * ```
114
+ */
115
+ export interface LiteRTLM extends HybridObject<{
116
+ ios: "c++";
117
+ android: "kotlin";
118
+ }> {
119
+ /**
120
+ * Load a .litertlm model file.
121
+ * @param modelPath Absolute path to the .litertlm file.
122
+ * @param config Optional configuration for backend and sampling.
123
+ * @throws Error if the model cannot be loaded.
124
+ */
125
+ loadModel(modelPath: string, config?: LLMConfig): void;
126
+
127
+ /**
128
+ * Send a text message and get the complete response (blocking).
129
+ * @param message User message text.
130
+ * @returns The model's response text.
131
+ */
132
+ sendMessage(message: string): string;
133
+
134
+ /**
135
+ * Send a text message with an image (multimodal).
136
+ * @param message User message text.
137
+ * @param imagePath Absolute path to an image file.
138
+ * @returns The model's response text.
139
+ */
140
+ sendMessageWithImage(message: string, imagePath: string): string;
141
+
142
+ /**
143
+ * Send a text message with audio (multimodal).
144
+ * @param message User message text.
145
+ * @param audioPath Absolute path to an audio file (WAV).
146
+ * @returns The model's response text.
147
+ */
148
+ sendMessageWithAudio(message: string, audioPath: string): string;
149
+
150
+ /**
151
+ * Send a message with streaming response.
152
+ * Tokens are delivered via callback as they are generated.
153
+ * @param message User message text.
154
+ * @param onToken Callback invoked for each token (token, isDone).
155
+ */
156
+ sendMessageAsync(
157
+ message: string,
158
+ onToken: (token: string, done: boolean) => void,
159
+ ): void;
160
+
161
+ /**
162
+ * Get the current conversation history.
163
+ * @returns Array of messages in the conversation.
164
+ */
165
+ getHistory(): Message[];
166
+
167
+ /**
168
+ * Clear the conversation context and start fresh.
169
+ */
170
+ resetConversation(): void;
171
+
172
+ /**
173
+ * Check if a model is loaded and ready for inference.
174
+ */
175
+ isReady(): boolean;
176
+
177
+ /**
178
+ * Get the last generation statistics.
179
+ */
180
+ getStats(): GenerationStats;
181
+
182
+ /**
183
+ * Release all native resources.
184
+ * Call this when done with the LLM instance.
185
+ */
186
+ close(): void;
187
+ }