Add Medical→Standard fallback and better error logging for AWS Transcribe
When Medical Transcribe fails (wrong IAM permissions, region not supported), automatically falls back to Standard Transcribe instead of returning an error. Logs the specific failure reason.
This commit is contained in:
parent
168f67adee
commit
dbda2ad913
1 changed files with 39 additions and 24 deletions
|
|
@ -101,7 +101,25 @@ async function transcribeWithAWS(audioBuffer, mimeType) {
|
||||||
var specialty = process.env.AWS_TRANSCRIBE_SPECIALTY || 'PRIMARYCARE';
|
var specialty = process.env.AWS_TRANSCRIBE_SPECIALTY || 'PRIMARYCARE';
|
||||||
var transcript = '';
|
var transcript = '';
|
||||||
|
|
||||||
|
// 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]) {
|
||||||
|
text += r.Alternatives[0].Transcript + ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
if (useMedical) {
|
if (useMedical) {
|
||||||
|
try {
|
||||||
var StartMedicalStreamTranscriptionCommand = TranscribeModule.StartMedicalStreamTranscriptionCommand;
|
var StartMedicalStreamTranscriptionCommand = TranscribeModule.StartMedicalStreamTranscriptionCommand;
|
||||||
var medCmd = new StartMedicalStreamTranscriptionCommand({
|
var medCmd = new StartMedicalStreamTranscriptionCommand({
|
||||||
LanguageCode: 'en-US',
|
LanguageCode: 'en-US',
|
||||||
|
|
@ -112,16 +130,22 @@ async function transcribeWithAWS(audioBuffer, mimeType) {
|
||||||
AudioStream: makeAudioStream(audioToSend)
|
AudioStream: makeAudioStream(audioToSend)
|
||||||
});
|
});
|
||||||
var medResp = await client.send(medCmd);
|
var medResp = await client.send(medCmd);
|
||||||
for await (var event of medResp.TranscriptResultStream) {
|
transcript = await collectTranscript(medResp.TranscriptResultStream);
|
||||||
if (event.TranscriptEvent && event.TranscriptEvent.Transcript) {
|
console.log('[Transcribe] Medical transcription OK (' + transcript.length + ' chars)');
|
||||||
var results = event.TranscriptEvent.Transcript.Results || [];
|
} catch (medErr) {
|
||||||
for (var i = 0; i < results.length; i++) {
|
console.warn('[Transcribe] Medical failed, falling back to standard:', medErr.message);
|
||||||
var r = results[i];
|
// Fallback to standard Transcribe
|
||||||
if (!r.IsPartial && r.Alternatives && r.Alternatives[0]) {
|
var client2 = new TranscribeStreamingClient({ region: region, credentials: credentials });
|
||||||
transcript += r.Alternatives[0].Transcript + ' ';
|
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 {
|
} else {
|
||||||
var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand;
|
var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand;
|
||||||
|
|
@ -132,17 +156,8 @@ async function transcribeWithAWS(audioBuffer, mimeType) {
|
||||||
AudioStream: makeAudioStream(audioToSend)
|
AudioStream: makeAudioStream(audioToSend)
|
||||||
});
|
});
|
||||||
var resp = await client.send(cmd);
|
var resp = await client.send(cmd);
|
||||||
for await (var ev of resp.TranscriptResultStream) {
|
transcript = await collectTranscript(resp.TranscriptResultStream);
|
||||||
if (ev.TranscriptEvent && ev.TranscriptEvent.Transcript) {
|
console.log('[Transcribe] Standard transcription OK (' + transcript.length + ' chars)');
|
||||||
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 + ' ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return transcript.trim();
|
return transcript.trim();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue