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,28 +101,52 @@ 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 = '';
|
||||||
|
|
||||||
if (useMedical) {
|
// Helper to collect transcript from a result stream
|
||||||
var StartMedicalStreamTranscriptionCommand = TranscribeModule.StartMedicalStreamTranscriptionCommand;
|
async function collectTranscript(resultStream) {
|
||||||
var medCmd = new StartMedicalStreamTranscriptionCommand({
|
var text = '';
|
||||||
LanguageCode: 'en-US',
|
for await (var event of resultStream) {
|
||||||
MediaSampleRateHertz: sampleRate,
|
|
||||||
MediaEncoding: mediaEncoding,
|
|
||||||
Specialty: specialty,
|
|
||||||
Type: 'DICTATION',
|
|
||||||
AudioStream: makeAudioStream(audioToSend)
|
|
||||||
});
|
|
||||||
var medResp = await client.send(medCmd);
|
|
||||||
for await (var event of medResp.TranscriptResultStream) {
|
|
||||||
if (event.TranscriptEvent && event.TranscriptEvent.Transcript) {
|
if (event.TranscriptEvent && event.TranscriptEvent.Transcript) {
|
||||||
var results = event.TranscriptEvent.Transcript.Results || [];
|
var results = event.TranscriptEvent.Transcript.Results || [];
|
||||||
for (var i = 0; i < results.length; i++) {
|
for (var i = 0; i < results.length; i++) {
|
||||||
var r = results[i];
|
var r = results[i];
|
||||||
if (!r.IsPartial && r.Alternatives && r.Alternatives[0]) {
|
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 {
|
} else {
|
||||||
var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand;
|
var StartStreamTranscriptionCommand = TranscribeModule.StartStreamTranscriptionCommand;
|
||||||
var cmd = new StartStreamTranscriptionCommand({
|
var cmd = new 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