Edge0/Audio8-ASR-Infinite

Model

Audio8 ASR Infinite

139

5 commits

1 linked in READMEs

updated Sep 24, 2026

See the code

README

Audio8 ASR Infinite

Hugging Face GitHub arXiv License

Audio8 ASR Infinite is a native streaming speech recognition model built to be as responsive as possible. It offers a selectable audio clock (80/120/160 ms) and a transcription delay (240–560 ms). With our adapted vLLM build it transcribes unlimited-length audio 24/7 without drifting.

Highlights

  • Super responsive β€” the native streaming architecture decodes 12.5 times per second.
  • Unlimited-length transcription β€” a rolling KV Cache keeps both memory and latency constant, even in 24/7 operation.
  • Selectable streaming clock β€” one text token per clock step (12.5 / 8.3 / 6.25 decisions per second), balancing perception granularity and resource cost.
  • Configurable transcription delay β€” set how much delay to trade for accuracy.
  • Semantic VAD β€” distinguishes thinking pauses, stuttering and real end of turn, where traditional acoustic VAD usually fails.
  • Bilingual β€” Chinese and English.

See Audio8-ASR-Infinite in action

The checkpoint has a native context of 30 seconds. But with Rolling KV Cache, it can transcribe 24/7 nonstop.

Optimized operation points

The following combinations of frame length and delay are post-trained. Other combinations can be used but performance may not be optimum.

audio clockframe_lenstreaming_n_left_pad_tokensselectable target_delay_ms
80 ms418240 / 320 / 480 / 560
120 ms612240 / 480
160 ms89320 / 480

target_delay_ms must be an integer multiple of the selected clock, so longer delays stay available at every clock even when they are not listed above.

Architecture

Inherits the Voxtral realtime audio architecture and DSM-style streaming.

ComponentInitial weightsTrained
Causal Audio TowerVoxtral Realtime 4Bβœ…
Audio Projectorrandom initialisationβœ…
Frame Length Embeddingrandom initialisationβœ…
DecoderQwen2.5-3B-Instructβœ…
LM HeadQwen2.5-3B-Instructβœ…

Checkpoint specification:

audio tower32 layers, hidden 1280, 128 mel bins, sliding window 750
text decoder36 layers, hidden 2048, 16 query heads / 2 KV heads
projectormax frame len 8 β†’ projection size 10240, gelu
frame-length conditioningenabled (use_frame_len_embedding: true)
semantic VAD headssemantic_vad_heads.safetensors, 8 classes, horizons 0.5 / 1.0 / 2.0 / 3.0 s
vocab size151936
dtypebfloat16
weights8.17 GB model.safetensors (+ semantic_vad_heads.safetensors)

Roadmap

This is the preview release: it delivers the transcription base. Realtime semantic perception is being built on the same frame grid and the same acoustic forward pass.

StageStatusScope
Preview β€” ASR baseβœ… doneStreaming Chinese/English transcription: selectable 80/120/160 ms clock, configurable target_delay_ms, unlimited-length rolling KV window
Formal releaseπŸƒin progressFrame-level semantic perception on the same grid, beyond transcription

Evaluation

480 ms Delay, 80ms frame length

test setmetricAudio8 ASR InfiniteVoxtral-Mini-4B-Realtime-2602nemotron-3.5-asr-streaming-0.6b
aishell1/testCER1.75016.79512.927@560ms
aishell4/testCER2.89316.45614.677@560ms
librispeech test.cleanWER3.0422.2103.353@560ms
librispeech test.otherWER6.8085.5527.140@560ms
average3.62310.253 (2 sets)9.524

Greedy decode with EOS suppressed, at the 80 ms audio clock with target_delay_ms = 480 (6 delay tokens). Error rates in percent. No repetition loops and no dropped trailing words.

Usage

Programmatic simulated-streaming decode with the embedded remote code:

import numpy as np
import torch
from transformers import AutoFeatureExtractor, AutoTokenizer

from audio8_asr_infinite.modeling.modeling_audio8_asr_infinite import (
    Audio8ASRInfiniteForConditionalGeneration,
    resolve_qwen_language_token_id,
    resolve_qwen_streaming_special_token_ids,
)
from audio8_asr_infinite.streaming_inference import simulated_streaming_greedy_decode_batch

checkpoint = "Edge0/Audio8-ASR-Infinite"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
feature_extractor = AutoFeatureExtractor.from_pretrained(checkpoint, trust_remote_code=True)
model = Audio8ASRInfiniteForConditionalGeneration.from_pretrained(
    checkpoint, trust_remote_code=True, torch_dtype=torch.bfloat16
).eval().cuda()

class AudioConfig:  # duck-typed: raw_audio_samples_per_token / streaming_n_left_pad_tokens / sampling_rate
    raw_audio_samples_per_token = 1280   # 80 ms @ 16 kHz
    streaming_n_left_pad_tokens = 18
    sampling_rate = 16000

waveform = np.load("sample.npy", allow_pickle=False).astype(np.float32)  # [-1, 1], 16 kHz mono
results = simulated_streaming_greedy_decode_batch(
    model=model,
    tokenizer=tokenizer,
    feature_extractor=feature_extractor,
    waveforms=[waveform],
    language_token_ids=[resolve_qwen_language_token_id(tokenizer, "zh")],
    special_ids=resolve_qwen_streaming_special_token_ids(tokenizer),
    audio_config=AudioConfig(),
    num_delay_tokens=[480 // 80],
    right_pad_text_tokens=10,
    dtype=torch.bfloat16,
    device=next(model.parameters()).device,
    max_new_tokens=512,
)
print(results[0]["final_text"])

Only a full merged weight directory is supported (this repository as-is); adapter-style or partially converted weights are not.

24/7 inference with vLLM

Docker compose is the canonical deployment path; it also serves the web demo:

cd docker
AUDIO8_MODEL_DIR=/path/to/checkpoint docker compose up -d

Verify with the web client shipped in the same stack:

http://localhost:8080/     # plain HTTP
https://localhost:8443/    # TLS proxy; accept the self-signed certificate

The same socket can be driven from a terminal:

python -m audio8_asr_infinite.examples.vllm_realtime_client \
    --ws-url ws://127.0.0.1:18191/v1/realtime \
    --audio sample.wav --language zh --target-delay-ms 480 --pace

18191 is the host port published by docker/docker-compose.yml; the service itself listens on 18190 inside the compose network. The rolling KV window is 30 s with exact RoPE re-basing, which is what keeps memory and latency bounded over 24/7 operation.

Torch inference (simulated streaming decode)

python -m audio8_asr_infinite.examples.torch_streaming_decode \
    --checkpoint /path/to/checkpoint \
    --audio sample.wav --language zh --transcription-delay-ms 480
audio
audio8_asr_infinite
automatic-speech-recognition
custom_code
realtime
safetensors
speech-recognition
streaming
text-generation
transformers

Contributors

wanglamao

5 commits

Edge0/Audio8-ASR-Infinite

Model

Audio8 ASR Infinite

139

5 commits

1 linked in READMEs

updated Sep 24, 2026

See the code

README

Audio8 ASR Infinite

Hugging Face GitHub arXiv License

Audio8 ASR Infinite is a native streaming speech recognition model built to be as responsive as possible. It offers a selectable audio clock (80/120/160 ms) and a transcription delay (240–560 ms). With our adapted vLLM build it transcribes unlimited-length audio 24/7 without drifting.

Highlights

  • Super responsive β€” the native streaming architecture decodes 12.5 times per second.
  • Unlimited-length transcription β€” a rolling KV Cache keeps both memory and latency constant, even in 24/7 operation.
  • Selectable streaming clock β€” one text token per clock step (12.5 / 8.3 / 6.25 decisions per second), balancing perception granularity and resource cost.
  • Configurable transcription delay β€” set how much delay to trade for accuracy.
  • Semantic VAD β€” distinguishes thinking pauses, stuttering and real end of turn, where traditional acoustic VAD usually fails.
  • Bilingual β€” Chinese and English.

See Audio8-ASR-Infinite in action

The checkpoint has a native context of 30 seconds. But with Rolling KV Cache, it can transcribe 24/7 nonstop.

Optimized operation points

The following combinations of frame length and delay are post-trained. Other combinations can be used but performance may not be optimum.

audio clockframe_lenstreaming_n_left_pad_tokensselectable target_delay_ms
80 ms418240 / 320 / 480 / 560
120 ms612240 / 480
160 ms89320 / 480

target_delay_ms must be an integer multiple of the selected clock, so longer delays stay available at every clock even when they are not listed above.

Architecture

Inherits the Voxtral realtime audio architecture and DSM-style streaming.

ComponentInitial weightsTrained
Causal Audio TowerVoxtral Realtime 4Bβœ…
Audio Projectorrandom initialisationβœ…
Frame Length Embeddingrandom initialisationβœ…
DecoderQwen2.5-3B-Instructβœ…
LM HeadQwen2.5-3B-Instructβœ…

Checkpoint specification:

audio tower32 layers, hidden 1280, 128 mel bins, sliding window 750
text decoder36 layers, hidden 2048, 16 query heads / 2 KV heads
projectormax frame len 8 β†’ projection size 10240, gelu
frame-length conditioningenabled (use_frame_len_embedding: true)
semantic VAD headssemantic_vad_heads.safetensors, 8 classes, horizons 0.5 / 1.0 / 2.0 / 3.0 s
vocab size151936
dtypebfloat16
weights8.17 GB model.safetensors (+ semantic_vad_heads.safetensors)

Roadmap

This is the preview release: it delivers the transcription base. Realtime semantic perception is being built on the same frame grid and the same acoustic forward pass.

StageStatusScope
Preview β€” ASR baseβœ… doneStreaming Chinese/English transcription: selectable 80/120/160 ms clock, configurable target_delay_ms, unlimited-length rolling KV window
Formal releaseπŸƒin progressFrame-level semantic perception on the same grid, beyond transcription

Evaluation

480 ms Delay, 80ms frame length

test setmetricAudio8 ASR InfiniteVoxtral-Mini-4B-Realtime-2602nemotron-3.5-asr-streaming-0.6b
aishell1/testCER1.75016.79512.927@560ms
aishell4/testCER2.89316.45614.677@560ms
librispeech test.cleanWER3.0422.2103.353@560ms
librispeech test.otherWER6.8085.5527.140@560ms
average3.62310.253 (2 sets)9.524

Greedy decode with EOS suppressed, at the 80 ms audio clock with target_delay_ms = 480 (6 delay tokens). Error rates in percent. No repetition loops and no dropped trailing words.

Usage

Programmatic simulated-streaming decode with the embedded remote code:

import numpy as np
import torch
from transformers import AutoFeatureExtractor, AutoTokenizer

from audio8_asr_infinite.modeling.modeling_audio8_asr_infinite import (
    Audio8ASRInfiniteForConditionalGeneration,
    resolve_qwen_language_token_id,
    resolve_qwen_streaming_special_token_ids,
)
from audio8_asr_infinite.streaming_inference import simulated_streaming_greedy_decode_batch

checkpoint = "Edge0/Audio8-ASR-Infinite"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
feature_extractor = AutoFeatureExtractor.from_pretrained(checkpoint, trust_remote_code=True)
model = Audio8ASRInfiniteForConditionalGeneration.from_pretrained(
    checkpoint, trust_remote_code=True, torch_dtype=torch.bfloat16
).eval().cuda()

class AudioConfig:  # duck-typed: raw_audio_samples_per_token / streaming_n_left_pad_tokens / sampling_rate
    raw_audio_samples_per_token = 1280   # 80 ms @ 16 kHz
    streaming_n_left_pad_tokens = 18
    sampling_rate = 16000

waveform = np.load("sample.npy", allow_pickle=False).astype(np.float32)  # [-1, 1], 16 kHz mono
results = simulated_streaming_greedy_decode_batch(
    model=model,
    tokenizer=tokenizer,
    feature_extractor=feature_extractor,
    waveforms=[waveform],
    language_token_ids=[resolve_qwen_language_token_id(tokenizer, "zh")],
    special_ids=resolve_qwen_streaming_special_token_ids(tokenizer),
    audio_config=AudioConfig(),
    num_delay_tokens=[480 // 80],
    right_pad_text_tokens=10,
    dtype=torch.bfloat16,
    device=next(model.parameters()).device,
    max_new_tokens=512,
)
print(results[0]["final_text"])

Only a full merged weight directory is supported (this repository as-is); adapter-style or partially converted weights are not.

24/7 inference with vLLM

Docker compose is the canonical deployment path; it also serves the web demo:

cd docker
AUDIO8_MODEL_DIR=/path/to/checkpoint docker compose up -d

Verify with the web client shipped in the same stack:

http://localhost:8080/     # plain HTTP
https://localhost:8443/    # TLS proxy; accept the self-signed certificate

The same socket can be driven from a terminal:

python -m audio8_asr_infinite.examples.vllm_realtime_client \
    --ws-url ws://127.0.0.1:18191/v1/realtime \
    --audio sample.wav --language zh --target-delay-ms 480 --pace

18191 is the host port published by docker/docker-compose.yml; the service itself listens on 18190 inside the compose network. The rolling KV window is 30 s with exact RoPE re-basing, which is what keeps memory and latency bounded over 24/7 operation.

Torch inference (simulated streaming decode)

python -m audio8_asr_infinite.examples.torch_streaming_decode \
    --checkpoint /path/to/checkpoint \
    --audio sample.wav --language zh --transcription-delay-ms 480
audio
audio8_asr_infinite
automatic-speech-recognition
custom_code
realtime
safetensors
speech-recognition
streaming
text-generation
transformers

Contributors

wanglamao

5 commits