diff --git a/src/utils/transcribeAWS.js b/src/utils/transcribeAWS.js index 894f9d7..0ee2b15 100644 --- a/src/utils/transcribeAWS.js +++ b/src/utils/transcribeAWS.js @@ -101,28 +101,52 @@ async function transcribeWithAWS(audioBuffer, mimeType) { var specialty = process.env.AWS_TRANSCRIBE_SPECIALTY || 'PRIMARYCARE'; var transcript = ''; - if (useMedical) { - var StartMedicalStreamTranscriptionCommand = TranscribeModule.StartMedicalStreamTranscriptionCommand; - var medCmd = new StartMedicalStreamTranscriptionCommand({ - LanguageCode: 'en-US', - MediaSampleRateHertz: sampleRate, - MediaEncoding: mediaEncoding, - Specialty: specialty, - Type: 'DICTATION', - AudioStream: makeAudioStream(audioToSend) - }); - var medResp = await client.send(medCmd); - for await (var event of medResp.TranscriptResultStream) { + // Helper to collect transcript from a result stream + async function collectTranscript(resultStream) { + var text = ''; + for await (var event of resultStream) { if (event.TranscriptEvent && event.TranscriptEvent.Transcript) { var results = event.TranscriptEvent.Transcript.Results || []; for (var i = 0; i < results.length; i++) { var r = results[i]; if (!r.IsPartial && r.Alternatives && r.Alternatives[0]) { - transcript += r.Alternatives[0].Transcript + ' '; + text += r.Alternatives[0].Transcript + ' '; } } } } + return text; + } + + if (useMedical) { + try { + var StartMedicalStreamTranscriptionCommand = TranscribeModule.StartMedicalStreamTranscriptionCommand; + var medCmd = new StartMedicalStreamTranscriptionCommand({ + LanguageCode: 'en-US', + MediaSampleRateHertz: sampleRate, + MediaEncoding: mediaEncoding, + Specialty: specialty, + Type: 'DICTATION', + AudioStream: makeAudioStream(audioToSend) + }); + var medResp = await client.send(medCmd); + transcript = await collectTranscript(medResp.TranscriptResultStream); + console.log('[Transcribe] Medical transcription OK (' + transcript.length + ' chars)'); + } catch (medErr) { + console.warn('[Transcribe] Medical failed, falling back to standard:', medErr.message); + // Fallback to standard Transcribe + var client2 = new TranscribeStreamingClient({ region: region, credentials: credentials }); + var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand; + var cmd = new StartStreamTranscriptionCommand({ + LanguageCode: 'en-US', + MediaSampleRateHertz: sampleRate, + MediaEncoding: mediaEncoding, + AudioStream: makeAudioStream(audioToSend) + }); + var resp = await client2.send(cmd); + transcript = await collectTranscript(resp.TranscriptResultStream); + console.log('[Transcribe] Standard fallback OK (' + transcript.length + ' chars)'); + } } else { var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand; var cmd = new StartStreamTranscriptionCommand({ @@ -132,17 +156,8 @@ async function transcribeWithAWS(audioBuffer, mimeType) { AudioStream: makeAudioStream(audioToSend) }); var resp = await client.send(cmd); - for await (var ev of resp.TranscriptResultStream) { - if (ev.TranscriptEvent && ev.TranscriptEvent.Transcript) { - var res = ev.TranscriptEvent.Transcript.Results || []; - for (var j = 0; j < res.length; j++) { - var item = res[j]; - if (!item.IsPartial && item.Alternatives && item.Alternatives[0]) { - transcript += item.Alternatives[0].Transcript + ' '; - } - } - } - } + transcript = await collectTranscript(resp.TranscriptResultStream); + console.log('[Transcribe] Standard transcription OK (' + transcript.length + ' chars)'); } return transcript.trim();