Connect
Connect to Live without query parameters. Send session.start with model and session configuration, then wait for session.started. Follow the Live prompting guide before writing instructions.
WebSocket wss://api.openai.com/v1/live/sessions
Connect
import OpenAI from "openai";
import { LiveWS } from "openai/resources/live/ws";
// New primary session; model belongs in session.start, not the URL.
const connection = new LiveWS(new OpenAI());
let observed = false;
let closeRequested = false;
// A missing terminal event must never be reported as successful completion.
const timer = setTimeout(() => connection.close(), 60_000);
try {
for await (const entry of connection) {
if (entry.type === "open") {
connection.send({
type: "session.start",
session: { model: "gpt-live-1" },
});
} else if (entry.type === "error") {
throw new Error("Live reported a session error.");
} else if (entry.type === "message") {
const event = entry.message;
if (event.type === "error")
throw new Error("Live reported a session error.");
if (event.type === "session.started") {
// Wait for startup before closing the session this example owns.
console.log("Session ready:", event.session.id, event.session.model);
connection.send({ type: "session.close" });
closeRequested = true;
} else if (event.type === "session.closed") {
if (!closeRequested || event.reason !== "close_requested") {
throw new Error(
"Session ended unexpectedly: " +
event.reason +
"; usage=" +
JSON.stringify(event.usage),
);
}
console.log("Final usage:", event.usage);
observed = true;
break;
}
}
}
if (!observed)
throw new Error(
"Connection closed before session.closed; final usage unconfirmed",
);
} finally {
clearTimeout(timer);
// Release the transport after the terminal event or an error.
connection.close();
}