Triggered for each incremental text chunk as the AI generates its response. This event is sent multiple times during response generation. Handle this event to display AI responses in real-time as they’re generated.
Event Properties
Event type. Always "realtime.response.audio_transcript.delta" for this event.
Event data object containing response information.
The new text chunk to append to the accumulated response.Example: "Hello there"
Unique identifier for this response. Used to track concurrent responses.Example: "resp-123456"
Alternative field name for the response ID. May be present for compatibility.Example: "resp-123456"
{
"type": "realtime.response.audio_transcript.delta",
"data": {
"content": "Hello there",
"id": "resp-123456"
}
}
Usage Example
const NavTalkMessageType = Object.freeze({
REALTIME_RESPONSE_AUDIO_TRANSCRIPT_DELTA: "realtime.response.audio_transcript.delta",
// ... other event types
});
let markdownBuffer = new Map();
let responseSpans = new Map();
async function handleReceivedMessage(data) {
const nav_data = data.data;
switch (data.type) {
case NavTalkMessageType.REALTIME_RESPONSE_AUDIO_TRANSCRIPT_DELTA:
const transcript = nav_data.content;
const responseId = nav_data.id;
// Accumulate content by response ID
if (!markdownBuffer.has(responseId)) {
markdownBuffer.set(responseId, "");
}
const existingBuffer = markdownBuffer.get(responseId);
markdownBuffer.set(responseId, existingBuffer + transcript);
// Get or create message element
let aiMessageSpan = responseSpans.get(responseId);
if (!aiMessageSpan) {
// Create new message element
aiMessageSpan = createMessageElement();
responseSpans.set(responseId, aiMessageSpan);
}
// Update displayed content
const fullContent = markdownBuffer.get(responseId);
aiMessageSpan.innerHTML = marked.parse(fullContent);
break;
}
}