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 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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue