Grai · Features

All features

The full inventory, with the measured figure next to each item. And, at the end, what does not exist yet.

Listening

What happens while you speak

Streaming speech recognition

Partial text as you say the words, with state kept between chunks. It does not re-transcribe from scratch on every chunk. Partial text arrives with the delay of the 1120 ms chunk (~1.1 s); after you stop talking, the flush takes 92 ms.

92 ms p50 after you stop · 13.8× real time (M3 Max GPU)

Turn-taking decision from prosody

The pitch slope over the last 600 ms decides whether you have finished. A firm fall: yes. Flat or rising: no. At a 560 ms wait, pauses cut wrongly (TOR, lower is better) drop from 69.4% to 52.0% — measured on CANDOR, in English, 80 clips, 98 pauses, offline replay.

TOR 69.4% → 52.0% · 0.42 ms per decision (M3 Max)

Acknowledgements don't interrupt

“Mhm”, “da” (yes), “aha” don't stop it. It tells four cases apart: short or long, acknowledgement or taking the turn.

Broken sentences, stitched back

You stop mid-sentence and carry on — the continuation is not treated as a new question. If it had already started answering, that answer is cancelled.

2.5 s window

Higher threshold for dictation

When you dictate numbers, a code or an address, it waits longer — so it doesn't cut you off between “șapte” and “sute” (seven… hundred).

Calibrated to your pace

The threshold adjusts to how fast you speak, measured in syllables per second.

Echo cancellation

Removes its own voice from the microphone, so the microphone can stay open on speakers, not only on headphones.

15.7 dB ERLE, measured on signal; not yet validated on real speakers

Analysis beyond words

Pace, pitch, energy, hesitation, whisper — all normalized against your own baseline, not in absolute terms.

1.9 ms per turn

Numbers from speech

“Douăzeci și trei de mii patru sute optzeci” (twenty-three thousand four hundred eighty) becomes 23480 before it reaches the model. Times, dates, amounts, codes.

98 tests

Hot language switching

Romanian and Russian, switched during the conversation, without reconnecting. Speech recognition, speech synthesis and instructions change together.

Speaking

What happens while it speaks

Streaming speech synthesis

Starts speaking from the first sentence, not after the whole answer has been generated. The first chunk is deliberately kept short.

305 ms p50 to the first synthesized sound (n=17)

Barge-in at any time

You talk over it and it goes quiet. Everything in the queue is dropped.

1–3 ms

Correct memory after barge-in

The history is cut at the number of milliseconds that actually came out of the speaker, not at what was generated. Otherwise it would say “as I already told you” about something you never heard.

Ten voices

The same voice speaks both languages. One voice per agent, chosen in the configuration.

Numbers to speech

23480 becomes “douăzeci și trei de mii patru sute optzeci”; 069123456 is read digit by digit; 09:00 becomes “ora nouă” (nine o'clock). Three different rules, chosen by context.

Stable audio level

Fixed gain plus a soft limiter, calibrated once offline. No volume pumping from one sentence to the next.

sample-to-sample jump 1.11 → 0.118

Clean-up before speaking

Formatting tags and typographic symbols that the engine would read out literally or reject with an error are removed first.

Pronunciation correction

Proper terms, company names and foreign words, pronounced correctly, from a list per agent.

Thinking and tools

What it does while holding the conversation

Tools in parallel

Says a short bridge phrase, sends the job to another thread and carries on. It stays interruptible while the tool is working.

Result announced separately

If the tool runs past the conversation, the result is announced when it arrives — even if you have closed the tab in the meantime.

Comes back on its own

It schedules a follow-up — “I'll tell you in ten minutes” — and it fires even if nobody is connected.

Memory across conversations

Remembers people and what was discussed, with revision over time: “is coming on Friday” becomes “came on Friday” once Friday has passed.

104 tests

Forgetting on request

Deletion works on disk, not just in the interface.

Knowledge base per agent

Placed in the system prompt so that it lands in the provider's prompt cache — so knowledge makes a request cheaper, not more expensive.

Session and scale

What holds when things go wrong

Survives a reload

You close the tab; the conversation continues where it left off.

Survives a server restart

Not just a disconnect — a full restart of the process, too.

Agents as records

Voice, language, instructions, tools, knowledge base — configuration, not a separate process. Dozens of agents on the same process.

Isolated clients

Each with its own key. One client can neither see nor touch another client's agents.

Quotas and queue

Limits per client and per address, with your position in the queue instead of a flat refusal.

57 tests

One-line widget

A single script on the client's page. No dependencies, isolated from the host page's styles.

27.6 KB

Capacity moved past the ceiling of 2 simultaneous sessions once the speech recognizer lease moved from the connection to the turn — the ceiling did not depend on hardware, it was a resource held busy for nothing. Now: 12 simultaneous connections measured. Latency grows with them: ASR p95 165 ms at 1 session, 880 ms at 4, 2.4 s at 6.

Honest

What does not exist yet

Want to try it before the API?

We do on-premise deployments, on the client's own server. Tell us what you need.