Zackriya-Solutions/meetily · warning · Error
No transcript text available. Please add some text first.
Error message
No transcript text available. Please add some text first.
What it means
Thrown by the summary-generation hook as a deliberate precondition check: generateSummary refuses to run when transcriptText.trim() is empty, before any LLM call or Analytics.trackSummaryGenerationStarted fires. Note the hook has already set summaryStatus to 'processing'/'regenerating' by the time this throws, so the catch path must reset that status. In practice the transcript is empty because Whisper/VAD produced no segments (or segments have not loaded), not because of a bug in this guard.
Source
Thrown at frontend/src/hooks/meeting-details/useSummaryGeneration.ts:116
// Unified summary processing logic
const processSummary = useCallback(async ({
transcriptText,
transcriptTexts,
customPrompt = '',
isRegeneration = false,
}: {
transcriptText: string;
transcriptTexts?: string[];
customPrompt?: string;
isRegeneration?: boolean;
}) => {
setSummaryStatus(isRegeneration ? 'regenerating' : 'processing');
setSummaryError(null);
try {
if (!transcriptText.trim()) {
throw new Error('No transcript text available. Please add some text first.');
}
console.log('Processing transcript with template:', selectedTemplate);
// Calculate time since recording
const timeSinceRecording = (Date.now() - new Date(meeting.created_at).getTime()) / 60000; // minutes
// Track summary generation started
await Analytics.trackSummaryGenerationStarted(
modelConfig.provider,
modelConfig.model,
transcriptText.length,
timeSinceRecording
);
// Track custom prompt usage if present
if (customPrompt.trim().length > 0) {
await Analytics.trackCustomPromptUsed(customPrompt.trim().length);View on GitHub (pinned to 0281737d87)
Solutions
- Check that transcript segments actually exist before enabling the Generate/Regenerate button (e.g. transcripts.some(t => t.text.trim().length > 0)).
- When regenerating from transcriptTexts, join segments with newlines and trim the result before passing it as transcriptText.
- If transcripts stay empty during live recording, debug the audio pipeline: run with RUST_LOG=app_lib::audio=debug and verify transcript-update events and the VAD detection rate.
- As a workaround, paste manual transcript text into the meeting and retry.
Example fix
// before
await generateSummary({ transcriptText, isRegeneration: true });
// after
if (!transcriptText.trim()) {
setSummaryError('Transcript is empty — record or add text before generating a summary.');
setSummaryStatus('idle'); // reset the 'processing' state the hook already set
return;
}
await generateSummary({ transcriptText, isRegeneration: true }); Defensive patterns
Strategy: validation
Validate before calling
const hasText = transcriptTexts?.length
? transcriptTexts.some(t => t.trim().length > 0)
: !!transcriptText?.trim();
if (!hasText) {
toast.info('Nothing to summarize yet — the transcript is empty.');
return;
} Type guard
function hasTranscriptText(text: string | null | undefined): text is string {
return typeof text === 'string' && text.trim().length > 0;
} Try / catch
try {
await generateSummary({ transcriptText });
} catch (e) {
if (e instanceof Error && e.message.includes('No transcript text')) {
setSummaryStatus('idle'); // reset the 'processing' state the hook set before throwing
return;
}
throw e;
} Prevention
- Disable the Generate/Regenerate button until at least one transcript segment exists.
- After stopping a recording, assert transcript-update events produced non-empty segments before showing summary UI.
- When joining segments into transcriptText, trim the result and prompt the user when it's empty.
When it happens
Trigger: Calling generateSummary (or the Regenerate action) when: (1) the meeting was stopped seconds after starting and no speech was detected; (2) transcriptTexts was used elsewhere but the joined transcriptText passed here is empty/whitespace; (3) an old meeting's transcripts failed to load from the database and the UI still enabled the button; (4) VAD filtered out all audio so the transcript-update events never carried text.
Common situations: Very short or silent recordings, mic permission denied so Whisper receives nothing, opening a meeting whose transcript rows were not persisted, or a race where the user clicks Generate before the first transcript segment arrives.
Related errors
- Device name cannot be empty
- Device type (input/output) not specified in the name
- File does not exist: {}
- Unsupported format: .{}. Supported: {}
- File too large: {:.2}GB. Maximum supported size is {}GB
AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16).
Data as JSON: /api/errors/0410f525c880c4e5.
Report an issue: GitHub.