Speech to text · Tunisian

A 1.7B model that transcribes Tunisian Derja at 23% word error. Small enough to run next to the audio, accurate enough to follow a conversation.

Live in beta

TUNIFRA · 701 CLIPSNOBODY TRAINED ON THIS SET

Character error rate, the number that counts when a language has no fixed spelling

Fennec 1.7Bours, v3a9%
SalahZa mixerpublished25.8%
LinTO ASRpublished32.7%

OursBest published Tunisian ASR

23%

word error, which is the rate at which you can talk to it and be understood

9%

character error on clips nobody in the comparison had ever seen

1.7B

parameters, small enough to run next to the audio instead of far from it

24,745

segments measured, and not one of them came back with punctuation in it

A table is easy to argue with. Audio will be harder.

The clips are still being cut, so the players below are empty and say so. Nothing on this page stands in for a result we have not published. Until they land there is a better test anyway: say something into the playground and read back what the model heard, on audio it has never met.

FENNEC 1.7B · CLIP PENDING
Video

Fennec transcribing live

Native Tunisian speech going in, text coming out, with the French and the Arabic mixed together the way people actually talk.
TV speech

Studio debate, two speakers over each other

Clip coming
Code-switched

Derja and French in the same sentence

Clip coming
Phone audio

Narrowband, one bar of signal

Clip coming

We publish the whole table, not the flattering row.

One harness, one test set released after every model here was trained, no home advantage for anybody.

SystemTuniFra WER / CERHuman holdout WER / CERTunSwitch code-switched WER
Fennec 1.7B (v3a)23% / 9%not yetnot yet
SalahZa mixer62.9% / 25.8%61.7% / 28.5%29.7%
LinTO ASR63.2% / 32.7%25.8%*n/a
SalahZa TO (Arabic only)n/a62.7% / 32.6%cannot

Our own two empty cells are empty because the current model has not been scored on those sets yet, not because the result was poor. An earlier checkpoint of the same 1.7B model scored 36.6% / 15.0% on our human holdout and 29.3% word error code-switched, which was the best either column had seen; both are pending a rerun and neither is printed as if it were today's.

*That 25.8% belongs to a holdout drawn from LinTO's own training corpus, which is memorization rather than recognition. On neutral ground it is the weakest system here. Word error runs high for everyone on TuniFra because its references transcribe every stutter and false start, which is why character error sits beside it.

What we can tell you today.

Parameters
1.7B
Version
v3a
Architecture
not yet
Languages
Tunisian Arabic, French code-switching
Language tag
aebISO 639-3, Tunisian Arabic
Audio in
Any container, any rateresampled upstream to 16 kHz mono
Max upload
8 MiB per requestthe API's limit, not the model's
Output
Arabic script, verbatim, no punctuation
Runs on
vLLM, behind an OpenAI-compatible audio endpoint
Real-time factor
not yet
Latency
not yet
Licence
not yet
Status
Live in beta

The rows without values are unsettled rather than withheld. Nobody has published an architecture or a licence for Fennec, and nobody has timed it: there is no real-time factor and no latency figure because neither has been measured, not because they are unflattering. A value typed in to complete the table would be worth less to you than the gap.

A transcript, and nothing done to it afterwards.

01 · Punctuation

There is none, and none is missing

Fennec emits no full stops, no commas and no question marks. Not sparse punctuation, none: across 24,745 measured segments, zero contain any. Derja is transcribed as it was spoken, and punctuating it would be an editorial act the model has no basis for. A check that treats an unpunctuated transcript as truncated will fire on every response you ever get.

02 · Verbatim

Nothing in the middle edits the text

No normalisation, no spell-correction, no collapsed whitespace, no trimming, between the model and your response. Derja has no standard spelling, so a correction would be an opinion, and you would have no way to tell it apart from what was actually said. Fold the text your own way on your side, where you set the rules.

03 · Tunizi

The digits are letters, not typos

In Latin-script Derja, 3 stands for the letter ع, 7 for ح and 9 for ق. They carry meaning: 3aslema is a greeting, and the same word with the digit stripped is a different string, as 9alb and alb are different words. A spell-checker or a digit-stripping regex placed after the model will quietly destroy the word.

There was nothing to license, so it was collected.

Tunisian TV and creator channels, pulled apart by source separation and diarization, then labelled by four systems that have to agree before a transcript is admitted, with human-verified clips setting every threshold. Fennec trains on what comes out the other end. The engine is written up in full on Hannibal's page, since it feeds both models.

Put it in your product.

POST /api/v1/audio/transcriptions · "model": "fennec"

Fennec has shipped: no waitlist, no access review. Sign in and create a key, shown once and stored hashed, and the first request is a copy-paste from the docs. Free while the beta lasts, 60 requests a minute.

No key yet? You can still transcribe something in the playground.

What Fennec needs next.

It is serving. What it does not have is measurement on harder audio, and the harder audio to measure it on.

Audio
Phone calls, field recordings, southern accents. If you have Tunisian audio sitting unused, that is a partnership on its own.
Compute
The evaluation sweeps that turn the empty cells above into numbers, and the next version after them. A labeling sweep is about 150 GPU-hours.
Design partners
Teams with a real transcription workload: call centres, media archives, accessibility. Tell us where it breaks and that is the next training set.

What you're about to ask.

Why lead with word error if character error is the lower number?

Because word error is the one that tells you whether you can use it. At this rate you can talk to it and be understood. Character error is the fairer measure for a language with no fixed spelling, since the same word is legitimately written three ways and word error punishes a model for being right in the wrong alphabet. Both are published here, on the same test set.

Which model do I call for transcription?

fennec. Hannibal served that endpoint while Fennec was in training and no longer does, so a request naming hannibal there is refused rather than answered. The refusal is the point: the alternative was handing back Fennec's transcript under another model's name.

How would we check any of this?

Take the harness. The evaluation code, the full methodology and the per-clip outputs are yours on request. TuniFra is the academic test set from Choux et al., ArabicNLP 2025, released after training, so no system in the table had seen it.

What stops a big lab from doing this next quarter?

The data. There is no Tunisian corpus to license, at any price. The audio was collected, then the four-voter labeling stack and the human calibration set were built to decide what is good enough to train on. A lab starting today starts at the beginning of the pipeline, not the beginning of the model.

Do I get timestamps or a duration?

Not yet. The response carries task, language and text, and the docs list no field the endpoint does not return. Billing is by seconds of audio, which comes back in usage.

Get an API key