Grai · The story

Why Grai exists

Because Romanian is not a market. And because a voice should not have to leave home to be understood.

The problem

Romanian is commercially invisible

This is not a complaint, it is a market observation. Of six major voice AI labs, five do not support Romanian at all. Those that do treat it as the thirtieth language on a list — trained on little, tested on even less, with model cards that admit accuracy drops on low-resource languages.

The reason is arithmetic. Twenty-some million speakers do not justify a separate training effort when the same budget brings ten times more users in Spanish. Romanian is not ignored out of ill will. It is ignored because it does not pay.

Anyone who has tried sees the practical consequence: a voice agent that understands English perfectly stumbles over „douăzeci și trei de mii patru sute optzeci de lei" (twenty-three thousand four hundred eighty lei), cuts the caller off mid-sentence because it misread the intonation, and writes „tara" where the caller said „țara" — in Romanian, the missing diacritic turns "the country" into a different word.

A second problem, less discussed

Everything good in synthetic voice today runs in the cloud. That means your caller's voice leaves your server — to a vendor, in another country, under another legal regime. For an online shop that is a formality. For a medical practice, a law firm or a public institution, it is the very reason it cannot be used.

The bet

Audio stays home. Only text goes out.

This is not a feature on a list. It is the position everything else is built from.

Speech recognition and speech synthesis run on your machine. In the configuration we measured: synthesis on the CPU, recognition on the integrated GPU of a Mac M3 Max, with no dedicated graphics card. Across the boundary, to the language model, goes text. Never sound. And if you have the hardware to keep the language model local as well, nothing leaves at all.

The consequences that matter:

What it actually is

The model is not the value. The layer between the models is.

Grai is not a model trained from scratch, and we have never claimed it is. Speech recognition is borrowed. Speech synthesis is borrowed. The language model belongs to someone else. All three can be swapped in a working day — and we have swapped them, several times.

What is ours is what happens between them. And that is also the part you cannot buy, because it is not sold separately:

Knowing when you have finished speaking

Almost all voice agents use a timer: after so many milliseconds of silence, they assume you are done. It is a timer, not a detector — and it cuts people off mid-sentence. We measure the slope of the intonation. It falls firmly: you are done. It stays up: you have more to say.

Remembering only what you heard

Synthesis runs faster than playback. When you interrupt, the buffer still holds sound that never reached your ear. Without a correction, the model believes it said everything — and next time says "as I already told you" about something you never heard.

Working while it talks

When they need information from outside, most agents go silent and wait. Grai forks: it says a short bridge phrase, sends the work to another thread, and stays interruptible. If the tool is slower than the conversation, the result waits for you.

Not dying with the connection

With almost every vendor, the conversation is tied to the connection. Close the tab — it is gone. With us, the agent lives outside the connection: the session survives a page reload, a disconnect and even a server restart.

Saying numbers like a person

The model writes "23480". A person says "twenty-three thousand four hundred eighty". A phone number is read digit by digit; a time is read as a time. Three different rules, chosen by context, in both directions.

Hearing how, not just what

We measure rhythm, pauses, energy and intonation slope on the waveform, relative to that person's own baseline, not in absolute terms. This is observable vocal behavior, not emotion. Spectral analysis exists in the code and is off by default on the real-time path.

Each of the above is a piece of code with its own tests. As of 31 August 2026, the system had 16,082 lines, of which 4,112 were tests. The architecture, in detail →

How the difference sounds

One example, start to finish

Someone calls a medical practice and says: "Hello, I'd like to book an appointment with Dr. Popescu for… hold on a second… for Thursday, if possible."

The momentA typical agentGrai
At "for…" The silence passes the fixed threshold. It assumes you are done and starts answering over you. The intonation stayed up. It waits.
At "hold on a second" Treats the fragment as a new question and answers what you had not yet asked. Recognizes the unfinished sentence and joins it to what follows.
Checking the calendar Goes silent for a few seconds. Silence in a voice conversation feels like a dropped call. Says "checking now" and works in parallel. You can talk over it.
You interrupt it It stops, but the history keeps everything it generated. Later: "as I already told you". Trims the history to the milliseconds that actually left the speaker.
Confirming the time "Zero nine zero zero hours." "Nine o'clock."
The internet drops The conversation dies. You start over. You reconnect, and it continues where it left off.

None of the rows above depend on recognition accuracy — the part where we are still behind. They all come from the layer between the models, which is exactly the part that is ours.

Who it is for

Three situations where this is the only option

Where the voice is not allowed to leave

Medical practices, law firms, public institutions, accounting. It is not a technical preference — it is the legal condition for using anything at all. In the Republic of Moldova, the voice of an identifiable person is biometric data under Law No. 195/2024 on the protection of personal data.

Where volume makes per-minute pricing impossible

Call centers, support lines, screening. At thousands of minutes a month, the difference between "free to run" and "$0.40–1.20 per hour" decides whether the project exists.

Where Romanian is the working language

Not as an option in a menu, but as the language the whole conversation happens in — with diacritics, with numbers spoken correctly, with a Moldovan accent, and with Russian alongside, switchable within the same call.

Where it is going

What makes us hard to replace over time

The layer between the models is a lead of a few months. Someone can rebuild it. What is not easy to rebuild is data.

Spoken Romanian, recorded, with clean rights, is the scarce resource. The largest clean corpus in existence is under a license that forbids even derivatives. The second largest is non-commercial. What is left with a clean commercial license: ~173 hours transcribed by humans, plus ~12,400 hours automatically pseudo-labeled (Granary) — for an entire language.

That is why the plan is not "more features". It is, in this order:

Now

Streaming Romanian speech recognition

An open Romanian model (SpeD, UPB) scores 6.70% WER offline on the same 200 FLEURS utterances where we score 26.15% streaming. The plan: distill it into a small student that runs in streaming mode. We will publish the cost after the first runs.

Next

A Romanian end-of-turn detector

The reference model covers 23 languages and not Romanian, and its authors are no longer adding languages. We would be the first.

Blocked on data, not money

Our own voice

Today's speech synthesis (Supertonic) was archived upstream on 23 July 2026; our own voice starts from an Apache-licensed base. This is where we need help — we are looking for Romanian recordings.

The order is not by impact, but by how each step makes the next one cheaper. The end-of-turn detector depends on recognition: checking that a cut falls on a word boundary is done by transcribing the fragment. With weak recognition, we would build the turn-taking dataset with a crooked ruler.

How we work

The rule behind everything you read here

This rule is more than hygiene. In a field where everyone publishes "under 300 ms" without saying where the stopwatch starts, being verifiable is a commercial position, not just a moral one. The study on how it is measured →

Want the figures, not the story?

All measurements, with the methodology and reproduction commands.