arvindcodex11 commited on
Commit
919e62d
·
verified ·
1 Parent(s): 8cc4f7d

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +28 -0
  2. LICENSE +430 -0
  3. NOTICE +53 -0
  4. README.md +389 -1
  5. assets/architecture.png +3 -0
  6. assets/cer-full.png +3 -0
  7. assets/cer-full.svg +481 -0
  8. assets/cer-selected.png +3 -0
  9. assets/cer-selected.svg +240 -0
  10. assets/favicon.jpg +0 -0
  11. assets/indicemo-by-delivery.png +3 -0
  12. assets/indicemo-by-delivery.svg +459 -0
  13. assets/indicemo-overall.png +3 -0
  14. assets/indicemo-overall.svg +209 -0
  15. assets/nova-detector-breakdown.png +3 -0
  16. assets/nova-results.png +3 -0
  17. assets/nova-results.svg +249 -0
  18. assets/rumik-capabilities.png +3 -0
  19. assets/rumik-logo.png +3 -0
  20. assets/wer-full.png +3 -0
  21. assets/wer-full.svg +481 -0
  22. assets/wer-selected.png +3 -0
  23. assets/wer-selected.svg +240 -0
  24. benchmarks/cer-methodology.md +3 -0
  25. benchmarks/cer-reported-scores.json +212 -0
  26. benchmarks/evaluation.md +59 -0
  27. benchmarks/wer-reported-scores.json +311 -0
  28. codec/config.json +52 -0
  29. codec/model.safetensors +3 -0
  30. codec/preprocessor_config.json +10 -0
  31. config.json +98 -0
  32. configuration_rumik_oss.py +55 -0
  33. generation_config.json +7 -0
  34. model-00001-of-00002.safetensors +3 -0
  35. model-00002-of-00002.safetensors +3 -0
  36. model.safetensors.index.json +304 -0
  37. modeling_rumik_oss.py +161 -0
  38. requirements-server.txt +5 -0
  39. requirements.txt +7 -0
  40. samples/aisha.wav +3 -0
  41. samples/ira-professional-steady.wav +3 -0
  42. samples/ira-sad-slow.wav +3 -0
  43. samples/ira.wav +3 -0
  44. samples/showcase/01-the-second-cup.wav +3 -0
  45. samples/showcase/02-one-last-message.wav +3 -0
  46. samples/showcase/03-we-made-it.wav +3 -0
  47. samples/showcase/04-a-broken-promise.wav +3 -0
  48. samples/showcase/05-ready-for-departure.wav +3 -0
  49. samples/showcase/06-home-again.wav +3 -0
  50. samples/showcase/07-a-place-to-read.wav +3 -0
.gitattributes CHANGED
@@ -33,3 +33,31 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip 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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip 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
+ assets/architecture.png filter=lfs diff=lfs merge=lfs -text
37
+ assets/indicemo-overall.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/indicemo-by-delivery.png filter=lfs diff=lfs merge=lfs -text
39
+ assets/nova-results.png filter=lfs diff=lfs merge=lfs -text
40
+ samples/ira-professional-steady.wav filter=lfs diff=lfs merge=lfs -text
41
+ samples/ira-sad-slow.wav filter=lfs diff=lfs merge=lfs -text
42
+ samples/ira.wav filter=lfs diff=lfs merge=lfs -text
43
+ samples/aisha.wav filter=lfs diff=lfs merge=lfs -text
44
+ samples/siya.wav filter=lfs diff=lfs merge=lfs -text
45
+ samples/zoya.wav filter=lfs diff=lfs merge=lfs -text
46
+ assets/nova-detector-breakdown.png filter=lfs diff=lfs merge=lfs -text
47
+ assets/rumik-capabilities.png filter=lfs diff=lfs merge=lfs -text
48
+ assets/cer-selected.png filter=lfs diff=lfs merge=lfs -text
49
+ assets/cer-full.png filter=lfs diff=lfs merge=lfs -text
50
+ samples/showcase/01-the-second-cup.wav filter=lfs diff=lfs merge=lfs -text
51
+ samples/showcase/02-one-last-message.wav filter=lfs diff=lfs merge=lfs -text
52
+ samples/showcase/03-we-made-it.wav filter=lfs diff=lfs merge=lfs -text
53
+ samples/showcase/04-a-broken-promise.wav filter=lfs diff=lfs merge=lfs -text
54
+ samples/showcase/05-ready-for-departure.wav filter=lfs diff=lfs merge=lfs -text
55
+ samples/showcase/06-home-again.wav filter=lfs diff=lfs merge=lfs -text
56
+ samples/showcase/07-a-place-to-read.wav filter=lfs diff=lfs merge=lfs -text
57
+ samples/showcase/08-the-acceptance-letter.wav filter=lfs diff=lfs merge=lfs -text
58
+ samples/showcase/09-a-small-celebration.wav filter=lfs diff=lfs merge=lfs -text
59
+ samples/showcase/10-the-demo-is-ready.wav filter=lfs diff=lfs merge=lfs -text
60
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
61
+ assets/wer-selected.png filter=lfs diff=lfs merge=lfs -text
62
+ assets/wer-full.png filter=lfs diff=lfs merge=lfs -text
63
+ assets/rumik-logo.png filter=lfs diff=lfs merge=lfs -text
LICENSE ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ rumik-oss 1
2
+ Copyright 2026 Rumik AI
3
+
4
+ rumik-oss 1 is a derivative of CohereLabs/tiny-aya-fire and is released under
5
+ the Creative Commons Attribution-NonCommercial 4.0 International license
6
+ (CC-BY-NC 4.0), together with the Cohere Labs acceptable-use addendum that
7
+ governs the upstream model.
8
+
9
+ License ......... https://cohere.com/cohere-labs-cc-by-nc-license
10
+ Acceptable use .. https://docs.cohere.com/docs/cohere-labs-acceptable-use-policy
11
+
12
+ Use of this model is permitted for research and other non-commercial purposes
13
+ only, and must comply with the Cohere Labs Acceptable Use Policy in addition
14
+ to the terms below. Redistribution must retain this notice, the license link,
15
+ upstream notices, and an indication of any modifications made (see NOTICE).
16
+
17
+ The Mimi codec in codec/ is licensed separately by Kyutai under CC-BY-4.0
18
+ (https://creativecommons.org/licenses/by/4.0/). That permission applies to the
19
+ codec only, not to the tiny-aya-derived TTS weights.
20
+
21
+ =======================================================================
22
+
23
+ Attribution-NonCommercial 4.0 International
24
+
25
+ =======================================================================
26
+
27
+ Creative Commons Corporation ("Creative Commons") is not a law firm and
28
+ does not provide legal services or legal advice. Distribution of
29
+ Creative Commons public licenses does not create a lawyer-client or
30
+ other relationship. Creative Commons makes its licenses and related
31
+ information available on an "as-is" basis. Creative Commons gives no
32
+ warranties regarding its licenses, any material licensed under their
33
+ terms and conditions, or any related information. Creative Commons
34
+ disclaims all liability for damages resulting from their use to the
35
+ fullest extent possible.
36
+
37
+ Using Creative Commons Public Licenses
38
+
39
+ Creative Commons public licenses provide a standard set of terms and
40
+ conditions that creators and other rights holders may use to share
41
+ original works of authorship and other material subject to copyright
42
+ and certain other rights specified in the public license below. The
43
+ following considerations are for informational purposes only, are not
44
+ exhaustive, and do not form part of our licenses.
45
+
46
+ Considerations for licensors: Our public licenses are
47
+ intended for use by those authorized to give the public
48
+ permission to use material in ways otherwise restricted by
49
+ copyright and certain other rights. Our licenses are
50
+ irrevocable. Licensors should read and understand the terms
51
+ and conditions of the license they choose before applying it.
52
+ Licensors should also secure all rights necessary before
53
+ applying our licenses so that the public can reuse the
54
+ material as expected. Licensors should clearly mark any
55
+ material not subject to the license. This includes other CC-
56
+ licensed material, or material used under an exception or
57
+ limitation to copyright. More considerations for licensors:
58
+ wiki.creativecommons.org/Considerations_for_licensors
59
+
60
+ Considerations for the public: By using one of our public
61
+ licenses, a licensor grants the public permission to use the
62
+ licensed material under specified terms and conditions. If
63
+ the licensor's permission is not necessary for any reason--for
64
+ example, because of any applicable exception or limitation to
65
+ copyright--then that use is not regulated by the license. Our
66
+ licenses grant only permissions under copyright and certain
67
+ other rights that a licensor has authority to grant. Use of
68
+ the licensed material may still be restricted for other
69
+ reasons, including because others have copyright or other
70
+ rights in the material. A licensor may make special requests,
71
+ such as asking that all changes be marked or described.
72
+ Although not required by our licenses, you are encouraged to
73
+ respect those requests where reasonable. More considerations
74
+ for the public:
75
+ wiki.creativecommons.org/Considerations_for_licensees
76
+
77
+ =======================================================================
78
+
79
+ Creative Commons Attribution-NonCommercial 4.0 International Public
80
+ License
81
+
82
+ By exercising the Licensed Rights (defined below), You accept and agree
83
+ to be bound by the terms and conditions of this Creative Commons
84
+ Attribution-NonCommercial 4.0 International Public License ("Public
85
+ License"). To the extent this Public License may be interpreted as a
86
+ contract, You are granted the Licensed Rights in consideration of Your
87
+ acceptance of these terms and conditions, and the Licensor grants You
88
+ such rights in consideration of benefits the Licensor receives from
89
+ making the Licensed Material available under these terms and
90
+ conditions.
91
+
92
+
93
+ Section 1 -- Definitions.
94
+
95
+ a. Adapted Material means material subject to Copyright and Similar
96
+ Rights that is derived from or based upon the Licensed Material
97
+ and in which the Licensed Material is translated, altered,
98
+ arranged, transformed, or otherwise modified in a manner requiring
99
+ permission under the Copyright and Similar Rights held by the
100
+ Licensor. For purposes of this Public License, where the Licensed
101
+ Material is a musical work, performance, or sound recording,
102
+ Adapted Material is always produced where the Licensed Material is
103
+ synched in timed relation with a moving image.
104
+
105
+ b. Adapter's License means the license You apply to Your Copyright
106
+ and Similar Rights in Your contributions to Adapted Material in
107
+ accordance with the terms and conditions of this Public License.
108
+
109
+ c. Copyright and Similar Rights means copyright and/or similar rights
110
+ closely related to copyright including, without limitation,
111
+ performance, broadcast, sound recording, and Sui Generis Database
112
+ Rights, without regard to how the rights are labeled or
113
+ categorized. For purposes of this Public License, the rights
114
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
115
+ Rights.
116
+ d. Effective Technological Measures means those measures that, in the
117
+ absence of proper authority, may not be circumvented under laws
118
+ fulfilling obligations under Article 11 of the WIPO Copyright
119
+ Treaty adopted on December 20, 1996, and/or similar international
120
+ agreements.
121
+
122
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
123
+ any other exception or limitation to Copyright and Similar Rights
124
+ that applies to Your use of the Licensed Material.
125
+
126
+ f. Licensed Material means the artistic or literary work, database,
127
+ or other material to which the Licensor applied this Public
128
+ License.
129
+
130
+ g. Licensed Rights means the rights granted to You subject to the
131
+ terms and conditions of this Public License, which are limited to
132
+ all Copyright and Similar Rights that apply to Your use of the
133
+ Licensed Material and that the Licensor has authority to license.
134
+
135
+ h. Licensor means the individual(s) or entity(ies) granting rights
136
+ under this Public License.
137
+
138
+ i. NonCommercial means not primarily intended for or directed towards
139
+ commercial advantage or monetary compensation. For purposes of
140
+ this Public License, the exchange of the Licensed Material for
141
+ other material subject to Copyright and Similar Rights by digital
142
+ file-sharing or similar means is NonCommercial provided there is
143
+ no payment of monetary compensation in connection with the
144
+ exchange.
145
+
146
+ j. Share means to provide material to the public by any means or
147
+ process that requires permission under the Licensed Rights, such
148
+ as reproduction, public display, public performance, distribution,
149
+ dissemination, communication, or importation, and to make material
150
+ available to the public including in ways that members of the
151
+ public may access the material from a place and at a time
152
+ individually chosen by them.
153
+
154
+ k. Sui Generis Database Rights means rights other than copyright
155
+ resulting from Directive 96/9/EC of the European Parliament and of
156
+ the Council of 11 March 1996 on the legal protection of databases,
157
+ as amended and/or succeeded, as well as other essentially
158
+ equivalent rights anywhere in the world.
159
+
160
+ l. You means the individual or entity exercising the Licensed Rights
161
+ under this Public License. Your has a corresponding meaning.
162
+
163
+
164
+ Section 2 -- Scope.
165
+
166
+ a. License grant.
167
+
168
+ 1. Subject to the terms and conditions of this Public License,
169
+ the Licensor hereby grants You a worldwide, royalty-free,
170
+ non-sublicensable, non-exclusive, irrevocable license to
171
+ exercise the Licensed Rights in the Licensed Material to:
172
+
173
+ a. reproduce and Share the Licensed Material, in whole or
174
+ in part, for NonCommercial purposes only; and
175
+
176
+ b. produce, reproduce, and Share Adapted Material for
177
+ NonCommercial purposes only.
178
+
179
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
180
+ Exceptions and Limitations apply to Your use, this Public
181
+ License does not apply, and You do not need to comply with
182
+ its terms and conditions.
183
+
184
+ 3. Term. The term of this Public License is specified in Section
185
+ 6(a).
186
+
187
+ 4. Media and formats; technical modifications allowed. The
188
+ Licensor authorizes You to exercise the Licensed Rights in
189
+ all media and formats whether now known or hereafter created,
190
+ and to make technical modifications necessary to do so. The
191
+ Licensor waives and/or agrees not to assert any right or
192
+ authority to forbid You from making technical modifications
193
+ necessary to exercise the Licensed Rights, including
194
+ technical modifications necessary to circumvent Effective
195
+ Technological Measures. For purposes of this Public License,
196
+ simply making modifications authorized by this Section 2(a)
197
+ (4) never produces Adapted Material.
198
+
199
+ 5. Downstream recipients.
200
+
201
+ a. Offer from the Licensor -- Licensed Material. Every
202
+ recipient of the Licensed Material automatically
203
+ receives an offer from the Licensor to exercise the
204
+ Licensed Rights under the terms and conditions of this
205
+ Public License.
206
+
207
+ b. No downstream restrictions. You may not offer or impose
208
+ any additional or different terms or conditions on, or
209
+ apply any Effective Technological Measures to, the
210
+ Licensed Material if doing so restricts exercise of the
211
+ Licensed Rights by any recipient of the Licensed
212
+ Material.
213
+
214
+ 6. No endorsement. Nothing in this Public License constitutes or
215
+ may be construed as permission to assert or imply that You
216
+ are, or that Your use of the Licensed Material is, connected
217
+ with, or sponsored, endorsed, or granted official status by,
218
+ the Licensor or others designated to receive attribution as
219
+ provided in Section 3(a)(1)(A)(i).
220
+
221
+ b. Other rights.
222
+
223
+ 1. Moral rights, such as the right of integrity, are not
224
+ licensed under this Public License, nor are publicity,
225
+ privacy, and/or other similar personality rights; however, to
226
+ the extent possible, the Licensor waives and/or agrees not to
227
+ assert any such rights held by the Licensor to the limited
228
+ extent necessary to allow You to exercise the Licensed
229
+ Rights, but not otherwise.
230
+
231
+ 2. Patent and trademark rights are not licensed under this
232
+ Public License.
233
+
234
+ 3. To the extent possible, the Licensor waives any right to
235
+ collect royalties from You for the exercise of the Licensed
236
+ Rights, whether directly or through a collecting society
237
+ under any voluntary or waivable statutory or compulsory
238
+ licensing scheme. In all other cases the Licensor expressly
239
+ reserves any right to collect such royalties, including when
240
+ the Licensed Material is used other than for NonCommercial
241
+ purposes.
242
+
243
+
244
+ Section 3 -- License Conditions.
245
+
246
+ Your exercise of the Licensed Rights is expressly made subject to the
247
+ following conditions.
248
+
249
+ a. Attribution.
250
+
251
+ 1. If You Share the Licensed Material (including in modified
252
+ form), You must:
253
+
254
+ a. retain the following if it is supplied by the Licensor
255
+ with the Licensed Material:
256
+
257
+ i. identification of the creator(s) of the Licensed
258
+ Material and any others designated to receive
259
+ attribution, in any reasonable manner requested by
260
+ the Licensor (including by pseudonym if
261
+ designated);
262
+
263
+ ii. a copyright notice;
264
+
265
+ iii. a notice that refers to this Public License;
266
+
267
+ iv. a notice that refers to the disclaimer of
268
+ warranties;
269
+
270
+ v. a URI or hyperlink to the Licensed Material to the
271
+ extent reasonably practicable;
272
+
273
+ b. indicate if You modified the Licensed Material and
274
+ retain an indication of any previous modifications; and
275
+
276
+ c. indicate the Licensed Material is licensed under this
277
+ Public License, and include the text of, or the URI or
278
+ hyperlink to, this Public License.
279
+
280
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
281
+ reasonable manner based on the medium, means, and context in
282
+ which You Share the Licensed Material. For example, it may be
283
+ reasonable to satisfy the conditions by providing a URI or
284
+ hyperlink to a resource that includes the required
285
+ information.
286
+
287
+ 3. If requested by the Licensor, You must remove any of the
288
+ information required by Section 3(a)(1)(A) to the extent
289
+ reasonably practicable.
290
+
291
+ 4. If You Share Adapted Material You produce, the Adapter's
292
+ License You apply must not prevent recipients of the Adapted
293
+ Material from complying with this Public License.
294
+
295
+
296
+ Section 4 -- Sui Generis Database Rights.
297
+
298
+ Where the Licensed Rights include Sui Generis Database Rights that
299
+ apply to Your use of the Licensed Material:
300
+
301
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
302
+ to extract, reuse, reproduce, and Share all or a substantial
303
+ portion of the contents of the database for NonCommercial purposes
304
+ only;
305
+
306
+ b. if You include all or a substantial portion of the database
307
+ contents in a database in which You have Sui Generis Database
308
+ Rights, then the database in which You have Sui Generis Database
309
+ Rights (but not its individual contents) is Adapted Material; and
310
+
311
+ c. You must comply with the conditions in Section 3(a) if You Share
312
+ all or a substantial portion of the contents of the database.
313
+
314
+ For the avoidance of doubt, this Section 4 supplements and does not
315
+ replace Your obligations under this Public License where the Licensed
316
+ Rights include other Copyright and Similar Rights.
317
+
318
+
319
+ Section 5 -- Disclaimer of Warranties and Limitation of Liability.
320
+
321
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
322
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
323
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
324
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
325
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
326
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
327
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
328
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
329
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
330
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
331
+
332
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
333
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
334
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
335
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
336
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
337
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
338
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
339
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
340
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
341
+
342
+ c. The disclaimer of warranties and limitation of liability provided
343
+ above shall be interpreted in a manner that, to the extent
344
+ possible, most closely approximates an absolute disclaimer and
345
+ waiver of all liability.
346
+
347
+
348
+ Section 6 -- Term and Termination.
349
+
350
+ a. This Public License applies for the term of the Copyright and
351
+ Similar Rights licensed here. However, if You fail to comply with
352
+ this Public License, then Your rights under this Public License
353
+ terminate automatically.
354
+
355
+ b. Where Your right to use the Licensed Material has terminated under
356
+ Section 6(a), it reinstates:
357
+
358
+ 1. automatically as of the date the violation is cured, provided
359
+ it is cured within 30 days of Your discovery of the
360
+ violation; or
361
+
362
+ 2. upon express reinstatement by the Licensor.
363
+
364
+ For the avoidance of doubt, this Section 6(b) does not affect any
365
+ right the Licensor may have to seek remedies for Your violations
366
+ of this Public License.
367
+
368
+ c. For the avoidance of doubt, the Licensor may also offer the
369
+ Licensed Material under separate terms or conditions or stop
370
+ distributing the Licensed Material at any time; however, doing so
371
+ will not terminate this Public License.
372
+
373
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
374
+ License.
375
+
376
+
377
+ Section 7 -- Other Terms and Conditions.
378
+
379
+ a. The Licensor shall not be bound by any additional or different
380
+ terms or conditions communicated by You unless expressly agreed.
381
+
382
+ b. Any arrangements, understandings, or agreements regarding the
383
+ Licensed Material not stated herein are separate from and
384
+ independent of the terms and conditions of this Public License.
385
+
386
+
387
+ Section 8 -- Interpretation.
388
+
389
+ a. For the avoidance of doubt, this Public License does not, and
390
+ shall not be interpreted to, reduce, limit, restrict, or impose
391
+ conditions on any use of the Licensed Material that could lawfully
392
+ be made without permission under this Public License.
393
+
394
+ b. To the extent possible, if any provision of this Public License is
395
+ deemed unenforceable, it shall be automatically reformed to the
396
+ minimum extent necessary to make it enforceable. If the provision
397
+ cannot be reformed, it shall be severed from this Public License
398
+ without affecting the enforceability of the remaining terms and
399
+ conditions.
400
+
401
+ c. No term or condition of this Public License will be waived and no
402
+ failure to comply consented to unless expressly agreed to by the
403
+ Licensor.
404
+
405
+ d. Nothing in this Public License constitutes or may be interpreted
406
+ as a limitation upon, or waiver of, any privileges and immunities
407
+ that apply to the Licensor or You, including from the legal
408
+ processes of any jurisdiction or authority.
409
+
410
+ =======================================================================
411
+
412
+ Creative Commons is not a party to its public
413
+ licenses. Notwithstanding, Creative Commons may elect to apply one of
414
+ its public licenses to material it publishes and in those instances
415
+ will be considered the “Licensor.” The text of the Creative Commons
416
+ public licenses is dedicated to the public domain under the CC0 Public
417
+ Domain Dedication. Except for the limited purpose of indicating that
418
+ material is shared under a Creative Commons public license or as
419
+ otherwise permitted by the Creative Commons policies published at
420
+ creativecommons.org/policies, Creative Commons does not authorize the
421
+ use of the trademark "Creative Commons" or any other trademark or logo
422
+ of Creative Commons without its prior written consent including,
423
+ without limitation, in connection with any unauthorized modifications
424
+ to any of its public licenses or any other arrangements,
425
+ understandings, or agreements concerning use of licensed material. For
426
+ the avoidance of doubt, this paragraph does not form part of the
427
+ public licenses.
428
+
429
+ Creative Commons may be contacted at creativecommons.org.
430
+
NOTICE ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ rumik-oss 1
2
+ Copyright 2026 Rumik AI
3
+
4
+ This model is a derivative work. CC-BY-NC 4.0 requires that redistribution
5
+ indicate what was changed relative to the upstream material; this file records
6
+ those changes.
7
+
8
+ -----------------------------------------------------------------------
9
+ Lineage:
10
+
11
+ CohereLabs/tiny-aya-fire vocab 261,008
12
+ https://huggingface.co/CohereLabs/tiny-aya-fire
13
+ Licensed CC-BY-NC 4.0 with the Cohere Labs acceptable-use addendum.
14
+
15
+ -> rumik-ai/rumik-oss-1-base vocab 277,395
16
+ https://huggingface.co/rumik-ai/rumik-oss-1-base
17
+ Named-speaker text-to-speech training.
18
+
19
+ -> rumik-ai/rumik-oss-1 vocab 277,404 (this model)
20
+ Delivery-control fine-tuning and reinforcement learning.
21
+ -----------------------------------------------------------------------
22
+
23
+ Modifications made by Rumik AI, relative to tiny aya fire:
24
+
25
+ 1. Vocabulary extended from 261,008 to 277,404 tokens:
26
+ - 16,384 Mimi codec unit tokens <code>_<quantizer>, ids 261008-277391
27
+ - 3 structure delimiters <text>, <audio>, </audio>, ids 277392-277394
28
+ - 9 delivery and vocalization tags, ids 277395-277403
29
+ The first two groups were added for rumik-oss 1 base; the tags were
30
+ added for rumik-oss 1. Input and output embedding matrices were
31
+ resized accordingly.
32
+
33
+ 2. A stop-prediction head (`stop_predictor`) was added on top of the final
34
+ hidden state to terminate audio generation.
35
+
36
+ 3. The model was post-trained for text-to-speech on multilingual Indic and
37
+ English speech data, followed by a reinforcement-learning stage.
38
+
39
+ 4. Model class and configuration were reimplemented as RumikOSSForCausalLM /
40
+ RumikOSSConfig (model_type "rumik_oss"), subclassing the transformers
41
+ Cohere2 implementation.
42
+
43
+ 5. The inherited chat template was removed. This is not a chat model and
44
+ does not take a `messages` list; it uses the flat prompt layout
45
+ documented in README.md.
46
+
47
+ -----------------------------------------------------------------------
48
+ Also bundled:
49
+
50
+ Mimi codec (codec/) - Kyutai
51
+ https://huggingface.co/kyutai/mimi
52
+ Licensed CC-BY-4.0. Redistributed unmodified.
53
+ -----------------------------------------------------------------------
README.md CHANGED
@@ -1,3 +1,391 @@
1
  ---
2
- license: mit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ pipeline_tag: text-to-speech
3
+ library_name: transformers
4
+ base_model: rumik-ai/rumik-oss-1-base
5
+ base_model_relation: finetune
6
+ license: cc-by-nc-4.0
7
+ language:
8
+ - hi
9
+ - bn
10
+ - ta
11
+ - te
12
+ - mr
13
+ - gu
14
+ - kn
15
+ - ml
16
+ - pa
17
+ - or
18
+ - as
19
+ - ur
20
+ - ne
21
+ - sa
22
+ - mai
23
+ - mni
24
+ - brx
25
+ - doi
26
+ - kok
27
+ - sat
28
+ - ks
29
+ - en
30
+ tags:
31
+ - tts
32
+ - text-to-speech
33
+ - indic
34
+ - expressive
35
+ - mimi
36
+ - speech
37
  ---
38
+ <p align="center">
39
+ <img src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/rumik-logo.png" alt="rumik.ai" width="100%">
40
+ </p>
41
+
42
+ <p align="center">
43
+ <a href="https://rumik.ai/research/rumik-oss"><img src="https://img.shields.io/badge/blog-overview-555555" alt="blog"></a>
44
+ <a href="https://huggingface.co/spaces/rumik-ai/rumik-oss-1"><img src="https://img.shields.io/badge/hugging_face-demo-FFD21E" alt="hugging face demo"></a>
45
+ <!-- add report later-->
46
+ <img src="https://img.shields.io/badge/technical_report-coming_soon-3975B7" alt="technical report: coming soon">
47
+ <a href="https://x.com/rumik_ai"><img src="https://img.shields.io/badge/x-rumik__ai-111111" alt="follow rumik ai on x"></a>
48
+ <a href="https://discord.gg/wa7sWvq8ty"><img src="https://img.shields.io/badge/discord-join_us-5865F2" alt="join our discord"></a>
49
+ </p>
50
+
51
+ # rumik-oss 1
52
+
53
+ ![rumik-oss 1 multilingual speech, expressive delivery, and inline vocalizations](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/rumik-capabilities.png)
54
+
55
+ rumik-oss 1 is a **3b multilingual text-to-speech model** from rumik ai, trained on **fewer than 70,000 hours of speech** while performing competitively with existing TTS models. it combines code-switched synthesis, description-conditioned delivery, and inline vocalization control, with **24 khz audio output**.
56
+
57
+ we also release [rumik-oss 1 base](https://huggingface.co/rumik-ai/rumik-oss-1-base), our final speaker-conditioned checkpoint before post-training. it supports multilingual synthesis with ira, aisha, siya, and zoya and provides a starting point for the community to research and post-train the base model from scratch.
58
+
59
+ we describe the post-training of rumik-oss 1 and the decisions behind its training curriculum in our [blog](https://rumik.ai/research/rumik-oss). our **technical report** will provide an in-depth account of the architecture, data preparation, training, and evaluation.
60
+
61
+ ## model overview
62
+
63
+ rumik-oss 1 extends tiny aya fire with discrete speech tokens from the mimi codec. following the flattened codec-token formulation used in [llama-mimi](https://arxiv.org/abs/2509.14882), text conditioning and audio generation share a single autoregressive sequence. the model predicts eight codebook tokens for each audio frame, in codebook order, before advancing to the next frame. generated tokens are regrouped into codec frames and reconstructed as a waveform by the frozen mimi decoder.
64
+
65
+ we release the model with 4 voices:
66
+
67
+ - Ira
68
+ - Aisha
69
+ - Siya
70
+ - Zoya
71
+
72
+ unlike other TTS models, where each voice is trained specifically for one language or performs best in one language, our voices perform equally well across all 22 languages.
73
+
74
+ ![rumik-oss 1 synthesis architecture and frame-major token-to-codec reconstruction](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/architecture.png)
75
+
76
+ ## capabilities
77
+
78
+ - **multilingual synthesis:** 22 indic languages in their native scripts and romanized forms, plus english, with support for single-language and code-switched synthesis.
79
+ - **delivery conditioning:** control tone, accent, and pace through the description format for various scenarios.
80
+ - **vocalization control:** inline tags for laughter, chuckles, and sighs.
81
+
82
+ ## delivery controls
83
+
84
+ the `<description="...">` prefix lets users control the global tone and pace of the audio, while inline tags let you insert `<laugh>`, `<chuckle>`, and `<sigh>` at the intended positions.
85
+
86
+
87
+ ```text
88
+ <description="excited, Hindi accent, fast pace"> जल्दी आओ, हमारा नाम लिस्ट में है! <laugh> आज घर में जश्न होगा।
89
+ ```
90
+
91
+ | control | values |
92
+ |---|---|
93
+ | speaker | `Ira`, `Aisha`, `Siya`, `Zoya` |
94
+ | tone | happy, sad, angry, excited, professional |
95
+ | accent | `Hindi`, `Telugu`, `Tamil`, `Kannada`, `Bengali`, `Punjabi`, `Indian English` |
96
+ | pace | slow, fast, steady |
97
+ | inline vocalization | `<laugh>`, `<chuckle>`, `<sigh>` |
98
+
99
+ ## audio samples
100
+
101
+ **ira · hindi · sad · slow pace**
102
+
103
+ > माँ, आज फिर तुम्हारे लिए चाय बना दी। &lt;sigh&gt; कप ठंडा हो गया, पर तुम्हारा इंतज़ार नहीं।
104
+
105
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/01-the-second-cup.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/01-the-second-cup.wav">listen</a></audio>
106
+
107
+ **aisha · english · sad · slow pace**
108
+
109
+ > I still play your last message, Dad. You only said, call me when you get home. I got home. I just never got to tell you.
110
+
111
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/02-one-last-message.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/02-one-last-message.wav">listen</a></audio>
112
+
113
+ **siya · telugu · excited · fast pace**
114
+
115
+ > అమ్మా, నాకు ఉద్యోగం వచ్చింది! నిజంగా వచ్చింది! నువ్వు నా కోసం చేసిన ప్రతి త్యాగం నాకు గుర్తుంది. &lt;laugh&gt; ఈ రోజు నీకు నచ్చిన స్వీట్లు నేనే కొనిస్తాను!
116
+
117
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/03-we-made-it.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/03-we-made-it.wav">listen</a></audio>
118
+
119
+ **zoya · tamil · angry · fast pace**
120
+
121
+ > நீ வருவேன்னு சொன்னதால்தான் இவ்வளவு நேரம் காத்திருந்தேன்! ஒரு போன் கூட பண்ண முடியலையா? ஒவ்வொரு முறையும் மன்னிப்பு கேட்டா மட்டும் எல்லாம் சரியாகிடாது!
122
+
123
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/04-a-broken-promise.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/04-a-broken-promise.wav">listen</a></audio>
124
+
125
+ **ira · english · professional · steady pace**
126
+
127
+ > Good evening, passengers. Boarding for the flight to Bengaluru will begin shortly at gate twelve. Please keep your boarding pass ready. Thank you for your patience, and have a pleasant journey.
128
+
129
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/05-ready-for-departure.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/05-ready-for-departure.wav">listen</a></audio>
130
+
131
+ **aisha · bengali · happy · steady pace**
132
+
133
+ > এত দিন পরে তোমাকে দেখে কী যে ভালো লাগছে! তোমার পছন্দের সব রান্না করেছি। আজ আর কোথাও যেতে দেব না, সবাই মিলে অনেক গল্প করব।
134
+
135
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/06-home-again.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/06-home-again.wav">listen</a></audio>
136
+
137
+ **siya · kannada · professional · steady pace**
138
+
139
+ > ನಮ್ಮ ಹೊಸ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸ್ವಾಗತ. ಇಲ್ಲಿ ಕನ್ನಡ ಮತ್ತು ಇಂಗ್ಲಿಷ್ ಪುಸ್ತಕಗಳು ಲಭ್ಯವಿವೆ. ಸದಸ್ಯರಾಗಲು ನಿಮ್ಮ ಹೆಸರು ಮತ್ತು ವಿಳಾಸ ನೀಡಿ. ಓದಲು ಶಾಂತವಾದ ಸ್ಥಳವೂ ಇದೆ.
140
+
141
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/07-a-place-to-read.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/07-a-place-to-read.wav">listen</a></audio>
142
+
143
+ **zoya · punjabi · excited · fast pace**
144
+
145
+ > ਮਾਂ, ਮੇਰਾ ਦਾਖ਼ਲਾ ਹੋ ਗਿਆ! ਸੱਚੀਂ, ਚਿੱਠੀ ਆ ਗਈ ਹੈ! ਜਿਹੜਾ ਸੁਪਨਾ ਅਸੀਂ ਇਕੱਠੇ ਵੇਖਿਆ ਸੀ, ਉਹ ਅੱਜ ਪੂਰਾ ਹੋ ਗਿਆ। ਹੁਣ ਸਭ ਨੂੰ ਫ਼ੋਨ ਕਰ!
146
+
147
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/08-the-acceptance-letter.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/08-the-acceptance-letter.wav">listen</a></audio>
148
+
149
+ **ira · hindi + english · happy · steady pace**
150
+
151
+ > आज की meeting में सबको हमारा idea पसंद आया। I was so nervous, लेकिन तुमने कहा था ना, बस दिल से बोलो। &lt;chuckle&gt; अब coffee मेरी तरफ़ से, और cake तुम्हारी तरफ़ से!
152
+
153
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/09-a-small-celebration.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/09-a-small-celebration.wav">listen</a></audio>
154
+
155
+ **aisha · telugu + english · professional · steady pace**
156
+
157
+ > మన కొత్త demo సిద్ధంగా ఉంది. You can choose a voice, change the pace, and try different languages. ముందుగా తెలుగులో ఒక వాక్యం విందాం, then we can switch to English.
158
+
159
+ <audio controls preload="none" src="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/10-the-demo-is-ready.wav"><a href="https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/samples/showcase/10-the-demo-is-ready.wav">listen</a></audio>
160
+
161
+ <details>
162
+ <summary>generation settings</summary>
163
+
164
+ temperature `0.8`, top-k `30`, top-p `1.0`, maximum `3072` tokens. [prompts and seeds](samples/showcase/manifest.json).
165
+
166
+ </details>
167
+
168
+ ## benchmarks
169
+
170
+ to evaluate our specific use case, we need new benchmarks across different axes: expressiveness, consistency of non-verbal vocalizations, and basic WER/CER. there aren't any standardized benchmarks for multilingual indic TTS across these axes, so we present 3 benchmarks:
171
+
172
+ - IndicEmo: evaluates expressiveness.
173
+ - NoVA: evaluates adherence to non-verbal vocalization requests.
174
+ - WER/CER: evaluates word and character error rates across 15 languages.
175
+
176
+
177
+
178
+ ### IndicEmo
179
+
180
+ [github](https://github.com/ira-rumik/IndicEmo)
181
+
182
+ we introduce IndicEmo to evaluate expressive delivery in code-switched speech. its 100 prompts combine two to five languages drawn from english, hindi, telugu, tamil, kannada, bengali, and punjabi, with equal coverage of happy, sad, angry, excited, and professional delivery.
183
+
184
+ three automated judges rate anonymized recordings on a five-point rubric covering tone, dynamics, phrasing, and sustained expression. results use the 98-prompt intersection with valid ratings from all judges, aggregating the median rating per recording into category means. rumik-oss 1 scores **2.92/5 overall** and **3.03/5 on the four emotion categories**.
185
+
186
+ ![IndicEmo overall expression quality across five tested tts configurations](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/indicemo-overall.png)
187
+
188
+ <details>
189
+ <summary>scores and emotion breakdown</summary>
190
+
191
+ | system | overall / 5 | emotions only / 5 |
192
+ |---|---:|---:|
193
+ | gemini 3.1 flash tts preview | 4.58 | 4.66 |
194
+ | **rumik-oss 1** | **2.92** | **3.03** |
195
+ | cartesia sonic preview | 2.71 | 2.51 |
196
+ | cartesia sonic 3.5 | 2.32 | 2.18 |
197
+ | elevenlabs eleven v3 | 2.16 | 2.03 |
198
+
199
+ ![IndicEmo scores for happy, sad, angry, excited, and professional](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/indicemo-by-delivery.png)
200
+
201
+ the emotions-only score excludes professional delivery. [evaluation protocol](benchmarks/evaluation.md#indicemo).
202
+
203
+ </details>
204
+
205
+ ### NoVA
206
+
207
+ [github](https://github.com/ira-rumik/nova-bench)
208
+
209
+ NoVA evaluates adherence to inline laughter, chuckle, and sigh requests in english speech. each of its 149 prompts places a single vocalization at a specified word position. seven systems are evaluated over three synthesis runs using provider-specific prompting.
210
+
211
+ silk-asr, scribe v2, and a gemini verifier assess position-correct rendering. laugh and chuckle are pooled into one category; the final score averages laughter and sigh rendering rates across detectors, with unsupported categories contributing zero. rumik-oss 1 achieves a **0.884 rendering score**.
212
+
213
+ ![NoVA rendering scores across seven tested tts configurations](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/nova-results.png)
214
+
215
+ <details>
216
+ <summary>scores and detector breakdown</summary>
217
+
218
+ | system (voice) | rendering score |
219
+ |---|---:|
220
+ | grok tts (ara) | 0.972 |
221
+ | inworld tts-2 (ashley) | 0.941 |
222
+ | **rumik-oss 1 (ira)** | **0.884** |
223
+ | orpheus 3b (tara) | 0.813 |
224
+ | elevenlabs v3 (jessica) | 0.705 |
225
+ | gemini 3.1 flash tts (kore) | 0.664 |
226
+ | cartesia sonic 3.6 (monica) | 0.498 |
227
+
228
+ ![NoVA position-correct vocalization rendering by detector](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/nova-detector-breakdown.png)
229
+
230
+ [evaluation protocol](benchmarks/evaluation.md#nova).
231
+
232
+ </details>
233
+
234
+ ### WER / CER
235
+
236
+ [github](https://github.com/Demon-Sheriff/rumik-oss-bench)
237
+
238
+ we evaluate transcription fidelity using IndicConformer RNNT, comparing normalized ASR transcripts against the input text. the tables report WER and CER across 15 languages. we release the benchmark prompts, generation and scoring code, and per-sample results in [rumik-oss-bench](https://github.com/Demon-Sheriff/rumik-oss-bench), with normalization and scoring details in the [methodology](https://github.com/Demon-Sheriff/rumik-oss-bench/blob/main/METHODOLOGY.md).
239
+
240
+ #### WER (%)
241
+
242
+ ![WER language comparison](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/wer-selected.png)
243
+
244
+ <details>
245
+ <summary>all 15 languages · WER</summary>
246
+
247
+ ![WER: complete 15-language table](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/wer-full.png)
248
+
249
+ [results](benchmarks/wer-reported-scores.json) · [evaluation protocol](benchmarks/evaluation.md#wer-and-cer)
250
+
251
+ </details>
252
+
253
+ #### CER (%)
254
+
255
+ ![CER language comparison](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/cer-selected.png)
256
+
257
+ <details>
258
+ <summary>all 15 languages · CER</summary>
259
+
260
+ ![CER: complete 15-language table](https://huggingface.co/rumik-ai/rumik-oss-1/resolve/main/assets/cer-full.png)
261
+
262
+ [results](benchmarks/cer-reported-scores.json) · [evaluation protocol](benchmarks/evaluation.md#wer-and-cer)
263
+
264
+ </details>
265
+
266
+ ## limitations
267
+
268
+ - **long-form synthesis:** training utterances are limited to 30 seconds; speaker and prosodic continuity over longer passages have not been evaluated. we do not recommend generating utterances longer than 35 seconds.
269
+ - **vocalization precision:** NoVA detectors report unrequested vocalizations in 2.9-5.4% of rumik-oss 1 outputs. NoVA evaluates english; equivalent tag adherence across languages has not been established.
270
+
271
+ ## inference
272
+
273
+ rumik-oss 1 generates **audio tokens**. decoding them to a waveform is a
274
+ separate step that uses the [mimi](https://huggingface.co/kyutai/mimi) codec,
275
+ bundled in this repository under `codec/`.
276
+
277
+ `transformers.pipeline("text-to-speech")` is not supported for this model.
278
+ use the [one-shot example](#one-shot-example) to generate audio tokens with
279
+ `generate_audio()` and decode them into a waveform with mimi.
280
+
281
+ ### installation
282
+
283
+ ```bash
284
+ pip install -r requirements.txt
285
+ ```
286
+
287
+ requires an nvidia gpu with cuda support. the one-shot example below also
288
+ needs `soundfile` to write a wav. `requirements-server.txt` adds the extras
289
+ needed only for the optional web ui.
290
+
291
+ ### one-shot example
292
+
293
+ text in, `speech.wav` out:
294
+
295
+ ```python
296
+ """rumik-oss 1: text -> speech.wav"""
297
+ import soundfile as sf
298
+ import torch
299
+ from transformers import AutoModelForCausalLM, AutoTokenizer, MimiModel
300
+
301
+ REPO = "rumik-ai/rumik-oss-1"
302
+ SPEAKER = "Ira"
303
+ DESCRIPTION = "happy, Hindi accent, steady pace"
304
+ TEXT = "नमस्ते, आज आपका दिन कैसा रहा?"
305
+
306
+ tokenizer = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True)
307
+ model = AutoModelForCausalLM.from_pretrained(
308
+ REPO, trust_remote_code=True, dtype=torch.bfloat16
309
+ ).eval().cuda()
310
+ mimi = MimiModel.from_pretrained(REPO, subfolder="codec").eval().cuda()
311
+
312
+ # [BOS] <text> Ira: <description="..."> text <audio>
313
+ # the tokenizer adds [BOS] itself, so it is not written here
314
+ prompt = f'<text>{SPEAKER}: <description="{DESCRIPTION}"> {TEXT}<audio>'
315
+ inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
316
+
317
+ # 1. text -> audio tokens
318
+ ids = model.generate_audio(**inputs, max_new_tokens=2048,
319
+ temperature=0.8, top_k=30, do_sample=True)
320
+ audio_tokens = ids[0].tolist()[inputs.input_ids.shape[1]:]
321
+
322
+ # 2. audio tokens -> codec frames -> waveform
323
+ codes = model.audio_tokens_to_codes(audio_tokens)
324
+ with torch.inference_mode():
325
+ wav = mimi.decode(codes.to(mimi.device)).audio_values[0, 0]
326
+
327
+ sf.write("speech.wav", wav.float().cpu().numpy(), 24000)
328
+ print(f"{len(audio_tokens)} tokens -> {len(audio_tokens) / 100:.2f}s -> speech.wav")
329
+ ```
330
+
331
+ ### web interface
332
+
333
+ an optional fastapi server with a browser ui is included:
334
+
335
+ ```bash
336
+ pip install -r requirements-server.txt
337
+ python server.py --repo-id rumik-ai/rumik-oss-1 --host 127.0.0.1 --port 6006
338
+ ```
339
+
340
+ open `http://127.0.0.1:6006/`, or post to it:
341
+
342
+ ```bash
343
+ curl http://127.0.0.1:6006/v1/audio/speech \
344
+ -H 'Content-Type: application/json' \
345
+ -d '{
346
+ "speaker": "Ira",
347
+ "input": "<description=\"happy, Hindi accent, steady pace\"> नमस्ते, आज आपका दिन कैसा रहा?",
348
+ "temperature": 0.8,
349
+ "top_k": 30,
350
+ "max_new_tokens": 2048
351
+ }' \
352
+ --output speech.wav
353
+ ```
354
+
355
+ ## license
356
+
357
+ rumik-oss 1 is available for **research and non-commercial use** under [tiny aya fire's cc-by-nc 4.0 license with an acceptable-use addendum](https://cohere.com/cohere-labs-cc-by-nc-license).
358
+
359
+ permitted non-commercial uses include speech-synthesis research, benchmarking, teaching, and fine-tuning for research experiments. you may share the weights and adaptations under the applicable terms, retaining attribution, license links, upstream notices, and an indication of modifications. all use must comply with [cohere labs' acceptable-use policy](https://docs.cohere.com/docs/cohere-labs-acceptable-use-policy).
360
+
361
+ the license does not authorize commercial products, paid synthesis services, or other uses directed toward commercial advantage, including self-hosted deployments. those uses require separate permission from the relevant rights holders; a research label alone does not make a commercial activity non-commercial.
362
+
363
+ the [mimi codec](https://huggingface.co/kyutai/mimi) is licensed separately under [cc-by-4.0](https://creativecommons.org/licenses/by/4.0/), which permits reuse and adaptation, including commercially, with attribution and modification notices. that permission applies to the codec, not to the tiny aya-derived tts weights.
364
+
365
+ the full license text is in [`LICENSE`](LICENSE), and [`NOTICE`](NOTICE)
366
+ records the modifications made to tiny aya fire, as cc-by-nc 4.0 requires.
367
+
368
+ ## acknowledgments
369
+
370
+ rumik-oss 1 builds on [tiny aya fire](https://huggingface.co/CohereLabs/tiny-aya-fire), [mimi](https://huggingface.co/kyutai/mimi), [llama-mimi](https://arxiv.org/abs/2509.14882), and [torchtitan](https://github.com/pytorch/torchtitan). we thank their authors for making this work available. our work wouldn't be possible without these foundations.
371
+
372
+ ## training recipe
373
+
374
+ we plan to release the training recipe, including data manifests, preprocessing scripts, and training configurations, alongside the **technical report**. data releases are subject to source redistribution rights.
375
+
376
+ ## contact
377
+
378
+ [research@rumik.ai](mailto:research@rumik.ai)
379
+
380
+ ## citation
381
+
382
+ if you find rumik-oss 1 useful in your research, please cite our work:
383
+
384
+ ```bibtex
385
+ @unpublished{govindu2026rumikoss1,
386
+ title = {{rumik-oss 1 technical report}},
387
+ author = {Govindu Pranav and Anant Shukla and Suryansh Shakya and Aman Anand and Vatsal Bharti},
388
+ year = {2026},
389
+ note = {In preparation}
390
+ }
391
+ ```
assets/architecture.png ADDED

Git LFS Details

  • SHA256: c14e5fb4768f24f542a76b3543c259ac131bca348b0ad7ff4e78740075eb44c1
  • Pointer size: 131 Bytes
  • Size of remote file: 289 kB
assets/cer-full.png ADDED

Git LFS Details

  • SHA256: eb7ecd16bd592fbca3b56b77a8d98198ed34f3d45eb1ec8938b3e9ff70e2713d
  • Pointer size: 131 Bytes
  • Size of remote file: 208 kB
assets/cer-full.svg ADDED
assets/cer-selected.png ADDED

Git LFS Details

  • SHA256: cfe430222b734fa04743ed942a8ff49a948db7d1876e9a3249ed2d5fd2a2b0e7
  • Pointer size: 131 Bytes
  • Size of remote file: 113 kB
assets/cer-selected.svg ADDED
assets/favicon.jpg ADDED
assets/indicemo-by-delivery.png ADDED

Git LFS Details

  • SHA256: 2fe2e5841be0a739bb6c8e47afa9b7e9d8101506e275744d0ce383a3c84128bb
  • Pointer size: 131 Bytes
  • Size of remote file: 156 kB
assets/indicemo-by-delivery.svg ADDED
assets/indicemo-overall.png ADDED

Git LFS Details

  • SHA256: 63973abb445f4005986af85880ccf9d6a015b4f8fba8c01ca77613c749f1064c
  • Pointer size: 131 Bytes
  • Size of remote file: 108 kB
assets/indicemo-overall.svg ADDED
assets/nova-detector-breakdown.png ADDED

Git LFS Details

  • SHA256: aabe642263567ec5f89aed39a488ed36ae998278a35dff18521fa2a26190d41d
  • Pointer size: 131 Bytes
  • Size of remote file: 429 kB
assets/nova-results.png ADDED

Git LFS Details

  • SHA256: 717099c04fff9ed66a9e1802fa02cb37f4e4bab886d049dd375a554f784e4ab1
  • Pointer size: 131 Bytes
  • Size of remote file: 106 kB
assets/nova-results.svg ADDED
assets/rumik-capabilities.png ADDED

Git LFS Details

  • SHA256: a466327a64696d1cdda14a9a1d5afb05795d6cb7251f47e9212f0c5245e8be86
  • Pointer size: 132 Bytes
  • Size of remote file: 2.14 MB
assets/rumik-logo.png ADDED

Git LFS Details

  • SHA256: 9ad7a7766bdc9d2d1d659e93961b5a5265db9dddd179fd5c82f1bece6bcb45bf
  • Pointer size: 131 Bytes
  • Size of remote file: 914 kB
assets/wer-full.png ADDED

Git LFS Details

  • SHA256: ca7af49a693c51418c2da2b6bb3621ed6ef1e26290a689509d11263d7b5fce1e
  • Pointer size: 131 Bytes
  • Size of remote file: 220 kB
assets/wer-full.svg ADDED
assets/wer-selected.png ADDED

Git LFS Details

  • SHA256: d412538fe0b332b5e7f342e6ceed43b385c518f0f1fc4e1afe21db22381a714a
  • Pointer size: 131 Bytes
  • Size of remote file: 125 kB
assets/wer-selected.svg ADDED
benchmarks/cer-methodology.md ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # cer evaluation
2
+
3
+ [protocol](evaluation.md#wer-and-cer) · [results](cer-reported-scores.json)
benchmarks/cer-reported-scores.json ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "internal evaluation harness; see benchmarks/evaluation.md",
3
+ "retrieved_utc": "2026-09-07T09:35:01.588484+00:00",
4
+ "metric": "CER (fraction)",
5
+ "recognizer": "IndicConformer (as reported)",
6
+ "source_systems": [
7
+ "rumik-oss 1",
8
+ "Cartesia Sonic 3.5",
9
+ "Gemini 3.1 Flash",
10
+ "ElevenLabs v3",
11
+ "Smallest Lightning v3.1",
12
+ "Sarvam Bulbul v3",
13
+ "Grok TTS"
14
+ ],
15
+ "rows": [
16
+ {
17
+ "language": "Odia",
18
+ "cer": [
19
+ "0.0145",
20
+ null,
21
+ "0.0212",
22
+ null,
23
+ "0.0174",
24
+ "0.0499",
25
+ null
26
+ ],
27
+ "source_verdict": "within noise"
28
+ },
29
+ {
30
+ "language": "Konkani",
31
+ "cer": [
32
+ "0.0485",
33
+ null,
34
+ "0.0496",
35
+ null,
36
+ null,
37
+ null,
38
+ null
39
+ ],
40
+ "source_verdict": "within noise"
41
+ },
42
+ {
43
+ "language": "Maithili",
44
+ "cer": [
45
+ "0.0390",
46
+ null,
47
+ "0.0381",
48
+ null,
49
+ null,
50
+ null,
51
+ null
52
+ ],
53
+ "source_verdict": "within noise"
54
+ },
55
+ {
56
+ "language": "Telugu",
57
+ "cer": [
58
+ "0.0127",
59
+ "0.0116",
60
+ "0.0186",
61
+ "0.0194",
62
+ null,
63
+ "0.0152",
64
+ null
65
+ ],
66
+ "source_verdict": "within noise"
67
+ },
68
+ {
69
+ "language": "Assamese",
70
+ "cer": [
71
+ "0.0324",
72
+ null,
73
+ null,
74
+ "0.0310",
75
+ null,
76
+ null,
77
+ null
78
+ ],
79
+ "source_verdict": "within noise"
80
+ },
81
+ {
82
+ "language": "Gujarati",
83
+ "cer": [
84
+ "0.0106",
85
+ "0.0077",
86
+ "0.0096",
87
+ "0.0136",
88
+ "0.0082",
89
+ "0.0527",
90
+ null
91
+ ],
92
+ "source_verdict": "within noise"
93
+ },
94
+ {
95
+ "language": "Marathi",
96
+ "cer": [
97
+ "0.0086",
98
+ "0.0055",
99
+ "0.0061",
100
+ "0.0136",
101
+ "0.0079",
102
+ "0.0349",
103
+ null
104
+ ],
105
+ "source_verdict": "within noise"
106
+ },
107
+ {
108
+ "language": "Kannada",
109
+ "cer": [
110
+ "0.0105",
111
+ "0.0074",
112
+ "0.0113",
113
+ "0.0126",
114
+ "0.0410",
115
+ "0.0315",
116
+ null
117
+ ],
118
+ "source_verdict": "within noise"
119
+ },
120
+ {
121
+ "language": "Nepali",
122
+ "cer": [
123
+ "0.0198",
124
+ null,
125
+ "0.0162",
126
+ "0.0236",
127
+ null,
128
+ null,
129
+ null
130
+ ],
131
+ "source_verdict": "within noise"
132
+ },
133
+ {
134
+ "language": "Hindi",
135
+ "cer": [
136
+ "0.0154",
137
+ "0.0113",
138
+ "0.0108",
139
+ "0.0154",
140
+ "0.0146",
141
+ "0.0403",
142
+ "0.0098"
143
+ ],
144
+ "source_verdict": "within noise"
145
+ },
146
+ {
147
+ "language": "Malayalam",
148
+ "cer": [
149
+ "0.0224",
150
+ "0.0189",
151
+ "0.0233",
152
+ "0.0245",
153
+ "0.0224",
154
+ "0.0167",
155
+ null
156
+ ],
157
+ "source_verdict": "within noise"
158
+ },
159
+ {
160
+ "language": "Tamil",
161
+ "cer": [
162
+ "0.0223",
163
+ "0.0196",
164
+ "0.0173",
165
+ "0.0225",
166
+ null,
167
+ "0.0164",
168
+ null
169
+ ],
170
+ "source_verdict": "within noise"
171
+ },
172
+ {
173
+ "language": "Punjabi",
174
+ "cer": [
175
+ "0.0213",
176
+ "0.0140",
177
+ "0.0147",
178
+ "0.0254",
179
+ "0.0153",
180
+ "0.0686",
181
+ null
182
+ ],
183
+ "source_verdict": "behind the best API"
184
+ },
185
+ {
186
+ "language": "Bengali",
187
+ "cer": [
188
+ "0.0302",
189
+ "0.0193",
190
+ "0.0233",
191
+ "0.0209",
192
+ "0.0219",
193
+ "0.0361",
194
+ null
195
+ ],
196
+ "source_verdict": "behind the best API"
197
+ },
198
+ {
199
+ "language": "Urdu",
200
+ "cer": [
201
+ "0.0174",
202
+ null,
203
+ "0.0051",
204
+ "0.0072",
205
+ null,
206
+ null,
207
+ null
208
+ ],
209
+ "source_verdict": "behind the best API"
210
+ }
211
+ ]
212
+ }
benchmarks/evaluation.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # evaluation protocol
2
+
3
+ ## indicemo
4
+
5
+ [repository](https://github.com/ira-rumik/IndicEmo)
6
+
7
+ 100 prompts span five equally represented delivery categories: happy, sad,
8
+ angry, excited, and professional. each prompt combines two to five languages
9
+ from english, hindi, telugu, tamil, kannada, bengali, and punjabi. five systems
10
+ produce 500 recordings.
11
+
12
+ gemini 3.1 pro preview, qwen3.5-omni-plus, and gpt-realtime-2.1 score anonymized
13
+ recordings on a 1-5 rubric covering tone, dynamics, phrasing, and sustained
14
+ expression. aggregation uses the 98-prompt intersection with valid ratings from
15
+ all judges: median per recording, mean within category, then an unweighted
16
+ mean across categories. the emotions-only aggregate excludes professional.
17
+
18
+ rumik-oss-1 uses ira throughout; competing systems use language-conditioned
19
+ voices. statistical significance of ranking differences has not been evaluated.
20
+
21
+ ## nova
22
+
23
+ [repository](https://github.com/ira-rumik/nova-bench) ·
24
+ [protocol](https://github.com/ira-rumik/nova-bench/blob/main/METHODOLOGY.md)
25
+
26
+ seven systems are evaluated on 149 single-tag english prompts from
27
+ nvv-superbench, with three synthesis runs per system. prompts use
28
+ provider-specific tags. rumik-oss-1 uses ira, with happy descriptions for
29
+ laugh/chuckle and sad descriptions for sigh.
30
+
31
+ silk-asr, scribe v2, and the nvv-superbench gemini verifier measure exact-position
32
+ rendering. laugh and chuckle are pooled into a laughter category. the aggregate
33
+ is the mean of laughter and sigh rendering rates, averaged across detectors.
34
+ unsupported categories contribute zero, including cartesia's absent sigh tag.
35
+ detector-level results report means and standard deviations across runs.
36
+
37
+ unrequested vocalization rates for rumik-oss-1 are 2.9% (silk-asr), 5.4%
38
+ (gemini), and 4.5% (scribe). gemini is conditioned on the requested event;
39
+ the transcribers receive audio only. silk-asr is developed by rumik; scribe
40
+ shares a provider with an evaluated system.
41
+
42
+ ## wer and cer
43
+
44
+ [wer results](wer-reported-scores.json) · [cer results](cer-reported-scores.json)
45
+
46
+ the full comparison covers 15 languages. seven-language subsets are selected
47
+ post hoc by top-two numerical rank among displayed systems. the wer subset
48
+ includes malayalam in place of telugu. provider coverage varies by language;
49
+ grok results are available only for hindi.
50
+
51
+ the wer protocol specifies 100 shared prompts per model and language, scored
52
+ with indicconformer rnnt using normalized text. the cer evaluation reports
53
+ 100 rumik recordings per language, except telugu with 99.
54
+
55
+ competitor sample counts, matched utterance coverage, normalization, and
56
+ recognizer versions have not been independently verified. confidence intervals
57
+ and significance tests are unavailable. wer and cer originate from separate
58
+ result snapshots; matched recordings between them and checkpoint equivalence
59
+ with the emotion/vocalization evaluations remain unverified.
benchmarks/wer-reported-scores.json ADDED
@@ -0,0 +1,311 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "internal evaluation harness; see benchmarks/evaluation.md",
3
+ "retrieved_utc": "2026-09-07T14:41:38.692153+00:00",
4
+ "metric": "WER (fraction)",
5
+ "source_systems": [
6
+ "rumik-oss 1",
7
+ "Cartesia",
8
+ "Gemini",
9
+ "ElevenLabs",
10
+ "Smallest",
11
+ "Sarvam",
12
+ "Grok",
13
+ "rumik hosted (Ira)"
14
+ ],
15
+ "rows": [
16
+ {
17
+ "language": "Urdu",
18
+ "code": "ur",
19
+ "wer": [
20
+ "0.0348",
21
+ null,
22
+ "0.0219",
23
+ "0.0246",
24
+ null,
25
+ null,
26
+ null,
27
+ "0.0395"
28
+ ]
29
+ },
30
+ {
31
+ "language": "Marathi",
32
+ "code": "mr",
33
+ "wer": [
34
+ "0.0503",
35
+ "0.0362",
36
+ "0.0377",
37
+ "0.0761",
38
+ "0.0467",
39
+ "0.0736",
40
+ null,
41
+ "0.1010"
42
+ ]
43
+ },
44
+ {
45
+ "language": "Gujarati",
46
+ "code": "gu",
47
+ "wer": [
48
+ "0.0515",
49
+ "0.0443",
50
+ "0.0505",
51
+ "0.0654",
52
+ "0.0442",
53
+ "0.0982",
54
+ null,
55
+ "0.1029"
56
+ ]
57
+ },
58
+ {
59
+ "language": "Hindi",
60
+ "code": "hi",
61
+ "wer": [
62
+ "0.0712",
63
+ "0.0521",
64
+ "0.0489",
65
+ "0.0688",
66
+ "0.0556",
67
+ "0.0981",
68
+ "0.0464",
69
+ "0.0764"
70
+ ]
71
+ },
72
+ {
73
+ "language": "Punjabi",
74
+ "code": "pa",
75
+ "wer": [
76
+ "0.0781",
77
+ "0.0642",
78
+ "0.0635",
79
+ "0.0863",
80
+ "0.0641",
81
+ "0.1189",
82
+ null,
83
+ "0.1115"
84
+ ]
85
+ },
86
+ {
87
+ "language": "Kannada",
88
+ "code": "kn",
89
+ "wer": [
90
+ "0.0788",
91
+ "0.0623",
92
+ "0.0899",
93
+ "0.0891",
94
+ "0.2464",
95
+ "0.0789",
96
+ null,
97
+ "0.0838"
98
+ ]
99
+ },
100
+ {
101
+ "language": "Bengali",
102
+ "code": "bn",
103
+ "wer": [
104
+ "0.0975",
105
+ "0.0641",
106
+ "0.0784",
107
+ "0.0693",
108
+ "0.0777",
109
+ "0.0895",
110
+ null,
111
+ "0.2933"
112
+ ]
113
+ },
114
+ {
115
+ "language": "Nepali",
116
+ "code": "ne",
117
+ "wer": [
118
+ "0.1128",
119
+ null,
120
+ "0.0930",
121
+ "0.1234",
122
+ null,
123
+ null,
124
+ null,
125
+ "0.1905"
126
+ ]
127
+ },
128
+ {
129
+ "language": "Manipuri",
130
+ "code": "mni",
131
+ "wer": [
132
+ "0.1141",
133
+ null,
134
+ null,
135
+ null,
136
+ null,
137
+ null,
138
+ null,
139
+ "0.1267"
140
+ ]
141
+ },
142
+ {
143
+ "language": "Telugu",
144
+ "code": "te",
145
+ "wer": [
146
+ "0.1233",
147
+ "0.1072",
148
+ "0.1514",
149
+ "0.1264",
150
+ null,
151
+ "0.0931",
152
+ null,
153
+ "0.1638"
154
+ ]
155
+ },
156
+ {
157
+ "language": "Tamil",
158
+ "code": "ta",
159
+ "wer": [
160
+ "0.1237",
161
+ "0.1274",
162
+ "0.1130",
163
+ "0.1382",
164
+ null,
165
+ "0.1003",
166
+ null,
167
+ "0.2868"
168
+ ]
169
+ },
170
+ {
171
+ "language": "Odia",
172
+ "code": "or",
173
+ "wer": [
174
+ "0.1263",
175
+ null,
176
+ "0.1344",
177
+ null,
178
+ "0.1197",
179
+ "0.1492",
180
+ null,
181
+ "0.1480"
182
+ ]
183
+ },
184
+ {
185
+ "language": "Assamese",
186
+ "code": "as",
187
+ "wer": [
188
+ "0.1296",
189
+ null,
190
+ null,
191
+ "0.1260",
192
+ null,
193
+ null,
194
+ null,
195
+ "0.2779"
196
+ ]
197
+ },
198
+ {
199
+ "language": "Malayalam",
200
+ "code": "ml",
201
+ "wer": [
202
+ "0.1460",
203
+ "0.1469",
204
+ "0.1755",
205
+ "0.1628",
206
+ "0.1562",
207
+ "0.1232",
208
+ null,
209
+ "0.3864"
210
+ ]
211
+ },
212
+ {
213
+ "language": "Maithili",
214
+ "code": "mai",
215
+ "wer": [
216
+ "0.1741",
217
+ null,
218
+ "0.1781",
219
+ null,
220
+ null,
221
+ null,
222
+ null,
223
+ "0.1905"
224
+ ]
225
+ },
226
+ {
227
+ "language": "Bodo",
228
+ "code": "brx",
229
+ "wer": [
230
+ "0.2113",
231
+ null,
232
+ null,
233
+ null,
234
+ null,
235
+ null,
236
+ null,
237
+ "0.2316"
238
+ ]
239
+ },
240
+ {
241
+ "language": "Konkani",
242
+ "code": "kok",
243
+ "wer": [
244
+ "0.2156",
245
+ null,
246
+ "0.2348",
247
+ null,
248
+ null,
249
+ null,
250
+ null,
251
+ "0.2552"
252
+ ]
253
+ },
254
+ {
255
+ "language": "Dogri",
256
+ "code": "doi",
257
+ "wer": [
258
+ "0.2196",
259
+ null,
260
+ null,
261
+ null,
262
+ null,
263
+ null,
264
+ null,
265
+ "0.2249"
266
+ ]
267
+ },
268
+ {
269
+ "language": "Sanskrit",
270
+ "code": "sa",
271
+ "wer": [
272
+ "0.2431",
273
+ null,
274
+ null,
275
+ null,
276
+ null,
277
+ null,
278
+ null,
279
+ "0.2986"
280
+ ]
281
+ },
282
+ {
283
+ "language": "Santali",
284
+ "code": "sat",
285
+ "wer": [
286
+ "0.2855",
287
+ null,
288
+ null,
289
+ null,
290
+ null,
291
+ null,
292
+ null,
293
+ "0.3071"
294
+ ]
295
+ },
296
+ {
297
+ "language": "Kashmiri",
298
+ "code": "ks",
299
+ "wer": [
300
+ "0.4573",
301
+ null,
302
+ null,
303
+ null,
304
+ null,
305
+ null,
306
+ null,
307
+ "0.4819"
308
+ ]
309
+ }
310
+ ]
311
+ }
codec/config.json ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_frame_rate": 12.5,
3
+ "architectures": [
4
+ "MimiModel"
5
+ ],
6
+ "attention_bias": false,
7
+ "attention_dropout": 0.0,
8
+ "audio_channels": 1,
9
+ "codebook_dim": 256,
10
+ "codebook_size": 2048,
11
+ "compress": 2,
12
+ "dilation_growth_rate": 2,
13
+ "dtype": "float32",
14
+ "head_dim": 64,
15
+ "hidden_act": "gelu",
16
+ "hidden_size": 512,
17
+ "initializer_range": 0.02,
18
+ "intermediate_size": 2048,
19
+ "kernel_size": 7,
20
+ "last_kernel_size": 3,
21
+ "layer_scale_initial_scale": 0.01,
22
+ "max_position_embeddings": 8000,
23
+ "model_type": "mimi",
24
+ "norm_eps": 1e-05,
25
+ "normalize": false,
26
+ "num_attention_heads": 8,
27
+ "num_filters": 64,
28
+ "num_hidden_layers": 8,
29
+ "num_key_value_heads": 8,
30
+ "num_quantizers": 32,
31
+ "num_residual_layers": 1,
32
+ "num_semantic_quantizers": 1,
33
+ "pad_mode": "constant",
34
+ "residual_kernel_size": 3,
35
+ "rope_theta": 10000.0,
36
+ "sampling_rate": 24000,
37
+ "sliding_window": 250,
38
+ "transformers_version": "4.57.6",
39
+ "trim_right_ratio": 1.0,
40
+ "upsample_groups": 512,
41
+ "upsampling_ratios": [
42
+ 8,
43
+ 6,
44
+ 5,
45
+ 4
46
+ ],
47
+ "use_cache": false,
48
+ "use_causal_conv": true,
49
+ "use_conv_shortcut": false,
50
+ "use_streaming": false,
51
+ "vector_quantization_hidden_dimension": 256
52
+ }
codec/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bac7e85083dcded655d24eaadde7e6eea34c0da1b35fa2d284e641bd2b942a5e
3
+ size 384649828
codec/preprocessor_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "chunk_length_s": null,
3
+ "feature_extractor_type": "EncodecFeatureExtractor",
4
+ "feature_size": 1,
5
+ "overlap": null,
6
+ "padding_side": "right",
7
+ "padding_value": 0.0,
8
+ "return_attention_mask": true,
9
+ "sampling_rate": 24000
10
+ }
config.json ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_sliding_window_pattern": 4,
3
+ "architectures": [
4
+ "RumikOSSForCausalLM"
5
+ ],
6
+ "attention_bias": false,
7
+ "attention_dropout": 0.0,
8
+ "audio_end_token_id": 277394,
9
+ "audio_start_token_id": 277393,
10
+ "auto_map": {
11
+ "AutoConfig": "configuration_rumik_oss.RumikOSSConfig",
12
+ "AutoModelForCausalLM": "modeling_rumik_oss.RumikOSSForCausalLM"
13
+ },
14
+ "bos_token_id": 2,
15
+ "codebook_size": 2048,
16
+ "dtype": "bfloat16",
17
+ "eos_token_id": 3,
18
+ "first_unit_id": 261008,
19
+ "frame_rate_hz": 12.5,
20
+ "head_dim": 128,
21
+ "hidden_act": "silu",
22
+ "hidden_size": 2048,
23
+ "initializer_range": 0.02,
24
+ "intermediate_size": 11008,
25
+ "last_unit_id": 277391,
26
+ "layer_norm_eps": 1e-05,
27
+ "layer_switch": 4,
28
+ "layer_types": [
29
+ "sliding_attention",
30
+ "sliding_attention",
31
+ "sliding_attention",
32
+ "full_attention",
33
+ "sliding_attention",
34
+ "sliding_attention",
35
+ "sliding_attention",
36
+ "full_attention",
37
+ "sliding_attention",
38
+ "sliding_attention",
39
+ "sliding_attention",
40
+ "full_attention",
41
+ "sliding_attention",
42
+ "sliding_attention",
43
+ "sliding_attention",
44
+ "full_attention",
45
+ "sliding_attention",
46
+ "sliding_attention",
47
+ "sliding_attention",
48
+ "full_attention",
49
+ "sliding_attention",
50
+ "sliding_attention",
51
+ "sliding_attention",
52
+ "full_attention",
53
+ "sliding_attention",
54
+ "sliding_attention",
55
+ "sliding_attention",
56
+ "full_attention",
57
+ "sliding_attention",
58
+ "sliding_attention",
59
+ "sliding_attention",
60
+ "full_attention",
61
+ "sliding_attention",
62
+ "sliding_attention",
63
+ "sliding_attention",
64
+ "full_attention"
65
+ ],
66
+ "logit_scale": 1.0,
67
+ "max_position_embeddings": 8192,
68
+ "model_type": "rumik_oss",
69
+ "num_attention_heads": 16,
70
+ "num_hidden_layers": 36,
71
+ "num_key_value_heads": 4,
72
+ "num_quantizers": 8,
73
+ "order_of_interleaved_layers": "local_attn_first",
74
+ "pad_token_id": 0,
75
+ "position_embedding_type": "rope_gptj",
76
+ "rope_scaling": null,
77
+ "rope_theta": 50000,
78
+ "rotary_pct": 1.0,
79
+ "sliding_window": 4096,
80
+ "sliding_window_pattern": 4,
81
+ "speakers": [
82
+ "Ira",
83
+ "Aisha",
84
+ "Siya",
85
+ "Zoya"
86
+ ],
87
+ "text_start_token_id": 277392,
88
+ "tie_word_embeddings": true,
89
+ "torch_dtype": "bfloat16",
90
+ "transformers_version": "4.57.6",
91
+ "use_cache": true,
92
+ "use_embedding_sharing": true,
93
+ "use_gated_activation": true,
94
+ "use_parallel_block": true,
95
+ "use_parallel_embedding": false,
96
+ "use_qk_norm": false,
97
+ "vocab_size": 277404
98
+ }
configuration_rumik_oss.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Configuration for rumik-oss 1."""
2
+
3
+ from transformers import Cohere2Config
4
+
5
+
6
+ class RumikOSSConfig(Cohere2Config):
7
+ """rumik-oss 1: tiny aya fire extended with flattened Mimi codec tokens.
8
+
9
+ Beyond the base Cohere2 fields, this records where the audio vocabulary
10
+ lives so that callers can map token ids to codec (code, quantizer) pairs
11
+ arithmetically, without loading the tokenizer or scanning its vocabulary.
12
+
13
+ The unit tokens are laid out code-major, quantizer-minor::
14
+
15
+ <0_0> <0_1> ... <0_7> <1_0> ... <2047_7>
16
+
17
+ so for any id in ``[first_unit_id, last_unit_id]``::
18
+
19
+ code = (token_id - first_unit_id) // num_quantizers
20
+ quantizer = (token_id - first_unit_id) % num_quantizers
21
+ """
22
+
23
+ model_type = "rumik_oss"
24
+
25
+ def __init__(
26
+ self,
27
+ num_quantizers=8,
28
+ codebook_size=2048,
29
+ audio_start_token_id=None,
30
+ audio_end_token_id=None,
31
+ text_start_token_id=None,
32
+ first_unit_id=None,
33
+ last_unit_id=None,
34
+ frame_rate_hz=12.5,
35
+ speakers=None,
36
+ **kwargs,
37
+ ):
38
+ super().__init__(**kwargs)
39
+ self.num_quantizers = int(num_quantizers)
40
+ self.codebook_size = int(codebook_size)
41
+ self.audio_start_token_id = audio_start_token_id
42
+ self.audio_end_token_id = audio_end_token_id
43
+ self.text_start_token_id = text_start_token_id
44
+ self.first_unit_id = first_unit_id
45
+ # Derivable, but stored so a hand-edited config stays self-consistent.
46
+ if last_unit_id is None and first_unit_id is not None:
47
+ last_unit_id = int(first_unit_id) + self.codebook_size * self.num_quantizers - 1
48
+ self.last_unit_id = last_unit_id
49
+ self.frame_rate_hz = float(frame_rate_hz)
50
+ self.speakers = speakers or ["Ira", "Aisha", "Siya", "Zoya"]
51
+
52
+ @property
53
+ def audio_tokens_per_second(self) -> float:
54
+ """Tokens the model emits per second of audio (8 x 12.5 = 100)."""
55
+ return self.frame_rate_hz * self.num_quantizers
generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 2,
4
+ "eos_token_id": 3,
5
+ "pad_token_id": 0,
6
+ "transformers_version": "4.57.6"
7
+ }
model-00001-of-00002.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ba333fd8e5c48151ce6d890919da1e0104471aa0d029557548720de0a5734dea
3
+ size 4997224952
model-00002-of-00002.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68e5ce5c4915885ad47835837a62dcd56aba69da86e99040700bb9e91bc022af
3
+ size 1765876498
model.safetensors.index.json ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_parameters": 3381533697,
4
+ "total_size": 6763067394
5
+ },
6
+ "weight_map": {
7
+ "model.embed_tokens.weight": "model-00001-of-00002.safetensors",
8
+ "model.layers.0.input_layernorm.weight": "model-00001-of-00002.safetensors",
9
+ "model.layers.0.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
10
+ "model.layers.0.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
11
+ "model.layers.0.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
12
+ "model.layers.0.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
13
+ "model.layers.0.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
14
+ "model.layers.0.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
15
+ "model.layers.0.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
16
+ "model.layers.1.input_layernorm.weight": "model-00001-of-00002.safetensors",
17
+ "model.layers.1.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
18
+ "model.layers.1.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
19
+ "model.layers.1.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
20
+ "model.layers.1.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
21
+ "model.layers.1.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
22
+ "model.layers.1.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
23
+ "model.layers.1.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
24
+ "model.layers.10.input_layernorm.weight": "model-00001-of-00002.safetensors",
25
+ "model.layers.10.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
26
+ "model.layers.10.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
27
+ "model.layers.10.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
28
+ "model.layers.10.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
29
+ "model.layers.10.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
30
+ "model.layers.10.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
31
+ "model.layers.10.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
32
+ "model.layers.11.input_layernorm.weight": "model-00001-of-00002.safetensors",
33
+ "model.layers.11.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
34
+ "model.layers.11.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
35
+ "model.layers.11.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
36
+ "model.layers.11.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
37
+ "model.layers.11.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
38
+ "model.layers.11.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
39
+ "model.layers.11.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
40
+ "model.layers.12.input_layernorm.weight": "model-00001-of-00002.safetensors",
41
+ "model.layers.12.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
42
+ "model.layers.12.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
43
+ "model.layers.12.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
44
+ "model.layers.12.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
45
+ "model.layers.12.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
46
+ "model.layers.12.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
47
+ "model.layers.12.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
48
+ "model.layers.13.input_layernorm.weight": "model-00001-of-00002.safetensors",
49
+ "model.layers.13.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
50
+ "model.layers.13.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
51
+ "model.layers.13.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
52
+ "model.layers.13.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
53
+ "model.layers.13.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
54
+ "model.layers.13.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
55
+ "model.layers.13.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
56
+ "model.layers.14.input_layernorm.weight": "model-00001-of-00002.safetensors",
57
+ "model.layers.14.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
58
+ "model.layers.14.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
59
+ "model.layers.14.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
60
+ "model.layers.14.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
61
+ "model.layers.14.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
62
+ "model.layers.14.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
63
+ "model.layers.14.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
64
+ "model.layers.15.input_layernorm.weight": "model-00001-of-00002.safetensors",
65
+ "model.layers.15.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
66
+ "model.layers.15.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
67
+ "model.layers.15.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
68
+ "model.layers.15.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
69
+ "model.layers.15.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
70
+ "model.layers.15.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
71
+ "model.layers.15.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
72
+ "model.layers.16.input_layernorm.weight": "model-00001-of-00002.safetensors",
73
+ "model.layers.16.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
74
+ "model.layers.16.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
75
+ "model.layers.16.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
76
+ "model.layers.16.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
77
+ "model.layers.16.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
78
+ "model.layers.16.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
79
+ "model.layers.16.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
80
+ "model.layers.17.input_layernorm.weight": "model-00001-of-00002.safetensors",
81
+ "model.layers.17.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
82
+ "model.layers.17.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
83
+ "model.layers.17.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
84
+ "model.layers.17.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
85
+ "model.layers.17.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
86
+ "model.layers.17.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
87
+ "model.layers.17.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
88
+ "model.layers.18.input_layernorm.weight": "model-00001-of-00002.safetensors",
89
+ "model.layers.18.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
90
+ "model.layers.18.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
91
+ "model.layers.18.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
92
+ "model.layers.18.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
93
+ "model.layers.18.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
94
+ "model.layers.18.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
95
+ "model.layers.18.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
96
+ "model.layers.19.input_layernorm.weight": "model-00001-of-00002.safetensors",
97
+ "model.layers.19.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
98
+ "model.layers.19.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
99
+ "model.layers.19.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
100
+ "model.layers.19.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
101
+ "model.layers.19.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
102
+ "model.layers.19.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
103
+ "model.layers.19.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
104
+ "model.layers.2.input_layernorm.weight": "model-00001-of-00002.safetensors",
105
+ "model.layers.2.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
106
+ "model.layers.2.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
107
+ "model.layers.2.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
108
+ "model.layers.2.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
109
+ "model.layers.2.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
110
+ "model.layers.2.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
111
+ "model.layers.2.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
112
+ "model.layers.20.input_layernorm.weight": "model-00001-of-00002.safetensors",
113
+ "model.layers.20.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
114
+ "model.layers.20.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
115
+ "model.layers.20.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
116
+ "model.layers.20.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
117
+ "model.layers.20.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
118
+ "model.layers.20.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
119
+ "model.layers.20.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
120
+ "model.layers.21.input_layernorm.weight": "model-00001-of-00002.safetensors",
121
+ "model.layers.21.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
122
+ "model.layers.21.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
123
+ "model.layers.21.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
124
+ "model.layers.21.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
125
+ "model.layers.21.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
126
+ "model.layers.21.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
127
+ "model.layers.21.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
128
+ "model.layers.22.input_layernorm.weight": "model-00001-of-00002.safetensors",
129
+ "model.layers.22.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
130
+ "model.layers.22.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
131
+ "model.layers.22.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
132
+ "model.layers.22.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
133
+ "model.layers.22.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
134
+ "model.layers.22.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
135
+ "model.layers.22.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
136
+ "model.layers.23.input_layernorm.weight": "model-00001-of-00002.safetensors",
137
+ "model.layers.23.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
138
+ "model.layers.23.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
139
+ "model.layers.23.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
140
+ "model.layers.23.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
141
+ "model.layers.23.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
142
+ "model.layers.23.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
143
+ "model.layers.23.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
144
+ "model.layers.24.input_layernorm.weight": "model-00002-of-00002.safetensors",
145
+ "model.layers.24.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
146
+ "model.layers.24.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
147
+ "model.layers.24.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
148
+ "model.layers.24.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
149
+ "model.layers.24.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
150
+ "model.layers.24.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
151
+ "model.layers.24.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
152
+ "model.layers.25.input_layernorm.weight": "model-00002-of-00002.safetensors",
153
+ "model.layers.25.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
154
+ "model.layers.25.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
155
+ "model.layers.25.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
156
+ "model.layers.25.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
157
+ "model.layers.25.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
158
+ "model.layers.25.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
159
+ "model.layers.25.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
160
+ "model.layers.26.input_layernorm.weight": "model-00002-of-00002.safetensors",
161
+ "model.layers.26.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
162
+ "model.layers.26.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
163
+ "model.layers.26.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
164
+ "model.layers.26.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
165
+ "model.layers.26.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
166
+ "model.layers.26.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
167
+ "model.layers.26.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
168
+ "model.layers.27.input_layernorm.weight": "model-00002-of-00002.safetensors",
169
+ "model.layers.27.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
170
+ "model.layers.27.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
171
+ "model.layers.27.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
172
+ "model.layers.27.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
173
+ "model.layers.27.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
174
+ "model.layers.27.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
175
+ "model.layers.27.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
176
+ "model.layers.28.input_layernorm.weight": "model-00002-of-00002.safetensors",
177
+ "model.layers.28.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
178
+ "model.layers.28.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
179
+ "model.layers.28.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
180
+ "model.layers.28.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
181
+ "model.layers.28.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
182
+ "model.layers.28.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
183
+ "model.layers.28.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
184
+ "model.layers.29.input_layernorm.weight": "model-00002-of-00002.safetensors",
185
+ "model.layers.29.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
186
+ "model.layers.29.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
187
+ "model.layers.29.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
188
+ "model.layers.29.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
189
+ "model.layers.29.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
190
+ "model.layers.29.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
191
+ "model.layers.29.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
192
+ "model.layers.3.input_layernorm.weight": "model-00001-of-00002.safetensors",
193
+ "model.layers.3.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
194
+ "model.layers.3.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
195
+ "model.layers.3.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
196
+ "model.layers.3.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
197
+ "model.layers.3.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
198
+ "model.layers.3.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
199
+ "model.layers.3.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
200
+ "model.layers.30.input_layernorm.weight": "model-00002-of-00002.safetensors",
201
+ "model.layers.30.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
202
+ "model.layers.30.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
203
+ "model.layers.30.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
204
+ "model.layers.30.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
205
+ "model.layers.30.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
206
+ "model.layers.30.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
207
+ "model.layers.30.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
208
+ "model.layers.31.input_layernorm.weight": "model-00002-of-00002.safetensors",
209
+ "model.layers.31.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
210
+ "model.layers.31.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
211
+ "model.layers.31.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
212
+ "model.layers.31.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
213
+ "model.layers.31.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
214
+ "model.layers.31.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
215
+ "model.layers.31.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
216
+ "model.layers.32.input_layernorm.weight": "model-00002-of-00002.safetensors",
217
+ "model.layers.32.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
218
+ "model.layers.32.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
219
+ "model.layers.32.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
220
+ "model.layers.32.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
221
+ "model.layers.32.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
222
+ "model.layers.32.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
223
+ "model.layers.32.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
224
+ "model.layers.33.input_layernorm.weight": "model-00002-of-00002.safetensors",
225
+ "model.layers.33.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
226
+ "model.layers.33.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
227
+ "model.layers.33.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
228
+ "model.layers.33.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
229
+ "model.layers.33.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
230
+ "model.layers.33.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
231
+ "model.layers.33.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
232
+ "model.layers.34.input_layernorm.weight": "model-00002-of-00002.safetensors",
233
+ "model.layers.34.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
234
+ "model.layers.34.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
235
+ "model.layers.34.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
236
+ "model.layers.34.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
237
+ "model.layers.34.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
238
+ "model.layers.34.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
239
+ "model.layers.34.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
240
+ "model.layers.35.input_layernorm.weight": "model-00002-of-00002.safetensors",
241
+ "model.layers.35.mlp.down_proj.weight": "model-00002-of-00002.safetensors",
242
+ "model.layers.35.mlp.gate_proj.weight": "model-00002-of-00002.safetensors",
243
+ "model.layers.35.mlp.up_proj.weight": "model-00002-of-00002.safetensors",
244
+ "model.layers.35.self_attn.k_proj.weight": "model-00002-of-00002.safetensors",
245
+ "model.layers.35.self_attn.o_proj.weight": "model-00002-of-00002.safetensors",
246
+ "model.layers.35.self_attn.q_proj.weight": "model-00002-of-00002.safetensors",
247
+ "model.layers.35.self_attn.v_proj.weight": "model-00002-of-00002.safetensors",
248
+ "model.layers.4.input_layernorm.weight": "model-00001-of-00002.safetensors",
249
+ "model.layers.4.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
250
+ "model.layers.4.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
251
+ "model.layers.4.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
252
+ "model.layers.4.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
253
+ "model.layers.4.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
254
+ "model.layers.4.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
255
+ "model.layers.4.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
256
+ "model.layers.5.input_layernorm.weight": "model-00001-of-00002.safetensors",
257
+ "model.layers.5.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
258
+ "model.layers.5.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
259
+ "model.layers.5.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
260
+ "model.layers.5.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
261
+ "model.layers.5.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
262
+ "model.layers.5.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
263
+ "model.layers.5.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
264
+ "model.layers.6.input_layernorm.weight": "model-00001-of-00002.safetensors",
265
+ "model.layers.6.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
266
+ "model.layers.6.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
267
+ "model.layers.6.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
268
+ "model.layers.6.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
269
+ "model.layers.6.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
270
+ "model.layers.6.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
271
+ "model.layers.6.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
272
+ "model.layers.7.input_layernorm.weight": "model-00001-of-00002.safetensors",
273
+ "model.layers.7.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
274
+ "model.layers.7.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
275
+ "model.layers.7.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
276
+ "model.layers.7.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
277
+ "model.layers.7.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
278
+ "model.layers.7.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
279
+ "model.layers.7.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
280
+ "model.layers.8.input_layernorm.weight": "model-00001-of-00002.safetensors",
281
+ "model.layers.8.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
282
+ "model.layers.8.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
283
+ "model.layers.8.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
284
+ "model.layers.8.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
285
+ "model.layers.8.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
286
+ "model.layers.8.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
287
+ "model.layers.8.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
288
+ "model.layers.9.input_layernorm.weight": "model-00001-of-00002.safetensors",
289
+ "model.layers.9.mlp.down_proj.weight": "model-00001-of-00002.safetensors",
290
+ "model.layers.9.mlp.gate_proj.weight": "model-00001-of-00002.safetensors",
291
+ "model.layers.9.mlp.up_proj.weight": "model-00001-of-00002.safetensors",
292
+ "model.layers.9.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
293
+ "model.layers.9.self_attn.o_proj.weight": "model-00001-of-00002.safetensors",
294
+ "model.layers.9.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
295
+ "model.layers.9.self_attn.v_proj.weight": "model-00001-of-00002.safetensors",
296
+ "model.norm.weight": "model-00002-of-00002.safetensors",
297
+ "stop_predictor.0.bias": "model-00002-of-00002.safetensors",
298
+ "stop_predictor.0.weight": "model-00002-of-00002.safetensors",
299
+ "stop_predictor.1.bias": "model-00002-of-00002.safetensors",
300
+ "stop_predictor.1.weight": "model-00002-of-00002.safetensors",
301
+ "stop_predictor.3.bias": "model-00002-of-00002.safetensors",
302
+ "stop_predictor.3.weight": "model-00002-of-00002.safetensors"
303
+ }
304
+ }
modeling_rumik_oss.py ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """rumik-oss 1: text -> flattened Mimi codec tokens.
2
+
3
+ This model produces *audio tokens*, not waveforms. Decoding them to audio is
4
+ the caller's job and needs the Mimi codec (shipped in ``codec/``)::
5
+
6
+ ids = model.generate_audio(**inputs) # prompt + audio
7
+ tokens = ids[0].tolist()[inputs.input_ids.shape[1]:] # drop the prompt
8
+ codes = model.audio_tokens_to_codes(tokens) # [1, 8, T] for Mimi
9
+ wav = mimi.decode(codes).audio_values # your call
10
+ """
11
+ from __future__ import annotations
12
+
13
+ import torch
14
+ from torch import nn
15
+ from transformers.models.cohere2.modeling_cohere2 import Cohere2ForCausalLM
16
+
17
+ from .configuration_rumik_oss import RumikOSSConfig
18
+
19
+
20
+ class RumikOSSForCausalLM(Cohere2ForCausalLM):
21
+ config_class = RumikOSSConfig
22
+
23
+ def __init__(self, config):
24
+ super().__init__(config)
25
+ hidden = int(config.hidden_size)
26
+ self.stop_predictor = nn.Sequential(
27
+ nn.LayerNorm(hidden),
28
+ nn.Linear(hidden, max(64, hidden // 4)),
29
+ nn.GELU(),
30
+ nn.Linear(max(64, hidden // 4), 1),
31
+ )
32
+
33
+ # ---- audio vocabulary -------------------------------------------------
34
+ def audio_token_ids(self, device=None) -> torch.Tensor:
35
+ """Every id the model may legally emit inside an <audio> span.
36
+
37
+ Derived from the config, so callers no longer have to scan the
38
+ tokenizer vocabulary for ``<code>_<quantizer>`` tokens.
39
+ """
40
+ c = self.config
41
+ if c.first_unit_id is None:
42
+ raise ValueError(
43
+ "config.first_unit_id is unset; pass allowed_ids explicitly or "
44
+ "add first_unit_id/last_unit_id to config.json.")
45
+ ids = torch.arange(int(c.first_unit_id), int(c.last_unit_id) + 1, dtype=torch.long)
46
+ end = torch.tensor([int(c.audio_end_token_id)], dtype=torch.long)
47
+ return torch.cat((ids, end)).to(device if device is not None else self.device)
48
+
49
+ def audio_tokens_to_codes(self, token_ids) -> torch.Tensor:
50
+ """Generated ids -> ``[1, num_quantizers, num_frames]`` codec codes.
51
+
52
+ Shaped for ``MimiModel.decode``. Purely arithmetic -- no tokenizer, no
53
+ codec, no audio. Pass only the generated tail, not the prompt.
54
+
55
+ A token that breaks the round robin does not end the audio: the
56
+ partial frame is dropped and the next complete frame is picked up
57
+ again, so one bad token costs one frame rather than the rest of the
58
+ clip. ``</audio>`` ends it.
59
+ """
60
+ c = self.config
61
+ first, last, Q = int(c.first_unit_id), int(c.last_unit_id), int(c.num_quantizers)
62
+ end_id = int(c.audio_end_token_id)
63
+ if torch.is_tensor(token_ids):
64
+ token_ids = token_ids.flatten().tolist()
65
+
66
+ frames: list[list[int]] = []
67
+ frame: list[int] = []
68
+ for tid in (int(t) for t in token_ids):
69
+ if tid == end_id:
70
+ break
71
+ if not first <= tid <= last:
72
+ frame = [] # stray token: resync
73
+ continue
74
+ code, q = divmod(tid - first, Q)
75
+ if q == len(frame):
76
+ frame.append(code)
77
+ if len(frame) == Q:
78
+ frames.append(frame)
79
+ frame = []
80
+ else: # off the round robin
81
+ frame = [code] if q == 0 else []
82
+ if not frames:
83
+ raise ValueError(
84
+ f"no complete codec frame in {len(token_ids)} tokens "
85
+ f"(need at least {Q})")
86
+ return torch.tensor(frames, dtype=torch.long).T.unsqueeze(0)
87
+
88
+ # ---- generation -------------------------------------------------------
89
+ @staticmethod
90
+ def _constrained_sample(scores, do_sample, temperature, top_k):
91
+ # NB: deliberately not named `_sample`. `GenerationMixin._sample` is the
92
+ # method `generate()` dispatches to, and shadowing it makes every call
93
+ # to `generate()` fail with a TypeError on `logits_processor`.
94
+ if not do_sample:
95
+ return scores.argmax(dim=-1, keepdim=True)
96
+ scores = scores / max(float(temperature), 1e-5)
97
+ if int(top_k) > 0:
98
+ k = min(int(top_k), scores.shape[-1])
99
+ cutoff = torch.topk(scores, k, dim=-1).values[:, -1:]
100
+ scores = scores.masked_fill(scores < cutoff, torch.finfo(scores.dtype).min)
101
+ return torch.multinomial(torch.softmax(scores.float(), dim=-1), 1)
102
+
103
+ @torch.inference_mode()
104
+ def generate_audio(
105
+ self,
106
+ input_ids,
107
+ attention_mask,
108
+ allowed_ids=None,
109
+ max_new_tokens=2048,
110
+ min_new_tokens=8,
111
+ temperature=0.8,
112
+ top_k=30,
113
+ do_sample=True,
114
+ ):
115
+ """Autoregressively emit audio tokens, ending at ``</audio>``.
116
+
117
+ ``allowed_ids`` defaults to the audio vocabulary from the config.
118
+ """
119
+ if allowed_ids is None:
120
+ allowed_ids = self.audio_token_ids(device=input_ids.device)
121
+ out = self(
122
+ input_ids=input_ids,
123
+ attention_mask=attention_mask,
124
+ use_cache=True,
125
+ output_hidden_states=True,
126
+ return_dict=True,
127
+ )
128
+ emitted = input_ids
129
+ cache = out.past_key_values
130
+ scores = out.logits[:, -1, :]
131
+ hidden = out.hidden_states[-1][:, -1:, :]
132
+ mask = attention_mask
133
+ allowed_ids = allowed_ids.to(scores.device)
134
+ audio_end_id = int(self.config.audio_end_token_id)
135
+ for step in range(int(max_new_tokens)):
136
+ if step >= int(min_new_tokens):
137
+ stop = torch.sigmoid(self.stop_predictor(hidden).squeeze(-1))
138
+ if bool((stop > 0.5).all()):
139
+ eos = input_ids.new_full((input_ids.shape[0], 1), audio_end_id)
140
+ return torch.cat((emitted, eos), dim=1)
141
+ restricted = torch.full_like(scores, torch.finfo(scores.dtype).min)
142
+ restricted.index_copy_(1, allowed_ids, scores.index_select(1, allowed_ids))
143
+ if step < int(min_new_tokens):
144
+ restricted[:, audio_end_id] = torch.finfo(scores.dtype).min
145
+ token = self._constrained_sample(restricted, do_sample, temperature, top_k)
146
+ emitted = torch.cat((emitted, token), dim=1)
147
+ if bool((token == audio_end_id).all()):
148
+ break
149
+ mask = torch.cat((mask, torch.ones_like(token)), dim=1)
150
+ out = self(
151
+ input_ids=token,
152
+ attention_mask=mask,
153
+ past_key_values=cache,
154
+ use_cache=True,
155
+ output_hidden_states=True,
156
+ return_dict=True,
157
+ )
158
+ cache = out.past_key_values
159
+ scores = out.logits[:, -1, :]
160
+ hidden = out.hidden_states[-1][:, -1:, :]
161
+ return emitted
requirements-server.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Optional web UI (server.py). Install on top of requirements.txt.
2
+ -r requirements.txt
3
+ fastapi>=0.115
4
+ uvicorn>=0.30
5
+ pydantic>=2.7
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Model inference: generating audio tokens.
2
+ torch>=2.4
3
+ transformers>=4.57,<6
4
+ huggingface_hub>=0.36
5
+ accelerate>=1.0
6
+ safetensors>=0.6,<1
7
+ soundfile>=0.12
samples/aisha.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a8cffe7c944f8c5ffb9c55aa531703415cd90ee973a3f7cd5b7954237ffd7373
3
+ size 272684
samples/ira-professional-steady.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4b7497b0feb0a6d740a2c43ae6a19e2f5a0f9544e60df7695175380c71f4b74c
3
+ size 261164
samples/ira-sad-slow.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:76b2afb51895845b60b245d1d29a76434127bcddf63610e6b96a7ad12439edc9
3
+ size 272684
samples/ira.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:50dd1eba178af1c81777e94b6cffc706d41b7e730fa4d859ea82f8d18f275c2c
3
+ size 318764
samples/showcase/01-the-second-cup.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d9d31a7adf00f7cf72fa0ca3285fe850c4db9728c66455c483bb6dc3cedd988c
3
+ size 526124
samples/showcase/02-one-last-message.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5d35f12fd833148aff430fe4bdaadd4a92caaf1455e747f2f52a5fede877e391
3
+ size 710444
samples/showcase/03-we-made-it.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:924f7c9f65914ab972a81990c0363dcf8f28a565eb325d3c0ff4131ace2f79f6
3
+ size 568364
samples/showcase/04-a-broken-promise.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:365acb53fdd63321dff3b720449812e9963bbb96b89fdb712c78a35afbd6a04e
3
+ size 430124
samples/showcase/05-ready-for-departure.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1c2d19e7d21fa780de36d51147a2bb981552ba34ce96d752e1c128073ae01c32
3
+ size 618284
samples/showcase/06-home-again.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f9ddc887bcfee497e51cc86aa05e689d1f9678e875129a8ba93f45eeffd70887
3
+ size 606764
samples/showcase/07-a-place-to-read.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5957a739b5bbdaaa91e68341fde47b8839b85455248dd0348740e9db38f61738
3
+ size 691244