import { OpenAIRealtimeWS } from "openai/realtime/ws";
import { Maxim } from "@maximai/maxim-js";
import { wrapOpenAIRealtime } from "@maximai/maxim-js/openai";
async function main() {
// Initialize Maxim
const maxim = new Maxim({ apiKey: process.env.MAXIM_API_KEY });
const logger = await maxim.logger({ id: process.env.MAXIM_LOG_REPO_ID });
if (!logger) {
throw new Error("Failed to create logger");
}
// Create and wrap the Realtime client
const rt = new OpenAIRealtimeWS({ model: "gpt-4o-realtime-preview-2024-12-17" });
const wrapper = wrapOpenAIRealtime(rt, logger, {
"maxim-session-name": "Realtime Audio Chat",
"maxim-session-tags": { mode: "audio", tools: "enabled" },
});
// Configure session on connection
rt.socket.on("open", () => {
rt.send({
type: "session.update",
session: {
output_modalities: ["audio"],
instructions: "You are a helpful voice assistant.",
audio: {
input: {
transcription: { model: "gpt-4o-mini-transcribe" },
turn_detection: {
type: "server_vad",
threshold: 0.5,
prefix_padding_ms: 300,
silence_duration_ms: 500,
},
},
output: {
voice: "coral",
},
},
},
});
});
// Handle events
rt.on("session.updated", () => {
console.log("Session ready!");
});
rt.on("error", (err) => {
console.error("Error:", err);
});
}
main().catch(console.error);