🎤 Micdrop

Choosing the Models

You pick the three parts of a local call for different reasons: the agent on function calling, the transcription on the language it has to read, and the voice on the languages it can speak at all. All the measurements on this page come from a MacBook Pro M2 with 24 GB of memory, so read them as the answer for a good personal computer rather than for a server with a large GPU.

The LLM

Micdrop asks the model for tool calls on every turn when auto end call, semantic turn detection and noise filtering are on, so function calling matters more for a local agent than raw writing quality.

ModelSize in Q4Notes
Qwen3 4B Instruct~2.5 GBBest balance of tool calling, latency and multilingual coverage
Qwen3 8B Instruct~5 GBBetter conversation, still comfortable next to the voice models
Gemma 3 4B~3 GBVery good at writing, but no native tool call format
Ministral 8B~5 GBStrong in French, check its license for commercial use

Llama 3.2 3B is tempting for its size, though its function calling gets shaky on the long system prompts Micdrop builds. Mistral 7B was measured against Qwen3 and came out behind on every measure. The explorations page has that comparison.

Speech to text

Whisper is the local option, running inside the Node process through @micdrop/whisper. You pick the checkpoint on the language of the call more than on the weight of the file.

Whisper reads a fixed window of thirty seconds whatever the length of the utterance, so a heavier checkpoint raises the cost of every sentence, short ones included. It also reads English more accurately, and outside English a checkpoint fine-tuned on the language does better than a heavier generic one on both accuracy and cost. The french shorthand costs what small costs, reads French better than turbo, a checkpoint that weighs twice as much and answers three times slower, and writes numbers in words instead of digits, the form the voice needs. Generic base, for comparison, misreads a quarter of the words of a French sentence.

Pass language explicitly when the call has a known language, which saves the detection pass and avoids a wrong guess on a short sentence. The Whisper page lists every checkpoint with its download size and its latency.

Text to speech

Three engines run locally, and you pick between them mostly on the language of the call.

EngineRunsLanguagesVoice comes fromFirst sentence
PiperIn a subprocessAround fortyA voice file downloaded next to the app~390 ms
Pocket TTSIn the Node processEnglishA bundled voice, or a sample to clone250 to 430 ms
KokoroIn the Node processEnglishA bundled voice900 to 1300 ms

Pick Piper as soon as the call happens in a language other than English, since it is the only one of the three that covers French, German, Spanish and around forty others. You install its binary and download the voice, a pair of files a few dozen megabytes each.

In English, Pocket TTS and Kokoro both ask only for an npm install. Pocket TTS speaks first and clones a voice from a few seconds of reference audio, at the price of 600 MB held while it generates. Kokoro asks for the least setup of the three and answers about a second later, a delay the person on the call hears.

The phonemizer limits both English engines more than their weights do. Kokoro ships Spanish, French, Italian, Japanese, Portuguese and Chinese voices, and kokoro-js phonemizes every input with the English rules, so those voices read foreign words with an English accent. The Pocket TTS checkpoints for French, German, Spanish, Italian and Portuguese have no ONNX export yet, so the addon loads the English one.

Choosing the voice

Each engine names its voices its own way. Kokoro takes shorthands such as americanFemale or britishFemale, and any voice id the model ships. Piper names its voices after their language, their speaker and their quality, such as fr_FR-siwis-medium, and publishes samples to listen to before downloading one. Pocket TTS starts on a bundled voice and switches to any wav of someone speaking, and its license makes the consent of that speaker a condition of use.

The voice and the agent have to agree. If you pair an English voice with an agent writing French, the voice reads French words with English phonemes and nobody understands it. Make the system prompt name the same language as the voice.

What a small model gets wrong

A model of a few billion parameters follows a complex prompt approximately. Micdrop stacks a role, a writing style, the automatic instructions and the declaration of the tools into one system prompt, and the smaller the model, the more of those instructions it drops. Expect an assistant that holds the intent and drifts on the details, and expect the tool calls to slip first, since they ask the model to judge the moment and to emit an exact format at the same time.

Qwen3 4B Instruct, over three identical conversations, shows what that drift looks like. It skipped a meaningless "euh" every time, so noise filtering held. It let the call run past "Merci, au revoir !", while the reasoning variant of the same model ended it. It also wrote "23 heures 41 minutes 35 secondes" in digits although the prompt asked for numbers written in full, which the voice then read inconsistently.

Two habits keep those slips manageable. Provide a fallback for anything a tool call is supposed to trigger, such as a goodbye button or a silence timeout next to autoEndCall. And when the assistant misbehaves, turn the automatic prompts off one at a time to see which instruction the model mishandles, then shorten or sharpen that one rather than the whole prompt.

Transcription and voice hold up far better at these sizes. A transcription checkpoint of a few dozen megabytes reads a known language accurately once it has been fine-tuned on that language, and the local voices sound close to the hosted ones on the languages they cover. A local call gives up the most in the agent.

Kyutai and Mistral publish other local models for French and English that read and speak well, and each one asks for more computation or more setup than a local call affords today. The explorations page lists their measurements.