cactus-react-native 1.2.1 → 1.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 (238) hide show
  1. package/README.md +765 -33
  2. package/android/CMakeLists.txt +4 -3
  3. package/android/src/main/java/com/margelo/nitro/cactus/HybridCactusFileSystem.kt +20 -1
  4. package/android/src/main/jniLibs/arm64-v8a/libcactus.a +0 -0
  5. package/android/src/main/jniLibs/arm64-v8a/libcactus_util.a +0 -0
  6. package/cpp/HybridCactus.cpp +231 -19
  7. package/cpp/HybridCactus.hpp +25 -3
  8. package/cpp/HybridCactusIndex.cpp +325 -0
  9. package/cpp/HybridCactusIndex.hpp +43 -0
  10. package/cpp/HybridCactusUtil.cpp +3 -3
  11. package/cpp/HybridCactusUtil.hpp +2 -1
  12. package/cpp/cactus_ffi.h +107 -2
  13. package/cpp/cactus_util.h +1 -1
  14. package/ios/HybridCactusFileSystem.swift +23 -2
  15. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/cactus.h +2 -0
  16. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/cactus_ffi.h +107 -2
  17. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/cactus_telemetry.h +656 -0
  18. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/{ffi_utils.h → cactus_utils.h} +145 -18
  19. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/engine.h +135 -7
  20. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/gemma_tools.h +549 -0
  21. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/graph.h +193 -26
  22. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/kernel.h +54 -195
  23. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/kernel_utils.h +399 -140
  24. package/ios/cactus.xcframework/ios-arm64/cactus.framework/Info.plist +0 -0
  25. package/ios/cactus.xcframework/ios-arm64/cactus.framework/cactus +0 -0
  26. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/cactus.h +2 -0
  27. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/cactus_ffi.h +107 -2
  28. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/cactus_telemetry.h +656 -0
  29. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/{ffi_utils.h → cactus_utils.h} +145 -18
  30. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/engine.h +135 -7
  31. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/gemma_tools.h +549 -0
  32. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/graph.h +193 -26
  33. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/kernel.h +54 -195
  34. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/kernel_utils.h +399 -140
  35. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Info.plist +0 -0
  36. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/_CodeSignature/CodeResources +1 -1
  37. package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/cactus +0 -0
  38. package/ios/cactus_util.xcframework/Info.plist +4 -4
  39. package/ios/cactus_util.xcframework/ios-arm64/cactus_util.framework/Headers/cactus_util.h +1 -1
  40. package/ios/cactus_util.xcframework/ios-arm64/cactus_util.framework/Headers/database.h +27 -0
  41. package/ios/cactus_util.xcframework/ios-arm64/cactus_util.framework/Info.plist +0 -0
  42. package/ios/cactus_util.xcframework/ios-arm64/cactus_util.framework/cactus_util +0 -0
  43. package/ios/cactus_util.xcframework/ios-arm64-simulator/cactus_util.framework/Headers/cactus_util.h +1 -1
  44. package/ios/cactus_util.xcframework/ios-arm64-simulator/cactus_util.framework/Headers/database.h +27 -0
  45. package/ios/cactus_util.xcframework/ios-arm64-simulator/cactus_util.framework/Info.plist +0 -0
  46. package/ios/cactus_util.xcframework/ios-arm64-simulator/cactus_util.framework/_CodeSignature/CodeResources +3 -3
  47. package/ios/cactus_util.xcframework/ios-arm64-simulator/cactus_util.framework/cactus_util +0 -0
  48. package/lib/module/api/Database.js +12 -95
  49. package/lib/module/api/Database.js.map +1 -1
  50. package/lib/module/classes/CactusIndex.js +45 -0
  51. package/lib/module/classes/CactusIndex.js.map +1 -0
  52. package/lib/module/classes/CactusLM.js +65 -17
  53. package/lib/module/classes/CactusLM.js.map +1 -1
  54. package/lib/module/classes/CactusSTT.js +104 -17
  55. package/lib/module/classes/CactusSTT.js.map +1 -1
  56. package/lib/module/config/CactusConfig.js +2 -0
  57. package/lib/module/config/CactusConfig.js.map +1 -1
  58. package/lib/module/constants/packageVersion.js +1 -1
  59. package/lib/module/hooks/useCactusIndex.js +175 -0
  60. package/lib/module/hooks/useCactusIndex.js.map +1 -0
  61. package/lib/module/hooks/useCactusLM.js +68 -7
  62. package/lib/module/hooks/useCactusLM.js.map +1 -1
  63. package/lib/module/hooks/useCactusSTT.js +102 -6
  64. package/lib/module/hooks/useCactusSTT.js.map +1 -1
  65. package/lib/module/index.js +2 -0
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/models.js +336 -0
  68. package/lib/module/models.js.map +1 -0
  69. package/lib/module/native/Cactus.js +61 -13
  70. package/lib/module/native/Cactus.js.map +1 -1
  71. package/lib/module/native/CactusFileSystem.js +3 -0
  72. package/lib/module/native/CactusFileSystem.js.map +1 -1
  73. package/lib/module/native/CactusIndex.js +32 -0
  74. package/lib/module/native/CactusIndex.js.map +1 -0
  75. package/lib/module/native/CactusUtil.js +16 -3
  76. package/lib/module/native/CactusUtil.js.map +1 -1
  77. package/lib/module/native/index.js +1 -0
  78. package/lib/module/native/index.js.map +1 -1
  79. package/lib/module/specs/CactusIndex.nitro.js +4 -0
  80. package/lib/module/specs/CactusIndex.nitro.js.map +1 -0
  81. package/lib/module/telemetry/Telemetry.js +3 -1
  82. package/lib/module/telemetry/Telemetry.js.map +1 -1
  83. package/lib/module/types/CactusIndex.js +2 -0
  84. package/lib/module/types/{CactusModel.js.map → CactusIndex.js.map} +1 -1
  85. package/lib/module/types/CactusLM.js +2 -0
  86. package/lib/module/types/CactusSTT.js +2 -0
  87. package/lib/module/types/common.js +2 -0
  88. package/lib/module/types/{CactusSTTModel.js.map → common.js.map} +1 -1
  89. package/lib/typescript/src/api/Database.d.ts +4 -7
  90. package/lib/typescript/src/api/Database.d.ts.map +1 -1
  91. package/lib/typescript/src/classes/CactusIndex.d.ts +15 -0
  92. package/lib/typescript/src/classes/CactusIndex.d.ts.map +1 -0
  93. package/lib/typescript/src/classes/CactusLM.d.ts +12 -5
  94. package/lib/typescript/src/classes/CactusLM.d.ts.map +1 -1
  95. package/lib/typescript/src/classes/CactusSTT.d.ts +15 -5
  96. package/lib/typescript/src/classes/CactusSTT.d.ts.map +1 -1
  97. package/lib/typescript/src/config/CactusConfig.d.ts +1 -0
  98. package/lib/typescript/src/config/CactusConfig.d.ts.map +1 -1
  99. package/lib/typescript/src/constants/packageVersion.d.ts +1 -1
  100. package/lib/typescript/src/hooks/useCactusIndex.d.ts +14 -0
  101. package/lib/typescript/src/hooks/useCactusIndex.d.ts.map +1 -0
  102. package/lib/typescript/src/hooks/useCactusLM.d.ts +6 -4
  103. package/lib/typescript/src/hooks/useCactusLM.d.ts.map +1 -1
  104. package/lib/typescript/src/hooks/useCactusSTT.d.ts +13 -5
  105. package/lib/typescript/src/hooks/useCactusSTT.d.ts.map +1 -1
  106. package/lib/typescript/src/index.d.ts +6 -4
  107. package/lib/typescript/src/index.d.ts.map +1 -1
  108. package/lib/typescript/src/models.d.ts +6 -0
  109. package/lib/typescript/src/models.d.ts.map +1 -0
  110. package/lib/typescript/src/native/Cactus.d.ts +10 -3
  111. package/lib/typescript/src/native/Cactus.d.ts.map +1 -1
  112. package/lib/typescript/src/native/CactusFileSystem.d.ts +1 -0
  113. package/lib/typescript/src/native/CactusFileSystem.d.ts.map +1 -1
  114. package/lib/typescript/src/native/CactusIndex.d.ts +12 -0
  115. package/lib/typescript/src/native/CactusIndex.d.ts.map +1 -0
  116. package/lib/typescript/src/native/CactusUtil.d.ts.map +1 -1
  117. package/lib/typescript/src/native/index.d.ts +1 -0
  118. package/lib/typescript/src/native/index.d.ts.map +1 -1
  119. package/lib/typescript/src/specs/Cactus.nitro.d.ts +9 -2
  120. package/lib/typescript/src/specs/Cactus.nitro.d.ts.map +1 -1
  121. package/lib/typescript/src/specs/CactusFileSystem.nitro.d.ts +1 -0
  122. package/lib/typescript/src/specs/CactusFileSystem.nitro.d.ts.map +1 -1
  123. package/lib/typescript/src/specs/CactusIndex.nitro.d.ts +24 -0
  124. package/lib/typescript/src/specs/CactusIndex.nitro.d.ts.map +1 -0
  125. package/lib/typescript/src/specs/CactusUtil.nitro.d.ts +1 -1
  126. package/lib/typescript/src/specs/CactusUtil.nitro.d.ts.map +1 -1
  127. package/lib/typescript/src/types/CactusIndex.d.ts +34 -0
  128. package/lib/typescript/src/types/CactusIndex.d.ts.map +1 -0
  129. package/lib/typescript/src/types/CactusLM.d.ts +19 -0
  130. package/lib/typescript/src/types/CactusLM.d.ts.map +1 -1
  131. package/lib/typescript/src/types/CactusSTT.d.ts +21 -1
  132. package/lib/typescript/src/types/CactusSTT.d.ts.map +1 -1
  133. package/lib/typescript/src/types/common.d.ts +28 -0
  134. package/lib/typescript/src/types/common.d.ts.map +1 -0
  135. package/nitro.json +3 -0
  136. package/nitrogen/generated/android/c++/JDeviceInfo.hpp +1 -1
  137. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +1 -1
  138. package/nitrogen/generated/android/c++/JHybridCactusCryptoSpec.cpp +1 -1
  139. package/nitrogen/generated/android/c++/JHybridCactusCryptoSpec.hpp +1 -1
  140. package/nitrogen/generated/android/c++/JHybridCactusDeviceInfoSpec.cpp +1 -1
  141. package/nitrogen/generated/android/c++/JHybridCactusDeviceInfoSpec.hpp +1 -1
  142. package/nitrogen/generated/android/c++/JHybridCactusFileSystemSpec.cpp +17 -1
  143. package/nitrogen/generated/android/c++/JHybridCactusFileSystemSpec.hpp +2 -1
  144. package/nitrogen/generated/android/c++/JHybridCactusImageSpec.cpp +1 -1
  145. package/nitrogen/generated/android/c++/JHybridCactusImageSpec.hpp +1 -1
  146. package/nitrogen/generated/android/cactus+autolinking.cmake +2 -1
  147. package/nitrogen/generated/android/cactus+autolinking.gradle +1 -1
  148. package/nitrogen/generated/android/cactusOnLoad.cpp +11 -1
  149. package/nitrogen/generated/android/cactusOnLoad.hpp +1 -1
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/DeviceInfo.kt +1 -1
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/Func_void_double.kt +1 -1
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/HybridCactusCryptoSpec.kt +1 -1
  153. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/HybridCactusDeviceInfoSpec.kt +1 -1
  154. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/HybridCactusFileSystemSpec.kt +5 -1
  155. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/HybridCactusImageSpec.kt +1 -1
  156. package/nitrogen/generated/android/kotlin/com/margelo/nitro/cactus/cactusOnLoad.kt +1 -1
  157. package/nitrogen/generated/ios/Cactus+autolinking.rb +1 -1
  158. package/nitrogen/generated/ios/Cactus-Swift-Cxx-Bridge.cpp +1 -1
  159. package/nitrogen/generated/ios/Cactus-Swift-Cxx-Bridge.hpp +1 -1
  160. package/nitrogen/generated/ios/Cactus-Swift-Cxx-Umbrella.hpp +1 -1
  161. package/nitrogen/generated/ios/CactusAutolinking.mm +11 -1
  162. package/nitrogen/generated/ios/CactusAutolinking.swift +1 -1
  163. package/nitrogen/generated/ios/c++/HybridCactusCryptoSpecSwift.cpp +1 -1
  164. package/nitrogen/generated/ios/c++/HybridCactusCryptoSpecSwift.hpp +1 -1
  165. package/nitrogen/generated/ios/c++/HybridCactusDeviceInfoSpecSwift.cpp +1 -1
  166. package/nitrogen/generated/ios/c++/HybridCactusDeviceInfoSpecSwift.hpp +1 -1
  167. package/nitrogen/generated/ios/c++/HybridCactusFileSystemSpecSwift.cpp +1 -1
  168. package/nitrogen/generated/ios/c++/HybridCactusFileSystemSpecSwift.hpp +9 -1
  169. package/nitrogen/generated/ios/c++/HybridCactusImageSpecSwift.cpp +1 -1
  170. package/nitrogen/generated/ios/c++/HybridCactusImageSpecSwift.hpp +1 -1
  171. package/nitrogen/generated/ios/swift/DeviceInfo.swift +1 -1
  172. package/nitrogen/generated/ios/swift/Func_void.swift +1 -1
  173. package/nitrogen/generated/ios/swift/Func_void_DeviceInfo.swift +1 -1
  174. package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -1
  175. package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -1
  176. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -1
  177. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +1 -1
  178. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -1
  179. package/nitrogen/generated/ios/swift/HybridCactusCryptoSpec.swift +1 -1
  180. package/nitrogen/generated/ios/swift/HybridCactusCryptoSpec_cxx.swift +1 -1
  181. package/nitrogen/generated/ios/swift/HybridCactusDeviceInfoSpec.swift +1 -1
  182. package/nitrogen/generated/ios/swift/HybridCactusDeviceInfoSpec_cxx.swift +1 -1
  183. package/nitrogen/generated/ios/swift/HybridCactusFileSystemSpec.swift +2 -1
  184. package/nitrogen/generated/ios/swift/HybridCactusFileSystemSpec_cxx.swift +20 -1
  185. package/nitrogen/generated/ios/swift/HybridCactusImageSpec.swift +1 -1
  186. package/nitrogen/generated/ios/swift/HybridCactusImageSpec_cxx.swift +1 -1
  187. package/nitrogen/generated/shared/c++/CactusIndexGetResult.hpp +84 -0
  188. package/nitrogen/generated/shared/c++/CactusIndexQueryResult.hpp +79 -0
  189. package/nitrogen/generated/shared/c++/DeviceInfo.hpp +1 -1
  190. package/nitrogen/generated/shared/c++/HybridCactusCryptoSpec.cpp +1 -1
  191. package/nitrogen/generated/shared/c++/HybridCactusCryptoSpec.hpp +1 -1
  192. package/nitrogen/generated/shared/c++/HybridCactusDeviceInfoSpec.cpp +1 -1
  193. package/nitrogen/generated/shared/c++/HybridCactusDeviceInfoSpec.hpp +1 -1
  194. package/nitrogen/generated/shared/c++/HybridCactusFileSystemSpec.cpp +2 -1
  195. package/nitrogen/generated/shared/c++/HybridCactusFileSystemSpec.hpp +2 -1
  196. package/nitrogen/generated/shared/c++/HybridCactusImageSpec.cpp +1 -1
  197. package/nitrogen/generated/shared/c++/HybridCactusImageSpec.hpp +1 -1
  198. package/nitrogen/generated/shared/c++/HybridCactusIndexSpec.cpp +27 -0
  199. package/nitrogen/generated/shared/c++/HybridCactusIndexSpec.hpp +76 -0
  200. package/nitrogen/generated/shared/c++/HybridCactusSpec.cpp +8 -1
  201. package/nitrogen/generated/shared/c++/HybridCactusSpec.hpp +11 -3
  202. package/nitrogen/generated/shared/c++/HybridCactusUtilSpec.cpp +1 -1
  203. package/nitrogen/generated/shared/c++/HybridCactusUtilSpec.hpp +2 -2
  204. package/package.json +2 -2
  205. package/src/api/Database.ts +14 -135
  206. package/src/classes/CactusIndex.ts +58 -0
  207. package/src/classes/CactusLM.ts +87 -19
  208. package/src/classes/CactusSTT.ts +134 -20
  209. package/src/config/CactusConfig.ts +3 -0
  210. package/src/constants/packageVersion.ts +1 -1
  211. package/src/hooks/useCactusIndex.ts +195 -0
  212. package/src/hooks/useCactusLM.ts +88 -8
  213. package/src/hooks/useCactusSTT.ts +119 -7
  214. package/src/index.tsx +22 -2
  215. package/src/models.ts +344 -0
  216. package/src/native/Cactus.ts +95 -13
  217. package/src/native/CactusFileSystem.ts +4 -0
  218. package/src/native/CactusIndex.ts +54 -0
  219. package/src/native/CactusUtil.ts +19 -3
  220. package/src/native/index.ts +1 -0
  221. package/src/specs/Cactus.nitro.ts +18 -2
  222. package/src/specs/CactusFileSystem.nitro.ts +2 -0
  223. package/src/specs/CactusIndex.nitro.ts +31 -0
  224. package/src/specs/CactusUtil.nitro.ts +1 -1
  225. package/src/telemetry/Telemetry.ts +1 -1
  226. package/src/types/CactusIndex.ts +40 -0
  227. package/src/types/CactusLM.ts +24 -0
  228. package/src/types/CactusSTT.ts +27 -1
  229. package/src/types/common.ts +28 -0
  230. package/android/src/main/jniLibs/arm64-v8a/libcactus_util.so +0 -0
  231. package/lib/module/types/CactusModel.js +0 -2
  232. package/lib/module/types/CactusSTTModel.js +0 -2
  233. package/lib/typescript/src/types/CactusModel.d.ts +0 -13
  234. package/lib/typescript/src/types/CactusModel.d.ts.map +0 -1
  235. package/lib/typescript/src/types/CactusSTTModel.d.ts +0 -8
  236. package/lib/typescript/src/types/CactusSTTModel.d.ts.map +0 -1
  237. package/src/types/CactusModel.ts +0 -15
  238. package/src/types/CactusSTTModel.ts +0 -10
@@ -4,23 +4,31 @@ import { CactusFileSystem } from '../native';
4
4
  import { getErrorMessage } from '../utils/error';
5
5
  import type {
6
6
  CactusLMParams,
7
+ CactusLMCompleteParams,
7
8
  CactusLMCompleteResult,
9
+ CactusLMTokenizeParams,
10
+ CactusLMTokenizeResult,
11
+ CactusLMScoreWindowParams,
12
+ CactusLMScoreWindowResult,
8
13
  CactusLMEmbedParams,
9
14
  CactusLMEmbedResult,
10
15
  CactusLMImageEmbedParams,
11
16
  CactusLMImageEmbedResult,
12
- CactusLMCompleteParams,
13
17
  CactusLMDownloadParams,
14
18
  } from '../types/CactusLM';
15
- import type { CactusModel } from '../types/CactusModel';
19
+ import type { CactusModel } from '../types/common';
16
20
 
17
21
  export const useCactusLM = ({
18
- model = 'qwen3-0.6',
22
+ model = 'qwen3-0.6b',
19
23
  contextSize = 2048,
20
24
  corpusDir = undefined,
25
+ options: modelOptions = {
26
+ quantization: undefined,
27
+ pro: false,
28
+ },
21
29
  }: CactusLMParams = {}) => {
22
30
  const [cactusLM, setCactusLM] = useState(
23
- () => new CactusLM({ model, contextSize, corpusDir })
31
+ () => new CactusLM({ model, contextSize, corpusDir, options: modelOptions })
24
32
  );
25
33
 
26
34
  // State
@@ -40,7 +48,17 @@ export const useCactusLM = ({
40
48
  }, [model]);
41
49
 
42
50
  useEffect(() => {
43
- setCactusLM(new CactusLM({ model, contextSize, corpusDir }));
51
+ setCactusLM(
52
+ new CactusLM({
53
+ model,
54
+ contextSize,
55
+ corpusDir,
56
+ options: {
57
+ quantization: modelOptions.quantization,
58
+ pro: modelOptions.pro,
59
+ },
60
+ })
61
+ );
44
62
 
45
63
  setCompletion('');
46
64
  setIsGenerating(false);
@@ -69,7 +87,13 @@ export const useCactusLM = ({
69
87
  return () => {
70
88
  mounted = false;
71
89
  };
72
- }, [model, contextSize, corpusDir]);
90
+ }, [
91
+ model,
92
+ contextSize,
93
+ corpusDir,
94
+ modelOptions.quantization,
95
+ modelOptions.pro,
96
+ ]);
73
97
 
74
98
  useEffect(() => {
75
99
  return () => {
@@ -201,8 +225,62 @@ export const useCactusLM = ({
201
225
  [cactusLM, isGenerating]
202
226
  );
203
227
 
228
+ const tokenize = useCallback(
229
+ async ({
230
+ text,
231
+ }: CactusLMTokenizeParams): Promise<CactusLMTokenizeResult> => {
232
+ if (isGenerating) {
233
+ const message = 'CactusLM is already generating';
234
+ setError(message);
235
+ throw new Error(message);
236
+ }
237
+
238
+ setError(null);
239
+ setIsGenerating(true);
240
+ try {
241
+ return await cactusLM.tokenize({ text });
242
+ } catch (e) {
243
+ setError(getErrorMessage(e));
244
+ throw e;
245
+ } finally {
246
+ setIsGenerating(false);
247
+ }
248
+ },
249
+ [cactusLM, isGenerating]
250
+ );
251
+
252
+ const scoreWindow = useCallback(
253
+ async ({
254
+ tokens,
255
+ start,
256
+ end,
257
+ context,
258
+ }: CactusLMScoreWindowParams): Promise<CactusLMScoreWindowResult> => {
259
+ if (isGenerating) {
260
+ const message = 'CactusLM is already generating';
261
+ setError(message);
262
+ throw new Error(message);
263
+ }
264
+
265
+ setError(null);
266
+ setIsGenerating(true);
267
+ try {
268
+ return await cactusLM.scoreWindow({ tokens, start, end, context });
269
+ } catch (e) {
270
+ setError(getErrorMessage(e));
271
+ throw e;
272
+ } finally {
273
+ setIsGenerating(false);
274
+ }
275
+ },
276
+ [cactusLM, isGenerating]
277
+ );
278
+
204
279
  const embed = useCallback(
205
- async ({ text }: CactusLMEmbedParams): Promise<CactusLMEmbedResult> => {
280
+ async ({
281
+ text,
282
+ normalize = false,
283
+ }: CactusLMEmbedParams): Promise<CactusLMEmbedResult> => {
206
284
  if (isGenerating) {
207
285
  const message = 'CactusLM is already generating';
208
286
  setError(message);
@@ -212,7 +290,7 @@ export const useCactusLM = ({
212
290
  setError(null);
213
291
  setIsGenerating(true);
214
292
  try {
215
- return await cactusLM.embed({ text });
293
+ return await cactusLM.embed({ text, normalize });
216
294
  } catch (e) {
217
295
  setError(getErrorMessage(e));
218
296
  throw e;
@@ -303,6 +381,8 @@ export const useCactusLM = ({
303
381
  download,
304
382
  init,
305
383
  complete,
384
+ tokenize,
385
+ scoreWindow,
306
386
  embed,
307
387
  imageEmbed,
308
388
  reset,
@@ -9,20 +9,32 @@ import type {
9
9
  CactusSTTDownloadParams,
10
10
  CactusSTTAudioEmbedParams,
11
11
  CactusSTTAudioEmbedResult,
12
+ CactusSTTStreamTranscribeInsertParams,
13
+ CactusSTTStreamTranscribeProcessParams,
14
+ CactusSTTStreamTranscribeProcessResult,
15
+ CactusSTTStreamTranscribeFinalizeResult,
12
16
  } from '../types/CactusSTT';
13
- import type { CactusSTTModel } from '../types/CactusSTTModel';
17
+ import type { CactusModel } from '../types/common';
14
18
 
15
19
  export const useCactusSTT = ({
16
20
  model = 'whisper-small',
17
21
  contextSize = 2048,
22
+ options: modelOptions = {
23
+ quantization: undefined,
24
+ pro: false,
25
+ },
18
26
  }: CactusSTTParams = {}) => {
19
27
  const [cactusSTT, setCactusSTT] = useState(
20
- () => new CactusSTT({ model, contextSize })
28
+ () => new CactusSTT({ model, contextSize, options: modelOptions })
21
29
  );
22
30
 
23
31
  // State
24
32
  const [transcription, setTranscription] = useState('');
33
+ const [streamTranscribeConfirmed, setStreamTranscribeConfirmed] =
34
+ useState('');
35
+ const [streamTranscribePending, setStreamTranscribePending] = useState('');
25
36
  const [isGenerating, setIsGenerating] = useState(false);
37
+ const [isStreamTranscribing, setIsStreamTranscribing] = useState(false);
26
38
  const [isInitializing, setIsInitializing] = useState(false);
27
39
  const [isDownloaded, setIsDownloaded] = useState(false);
28
40
  const [isDownloading, setIsDownloading] = useState(false);
@@ -37,10 +49,22 @@ export const useCactusSTT = ({
37
49
  }, [model]);
38
50
 
39
51
  useEffect(() => {
40
- setCactusSTT(new CactusSTT({ model, contextSize }));
52
+ setCactusSTT(
53
+ new CactusSTT({
54
+ model,
55
+ contextSize,
56
+ options: {
57
+ quantization: modelOptions.quantization,
58
+ pro: modelOptions.pro,
59
+ },
60
+ })
61
+ );
41
62
 
42
63
  setTranscription('');
64
+ setStreamTranscribeConfirmed('');
65
+ setStreamTranscribePending('');
43
66
  setIsGenerating(false);
67
+ setIsStreamTranscribing(false);
44
68
  setIsInitializing(false);
45
69
  setIsDownloaded(false);
46
70
  setIsDownloading(false);
@@ -66,7 +90,7 @@ export const useCactusSTT = ({
66
90
  return () => {
67
91
  mounted = false;
68
92
  };
69
- }, [model, contextSize]);
93
+ }, [model, contextSize, modelOptions.quantization, modelOptions.pro]);
70
94
 
71
95
  useEffect(() => {
72
96
  return () => {
@@ -162,7 +186,7 @@ export const useCactusSTT = ({
162
186
 
163
187
  const transcribe = useCallback(
164
188
  async ({
165
- audioFilePath,
189
+ audio,
166
190
  prompt,
167
191
  options,
168
192
  onToken,
@@ -178,7 +202,7 @@ export const useCactusSTT = ({
178
202
  setIsGenerating(true);
179
203
  try {
180
204
  return await cactusSTT.transcribe({
181
- audioFilePath,
205
+ audio,
182
206
  prompt,
183
207
  options,
184
208
  onToken: (token) => {
@@ -220,6 +244,83 @@ export const useCactusSTT = ({
220
244
  [cactusSTT, isGenerating]
221
245
  );
222
246
 
247
+ const streamTranscribeInit = useCallback(async () => {
248
+ if (isStreamTranscribing) {
249
+ return;
250
+ }
251
+
252
+ setError(null);
253
+ setStreamTranscribeConfirmed('');
254
+ setStreamTranscribePending('');
255
+ setIsStreamTranscribing(true);
256
+ try {
257
+ await cactusSTT.streamTranscribeInit();
258
+ } catch (e) {
259
+ setError(getErrorMessage(e));
260
+ setIsStreamTranscribing(false);
261
+ throw e;
262
+ }
263
+ }, [cactusSTT, isStreamTranscribing]);
264
+
265
+ const streamTranscribeInsert = useCallback(
266
+ async ({ audio }: CactusSTTStreamTranscribeInsertParams): Promise<void> => {
267
+ setError(null);
268
+ try {
269
+ await cactusSTT.streamTranscribeInsert({ audio });
270
+ } catch (e) {
271
+ setError(getErrorMessage(e));
272
+ throw e;
273
+ }
274
+ },
275
+ [cactusSTT]
276
+ );
277
+
278
+ const streamTranscribeProcess = useCallback(
279
+ async ({
280
+ options,
281
+ }: CactusSTTStreamTranscribeProcessParams = {}): Promise<CactusSTTStreamTranscribeProcessResult> => {
282
+ setError(null);
283
+ try {
284
+ const result = await cactusSTT.streamTranscribeProcess({ options });
285
+ setStreamTranscribeConfirmed((prev) => prev + result.confirmed);
286
+ setStreamTranscribePending(result.pending);
287
+ return result;
288
+ } catch (e) {
289
+ setError(getErrorMessage(e));
290
+ throw e;
291
+ }
292
+ },
293
+ [cactusSTT]
294
+ );
295
+
296
+ const streamTranscribeFinalize =
297
+ useCallback(async (): Promise<CactusSTTStreamTranscribeFinalizeResult> => {
298
+ setError(null);
299
+ try {
300
+ const result = await cactusSTT.streamTranscribeFinalize();
301
+ setStreamTranscribeConfirmed((prev) => prev + result.confirmed);
302
+ setStreamTranscribePending('');
303
+ setIsStreamTranscribing(false);
304
+ return result;
305
+ } catch (e) {
306
+ setError(getErrorMessage(e));
307
+ throw e;
308
+ }
309
+ }, [cactusSTT]);
310
+
311
+ const streamTranscribeDestroy = useCallback(async (): Promise<void> => {
312
+ setError(null);
313
+ try {
314
+ await cactusSTT.streamTranscribeDestroy();
315
+ } catch (e) {
316
+ setError(getErrorMessage(e));
317
+ throw e;
318
+ } finally {
319
+ setIsStreamTranscribing(false);
320
+ setStreamTranscribePending('');
321
+ }
322
+ }, [cactusSTT]);
323
+
223
324
  const stop = useCallback(async () => {
224
325
  setError(null);
225
326
  try {
@@ -251,10 +352,13 @@ export const useCactusSTT = ({
251
352
  throw e;
252
353
  } finally {
253
354
  setTranscription('');
355
+ setStreamTranscribeConfirmed('');
356
+ setStreamTranscribePending('');
357
+ setIsStreamTranscribing(false);
254
358
  }
255
359
  }, [cactusSTT]);
256
360
 
257
- const getModels = useCallback(async (): Promise<CactusSTTModel[]> => {
361
+ const getModels = useCallback(async (): Promise<CactusModel[]> => {
258
362
  setError(null);
259
363
  try {
260
364
  return await cactusSTT.getModels();
@@ -266,7 +370,10 @@ export const useCactusSTT = ({
266
370
 
267
371
  return {
268
372
  transcription,
373
+ streamTranscribeConfirmed,
374
+ streamTranscribePending,
269
375
  isGenerating,
376
+ isStreamTranscribing,
270
377
  isInitializing,
271
378
  isDownloaded,
272
379
  isDownloading,
@@ -277,6 +384,11 @@ export const useCactusSTT = ({
277
384
  init,
278
385
  transcribe,
279
386
  audioEmbed,
387
+ streamTranscribeInit,
388
+ streamTranscribeInsert,
389
+ streamTranscribeProcess,
390
+ streamTranscribeFinalize,
391
+ streamTranscribeDestroy,
280
392
  reset,
281
393
  stop,
282
394
  destroy,
package/src/index.tsx CHANGED
@@ -1,14 +1,15 @@
1
1
  // Classes
2
2
  export { CactusLM } from './classes/CactusLM';
3
3
  export { CactusSTT } from './classes/CactusSTT';
4
+ export { CactusIndex } from './classes/CactusIndex';
4
5
 
5
6
  // Hooks
6
7
  export { useCactusLM } from './hooks/useCactusLM';
7
8
  export { useCactusSTT } from './hooks/useCactusSTT';
9
+ export { useCactusIndex } from './hooks/useCactusIndex';
8
10
 
9
11
  // Types
10
- export type { CactusModel } from './types/CactusModel';
11
- export type { CactusSTTModel } from './types/CactusSTTModel';
12
+ export type { CactusModel, ModelOptions } from './types/common';
12
13
  export type {
13
14
  CactusLMParams,
14
15
  CactusLMDownloadParams,
@@ -17,6 +18,10 @@ export type {
17
18
  Tool,
18
19
  CactusLMCompleteParams,
19
20
  CactusLMCompleteResult,
21
+ CactusLMTokenizeParams,
22
+ CactusLMTokenizeResult,
23
+ CactusLMScoreWindowParams,
24
+ CactusLMScoreWindowResult,
20
25
  CactusLMEmbedParams,
21
26
  CactusLMEmbedResult,
22
27
  CactusLMImageEmbedParams,
@@ -30,7 +35,22 @@ export type {
30
35
  CactusSTTTranscribeResult,
31
36
  CactusSTTAudioEmbedParams,
32
37
  CactusSTTAudioEmbedResult,
38
+ CactusSTTStreamTranscribeInsertParams,
39
+ StreamTranscribeProcessOptions,
40
+ CactusSTTStreamTranscribeProcessParams,
41
+ CactusSTTStreamTranscribeProcessResult,
42
+ CactusSTTStreamTranscribeFinalizeResult,
33
43
  } from './types/CactusSTT';
44
+ export type {
45
+ CactusIndexParams,
46
+ CactusIndexAddParams,
47
+ CactusIndexGetParams,
48
+ CactusIndexGetResult,
49
+ IndexQueryOptions,
50
+ CactusIndexQueryParams,
51
+ CactusIndexQueryResult,
52
+ CactusIndexDeleteParams,
53
+ } from './types/CactusIndex';
34
54
 
35
55
  // Config
36
56
  export { CactusConfig } from './config/CactusConfig';