cactus-react-native 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -10
- package/android/src/main/java/com/margelo/nitro/cactus/HybridCactusFileSystem.kt +1 -3
- package/android/src/main/jniLibs/arm64-v8a/libcactus.a +0 -0
- package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/engine.h +2 -2
- package/ios/cactus.xcframework/ios-arm64/cactus.framework/Headers/graph.h +46 -6
- package/ios/cactus.xcframework/ios-arm64/cactus.framework/cactus +0 -0
- package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/engine.h +2 -2
- package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/Headers/graph.h +46 -6
- package/ios/cactus.xcframework/ios-arm64-simulator/cactus.framework/cactus +0 -0
- package/lib/module/api/Database.js +45 -0
- package/lib/module/api/Database.js.map +1 -1
- package/lib/module/classes/CactusLM.js +0 -5
- package/lib/module/classes/CactusLM.js.map +1 -1
- package/lib/module/classes/CactusSTT.js +8 -10
- package/lib/module/classes/CactusSTT.js.map +1 -1
- package/lib/module/constants/packageVersion.js +1 -1
- package/lib/module/hooks/useCactusSTT.js +7 -7
- package/lib/module/hooks/useCactusSTT.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/native/Cactus.js +8 -3
- package/lib/module/native/Cactus.js.map +1 -1
- package/lib/module/types/CactusSTTModel.js +2 -0
- package/lib/module/types/CactusSTTModel.js.map +1 -0
- package/lib/typescript/src/api/Database.d.ts +3 -0
- package/lib/typescript/src/api/Database.d.ts.map +1 -1
- package/lib/typescript/src/classes/CactusLM.d.ts +0 -1
- package/lib/typescript/src/classes/CactusLM.d.ts.map +1 -1
- package/lib/typescript/src/classes/CactusSTT.d.ts +3 -3
- package/lib/typescript/src/classes/CactusSTT.d.ts.map +1 -1
- package/lib/typescript/src/constants/packageVersion.d.ts +1 -1
- package/lib/typescript/src/hooks/useCactusSTT.d.ts +3 -3
- package/lib/typescript/src/hooks/useCactusSTT.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/native/Cactus.d.ts.map +1 -1
- package/lib/typescript/src/types/CactusModel.d.ts +1 -0
- package/lib/typescript/src/types/CactusModel.d.ts.map +1 -1
- package/lib/typescript/src/types/CactusSTTModel.d.ts +8 -0
- package/lib/typescript/src/types/CactusSTTModel.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/api/Database.ts +66 -0
- package/src/classes/CactusLM.ts +0 -6
- package/src/classes/CactusSTT.ts +14 -13
- package/src/constants/packageVersion.ts +1 -1
- package/src/hooks/useCactusSTT.ts +9 -9
- package/src/index.tsx +1 -0
- package/src/native/Cactus.ts +11 -3
- package/src/types/CactusModel.ts +1 -0
- package/src/types/CactusSTTModel.ts +10 -0
package/README.md
CHANGED
|
@@ -460,7 +460,7 @@ const App = () => {
|
|
|
460
460
|
return (
|
|
461
461
|
<>
|
|
462
462
|
<Button onPress={handleTranscribe} title="Transcribe" />
|
|
463
|
-
<Text>{cactusSTT.
|
|
463
|
+
<Text>{cactusSTT.transcription}</Text>
|
|
464
464
|
</>
|
|
465
465
|
);
|
|
466
466
|
};
|
|
@@ -577,7 +577,7 @@ Releases all resources associated with the model. Automatically calls `stop()` f
|
|
|
577
577
|
|
|
578
578
|
**`getModels(): Promise<CactusModel[]>`**
|
|
579
579
|
|
|
580
|
-
Fetches available models from the database and checks their download status.
|
|
580
|
+
Fetches available models from the database and checks their download status.
|
|
581
581
|
|
|
582
582
|
### useCactusLM Hook
|
|
583
583
|
|
|
@@ -603,7 +603,7 @@ The `useCactusLM` hook manages a `CactusLM` instance with reactive state. When m
|
|
|
603
603
|
- `stop(): Promise<void>` - Stops ongoing generation. Clears any errors.
|
|
604
604
|
- `reset(): Promise<void>` - Resets the model's internal state, clearing cached context. Also clears the `completion` state.
|
|
605
605
|
- `destroy(): Promise<void>` - Releases all resources associated with the model. Clears the `completion` state. Automatically called when the component unmounts.
|
|
606
|
-
- `getModels(): Promise<CactusModel[]>` - Fetches available models from the database and checks their download status.
|
|
606
|
+
- `getModels(): Promise<CactusModel[]>` - Fetches available models from the database and checks their download status.
|
|
607
607
|
|
|
608
608
|
### CactusSTT Class
|
|
609
609
|
|
|
@@ -662,9 +662,9 @@ Resets the model's internal state. Automatically calls `stop()` first.
|
|
|
662
662
|
|
|
663
663
|
Releases all resources associated with the model. Automatically calls `stop()` first. Safe to call even if the model is not initialized.
|
|
664
664
|
|
|
665
|
-
**`getModels(): Promise<
|
|
665
|
+
**`getModels(): Promise<CactusSTTModel[]>`**
|
|
666
666
|
|
|
667
|
-
Fetches available models from the database and checks their download status.
|
|
667
|
+
Fetches available STT models from the database and checks their download status.
|
|
668
668
|
|
|
669
669
|
### useCactusSTT Hook
|
|
670
670
|
|
|
@@ -672,7 +672,7 @@ The `useCactusSTT` hook manages a `CactusSTT` instance with reactive state. When
|
|
|
672
672
|
|
|
673
673
|
#### State
|
|
674
674
|
|
|
675
|
-
- `
|
|
675
|
+
- `transcription: string` - Current transcription text. Automatically accumulated during streaming. Cleared before each new transcription and when calling `reset()` or `destroy()`.
|
|
676
676
|
- `isGenerating: boolean` - Whether the model is currently generating (transcription or embedding). Both operations share this flag.
|
|
677
677
|
- `isInitializing: boolean` - Whether the model is initializing.
|
|
678
678
|
- `isDownloaded: boolean` - Whether the model is downloaded locally. Automatically checked when the hook mounts or model changes.
|
|
@@ -684,12 +684,12 @@ The `useCactusSTT` hook manages a `CactusSTT` instance with reactive state. When
|
|
|
684
684
|
|
|
685
685
|
- `download(params?: CactusSTTDownloadParams): Promise<void>` - Downloads the model. Updates `isDownloading` and `downloadProgress` state during download. Sets `isDownloaded` to `true` on success.
|
|
686
686
|
- `init(): Promise<void>` - Initializes the model for inference. Sets `isInitializing` to `true` during initialization.
|
|
687
|
-
- `transcribe(params: CactusSTTTranscribeParams): Promise<CactusSTTTranscribeResult>` - Transcribes audio to text. Automatically accumulates tokens in the `
|
|
687
|
+
- `transcribe(params: CactusSTTTranscribeParams): Promise<CactusSTTTranscribeResult>` - Transcribes audio to text. Automatically accumulates tokens in the `transcription` state during streaming. Sets `isGenerating` to `true` while generating. Clears `transcription` before starting.
|
|
688
688
|
- `audioEmbed(params: CactusSTTAudioEmbedParams): Promise<CactusSTTAudioEmbedResult>` - Generates embeddings for the given audio. Sets `isGenerating` to `true` during operation.
|
|
689
689
|
- `stop(): Promise<void>` - Stops ongoing generation. Clears any errors.
|
|
690
|
-
- `reset(): Promise<void>` - Resets the model's internal state. Also clears the `
|
|
691
|
-
- `destroy(): Promise<void>` - Releases all resources associated with the model. Clears the `
|
|
692
|
-
- `getModels(): Promise<
|
|
690
|
+
- `reset(): Promise<void>` - Resets the model's internal state. Also clears the `transcription` state.
|
|
691
|
+
- `destroy(): Promise<void>` - Releases all resources associated with the model. Clears the `transcription` state. Automatically called when the component unmounts.
|
|
692
|
+
- `getModels(): Promise<CactusSTTModel[]>` - Fetches available STT models from the database and checks their download status.
|
|
693
693
|
|
|
694
694
|
## Type Definitions
|
|
695
695
|
|
|
@@ -826,6 +826,19 @@ interface CactusModel {
|
|
|
826
826
|
downloadUrl: string;
|
|
827
827
|
supportsToolCalling: boolean;
|
|
828
828
|
supportsVision: boolean;
|
|
829
|
+
supportsCompletion: boolean;
|
|
830
|
+
createdAt: Date;
|
|
831
|
+
isDownloaded: boolean;
|
|
832
|
+
}
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
### CactusSTTModel
|
|
836
|
+
|
|
837
|
+
```typescript
|
|
838
|
+
interface CactusSTTModel {
|
|
839
|
+
slug: string;
|
|
840
|
+
sizeMb: number;
|
|
841
|
+
downloadUrl: string;
|
|
829
842
|
createdAt: Date;
|
|
830
843
|
isDownloaded: boolean;
|
|
831
844
|
}
|
|
@@ -210,9 +210,7 @@ class HybridCactusFileSystem : HybridCactusFileSystemSpec() {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
private fun cactusFile(): File {
|
|
213
|
-
val
|
|
214
|
-
context.getExternalFilesDir(android.os.Environment.DIRECTORY_DOCUMENTS) ?: context.filesDir
|
|
215
|
-
val cactusDir = File(documentsDir, "cactus")
|
|
213
|
+
val cactusDir = File(context.filesDir, "cactus")
|
|
216
214
|
|
|
217
215
|
if (!cactusDir.exists()) {
|
|
218
216
|
cactusDir.mkdirs()
|
|
Binary file
|
|
@@ -319,7 +319,7 @@ private:
|
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
struct KVCache {
|
|
322
|
-
static constexpr size_t DEFAULT_WINDOW_SIZE =
|
|
322
|
+
static constexpr size_t DEFAULT_WINDOW_SIZE = 1024;
|
|
323
323
|
static constexpr size_t DEFAULT_SINK_SIZE = 4;
|
|
324
324
|
|
|
325
325
|
struct LayerCache {
|
|
@@ -387,7 +387,7 @@ public:
|
|
|
387
387
|
const std::string& system_prompt = "", bool do_warmup = true);
|
|
388
388
|
|
|
389
389
|
virtual uint32_t generate(const std::vector<uint32_t>& tokens, float temperature = -1.0f, float top_p = -1.0f,
|
|
390
|
-
size_t top_k = 0, const std::string& profile_file = "");
|
|
390
|
+
size_t top_k = 0, const std::string& profile_file = "", bool prefill_only = false);
|
|
391
391
|
|
|
392
392
|
virtual uint32_t generate_with_images(const std::vector<uint32_t>& tokens, const std::vector<std::string>& image_paths,
|
|
393
393
|
float temperature = -1.0f, float top_p = -1.0f,
|
|
@@ -92,32 +92,44 @@ struct TensorConfig {
|
|
|
92
92
|
struct BroadcastInfo {
|
|
93
93
|
std::vector<size_t> output_shape;
|
|
94
94
|
bool needs_broadcasting;
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
static BroadcastInfo compute(const std::vector<size_t>& lhs, const std::vector<size_t>& rhs);
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
+
class BufferPool;
|
|
100
|
+
|
|
99
101
|
struct BufferDesc {
|
|
100
102
|
std::vector<size_t> shape;
|
|
101
103
|
size_t total_size;
|
|
102
104
|
size_t byte_size;
|
|
103
105
|
std::unique_ptr<char[]> data;
|
|
104
106
|
void* external_data;
|
|
107
|
+
char* pooled_data;
|
|
105
108
|
Precision precision;
|
|
106
109
|
float quantization_scale;
|
|
107
|
-
|
|
110
|
+
|
|
108
111
|
BufferDesc();
|
|
109
112
|
BufferDesc(const std::vector<size_t>& s, Precision prec = Precision::INT8, float scale = 1.0f);
|
|
110
|
-
|
|
113
|
+
~BufferDesc();
|
|
114
|
+
|
|
115
|
+
BufferDesc(BufferDesc&& other) noexcept;
|
|
116
|
+
BufferDesc& operator=(BufferDesc&& other) noexcept;
|
|
117
|
+
|
|
118
|
+
BufferDesc(const BufferDesc&) = delete;
|
|
119
|
+
BufferDesc& operator=(const BufferDesc&) = delete;
|
|
120
|
+
|
|
111
121
|
void* get_data();
|
|
112
122
|
const void* get_data() const;
|
|
113
|
-
|
|
123
|
+
|
|
114
124
|
template<typename T>
|
|
115
125
|
T* data_as() { return static_cast<T*>(get_data()); }
|
|
116
|
-
|
|
126
|
+
|
|
117
127
|
template<typename T>
|
|
118
128
|
const T* data_as() const { return static_cast<const T*>(get_data()); }
|
|
119
|
-
|
|
129
|
+
|
|
120
130
|
void allocate();
|
|
131
|
+
void allocate_from_pool(BufferPool& pool);
|
|
132
|
+
void release_to_pool(BufferPool& pool);
|
|
121
133
|
void set_external(void* ptr);
|
|
122
134
|
};
|
|
123
135
|
|
|
@@ -181,6 +193,33 @@ void compute_topk_node(GraphNode& node, const std::vector<std::unique_ptr<GraphN
|
|
|
181
193
|
void compute_layernorm_node(GraphNode& node, const std::vector<std::unique_ptr<GraphNode>>& nodes, const std::unordered_map<size_t, size_t>& node_index_map);
|
|
182
194
|
void compute_index_node(GraphNode& node, const std::vector<std::unique_ptr<GraphNode>>& nodes, const std::unordered_map<size_t, size_t>& node_index_map);
|
|
183
195
|
|
|
196
|
+
void shrink_thread_local_buffers();
|
|
197
|
+
|
|
198
|
+
class BufferPool {
|
|
199
|
+
public:
|
|
200
|
+
BufferPool() = default;
|
|
201
|
+
~BufferPool() = default;
|
|
202
|
+
|
|
203
|
+
BufferPool(const BufferPool&) = delete;
|
|
204
|
+
BufferPool& operator=(const BufferPool&) = delete;
|
|
205
|
+
|
|
206
|
+
char* acquire(size_t byte_size);
|
|
207
|
+
void release(char* ptr, size_t byte_size);
|
|
208
|
+
void clear();
|
|
209
|
+
|
|
210
|
+
size_t active_bytes() const { return active_bytes_; }
|
|
211
|
+
size_t pool_bytes() const { return pool_bytes_; }
|
|
212
|
+
size_t peak_bytes() const { return peak_bytes_; }
|
|
213
|
+
|
|
214
|
+
private:
|
|
215
|
+
std::unordered_map<size_t, std::vector<std::unique_ptr<char[]>>> free_buffers_;
|
|
216
|
+
size_t active_bytes_ = 0;
|
|
217
|
+
size_t pool_bytes_ = 0;
|
|
218
|
+
size_t peak_bytes_ = 0;
|
|
219
|
+
|
|
220
|
+
size_t round_up_size(size_t size) const;
|
|
221
|
+
};
|
|
222
|
+
|
|
184
223
|
namespace ValidationUtils {
|
|
185
224
|
void validate_tensor_dims(const std::vector<size_t>& shape, size_t required_dims, const std::string& op_name);
|
|
186
225
|
void validate_precision(Precision actual, Precision required, const std::string& op_name);
|
|
@@ -286,6 +325,7 @@ private:
|
|
|
286
325
|
std::vector<std::unique_ptr<GraphFile::MappedFile>> mapped_files_;
|
|
287
326
|
std::unordered_map<std::string, size_t> weight_cache_;
|
|
288
327
|
std::vector<DebugNodeEntry> debug_nodes_;
|
|
328
|
+
BufferPool buffer_pool_;
|
|
289
329
|
};
|
|
290
330
|
|
|
291
331
|
|
|
Binary file
|
|
@@ -319,7 +319,7 @@ private:
|
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
struct KVCache {
|
|
322
|
-
static constexpr size_t DEFAULT_WINDOW_SIZE =
|
|
322
|
+
static constexpr size_t DEFAULT_WINDOW_SIZE = 1024;
|
|
323
323
|
static constexpr size_t DEFAULT_SINK_SIZE = 4;
|
|
324
324
|
|
|
325
325
|
struct LayerCache {
|
|
@@ -387,7 +387,7 @@ public:
|
|
|
387
387
|
const std::string& system_prompt = "", bool do_warmup = true);
|
|
388
388
|
|
|
389
389
|
virtual uint32_t generate(const std::vector<uint32_t>& tokens, float temperature = -1.0f, float top_p = -1.0f,
|
|
390
|
-
size_t top_k = 0, const std::string& profile_file = "");
|
|
390
|
+
size_t top_k = 0, const std::string& profile_file = "", bool prefill_only = false);
|
|
391
391
|
|
|
392
392
|
virtual uint32_t generate_with_images(const std::vector<uint32_t>& tokens, const std::vector<std::string>& image_paths,
|
|
393
393
|
float temperature = -1.0f, float top_p = -1.0f,
|
|
@@ -92,32 +92,44 @@ struct TensorConfig {
|
|
|
92
92
|
struct BroadcastInfo {
|
|
93
93
|
std::vector<size_t> output_shape;
|
|
94
94
|
bool needs_broadcasting;
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
static BroadcastInfo compute(const std::vector<size_t>& lhs, const std::vector<size_t>& rhs);
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
+
class BufferPool;
|
|
100
|
+
|
|
99
101
|
struct BufferDesc {
|
|
100
102
|
std::vector<size_t> shape;
|
|
101
103
|
size_t total_size;
|
|
102
104
|
size_t byte_size;
|
|
103
105
|
std::unique_ptr<char[]> data;
|
|
104
106
|
void* external_data;
|
|
107
|
+
char* pooled_data;
|
|
105
108
|
Precision precision;
|
|
106
109
|
float quantization_scale;
|
|
107
|
-
|
|
110
|
+
|
|
108
111
|
BufferDesc();
|
|
109
112
|
BufferDesc(const std::vector<size_t>& s, Precision prec = Precision::INT8, float scale = 1.0f);
|
|
110
|
-
|
|
113
|
+
~BufferDesc();
|
|
114
|
+
|
|
115
|
+
BufferDesc(BufferDesc&& other) noexcept;
|
|
116
|
+
BufferDesc& operator=(BufferDesc&& other) noexcept;
|
|
117
|
+
|
|
118
|
+
BufferDesc(const BufferDesc&) = delete;
|
|
119
|
+
BufferDesc& operator=(const BufferDesc&) = delete;
|
|
120
|
+
|
|
111
121
|
void* get_data();
|
|
112
122
|
const void* get_data() const;
|
|
113
|
-
|
|
123
|
+
|
|
114
124
|
template<typename T>
|
|
115
125
|
T* data_as() { return static_cast<T*>(get_data()); }
|
|
116
|
-
|
|
126
|
+
|
|
117
127
|
template<typename T>
|
|
118
128
|
const T* data_as() const { return static_cast<const T*>(get_data()); }
|
|
119
|
-
|
|
129
|
+
|
|
120
130
|
void allocate();
|
|
131
|
+
void allocate_from_pool(BufferPool& pool);
|
|
132
|
+
void release_to_pool(BufferPool& pool);
|
|
121
133
|
void set_external(void* ptr);
|
|
122
134
|
};
|
|
123
135
|
|
|
@@ -181,6 +193,33 @@ void compute_topk_node(GraphNode& node, const std::vector<std::unique_ptr<GraphN
|
|
|
181
193
|
void compute_layernorm_node(GraphNode& node, const std::vector<std::unique_ptr<GraphNode>>& nodes, const std::unordered_map<size_t, size_t>& node_index_map);
|
|
182
194
|
void compute_index_node(GraphNode& node, const std::vector<std::unique_ptr<GraphNode>>& nodes, const std::unordered_map<size_t, size_t>& node_index_map);
|
|
183
195
|
|
|
196
|
+
void shrink_thread_local_buffers();
|
|
197
|
+
|
|
198
|
+
class BufferPool {
|
|
199
|
+
public:
|
|
200
|
+
BufferPool() = default;
|
|
201
|
+
~BufferPool() = default;
|
|
202
|
+
|
|
203
|
+
BufferPool(const BufferPool&) = delete;
|
|
204
|
+
BufferPool& operator=(const BufferPool&) = delete;
|
|
205
|
+
|
|
206
|
+
char* acquire(size_t byte_size);
|
|
207
|
+
void release(char* ptr, size_t byte_size);
|
|
208
|
+
void clear();
|
|
209
|
+
|
|
210
|
+
size_t active_bytes() const { return active_bytes_; }
|
|
211
|
+
size_t pool_bytes() const { return pool_bytes_; }
|
|
212
|
+
size_t peak_bytes() const { return peak_bytes_; }
|
|
213
|
+
|
|
214
|
+
private:
|
|
215
|
+
std::unordered_map<size_t, std::vector<std::unique_ptr<char[]>>> free_buffers_;
|
|
216
|
+
size_t active_bytes_ = 0;
|
|
217
|
+
size_t pool_bytes_ = 0;
|
|
218
|
+
size_t peak_bytes_ = 0;
|
|
219
|
+
|
|
220
|
+
size_t round_up_size(size_t size) const;
|
|
221
|
+
};
|
|
222
|
+
|
|
184
223
|
namespace ValidationUtils {
|
|
185
224
|
void validate_tensor_dims(const std::vector<size_t>& shape, size_t required_dims, const std::string& op_name);
|
|
186
225
|
void validate_precision(Precision actual, Precision required, const std::string& op_name);
|
|
@@ -286,6 +325,7 @@ private:
|
|
|
286
325
|
std::vector<std::unique_ptr<GraphFile::MappedFile>> mapped_files_;
|
|
287
326
|
std::unordered_map<std::string, size_t> weight_cache_;
|
|
288
327
|
std::vector<DebugNodeEntry> debug_nodes_;
|
|
328
|
+
BufferPool buffer_pool_;
|
|
289
329
|
};
|
|
290
330
|
|
|
291
331
|
|
|
Binary file
|
|
@@ -52,6 +52,30 @@ export class Database {
|
|
|
52
52
|
downloadUrl: model.download_url,
|
|
53
53
|
supportsToolCalling: model.supports_tool_calling,
|
|
54
54
|
supportsVision: model.supports_vision,
|
|
55
|
+
supportsCompletion: model.supports_completion,
|
|
56
|
+
createdAt: model.created_at,
|
|
57
|
+
isDownloaded: false
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
static async getSTTModel(slug) {
|
|
61
|
+
const response = await fetch(`${this.url}/rest/v1/whisper?slug=eq.${slug}&select=*`, {
|
|
62
|
+
headers: {
|
|
63
|
+
'apikey': this.key,
|
|
64
|
+
'Authorization': `Bearer ${this.key}`,
|
|
65
|
+
'Accept-Profile': 'cactus'
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
throw new Error('Getting STT model failed');
|
|
70
|
+
}
|
|
71
|
+
const [model] = await response.json();
|
|
72
|
+
if (!model) {
|
|
73
|
+
throw new Error(`STT model with slug "${slug}" not found`);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
slug: model.slug,
|
|
77
|
+
downloadUrl: model.download_url,
|
|
78
|
+
sizeMb: model.size_mb,
|
|
55
79
|
createdAt: model.created_at,
|
|
56
80
|
isDownloaded: false
|
|
57
81
|
};
|
|
@@ -75,6 +99,27 @@ export class Database {
|
|
|
75
99
|
downloadUrl: model.download_url,
|
|
76
100
|
supportsToolCalling: model.supports_tool_calling,
|
|
77
101
|
supportsVision: model.supports_vision,
|
|
102
|
+
supportsCompletion: model.supports_completion,
|
|
103
|
+
createdAt: model.created_at,
|
|
104
|
+
isDownloaded: false
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
static async getSTTModels() {
|
|
108
|
+
const response = await fetch(`${this.url}/rest/v1/whisper?select=*`, {
|
|
109
|
+
headers: {
|
|
110
|
+
'apikey': this.key,
|
|
111
|
+
'Authorization': `Bearer ${this.key}`,
|
|
112
|
+
'Accept-Profile': 'cactus'
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error('Getting STT models failed');
|
|
117
|
+
}
|
|
118
|
+
const models = await response.json();
|
|
119
|
+
return models.map(model => ({
|
|
120
|
+
slug: model.slug,
|
|
121
|
+
downloadUrl: model.download_url,
|
|
122
|
+
sizeMb: model.size_mb,
|
|
78
123
|
createdAt: model.created_at,
|
|
79
124
|
isDownloaded: false
|
|
80
125
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CactusUtil","packageVersion","Database","url","key","sendLogRecords","records","response","fetch","method","headers","body","JSON","stringify","ok","Error","registerDevice","device_data","registerApp","text","getModel","slug","apikey","Authorization","model","json","name","quantization","sizeMb","size_mb","downloadUrl","download_url","supportsToolCalling","supports_tool_calling","supportsVision","supports_vision","createdAt","created_at","isDownloaded","getModels","models","map"],"sourceRoot":"../../../src","sources":["api/Database.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,oBAAW;AAGtC,SAASC,cAAc,QAAQ,gCAA6B;
|
|
1
|
+
{"version":3,"names":["CactusUtil","packageVersion","Database","url","key","sendLogRecords","records","response","fetch","method","headers","body","JSON","stringify","ok","Error","registerDevice","device_data","registerApp","text","getModel","slug","apikey","Authorization","model","json","name","quantization","sizeMb","size_mb","downloadUrl","download_url","supportsToolCalling","supports_tool_calling","supportsVision","supports_vision","supportsCompletion","supports_completion","createdAt","created_at","isDownloaded","getSTTModel","getModels","models","map","getSTTModels"],"sourceRoot":"../../../src","sources":["api/Database.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,7 +18,6 @@ export class CactusLM {
|
|
|
18
18
|
};
|
|
19
19
|
static defaultCompleteMode = 'local';
|
|
20
20
|
static defaultEmbedBufferSize = 2048;
|
|
21
|
-
static cactusModelsCache = null;
|
|
22
21
|
constructor({
|
|
23
22
|
model,
|
|
24
23
|
contextSize,
|
|
@@ -163,14 +162,10 @@ export class CactusLM {
|
|
|
163
162
|
this.isInitialized = false;
|
|
164
163
|
}
|
|
165
164
|
async getModels() {
|
|
166
|
-
if (CactusLM.cactusModelsCache) {
|
|
167
|
-
return CactusLM.cactusModelsCache;
|
|
168
|
-
}
|
|
169
165
|
const models = await Database.getModels();
|
|
170
166
|
for (const model of models) {
|
|
171
167
|
model.isDownloaded = await CactusFileSystem.modelExists(model.slug);
|
|
172
168
|
}
|
|
173
|
-
CactusLM.cactusModelsCache = models;
|
|
174
169
|
return models;
|
|
175
170
|
}
|
|
176
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","RemoteLM","CactusLM","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultCompleteOptions","maxTokens","defaultCompleteMode","defaultEmbedBufferSize","
|
|
1
|
+
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","RemoteLM","CactusLM","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultCompleteOptions","maxTokens","defaultCompleteMode","defaultEmbedBufferSize","constructor","model","contextSize","corpusDir","init","telemetryToken","download","onProgress","Error","modelExists","getModel","downloadModel","downloadUrl","modelPath","getModelPath","logInit","error","complete","messages","options","tools","onToken","mode","toolsInternal","map","tool","type","function","responseBufferSize","result","logCompletion","success","undefined","response","localError","remoteError","embed","text","embedding","logEmbedding","imageEmbed","imagePath","logImageEmbedding","stop","reset","destroy","getModels","models","isDownloaded","slug"],"sourceRoot":"../../../src","sources":["classes/CactusLM.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,11 +12,11 @@ export class CactusSTT {
|
|
|
12
12
|
isGenerating = false;
|
|
13
13
|
static defaultModel = 'whisper-small';
|
|
14
14
|
static defaultContextSize = 2048;
|
|
15
|
+
static defaultPrompt = '<|startoftranscript|><|en|><|transcribe|><|notimestamps|>';
|
|
15
16
|
static defaultTranscribeOptions = {
|
|
16
17
|
maxTokens: 512
|
|
17
18
|
};
|
|
18
|
-
static defaultEmbedBufferSize =
|
|
19
|
-
static cactusModelsCache = null;
|
|
19
|
+
static defaultEmbedBufferSize = 4096;
|
|
20
20
|
constructor({
|
|
21
21
|
model,
|
|
22
22
|
contextSize
|
|
@@ -37,7 +37,8 @@ export class CactusSTT {
|
|
|
37
37
|
}
|
|
38
38
|
this.isDownloading = true;
|
|
39
39
|
try {
|
|
40
|
-
await
|
|
40
|
+
const model = await Database.getSTTModel(this.model);
|
|
41
|
+
await CactusFileSystem.downloadModel(this.model, model.downloadUrl, onProgress);
|
|
41
42
|
} finally {
|
|
42
43
|
this.isDownloading = false;
|
|
43
44
|
}
|
|
@@ -61,7 +62,7 @@ export class CactusSTT {
|
|
|
61
62
|
}
|
|
62
63
|
async transcribe({
|
|
63
64
|
audioFilePath,
|
|
64
|
-
prompt
|
|
65
|
+
prompt,
|
|
65
66
|
options,
|
|
66
67
|
onToken
|
|
67
68
|
}) {
|
|
@@ -69,11 +70,12 @@ export class CactusSTT {
|
|
|
69
70
|
throw new Error('CactusSTT is already generating');
|
|
70
71
|
}
|
|
71
72
|
await this.init();
|
|
73
|
+
prompt = prompt ?? CactusSTT.defaultPrompt;
|
|
72
74
|
options = {
|
|
73
75
|
...CactusSTT.defaultTranscribeOptions,
|
|
74
76
|
...options
|
|
75
77
|
};
|
|
76
|
-
const responseBufferSize =
|
|
78
|
+
const responseBufferSize = 8 * (options.maxTokens ?? CactusSTT.defaultTranscribeOptions.maxTokens) + 256;
|
|
77
79
|
this.isGenerating = true;
|
|
78
80
|
try {
|
|
79
81
|
const result = await this.cactus.transcribe(audioFilePath, prompt, responseBufferSize, options, onToken);
|
|
@@ -123,14 +125,10 @@ export class CactusSTT {
|
|
|
123
125
|
this.isInitialized = false;
|
|
124
126
|
}
|
|
125
127
|
async getModels() {
|
|
126
|
-
|
|
127
|
-
return CactusSTT.cactusModelsCache;
|
|
128
|
-
}
|
|
129
|
-
const models = await Database.getModels();
|
|
128
|
+
const models = await Database.getSTTModels();
|
|
130
129
|
for (const model of models) {
|
|
131
130
|
model.isDownloaded = await CactusFileSystem.modelExists(model.slug);
|
|
132
131
|
}
|
|
133
|
-
CactusSTT.cactusModelsCache = models;
|
|
134
132
|
return models;
|
|
135
133
|
}
|
|
136
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","CactusSTT","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultTranscribeOptions","maxTokens","defaultEmbedBufferSize","
|
|
1
|
+
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","CactusSTT","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultPrompt","defaultTranscribeOptions","maxTokens","defaultEmbedBufferSize","constructor","model","contextSize","init","telemetryToken","download","onProgress","Error","modelExists","getSTTModel","downloadModel","downloadUrl","modelPath","getModelPath","logInit","error","transcribe","audioFilePath","prompt","options","onToken","responseBufferSize","result","logTranscribe","success","undefined","response","audioEmbed","audioPath","embedding","logAudioEmbedding","stop","reset","destroy","getModels","models","getSTTModels","isDownloaded","slug"],"sourceRoot":"../../../src","sources":["classes/CactusSTT.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@ export const useCactusSTT = ({
|
|
|
14
14
|
}));
|
|
15
15
|
|
|
16
16
|
// State
|
|
17
|
-
const [
|
|
17
|
+
const [transcription, setTranscription] = useState('');
|
|
18
18
|
const [isGenerating, setIsGenerating] = useState(false);
|
|
19
19
|
const [isInitializing, setIsInitializing] = useState(false);
|
|
20
20
|
const [isDownloaded, setIsDownloaded] = useState(false);
|
|
@@ -31,7 +31,7 @@ export const useCactusSTT = ({
|
|
|
31
31
|
model,
|
|
32
32
|
contextSize
|
|
33
33
|
}));
|
|
34
|
-
|
|
34
|
+
setTranscription('');
|
|
35
35
|
setIsGenerating(false);
|
|
36
36
|
setIsInitializing(false);
|
|
37
37
|
setIsDownloaded(false);
|
|
@@ -133,7 +133,7 @@ export const useCactusSTT = ({
|
|
|
133
133
|
throw new Error(message);
|
|
134
134
|
}
|
|
135
135
|
setError(null);
|
|
136
|
-
|
|
136
|
+
setTranscription('');
|
|
137
137
|
setIsGenerating(true);
|
|
138
138
|
try {
|
|
139
139
|
return await cactusSTT.transcribe({
|
|
@@ -141,7 +141,7 @@ export const useCactusSTT = ({
|
|
|
141
141
|
prompt,
|
|
142
142
|
options,
|
|
143
143
|
onToken: token => {
|
|
144
|
-
|
|
144
|
+
setTranscription(prev => prev + token);
|
|
145
145
|
onToken?.(token);
|
|
146
146
|
}
|
|
147
147
|
});
|
|
@@ -190,7 +190,7 @@ export const useCactusSTT = ({
|
|
|
190
190
|
setError(getErrorMessage(e));
|
|
191
191
|
throw e;
|
|
192
192
|
} finally {
|
|
193
|
-
|
|
193
|
+
setTranscription('');
|
|
194
194
|
}
|
|
195
195
|
}, [cactusSTT]);
|
|
196
196
|
const destroy = useCallback(async () => {
|
|
@@ -201,7 +201,7 @@ export const useCactusSTT = ({
|
|
|
201
201
|
setError(getErrorMessage(e));
|
|
202
202
|
throw e;
|
|
203
203
|
} finally {
|
|
204
|
-
|
|
204
|
+
setTranscription('');
|
|
205
205
|
}
|
|
206
206
|
}, [cactusSTT]);
|
|
207
207
|
const getModels = useCallback(async () => {
|
|
@@ -214,7 +214,7 @@ export const useCactusSTT = ({
|
|
|
214
214
|
}
|
|
215
215
|
}, [cactusSTT]);
|
|
216
216
|
return {
|
|
217
|
-
|
|
217
|
+
transcription,
|
|
218
218
|
isGenerating,
|
|
219
219
|
isInitializing,
|
|
220
220
|
isDownloaded,
|