Status: pre-alpha. Open, local, MIT; no paid API in the default path. No model is verified yet and none is a default (calls need allow_unverified=True). The number-word modules contributed by outside volunteers have not been reviewed by fluent speakers. No claim of being better than any other product is made; there is no such benchmark.
[0.2.0] - 2026-10-30
Status
- Still pre-alpha. Every model is
unverifiedand none is a default. The opt-in number-word normalizers came from an outside contributor, cite CLDR and language references, and have not been reviewed by fluent speakers; they change no benchmark result unless enabled. The energy gate is off by default: at its default floor it passed only 14 of 30 English clips, and Whisper wrote filler text on every silent or noisy clip (seebenchmarks/voice/README.md). The test suite was also run on Python 3.13 by a team member (370 passed); the package classifiers are unchanged.
Added
ragleap_voice.bench: opt-in Malay (numbers="ms") cardinal normalization, versioned as1+numbers-ms.1, for standalone standard forms fromkosong/sifarthrough 999,999,999,999,999,999 (below 10^18). CLDR Malay RBNF suppliesbelas,puluh,ratus, implicitseribu/sejuta, and theribu,juta,bilion,trilion, andkuadrilionscales. Scale groups must descend; malformed, repeated, zero-coefficient, and out-of-range phrases are kept intact. Explicitsatu ribuis accepted per DBP's formal usage advice. DBP references also verify comma thousands grouping, decimal points, zero (sifar), and the value ofkuadrilion. DBP dictionary entries record both long- and short-scale definitions ofbilion/trilion; this implementation follows current CLDR Malay spellout, DBP school-mathematics definitions (bilion=10^9;trilion=10^12), and DBP's short-scale numeric example. Complete comma-grouped numeric tokens are normalized, while periods between digits are retained as decimal points. Adjacent single-word cardinals remain separate; number+fraction, ordinal, date, negative, and currency constructions are protected from partial conversion. Ordinals, fractions, dates, negative cardinals, currency, spoken decimals, dialect/inflected variants, and values at or above 10^18 are outside scope. Common cardinal homonyms such assatuin prose can still normalize; no fluent Malay speaker reviewed this implementation. References: Unicode CLDR Malay cardinal RBNF, CLDR number-formatting specification, DBP Pedoman Umum Ejaan Bahasa Melayu, DBP PRPM mathematical glossary entries for bilion/trilion, DBP PRPM definition of sifar, and DBP PRPM definitions and short-scale clarification for bilion.ragleap_voice.bench: opt-in Hindi (numbers="hi") cardinal normalization, versioned as1+numbers-hi.1, for Devanagari spellings from zero through 99 खरब (9,999,999,999,999). The lexical table follows Unicode CLDR's Hindi cardinal RBNF, accepting spelling variants attested in BIS or the grammar reference, including छै, ब्यालीस, उन्यासी, इक्यानवे, and पचानवे; composition uses descending सौ, हज़ार/हजार, लाख, करोड़, अरब, and खरब scales. Repeated, increasing, zero-coefficient, and out-of-range scale phrases remain unchanged; Hindi conjunction और and source-documented fraction markers keep unsupported phrases intact. Ordinals, fractions, negatives, spoken decimals, dates, currency, collective/aggregate forms, transliterations, and values using larger scales are excluded. The parser is context-free, so common number words such as एक in ordinary prose may still normalize. Hindi numeric punctuation uses Indian comma grouping and a decimal point; only complete valid grouped numbers are de-grouped. References: CLDR Hindi cardinal RBNF, CLDR Hindi locale number patterns, BIS IS 16500:2012, Devnagari Script and Hindi Spellings, Central Hindi Training Institute Hindi coursebook, and Hindi Cardinal Numerals grammar reference, plus its Fractional Numerals reference. CLDR, BIS, and the Hindi grammar reference differ on some number spellings; only alternatives directly attested in these sources are accepted.ragleap_voice.bench: opt-in Brazilian Portuguese (numbers="pt-BR") cardinal normalization, versioned as1+numbers-pt-BR.1, supporting standard forms from zero through 999,999,999,999,999,999 and Brazilian short-scale names throughquadrilhão, including the dictionary-verified variantquatrilhão(pluralquatrilhões). CLDR's Portuguese RBNF supplies cardinal spellings, agreement variants and the scale sequence; the Brazilian Portuguese locale file has no number-rule overrides. Composition, thousands periods and decimal commas were cross-checked against the Câmara Municipal de Belo Horizonte's number-writing guide and FUNAG's Manual de Revisão. The Academia Brasileira de Letras lists bothquatorzeandcatorze; both map to 14. Malformed scale phrases are preserved, adjacent standalone cardinals remain separate, and common fraction/ordinal markers prevent partial numerator conversion. Ordinals, fractions, spoken decimals, dates, currency-specific handling, dialect forms, negatives, and values at or above 10^18 are excluded. Agreement and number-versus-prose use are context-sensitive, so common cardinals in ordinary text may still normalize. Complete period-grouped numbers are normalized only when the entire number-like token is valid; decimal commas are retained and malformed period/comma sequences are not partially combined. No external word list or runtime dependency is added. References: CLDR Portuguese RBNF, CLDR pt_BR locale data, CLDR Portuguese number-format chart, Câmara Municipal de Belo Horizonte number guide, FUNAG Manual de Revisão, “Números”, and Academia Brasileira de Letras Formulário Ortográfico, the Michaelis and Aulete dictionary entries forquatrilhão, and a USP linguistics paper on Portuguese fractions.ragleap_voice.bench: opt-in Indonesian (numbers="id") cardinal normalization, versioned as1+numbers-id.1, for standard standalone forms from zero through 999 triliun. Composition and scale names were checked against Unicode CLDR's Indonesian RBNF data, Tata Bahasa Baku Bahasa Indonesia, and Sneddon's Indonesian Reference Grammar. CLDR's Indonesian locale data defines periods for grouping and commas for decimals. An older official 2000 terminology guide assignsbiliundifferently, so that ambiguous scale and forms abovetriliunare excluded; the current CLDR rules and Tata Bahasa Baku agree onmiliar(10^9) andtriliun(10^12). Malformed scale sequences are preserved and adjacent standalone cardinals remain separate, including when joined bydan. Fraction markers are recognized compositionally asper-orseper-plus a supported single-word cardinal denominator, keeping the complete phrase outside cardinal conversion; EYD V documents theper-denominator convention and examples includingtiga perempat,dua persepuluh, andseperenam belas. Ordinals, fractions, dates, currency, digit-by-digitkosong, and regional or older spellings are excluded; context-free matches such as ordinary-prosesaturemain possible. Indonesian grouped numbers validate the full number-like token, including the comma-decimal portion, before removing periods; Italian period handling remains separately versioned asnumbers-it.2. Defaults and other language modes are unchanged; no external word list is bundled at runtime.ragleap_voice.bench: opt-in Italian (numbers="it") cardinal normalization, versioned as1+numbers-it.2to distinguish the corrected behavior from the original1+numbers-it.1release. Supports standard forms from zero through999,999,999,999,999,999, including closed compounds through 999,999 and long-scale nouns throughbiliardo(10^15). Spellings and composition were checked against Unicode CLDR's Italian RBNF data, CLDR's Italian decimal and grouping symbols, Treccani's cardinal numeral guidance, Accademia della Crusca's spelling guidance, and the University of Messina's DICO guidance on numeral forms and number composition. Treccani confirmsbilioneas 10^12 and biliardo as 10^15; the Crusca source describes Italy's long scale.trilioneand larger scales, ordinals, dates, currency, and nonstandard/dialect forms are excluded; adjacent standalone numbers remain separate, decimal commas are retained, and complete period groups are normalized as thousands separators. Defaults and other language modes are unchanged; no external word list is bundled at runtime.ragleap_voice.bench: opt-in German (numbers="de") cardinal-number normalization, versioned as1+numbers-de.1. Standard standalone forms through Billiarde (10^15), compounds below one million, and German long-scale groupings are checked against CLDR's German RBNF rules and Duden's large-number spelling guidance. Malformed scale sequences are preserved. Defaults and other language paths are unchanged; no external word list is bundled at runtime.ragleap_voice.bench: opt-in Spanish (numbers="es") cardinal-number normalization, versioned as1+numbers-es.1. Standalone cardinal forms and combinations are checked against the RAE's cardinal-numeral reference, definitions of millardo, billón, trillón and cuatrillón, and CLDR's Spanish RBNF data. The general Spanish long scale is supported; the US short-scale variant is outside scope. Repeated or increasing scale sequences are preserved, adjacent standalone numerals are normalized separately, and Spanish decimal commas are not removed as thousands separators. Defaults and the English and Turkish paths are unchanged; no external word list is bundled at runtime.transcribe()adds a note when the whole output equals a filler phrase Whisper wrote for silence and noise in the gate benchmark ("thank you", "thanks for watching", "you"), or when the output is empty. A note only: the text is never changed. The list is short, English only and not a general detector of invented text.- Energy gate for
transcribe()(gate="off"by default, or"energy", withgate_options): when no 20 ms frame is speech-like the engine is not run and the result is empty text with a note giving the levels. Standard library only. The thresholds (floor -46.8 dBFS from the older voice channel, 30 dB relative, 5 frames) are unmeasured starting points, a level gate cannot tell loud noise from speech, and no protection against invented text is claimed until a benchmark exists. - Audio helpers without
audioop(ragleap_voice.audio, standard library only, not exported yet): mu-law decode and encode, 20 ms framing, RMS and peak in dBFS, gain and level normalisation, 2:1 resamplers. The mu-law encoder is not verified against the G.711 standard (it differs from audioop and from ffmpeg by one code on 0.6% and 1.3% of inputs); A-law is not implemented; the resamplers' effect on recognition accuracy is not measured. ragleap_voice.bench: opt-in Turkish ordinal normalization for standalone and composed number words, plus standard digit-plus-ordinal-suffix spellings. Supports bothkatrilyoncuandkatrilyonuncu. The Turkish normalizer version is now1+numbers-tr.2; defaults and the English path are unchanged. TDK's number spelling guidance covers ordinal writing conventions and digit suffixes; lexical examples are authored for the tests and cross-checked against Turkish references.
Install: pip install ragleap-voice==0.2.0 (engines are optional extras, e.g. ragleap-voice[whisper]).
Package: https://pypi.org/project/ragleap-voice/0.2.0/