Execute AssemblyAI streaming transcription and LeMUR workflows.
Use when implementing real-time speech-to-text, live captions,
voice agents, or LLM-powered audio analysis with LeMUR.
Trigger with phrases like "assemblyai streaming", "assemblyai real-time",
"assemblyai live transcription", "assemblyai LeMUR", "assemblyai summarize audio".
Execute AssemblyAI streaming transcription and LeMUR workflows.
Use when implementing real-time speech-to-text, live captions,
voice agents, or LLM-powered audio analysis with LeMUR.
Trigger with phrases like "assemblyai streaming", "assemblyai real-time",
"assemblyai live transcription", "assemblyai LeMUR", "assemblyai summarize audio".
Two advanced workflows: (1) real-time streaming transcription via WebSocket for live captioning and voice agents, and (2) LeMUR for applying LLMs to transcripts — summarization, Q&A, action items, and custom tasks.
// Server-side: generate a short-lived token for the browserconst token = await client.streaming.createTemporaryToken({
expires_in_seconds: 300, // 5 minutes
});
// Send `token` to your frontend// Client-side uses token instead of API key:// const transcriber = new StreamingTranscriber({ token: receivedToken });
Step 4: Streaming with Word Boost and Speaker Labels
// First transcribe (or use an existing transcript_id)const transcript = await client.transcripts.transcribe({
audio: 'https://example.com/meeting.mp3',
});
// Summarize with LeMURconst { response } = await client.lemur.summary({
transcript_ids: [transcript.id],
context: 'This is a weekly engineering standup meeting.',
answer_format: 'bullet points',
});
console.log('Summary:', response);
Step 6: Ask Questions About Audio
const { response: answers } = await client.lemur.questionAnswer({
transcript_ids: [transcript.id],
questions: [
{ question: 'What decisions were made?', answer_format: 'list' },
{ question: 'Were there any blockers discussed?', answer_format: 'short sentence' },
{ question: 'Who owns the next action items?', answer_format: 'list' },
],
});
for (const qa of answers) {
console.log(`Q: ${qa.question}`);
console.log(`A: ${qa.answer}\n`);
}
Step 7: Extract Action Items
const { response: actionItems } = await client.lemur.actionItems({
transcript_ids: [transcript.id],
context: 'This is a product planning meeting.',
answer_format: 'Each action item should include the owner and deadline.',
});
console.log('Action Items:', actionItems);
Step 8: Custom LeMUR Task
const { response } = await client.lemur.task({
transcript_ids: [transcript.id],
prompt: `Analyze this customer support call and provide:
1. Customer sentiment (positive/neutral/negative)
2. Issue category
3. Resolution status
4. CSAT prediction (1-5)
Format as JSON.`,
});
const analysis = JSON.parse(response);
console.log(analysis);
Step 9: Multi-Transcript Analysis
// LeMUR can analyze up to 100 hours of audio in a single requestconst transcriptIds = [
'transcript-1', 'transcript-2', 'transcript-3',
];
const { response } = await client.lemur.task({
transcript_ids: transcriptIds,
prompt: 'Compare themes across these three customer interviews. What patterns emerge?',
});
console.log(response);
Streaming Specifications
Spec
Value
Audio format
16-bit PCM, mono
Sample rates
8000, 16000, 22050, 44100, 48000 Hz
Latency (P50)
~300ms
Max concurrent streams (free)
5 new/min
Max concurrent streams (paid)
100 new/min, auto-scales 10%/60s
Languages
99+ (with Universal-3)
Models
nova-3 (default), nova-3-pro (highest accuracy)
Output
Real-time partial and final transcripts via WebSocket