react-native-sherpa-onnx 0.3.6 → 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/LICENSE +1 -0
- package/README.md +92 -21
- package/SherpaOnnx.podspec +3 -0
- package/THIRD_PARTY_LICENSES/README.md +62 -0
- package/THIRD_PARTY_LICENSES/ffmpeg.txt +502 -0
- package/THIRD_PARTY_LICENSES/libarchive.txt +65 -0
- package/THIRD_PARTY_LICENSES/nvidia_omla.txt +181 -0
- package/THIRD_PARTY_LICENSES/onnxruntime.txt +21 -0
- package/THIRD_PARTY_LICENSES/opus.txt +44 -0
- package/THIRD_PARTY_LICENSES/sherpa-onnx.txt +201 -0
- package/THIRD_PARTY_LICENSES/shine.txt +482 -0
- package/THIRD_PARTY_LICENSES/zstd.txt +30 -0
- package/android/build.gradle +7 -3
- package/android/prebuilt-download.gradle +344 -152
- package/android/prebuilt-versions.gradle +1 -1
- package/android/src/main/assets/model_licenses/asr-models-license-status.csv +409 -0
- package/android/src/main/assets/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/android/src/main/assets/model_licenses/tts-models-license-status.csv +596 -0
- package/android/src/main/cpp/CMakeLists.txt +28 -10
- package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-helper.cpp +2 -2
- package/android/src/main/cpp/jni/audio/sherpa-onnx-audio-convert-jni.cpp +268 -2
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +37 -6
- 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 +18 -2
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxArchiveHelper.kt +40 -10
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +99 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxOnlineSttHelper.kt +4 -1
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +127 -97
- package/ios/Resources/model_licenses/asr-models-license-status.csv +409 -0
- package/ios/Resources/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/ios/Resources/model_licenses/tts-models-license-status.csv +596 -0
- package/ios/SherpaOnnx+OnlineSTT.mm +2 -0
- package/ios/SherpaOnnx+PcmLiveStream.mm +2 -29
- package/ios/SherpaOnnx+TTS.mm +179 -20
- package/ios/SherpaOnnx.mm +54 -0
- package/ios/SherpaOnnxAudioConvert.h +10 -0
- package/ios/SherpaOnnxAudioConvert.mm +257 -1
- package/ios/archive/sherpa-onnx-archive-helper.h +3 -0
- package/ios/archive/sherpa-onnx-archive-helper.mm +39 -6
- package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +49 -6
- package/ios/model_detect/sherpa-onnx-model-detect.h +9 -1
- package/ios/model_detect/sherpa-onnx-validate-tts.mm +18 -2
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.h +1 -0
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.mm +4 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.h +37 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.mm +158 -3
- package/lib/module/NativeSherpaOnnx.js.map +1 -1
- package/lib/module/audio/index.js +8 -0
- package/lib/module/audio/index.js.map +1 -1
- package/lib/module/download/ModelDownloadManager.js +10 -929
- package/lib/module/download/ModelDownloadManager.js.map +1 -1
- package/lib/module/download/activeModelOperations.js +26 -0
- package/lib/module/download/activeModelOperations.js.map +1 -0
- 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/bulkPurge.js +72 -0
- package/lib/module/download/bulkPurge.js.map +1 -0
- package/lib/module/download/checksumPrompt.js +19 -0
- package/lib/module/download/checksumPrompt.js.map +1 -0
- package/lib/module/download/constants.js +7 -0
- package/lib/module/download/constants.js.map +1 -0
- package/lib/module/download/downloadEvents.js +35 -0
- package/lib/module/download/downloadEvents.js.map +1 -0
- package/lib/module/download/downloadTask.js +438 -0
- package/lib/module/download/downloadTask.js.map +1 -0
- package/lib/module/download/ensureModel.js +89 -0
- package/lib/module/download/ensureModel.js.map +1 -0
- package/lib/module/download/index.js +4 -4
- package/lib/module/download/index.js.map +1 -1
- package/lib/module/download/localModels.js +151 -0
- package/lib/module/download/localModels.js.map +1 -0
- package/lib/module/download/modelExtraction.js +174 -0
- package/lib/module/download/modelExtraction.js.map +1 -0
- package/lib/module/download/paths.js +98 -0
- package/lib/module/download/paths.js.map +1 -0
- package/lib/module/download/postDownloadProcessing.js +206 -0
- package/lib/module/download/postDownloadProcessing.js.map +1 -0
- package/lib/module/download/protectedModelKeys.js +31 -0
- package/lib/module/download/protectedModelKeys.js.map +1 -0
- package/lib/module/download/registry.js +268 -0
- package/lib/module/download/registry.js.map +1 -0
- package/lib/module/download/retry.js +59 -0
- package/lib/module/download/retry.js.map +1 -0
- package/lib/module/download/types.js +17 -0
- package/lib/module/download/types.js.map +1 -0
- package/lib/module/download/validation.js +101 -5
- package/lib/module/download/validation.js.map +1 -1
- package/lib/module/{download → extraction}/extractTarBz2.js +3 -1
- package/lib/module/extraction/extractTarBz2.js.map +1 -0
- package/lib/module/{download → extraction}/extractTarZst.js +3 -1
- package/lib/module/extraction/extractTarZst.js.map +1 -0
- package/lib/module/extraction/index.js +3 -4
- package/lib/module/extraction/index.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/licenses.js +63 -0
- package/lib/module/licenses.js.map +1 -0
- package/lib/module/stt/index.js +16 -2
- package/lib/module/stt/index.js.map +1 -1
- package/lib/module/stt/streaming.js +2 -0
- package/lib/module/stt/streaming.js.map +1 -1
- package/lib/module/stt/streamingTypes.js.map +1 -1
- package/lib/module/stt/types.js.map +1 -1
- package/lib/module/tts/index.js +21 -3
- package/lib/module/tts/index.js.map +1 -1
- package/lib/module/tts/streaming.js +5 -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/module/utils.js +16 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/src/NativeSherpaOnnx.d.ts +34 -6
- package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
- package/lib/typescript/src/audio/index.d.ts +10 -0
- package/lib/typescript/src/audio/index.d.ts.map +1 -1
- package/lib/typescript/src/download/ModelDownloadManager.d.ts +11 -108
- package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -1
- package/lib/typescript/src/download/activeModelOperations.d.ts +6 -0
- package/lib/typescript/src/download/activeModelOperations.d.ts.map +1 -0
- 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/bulkPurge.d.ts +14 -0
- package/lib/typescript/src/download/bulkPurge.d.ts.map +1 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts +3 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts.map +1 -0
- package/lib/typescript/src/download/constants.d.ts +5 -0
- package/lib/typescript/src/download/constants.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadEvents.d.ts +6 -0
- package/lib/typescript/src/download/downloadEvents.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadTask.d.ts +30 -0
- package/lib/typescript/src/download/downloadTask.d.ts.map +1 -0
- package/lib/typescript/src/download/ensureModel.d.ts +26 -0
- package/lib/typescript/src/download/ensureModel.d.ts.map +1 -0
- package/lib/typescript/src/download/index.d.ts +7 -7
- package/lib/typescript/src/download/index.d.ts.map +1 -1
- package/lib/typescript/src/download/localModels.d.ts +15 -0
- package/lib/typescript/src/download/localModels.d.ts.map +1 -0
- package/lib/typescript/src/download/modelExtraction.d.ts +36 -0
- package/lib/typescript/src/download/modelExtraction.d.ts.map +1 -0
- package/lib/typescript/src/download/paths.d.ts +28 -0
- package/lib/typescript/src/download/paths.d.ts.map +1 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts +19 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts.map +1 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts +6 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts.map +1 -0
- package/lib/typescript/src/download/registry.d.ts +14 -0
- package/lib/typescript/src/download/registry.d.ts.map +1 -0
- package/lib/typescript/src/download/retry.d.ts +15 -0
- package/lib/typescript/src/download/retry.d.ts.map +1 -0
- package/lib/typescript/src/download/types.d.ts +96 -0
- package/lib/typescript/src/download/types.d.ts.map +1 -0
- package/lib/typescript/src/download/validation.d.ts +19 -0
- package/lib/typescript/src/download/validation.d.ts.map +1 -1
- package/lib/typescript/src/extraction/extractTarBz2.d.ts.map +1 -0
- package/lib/typescript/src/extraction/extractTarZst.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/licenses.d.ts +10 -0
- package/lib/typescript/src/licenses.d.ts.map +1 -0
- package/lib/typescript/src/stt/index.d.ts +4 -1
- package/lib/typescript/src/stt/index.d.ts.map +1 -1
- package/lib/typescript/src/stt/streaming.d.ts.map +1 -1
- package/lib/typescript/src/stt/streamingTypes.d.ts +5 -0
- package/lib/typescript/src/stt/streamingTypes.d.ts.map +1 -1
- package/lib/typescript/src/stt/types.d.ts +3 -1
- package/lib/typescript/src/stt/types.d.ts.map +1 -1
- package/lib/typescript/src/tts/index.d.ts +4 -2
- 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 +12 -6
- package/lib/typescript/src/tts/types.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +5 -0
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/package.json +6 -1
- package/scripts/{check-model-csvs.sh → ci/check-model-csvs.sh} +9 -2
- package/scripts/ci/collect_all_sherpa_model_streams.sh +101 -0
- package/scripts/ci/collect_one_sherpa_release_stream.sh +189 -0
- package/scripts/ci/sherpa_asr_model_release_streams.json +21 -0
- package/scripts/ci/sherpa_tts_model_release_streams.json +13 -0
- package/scripts/ci/update_model_license_csv.sh +765 -0
- package/scripts/setup-ios-framework.sh +14 -11
- package/scripts/update_commercial_use.js +73 -0
- package/src/NativeSherpaOnnx.ts +37 -6
- package/src/audio/index.ts +20 -0
- package/src/download/ModelDownloadManager.ts +57 -1343
- package/src/download/activeModelOperations.ts +38 -0
- package/src/download/background-downloader-types.ts +73 -0
- package/src/download/bulkPurge.ts +102 -0
- package/src/download/checksumPrompt.ts +25 -0
- package/src/download/constants.ts +5 -0
- package/src/download/downloadEvents.ts +55 -0
- package/src/download/downloadTask.ts +565 -0
- package/src/download/ensureModel.ts +124 -0
- package/src/download/index.ts +21 -4
- package/src/download/localModels.ts +234 -0
- package/src/download/modelExtraction.ts +244 -0
- package/src/download/paths.ts +134 -0
- package/src/download/postDownloadProcessing.ts +292 -0
- package/src/download/protectedModelKeys.ts +30 -0
- package/src/download/registry.ts +405 -0
- package/src/download/retry.ts +76 -0
- package/src/download/types.ts +120 -0
- package/src/download/validation.ts +114 -8
- package/src/{download → extraction}/extractTarBz2.ts +3 -1
- package/src/{download → extraction}/extractTarZst.ts +3 -1
- package/src/extraction/index.ts +3 -7
- package/src/index.tsx +1 -0
- package/src/licenses.ts +100 -0
- package/src/stt/index.ts +20 -2
- package/src/stt/streaming.ts +3 -0
- package/src/stt/streamingTypes.ts +5 -0
- package/src/stt/types.ts +3 -1
- package/src/tts/index.ts +33 -2
- package/src/tts/streaming.ts +12 -0
- package/src/tts/types.ts +15 -5
- package/src/utils.ts +22 -1
- package/third_party/sherpa-onnx-prebuilt/ANDROID_RELEASE_TAG +1 -1
- package/third_party/sherpa-onnx-prebuilt/IOS_RELEASE_TAG +1 -1
- package/android/src/main/cpp/jni/tts/sherpa-onnx-tts-zipvoice-jni.cpp +0 -301
- package/android/src/main/java/com/sherpaonnx/ZipvoiceTtsWrapper.kt +0 -187
- package/lib/module/download/extractTarBz2.js.map +0 -1
- package/lib/module/download/extractTarZst.js.map +0 -1
- package/lib/typescript/src/download/extractTarBz2.d.ts.map +0 -1
- package/lib/typescript/src/download/extractTarZst.d.ts.map +0 -1
- package/scripts/check-qnn-support.sh +0 -78
- /package/lib/typescript/src/{download → extraction}/extractTarBz2.d.ts +0 -0
- /package/lib/typescript/src/{download → extraction}/extractTarZst.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-sherpa-onnx",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Offline Speech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD with sherpa-onnx for React NativeSpeech-to-Text with sherpa-onnx for React Native",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -58,6 +58,8 @@
|
|
|
58
58
|
"./package.json": "./package.json"
|
|
59
59
|
},
|
|
60
60
|
"files": [
|
|
61
|
+
"THIRD_PARTY_LICENSES",
|
|
62
|
+
"THIRD_PARTY_LICENSES/**",
|
|
61
63
|
"src",
|
|
62
64
|
"lib",
|
|
63
65
|
"android",
|
|
@@ -77,6 +79,8 @@
|
|
|
77
79
|
"!ios/build",
|
|
78
80
|
"!android/build",
|
|
79
81
|
"!android/gradle",
|
|
82
|
+
"!android/**/build",
|
|
83
|
+
"!android/**/build/**",
|
|
80
84
|
"!android/gradlew",
|
|
81
85
|
"!android/gradlew.bat",
|
|
82
86
|
"!android/local.properties",
|
|
@@ -162,6 +166,7 @@
|
|
|
162
166
|
"typescript": "^5.9.2"
|
|
163
167
|
},
|
|
164
168
|
"dependencies": {
|
|
169
|
+
"@kesha-antonov/react-native-background-downloader": "^4.5.4",
|
|
165
170
|
"buffer": "^6.0.3"
|
|
166
171
|
},
|
|
167
172
|
"peerDependencies": {
|
|
@@ -10,6 +10,13 @@ REPO="${SHERPA_ONNX_REPO:-k2-fsa/sherpa-onnx}"
|
|
|
10
10
|
ASR_CSV="${ASR_CSV:-test/fixtures/asr-models-expected.csv}"
|
|
11
11
|
TTS_CSV="${TTS_CSV:-test/fixtures/tts-models-expected.csv}"
|
|
12
12
|
|
|
13
|
+
# Optional: GITHUB_TOKEN or GH_TOKEN for api.github.com rate limits / private forks
|
|
14
|
+
CURL_GH_API=(-sL)
|
|
15
|
+
if [ -n "${GITHUB_TOKEN:-${GH_TOKEN:-}}" ]; then
|
|
16
|
+
_t="${GITHUB_TOKEN:-$GH_TOKEN}"
|
|
17
|
+
CURL_GH_API+=(-H "Authorization: Bearer ${_t}" -H "Accept: application/vnd.github+json")
|
|
18
|
+
fi
|
|
19
|
+
|
|
13
20
|
if [ ! -f "$ASR_CSV" ]; then
|
|
14
21
|
echo "::warning::Missing $ASR_CSV (run from repo root or set ASR_CSV)"
|
|
15
22
|
exit 0
|
|
@@ -21,7 +28,7 @@ fi
|
|
|
21
28
|
|
|
22
29
|
# Fetch ASR release assets (.tar.bz2, .onnx)
|
|
23
30
|
ASR_ASSETS=""
|
|
24
|
-
ASR_RESP="${ASR_RESP:-$(curl
|
|
31
|
+
ASR_RESP="${ASR_RESP:-$(curl "${CURL_GH_API[@]}" "https://api.github.com/repos/${REPO}/releases/tags/asr-models")}"
|
|
25
32
|
if echo "$ASR_RESP" | jq -e '.assets' >/dev/null 2>&1; then
|
|
26
33
|
ASR_ASSETS=$(echo "$ASR_RESP" | jq -r '.assets[] | select(.name | endswith(".tar.bz2") or endswith(".onnx")) | .name')
|
|
27
34
|
else
|
|
@@ -30,7 +37,7 @@ fi
|
|
|
30
37
|
|
|
31
38
|
# Fetch TTS release assets
|
|
32
39
|
TTS_ASSETS=""
|
|
33
|
-
TTS_RESP="${TTS_RESP:-$(curl
|
|
40
|
+
TTS_RESP="${TTS_RESP:-$(curl "${CURL_GH_API[@]}" "https://api.github.com/repos/${REPO}/releases/tags/tts-models")}"
|
|
34
41
|
if echo "$TTS_RESP" | jq -e '.assets' >/dev/null 2>&1; then
|
|
35
42
|
TTS_ASSETS=$(echo "$TTS_RESP" | jq -r '.assets[] | select(.name | endswith(".tar.bz2") or endswith(".onnx")) | .name')
|
|
36
43
|
else
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run collect_one_sherpa_release_stream.sh for every entry in a streams JSON config.
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# collect_all_sherpa_model_streams.sh [--config <file>]
|
|
6
|
+
# collect_all_sherpa_model_streams.sh [--config <file>] --print-git-paths
|
|
7
|
+
#
|
|
8
|
+
# Default config: scripts/ci/sherpa_asr_model_release_streams.json (ASR + QNN).
|
|
9
|
+
# TTS: --config sherpa_tts_model_release_streams.json (relative to this dir or repo root, or absolute).
|
|
10
|
+
#
|
|
11
|
+
# --print-git-paths prints newline-separated paths to git-add (deduped), then exits.
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
16
|
+
CONFIG_REL="sherpa_asr_model_release_streams.json"
|
|
17
|
+
PRINT_PATHS=0
|
|
18
|
+
|
|
19
|
+
while [[ $# -gt 0 ]]; do
|
|
20
|
+
case $1 in
|
|
21
|
+
--config)
|
|
22
|
+
CONFIG_REL="${2:-}"
|
|
23
|
+
[[ -n "$CONFIG_REL" ]] || { echo "--config requires a file path" >&2; exit 1; }
|
|
24
|
+
shift 2
|
|
25
|
+
;;
|
|
26
|
+
--print-git-paths)
|
|
27
|
+
PRINT_PATHS=1
|
|
28
|
+
shift
|
|
29
|
+
;;
|
|
30
|
+
*)
|
|
31
|
+
echo "Unknown option: $1 (use --config FILE and/or --print-git-paths)" >&2
|
|
32
|
+
exit 1
|
|
33
|
+
;;
|
|
34
|
+
esac
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
resolve_config_path() {
|
|
38
|
+
local rel="$1"
|
|
39
|
+
if [[ "$rel" = /* ]]; then
|
|
40
|
+
echo "$rel"
|
|
41
|
+
return
|
|
42
|
+
fi
|
|
43
|
+
if [[ -f "$SCRIPT_DIR/$rel" ]]; then
|
|
44
|
+
echo "$SCRIPT_DIR/$rel"
|
|
45
|
+
return
|
|
46
|
+
fi
|
|
47
|
+
if [[ -f "$REPO_ROOT/$rel" ]]; then
|
|
48
|
+
echo "$REPO_ROOT/$rel"
|
|
49
|
+
return
|
|
50
|
+
fi
|
|
51
|
+
echo ""
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
CONFIG="$(resolve_config_path "$CONFIG_REL")"
|
|
55
|
+
[[ -n "$CONFIG" && -f "$CONFIG" ]] || { echo "Config not found: $CONFIG_REL" >&2; exit 1; }
|
|
56
|
+
|
|
57
|
+
if [[ "$PRINT_PATHS" -eq 1 ]]; then
|
|
58
|
+
{
|
|
59
|
+
jq -r '.streams[] | .structure_file, .expected_csv' "$CONFIG"
|
|
60
|
+
jq -r '.streams[] | .license_csv | strings' "$CONFIG"
|
|
61
|
+
jq -r '.streams[] | .license_csv | strings | select(startswith("android/src/main/assets/model_licenses/")) | ("ios/Resources/model_licenses/" + (split("/") | .[-1]))' "$CONFIG"
|
|
62
|
+
} | sort -u
|
|
63
|
+
exit 0
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
67
|
+
echo "jq is required (install jq or use CI)." >&2
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
GITHUB_REPO="$(jq -r '.repo // "k2-fsa/sherpa-onnx"' "$CONFIG")"
|
|
72
|
+
|
|
73
|
+
n="$(jq '.streams | length' "$CONFIG")"
|
|
74
|
+
for ((i = 0; i < n; i++)); do
|
|
75
|
+
row="$(jq -c ".streams[$i]" "$CONFIG")"
|
|
76
|
+
tag="$(echo "$row" | jq -r '.release_tag')"
|
|
77
|
+
tree="$(echo "$row" | jq -r '.tree_cache_dir')"
|
|
78
|
+
struct="$(echo "$row" | jq -r '.structure_file')"
|
|
79
|
+
expected="$(echo "$row" | jq -r '.expected_csv')"
|
|
80
|
+
lic="$(echo "$row" | jq -r '.license_csv | strings')"
|
|
81
|
+
sid="$(echo "$row" | jq -r '.id // empty')"
|
|
82
|
+
|
|
83
|
+
args=(
|
|
84
|
+
"$SCRIPT_DIR/collect_one_sherpa_release_stream.sh"
|
|
85
|
+
--repo-root "$REPO_ROOT"
|
|
86
|
+
--github-repo "$GITHUB_REPO"
|
|
87
|
+
--release-tag "$tag"
|
|
88
|
+
--structure-file "$struct"
|
|
89
|
+
--expected-csv "$expected"
|
|
90
|
+
--tree-cache-dir "$tree"
|
|
91
|
+
)
|
|
92
|
+
if [[ -n "$lic" ]]; then
|
|
93
|
+
args+=(--license-csv "$lic")
|
|
94
|
+
fi
|
|
95
|
+
if [[ -n "$sid" ]]; then
|
|
96
|
+
args+=(--stream-id "$sid")
|
|
97
|
+
fi
|
|
98
|
+
bash "${args[@]}"
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
echo "=== All streams processed ($n) config=$(basename "$CONFIG") ==="
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Fetch one GitHub release from k2-fsa/sherpa-onnx (or --github-repo), refresh tree listings,
|
|
3
|
+
# aggregate structure + expected CSV, optionally run update_model_license_csv.sh (in this directory).
|
|
4
|
+
# Paths are relative to repository root (--repo-root).
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
GITHUB_REPO="k2-fsa/sherpa-onnx"
|
|
8
|
+
REPO_ROOT=""
|
|
9
|
+
RELEASE_TAG=""
|
|
10
|
+
STRUCTURE_FILE=""
|
|
11
|
+
EXPECTED_CSV=""
|
|
12
|
+
TREE_CACHE_DIR=""
|
|
13
|
+
LICENSE_CSV=""
|
|
14
|
+
STREAM_ID=""
|
|
15
|
+
|
|
16
|
+
usage() {
|
|
17
|
+
echo "Usage: $0 --repo-root <dir> --release-tag <tag> --structure-file <rel> --expected-csv <rel> \\"
|
|
18
|
+
echo " --tree-cache-dir <rel> [--github-repo owner/name] [--license-csv <rel>] [--stream-id <id>]"
|
|
19
|
+
exit 1
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
while [[ $# -gt 0 ]]; do
|
|
23
|
+
case $1 in
|
|
24
|
+
--repo-root) REPO_ROOT="$2"; shift 2 ;;
|
|
25
|
+
--github-repo) GITHUB_REPO="$2"; shift 2 ;;
|
|
26
|
+
--release-tag) RELEASE_TAG="$2"; shift 2 ;;
|
|
27
|
+
--structure-file) STRUCTURE_FILE="$2"; shift 2 ;;
|
|
28
|
+
--expected-csv) EXPECTED_CSV="$2"; shift 2 ;;
|
|
29
|
+
--tree-cache-dir) TREE_CACHE_DIR="$2"; shift 2 ;;
|
|
30
|
+
--license-csv) LICENSE_CSV="$2"; shift 2 ;;
|
|
31
|
+
--stream-id) STREAM_ID="$2"; shift 2 ;;
|
|
32
|
+
*) echo "Unknown option: $1"; usage ;;
|
|
33
|
+
esac
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
[[ -n "$REPO_ROOT" && -n "$RELEASE_TAG" && -n "$STRUCTURE_FILE" && -n "$EXPECTED_CSV" && -n "$TREE_CACHE_DIR" ]] || usage
|
|
37
|
+
|
|
38
|
+
REPO_ROOT="$(cd "$REPO_ROOT" && pwd)"
|
|
39
|
+
cd "$REPO_ROOT"
|
|
40
|
+
|
|
41
|
+
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
42
|
+
|
|
43
|
+
_abs_tree="$REPO_ROOT/$TREE_CACHE_DIR"
|
|
44
|
+
_abs_structure="$REPO_ROOT/$STRUCTURE_FILE"
|
|
45
|
+
_abs_expected="$REPO_ROOT/$EXPECTED_CSV"
|
|
46
|
+
|
|
47
|
+
WORK="$(mktemp -d -t sherpa-collect-XXXXXX)"
|
|
48
|
+
trap 'rm -rf "$WORK"' EXIT
|
|
49
|
+
ASSET_LIST="$WORK/asset-list.txt"
|
|
50
|
+
|
|
51
|
+
_GH_TOKEN="${GITHUB_TOKEN:-${GH_TOKEN:-}}"
|
|
52
|
+
_ASSET_LIMIT="${ASSET_LIMIT:-}"
|
|
53
|
+
|
|
54
|
+
echo "=== collect_one_sherpa_release_stream: tag=$RELEASE_TAG tree-cache=$TREE_CACHE_DIR ==="
|
|
55
|
+
|
|
56
|
+
API_AUTH=()
|
|
57
|
+
if [[ -n "$_GH_TOKEN" ]]; then
|
|
58
|
+
API_AUTH=(-H "Authorization: Bearer ${_GH_TOKEN}" -H "Accept: application/vnd.github+json")
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
RESP="$(curl -sSL "${API_AUTH[@]}" "https://api.github.com/repos/${GITHUB_REPO}/releases/tags/${RELEASE_TAG}")"
|
|
62
|
+
if echo "$RESP" | jq -e '.assets' >/dev/null 2>&1; then
|
|
63
|
+
LIST="$(echo "$RESP" | jq -r '.assets[] | select(.name | endswith(".tar.bz2") or endswith(".onnx")) | "\(.name)|\(.browser_download_url)"')"
|
|
64
|
+
if [[ -z "$_ASSET_LIMIT" || "$_ASSET_LIMIT" == "0" ]]; then
|
|
65
|
+
printf '%s\n' "$LIST" > "$ASSET_LIST"
|
|
66
|
+
echo " Asset list: no limit ($(wc -l < "$ASSET_LIST" | tr -d ' ') lines)"
|
|
67
|
+
else
|
|
68
|
+
printf '%s\n' "$LIST" | head -n "$_ASSET_LIMIT" > "$ASSET_LIST"
|
|
69
|
+
echo " Asset list: limit $_ASSET_LIMIT ($(wc -l < "$ASSET_LIST" | tr -d ' ') lines)"
|
|
70
|
+
fi
|
|
71
|
+
else
|
|
72
|
+
echo "::warning::Release ${RELEASE_TAG} not found or has no assets (${GITHUB_REPO})" >&2
|
|
73
|
+
: > "$ASSET_LIST"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
mkdir -p "$_abs_tree"
|
|
77
|
+
|
|
78
|
+
if [[ -f "$_abs_structure" ]]; then
|
|
79
|
+
cur=""
|
|
80
|
+
safe=""
|
|
81
|
+
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
82
|
+
line="${line%$'\r'}"
|
|
83
|
+
if [[ "$line" =~ ^#\ Asset:\ (.+)$ ]]; then
|
|
84
|
+
cur="${BASH_REMATCH[1]}"
|
|
85
|
+
safe="${cur//\//-}"
|
|
86
|
+
safe="${safe//\\/-}"
|
|
87
|
+
: > "${_abs_tree}/${safe}.txt"
|
|
88
|
+
elif [[ -n "$cur" ]]; then
|
|
89
|
+
printf '%s\n' "$line" >> "${_abs_tree}/${safe}.txt"
|
|
90
|
+
fi
|
|
91
|
+
done < "$_abs_structure"
|
|
92
|
+
echo " Parsed existing structure into ${_abs_tree}"
|
|
93
|
+
else
|
|
94
|
+
echo " No existing structure file; tree-cache will be filled from downloads only"
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
mkdir -p "$WORK/dl"
|
|
98
|
+
while IFS='|' read -r name url; do
|
|
99
|
+
[[ -z "$name" ]] && continue
|
|
100
|
+
name="${name%$'\r'}"
|
|
101
|
+
url="${url%$'\r'}"
|
|
102
|
+
safe="${name//\//-}"
|
|
103
|
+
safe="${safe//\\/-}"
|
|
104
|
+
cache_file="${_abs_tree}/${safe}.txt"
|
|
105
|
+
if [[ -f "$cache_file" ]]; then
|
|
106
|
+
echo " Skip (cache hit): $name"
|
|
107
|
+
continue
|
|
108
|
+
fi
|
|
109
|
+
echo " Download: $name"
|
|
110
|
+
dl="$WORK/dl/$safe"
|
|
111
|
+
DL_ARGS=(-sSL)
|
|
112
|
+
if [[ -n "$_GH_TOKEN" && "$url" == *"github.com"* ]]; then
|
|
113
|
+
DL_ARGS+=(-H "Authorization: Bearer ${_GH_TOKEN}" -H "Accept: application/octet-stream")
|
|
114
|
+
fi
|
|
115
|
+
if ! curl "${DL_ARGS[@]}" -o "$dl" "$url"; then
|
|
116
|
+
echo "::warning::Download failed for $name" >&2
|
|
117
|
+
rm -f "$dl"
|
|
118
|
+
continue
|
|
119
|
+
fi
|
|
120
|
+
if [[ "$name" == *.tar.bz2 ]]; then
|
|
121
|
+
if ! tar -tjf "$dl" > "$cache_file" 2>/dev/null; then
|
|
122
|
+
echo "::warning::tar -tjf failed for $name" >&2
|
|
123
|
+
rm -f "$cache_file" "$dl"
|
|
124
|
+
continue
|
|
125
|
+
fi
|
|
126
|
+
elif [[ "$name" == *.onnx ]]; then
|
|
127
|
+
echo "single file: $name" > "$cache_file"
|
|
128
|
+
else
|
|
129
|
+
echo "::warning::Unexpected asset $name" >&2
|
|
130
|
+
rm -f "$dl"
|
|
131
|
+
continue
|
|
132
|
+
fi
|
|
133
|
+
rm -f "$dl"
|
|
134
|
+
done < "$ASSET_LIST"
|
|
135
|
+
|
|
136
|
+
mkdir -p "$(dirname "$_abs_structure")"
|
|
137
|
+
: > "$_abs_structure"
|
|
138
|
+
while IFS='|' read -r name _; do
|
|
139
|
+
[[ -z "$name" ]] && continue
|
|
140
|
+
name="${name%$'\r'}"
|
|
141
|
+
safe="${name//\//-}"
|
|
142
|
+
safe="${safe//\\/-}"
|
|
143
|
+
cache_file="${_abs_tree}/${safe}.txt"
|
|
144
|
+
[[ -f "$cache_file" ]] || continue
|
|
145
|
+
echo "# Asset: $name" >> "$_abs_structure"
|
|
146
|
+
cat "$cache_file" >> "$_abs_structure"
|
|
147
|
+
done < "$ASSET_LIST"
|
|
148
|
+
echo " Wrote aggregated structure ($(wc -l < "$_abs_structure" | tr -d ' ') lines)"
|
|
149
|
+
|
|
150
|
+
if [[ ! -s "$ASSET_LIST" ]]; then
|
|
151
|
+
echo " No assets; skipping expected CSV and license update"
|
|
152
|
+
exit 0
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
mkdir -p "$(dirname "$_abs_expected")"
|
|
156
|
+
if [[ ! -f "$_abs_expected" ]]; then
|
|
157
|
+
echo "asset_name,model_type" > "$_abs_expected"
|
|
158
|
+
fi
|
|
159
|
+
tmp="$(mktemp)"
|
|
160
|
+
echo "asset_name,model_type" > "$tmp"
|
|
161
|
+
while IFS='|' read -r asset _; do
|
|
162
|
+
[[ -z "$asset" ]] && continue
|
|
163
|
+
asset="${asset%$'\r'}"
|
|
164
|
+
esc="${asset//./\\.}"
|
|
165
|
+
line="$(grep -E "^(\"${esc}\"|${esc})," "$_abs_expected" 2>/dev/null | head -1 || true)"
|
|
166
|
+
if [[ -n "$line" ]]; then
|
|
167
|
+
echo "$line" >> "$tmp"
|
|
168
|
+
else
|
|
169
|
+
echo "${asset}," >> "$tmp"
|
|
170
|
+
fi
|
|
171
|
+
done < "$ASSET_LIST"
|
|
172
|
+
mv "$tmp" "$_abs_expected"
|
|
173
|
+
echo " Expected CSV rows: $(($(wc -l < "$_abs_expected" | tr -d ' ') - 1)) data (+ header)"
|
|
174
|
+
|
|
175
|
+
if [[ -n "$LICENSE_CSV" ]]; then
|
|
176
|
+
_abs_license="$REPO_ROOT/$LICENSE_CSV"
|
|
177
|
+
echo " License CSV: $LICENSE_CSV"
|
|
178
|
+
_lic_args=(
|
|
179
|
+
--asset-list "$ASSET_LIST"
|
|
180
|
+
--tree-cache-dir "$_abs_tree"
|
|
181
|
+
--csv "$_abs_license"
|
|
182
|
+
)
|
|
183
|
+
if [[ -n "$STREAM_ID" ]]; then
|
|
184
|
+
_lic_args+=(--stream-id "$STREAM_ID")
|
|
185
|
+
fi
|
|
186
|
+
bash "$CI_DIR/update_model_license_csv.sh" "${_lic_args[@]}"
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
echo "=== done: $RELEASE_TAG ==="
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repo": "k2-fsa/sherpa-onnx",
|
|
3
|
+
"streams": [
|
|
4
|
+
{
|
|
5
|
+
"id": "asr-models",
|
|
6
|
+
"release_tag": "asr-models",
|
|
7
|
+
"tree_cache_dir": "tree-cache/asr-models",
|
|
8
|
+
"structure_file": "test/fixtures/asr-models-structure.txt",
|
|
9
|
+
"expected_csv": "test/fixtures/asr-models-expected.csv",
|
|
10
|
+
"license_csv": "android/src/main/assets/model_licenses/asr-models-license-status.csv"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "asr-models-qnn-binary",
|
|
14
|
+
"release_tag": "asr-models-qnn-binary",
|
|
15
|
+
"tree_cache_dir": "tree-cache/asr-models-qnn-binary",
|
|
16
|
+
"structure_file": "test/fixtures/qnn-asr-models-structure.txt",
|
|
17
|
+
"expected_csv": "test/fixtures/qnn-asr-models-expected.csv",
|
|
18
|
+
"license_csv": "android/src/main/assets/model_licenses/qnn-asr-models-license-status.csv"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repo": "k2-fsa/sherpa-onnx",
|
|
3
|
+
"streams": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tts-models",
|
|
6
|
+
"release_tag": "tts-models",
|
|
7
|
+
"tree_cache_dir": "tree-cache/tts-models",
|
|
8
|
+
"structure_file": "test/fixtures/tts-models-structure.txt",
|
|
9
|
+
"expected_csv": "test/fixtures/tts-models-expected.csv",
|
|
10
|
+
"license_csv": "android/src/main/assets/model_licenses/tts-models-license-status.csv"
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|