Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,22 @@ audiocpp_add_model(qwen3_asr
qwen3_forced_aligner
)

audiocpp_add_model(confucius4_r2t2
SOURCES
src/community_models/confucius4_r2t2/assets.cpp
src/community_models/confucius4_r2t2/text_postprocess.cpp
src/community_models/confucius4_r2t2/tokenizer_text.cpp
src/community_models/confucius4_r2t2/frontend_whisper.cpp
src/community_models/confucius4_r2t2/audio_encoder.cpp
src/community_models/confucius4_r2t2/thinker.cpp
src/community_models/confucius4_r2t2/prompt_asr.cpp
src/community_models/confucius4_r2t2/session.cpp
INCLUDES
engine/community_models/confucius4_r2t2/session.h
LOADERS
engine::community_models::confucius4_r2t2::make_confucius4_r2t2_loader
)

audiocpp_add_model(qwen3_forced_aligner
SOURCES
src/models/qwen3_forced_aligner/processor.cpp
Expand Down Expand Up @@ -2971,6 +2987,23 @@ if (ENGINE_BUILD_TESTS OR ENGINE_BUILD_EXTENDED_TESTS OR ENGINE_BUILD_MODEL_TEST
target_link_libraries(test_granite5asr_golden_transcription PRIVATE OpenMP::OpenMP_CXX)
endif()

if (confucius4_r2t2 IN_LIST AUDIOCPP_LINKED_MODELS)
add_executable(test_confucius4_r2t2_graph_reuse tests/confucius4_r2t2/test_graph_reuse.cpp)
target_compile_definitions(test_confucius4_r2t2_graph_reuse PRIVATE ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(test_confucius4_r2t2_graph_reuse PRIVATE engine_runtime ggml)
add_executable(test_confucius4_r2t2_transcription
tests/confucius4_r2t2/test_confucius4_r2t2_transcription.cpp
)
target_compile_definitions(test_confucius4_r2t2_transcription PRIVATE
ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
)
target_link_libraries(test_confucius4_r2t2_transcription PRIVATE engine_runtime ggml)
target_include_directories(test_confucius4_r2t2_transcription PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
if (ENGINE_ENABLE_OPENMP)
target_link_libraries(test_confucius4_r2t2_transcription PRIVATE OpenMP::OpenMP_CXX)
endif()
endif()

if (vibeasr IN_LIST AUDIOCPP_LINKED_MODELS)
add_executable(test_vibeasr_vae_encoder
tests/vibeasr/test_vibeasr_vae_encoder.cpp
Expand Down
18 changes: 18 additions & 0 deletions app/server/example.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,24 @@
"path": "../../models/Qwen3-ASR-0.6B",
"task": "asr",
"mode": "offline"
},
{
"id": "r2t2-asr",
"family": "confucius4_r2t2",
"path": "../../models/Confucius4-R2T2-GGUF/r2t2-q8_0.gguf",
"task": "asr",
"mode": "offline"
},
{
"id": "r2t2-asr-stream",
"family": "confucius4_r2t2",
"path": "../../models/Confucius4-R2T2-GGUF/r2t2-q8_0.gguf",
"task": "asr",
"mode": "streaming",
"session_options": {
"confucius4_r2t2.chunk_size_ms": "320",
"confucius4_r2t2.max_tokens": "32"
}
}
]
}
23 changes: 23 additions & 0 deletions docs/asr.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
| Fun-ASR-Nano | `fun_asr_nano` | offline | [Fun-ASR-Nano](#fun-asr-nano) |
| Granite Speech 5.0 TurboCTC | `granite5asr` | offline | [Granite Speech 5.0 TurboCTC](community_models/granite5asr.md) |
| Qwen3 ASR | `qwen3_asr` | offline, streaming | [Qwen3 ASR](#qwen3-asr) |
| Confucius4-R2T2 | `confucius4_r2t2` | offline, streaming | [Confucius4-R2T2](community_models/r2t2.md) |
| Citrinet ASR | `citrinet_asr` | offline | [Citrinet ASR](#citrinet-asr) |
| Kroko Community ASR | `kroko_asr` | offline, streaming | [Kroko Community ASR](#kroko-community-asr) |
| Higgs Audio STT | `higgs_audio_stt` | offline, streaming | [Higgs Audio STT](models/higgs_audio_stt.md) |
Expand Down Expand Up @@ -61,6 +62,28 @@ audiocpp_cli --task asr --family qwen3_asr --model models/Qwen3-ASR-1.7B-hf --ba
audiocpp_cli --task asr --mode streaming --family qwen3_asr --model models/Qwen3-ASR-1.7B-hf --backend cuda --audio speech_16k.wav --request-option audio_chunk_seconds=5 --text-out transcript.txt
```

## Confucius4-R2T2

Confucius4-R2T2 is a low-latency append-only streaming ASR model: a Qwen3-ASR
1.7B fine-tune with Longest Stable Prefix (LSP) decoding. Committed text is
never revised, and chunk sizes from 80 ms to 2 s are supported. It runs the
same audio tower as Qwen3 ASR, so only the streaming state machine differs.

```bash
audiocpp_cli --task asr --family confucius4_r2t2 --model models/Confucius4-R2T2 \
--backend metal --audio speech_16k.wav --text-out transcript.txt
```

```bash
audiocpp_cli --task asr --mode streaming --family confucius4_r2t2 \
--model models/Confucius4-R2T2 --backend metal --audio speech_16k.wav \
--session-option confucius4_r2t2.chunk_size_ms=320 --text-out transcript.txt
```

Streaming emits append-only partial text; the final transcript is returned when
the stream ends. See the [Confucius4-R2T2 model guide](community_models/r2t2.md) for the
session options, the LSP state machine, and the MPS golden verification recipe.

## Citrinet ASR

Citrinet is an offline CTC ASR model. It produces transcription text from speech audio.
Expand Down
Loading
Loading