Duplex Compute
Research notes
RESEARCH NOTE / 010

Choosing a low-cost voice API with function calling

The cheapest voice minute on this list cannot call a tool at all. The rest differ in who runs the function, whether the voice keeps talking while it runs, and what a caller's interruption cancels.

Duplex Compute · October 13, 2026 · Rates and versions checked October 13, 2026

Tool support is several separate questions

"Supports function calling" usually means the model can emit a structured call. Someone still has to execute it, and the result has to get back into the conversation. Meanwhile the caller hears silence, filler, or a conversation that keeps going. When the caller interrupts, some work stops and some keeps running. A booking agent can fail at any of these points.

The table answers each question from the provider's own documentation. "Not documented" means we read the linked pages and found no statement either way. It does not mean the feature is missing.

Function calling behavior and published rates, from provider documentation. Rates checked October 13, 2026.
API / modelTool schemaWho executesResult returned byTalks while a call is pendingWhat an interruption cancelsPublished rate
gpt-realtime-2.1JSON Schema functions in session.tools or response.toolsYour applicationfunction_call_output item, then response.createThe documented flow speaks again after you send response.createWith VAD, user speech cancels the in-progress response; your handler is yours to stopAudio $32/M input, $0.40/M cached, $64/M output; text $4, $0.40, $24/M
gpt-live-1Delegated to a backend: Responses delegation or your own agentBackend model; your application runs your function toolsResults to the backend, which GPT-Live then voicesYes: GPT-Live can keep talking and explain the result when it arrivesSpeech only; backend work keeps running until your application cancels it$0.05/min, billed per second; backend usage extra
Gemini 3.1 Flash Live PreviewFunction declarations in the session configYour applicationsend_tool_responseNo: listed as synchronous only, and synchronous calls block interactiontoolCallCancellation is in the Live API reference, sent when the client interrupts a server turnAudio $3/M input (≈$0.005/min), $12/M output (≈$0.018/min)
Gemini 3.8 LiveFunction declarations; Google's examples use gemini-3.8-liveYour applicationsend_tool_responseNot documented: the sync/async table lists only 3.1 Flash Live and 2.5 Flash LivetoolCallCancellation is in the Live API reference; per-model behavior not documentedSame audio rates as 3.1 Flash Live
Grok Voice Think Fast 2.0Custom functions, plus server-side web search, X search, collections and MCPYour application for custom functions; xAI for server-side toolsfunction_call_output item, then response.createNot documentedNot documented$0.08/min; $0.004 per text input item, tool results exempt
Deepgram Voice AgentFunctions in agent settingsYour client, or Deepgram calling an endpoint you provideFunctionCallResponseNot documentedCalls already sent to you get FunctionCallCancelled when the user speaks againStandard $0.075/min of WebSocket connection time
.wave Nemotron VoiceChat 11BNot supportedNoneNoneNoneNone$0.005/min introductory beta rate; 120-second sessions
Duplex ComputeTool calling includedNot documentedNot documentedNot documentedNot documented$0.01 per connected minute

Gemini rates are from Google's pricing page, Grok's from xAI pricing and the model page, Deepgram's from Deepgram pricing. Duplex Compute is in early access; its API reference is not public yet.

Reading the rows

OpenAI Realtime: you run everything after the call

gpt-realtime-2.1 emits a function_call item with a call_id. Your code runs the function, adds a function_call_output with the same call_id, and sends response.create. The function calling walkthrough has the event JSON. Interrupting cancels the model's speech. A booking your handler already started is your problem to finish, cancel or supersede.

GPT-Live: the voice keeps going, the backend does the work

gpt-live-1 is a full-duplex voice model that hands reasoning and tools to a backend. OpenAI's guide says the application checks permissions, obtains confirmations, runs functions and saves task progress. The voice minute is $0.05. Backend tokens and tools are billed on top, so the minute rate is a floor.

Gemini Live: pin the model before you plan around async

Google's tool use page lists Gemini 3.1 Flash Live Preview as synchronous only and Gemini 2.5 Flash Live Preview as synchronous and asynchronous. Synchronous calls pause the conversation until results return. On 2.5, a function marked NON_BLOCKING runs while the conversation continues, and the response's scheduling field chooses INTERRUPT, WHEN_IDLE or SILENT. The same page uses gemini-3.8-live in its code samples but leaves it out of that table. Test 3.8 before you depend on non-blocking calls.

The Live API reference describes toolCallCancellation as a notice that earlier calls "should not have been executed", sent only when the client interrupts a server turn. If those calls had side effects, the reference says clients may attempt to undo them.

Grok Voice: server-side tools change the bill

xAI runs web search, X search, collections and MCP tools on its side. Custom functions follow the same three events as OpenAI: response.function_call_arguments.done, a function_call_output item, then response.create. With several calls in one turn, xAI says to return every output before one response.create. Sessions with default server_vad are billed for session duration. Server-side tool calls carry their own fees, such as $5 per 1,000 web searches.

Deepgram Voice Agent: early dispatch, explicit cancellation

Deepgram starts a reply before speech-to-text confirms the user finished. Function calls are not held by default, so a call can fire while the caller is still talking. If the caller keeps going, Deepgram sends FunctionCallCancelled and drops any late response. For anything you cannot undo, its docs recommend defer_until_eot: true. Of the APIs here, Deepgram documents interruption and tool cancellation most explicitly.

.wave Nemotron: cheapest minute, no tools

.wave hosts NVIDIA's Nemotron VoiceChat 11B at $0.005 per minute. Its limits section says custom instructions, text input and tools are not supported, and sessions stop at 120 seconds. The underlying model has a tool-call channel when you host it yourself; the Nemotron note separates the checkpoint from the hosted service.

Price the voice layer for one call

These APIs bill in different units, so a "per minute" column hides most of the difference. The table prices the voice layer of one 10-minute call in which the caller speaks for four minutes and the agent for four. It is arithmetic on published rates, not an invoice. Billing formulas for each model live in the voice agent pricing hub.

Illustrative voice-layer cost of a 10-minute call. Backend models, telephony and tool fees are excluded.
APIArithmeticVoice layer, 10 minutesNot included
gpt-realtime-2.14 min × 600 input tokens × $32/M + 4 min × 1,200 output tokens × $64/M≈$0.38 of new audio tokensEarlier turns re-sent as input, caching, text, reasoning
gpt-live-110 × $0.05$0.50Backend model and tool usage
Gemini 3.8 Live10 min input × $0.005 + 4 min output × $0.018≈$0.12Accumulated context billed each turn, transcription, search
Grok Voice Think Fast 2.010 × $0.08$0.80Text inputs, server-side tool calls
Deepgram Voice Agent Standard10 × $0.075$0.75Telephony, not stated as included
.wave Nemotron VoiceChat 11BNot possibleSessions end at 120 seconds; no tools
Duplex Compute10 × $0.01$0.10Your own systems the tools call

The Realtime token counts come from OpenAI's cost guide: one input audio token per 100 ms and one output token per 50 ms. Google's best practices state that every turn is charged for all tokens in the session context window, so long Gemini calls cost more per minute than the first minute does. A lower voice-session rate is not the same as a lower all-in cost per task.

Cost per successful task

A cheap minute that books the wrong table costs more than its minutes. Count total spend across every attempt, including retries and calls a human had to finish, and divide by tasks completed correctly. Correct means the application state is right: one reservation, seven people, the requested time.

A hypothetical example shows the shape. Take 100 three-minute calls at $0.05 per minute: $15.00 of voice time. If 90 succeed, the cost per success is $0.167. If 70 succeed, the same $15.00 works out to $0.214, before the cost of a human finishing the rest or undoing a double booking. The numbers are invented to show the formula; no provider was measured.

The behavior columns feed that denominator. A tool that fires while the caller is still correcting themselves, with no cancellation and no idempotency key, produces the double booking that never shows up in a per-minute comparison. OpenAI's voice agent evaluation guide checks tool calls and the resulting application state for this reason.

Which row fits

If you need tools today and want the provider to say exactly what an interruption cancels, Deepgram's documentation is the most explicit of these. If your agent already exists as a text backend, GPT-Live keeps it and adds a voice that talks while the work runs, at $0.05 per minute plus the backend. Gemini Live has the lowest token-priced audio here, with async behavior that depends on the exact model. If you are building a voice application with tools and the voice minute dominates your bill, Duplex Compute prices a full-duplex session with tool calling at $0.01 per connected minute. .wave's Nemotron beta suits short tests of full-duplex speech, not agents that act.

Related notes

Need tools without paying for a premium voice minute?

Duplex Compute is a full-duplex voice API with tool calling at $0.01 per connected minute. Tell us your expected voice hours, the tools your agent calls, and the provider you use now.

Request access