react-native-sherpa-onnx 0.3.7 → 0.3.8
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 +3 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +31 -4
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect.h +9 -1
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-tts-wrapper.cpp +7 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-tts.cpp +14 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +15 -0
- package/ios/SherpaOnnx+TTS.mm +1 -0
- package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +36 -4
- package/ios/model_detect/sherpa-onnx-model-detect.h +9 -1
- package/ios/model_detect/sherpa-onnx-validate-tts.mm +14 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.mm +9 -0
- package/lib/module/download/ModelDownloadManager.js +1 -1
- package/lib/module/download/ModelDownloadManager.js.map +1 -1
- package/lib/module/download/background-downloader-types.js +2 -0
- package/lib/module/download/background-downloader-types.js.map +1 -0
- package/lib/module/download/downloadTask.js +54 -1
- package/lib/module/download/downloadTask.js.map +1 -1
- package/lib/module/download/index.js +1 -1
- package/lib/module/download/index.js.map +1 -1
- package/lib/module/download/registry.js +1 -0
- package/lib/module/download/registry.js.map +1 -1
- package/lib/module/tts/index.js +1 -1
- package/lib/module/tts/index.js.map +1 -1
- package/lib/module/tts/streaming.js +1 -1
- package/lib/module/tts/streaming.js.map +1 -1
- package/lib/module/tts/types.js +4 -1
- package/lib/module/tts/types.js.map +1 -1
- package/lib/typescript/src/NativeSherpaOnnx.d.ts +1 -1
- package/lib/typescript/src/download/ModelDownloadManager.d.ts +2 -1
- package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -1
- package/lib/typescript/src/download/background-downloader-types.d.ts +64 -0
- package/lib/typescript/src/download/background-downloader-types.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadTask.d.ts +10 -0
- package/lib/typescript/src/download/downloadTask.d.ts.map +1 -1
- package/lib/typescript/src/download/index.d.ts +2 -2
- package/lib/typescript/src/download/index.d.ts.map +1 -1
- package/lib/typescript/src/download/registry.d.ts.map +1 -1
- package/lib/typescript/src/tts/index.d.ts +1 -1
- package/lib/typescript/src/tts/index.d.ts.map +1 -1
- package/lib/typescript/src/tts/streaming.d.ts.map +1 -1
- package/lib/typescript/src/tts/types.d.ts +6 -1
- package/lib/typescript/src/tts/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeSherpaOnnx.ts +1 -1
- package/src/download/ModelDownloadManager.ts +2 -0
- package/src/download/background-downloader-types.ts +73 -0
- package/src/download/downloadTask.ts +68 -0
- package/src/download/index.ts +2 -0
- package/src/download/registry.ts +1 -0
- package/src/tts/index.ts +3 -0
- package/src/tts/streaming.ts +2 -0
- package/src/tts/types.ts +9 -0
- package/lib/module/download/background-downloader.d.js +0 -2
- package/lib/module/download/background-downloader.d.js.map +0 -1
- package/src/download/background-downloader.d.ts +0 -43
package/README.md
CHANGED
|
@@ -78,6 +78,8 @@ If you use the [download manager](docs/download-manager.md) to fetch models at r
|
|
|
78
78
|
|
|
79
79
|
Full step-by-step: [Download manager – Setup (iOS & Android)](docs/download-manager.md#setup-ios--android). Expo users can use the library’s config plugin to apply this automatically.
|
|
80
80
|
|
|
81
|
+
**Android:** Foreground service permissions (Play Console), visible download notifications, and **`POST_NOTIFICATIONS` (API 33+)** are covered in [Download manager – Android: foreground service & notifications](docs/download-manager.md#android-foreground-service--notifications).
|
|
82
|
+
|
|
81
83
|
## Table of contents
|
|
82
84
|
|
|
83
85
|
- [Bundled sherpa-onnx version](#bundled-sherpa-onnx-version)
|
|
@@ -176,6 +178,7 @@ For **real-time (streaming) recognition** from a microphone or audio stream, use
|
|
|
176
178
|
| **KittenTTS** | `'kitten'` | Lightweight, multi-speaker. Folder name should contain **kitten** (not kokoro) for auto-detection. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
|
|
177
179
|
| **Zipvoice** | `'zipvoice'` | Standard TTS with **`sid`**. **Voice cloning** (reference audio + `referenceText`): batch via **`generateSpeech`** only—streaming TTS does not support reference audio for Zipvoice. Default **`numSteps`** when omitted is **5** on **Android and iOS** (matches sherpa-onnx `GenerationConfig` / Kotlin helper). Cloning is **supported on Android & iOS**. Encoder + decoder + vocoder. | [Download](https://k2-fsa.github.io/sherpa/onnx/tts/pretrained_models/zipvoice.html) |
|
|
178
180
|
| **Pocket** | `'pocket'` | Flow-matching TTS. **Voice cloning** on **Android:** batch and streaming TTS. **iOS:** cloning is experimental. Detected by lm_flow, lm_main, text_conditioner, vocab/token_scores. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
|
|
181
|
+
| **Supertonic** | `'supertonic'` | Lightning-fast, on-device text-to-speech system designed for extreme performance with minimal computational overhead. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
|
|
179
182
|
|
|
180
183
|
For **streaming TTS** (incremental generation, low latency), use `createStreamingTTS()` with supported model types. See [Streaming Text-to-Speech](./docs/tts-streaming.md).
|
|
181
184
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* sherpa-onnx-model-detect-tts.cpp
|
|
3
3
|
*
|
|
4
4
|
* Purpose: Detects TTS model type and fills TtsModelPaths from a model directory. Used by
|
|
5
|
-
* nativeDetectTtsModel (module-jni). Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice.
|
|
5
|
+
* nativeDetectTtsModel (module-jni). Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice, Supertonic.
|
|
6
6
|
*
|
|
7
7
|
* --- Detection pipeline (overview) ---
|
|
8
8
|
*
|
|
@@ -56,6 +56,7 @@ TtsModelKind ParseTtsModelType(const std::string& modelType) {
|
|
|
56
56
|
if (modelType == "kitten") return TtsModelKind::kKitten;
|
|
57
57
|
if (modelType == "pocket") return TtsModelKind::kPocket;
|
|
58
58
|
if (modelType == "zipvoice") return TtsModelKind::kZipvoice;
|
|
59
|
+
if (modelType == "supertonic") return TtsModelKind::kSupertonic;
|
|
59
60
|
return TtsModelKind::kUnknown;
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -68,6 +69,7 @@ static bool CapabilitySupportsTtsKind(
|
|
|
68
69
|
bool hasMatcha,
|
|
69
70
|
bool hasPocket,
|
|
70
71
|
bool hasZipvoice,
|
|
72
|
+
bool hasSupertonic,
|
|
71
73
|
bool hasVoicesFile,
|
|
72
74
|
bool hasDataDir
|
|
73
75
|
) {
|
|
@@ -83,6 +85,8 @@ static bool CapabilitySupportsTtsKind(
|
|
|
83
85
|
return hasPocket;
|
|
84
86
|
case TtsModelKind::kZipvoice:
|
|
85
87
|
return hasZipvoice;
|
|
88
|
+
case TtsModelKind::kSupertonic:
|
|
89
|
+
return hasSupertonic;
|
|
86
90
|
default:
|
|
87
91
|
return false;
|
|
88
92
|
}
|
|
@@ -108,6 +112,7 @@ static std::vector<TtsModelKind> GetKindsFromDirNameTts(const std::string& model
|
|
|
108
112
|
if (lower.find("matcha") != std::string::npos) add(TtsModelKind::kMatcha);
|
|
109
113
|
if (lower.find("pocket") != std::string::npos) add(TtsModelKind::kPocket);
|
|
110
114
|
if (lower.find("zipvoice") != std::string::npos) add(TtsModelKind::kZipvoice);
|
|
115
|
+
if (lower.find("supertonic") != std::string::npos) add(TtsModelKind::kSupertonic);
|
|
111
116
|
if (lower.find("kokoro") != std::string::npos) add(TtsModelKind::kKokoro);
|
|
112
117
|
if (lower.find("kitten") != std::string::npos) add(TtsModelKind::kKitten);
|
|
113
118
|
if (lower.find("vits") != std::string::npos) add(TtsModelKind::kVits);
|
|
@@ -143,16 +148,27 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
143
148
|
std::string textConditioner = FindOnnxByAnyToken(files, {"text_conditioner", "text-conditioner"}, std::nullopt);
|
|
144
149
|
std::string vocabJsonFile = FindFileByName(files, "vocab.json");
|
|
145
150
|
std::string tokenScoresJsonFile = FindFileByName(files, "token_scores.json");
|
|
151
|
+
std::string durationPredictor = FindOnnxByAnyToken(files, {"duration_predictor", "duration-predictor"}, std::nullopt);
|
|
152
|
+
std::string textEncoderSupertonic = FindOnnxByAnyToken(files, {"text_encoder", "text-encoder"}, std::nullopt);
|
|
153
|
+
std::string vectorEstimator = FindOnnxByAnyToken(files, {"vector_estimator", "vector-estimator"}, std::nullopt);
|
|
154
|
+
std::string ttsJsonFile = FindFileByName(files, "tts.json");
|
|
155
|
+
std::string unicodeIndexerFile = FindFileByName(files, "unicode_indexer.bin");
|
|
156
|
+
std::string voiceStyleFile = FindFileByName(files, "voice.bin");
|
|
146
157
|
|
|
147
158
|
std::vector<std::string> modelExcludes = {
|
|
148
|
-
"acoustic", "vocoder", "encoder", "decoder", "joiner"
|
|
159
|
+
"acoustic", "vocoder", "encoder", "decoder", "joiner",
|
|
160
|
+
// Supertonic component models are not VITS monolithic model.onnx files.
|
|
161
|
+
"duration_predictor", "duration-predictor",
|
|
162
|
+
"text_encoder", "text-encoder",
|
|
163
|
+
"vector_estimator", "vector-estimator"
|
|
149
164
|
};
|
|
150
165
|
std::string ttsModel = FindOnnxByAnyToken(files, {"model"}, std::nullopt);
|
|
151
166
|
if (ttsModel.empty()) {
|
|
152
167
|
ttsModel = FindLargestOnnxExcludingTokens(files, modelExcludes);
|
|
153
168
|
}
|
|
154
169
|
|
|
155
|
-
|
|
170
|
+
// VITS requires both model.onnx-like file and tokens.txt
|
|
171
|
+
bool hasVits = !ttsModel.empty() && !tokensFile.empty();
|
|
156
172
|
std::string modelDirLower = ToLower(modelDir);
|
|
157
173
|
bool isLikelyMatcha = modelDirLower.find("matcha") != std::string::npos;
|
|
158
174
|
bool hasMatcha = (!acousticModel.empty() && !vocoder.empty())
|
|
@@ -169,6 +185,9 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
169
185
|
}
|
|
170
186
|
bool hasPocket = !lmFlow.empty() && !lmMain.empty() && !encoder.empty() && !decoder.empty() &&
|
|
171
187
|
!textConditioner.empty() && !vocabJsonFile.empty() && !tokenScoresJsonFile.empty();
|
|
188
|
+
bool hasSupertonic = !durationPredictor.empty() && !textEncoderSupertonic.empty() &&
|
|
189
|
+
!vectorEstimator.empty() && !vocoder.empty() && !ttsJsonFile.empty() &&
|
|
190
|
+
!unicodeIndexerFile.empty() && !voiceStyleFile.empty();
|
|
172
191
|
bool hasDataDir = !dataDirPath.empty();
|
|
173
192
|
|
|
174
193
|
bool isLikelyKitten = modelDirLower.find("kitten") != std::string::npos;
|
|
@@ -177,6 +196,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
177
196
|
if (hasMatcha) result.detectedModels.push_back({"matcha", modelDir});
|
|
178
197
|
if (hasPocket) result.detectedModels.push_back({"pocket", modelDir});
|
|
179
198
|
if (hasZipvoice && !hasMatcha) result.detectedModels.push_back({"zipvoice", modelDir});
|
|
199
|
+
if (hasSupertonic) result.detectedModels.push_back({"supertonic", modelDir});
|
|
180
200
|
if (hasVoicesFile) {
|
|
181
201
|
if (isLikelyKitten && !isLikelyKokoro) {
|
|
182
202
|
result.detectedModels.push_back({"kitten", modelDir});
|
|
@@ -205,7 +225,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
205
225
|
std::vector<TtsModelKind> nameCandidates = GetKindsFromDirNameTts(modelDir);
|
|
206
226
|
if (!nameCandidates.empty()) {
|
|
207
227
|
for (TtsModelKind k : nameCandidates) {
|
|
208
|
-
if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice,
|
|
228
|
+
if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice, hasSupertonic,
|
|
209
229
|
hasVoicesFile, hasDataDir)) {
|
|
210
230
|
selected = k;
|
|
211
231
|
break;
|
|
@@ -216,6 +236,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
216
236
|
if (hasMatcha) selected = TtsModelKind::kMatcha;
|
|
217
237
|
else if (hasPocket) selected = TtsModelKind::kPocket;
|
|
218
238
|
else if (hasZipvoice) selected = TtsModelKind::kZipvoice;
|
|
239
|
+
else if (hasSupertonic) selected = TtsModelKind::kSupertonic;
|
|
219
240
|
else if (hasVoicesFile) {
|
|
220
241
|
if (isLikelyKitten && !isLikelyKokoro) selected = TtsModelKind::kKitten;
|
|
221
242
|
else if (isLikelyKokoro && !isLikelyKitten) selected = TtsModelKind::kKokoro;
|
|
@@ -256,6 +277,12 @@ static TtsDetectResult DetectTtsModelFromFiles(
|
|
|
256
277
|
result.paths.textConditioner = textConditioner;
|
|
257
278
|
result.paths.vocabJson = vocabJsonFile;
|
|
258
279
|
result.paths.tokenScoresJson = tokenScoresJsonFile;
|
|
280
|
+
result.paths.durationPredictor = durationPredictor;
|
|
281
|
+
result.paths.textEncoder = textEncoderSupertonic;
|
|
282
|
+
result.paths.vectorEstimator = vectorEstimator;
|
|
283
|
+
result.paths.ttsJson = ttsJsonFile;
|
|
284
|
+
result.paths.unicodeIndexer = unicodeIndexerFile;
|
|
285
|
+
result.paths.voiceStyle = voiceStyleFile;
|
|
259
286
|
|
|
260
287
|
auto validation = ValidateTtsPaths(selected, result.paths, modelDir);
|
|
261
288
|
if (!validation.ok) {
|
|
@@ -38,7 +38,8 @@ enum class TtsModelKind {
|
|
|
38
38
|
kKokoro,
|
|
39
39
|
kKitten,
|
|
40
40
|
kPocket,
|
|
41
|
-
kZipvoice
|
|
41
|
+
kZipvoice,
|
|
42
|
+
kSupertonic
|
|
42
43
|
};
|
|
43
44
|
|
|
44
45
|
struct SttModelPaths {
|
|
@@ -154,6 +155,13 @@ struct TtsModelPaths {
|
|
|
154
155
|
std::string textConditioner;
|
|
155
156
|
std::string vocabJson;
|
|
156
157
|
std::string tokenScoresJson;
|
|
158
|
+
// Supertonic TTS
|
|
159
|
+
std::string durationPredictor;
|
|
160
|
+
std::string textEncoder;
|
|
161
|
+
std::string vectorEstimator;
|
|
162
|
+
std::string ttsJson;
|
|
163
|
+
std::string unicodeIndexer;
|
|
164
|
+
std::string voiceStyle;
|
|
157
165
|
};
|
|
158
166
|
|
|
159
167
|
struct SttDetectResult {
|
|
@@ -20,6 +20,7 @@ const char* TtsModelKindToString(TtsModelKind k) {
|
|
|
20
20
|
case TtsModelKind::kKitten: return "kitten";
|
|
21
21
|
case TtsModelKind::kPocket: return "pocket";
|
|
22
22
|
case TtsModelKind::kZipvoice: return "zipvoice";
|
|
23
|
+
case TtsModelKind::kSupertonic: return "supertonic";
|
|
23
24
|
default: return "unknown";
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -78,6 +79,12 @@ jobject TtsDetectResultToJava(JNIEnv* env, const TtsDetectResult& result) {
|
|
|
78
79
|
PutString(env, pathsMap, mapPut, "textConditioner", result.paths.textConditioner);
|
|
79
80
|
PutString(env, pathsMap, mapPut, "vocabJson", result.paths.vocabJson);
|
|
80
81
|
PutString(env, pathsMap, mapPut, "tokenScoresJson", result.paths.tokenScoresJson);
|
|
82
|
+
PutString(env, pathsMap, mapPut, "durationPredictor", result.paths.durationPredictor);
|
|
83
|
+
PutString(env, pathsMap, mapPut, "textEncoder", result.paths.textEncoder);
|
|
84
|
+
PutString(env, pathsMap, mapPut, "vectorEstimator", result.paths.vectorEstimator);
|
|
85
|
+
PutString(env, pathsMap, mapPut, "ttsJson", result.paths.ttsJson);
|
|
86
|
+
PutString(env, pathsMap, mapPut, "unicodeIndexer", result.paths.unicodeIndexer);
|
|
87
|
+
PutString(env, pathsMap, mapPut, "voiceStyle", result.paths.voiceStyle);
|
|
81
88
|
jstring keyPaths = env->NewStringUTF("paths");
|
|
82
89
|
env->CallObjectMethod(map, mapPut, keyPaths, pathsMap);
|
|
83
90
|
env->DeleteLocalRef(keyPaths);
|
|
@@ -59,6 +59,16 @@ static const TtsFieldRequirement kZipvoiceReqs[] = {
|
|
|
59
59
|
{"lexicon", &TtsModelPaths::lexicon, true},
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
+
static const TtsFieldRequirement kSupertonicReqs[] = {
|
|
63
|
+
{"durationPredictor", &TtsModelPaths::durationPredictor, true},
|
|
64
|
+
{"textEncoder", &TtsModelPaths::textEncoder, true},
|
|
65
|
+
{"vectorEstimator", &TtsModelPaths::vectorEstimator, true},
|
|
66
|
+
{"vocoder", &TtsModelPaths::vocoder, true},
|
|
67
|
+
{"ttsJson", &TtsModelPaths::ttsJson, true},
|
|
68
|
+
{"unicodeIndexer", &TtsModelPaths::unicodeIndexer, true},
|
|
69
|
+
{"voiceStyle", &TtsModelPaths::voiceStyle, true},
|
|
70
|
+
};
|
|
71
|
+
|
|
62
72
|
// ============================================================
|
|
63
73
|
|
|
64
74
|
static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& count) {
|
|
@@ -79,6 +89,9 @@ static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& cou
|
|
|
79
89
|
case TtsModelKind::kZipvoice:
|
|
80
90
|
count = std::size(kZipvoiceReqs);
|
|
81
91
|
return kZipvoiceReqs;
|
|
92
|
+
case TtsModelKind::kSupertonic:
|
|
93
|
+
count = std::size(kSupertonicReqs);
|
|
94
|
+
return kSupertonicReqs;
|
|
82
95
|
default:
|
|
83
96
|
count = 0;
|
|
84
97
|
return nullptr;
|
|
@@ -93,6 +106,7 @@ static const char* TtsKindToName(TtsModelKind k) {
|
|
|
93
106
|
case TtsModelKind::kKitten: return "Kitten";
|
|
94
107
|
case TtsModelKind::kPocket: return "Pocket";
|
|
95
108
|
case TtsModelKind::kZipvoice: return "Zipvoice";
|
|
109
|
+
case TtsModelKind::kSupertonic: return "Supertonic";
|
|
96
110
|
default: return "Unknown";
|
|
97
111
|
}
|
|
98
112
|
}
|
|
@@ -31,6 +31,7 @@ import com.k2fsa.sherpa.onnx.OfflineTtsMatchaModelConfig
|
|
|
31
31
|
import com.k2fsa.sherpa.onnx.OfflineTtsKokoroModelConfig
|
|
32
32
|
import com.k2fsa.sherpa.onnx.OfflineTtsKittenModelConfig
|
|
33
33
|
import com.k2fsa.sherpa.onnx.OfflineTtsZipVoiceModelConfig
|
|
34
|
+
import com.k2fsa.sherpa.onnx.OfflineTtsSupertonicModelConfig
|
|
34
35
|
import java.io.File
|
|
35
36
|
import java.io.FileInputStream
|
|
36
37
|
import java.io.FileOutputStream
|
|
@@ -1062,6 +1063,20 @@ internal class SherpaOnnxTtsHelper(
|
|
|
1062
1063
|
debug = debug,
|
|
1063
1064
|
provider = prov
|
|
1064
1065
|
)
|
|
1066
|
+
"supertonic" -> OfflineTtsModelConfig(
|
|
1067
|
+
supertonic = OfflineTtsSupertonicModelConfig(
|
|
1068
|
+
durationPredictor = path(paths, "durationPredictor"),
|
|
1069
|
+
textEncoder = path(paths, "textEncoder"),
|
|
1070
|
+
vectorEstimator = path(paths, "vectorEstimator"),
|
|
1071
|
+
vocoder = path(paths, "vocoder"),
|
|
1072
|
+
ttsJson = path(paths, "ttsJson"),
|
|
1073
|
+
unicodeIndexer = path(paths, "unicodeIndexer"),
|
|
1074
|
+
voiceStyle = path(paths, "voiceStyle")
|
|
1075
|
+
),
|
|
1076
|
+
numThreads = numThreads,
|
|
1077
|
+
debug = debug,
|
|
1078
|
+
provider = prov
|
|
1079
|
+
)
|
|
1065
1080
|
else -> {
|
|
1066
1081
|
if (path(paths, "acousticModel").isNotEmpty()) {
|
|
1067
1082
|
OfflineTtsModelConfig(
|
package/ios/SherpaOnnx+TTS.mm
CHANGED
|
@@ -58,6 +58,7 @@ static NSString *ttsModelKindToNSString(sherpaonnx::TtsModelKind kind) {
|
|
|
58
58
|
case K::kKitten: return @"kitten";
|
|
59
59
|
case K::kPocket: return @"pocket";
|
|
60
60
|
case K::kZipvoice: return @"zipvoice";
|
|
61
|
+
case K::kSupertonic: return @"supertonic";
|
|
61
62
|
default: return @"unknown";
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* sherpa-onnx-model-detect-tts.mm
|
|
3
3
|
*
|
|
4
4
|
* Purpose: Detects TTS (text-to-speech) model type and fills TtsModelPaths from a model directory.
|
|
5
|
-
* Used by the TTS wrapper on iOS. Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice.
|
|
5
|
+
* Used by the TTS wrapper on iOS. Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice, Supertonic.
|
|
6
6
|
*
|
|
7
7
|
* --- Detection pipeline (overview) ---
|
|
8
8
|
*
|
|
@@ -58,6 +58,7 @@ TtsModelKind ParseTtsModelType(const std::string& modelType) {
|
|
|
58
58
|
if (modelType == "kitten") return TtsModelKind::kKitten;
|
|
59
59
|
if (modelType == "pocket") return TtsModelKind::kPocket;
|
|
60
60
|
if (modelType == "zipvoice") return TtsModelKind::kZipvoice;
|
|
61
|
+
if (modelType == "supertonic") return TtsModelKind::kSupertonic;
|
|
61
62
|
return TtsModelKind::kUnknown;
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -70,6 +71,7 @@ static bool CapabilitySupportsTtsKind(
|
|
|
70
71
|
bool hasMatcha,
|
|
71
72
|
bool hasPocket,
|
|
72
73
|
bool hasZipvoice,
|
|
74
|
+
bool hasSupertonic,
|
|
73
75
|
bool hasVoicesFile,
|
|
74
76
|
bool hasDataDir
|
|
75
77
|
) {
|
|
@@ -85,6 +87,8 @@ static bool CapabilitySupportsTtsKind(
|
|
|
85
87
|
return hasPocket;
|
|
86
88
|
case TtsModelKind::kZipvoice:
|
|
87
89
|
return hasZipvoice;
|
|
90
|
+
case TtsModelKind::kSupertonic:
|
|
91
|
+
return hasSupertonic;
|
|
88
92
|
default:
|
|
89
93
|
return false;
|
|
90
94
|
}
|
|
@@ -109,6 +113,7 @@ static std::vector<TtsModelKind> GetKindsFromDirNameTts(const std::string& model
|
|
|
109
113
|
if (lower.find("matcha") != std::string::npos) add(TtsModelKind::kMatcha);
|
|
110
114
|
if (lower.find("pocket") != std::string::npos) add(TtsModelKind::kPocket);
|
|
111
115
|
if (lower.find("zipvoice") != std::string::npos) add(TtsModelKind::kZipvoice);
|
|
116
|
+
if (lower.find("supertonic") != std::string::npos) add(TtsModelKind::kSupertonic);
|
|
112
117
|
if (lower.find("kokoro") != std::string::npos) add(TtsModelKind::kKokoro);
|
|
113
118
|
if (lower.find("kitten") != std::string::npos) add(TtsModelKind::kKitten);
|
|
114
119
|
if (lower.find("vits") != std::string::npos) add(TtsModelKind::kVits);
|
|
@@ -154,14 +159,27 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
154
159
|
std::string textConditioner = FindOnnxByAnyToken(files, {"text_conditioner", "text-conditioner"}, std::nullopt);
|
|
155
160
|
std::string vocabJsonFile = FindFileByName(files, "vocab.json");
|
|
156
161
|
std::string tokenScoresJsonFile = FindFileByName(files, "token_scores.json");
|
|
162
|
+
std::string durationPredictor = FindOnnxByAnyToken(files, {"duration_predictor", "duration-predictor"}, std::nullopt);
|
|
163
|
+
std::string textEncoderSupertonic = FindOnnxByAnyToken(files, {"text_encoder", "text-encoder"}, std::nullopt);
|
|
164
|
+
std::string vectorEstimator = FindOnnxByAnyToken(files, {"vector_estimator", "vector-estimator"}, std::nullopt);
|
|
165
|
+
std::string ttsJsonFile = FindFileByName(files, "tts.json");
|
|
166
|
+
std::string unicodeIndexerFile = FindFileByName(files, "unicode_indexer.bin");
|
|
167
|
+
std::string voiceStyleFile = FindFileByName(files, "voice.bin");
|
|
157
168
|
|
|
158
|
-
std::vector<std::string> modelExcludes = {
|
|
169
|
+
std::vector<std::string> modelExcludes = {
|
|
170
|
+
"acoustic", "vocoder", "encoder", "decoder", "joiner",
|
|
171
|
+
// Supertonic component models are not VITS monolithic model.onnx files.
|
|
172
|
+
"duration_predictor", "duration-predictor",
|
|
173
|
+
"text_encoder", "text-encoder",
|
|
174
|
+
"vector_estimator", "vector-estimator"
|
|
175
|
+
};
|
|
159
176
|
std::string ttsModel = FindOnnxByAnyToken(files, {"model"}, std::nullopt);
|
|
160
177
|
if (ttsModel.empty()) {
|
|
161
178
|
ttsModel = FindLargestOnnxExcludingTokens(files, modelExcludes);
|
|
162
179
|
}
|
|
163
180
|
|
|
164
|
-
|
|
181
|
+
// VITS requires both model.onnx-like file and tokens.txt
|
|
182
|
+
bool hasVits = !ttsModel.empty() && !tokensFile.empty();
|
|
165
183
|
std::string modelDirLower = ToLower(modelDir);
|
|
166
184
|
bool isLikelyMatcha = modelDirLower.find("matcha") != std::string::npos;
|
|
167
185
|
bool hasMatcha = (!acousticModel.empty() && !vocoder.empty())
|
|
@@ -178,6 +196,9 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
178
196
|
}
|
|
179
197
|
bool hasPocket = !lmFlow.empty() && !lmMain.empty() && !encoder.empty() && !decoder.empty() &&
|
|
180
198
|
!textConditioner.empty() && !vocabJsonFile.empty() && !tokenScoresJsonFile.empty();
|
|
199
|
+
bool hasSupertonic = !durationPredictor.empty() && !textEncoderSupertonic.empty() &&
|
|
200
|
+
!vectorEstimator.empty() && !vocoder.empty() && !ttsJsonFile.empty() &&
|
|
201
|
+
!unicodeIndexerFile.empty() && !voiceStyleFile.empty();
|
|
181
202
|
bool hasDataDir = !dataDirPath.empty();
|
|
182
203
|
|
|
183
204
|
bool isLikelyKitten = modelDirLower.find("kitten") != std::string::npos;
|
|
@@ -192,6 +213,9 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
192
213
|
if (hasZipvoice && !hasMatcha) {
|
|
193
214
|
result.detectedModels.push_back({"zipvoice", modelDir});
|
|
194
215
|
}
|
|
216
|
+
if (hasSupertonic) {
|
|
217
|
+
result.detectedModels.push_back({"supertonic", modelDir});
|
|
218
|
+
}
|
|
195
219
|
if (hasVoicesFile) {
|
|
196
220
|
if (isLikelyKitten && !isLikelyKokoro) {
|
|
197
221
|
result.detectedModels.push_back({"kitten", modelDir});
|
|
@@ -228,7 +252,7 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
228
252
|
std::vector<TtsModelKind> nameCandidates = GetKindsFromDirNameTts(modelDir);
|
|
229
253
|
if (!nameCandidates.empty()) {
|
|
230
254
|
for (TtsModelKind k : nameCandidates) {
|
|
231
|
-
if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice,
|
|
255
|
+
if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice, hasSupertonic,
|
|
232
256
|
hasVoicesFile, hasDataDir)) {
|
|
233
257
|
selected = k;
|
|
234
258
|
break;
|
|
@@ -243,6 +267,8 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
243
267
|
selected = TtsModelKind::kPocket;
|
|
244
268
|
} else if (hasZipvoice) {
|
|
245
269
|
selected = TtsModelKind::kZipvoice;
|
|
270
|
+
} else if (hasSupertonic) {
|
|
271
|
+
selected = TtsModelKind::kSupertonic;
|
|
246
272
|
} else if (hasVoicesFile) {
|
|
247
273
|
if (isLikelyKitten && !isLikelyKokoro) {
|
|
248
274
|
selected = TtsModelKind::kKitten;
|
|
@@ -289,6 +315,12 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
|
|
|
289
315
|
result.paths.textConditioner = textConditioner;
|
|
290
316
|
result.paths.vocabJson = vocabJsonFile;
|
|
291
317
|
result.paths.tokenScoresJson = tokenScoresJsonFile;
|
|
318
|
+
result.paths.durationPredictor = durationPredictor;
|
|
319
|
+
result.paths.textEncoder = textEncoderSupertonic;
|
|
320
|
+
result.paths.vectorEstimator = vectorEstimator;
|
|
321
|
+
result.paths.ttsJson = ttsJsonFile;
|
|
322
|
+
result.paths.unicodeIndexer = unicodeIndexerFile;
|
|
323
|
+
result.paths.voiceStyle = voiceStyleFile;
|
|
292
324
|
|
|
293
325
|
auto validation = ValidateTtsPaths(selected, result.paths, modelDir);
|
|
294
326
|
if (!validation.ok) {
|
|
@@ -37,7 +37,8 @@ enum class TtsModelKind {
|
|
|
37
37
|
kKokoro,
|
|
38
38
|
kKitten,
|
|
39
39
|
kPocket,
|
|
40
|
-
kZipvoice
|
|
40
|
+
kZipvoice,
|
|
41
|
+
kSupertonic
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
struct SttModelPaths {
|
|
@@ -150,6 +151,13 @@ struct TtsModelPaths {
|
|
|
150
151
|
std::string textConditioner;
|
|
151
152
|
std::string vocabJson;
|
|
152
153
|
std::string tokenScoresJson;
|
|
154
|
+
// Supertonic TTS
|
|
155
|
+
std::string durationPredictor;
|
|
156
|
+
std::string textEncoder;
|
|
157
|
+
std::string vectorEstimator;
|
|
158
|
+
std::string ttsJson;
|
|
159
|
+
std::string unicodeIndexer;
|
|
160
|
+
std::string voiceStyle;
|
|
153
161
|
};
|
|
154
162
|
|
|
155
163
|
struct SttDetectResult {
|
|
@@ -59,6 +59,16 @@ static const TtsFieldRequirement kZipvoiceReqs[] = {
|
|
|
59
59
|
{"lexicon", &TtsModelPaths::lexicon, true},
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
+
static const TtsFieldRequirement kSupertonicReqs[] = {
|
|
63
|
+
{"durationPredictor", &TtsModelPaths::durationPredictor, true},
|
|
64
|
+
{"textEncoder", &TtsModelPaths::textEncoder, true},
|
|
65
|
+
{"vectorEstimator", &TtsModelPaths::vectorEstimator, true},
|
|
66
|
+
{"vocoder", &TtsModelPaths::vocoder, true},
|
|
67
|
+
{"ttsJson", &TtsModelPaths::ttsJson, true},
|
|
68
|
+
{"unicodeIndexer", &TtsModelPaths::unicodeIndexer, true},
|
|
69
|
+
{"voiceStyle", &TtsModelPaths::voiceStyle, true},
|
|
70
|
+
};
|
|
71
|
+
|
|
62
72
|
// ============================================================
|
|
63
73
|
|
|
64
74
|
static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& count) {
|
|
@@ -79,6 +89,9 @@ static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& cou
|
|
|
79
89
|
case TtsModelKind::kZipvoice:
|
|
80
90
|
count = std::size(kZipvoiceReqs);
|
|
81
91
|
return kZipvoiceReqs;
|
|
92
|
+
case TtsModelKind::kSupertonic:
|
|
93
|
+
count = std::size(kSupertonicReqs);
|
|
94
|
+
return kSupertonicReqs;
|
|
82
95
|
default:
|
|
83
96
|
count = 0;
|
|
84
97
|
return nullptr;
|
|
@@ -93,6 +106,7 @@ static const char* TtsKindToName(TtsModelKind k) {
|
|
|
93
106
|
case TtsModelKind::kKitten: return "Kitten";
|
|
94
107
|
case TtsModelKind::kPocket: return "Pocket";
|
|
95
108
|
case TtsModelKind::kZipvoice: return "Zipvoice";
|
|
109
|
+
case TtsModelKind::kSupertonic: return "Supertonic";
|
|
96
110
|
default: return "Unknown";
|
|
97
111
|
}
|
|
98
112
|
}
|
|
@@ -161,6 +161,15 @@ TtsInitializeResult TtsWrapper::initialize(
|
|
|
161
161
|
config.model.pocket.vocab_json = detect.paths.vocabJson;
|
|
162
162
|
config.model.pocket.token_scores_json = detect.paths.tokenScoresJson;
|
|
163
163
|
break;
|
|
164
|
+
case TtsModelKind::kSupertonic:
|
|
165
|
+
config.model.supertonic.duration_predictor = detect.paths.durationPredictor;
|
|
166
|
+
config.model.supertonic.text_encoder = detect.paths.textEncoder;
|
|
167
|
+
config.model.supertonic.vector_estimator = detect.paths.vectorEstimator;
|
|
168
|
+
config.model.supertonic.vocoder = detect.paths.vocoder;
|
|
169
|
+
config.model.supertonic.tts_json = detect.paths.ttsJson;
|
|
170
|
+
config.model.supertonic.unicode_indexer = detect.paths.unicodeIndexer;
|
|
171
|
+
config.model.supertonic.voice_style = detect.paths.voiceStyle;
|
|
172
|
+
break;
|
|
164
173
|
case TtsModelKind::kUnknown:
|
|
165
174
|
default:
|
|
166
175
|
result.error = "TTS: Unknown model type: " + modelType;
|
|
@@ -5,7 +5,7 @@ export { ModelCategory } from "./types.js";
|
|
|
5
5
|
export { subscribeDownloadProgress, subscribeModelsListUpdated } from "./downloadEvents.js";
|
|
6
6
|
export { listModelsByCategory, refreshModelsByCategory, getModelsCacheStatusByCategory, getModelByIdByCategory } from "./registry.js";
|
|
7
7
|
export { listDownloadedModelsByCategory, isModelDownloadedByCategory, getLocalModelPathByCategory, updateModelLastUsed, listDownloadedModelsWithMetadata, cleanupLeastRecentlyUsed, deleteModelByCategory, clearModelCacheByCategory, getDownloadStorageBase } from "./localModels.js";
|
|
8
|
-
export { downloadModelByCategory, getIncompleteDownloads, resumeDownload, deleteIncompleteDownload } from "./downloadTask.js";
|
|
8
|
+
export { configureModelDownloadBackgroundDownloader, downloadModelByCategory, getIncompleteDownloads, resumeDownload, deleteIncompleteDownload } from "./downloadTask.js";
|
|
9
9
|
export { extractModelByCategory, getIncompleteExtractions, resumeExtraction, deleteIncompleteExtraction } from "./modelExtraction.js";
|
|
10
10
|
export { ensureModelByCategory } from "./ensureModel.js";
|
|
11
11
|
export { getProtectedModelKeysForBulkDelete } from "./protectedModelKeys.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ModelCategory","subscribeDownloadProgress","subscribeModelsListUpdated","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","downloadModelByCategory","getIncompleteDownloads","resumeDownload","deleteIncompleteDownload","extractModelByCategory","getIncompleteExtractions","resumeExtraction","deleteIncompleteExtraction","ensureModelByCategory","getProtectedModelKeysForBulkDelete","purgeDownloadedModelArtifacts"],"sourceRoot":"../../../src","sources":["download/ModelDownloadManager.ts"],"mappings":";;AAAA;AACA,SACEA,aAAa,QAaR,YAAS;AAChB,SACEC,yBAAyB,EACzBC,0BAA0B,QACrB,qBAAkB;AACzB,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,8BAA8B,EAC9BC,sBAAsB,QACjB,eAAY;AACnB,SACEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,gCAAgC,EAChCC,wBAAwB,EACxBC,qBAAqB,EACrBC,yBAAyB,EACzBC,sBAAsB,QACjB,kBAAe;AACtB,SACEC,uBAAuB,EACvBC,sBAAsB,EACtBC,cAAc,EACdC,wBAAwB,QACnB,mBAAgB;
|
|
1
|
+
{"version":3,"names":["ModelCategory","subscribeDownloadProgress","subscribeModelsListUpdated","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","configureModelDownloadBackgroundDownloader","downloadModelByCategory","getIncompleteDownloads","resumeDownload","deleteIncompleteDownload","extractModelByCategory","getIncompleteExtractions","resumeExtraction","deleteIncompleteExtraction","ensureModelByCategory","getProtectedModelKeysForBulkDelete","purgeDownloadedModelArtifacts"],"sourceRoot":"../../../src","sources":["download/ModelDownloadManager.ts"],"mappings":";;AAAA;AACA,SACEA,aAAa,QAaR,YAAS;AAChB,SACEC,yBAAyB,EACzBC,0BAA0B,QACrB,qBAAkB;AACzB,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,8BAA8B,EAC9BC,sBAAsB,QACjB,eAAY;AACnB,SACEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,gCAAgC,EAChCC,wBAAwB,EACxBC,qBAAqB,EACrBC,yBAAyB,EACzBC,sBAAsB,QACjB,kBAAe;AACtB,SACEC,0CAA0C,EAC1CC,uBAAuB,EACvBC,sBAAsB,EACtBC,cAAc,EACdC,wBAAwB,QACnB,mBAAgB;AAEvB,SACEC,sBAAsB,EACtBC,wBAAwB,EACxBC,gBAAgB,EAChBC,0BAA0B,QACrB,sBAAmB;AAC1B,SAASC,qBAAqB,QAAQ,kBAAe;AAErD,SAASC,kCAAkC,QAAQ,yBAAsB;AACzE,SACEC,6BAA6B,QAExB,gBAAa","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["download/background-downloader-types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
import { createDownloadTask, completeHandler, getExistingDownloadTasks, setConfig } from '@kesha-antonov/react-native-background-downloader';
|
|
4
5
|
import { exists, readFile, mkdir, writeFile, stat, unlink } from '@dr.pogodin/react-native-fs';
|
|
5
6
|
import { checkDiskSpace, removeDirectoryRecursive } from "./validation.js";
|
|
6
7
|
import { getModelsBaseDir, getModelDir, getArchivePath, getReadyMarkerPath, getDownloadStatePath, getNativeAssetExtractedModelDir, getTarArchivePath, getOnnxPath } from "./paths.js";
|
|
@@ -12,6 +13,56 @@ function makeDownloadTaskId(category, id) {
|
|
|
12
13
|
return `${category}:${id}`;
|
|
13
14
|
}
|
|
14
15
|
const activeDownloadTasks = new Map();
|
|
16
|
+
let androidDownloaderNotificationConfigApplied = false;
|
|
17
|
+
let didWarnConfigFailure = false;
|
|
18
|
+
function warnBackgroundDownloaderConfigFailure(context, error) {
|
|
19
|
+
if (didWarnConfigFailure) return;
|
|
20
|
+
didWarnConfigFailure = true;
|
|
21
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
22
|
+
console.warn(`[Download] Background downloader config failed (${context}): ${reason}`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Apply your own `@kesha-antonov/react-native-background-downloader` `setConfig` **before** the first
|
|
26
|
+
* model download. When called, the SDK will **not** overwrite it with built-in defaults on first download.
|
|
27
|
+
*
|
|
28
|
+
* Safe to call at app startup (e.g. `App.tsx`). Other `setConfig` options (e.g. headers) are forwarded
|
|
29
|
+
* where the native module supports them on each platform.
|
|
30
|
+
*/
|
|
31
|
+
export function configureModelDownloadBackgroundDownloader(options) {
|
|
32
|
+
try {
|
|
33
|
+
setConfig(options);
|
|
34
|
+
androidDownloaderNotificationConfigApplied = true;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
// Keep fallback default config enabled if custom config fails.
|
|
37
|
+
warnBackgroundDownloaderConfigFailure('custom', error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Library default is showNotificationsEnabled: false (silent empty FGS notification).
|
|
43
|
+
* Enable visible notifications unless the host app already called `configureModelDownloadBackgroundDownloader`.
|
|
44
|
+
*/
|
|
45
|
+
function ensureAndroidBackgroundDownloaderNotifications() {
|
|
46
|
+
if (androidDownloaderNotificationConfigApplied) return;
|
|
47
|
+
if (Platform.OS !== 'android') return;
|
|
48
|
+
try {
|
|
49
|
+
setConfig({
|
|
50
|
+
showNotificationsEnabled: true,
|
|
51
|
+
notificationsGrouping: {
|
|
52
|
+
enabled: false,
|
|
53
|
+
mode: 'individual',
|
|
54
|
+
texts: {
|
|
55
|
+
downloadTitle: 'Model download',
|
|
56
|
+
downloadStarting: 'Starting download…',
|
|
57
|
+
downloadProgress: 'Downloading… {progress}%'
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
androidDownloaderNotificationConfigApplied = true;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
warnBackgroundDownloaderConfigFailure('default', error);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
15
66
|
export async function downloadModelByCategory(category, id, opts) {
|
|
16
67
|
const isAborted = () => Boolean(opts?.signal?.aborted);
|
|
17
68
|
if (opts?.signal?.aborted) {
|
|
@@ -51,6 +102,7 @@ export async function downloadModelByCategory(category, id, opts) {
|
|
|
51
102
|
if (!diskSpaceCheck.success) {
|
|
52
103
|
throw new Error(`Insufficient disk space: ${diskSpaceCheck.message}`);
|
|
53
104
|
}
|
|
105
|
+
ensureAndroidBackgroundDownloaderNotifications();
|
|
54
106
|
const statePath = getDownloadStatePath(category, id);
|
|
55
107
|
if (opts?.overwrite) {
|
|
56
108
|
if (await exists(modelDir)) await unlink(modelDir);
|
|
@@ -246,6 +298,7 @@ export async function getIncompleteDownloads(category) {
|
|
|
246
298
|
return states;
|
|
247
299
|
}
|
|
248
300
|
export async function resumeDownload(category, id, opts) {
|
|
301
|
+
ensureAndroidBackgroundDownloaderNotifications();
|
|
249
302
|
const taskId = makeDownloadTaskId(category, id);
|
|
250
303
|
const existingTasks = await getExistingDownloadTasks();
|
|
251
304
|
const existing = existingTasks.find(t => t.id === taskId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createDownloadTask","completeHandler","getExistingDownloadTasks","exists","readFile","mkdir","writeFile","stat","unlink","checkDiskSpace","removeDirectoryRecursive","getModelsBaseDir","getModelDir","getArchivePath","getReadyMarkerPath","getDownloadStatePath","getNativeAssetExtractedModelDir","getTarArchivePath","getOnnxPath","emitDownloadProgress","runPostDownloadProcessing","getModelByIdByCategory","listDownloadedModelsByCategory","makeDownloadTaskId","category","id","activeDownloadTasks","Map","downloadModelByCategory","opts","isAborted","Boolean","signal","aborted","abortError","Error","name","model","baseDir","downloadPath","archiveExt","isArchive","modelDir","sleep","ms","Promise","resolve","setTimeout","cleanupPartial","cleanupPartialWithRetry","attempt","console","warn","diskSpaceCheck","bytes","success","message","statePath","overwrite","readyMarkerExists","downloadState","modelId","phase","startedAt","Date","toISOString","archivePath","totalBytes","JSON","stringify","taskId","reject","abortHandler","cleanup","removeEventListener","undefined","delete","task","url","downloadUrl","destination","metadata","progress","bytesDownloaded","bytesTotal","total","percent","onProgress","done","result","onChecksumIssue","deleteArchiveAfterExtract","getDownloadedList","e","error","errorCode","String","set","stop","err","addEventListener","start","archiveStat","size","getIncompleteDownloads","prefix","states","existingTasks","startsWith","slice","length","readyPath","raw","fromFile","parse","meta","st","push","resumeDownload","existing","find","t","resume","catch","deleteIncompleteDownload","tarPath","onnxPath","getActiveDownloadTaskKeys","keys"],"sourceRoot":"../../../src","sources":["download/downloadTask.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","createDownloadTask","completeHandler","getExistingDownloadTasks","setConfig","exists","readFile","mkdir","writeFile","stat","unlink","checkDiskSpace","removeDirectoryRecursive","getModelsBaseDir","getModelDir","getArchivePath","getReadyMarkerPath","getDownloadStatePath","getNativeAssetExtractedModelDir","getTarArchivePath","getOnnxPath","emitDownloadProgress","runPostDownloadProcessing","getModelByIdByCategory","listDownloadedModelsByCategory","makeDownloadTaskId","category","id","activeDownloadTasks","Map","androidDownloaderNotificationConfigApplied","didWarnConfigFailure","warnBackgroundDownloaderConfigFailure","context","error","reason","Error","message","String","console","warn","configureModelDownloadBackgroundDownloader","options","ensureAndroidBackgroundDownloaderNotifications","OS","showNotificationsEnabled","notificationsGrouping","enabled","mode","texts","downloadTitle","downloadStarting","downloadProgress","downloadModelByCategory","opts","isAborted","Boolean","signal","aborted","abortError","name","model","baseDir","downloadPath","archiveExt","isArchive","modelDir","sleep","ms","Promise","resolve","setTimeout","cleanupPartial","cleanupPartialWithRetry","attempt","diskSpaceCheck","bytes","success","statePath","overwrite","readyMarkerExists","downloadState","modelId","phase","startedAt","Date","toISOString","archivePath","totalBytes","JSON","stringify","taskId","reject","abortHandler","cleanup","removeEventListener","undefined","delete","task","url","downloadUrl","destination","metadata","progress","bytesDownloaded","bytesTotal","total","percent","onProgress","done","result","onChecksumIssue","deleteArchiveAfterExtract","getDownloadedList","e","errorCode","set","stop","err","addEventListener","start","archiveStat","size","getIncompleteDownloads","prefix","states","existingTasks","startsWith","slice","length","readyPath","raw","fromFile","parse","meta","st","push","resumeDownload","existing","find","t","resume","catch","deleteIncompleteDownload","tarPath","onnxPath","getActiveDownloadTaskKeys","keys"],"sourceRoot":"../../../src","sources":["download/downloadTask.ts"],"mappings":"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","ignoreList":[]}
|