cactus-react-native 1.1.0 → 1.2.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.
- package/README.md +5 -5
- 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/classes/CactusSTT.js +5 -3
- 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/typescript/src/classes/CactusSTT.d.ts +1 -0
- 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 +1 -1
- package/package.json +1 -1
- package/src/classes/CactusSTT.ts +9 -3
- package/src/constants/packageVersion.ts +1 -1
- package/src/hooks/useCactusSTT.ts +7 -7
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
|
};
|
|
@@ -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,11 +684,11 @@ 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 `
|
|
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
692
|
- `getModels(): Promise<CactusModel[]>` - Fetches available models from the database and checks their download status. Results are cached in memory and reused on subsequent calls.
|
|
693
693
|
|
|
694
694
|
## Type Definitions
|
|
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
|
|
@@ -12,10 +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 defaultEmbedBufferSize = 4096;
|
|
19
20
|
static cactusModelsCache = null;
|
|
20
21
|
constructor({
|
|
21
22
|
model,
|
|
@@ -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);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","CactusSTT","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultTranscribeOptions","maxTokens","defaultEmbedBufferSize","cactusModelsCache","constructor","model","contextSize","init","telemetryToken","download","onProgress","Error","modelExists","downloadModel","modelPath","getModelPath","logInit","error","transcribe","audioFilePath","prompt","options","onToken","responseBufferSize","result","logTranscribe","success","undefined","response","audioEmbed","audioPath","embedding","logAudioEmbedding","stop","reset","destroy","getModels","models","isDownloaded","slug"],"sourceRoot":"../../../src","sources":["classes/CactusSTT.ts"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,gBAAgB,QAAQ,oBAAW;AAUpD,SAASC,SAAS,QAAQ,2BAAwB;AAClD,SAASC,YAAY,QAAQ,2BAAwB;AACrD,SAASC,QAAQ,QAAQ,oBAAiB;AAC1C,SAASC,eAAe,QAAQ,mBAAgB;AAEhD,OAAO,MAAMC,SAAS,CAAC;EACJC,MAAM,GAAG,IAAIP,MAAM,CAAC,CAAC;EAK9BQ,aAAa,GAAG,KAAK;EACrBC,aAAa,GAAG,KAAK;EACrBC,YAAY,GAAG,KAAK;EAE5B,OAAwBC,YAAY,GAAG,eAAe;EACtD,OAAwBC,kBAAkB,GAAG,IAAI;EACjD,OAAwBC,wBAAwB,GAAG;IACjDC,SAAS,EAAE;EACb,CAAC;EACD,OAAwBC,sBAAsB,GAAG,
|
|
1
|
+
{"version":3,"names":["Cactus","CactusFileSystem","Telemetry","CactusConfig","Database","getErrorMessage","CactusSTT","cactus","isDownloading","isInitialized","isGenerating","defaultModel","defaultContextSize","defaultPrompt","defaultTranscribeOptions","maxTokens","defaultEmbedBufferSize","cactusModelsCache","constructor","model","contextSize","init","telemetryToken","download","onProgress","Error","modelExists","downloadModel","modelPath","getModelPath","logInit","error","transcribe","audioFilePath","prompt","options","onToken","responseBufferSize","result","logTranscribe","success","undefined","response","audioEmbed","audioPath","embedding","logAudioEmbedding","stop","reset","destroy","getModels","models","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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useState","useRef","CactusSTT","CactusFileSystem","getErrorMessage","useCactusSTT","model","contextSize","cactusSTT","setCactusSTT","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useState","useRef","CactusSTT","CactusFileSystem","getErrorMessage","useCactusSTT","model","contextSize","cactusSTT","setCactusSTT","transcription","setTranscription","isGenerating","setIsGenerating","isInitializing","setIsInitializing","isDownloaded","setIsDownloaded","isDownloading","setIsDownloading","downloadProgress","setDownloadProgress","error","setError","currentModelRef","currentDownloadIdRef","current","mounted","modelExists","then","exists","catch","e","destroy","download","onProgress","message","Error","thisModel","thisDownloadId","progress","init","transcribe","audioFilePath","prompt","options","onToken","token","prev","audioEmbed","audioPath","stop","reset","getModels"],"sourceRoot":"../../../src","sources":["hooks/useCactusSTT.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ export declare class CactusSTT {
|
|
|
9
9
|
private isGenerating;
|
|
10
10
|
private static readonly defaultModel;
|
|
11
11
|
private static readonly defaultContextSize;
|
|
12
|
+
private static readonly defaultPrompt;
|
|
12
13
|
private static readonly defaultTranscribeOptions;
|
|
13
14
|
private static readonly defaultEmbedBufferSize;
|
|
14
15
|
private static cactusModelsCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CactusSTT.d.ts","sourceRoot":"","sources":["../../../../src/classes/CactusSTT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAmB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAE9C;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"CactusSTT.d.ts","sourceRoot":"","sources":["../../../../src/classes/CactusSTT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAmB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CACyB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAE9C;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAEtD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA8B;gBAElD,EAAE,KAAK,EAAE,WAAW,EAAE,GAAE,eAAoB;IAO3C,QAAQ,CAAC,EACpB,UAAU,GACX,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,UAAU,CAAC,EACtB,aAAa,EACb,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAsCpD,UAAU,CAAC,EACtB,SAAS,GACV,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAuB1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAWjD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const packageVersion = "1.
|
|
1
|
+
export declare const packageVersion = "1.2.0";
|
|
2
2
|
//# sourceMappingURL=packageVersion.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CactusSTTParams, CactusSTTTranscribeResult, CactusSTTTranscribeParams, CactusSTTDownloadParams, CactusSTTAudioEmbedParams, CactusSTTAudioEmbedResult } from '../types/CactusSTT';
|
|
2
2
|
import type { CactusModel } from '../types/CactusModel';
|
|
3
3
|
export declare const useCactusSTT: ({ model, contextSize, }?: CactusSTTParams) => {
|
|
4
|
-
|
|
4
|
+
transcription: string;
|
|
5
5
|
isGenerating: boolean;
|
|
6
6
|
isInitializing: boolean;
|
|
7
7
|
isDownloaded: boolean;
|
package/package.json
CHANGED
package/src/classes/CactusSTT.ts
CHANGED
|
@@ -25,10 +25,12 @@ export class CactusSTT {
|
|
|
25
25
|
|
|
26
26
|
private static readonly defaultModel = 'whisper-small';
|
|
27
27
|
private static readonly defaultContextSize = 2048;
|
|
28
|
+
private static readonly defaultPrompt =
|
|
29
|
+
'<|startoftranscript|><|en|><|transcribe|><|notimestamps|>';
|
|
28
30
|
private static readonly defaultTranscribeOptions = {
|
|
29
31
|
maxTokens: 512,
|
|
30
32
|
};
|
|
31
|
-
private static readonly defaultEmbedBufferSize =
|
|
33
|
+
private static readonly defaultEmbedBufferSize = 4096;
|
|
32
34
|
|
|
33
35
|
private static cactusModelsCache: CactusModel[] | null = null;
|
|
34
36
|
|
|
@@ -86,7 +88,7 @@ export class CactusSTT {
|
|
|
86
88
|
|
|
87
89
|
public async transcribe({
|
|
88
90
|
audioFilePath,
|
|
89
|
-
prompt
|
|
91
|
+
prompt,
|
|
90
92
|
options,
|
|
91
93
|
onToken,
|
|
92
94
|
}: CactusSTTTranscribeParams): Promise<CactusSTTTranscribeResult> {
|
|
@@ -96,8 +98,12 @@ export class CactusSTT {
|
|
|
96
98
|
|
|
97
99
|
await this.init();
|
|
98
100
|
|
|
101
|
+
prompt = prompt ?? CactusSTT.defaultPrompt;
|
|
99
102
|
options = { ...CactusSTT.defaultTranscribeOptions, ...options };
|
|
100
|
-
|
|
103
|
+
|
|
104
|
+
const responseBufferSize =
|
|
105
|
+
8 * (options.maxTokens ?? CactusSTT.defaultTranscribeOptions.maxTokens) +
|
|
106
|
+
256;
|
|
101
107
|
|
|
102
108
|
this.isGenerating = true;
|
|
103
109
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const packageVersion = '1.
|
|
1
|
+
export const packageVersion = '1.2.0';
|
|
@@ -21,7 +21,7 @@ export const useCactusSTT = ({
|
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
// State
|
|
24
|
-
const [
|
|
24
|
+
const [transcription, setTranscription] = useState('');
|
|
25
25
|
const [isGenerating, setIsGenerating] = useState(false);
|
|
26
26
|
const [isInitializing, setIsInitializing] = useState(false);
|
|
27
27
|
const [isDownloaded, setIsDownloaded] = useState(false);
|
|
@@ -39,7 +39,7 @@ export const useCactusSTT = ({
|
|
|
39
39
|
useEffect(() => {
|
|
40
40
|
setCactusSTT(new CactusSTT({ model, contextSize }));
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
setTranscription('');
|
|
43
43
|
setIsGenerating(false);
|
|
44
44
|
setIsInitializing(false);
|
|
45
45
|
setIsDownloaded(false);
|
|
@@ -174,7 +174,7 @@ export const useCactusSTT = ({
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
setError(null);
|
|
177
|
-
|
|
177
|
+
setTranscription('');
|
|
178
178
|
setIsGenerating(true);
|
|
179
179
|
try {
|
|
180
180
|
return await cactusSTT.transcribe({
|
|
@@ -182,7 +182,7 @@ export const useCactusSTT = ({
|
|
|
182
182
|
prompt,
|
|
183
183
|
options,
|
|
184
184
|
onToken: (token) => {
|
|
185
|
-
|
|
185
|
+
setTranscription((prev) => prev + token);
|
|
186
186
|
onToken?.(token);
|
|
187
187
|
},
|
|
188
188
|
});
|
|
@@ -238,7 +238,7 @@ export const useCactusSTT = ({
|
|
|
238
238
|
setError(getErrorMessage(e));
|
|
239
239
|
throw e;
|
|
240
240
|
} finally {
|
|
241
|
-
|
|
241
|
+
setTranscription('');
|
|
242
242
|
}
|
|
243
243
|
}, [cactusSTT]);
|
|
244
244
|
|
|
@@ -250,7 +250,7 @@ export const useCactusSTT = ({
|
|
|
250
250
|
setError(getErrorMessage(e));
|
|
251
251
|
throw e;
|
|
252
252
|
} finally {
|
|
253
|
-
|
|
253
|
+
setTranscription('');
|
|
254
254
|
}
|
|
255
255
|
}, [cactusSTT]);
|
|
256
256
|
|
|
@@ -265,7 +265,7 @@ export const useCactusSTT = ({
|
|
|
265
265
|
}, [cactusSTT]);
|
|
266
266
|
|
|
267
267
|
return {
|
|
268
|
-
|
|
268
|
+
transcription,
|
|
269
269
|
isGenerating,
|
|
270
270
|
isInitializing,
|
|
271
271
|
isDownloaded,
|