Spaces:
Running
Running
Load Tiny and PnC directly from public model repos
Browse files- README.md +9 -12
- model-config.json +8 -8
README.md
CHANGED
|
@@ -12,7 +12,7 @@ short_description: On-device Danish speech recognition and punctuation
|
|
| 12 |
# Ekko v1 Tiny browser demo
|
| 13 |
|
| 14 |
This Space's code is MIT licensed. The Tiny and PnC model weights have separate
|
| 15 |
-
terms
|
| 16 |
|
| 17 |
This static demo transcribes Danish speech locally in the browser with Ekko v1
|
| 18 |
Tiny int8, sherpa-onnx WebAssembly, and Silero VAD. Ekko PnC loads separately
|
|
@@ -22,13 +22,12 @@ Audio and transcripts are never sent to an inference server. The most recent
|
|
| 22 |
saved.
|
| 23 |
|
| 24 |
The model URLs and checksums are pinned in [`model-config.json`](model-config.json).
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
checks are completed.
|
| 32 |
|
| 33 |
The browser and Python CLI pin the same PnC v2 int8 artifact. The Python
|
| 34 |
downloader also verifies the accompanying legal files from that revision.
|
|
@@ -42,7 +41,7 @@ uv sync --locked
|
|
| 42 |
uv run --no-sync python demo/ekko-tiny-browser/serve_local.py
|
| 43 |
```
|
| 44 |
|
| 45 |
-
The
|
| 46 |
local directory explicitly:
|
| 47 |
|
| 48 |
```bash
|
|
@@ -50,9 +49,7 @@ uv run --no-sync python demo/ekko-tiny-browser/serve_local.py \
|
|
| 50 |
--pnc-dir /path/to/ekko-pnc-v2
|
| 51 |
```
|
| 52 |
|
| 53 |
-
The preview checks all PnC file sizes and hashes before serving them.
|
| 54 |
-
Space cannot fetch the pinned private model revisions until those artifacts
|
| 55 |
-
are released.
|
| 56 |
|
| 57 |
## Build and deploy
|
| 58 |
|
|
|
|
| 12 |
# Ekko v1 Tiny browser demo
|
| 13 |
|
| 14 |
This Space's code is MIT licensed. The Tiny and PnC model weights have separate
|
| 15 |
+
terms in their Hugging Face model repositories.
|
| 16 |
|
| 17 |
This static demo transcribes Danish speech locally in the browser with Ekko v1
|
| 18 |
Tiny int8, sherpa-onnx WebAssembly, and Silero VAD. Ekko PnC loads separately
|
|
|
|
| 22 |
saved.
|
| 23 |
|
| 24 |
The model URLs and checksums are pinned in [`model-config.json`](model-config.json).
|
| 25 |
+
The browser downloads Tiny's runtime configuration and ONNX files, then PnC's
|
| 26 |
+
files, directly from their Hugging Face model repos. The small third-party
|
| 27 |
+
Silero VAD file is bundled with the Space for browser access. Microphone access
|
| 28 |
+
requires a secure origin and the browser's permission prompt, shown after the
|
| 29 |
+
app's introductory mic dialog. Browser support remains a preview while
|
| 30 |
+
physical-device and mobile checks are completed.
|
|
|
|
| 31 |
|
| 32 |
The browser and Python CLI pin the same PnC v2 int8 artifact. The Python
|
| 33 |
downloader also verifies the accompanying legal files from that revision.
|
|
|
|
| 41 |
uv run --no-sync python demo/ekko-tiny-browser/serve_local.py
|
| 42 |
```
|
| 43 |
|
| 44 |
+
The PnC v2 files must already be in the Hugging Face cache, or pass a
|
| 45 |
local directory explicitly:
|
| 46 |
|
| 47 |
```bash
|
|
|
|
| 49 |
--pnc-dir /path/to/ekko-pnc-v2
|
| 50 |
```
|
| 51 |
|
| 52 |
+
The preview checks all PnC file sizes and hashes before serving them.
|
|
|
|
|
|
|
| 53 |
|
| 54 |
## Build and deploy
|
| 55 |
|
model-config.json
CHANGED
|
@@ -13,19 +13,19 @@
|
|
| 13 |
"files": [
|
| 14 |
{
|
| 15 |
"path": "pnc.int8.onnx",
|
| 16 |
-
"url": "
|
| 17 |
"sha256": "46bb979d409731872f10b6cb71298594595f16368d2aec2fcaf94d87b4266527",
|
| 18 |
"bytes": 22424741
|
| 19 |
},
|
| 20 |
{
|
| 21 |
"path": "tokenizer.json",
|
| 22 |
-
"url": "
|
| 23 |
"sha256": "a1e0d43ee307ad7a1ccc23e6e5398d877a68ca7f576067ac507625a0d50e9502",
|
| 24 |
"bytes": 2301084
|
| 25 |
},
|
| 26 |
{
|
| 27 |
"path": "config.json",
|
| 28 |
-
"url": "
|
| 29 |
"sha256": "dc655c46f69eeb15dd43786ad58fb5862cc794b36cc9d2c426ab5bc4b01f23ca",
|
| 30 |
"bytes": 1062
|
| 31 |
}
|
|
@@ -34,31 +34,31 @@
|
|
| 34 |
"files": [
|
| 35 |
{
|
| 36 |
"path": "runtime-config.json",
|
| 37 |
-
"url": "
|
| 38 |
"sha256": "197ec64ea58975cb70c8bac645593bbaaa7ac7b261999b35b7d2986a26a41da5",
|
| 39 |
"bytes": 121
|
| 40 |
},
|
| 41 |
{
|
| 42 |
"path": "nemo-transducer-encoder.onnx",
|
| 43 |
-
"url": "
|
| 44 |
"sha256": "e7ee366cb92cbf5b14beee01f04245293185ec3b271bb12acd7715e94d1f4cf2",
|
| 45 |
"bytes": 131201109
|
| 46 |
},
|
| 47 |
{
|
| 48 |
"path": "nemo-transducer-decoder.onnx",
|
| 49 |
-
"url": "
|
| 50 |
"sha256": "09beaa741719190c0052566a0785de0de212f1b89b0e8e8293fe08e1d0ebb352",
|
| 51 |
"bytes": 3328663
|
| 52 |
},
|
| 53 |
{
|
| 54 |
"path": "nemo-transducer-joiner.onnx",
|
| 55 |
-
"url": "
|
| 56 |
"sha256": "894007e36304dcc24584e2dbbe4dff9b47088fd6e9c0763f38344b270a2ccc72",
|
| 57 |
"bytes": 777055
|
| 58 |
},
|
| 59 |
{
|
| 60 |
"path": "tokens.txt",
|
| 61 |
-
"url": "
|
| 62 |
"sha256": "f6240fdbb496236106174a08b086a1a59a209aea50c5468b5233f0da9e62780b",
|
| 63 |
"bytes": 231
|
| 64 |
},
|
|
|
|
| 13 |
"files": [
|
| 14 |
{
|
| 15 |
"path": "pnc.int8.onnx",
|
| 16 |
+
"url": "https://huggingface.co/RyeAI/ekko-pnc/resolve/d3129544e4e0155093e192cac58a9e69a4dea1ff/pnc.int8.onnx?download=true",
|
| 17 |
"sha256": "46bb979d409731872f10b6cb71298594595f16368d2aec2fcaf94d87b4266527",
|
| 18 |
"bytes": 22424741
|
| 19 |
},
|
| 20 |
{
|
| 21 |
"path": "tokenizer.json",
|
| 22 |
+
"url": "https://huggingface.co/RyeAI/ekko-pnc/resolve/d3129544e4e0155093e192cac58a9e69a4dea1ff/tokenizer.json?download=true",
|
| 23 |
"sha256": "a1e0d43ee307ad7a1ccc23e6e5398d877a68ca7f576067ac507625a0d50e9502",
|
| 24 |
"bytes": 2301084
|
| 25 |
},
|
| 26 |
{
|
| 27 |
"path": "config.json",
|
| 28 |
+
"url": "https://huggingface.co/RyeAI/ekko-pnc/resolve/d3129544e4e0155093e192cac58a9e69a4dea1ff/config.json?download=true",
|
| 29 |
"sha256": "dc655c46f69eeb15dd43786ad58fb5862cc794b36cc9d2c426ab5bc4b01f23ca",
|
| 30 |
"bytes": 1062
|
| 31 |
}
|
|
|
|
| 34 |
"files": [
|
| 35 |
{
|
| 36 |
"path": "runtime-config.json",
|
| 37 |
+
"url": "https://huggingface.co/RyeAI/ekko-v1-tiny/resolve/e37e698805c538e447c25062ab13fa862462ee9e/onnx-sherpa/runtime-config.json?download=true",
|
| 38 |
"sha256": "197ec64ea58975cb70c8bac645593bbaaa7ac7b261999b35b7d2986a26a41da5",
|
| 39 |
"bytes": 121
|
| 40 |
},
|
| 41 |
{
|
| 42 |
"path": "nemo-transducer-encoder.onnx",
|
| 43 |
+
"url": "https://huggingface.co/RyeAI/ekko-v1-tiny/resolve/e37e698805c538e447c25062ab13fa862462ee9e/onnx-sherpa/encoder.int8.onnx?download=true",
|
| 44 |
"sha256": "e7ee366cb92cbf5b14beee01f04245293185ec3b271bb12acd7715e94d1f4cf2",
|
| 45 |
"bytes": 131201109
|
| 46 |
},
|
| 47 |
{
|
| 48 |
"path": "nemo-transducer-decoder.onnx",
|
| 49 |
+
"url": "https://huggingface.co/RyeAI/ekko-v1-tiny/resolve/e37e698805c538e447c25062ab13fa862462ee9e/onnx-sherpa/decoder.int8.onnx?download=true",
|
| 50 |
"sha256": "09beaa741719190c0052566a0785de0de212f1b89b0e8e8293fe08e1d0ebb352",
|
| 51 |
"bytes": 3328663
|
| 52 |
},
|
| 53 |
{
|
| 54 |
"path": "nemo-transducer-joiner.onnx",
|
| 55 |
+
"url": "https://huggingface.co/RyeAI/ekko-v1-tiny/resolve/e37e698805c538e447c25062ab13fa862462ee9e/onnx-sherpa/joiner.int8.onnx?download=true",
|
| 56 |
"sha256": "894007e36304dcc24584e2dbbe4dff9b47088fd6e9c0763f38344b270a2ccc72",
|
| 57 |
"bytes": 777055
|
| 58 |
},
|
| 59 |
{
|
| 60 |
"path": "tokens.txt",
|
| 61 |
+
"url": "https://huggingface.co/RyeAI/ekko-v1-tiny/resolve/e37e698805c538e447c25062ab13fa862462ee9e/onnx-sherpa/tokens.txt?download=true",
|
| 62 |
"sha256": "f6240fdbb496236106174a08b086a1a59a209aea50c5468b5233f0da9e62780b",
|
| 63 |
"bytes": 231
|
| 64 |
},
|