openmartdev commited on
Commit
279e5e8
·
verified ·
1 Parent(s): c12f306

Replace talker-9500 with GRPO checkpoint-160 and repository model card

Browse files
.gitattributes CHANGED
@@ -34,3 +34,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  tokenizer.json filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ assets/architecture.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/results.png filter=lfs diff=lfs merge=lfs -text
39
+ assets/training.png filter=lfs diff=lfs merge=lfs -text
40
+ results_backchannel.png filter=lfs diff=lfs merge=lfs -text
41
+ results_groundedness.png filter=lfs diff=lfs merge=lfs -text
42
+ results_logic.png filter=lfs diff=lfs merge=lfs -text
43
+ results_qa.png filter=lfs diff=lfs merge=lfs -text
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md CHANGED
@@ -1,46 +1,256 @@
1
  ---
2
  language:
3
- - en
4
- - zh
5
- tags:
6
- - speech-to-speech
7
- - full-duplex
8
- - awaken-chat
9
  pipeline_tag: audio-to-audio
 
 
 
 
 
10
  ---
11
- # Awaken Chat — talker checkpoint 9500
12
 
13
- Full-duplex speech-to-speech checkpoint from `podcast-talker-v3-micro-b64-2ep/checkpoint-9500`.
14
- Weights are the original checkpoint shards. A model-weight license has not been specified;
15
- the inference code repository's Apache-2.0 license does not establish the license of these weights.
16
 
17
- ## Load with the inference repository
18
 
19
- Use [OpenmartAI/awake-audio-chat](https://github.com/OpenmartAI/awake-audio-chat),
20
- with its documented CUDA / PyTorch dependencies and Transformers 4.52.x:
21
 
22
- ```python
23
- from awaken_chat import load_model
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- loaded = load_model("openmartdev/awaken-full-duplex")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  ```
27
 
 
 
 
 
28
  ```bash
29
- awaken-server --model openmartdev/awaken-full-duplex --port 8998
 
30
  ```
31
 
32
- The weights require `AwakenModel` from that repository. Generic Transformers
33
- `AutoModel.from_pretrained` is not a supported loading path for this prepared directory.
34
- The server separately downloads CosyVoice3 `flow.pt`, `hift.pt` and the ONNX estimator
35
- from `FunAudioLLM/Fun-CosyVoice3-0.5B-2512`; GPU-specific TensorRT plans are built locally.
36
- Optional voice prompts are distributed with the inference repository.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
- ## Contents and provenance
 
 
 
39
 
40
- Eight safetensors shards, their index, the tokenizer files, and the inference config are
41
- included. Config normalization selects `AwakenModel` and the duplex `add` fusion mode,
42
- matching `load_model`. Source weights and tokenizer are unchanged. See `provenance.json`.
43
- Training arguments, trainer logs, credentials, codec binaries and TensorRT plans are excluded.
44
 
45
- The `grpo-160` checkpoint used for initial service validation is a separate checkpoint;
46
- its results do not establish the speech quality of this talker checkpoint.
 
1
  ---
2
  language:
3
+ - en
4
+ license: apache-2.0
5
+ base_model: FunAudioLLM/Fun-Audio-Chat-8B
 
 
 
6
  pipeline_tag: audio-to-audio
7
+ tags:
8
+ - full-duplex
9
+ - speech-to-speech
10
+ - spoken-dialogue
11
+ - audio-language-model
12
  ---
 
13
 
14
+ # Awaken Chat
 
 
15
 
16
+ <div align="center">
17
 
18
+ **Awaken: An Efficient Training Recipe for Full-Duplex Conversation That Retains Model Ability**
 
19
 
20
+ [![Blog](https://img.shields.io/badge/Blog-Project%20Page-orange)](https://github.com/OpenmartAI/awake-audio-chat/blob/main/webpage/index.html)
21
+ [![GitHub](https://img.shields.io/badge/GitHub-Code-blue)](https://github.com/OpenmartAI/awake-audio-chat)
22
+ [![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97-Model-yellow)](https://huggingface.co/openmartdev/awaken-full-duplex)
23
+ [![Base model](https://img.shields.io/badge/Base-Fun--Audio--Chat--8B-green)](https://huggingface.co/FunAudioLLM/Fun-Audio-Chat-8B)
24
+
25
+ </div>
26
+
27
+ ## Model Description
28
+
29
+ Full-duplex voice models can listen and speak at the same time, so they can acknowledge,
30
+ interrupt, and hand over turns the way people do. Teaching this usually depends on natural
31
+ conversational audio rich in backchannels. That audio is scarce, and without careful curation
32
+ it can weaken a model's reasoning and grounding. **Awaken** learns full-duplex behavior from a
33
+ small amount of such data and keeps its base model's scores.
34
+
35
+ <p align="center">
36
+ <img width="95%" src="assets/results.png" alt="Awaken evaluation results: backchannels, groundedness, spoken logic puzzles, and spoken question answering">
37
+ </p>
38
+
39
+ ### Key Features
40
+
41
+ - **Efficient**: Starts from the half-duplex [Fun-Audio-Chat-8B](https://huggingface.co/FunAudioLLM/Fun-Audio-Chat-8B)
42
+ checkpoint and teaches turn-taking with composed conversations that have explicit timing,
43
+ overlap, and interruptions. Two supervised stages and a short reinforcement-learning stage
44
+ are enough; there is no large-scale duplex pretraining.
45
+ - **Effective**: A targeted GRPO stage raises the backchannel pass rate from 1% (supervised
46
+ training alone) to **63%**, while taking the floor in only **3%** of items.
47
+ - **Retains model ability**: Passes **61%** of groundedness probes, near its half-duplex base
48
+ (66%) and well above open full-duplex models (14–35%). Solves **90%** of spoken logic
49
+ puzzles, compared with 30–40% for open full-duplex models.
50
+
51
+ <p align="center">
52
+ <img width="95%" src="assets/architecture.png" alt="Awaken architecture: user features, text embeddings, and audio-token embeddings enter a shared fusion layer and transformer backbone that predicts the next text token and conditions the audio decoder">
53
+ </p>
54
+
55
+ ### Training Recipe
56
+
57
+ <p align="center">
58
+ <img width="80%" src="assets/training.png" alt="Training path from Fun-Audio-Chat through streaming adaptation, two SFT stages, and backchannel-focused GRPO">
59
+ </p>
60
+
61
+ 1. **Stage 1 SFT**: learns the streaming input pattern and aligned text and speech targets on
62
+ 64,000 composed conversations (windows up to 180 s).
63
+ 2. **Stage 2 SFT**: blends the stage-1 weights 50/50 with the base checkpoint, then continues
64
+ on 100,132 records with replay of the interaction data.
65
+ 3. **GRPO**: improves backchannel timing from the model's own samples in conversational windows.
66
+
67
+ See the [project page](https://github.com/OpenmartAI/awake-audio-chat/blob/main/webpage/index.html) for the full data composition and training details.
68
+
69
+ ## Model Details
70
+
71
+ | Attribute | Value |
72
+ |-----------|-------|
73
+ | Model Size | ~8B parameters |
74
+ | Base Model | [Fun-Audio-Chat-8B](https://huggingface.co/FunAudioLLM/Fun-Audio-Chat-8B) (half-duplex) |
75
+ | Backbone | Qwen3-8B, one position per 200 ms frame |
76
+ | Input | Streaming 24 kHz user audio through a causal Whisper-style encoder (2 s attention window) |
77
+ | Output | Text tokens and 5 codec tokens per frame, rendered by the CosyVoice3 flow decoder and HiFT vocoder |
78
+ | Interaction | Full-duplex: no turns, no voice-activity detector |
79
+ | Languages | English |
80
+ | License | Apache 2.0 (same as the base model) |
81
+
82
+ ## Requirements
83
 
84
+ - Linux with an NVIDIA GPU (CUDA)
85
+ - Python >= 3.10
86
+ - PyTorch >= 2.7 (tested with 2.8, CUDA 12.8)
87
+ - TensorRT 10
88
+
89
+ ## Installation
90
+
91
+ ```bash
92
+ git clone https://github.com/OpenmartAI/awake-audio-chat
93
+ cd awake-audio-chat
94
+
95
+ # 1. torch + torchaudio for YOUR CUDA driver first (the default PyPI wheel targets the newest
96
+ # CUDA and will not load on older drivers), e.g. for CUDA 12.8:
97
+ pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128
98
+ # 2. the package
99
+ pip install -e . # Linux + CUDA GPU; pulls transformers, tensorrt, ...
100
+ pip install -e ".[fast]" # + flash-attn (faster decode; optional)
101
+ pip install -e ".[voice]" # + onnxruntime, to make voice prompts from a clip
102
  ```
103
 
104
+ ## Quick Start
105
+
106
+ ### Download Models
107
+
108
  ```bash
109
+ pip install huggingface-hub
110
+ hf download openmartdev/awaken-full-duplex --local-dir ./pretrained_models/awaken-chat
111
  ```
112
 
113
+ The speech codec is fetched automatically from
114
+ [`FunAudioLLM/Fun-CosyVoice3-0.5B-2512`](https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512)
115
+ (flow, vocoder and the estimator's ONNX export only). The TensorRT engine is built once per
116
+ machine on first use, which takes a few minutes.
117
+
118
+ ### Inference
119
+
120
+ Live server (one conversation at a time, WebSocket protocol in `awaken_chat/server/protocol.py`):
121
+
122
+ ```bash
123
+ awaken-server --model ./pretrained_models/awaken-chat --port 8998 [--ssl-dir certs] [--voices-dir assets/voices]
124
+ ```
125
+
126
+ Offline, with a recorded user track:
127
+
128
+ ```bash
129
+ awaken-offline --model ./pretrained_models/awaken-chat --input user.wav --out out/ # stereo.wav, transcript.txt, tokens.pt
130
+ ```
131
+
132
+ Make a voice prompt from a reference clip (3-10 s of one speaker you have the rights to):
133
+
134
+ ```bash
135
+ awaken-voice --clip speaker.wav --out assets/voices/speaker.pt
136
+ ```
137
+
138
+ From Python:
139
+
140
+ ```python
141
+ from awaken_chat import load_model, Decoders, DuplexSession, system_prompt
142
+
143
+ loaded = load_model("./pretrained_models/awaken-chat") # HF repo id or local directory
144
+ decoders = Decoders(loaded.model) # static caches + CUDA graphs, once per process
145
+ session = DuplexSession(loaded.model, decoders, loaded.prompt_ids(system_prompt("You are a tour guide.")))
146
+ for features in ear_frames: # (5, 4096) per 200 ms, see models/ear.py
147
+ out = session.step(features) # out.text_id, out.audio_ids, out.state
148
+ ```
149
+
150
+ ## Evaluation
151
+
152
+ We measure listener behavior, following the conversation, and knowledge and reasoning side by
153
+ side. Awaken and Fun-Audio-Chat-8B are run by us; other rows come from the public
154
+ InteractionBench results and the Fun-Audio-Chat technical report.
155
+
156
+ | System | Backchannel pass ↑ | Floor-take ↓ | Groundedness probes ↑ | Logic puzzles ↑ | Llama Q. ↑ | TriviaQA ↑ |
157
+ |--------|-------------------:|-------------:|----------------------:|----------------:|-----------:|-----------:|
158
+ | GPT-Realtime | 10% | 5% | 67% | 100% | – | – |
159
+ | Moshi | 78% | 22% | 14% | 30% | 65.67 | 18.46 |
160
+ | Freeze-Omni | 0% | 39% | 35% | 40% | 74.00 | 30.08 |
161
+ | PersonaPlex | 83% | 11% | 30% | 30% | – | – |
162
+ | Fun-Audio-Chat-Duplex-8B | – | – | – | – | 72.33 | 29.59 |
163
+ | Fun-Audio-Chat-8B (half-duplex base) | n/a | n/a | 66% | 100% | 76.2 | 48.7 |
164
+ | Awaken SFT | 1% | 6% | 62% | 87% | 70.7 | 35.5 |
165
+ | **Awaken GRPO** | **63%** | **3%** | **61%** | **90%** | **73.4** | **36.2** |
166
+
167
+ - **Backchannels**: 30 InteractionBench storytelling items × 3 seeds. An item passes when the
168
+ assistant backchannels at least once and never takes the floor. A half-duplex model cannot
169
+ speak while the user is speaking, so the base model is n/a.
170
+ - **Groundedness**: 10 conversations of 22–24 turns, then 52 probes (recall, updates, unknown
171
+ information, constraints, false premises, nonsense questions). Our rows are means over 5–30
172
+ runs judged on the model's text stream; published rows judge transcripts of the audio.
173
+ - **Logic puzzles**: 10 InteractionBench puzzles × 3 seeds, judged on the model's text stream.
174
+ - **Spoken QA**: our rows are means over 3 seeds; Freeze-Omni, Moshi and Fun-Audio-Chat-Duplex-8B
175
+ are reported scores from Table 7 of the Fun-Audio-Chat technical report.
176
+
177
+ Because our runs and the published results are scored differently, compare across systems with
178
+ care. Full methodology is on the [project page](https://github.com/OpenmartAI/awake-audio-chat/blob/main/webpage/index.html).
179
+
180
+ ## Inference Details
181
+
182
+ <details>
183
+ <summary>How the inference stack works</summary>
184
+
185
+ Every 200 ms ("one frame") the model consumes
186
+
187
+ * the user's audio of that frame, through a causal **ear** (a Whisper-style encoder with a
188
+ 2 s attention window),
189
+ * its own previous frame: one **text token** and five **codec tokens** of its own voice,
190
+
191
+ and predicts the next text token and the next five codec tokens. The text lane carries the
192
+ words and two control tokens: `pad` means "listening" and, during speech, "I am done" (the
193
+ release); `sil` means "words done, audio still finishing". The codec tokens are rendered to
194
+ speech by CosyVoice3's flow-matching decoder and HiFT vocoder.
195
+
196
+ ```
197
+ mic 24 kHz ─► StreamingEar ─► 5 feature vectors per frame ─┐
198
+ ▼
199
+ own text token ──► Qwen3-8B backbone (one position per frame) ──► next text token
200
+ own codec tokens ─┘ │
201
+ ▼
202
+ depth decoder (5 codec tokens / frame) ──► CosyVoice3 flow + HiFT ──► speaker
203
+ ```
204
+
205
+ Both transformer stacks run through a fused, CUDA-graphed single-token decoder with static
206
+ key/value caches (`awaken_chat/inference/static_decoder.py`), so a frame costs a few
207
+ milliseconds of launch overhead instead of thousands of small kernels.
208
+
209
+ </details>
210
+
211
+ <details>
212
+ <summary>Decode parameters</summary>
213
+
214
+ `DecodeParams` (`awaken_chat/inference/params.py`) has two presets. `bench` is the recipe the
215
+ reported numbers were produced with (text T 0.7 / top-k 25, audio T 0.8 / top-k 250).
216
+ `live` is sharper inside a text burst (T 0.2 / top-k 5), penalizes repeated content tokens and
217
+ caps consecutive near-silent codec tokens; it is what the server uses by default. Any field
218
+ can be overridden per conversation in the `start` message.
219
+
220
+ </details>
221
+
222
+ <details>
223
+ <summary>Repository layout</summary>
224
+
225
+ ```
226
+ awaken_chat/
227
+ frame.py frame rate, group size, sample rates, special token ids, system prompt
228
+ models/ configuration, ear, token embedder, depth decoder, AwakenModel, loaders
229
+ inference/ static decoder, session state machine, sampling, decode params, offline runner
230
+ codec/ CosyVoice3 flow + HiFT (vendored, trimmed), streaming detokenizer, worker process, voices
231
+ server/ WebSocket protocol, live session runner, FastAPI app
232
+ cli.py awaken-server / awaken-offline / awaken-voice
233
+ scripts/ ws_client.py, a paced WebSocket client that drives the server from a wav file
234
+ tests/ CPU unit tests on tiny random models
235
+ hf_model_card/ Hugging Face model card (README + figures)
236
+ webpage/ project page
237
+ ```
238
+
239
+ </details>
240
+
241
+ ## License
242
+
243
+ The code and model weights are licensed under the [Apache 2.0 License](https://github.com/OpenmartAI/awake-audio-chat/blob/main/LICENSE), the same license
244
+ as the base model [Fun-Audio-Chat-8B](https://huggingface.co/FunAudioLLM/Fun-Audio-Chat-8B).
245
+
246
+ ## Acknowledgments
247
 
248
+ The model architecture is derived from [Fun-Audio-Chat](https://github.com/FunAudioLLM/Fun-Audio-Chat)
249
+ and the speech codec from [CosyVoice](https://github.com/FunAudioLLM/CosyVoice) (both Apache-2.0);
250
+ the text backbone is [Qwen3](https://github.com/QwenLM/Qwen3), and the ear follows
251
+ [Whisper](https://github.com/openai/whisper)'s encoder. See [`NOTICE`](https://github.com/OpenmartAI/awake-audio-chat/blob/main/NOTICE).
252
 
253
+ ## Contact
 
 
 
254
 
255
+ - 🐛 Submit an [Issue](https://github.com/OpenmartAI/awake-audio-chat/issues)
256
+ - 💡 Submit a [Pull Request](https://github.com/OpenmartAI/awake-audio-chat/pulls)
SHA256SUMS CHANGED
@@ -1,19 +1,23 @@
1
- 640ff085676e2299e365c88e1204fdd574ecdcbd318109c73958364036be613f README.md
 
2
  0804bb76dd9f73fedd1cd3583c1a53046640c493fe5aaf6cf5cd8835118534e5 added_tokens.json
 
 
 
3
  40c21f34cf67d8c760ef72f8ad3ae5afad514299d4b06e91dd9a8d705af7b541 chat_template.jinja
4
- 6eb285078bee24c37d21ea43df4cfe91187dad9eaf0c3015a6d3258edd981dc4 config.json
5
  8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5 merges.txt
6
- 80afe4af73eff1a18e1b766d3fb5a1a34616fa823c550ce9cc1c691a1eced8f5 model-00001-of-00008.safetensors
7
- 5f94b6f57b7fcb3cfd783604f452e4b3e6e1f82ff7ee6e5c746c86e746817639 model-00002-of-00008.safetensors
8
- 8d909715b4b944153d80145695a1a182ba897512e8928d0ce18648e1542ed82d model-00003-of-00008.safetensors
9
- 3f6072a5c35a6e521e9c1c0d1b7beca7f64da8c0534accb0ec46a256e243efff model-00004-of-00008.safetensors
10
- f7a3e8e642c27ab44978ae837ef73ceb3ee98c2241a479e8ab0b4bd16f7356d0 model-00005-of-00008.safetensors
11
- 9755906addbfb718090621b60f782cc95556a9a181242f7ad9d1b385d3b45069 model-00006-of-00008.safetensors
12
- 81aa33b8f6a9fe8959861652646dab16fb7bd4f31b21a31090fffe869a88faf0 model-00007-of-00008.safetensors
13
- f94a24caa08ccfaa103ae8566fc6d25e55d1029949a62272d96399b85013c3a4 model-00008-of-00008.safetensors
14
- 4839ae2ed5ddf4d669ac07c3edc7df8e0d2c4dd5e7c5c0f05b75081b1076e5af model.safetensors.index.json
15
  1384e936235c4fb9cd2be9f7e4e2070bccb4f7653a46109697d87f871552a2c8 preprocessor_config.json
16
- 44e287ce1c17ed72eda382f1ea94320126d47d1ff64aca62146d8b65093c1691 provenance.json
 
 
 
 
17
  48db01c939e1bfde55b513e5c21f99372064755284d2f9ca16351c5a5ee5245f special_tokens_map.json
18
  7a7d58d42d29ac0776a3d5a6e6746fb0fe79dfe65fafa947f3dd76da528a02fe tokenizer.json
19
  6ca0f406138828fa8372b22f9df5788621cdd62c8030b0e7aac94645a153e47f tokenizer_config.json
 
1
+ c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE
2
+ 4de685e95eaeb0180a9b084b9eef0f2bd877eb3384935554aa8e8125c4850049 README.md
3
  0804bb76dd9f73fedd1cd3583c1a53046640c493fe5aaf6cf5cd8835118534e5 added_tokens.json
4
+ 0a7297de0fedb04b7876f6c501daf6e58e00beeae6199738427e7706a1079812 assets/architecture.png
5
+ 234f24ac16bb22dbbe083003856eec1e3afa6c4d85d683c30846eb9ad44ae98a assets/results.png
6
+ cd3e6adffcf84a04619111740a24a6d97410580f41170a51aae30f7e5ff4894c assets/training.png
7
  40c21f34cf67d8c760ef72f8ad3ae5afad514299d4b06e91dd9a8d705af7b541 chat_template.jinja
8
+ 0c74c0bd4f13ce9d7ec3c6aa9d7fd40f2c18b8cfda6d7d75733f24e1ecc98cf5 config.json
9
  8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5 merges.txt
10
+ 7b3138f0ad510097a1eae09a76b2491516cea025a5bd422f6a92a7b2e03aac85 model-00001-of-00004.safetensors
11
+ fbd2a45293372877a64680cd3cc237dd8934ad07fbd4aedf6120deddd9a13062 model-00002-of-00004.safetensors
12
+ a3b04ce3b5fc625e7b720d41e65c9caeae1267e2846904ca3dc12adccd675975 model-00003-of-00004.safetensors
13
+ f3731a7bce8e4b356376f4abf52d7fc00ecea01e71edd80c82edff6ad87d4ab7 model-00004-of-00004.safetensors
14
+ 9be7e886e4babb220e0ce4a2b70bb063a8cd28ba1f9e3765d9dc12891ee0e032 model.safetensors.index.json
 
 
 
 
15
  1384e936235c4fb9cd2be9f7e4e2070bccb4f7653a46109697d87f871552a2c8 preprocessor_config.json
16
+ c22f3a8e41b99ab3ee5bebc6c9a35c68329548e37c8ecd8f31bd32c60fdfeb12 provenance.json
17
+ d3102ce81977f274c80cfa9c791e7cee2e578de224d187fd23af94e1be004a33 results_backchannel.png
18
+ 7662c1060ed6903f31f76fc876e9d7230ded36271ea1c7518741bd4623fe0976 results_groundedness.png
19
+ 725e68fb62813ad46b38c1d1a456101eff0dea55336f1f894ff3aef5dd56ba3a results_logic.png
20
+ 836aa77486b49fac6d1a2cbfa58aebae7039a09b4ecae09f7e7ba8a44b7ae880 results_qa.png
21
  48db01c939e1bfde55b513e5c21f99372064755284d2f9ca16351c5a5ee5245f special_tokens_map.json
22
  7a7d58d42d29ac0776a3d5a6e6746fb0fe79dfe65fafa947f3dd76da528a02fe tokenizer.json
23
  6ca0f406138828fa8372b22f9df5788621cdd62c8030b0e7aac94645a153e47f tokenizer_config.json
model-00001-of-00008.safetensors → assets/architecture.png RENAMED
File without changes
model-00002-of-00008.safetensors → assets/results.png RENAMED
File without changes
model-00003-of-00008.safetensors → assets/training.png RENAMED
File without changes
config.json CHANGED
@@ -48,7 +48,7 @@
48
  "num_mel_bins": 128,
49
  "output_dim": 4096,
50
  "pad_token_id": 6563,
51
- "torch_dtype": "float32"
52
  },
53
  "hidden_size": 4096,
54
  "model_type": "awaken_chat",
@@ -78,12 +78,12 @@
78
  "rope_theta": 5000000,
79
  "sil_index": 151673,
80
  "sliding_window": null,
81
- "torch_dtype": "float32",
82
  "use_cache": false,
83
  "use_sliding_window": false,
84
  "vocab_size": 151936
85
  },
86
- "torch_dtype": "float32",
87
  "transformers_version": "4.52.4",
88
  "use_cache": false
89
  }
 
48
  "num_mel_bins": 128,
49
  "output_dim": 4096,
50
  "pad_token_id": 6563,
51
+ "torch_dtype": "bfloat16"
52
  },
53
  "hidden_size": 4096,
54
  "model_type": "awaken_chat",
 
78
  "rope_theta": 5000000,
79
  "sil_index": 151673,
80
  "sliding_window": null,
81
+ "torch_dtype": "bfloat16",
82
  "use_cache": false,
83
  "use_sliding_window": false,
84
  "vocab_size": 151936
85
  },
86
+ "torch_dtype": "bfloat16",
87
  "transformers_version": "4.52.4",
88
  "use_cache": false
89
  }
model-00004-of-00008.safetensors → model-00001-of-00004.safetensors RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:3f6072a5c35a6e521e9c1c0d1b7beca7f64da8c0534accb0ec46a256e243efff
3
- size 4832049656
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7b3138f0ad510097a1eae09a76b2491516cea025a5bd422f6a92a7b2e03aac85
3
+ size 4953360128
model-00002-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fbd2a45293372877a64680cd3cc237dd8934ad07fbd4aedf6120deddd9a13062
3
+ size 4983070528
model-00003-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a3b04ce3b5fc625e7b720d41e65c9caeae1267e2846904ca3dc12adccd675975
3
+ size 4999848448
model-00004-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f3731a7bce8e4b356376f4abf52d7fc00ecea01e71edd80c82edff6ad87d4ab7
3
+ size 3912373720
model-00005-of-00008.safetensors DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f7a3e8e642c27ab44978ae837ef73ceb3ee98c2241a479e8ab0b4bd16f7356d0
3
- size 4999856656
 
 
 
 
model-00006-of-00008.safetensors DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:9755906addbfb718090621b60f782cc95556a9a181242f7ad9d1b385d3b45069
3
- size 4832049680
 
 
 
 
model-00007-of-00008.safetensors DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:81aa33b8f6a9fe8959861652646dab16fb7bd4f31b21a31090fffe869a88faf0
3
- size 4832049672
 
 
 
 
model-00008-of-00008.safetensors DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:f94a24caa08ccfaa103ae8566fc6d25e55d1029949a62272d96399b85013c3a4
3
- size 3462482968
 
 
 
 
model.safetensors.index.json CHANGED
The diff for this file is too large to render. See raw diff
 
provenance.json CHANGED
@@ -1,14 +1,36 @@
1
  {
2
- "checkpoint": "podcast-talker-v3-micro-b64-2ep/checkpoint-9500",
3
- "source": "s3://avera-podcasts-data/paper_pack_20261102/ckpts/podcast-talker-v3-micro-b64-2ep__checkpoint-9500.tar",
4
- "source_archive_sha256": "bc7c9e14e670220d0baadfa996f8d26209a1e2085a1d4388369059b641f5b13d",
5
- "source_config_sha256": "1d2a003ad72a278be77d5f4006c61b5ed537164fc582a02243e45420f8208d2c",
6
- "weights": "Unmodified source checkpoint shards (hard links in this local staging tree).",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  "inference_repository": {
8
  "repository": "https://github.com/OpenmartAI/awake-audio-chat",
9
- "pr": "https://github.com/OpenmartAI/awake-audio-chat/pull/1",
10
- "head_sha": "3b3e7886864912a9095b1832ea86128aa6c45dae",
11
- "branch": "feat/web-client"
12
  },
13
  "config_changes": {
14
  "model_type": "awaken_chat",
@@ -16,8 +38,19 @@
16
  "AwakenModel"
17
  ],
18
  "audio_config.model_type": "awaken_chat_audio",
19
- "audio_config.continuous_features_mode": "add",
20
- "normalization": "Serialized by the inference repository AwakenConfig; training-only fields removed."
 
 
 
 
 
 
 
 
 
 
 
21
  },
22
  "codec": {
23
  "repo_id": "FunAudioLLM/Fun-CosyVoice3-0.5B-2512",
@@ -45,6 +78,5 @@
45
  }
46
  ]
47
  },
48
- "release_status": "Uploaded to https://huggingface.co/openmartdev/awaken-full-duplex",
49
  "hub_repository": "openmartdev/awaken-full-duplex"
50
  }
 
1
  {
2
+ "checkpoint": "grpo-v6dI-s2-1e5a05-gozero-klbc0.06/checkpoint-160",
3
+ "sources": [
4
+ {
5
+ "s3_uri": "s3://avera-podcasts-data/paper_pack_20261102/wave1/C_ckpt-012.tar",
6
+ "archive_sha256": "9ec01abba269fd75f9568c451e694033d8be2a63257ce7a4a3ed57582db0998f"
7
+ },
8
+ {
9
+ "s3_uri": "s3://avera-podcasts-data/paper_pack_20261102/wave1/C_ckpt-013.tar",
10
+ "archive_sha256": "3f3a53dd8085e3240fbf057e3bde6d29e668173448c5751370de580cd97ead5f"
11
+ },
12
+ {
13
+ "s3_uri": "s3://avera-podcasts-data/paper_pack_20261102/wave1/C_ckpt-014.tar",
14
+ "archive_sha256": "c6c85fe1292d0c0c71b0f7bdb97c696b6ad1d75871732274bdd9c4d33c8fc026"
15
+ }
16
+ ],
17
+ "source_config_sha256": "12acf3e68955451289299ba44027848c58bb6055def97ce06ee13b403ae0dff1",
18
+ "weights": "Original BF16 checkpoint-160 shards; unchanged bytes, hard-linked from restored source.",
19
+ "weight_sha256": {
20
+ "model-00001-of-00004.safetensors": "7b3138f0ad510097a1eae09a76b2491516cea025a5bd422f6a92a7b2e03aac85",
21
+ "model-00002-of-00004.safetensors": "fbd2a45293372877a64680cd3cc237dd8934ad07fbd4aedf6120deddd9a13062",
22
+ "model-00003-of-00004.safetensors": "a3b04ce3b5fc625e7b720d41e65c9caeae1267e2846904ca3dc12adccd675975",
23
+ "model-00004-of-00004.safetensors": "f3731a7bce8e4b356376f4abf52d7fc00ecea01e71edd80c82edff6ad87d4ab7"
24
+ },
25
+ "modules": {
26
+ "audio_invert_tower": 313,
27
+ "audio_tower": 3,
28
+ "continuous_audio_tower": 489,
29
+ "language_model": 399
30
+ },
31
  "inference_repository": {
32
  "repository": "https://github.com/OpenmartAI/awake-audio-chat",
33
+ "head_sha": "9f2fe9656a7f94042d90664a2f5b3c7e83b3b0ae"
 
 
34
  },
35
  "config_changes": {
36
  "model_type": "awaken_chat",
 
38
  "AwakenModel"
39
  ],
40
  "audio_config.model_type": "awaken_chat_audio",
41
+ "audio_config.continuous_features_mode": "add"
42
+ },
43
+ "model_card": {
44
+ "source": "hf_model_card/",
45
+ "source_git_commit": "9f2fe9656a7f94042d90664a2f5b3c7e83b3b0ae",
46
+ "source_readme_sha256": "ffb748e83e3976d37387ff6d064aaea1d451c96075f01c5042b2592ab5cc4fd1",
47
+ "placeholder_replacements": {
48
+ "<GITHUB_ORG>": "OpenmartAI",
49
+ "<GITHUB_REPO>": "awake-audio-chat",
50
+ "<HF_REPO_ID>": "openmartdev/awaken-full-duplex",
51
+ "<PROJECT_PAGE_URL>": "https://github.com/OpenmartAI/awake-audio-chat/blob/main/webpage/index.html"
52
+ },
53
+ "project_page_note": "No homepage or GitHub Pages site is configured; project link uses the repository HTML source."
54
  },
55
  "codec": {
56
  "repo_id": "FunAudioLLM/Fun-CosyVoice3-0.5B-2512",
 
78
  }
79
  ]
80
  },
 
81
  "hub_repository": "openmartdev/awaken-full-duplex"
82
  }
results_backchannel.png ADDED

Git LFS Details

  • SHA256: d3102ce81977f274c80cfa9c791e7cee2e578de224d187fd23af94e1be004a33
  • Pointer size: 131 Bytes
  • Size of remote file: 168 kB
results_groundedness.png ADDED

Git LFS Details

  • SHA256: 7662c1060ed6903f31f76fc876e9d7230ded36271ea1c7518741bd4623fe0976
  • Pointer size: 131 Bytes
  • Size of remote file: 203 kB
results_logic.png ADDED

Git LFS Details

  • SHA256: 725e68fb62813ad46b38c1d1a456101eff0dea55336f1f894ff3aef5dd56ba3a
  • Pointer size: 131 Bytes
  • Size of remote file: 106 kB
results_qa.png ADDED

Git LFS Details

  • SHA256: 836aa77486b49fac6d1a2cbfa58aebae7039a09b4ecae09f7e7ba8a44b7ae880
  • Pointer size: 131 Bytes
  • Size of remote file: 127 kB