Built for voice agents that can't wait 600ms

OpenAI: GPT-Live 1

openai/gpt-live-1
active speech-to-speech 1 provider
Playground

OpenAI full-duplex voice model for natural, expressive speech-to-speech conversations that listens while speaking and supports client delegation to your application.

AuthorOpenAI
Languagesnot specified
Response formatsStreaming: PCM · µ-law · A-law
Statusactive

Providers

Different providers can host the same model. Choose one provider when you need a fixed backend, or let routing select among them.

ProviderSlugPer hourLatencyiFor TTS, latency is measured as time to first byte of audio. For STT, latency is measured as time to first token.ModesUptime
OpenAI 3 params
openai
$3
—
Streaming

Supported languages

No reviewed language list for this model yet.

Features

Speech to speech

Full-duplex speech-to-speech over WebSocket, listening while it speaks.

speech_to_speech
Text input and output

Accepts text input and returns text output alongside audio.

text_input_output
Turn-taking

The model manages when to listen and speak over a continuous audio stream, with interruption handling.

turn_taking
Live transcripts

Streams timestamped transcripts of both input and output speech.

live_transcripts
Client delegation

Emits client delegation events for your application to handle and accepts application-provided results back into the conversation.

client_delegation

Code

Language

Live speech-to-speech with the OpenAI SDK

Opens a GPT-Live session, streams question.pcm (24 kHz 16-bit mono PCM) in real time and saves the spoken reply to reply.pcm.

import { readFile, writeFile } from "node:fs/promises";
import { setTimeout as sleep } from "node:timers/promises";
import OpenAI from "openai";
import { LiveWS } from "openai/resources/live/ws";

const client = new OpenAI({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseURL: "https://api.allmodels.io/oai"
});
const live = new LiveWS(client);
const reply = [];
let quiet;

live.on("session.output_audio.delta", ({ delta }) => reply.push(Buffer.from(delta, "base64")));
live.on("session.output_transcript.delta", () => {
  // End the session two seconds after the reply's transcript goes quiet.
  clearTimeout(quiet);
  quiet = setTimeout(() => live.send({ type: "session.close" }), 2000);
});
live.on("session.closed", async () => {
  await writeFile("reply.pcm", Buffer.concat(reply));
  live.close();
});
live.on("error", console.error);

live.send({
  type: "session.start",
  session: {
    model: "gpt-live-1",
    audio: { format: { type: "audio/pcm", rate: 24000 }, output: { voice: "marin" } },
    delegation: { type: "client" }
  }
});

// Stream 100 ms frames in real time, then two seconds of silence.
const audio = Buffer.concat([await readFile("question.pcm"), Buffer.alloc(2 * 24000 * 2)]);
for (let offset = 0; offset < audio.length; offset += 4800) {
  live.send({ type: "session.input_audio.append", audio: audio.subarray(offset, offset + 4800).toString("base64") });
  await sleep(100);
}