@aws-amplify/predictions 6.0.22-unstable.bd1fefd.0 → 6.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/Predictions.js +4 -2
  2. package/dist/cjs/Predictions.js.map +1 -1
  3. package/dist/cjs/providers/AmazonAIConvertPredictionsProvider.js +9 -9
  4. package/dist/cjs/providers/AmazonAIConvertPredictionsProvider.js.map +1 -1
  5. package/dist/cjs/providers/AmazonAIIdentifyPredictionsProvider.js +20 -25
  6. package/dist/cjs/providers/AmazonAIIdentifyPredictionsProvider.js.map +1 -1
  7. package/dist/cjs/providers/AmazonAIInterpretPredictionsProvider.js +7 -7
  8. package/dist/cjs/providers/AmazonAIInterpretPredictionsProvider.js.map +1 -1
  9. package/dist/cjs/providers/IdentifyTextUtils.js +9 -9
  10. package/dist/cjs/providers/IdentifyTextUtils.js.map +1 -1
  11. package/dist/cjs/providers/Utils.js +6 -6
  12. package/dist/cjs/providers/Utils.js.map +1 -1
  13. package/dist/cjs/types/Predictions.js +14 -15
  14. package/dist/cjs/types/Predictions.js.map +1 -1
  15. package/dist/esm/Predictions.mjs +2 -0
  16. package/dist/esm/Predictions.mjs.map +1 -1
  17. package/dist/esm/providers/AmazonAIConvertPredictionsProvider.mjs +9 -9
  18. package/dist/esm/providers/AmazonAIConvertPredictionsProvider.mjs.map +1 -1
  19. package/dist/esm/providers/AmazonAIIdentifyPredictionsProvider.d.ts +6 -6
  20. package/dist/esm/providers/AmazonAIIdentifyPredictionsProvider.mjs +20 -25
  21. package/dist/esm/providers/AmazonAIIdentifyPredictionsProvider.mjs.map +1 -1
  22. package/dist/esm/providers/AmazonAIInterpretPredictionsProvider.mjs +7 -7
  23. package/dist/esm/providers/AmazonAIInterpretPredictionsProvider.mjs.map +1 -1
  24. package/dist/esm/providers/IdentifyTextUtils.mjs +9 -9
  25. package/dist/esm/providers/IdentifyTextUtils.mjs.map +1 -1
  26. package/dist/esm/providers/Utils.mjs +6 -6
  27. package/dist/esm/providers/Utils.mjs.map +1 -1
  28. package/dist/esm/types/AWSTypes.d.ts +2 -2
  29. package/dist/esm/types/Predictions.d.ts +30 -30
  30. package/dist/esm/types/Predictions.mjs +14 -15
  31. package/dist/esm/types/Predictions.mjs.map +1 -1
  32. package/package.json +71 -72
  33. package/src/Predictions.ts +3 -2
  34. package/src/providers/AmazonAIConvertPredictionsProvider.ts +10 -20
  35. package/src/providers/AmazonAIIdentifyPredictionsProvider.ts +26 -41
  36. package/src/providers/AmazonAIInterpretPredictionsProvider.ts +18 -22
  37. package/src/providers/IdentifyTextUtils.ts +22 -25
  38. package/src/providers/Utils.ts +6 -8
  39. package/src/providers/index.ts +0 -1
  40. package/src/types/AWSTypes.ts +3 -2
  41. package/src/types/Predictions.ts +44 -60
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- // SPDX-License-Identifier: Apache-2.0
5
3
  Object.defineProperty(exports, "__esModule", { value: true });
6
4
  exports.Predictions = exports.PredictionsClass = void 0;
5
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
+ // SPDX-License-Identifier: Apache-2.0
7
+ const core_1 = require("@aws-amplify/core");
7
8
  const providers_1 = require("./providers");
9
+ new core_1.ConsoleLogger('Predictions');
8
10
  class PredictionsClass {
9
11
  constructor() {
10
12
  this.convertProvider = new providers_1.AmazonAIConvertPredictionsProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"Predictions.js","sources":["../../src/Predictions.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Predictions = exports.PredictionsClass = void 0;\nconst providers_1 = require(\"./providers\");\nclass PredictionsClass {\n constructor() {\n this.convertProvider = new providers_1.AmazonAIConvertPredictionsProvider();\n this.identifyProvider = new providers_1.AmazonAIIdentifyPredictionsProvider();\n this.interpretProvider = new providers_1.AmazonAIInterpretPredictionsProvider();\n }\n getModuleName() {\n return 'Predictions';\n }\n interpret(input) {\n return this.interpretProvider.interpret(input);\n }\n convert(input) {\n return this.convertProvider.convert(input);\n }\n identify(input) {\n return this.identifyProvider.identify(input);\n }\n}\nexports.PredictionsClass = PredictionsClass;\nexports.Predictions = new PredictionsClass();\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AACxD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3C,MAAM,gBAAgB,CAAC;AACvB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,kCAAkC,EAAE,CAAC;AACpF,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,CAAC,mCAAmC,EAAE,CAAC;AACtF,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,oCAAoC,EAAE,CAAC;AACxF,KAAK;AACL,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,KAAK;AACL,CAAC;AACD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC5C,OAAO,CAAC,WAAW,GAAG,IAAI,gBAAgB,EAAE;;"}
1
+ {"version":3,"file":"Predictions.js","sources":["../../src/Predictions.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Predictions = exports.PredictionsClass = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst core_1 = require(\"@aws-amplify/core\");\nconst providers_1 = require(\"./providers\");\nconst logger = new core_1.ConsoleLogger('Predictions');\nclass PredictionsClass {\n constructor() {\n this.convertProvider = new providers_1.AmazonAIConvertPredictionsProvider();\n this.identifyProvider = new providers_1.AmazonAIIdentifyPredictionsProvider();\n this.interpretProvider = new providers_1.AmazonAIInterpretPredictionsProvider();\n }\n getModuleName() {\n return 'Predictions';\n }\n interpret(input) {\n return this.interpretProvider.interpret(input);\n }\n convert(input) {\n return this.convertProvider.convert(input);\n }\n identify(input) {\n return this.identifyProvider.identify(input);\n }\n}\nexports.PredictionsClass = PredictionsClass;\nexports.Predictions = new PredictionsClass();\n"],"names":[],"mappings":";;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AACxD;AACA;AACA,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5B,IAAI,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE;AACvD,MAAM,gBAAgB,CAAC;AACvB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,kCAAkC,EAAE,CAAC;AACpF,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,CAAC,mCAAmC,EAAE,CAAC;AACtF,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,oCAAoC,EAAE,CAAC;AACxF,KAAK;AACL,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,KAAK;AACL,CAAC;AACD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC5C,OAAO,CAAC,WAAW,GAAG,IAAI,gBAAgB,EAAE;;"}
@@ -4,13 +4,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.AmazonAIConvertPredictionsProvider = void 0;
5
5
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
6
  // SPDX-License-Identifier: Apache-2.0
7
- const buffer_1 = require("buffer");
8
7
  const core_1 = require("@aws-amplify/core");
9
8
  const utils_1 = require("@aws-amplify/core/internals/utils");
10
9
  const client_polly_1 = require("@aws-sdk/client-polly");
11
10
  const client_translate_1 = require("@aws-sdk/client-translate");
12
11
  const eventstream_codec_1 = require("@smithy/eventstream-codec");
13
12
  const util_utf8_1 = require("@smithy/util-utf8");
13
+ const buffer_1 = require("buffer");
14
14
  const validation_1 = require("../errors/types/validation");
15
15
  const assertValidationError_1 = require("../errors/utils/assertValidationError");
16
16
  const types_1 = require("../types");
@@ -94,6 +94,7 @@ class AmazonAIConvertPredictionsProvider {
94
94
  VoiceId: voiceId,
95
95
  TextType: 'text',
96
96
  SampleRate: '24000',
97
+ // tslint:disable-next-line: align
97
98
  });
98
99
  const data = await this.pollyClient.send(synthesizeSpeechCommand);
99
100
  const response = new Response(data.AudioStream);
@@ -166,7 +167,7 @@ class AmazonAIConvertPredictionsProvider {
166
167
  return decodedMessage;
167
168
  }
168
169
  sendDataToTranscribe({ connection, raw, languageCode, }) {
169
- return new Promise((resolve, reject) => {
170
+ return new Promise((res, rej) => {
170
171
  let fullText = '';
171
172
  connection.onmessage = message => {
172
173
  try {
@@ -177,16 +178,16 @@ class AmazonAIConvertPredictionsProvider {
177
178
  }
178
179
  catch (err) {
179
180
  logger.debug(err);
180
- reject(err);
181
+ rej(err);
181
182
  }
182
183
  };
183
184
  connection.onerror = errorEvent => {
184
185
  logger.debug({ errorEvent });
185
- reject(new Error('failed to transcribe, network error'));
186
+ rej('failed to transcribe, network error');
186
187
  };
187
188
  connection.onclose = closeEvent => {
188
189
  logger.debug({ closeEvent });
189
- resolve(fullText.trim());
190
+ return res(fullText.trim());
190
191
  };
191
192
  logger.debug({ raw });
192
193
  if (Array.isArray(raw)) {
@@ -260,8 +261,7 @@ class AmazonAIConvertPredictionsProvider {
260
261
  let offsetBuffer = 0;
261
262
  while (offsetResult < result.length) {
262
263
  const nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
263
- let accum = 0;
264
- let count = 0;
264
+ let accum = 0, count = 0;
265
265
  for (let i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {
266
266
  accum += buffer[i];
267
267
  count++;
@@ -273,7 +273,7 @@ class AmazonAIConvertPredictionsProvider {
273
273
  return result;
274
274
  }
275
275
  openConnectionWithTranscribe({ credentials, region, languageCode, }) {
276
- return new Promise((resolve, _reject) => {
276
+ return new Promise(async (res, rej) => {
277
277
  const signedUrl = this.generateTranscribeUrl({
278
278
  credentials,
279
279
  region,
@@ -284,7 +284,7 @@ class AmazonAIConvertPredictionsProvider {
284
284
  connection.binaryType = 'arraybuffer';
285
285
  connection.onopen = () => {
286
286
  logger.debug('connected');
287
- resolve(connection);
287
+ res(connection);
288
288
  };
289
289
  });
290
290
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AmazonAIConvertPredictionsProvider.js","sources":["../../../src/providers/AmazonAIConvertPredictionsProvider.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AmazonAIConvertPredictionsProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst buffer_1 = require(\"buffer\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst client_polly_1 = require(\"@aws-sdk/client-polly\");\nconst client_translate_1 = require(\"@aws-sdk/client-translate\");\nconst eventstream_codec_1 = require(\"@smithy/eventstream-codec\");\nconst util_utf8_1 = require(\"@smithy/util-utf8\");\nconst validation_1 = require(\"../errors/types/validation\");\nconst assertValidationError_1 = require(\"../errors/utils/assertValidationError\");\nconst types_1 = require(\"../types\");\nconst logger = new core_1.ConsoleLogger('AmazonAIConvertPredictionsProvider');\nconst eventBuilder = new eventstream_codec_1.EventStreamCodec(util_utf8_1.toUtf8, util_utf8_1.fromUtf8);\nconst LANGUAGES_CODE_IN_8KHZ = ['fr-FR', 'en-AU', 'en-GB', 'fr-CA'];\nclass AmazonAIConvertPredictionsProvider {\n constructor() {\n this.inputSampleRate = 44100;\n }\n getProviderName() {\n return 'AmazonAIConvertPredictionsProvider';\n }\n convert(input) {\n (0, assertValidationError_1.assertValidationError)((0, types_1.isValidConvertInput)(input), validation_1.PredictionsValidationErrorCode.InvalidInput);\n if ((0, types_1.isTranslateTextInput)(input)) {\n logger.debug('translateText');\n return this.translateText(input);\n }\n else if ((0, types_1.isTextToSpeechInput)(input)) {\n logger.debug('textToSpeech');\n return this.convertTextToSpeech(input);\n }\n else {\n logger.debug('textToSpeech');\n return this.convertSpeechToText(input);\n }\n }\n async translateText(input) {\n logger.debug('Starting translation');\n const { translateText = {} } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!translateText.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults = {}, region } = translateText;\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { sourceLanguage, targetLanguage } = defaults;\n const sourceLanguageCode = input.translateText?.source?.language ?? sourceLanguage;\n const targetLanguageCode = input.translateText?.targetLanguage ?? targetLanguage;\n (0, assertValidationError_1.assertValidationError)(!!sourceLanguageCode, validation_1.PredictionsValidationErrorCode.NoSourceLanguage);\n (0, assertValidationError_1.assertValidationError)(!!targetLanguageCode, validation_1.PredictionsValidationErrorCode.NoTargetLanguage);\n this.translateClient = new client_translate_1.TranslateClient({\n region,\n credentials,\n customUserAgent: (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Convert,\n }),\n });\n const translateTextCommand = new client_translate_1.TranslateTextCommand({\n SourceLanguageCode: sourceLanguageCode,\n TargetLanguageCode: targetLanguageCode,\n Text: input.translateText?.source?.text,\n });\n const data = await this.translateClient.send(translateTextCommand);\n return {\n text: data.TranslatedText,\n language: data.TargetLanguageCode,\n };\n }\n async convertTextToSpeech(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n (0, assertValidationError_1.assertValidationError)(!!input.textToSpeech?.source, validation_1.PredictionsValidationErrorCode.NoSource);\n const { speechGenerator } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!speechGenerator?.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults = {}, region } = speechGenerator;\n const { voiceId: defaultVoiceId } = defaults;\n const voiceId = input.textToSpeech?.voiceId ?? defaultVoiceId;\n (0, assertValidationError_1.assertValidationError)(!!voiceId, validation_1.PredictionsValidationErrorCode.NoVoiceId);\n this.pollyClient = new client_polly_1.PollyClient({\n region,\n credentials,\n customUserAgent: (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Convert,\n }),\n });\n const synthesizeSpeechCommand = new client_polly_1.SynthesizeSpeechCommand({\n OutputFormat: 'mp3',\n Text: input.textToSpeech?.source?.text,\n VoiceId: voiceId,\n TextType: 'text',\n SampleRate: '24000',\n });\n const data = await this.pollyClient.send(synthesizeSpeechCommand);\n const response = new Response(data.AudioStream);\n const arrayBuffer = await response.arrayBuffer();\n const blob = new Blob([arrayBuffer], {\n type: data.ContentType,\n });\n const url = URL.createObjectURL(blob);\n return {\n speech: { url },\n audioStream: arrayBuffer,\n text: input.textToSpeech?.source?.text,\n };\n }\n async convertSpeechToText(input) {\n logger.debug('starting transcription..');\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { transcription } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!transcription?.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults, region } = transcription;\n const language = input.transcription?.language ?? defaults?.language;\n (0, assertValidationError_1.assertValidationError)(!!language, validation_1.PredictionsValidationErrorCode.NoLanguage);\n const source = input.transcription?.source;\n (0, assertValidationError_1.assertValidationError)((0, types_1.isConvertBytesSource)(source), validation_1.PredictionsValidationErrorCode.InvalidSource);\n const connection = await this.openConnectionWithTranscribe({\n credentials,\n region,\n languageCode: language,\n });\n const fullText = await this.sendDataToTranscribe({\n connection,\n raw: source.bytes,\n languageCode: language,\n });\n return {\n transcription: {\n fullText,\n },\n };\n }\n static serializeDataFromTranscribe(message) {\n let decodedMessage = '';\n const transcribeMessage = eventBuilder.decode(buffer_1.Buffer.from(message.data));\n const transcribeMessageJson = JSON.parse((0, util_utf8_1.toUtf8)(transcribeMessage.body));\n if (transcribeMessage.headers[':message-type'].value === 'exception') {\n logger.debug('exception', JSON.stringify(transcribeMessageJson.Message, null, 2));\n throw new Error(transcribeMessageJson.Message);\n }\n else if (transcribeMessage.headers[':message-type'].value === 'event') {\n if (transcribeMessageJson.Transcript.Results.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].Alternatives.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].Alternatives[0]\n .Transcript.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].IsPartial === false) {\n decodedMessage =\n transcribeMessageJson.Transcript.Results[0].Alternatives[0]\n .Transcript + '\\n';\n logger.debug({ decodedMessage });\n }\n else {\n logger.debug({\n transcript: transcribeMessageJson.Transcript.Results[0].Alternatives[0],\n });\n }\n }\n }\n }\n }\n return decodedMessage;\n }\n sendDataToTranscribe({ connection, raw, languageCode, }) {\n return new Promise((resolve, reject) => {\n let fullText = '';\n connection.onmessage = message => {\n try {\n const decodedMessage = AmazonAIConvertPredictionsProvider.serializeDataFromTranscribe(message);\n if (decodedMessage) {\n fullText += decodedMessage + ' ';\n }\n }\n catch (err) {\n logger.debug(err);\n reject(err);\n }\n };\n connection.onerror = errorEvent => {\n logger.debug({ errorEvent });\n reject(new Error('failed to transcribe, network error'));\n };\n connection.onclose = closeEvent => {\n logger.debug({ closeEvent });\n resolve(fullText.trim());\n };\n logger.debug({ raw });\n if (Array.isArray(raw)) {\n for (let i = 0; i < raw.length - 1023; i += 1024) {\n const data = raw.slice(i, i + 1024);\n this.sendEncodedDataToTranscribe(connection, data, languageCode);\n }\n }\n else {\n // If Buffer\n this.sendEncodedDataToTranscribe(connection, raw, languageCode);\n }\n // sending end frame\n const endFrameEventMessage = this.getAudioEventMessage(buffer_1.Buffer.from([]));\n const endFrameBinary = eventBuilder.encode(endFrameEventMessage);\n connection.send(endFrameBinary);\n });\n }\n sendEncodedDataToTranscribe(connection, data, languageCode) {\n const downsampledBuffer = this.downsampleBuffer({\n buffer: data,\n outputSampleRate: LANGUAGES_CODE_IN_8KHZ.includes(languageCode)\n ? 8000\n : 16000,\n });\n const pcmEncodedBuffer = this.pcmEncode(downsampledBuffer);\n const audioEventMessage = this.getAudioEventMessage(buffer_1.Buffer.from(pcmEncodedBuffer));\n const binary = eventBuilder.encode(audioEventMessage);\n connection.send(binary);\n }\n getAudioEventMessage(buffer) {\n const audioEventMessage = {\n body: buffer,\n headers: {\n ':message-type': {\n type: 'string',\n value: 'event',\n },\n ':event-type': {\n type: 'string',\n value: 'AudioEvent',\n },\n },\n };\n return audioEventMessage;\n }\n pcmEncode(input) {\n let offset = 0;\n // ArrayBuffer cannot be processed using length property\n if (input instanceof ArrayBuffer) {\n return input;\n }\n const buffer = new ArrayBuffer(input.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < input.length; i++, offset += 2) {\n const s = Math.max(-1, Math.min(1, input[i]));\n view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return buffer;\n }\n downsampleBuffer({ buffer, outputSampleRate = 16000, }) {\n // Cannot process ArrayBuffer using length property\n if (outputSampleRate === this.inputSampleRate ||\n buffer instanceof ArrayBuffer) {\n return buffer;\n }\n const sampleRateRatio = this.inputSampleRate / outputSampleRate;\n const newLength = Math.round(buffer.length / sampleRateRatio);\n const result = new Float32Array(newLength);\n let offsetResult = 0;\n let offsetBuffer = 0;\n while (offsetResult < result.length) {\n const nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);\n let accum = 0;\n let count = 0;\n for (let i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n accum += buffer[i];\n count++;\n }\n result[offsetResult] = accum / count;\n offsetResult++;\n offsetBuffer = nextOffsetBuffer;\n }\n return result;\n }\n openConnectionWithTranscribe({ credentials, region, languageCode, }) {\n return new Promise((resolve, _reject) => {\n const signedUrl = this.generateTranscribeUrl({\n credentials,\n region,\n languageCode,\n });\n logger.debug('connecting...');\n const connection = new WebSocket(signedUrl);\n connection.binaryType = 'arraybuffer';\n connection.onopen = () => {\n logger.debug('connected');\n resolve(connection);\n };\n });\n }\n generateTranscribeUrl({ credentials: { accessKeyId, secretAccessKey, sessionToken }, region, languageCode, }) {\n const credentials = {\n access_key: accessKeyId,\n secret_key: secretAccessKey,\n session_token: sessionToken,\n };\n const url = [\n `wss://transcribestreaming.${region}.amazonaws.com:8443`,\n '/stream-transcription-websocket?',\n `media-encoding=pcm&`,\n `sample-rate=${LANGUAGES_CODE_IN_8KHZ.includes(languageCode) ? '8000' : '16000'}&`,\n `language-code=${languageCode}`,\n ].join('');\n const signedUrl = utils_1.Signer.signUrl(url, credentials, { region, service: 'transcribe' }, 300);\n return signedUrl;\n }\n}\nexports.AmazonAIConvertPredictionsProvider = AmazonAIConvertPredictionsProvider;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AmazonAIConvertPredictionsProvider.js","sources":["../../../src/providers/AmazonAIConvertPredictionsProvider.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AmazonAIConvertPredictionsProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst client_polly_1 = require(\"@aws-sdk/client-polly\");\nconst client_translate_1 = require(\"@aws-sdk/client-translate\");\nconst eventstream_codec_1 = require(\"@smithy/eventstream-codec\");\nconst util_utf8_1 = require(\"@smithy/util-utf8\");\nconst buffer_1 = require(\"buffer\");\nconst validation_1 = require(\"../errors/types/validation\");\nconst assertValidationError_1 = require(\"../errors/utils/assertValidationError\");\nconst types_1 = require(\"../types\");\nconst logger = new core_1.ConsoleLogger('AmazonAIConvertPredictionsProvider');\nconst eventBuilder = new eventstream_codec_1.EventStreamCodec(util_utf8_1.toUtf8, util_utf8_1.fromUtf8);\nconst LANGUAGES_CODE_IN_8KHZ = ['fr-FR', 'en-AU', 'en-GB', 'fr-CA'];\nclass AmazonAIConvertPredictionsProvider {\n constructor() {\n this.inputSampleRate = 44100;\n }\n getProviderName() {\n return 'AmazonAIConvertPredictionsProvider';\n }\n convert(input) {\n (0, assertValidationError_1.assertValidationError)((0, types_1.isValidConvertInput)(input), validation_1.PredictionsValidationErrorCode.InvalidInput);\n if ((0, types_1.isTranslateTextInput)(input)) {\n logger.debug('translateText');\n return this.translateText(input);\n }\n else if ((0, types_1.isTextToSpeechInput)(input)) {\n logger.debug('textToSpeech');\n return this.convertTextToSpeech(input);\n }\n else {\n logger.debug('textToSpeech');\n return this.convertSpeechToText(input);\n }\n }\n async translateText(input) {\n logger.debug('Starting translation');\n const { translateText = {} } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!translateText.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults = {}, region } = translateText;\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { sourceLanguage, targetLanguage } = defaults;\n const sourceLanguageCode = input.translateText?.source?.language ?? sourceLanguage;\n const targetLanguageCode = input.translateText?.targetLanguage ?? targetLanguage;\n (0, assertValidationError_1.assertValidationError)(!!sourceLanguageCode, validation_1.PredictionsValidationErrorCode.NoSourceLanguage);\n (0, assertValidationError_1.assertValidationError)(!!targetLanguageCode, validation_1.PredictionsValidationErrorCode.NoTargetLanguage);\n this.translateClient = new client_translate_1.TranslateClient({\n region,\n credentials,\n customUserAgent: (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Convert,\n }),\n });\n const translateTextCommand = new client_translate_1.TranslateTextCommand({\n SourceLanguageCode: sourceLanguageCode,\n TargetLanguageCode: targetLanguageCode,\n Text: input.translateText?.source?.text,\n });\n const data = await this.translateClient.send(translateTextCommand);\n return {\n text: data.TranslatedText,\n language: data.TargetLanguageCode,\n };\n }\n async convertTextToSpeech(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n (0, assertValidationError_1.assertValidationError)(!!input.textToSpeech?.source, validation_1.PredictionsValidationErrorCode.NoSource);\n const { speechGenerator } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!speechGenerator?.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults = {}, region } = speechGenerator;\n const { voiceId: defaultVoiceId } = defaults;\n const voiceId = input.textToSpeech?.voiceId ?? defaultVoiceId;\n (0, assertValidationError_1.assertValidationError)(!!voiceId, validation_1.PredictionsValidationErrorCode.NoVoiceId);\n this.pollyClient = new client_polly_1.PollyClient({\n region,\n credentials,\n customUserAgent: (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Convert,\n }),\n });\n const synthesizeSpeechCommand = new client_polly_1.SynthesizeSpeechCommand({\n OutputFormat: 'mp3',\n Text: input.textToSpeech?.source?.text,\n VoiceId: voiceId,\n TextType: 'text',\n SampleRate: '24000',\n // tslint:disable-next-line: align\n });\n const data = await this.pollyClient.send(synthesizeSpeechCommand);\n const response = new Response(data.AudioStream);\n const arrayBuffer = await response.arrayBuffer();\n const blob = new Blob([arrayBuffer], {\n type: data.ContentType,\n });\n const url = URL.createObjectURL(blob);\n return {\n speech: { url },\n audioStream: arrayBuffer,\n text: input.textToSpeech?.source?.text,\n };\n }\n async convertSpeechToText(input) {\n logger.debug('starting transcription..');\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { transcription } = core_1.Amplify.getConfig().Predictions?.convert ?? {};\n (0, assertValidationError_1.assertValidationError)(!!transcription?.region, validation_1.PredictionsValidationErrorCode.NoRegion);\n const { defaults, region } = transcription;\n const language = input.transcription?.language ?? defaults?.language;\n (0, assertValidationError_1.assertValidationError)(!!language, validation_1.PredictionsValidationErrorCode.NoLanguage);\n const source = input.transcription?.source;\n (0, assertValidationError_1.assertValidationError)((0, types_1.isConvertBytesSource)(source), validation_1.PredictionsValidationErrorCode.InvalidSource);\n const connection = await this.openConnectionWithTranscribe({\n credentials,\n region,\n languageCode: language,\n });\n const fullText = await this.sendDataToTranscribe({\n connection,\n raw: source.bytes,\n languageCode: language,\n });\n return {\n transcription: {\n fullText,\n },\n };\n }\n static serializeDataFromTranscribe(message) {\n let decodedMessage = '';\n const transcribeMessage = eventBuilder.decode(buffer_1.Buffer.from(message.data));\n const transcribeMessageJson = JSON.parse((0, util_utf8_1.toUtf8)(transcribeMessage.body));\n if (transcribeMessage.headers[':message-type'].value === 'exception') {\n logger.debug('exception', JSON.stringify(transcribeMessageJson.Message, null, 2));\n throw new Error(transcribeMessageJson.Message);\n }\n else if (transcribeMessage.headers[':message-type'].value === 'event') {\n if (transcribeMessageJson.Transcript.Results.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].Alternatives.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].Alternatives[0]\n .Transcript.length > 0) {\n if (transcribeMessageJson.Transcript.Results[0].IsPartial === false) {\n decodedMessage =\n transcribeMessageJson.Transcript.Results[0].Alternatives[0]\n .Transcript + '\\n';\n logger.debug({ decodedMessage });\n }\n else {\n logger.debug({\n transcript: transcribeMessageJson.Transcript.Results[0].Alternatives[0],\n });\n }\n }\n }\n }\n }\n return decodedMessage;\n }\n sendDataToTranscribe({ connection, raw, languageCode, }) {\n return new Promise((res, rej) => {\n let fullText = '';\n connection.onmessage = message => {\n try {\n const decodedMessage = AmazonAIConvertPredictionsProvider.serializeDataFromTranscribe(message);\n if (decodedMessage) {\n fullText += decodedMessage + ' ';\n }\n }\n catch (err) {\n logger.debug(err);\n rej(err);\n }\n };\n connection.onerror = errorEvent => {\n logger.debug({ errorEvent });\n rej('failed to transcribe, network error');\n };\n connection.onclose = closeEvent => {\n logger.debug({ closeEvent });\n return res(fullText.trim());\n };\n logger.debug({ raw });\n if (Array.isArray(raw)) {\n for (let i = 0; i < raw.length - 1023; i += 1024) {\n const data = raw.slice(i, i + 1024);\n this.sendEncodedDataToTranscribe(connection, data, languageCode);\n }\n }\n else {\n // If Buffer\n this.sendEncodedDataToTranscribe(connection, raw, languageCode);\n }\n // sending end frame\n const endFrameEventMessage = this.getAudioEventMessage(buffer_1.Buffer.from([]));\n const endFrameBinary = eventBuilder.encode(endFrameEventMessage);\n connection.send(endFrameBinary);\n });\n }\n sendEncodedDataToTranscribe(connection, data, languageCode) {\n const downsampledBuffer = this.downsampleBuffer({\n buffer: data,\n outputSampleRate: LANGUAGES_CODE_IN_8KHZ.includes(languageCode)\n ? 8000\n : 16000,\n });\n const pcmEncodedBuffer = this.pcmEncode(downsampledBuffer);\n const audioEventMessage = this.getAudioEventMessage(buffer_1.Buffer.from(pcmEncodedBuffer));\n const binary = eventBuilder.encode(audioEventMessage);\n connection.send(binary);\n }\n getAudioEventMessage(buffer) {\n const audioEventMessage = {\n body: buffer,\n headers: {\n ':message-type': {\n type: 'string',\n value: 'event',\n },\n ':event-type': {\n type: 'string',\n value: 'AudioEvent',\n },\n },\n };\n return audioEventMessage;\n }\n pcmEncode(input) {\n let offset = 0;\n // ArrayBuffer cannot be processed using length property\n if (input instanceof ArrayBuffer) {\n return input;\n }\n const buffer = new ArrayBuffer(input.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < input.length; i++, offset += 2) {\n const s = Math.max(-1, Math.min(1, input[i]));\n view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return buffer;\n }\n downsampleBuffer({ buffer, outputSampleRate = 16000, }) {\n // Cannot process ArrayBuffer using length property\n if (outputSampleRate === this.inputSampleRate ||\n buffer instanceof ArrayBuffer) {\n return buffer;\n }\n const sampleRateRatio = this.inputSampleRate / outputSampleRate;\n const newLength = Math.round(buffer.length / sampleRateRatio);\n const result = new Float32Array(newLength);\n let offsetResult = 0;\n let offsetBuffer = 0;\n while (offsetResult < result.length) {\n const nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);\n let accum = 0, count = 0;\n for (let i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n accum += buffer[i];\n count++;\n }\n result[offsetResult] = accum / count;\n offsetResult++;\n offsetBuffer = nextOffsetBuffer;\n }\n return result;\n }\n openConnectionWithTranscribe({ credentials, region, languageCode, }) {\n return new Promise(async (res, rej) => {\n const signedUrl = this.generateTranscribeUrl({\n credentials,\n region,\n languageCode,\n });\n logger.debug('connecting...');\n const connection = new WebSocket(signedUrl);\n connection.binaryType = 'arraybuffer';\n connection.onopen = () => {\n logger.debug('connected');\n res(connection);\n };\n });\n }\n generateTranscribeUrl({ credentials: { accessKeyId, secretAccessKey, sessionToken }, region, languageCode, }) {\n const credentials = {\n access_key: accessKeyId,\n secret_key: secretAccessKey,\n session_token: sessionToken,\n };\n const url = [\n `wss://transcribestreaming.${region}.amazonaws.com:8443`,\n '/stream-transcription-websocket?',\n `media-encoding=pcm&`,\n `sample-rate=${LANGUAGES_CODE_IN_8KHZ.includes(languageCode) ? '8000' : '16000'}&`,\n `language-code=${languageCode}`,\n ].join('');\n const signedUrl = utils_1.Signer.signUrl(url, credentials, { region, service: 'transcribe' }, 300);\n return signedUrl;\n }\n}\nexports.AmazonAIConvertPredictionsProvider = AmazonAIConvertPredictionsProvider;\n"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ class AmazonAIIdentifyPredictionsProvider {
42
42
  * @return {Promise<Image>} - Promise resolving to the converted source object.
43
43
  */
44
44
  configureSource(source) {
45
- return new Promise((resolve, reject) => {
45
+ return new Promise((res, rej) => {
46
46
  if ((0, types_1.isStorageSource)(source)) {
47
47
  const storageConfig = {
48
48
  accessLevel: source.level,
@@ -53,46 +53,40 @@ class AmazonAIIdentifyPredictionsProvider {
53
53
  const parser = /https:\/\/([a-zA-Z0-9%\-_.]+)\.s3\.[A-Za-z0-9%\-._~]+\/([a-zA-Z0-9%\-._~/]+)\?/;
54
54
  const parsedURL = value.url.toString().match(parser) ?? '';
55
55
  if (parsedURL.length < 3)
56
- reject(new Error('Invalid S3 key was given.'));
57
- resolve({
56
+ rej('Invalid S3 key was given.');
57
+ res({
58
58
  S3Object: {
59
59
  Bucket: parsedURL[1],
60
60
  Name: decodeURIComponent(parsedURL[2]),
61
61
  },
62
62
  });
63
63
  })
64
- .catch(err => {
65
- reject(err);
66
- });
64
+ .catch(err => rej(err));
67
65
  }
68
66
  else if ((0, types_1.isFileSource)(source)) {
69
67
  (0, Utils_1.blobToArrayBuffer)(source.file)
70
68
  .then(buffer => {
71
- resolve({ Bytes: new Uint8Array(buffer) });
69
+ res({ Bytes: new Uint8Array(buffer) });
72
70
  })
73
- .catch(err => {
74
- reject(err);
75
- });
71
+ .catch(err => rej(err));
76
72
  }
77
73
  else if ((0, types_1.isIdentifyBytesSource)(source)) {
78
- const { bytes } = source;
74
+ const bytes = source.bytes;
79
75
  if (bytes instanceof Blob) {
80
76
  (0, Utils_1.blobToArrayBuffer)(bytes)
81
77
  .then(buffer => {
82
- resolve({ Bytes: new Uint8Array(buffer) });
78
+ res({ Bytes: new Uint8Array(buffer) });
83
79
  })
84
- .catch(err => {
85
- reject(err);
86
- });
80
+ .catch(err => rej(err));
87
81
  }
88
82
  if (bytes instanceof ArrayBuffer || bytes instanceof Buffer) {
89
- resolve({ Bytes: new Uint8Array(bytes) });
83
+ res({ Bytes: new Uint8Array(bytes) });
90
84
  }
91
85
  // everything else can be directly passed to Rekognition / Textract.
92
- resolve({ Bytes: bytes });
86
+ res({ Bytes: bytes });
93
87
  }
94
88
  else {
95
- reject(new Error('Input source is not configured correctly.'));
89
+ rej('Input source is not configured correctly.');
96
90
  }
97
91
  });
98
92
  }
@@ -118,7 +112,8 @@ class AmazonAIIdentifyPredictionsProvider {
118
112
  credentials,
119
113
  customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),
120
114
  });
121
- const inputDocument = await this.configureSource(input.text?.source);
115
+ let inputDocument;
116
+ inputDocument = await this.configureSource(input.text?.source);
122
117
  // get default value if format isn't specified in the input.
123
118
  const format = input.text?.format ?? configFormat;
124
119
  const featureTypes = []; // structures we want to analyze (e.g. [TABLES, FORMS]).
@@ -200,8 +195,8 @@ class AmazonAIIdentifyPredictionsProvider {
200
195
  }
201
196
  /**
202
197
  * Calls Rekognition.detectLabels and organizes the returned data.
203
- * @param param - parameters as {@link DetectLabelsCommandInput} to be passed onto Rekognition
204
- * @return a promise resolving to organized detectLabels response as {@link IdentifyLabelsOutput}.
198
+ * @param {DetectLabelsInput} param - parameter to be passed onto Rekognition
199
+ * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to organized detectLabels response.
205
200
  */
206
201
  async detectLabels(param) {
207
202
  const detectLabelsCommand = new client_rekognition_1.DetectLabelsCommand(param);
@@ -223,8 +218,8 @@ class AmazonAIIdentifyPredictionsProvider {
223
218
  }
224
219
  /**
225
220
  * Calls Rekognition.detectModerationLabels and organizes the returned data.
226
- * @param param parameter to be passed onto Rekognition as {@link DetectModerationLabelsCommandInput}
227
- * @return a promise resolving to organized detectModerationLabels response as {@link IdentifyLabelsOutput}.
221
+ * @param {Rekognition.DetectLabelsRequest} param - Parameter to be passed onto Rekognition
222
+ * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to organized detectModerationLabels response.
228
223
  */
229
224
  async detectModerationLabels(param) {
230
225
  const detectModerationLabelsCommand = new client_rekognition_1.DetectModerationLabelsCommand(param);
@@ -239,8 +234,8 @@ class AmazonAIIdentifyPredictionsProvider {
239
234
  /**
240
235
  * Identify faces within an image that is provided as input, and match faces from a collection
241
236
  * or identify celebrities.
242
- * @param input - object of {@link IdentifyEntitiesInput} containing the source image and face match options.
243
- * @return a promise resolving to identify results as {@link IdentifyEntitiesOutput}.
237
+ * @param {IdentifyEntityInput} input - object containing the source image and face match options.
238
+ * @return {Promise<IdentifyEntityOutput>} Promise resolving to identify results.
244
239
  */
245
240
  async identifyEntities(input) {
246
241
  const { credentials } = await (0, core_1.fetchAuthSession)();
@@ -1 +1 @@
1
- {"version":3,"file":"AmazonAIIdentifyPredictionsProvider.js","sources":["../../../src/providers/AmazonAIIdentifyPredictionsProvider.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AmazonAIIdentifyPredictionsProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst storage_1 = require(\"@aws-amplify/storage\");\nconst client_rekognition_1 = require(\"@aws-sdk/client-rekognition\");\nconst client_textract_1 = require(\"@aws-sdk/client-textract\");\nconst validation_1 = require(\"../errors/types/validation\");\nconst assertValidationError_1 = require(\"../errors/utils/assertValidationError\");\nconst types_1 = require(\"../types\");\nconst IdentifyTextUtils_1 = require(\"./IdentifyTextUtils\");\nconst Utils_1 = require(\"./Utils\");\nconst logger = new core_1.ConsoleLogger('AmazonAIIdentifyPredictionsProvider');\nclass AmazonAIIdentifyPredictionsProvider {\n getProviderName() {\n return 'AmazonAIIdentifyPredictionsProvider';\n }\n identify(input) {\n (0, assertValidationError_1.assertValidationError)((0, types_1.isValidIdentifyInput)(input), validation_1.PredictionsValidationErrorCode.InvalidInput);\n if ((0, types_1.isIdentifyTextInput)(input)) {\n logger.debug('identifyText');\n return this.identifyText(input);\n }\n else if ((0, types_1.isIdentifyLabelsInput)(input)) {\n logger.debug('identifyLabels');\n return this.identifyLabels(input);\n }\n else {\n logger.debug('identifyEntities');\n return this.identifyEntities(input);\n }\n }\n /**\n * Verify user input source and converts it into source object readable by Rekognition and Textract.\n * Note that Rekognition and Textract use the same source interface, so we need not worry about types.\n * @param {IdentifySource} source - User input source that directs to the object user wants\n * to identify (storage, file, or bytes).\n * @return {Promise<Image>} - Promise resolving to the converted source object.\n */\n configureSource(source) {\n return new Promise((resolve, reject) => {\n if ((0, types_1.isStorageSource)(source)) {\n const storageConfig = {\n accessLevel: source.level,\n targetIdentityId: source.identityId,\n };\n (0, storage_1.getUrl)({ key: source.key, options: storageConfig })\n .then(value => {\n const parser = /https:\\/\\/([a-zA-Z0-9%\\-_.]+)\\.s3\\.[A-Za-z0-9%\\-._~]+\\/([a-zA-Z0-9%\\-._~/]+)\\?/;\n const parsedURL = value.url.toString().match(parser) ?? '';\n if (parsedURL.length < 3)\n reject(new Error('Invalid S3 key was given.'));\n resolve({\n S3Object: {\n Bucket: parsedURL[1],\n Name: decodeURIComponent(parsedURL[2]),\n },\n });\n })\n .catch(err => {\n reject(err);\n });\n }\n else if ((0, types_1.isFileSource)(source)) {\n (0, Utils_1.blobToArrayBuffer)(source.file)\n .then(buffer => {\n resolve({ Bytes: new Uint8Array(buffer) });\n })\n .catch(err => {\n reject(err);\n });\n }\n else if ((0, types_1.isIdentifyBytesSource)(source)) {\n const { bytes } = source;\n if (bytes instanceof Blob) {\n (0, Utils_1.blobToArrayBuffer)(bytes)\n .then(buffer => {\n resolve({ Bytes: new Uint8Array(buffer) });\n })\n .catch(err => {\n reject(err);\n });\n }\n if (bytes instanceof ArrayBuffer || bytes instanceof Buffer) {\n resolve({ Bytes: new Uint8Array(bytes) });\n }\n // everything else can be directly passed to Rekognition / Textract.\n resolve({ Bytes: bytes });\n }\n else {\n reject(new Error('Input source is not configured correctly.'));\n }\n });\n }\n /**\n * Recognize text from real-world images and documents (plain text, forms and tables). Detects text in the input\n * image and converts it into machine-readable text.\n * @param {IdentifySource} source - Object containing the source image and feature types to analyze.\n * @return {Promise<IdentifyTextOutput>} - Promise resolving to object containing identified texts.\n */\n async identifyText(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyText = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', defaults = {} } = identifyText;\n const { format: configFormat = 'PLAIN' } = defaults;\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n this.textractClient = new client_textract_1.TextractClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n const inputDocument = await this.configureSource(input.text?.source);\n // get default value if format isn't specified in the input.\n const format = input.text?.format ?? configFormat;\n const featureTypes = []; // structures we want to analyze (e.g. [TABLES, FORMS]).\n if (format === 'FORM' || format === 'ALL')\n featureTypes.push('FORMS');\n if (format === 'TABLE' || format === 'ALL')\n featureTypes.push('TABLES');\n if (featureTypes.length === 0) {\n /**\n * Empty featureTypes indicates that we will identify plain text. We will use rekognition (suitable\n * for everyday images but has 50 word limit) first and see if reaches its word limit. If it does, then\n * we call textract and use the data that identify more words.\n */\n const textractParam = {\n Document: inputDocument,\n };\n const rekognitionParam = {\n Image: inputDocument,\n };\n const detectTextCommand = new client_rekognition_1.DetectTextCommand(rekognitionParam);\n const rekognitionData = await this.rekognitionClient.send(detectTextCommand);\n const rekognitionResponse = (0, IdentifyTextUtils_1.categorizeRekognitionBlocks)(rekognitionData.TextDetections);\n if (rekognitionResponse.text.words.length < 50) {\n // did not hit the word limit, return the data\n return rekognitionResponse;\n }\n const detectDocumentTextCommand = new client_textract_1.DetectDocumentTextCommand(textractParam);\n const { Blocks } = await this.textractClient.send(detectDocumentTextCommand);\n if ((rekognitionData.TextDetections?.length ?? 0) > (Blocks?.length ?? 0)) {\n return rekognitionResponse;\n }\n return (0, IdentifyTextUtils_1.categorizeTextractBlocks)(Blocks);\n }\n else {\n const param = {\n Document: inputDocument,\n FeatureTypes: featureTypes,\n };\n const analyzeDocumentCommand = new client_textract_1.AnalyzeDocumentCommand(param);\n const { Blocks } = await this.textractClient.send(analyzeDocumentCommand);\n return (0, IdentifyTextUtils_1.categorizeTextractBlocks)(Blocks);\n }\n }\n /**\n * Identify instances of real world entities from an image and if it contains unsafe content.\n * @param {IdentifyLabelsInput} input - Object containing the source image and entity type to identify.\n * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to an array of identified entities.\n */\n async identifyLabels(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyLabels = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', defaults = {} } = identifyLabels;\n const { type = 'LABELS' } = defaults;\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n const inputImage = await this.configureSource(input.labels?.source);\n const param = { Image: inputImage };\n const servicePromises = [];\n // get default argument\n const entityType = input.labels?.type ?? type;\n if (entityType === 'LABELS' || entityType === 'ALL') {\n servicePromises.push(this.detectLabels(param));\n }\n if (entityType === 'UNSAFE' || entityType === 'ALL') {\n servicePromises.push(this.detectModerationLabels(param));\n }\n return Promise.all(servicePromises).then(data => {\n let identifyResult = {};\n // concatenate resolved promises to a single object\n data.forEach(val => {\n identifyResult = { ...identifyResult, ...val };\n });\n return identifyResult;\n });\n }\n /**\n * Calls Rekognition.detectLabels and organizes the returned data.\n * @param param - parameters as {@link DetectLabelsCommandInput} to be passed onto Rekognition\n * @return a promise resolving to organized detectLabels response as {@link IdentifyLabelsOutput}.\n */\n async detectLabels(param) {\n const detectLabelsCommand = new client_rekognition_1.DetectLabelsCommand(param);\n const data = await this.rekognitionClient.send(detectLabelsCommand);\n if (!data.Labels)\n return {}; // no image was detected\n const detectLabelData = data.Labels.map(label => {\n const boxes = label.Instances?.map(instance => (0, Utils_1.makeCamelCase)(instance.BoundingBox)) || [];\n return {\n name: label.Name,\n boundingBoxes: boxes,\n metadata: {\n confidence: label.Confidence,\n parents: (0, Utils_1.makeCamelCaseArray)(label.Parents),\n },\n };\n });\n return { labels: detectLabelData };\n }\n /**\n * Calls Rekognition.detectModerationLabels and organizes the returned data.\n * @param param parameter to be passed onto Rekognition as {@link DetectModerationLabelsCommandInput}\n * @return a promise resolving to organized detectModerationLabels response as {@link IdentifyLabelsOutput}.\n */\n async detectModerationLabels(param) {\n const detectModerationLabelsCommand = new client_rekognition_1.DetectModerationLabelsCommand(param);\n const data = await this.rekognitionClient.send(detectModerationLabelsCommand);\n if (data.ModerationLabels?.length !== 0) {\n return { unsafe: 'YES' };\n }\n else {\n return { unsafe: 'NO' };\n }\n }\n /**\n * Identify faces within an image that is provided as input, and match faces from a collection\n * or identify celebrities.\n * @param input - object of {@link IdentifyEntitiesInput} containing the source image and face match options.\n * @return a promise resolving to identify results as {@link IdentifyEntitiesOutput}.\n */\n async identifyEntities(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyEntities = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', celebrityDetectionEnabled = false, defaults = {}, } = identifyEntities;\n const { collectionId: collectionIdConfig = '', maxEntities: maxFacesConfig = 50, } = defaults;\n // default arguments\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n const inputImage = await this.configureSource(input.entities?.source);\n const param = { Attributes: ['ALL'], Image: inputImage };\n if ((0, types_1.isIdentifyCelebrities)(input.entities) &&\n input.entities.celebrityDetection) {\n (0, assertValidationError_1.assertValidationError)(celebrityDetectionEnabled, validation_1.PredictionsValidationErrorCode.CelebrityDetectionNotEnabled);\n const recognizeCelebritiesCommand = new client_rekognition_1.RecognizeCelebritiesCommand(param);\n const data = await this.rekognitionClient.send(recognizeCelebritiesCommand);\n const faces = data.CelebrityFaces?.map(celebrity => ({\n boundingBox: (0, Utils_1.makeCamelCase)(celebrity.Face?.BoundingBox),\n landmarks: (0, Utils_1.makeCamelCaseArray)(celebrity.Face?.Landmarks),\n metadata: {\n ...(0, Utils_1.makeCamelCase)(celebrity, ['Id', 'Name', 'Urls']),\n pose: (0, Utils_1.makeCamelCase)(celebrity.Face?.Pose),\n },\n })) ?? [];\n return { entities: faces };\n }\n else if ((0, types_1.isIdentifyFromCollection)(input.entities) &&\n input.entities.collection) {\n const { collectionId = collectionIdConfig, maxEntities: maxFaces = maxFacesConfig, } = input.entities;\n // Concatenate additional parameters\n const updatedParam = {\n ...param,\n CollectionId: collectionId,\n MaxFaces: maxFaces,\n };\n const searchFacesByImageCommand = new client_rekognition_1.SearchFacesByImageCommand(updatedParam);\n const data = await this.rekognitionClient.send(searchFacesByImageCommand);\n const faces = data.FaceMatches?.map(match => {\n const externalImageId = match.Face?.ExternalImageId\n ? this.decodeExternalImageId(match.Face.ExternalImageId)\n : undefined;\n return {\n boundingBox: (0, Utils_1.makeCamelCase)(match.Face?.BoundingBox),\n metadata: {\n externalImageId,\n similarity: match.Similarity,\n },\n };\n }) ?? [];\n return { entities: faces };\n }\n else {\n const detectFacesCommand = new client_rekognition_1.DetectFacesCommand(param);\n const data = await this.rekognitionClient.send(detectFacesCommand);\n const faces = data.FaceDetails?.map(detail => {\n // face attributes keys we want to extract from Rekognition's response\n const attributeKeys = [\n 'Smile',\n 'Eyeglasses',\n 'Sunglasses',\n 'Gender',\n 'Beard',\n 'Mustache',\n 'EyesOpen',\n 'MouthOpen',\n ];\n const faceAttributes = (0, Utils_1.makeCamelCase)(detail, attributeKeys);\n faceAttributes.emotions = detail.Emotions?.map(emotion => emotion.Type);\n return {\n boundingBox: (0, Utils_1.makeCamelCase)(detail.BoundingBox),\n landmarks: (0, Utils_1.makeCamelCaseArray)(detail.Landmarks),\n ageRange: (0, Utils_1.makeCamelCase)(detail.AgeRange),\n attributes: faceAttributes,\n metadata: {\n confidence: detail.Confidence,\n pose: (0, Utils_1.makeCamelCase)(detail.Pose),\n },\n };\n }) ?? [];\n return { entities: faces };\n }\n }\n decodeExternalImageId(externalImageId) {\n return ('' + externalImageId).replace(/::/g, '/');\n }\n}\nexports.AmazonAIIdentifyPredictionsProvider = AmazonAIIdentifyPredictionsProvider;\nfunction _getPredictionsIdentifyAmplifyUserAgent() {\n return (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Identify,\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AmazonAIIdentifyPredictionsProvider.js","sources":["../../../src/providers/AmazonAIIdentifyPredictionsProvider.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AmazonAIIdentifyPredictionsProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst storage_1 = require(\"@aws-amplify/storage\");\nconst client_rekognition_1 = require(\"@aws-sdk/client-rekognition\");\nconst client_textract_1 = require(\"@aws-sdk/client-textract\");\nconst validation_1 = require(\"../errors/types/validation\");\nconst assertValidationError_1 = require(\"../errors/utils/assertValidationError\");\nconst types_1 = require(\"../types\");\nconst IdentifyTextUtils_1 = require(\"./IdentifyTextUtils\");\nconst Utils_1 = require(\"./Utils\");\nconst logger = new core_1.ConsoleLogger('AmazonAIIdentifyPredictionsProvider');\nclass AmazonAIIdentifyPredictionsProvider {\n getProviderName() {\n return 'AmazonAIIdentifyPredictionsProvider';\n }\n identify(input) {\n (0, assertValidationError_1.assertValidationError)((0, types_1.isValidIdentifyInput)(input), validation_1.PredictionsValidationErrorCode.InvalidInput);\n if ((0, types_1.isIdentifyTextInput)(input)) {\n logger.debug('identifyText');\n return this.identifyText(input);\n }\n else if ((0, types_1.isIdentifyLabelsInput)(input)) {\n logger.debug('identifyLabels');\n return this.identifyLabels(input);\n }\n else {\n logger.debug('identifyEntities');\n return this.identifyEntities(input);\n }\n }\n /**\n * Verify user input source and converts it into source object readable by Rekognition and Textract.\n * Note that Rekognition and Textract use the same source interface, so we need not worry about types.\n * @param {IdentifySource} source - User input source that directs to the object user wants\n * to identify (storage, file, or bytes).\n * @return {Promise<Image>} - Promise resolving to the converted source object.\n */\n configureSource(source) {\n return new Promise((res, rej) => {\n if ((0, types_1.isStorageSource)(source)) {\n const storageConfig = {\n accessLevel: source.level,\n targetIdentityId: source.identityId,\n };\n (0, storage_1.getUrl)({ key: source.key, options: storageConfig })\n .then(value => {\n const parser = /https:\\/\\/([a-zA-Z0-9%\\-_.]+)\\.s3\\.[A-Za-z0-9%\\-._~]+\\/([a-zA-Z0-9%\\-._~/]+)\\?/;\n const parsedURL = value.url.toString().match(parser) ?? '';\n if (parsedURL.length < 3)\n rej('Invalid S3 key was given.');\n res({\n S3Object: {\n Bucket: parsedURL[1],\n Name: decodeURIComponent(parsedURL[2]),\n },\n });\n })\n .catch(err => rej(err));\n }\n else if ((0, types_1.isFileSource)(source)) {\n (0, Utils_1.blobToArrayBuffer)(source.file)\n .then(buffer => {\n res({ Bytes: new Uint8Array(buffer) });\n })\n .catch(err => rej(err));\n }\n else if ((0, types_1.isIdentifyBytesSource)(source)) {\n const bytes = source.bytes;\n if (bytes instanceof Blob) {\n (0, Utils_1.blobToArrayBuffer)(bytes)\n .then(buffer => {\n res({ Bytes: new Uint8Array(buffer) });\n })\n .catch(err => rej(err));\n }\n if (bytes instanceof ArrayBuffer || bytes instanceof Buffer) {\n res({ Bytes: new Uint8Array(bytes) });\n }\n // everything else can be directly passed to Rekognition / Textract.\n res({ Bytes: bytes });\n }\n else {\n rej('Input source is not configured correctly.');\n }\n });\n }\n /**\n * Recognize text from real-world images and documents (plain text, forms and tables). Detects text in the input\n * image and converts it into machine-readable text.\n * @param {IdentifySource} source - Object containing the source image and feature types to analyze.\n * @return {Promise<IdentifyTextOutput>} - Promise resolving to object containing identified texts.\n */\n async identifyText(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyText = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', defaults = {} } = identifyText;\n const { format: configFormat = 'PLAIN' } = defaults;\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n this.textractClient = new client_textract_1.TextractClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n let inputDocument;\n inputDocument = await this.configureSource(input.text?.source);\n // get default value if format isn't specified in the input.\n const format = input.text?.format ?? configFormat;\n const featureTypes = []; // structures we want to analyze (e.g. [TABLES, FORMS]).\n if (format === 'FORM' || format === 'ALL')\n featureTypes.push('FORMS');\n if (format === 'TABLE' || format === 'ALL')\n featureTypes.push('TABLES');\n if (featureTypes.length === 0) {\n /**\n * Empty featureTypes indicates that we will identify plain text. We will use rekognition (suitable\n * for everyday images but has 50 word limit) first and see if reaches its word limit. If it does, then\n * we call textract and use the data that identify more words.\n */\n const textractParam = {\n Document: inputDocument,\n };\n const rekognitionParam = {\n Image: inputDocument,\n };\n const detectTextCommand = new client_rekognition_1.DetectTextCommand(rekognitionParam);\n const rekognitionData = await this.rekognitionClient.send(detectTextCommand);\n const rekognitionResponse = (0, IdentifyTextUtils_1.categorizeRekognitionBlocks)(rekognitionData.TextDetections);\n if (rekognitionResponse.text.words.length < 50) {\n // did not hit the word limit, return the data\n return rekognitionResponse;\n }\n const detectDocumentTextCommand = new client_textract_1.DetectDocumentTextCommand(textractParam);\n const { Blocks } = await this.textractClient.send(detectDocumentTextCommand);\n if ((rekognitionData.TextDetections?.length ?? 0) > (Blocks?.length ?? 0)) {\n return rekognitionResponse;\n }\n return (0, IdentifyTextUtils_1.categorizeTextractBlocks)(Blocks);\n }\n else {\n const param = {\n Document: inputDocument,\n FeatureTypes: featureTypes,\n };\n const analyzeDocumentCommand = new client_textract_1.AnalyzeDocumentCommand(param);\n const { Blocks } = await this.textractClient.send(analyzeDocumentCommand);\n return (0, IdentifyTextUtils_1.categorizeTextractBlocks)(Blocks);\n }\n }\n /**\n * Identify instances of real world entities from an image and if it contains unsafe content.\n * @param {IdentifyLabelsInput} input - Object containing the source image and entity type to identify.\n * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to an array of identified entities.\n */\n async identifyLabels(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyLabels = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', defaults = {} } = identifyLabels;\n const { type = 'LABELS' } = defaults;\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n const inputImage = await this.configureSource(input.labels?.source);\n const param = { Image: inputImage };\n const servicePromises = [];\n // get default argument\n const entityType = input.labels?.type ?? type;\n if (entityType === 'LABELS' || entityType === 'ALL') {\n servicePromises.push(this.detectLabels(param));\n }\n if (entityType === 'UNSAFE' || entityType === 'ALL') {\n servicePromises.push(this.detectModerationLabels(param));\n }\n return Promise.all(servicePromises).then(data => {\n let identifyResult = {};\n // concatenate resolved promises to a single object\n data.forEach(val => {\n identifyResult = { ...identifyResult, ...val };\n });\n return identifyResult;\n });\n }\n /**\n * Calls Rekognition.detectLabels and organizes the returned data.\n * @param {DetectLabelsInput} param - parameter to be passed onto Rekognition\n * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to organized detectLabels response.\n */\n async detectLabels(param) {\n const detectLabelsCommand = new client_rekognition_1.DetectLabelsCommand(param);\n const data = await this.rekognitionClient.send(detectLabelsCommand);\n if (!data.Labels)\n return {}; // no image was detected\n const detectLabelData = data.Labels.map(label => {\n const boxes = label.Instances?.map(instance => (0, Utils_1.makeCamelCase)(instance.BoundingBox)) || [];\n return {\n name: label.Name,\n boundingBoxes: boxes,\n metadata: {\n confidence: label.Confidence,\n parents: (0, Utils_1.makeCamelCaseArray)(label.Parents),\n },\n };\n });\n return { labels: detectLabelData };\n }\n /**\n * Calls Rekognition.detectModerationLabels and organizes the returned data.\n * @param {Rekognition.DetectLabelsRequest} param - Parameter to be passed onto Rekognition\n * @return {Promise<IdentifyLabelsOutput>} - Promise resolving to organized detectModerationLabels response.\n */\n async detectModerationLabels(param) {\n const detectModerationLabelsCommand = new client_rekognition_1.DetectModerationLabelsCommand(param);\n const data = await this.rekognitionClient.send(detectModerationLabelsCommand);\n if (data.ModerationLabels?.length !== 0) {\n return { unsafe: 'YES' };\n }\n else {\n return { unsafe: 'NO' };\n }\n }\n /**\n * Identify faces within an image that is provided as input, and match faces from a collection\n * or identify celebrities.\n * @param {IdentifyEntityInput} input - object containing the source image and face match options.\n * @return {Promise<IdentifyEntityOutput>} Promise resolving to identify results.\n */\n async identifyEntities(input) {\n const { credentials } = await (0, core_1.fetchAuthSession)();\n (0, assertValidationError_1.assertValidationError)(!!credentials, validation_1.PredictionsValidationErrorCode.NoCredentials);\n const { identifyEntities = {} } = core_1.Amplify.getConfig().Predictions?.identify ?? {};\n const { region = '', celebrityDetectionEnabled = false, defaults = {}, } = identifyEntities;\n const { collectionId: collectionIdConfig = '', maxEntities: maxFacesConfig = 50, } = defaults;\n // default arguments\n this.rekognitionClient = new client_rekognition_1.RekognitionClient({\n region,\n credentials,\n customUserAgent: _getPredictionsIdentifyAmplifyUserAgent(),\n });\n const inputImage = await this.configureSource(input.entities?.source);\n const param = { Attributes: ['ALL'], Image: inputImage };\n if ((0, types_1.isIdentifyCelebrities)(input.entities) &&\n input.entities.celebrityDetection) {\n (0, assertValidationError_1.assertValidationError)(celebrityDetectionEnabled, validation_1.PredictionsValidationErrorCode.CelebrityDetectionNotEnabled);\n const recognizeCelebritiesCommand = new client_rekognition_1.RecognizeCelebritiesCommand(param);\n const data = await this.rekognitionClient.send(recognizeCelebritiesCommand);\n const faces = data.CelebrityFaces?.map(celebrity => ({\n boundingBox: (0, Utils_1.makeCamelCase)(celebrity.Face?.BoundingBox),\n landmarks: (0, Utils_1.makeCamelCaseArray)(celebrity.Face?.Landmarks),\n metadata: {\n ...(0, Utils_1.makeCamelCase)(celebrity, ['Id', 'Name', 'Urls']),\n pose: (0, Utils_1.makeCamelCase)(celebrity.Face?.Pose),\n },\n })) ?? [];\n return { entities: faces };\n }\n else if ((0, types_1.isIdentifyFromCollection)(input.entities) &&\n input.entities.collection) {\n const { collectionId = collectionIdConfig, maxEntities: maxFaces = maxFacesConfig, } = input.entities;\n // Concatenate additional parameters\n const updatedParam = {\n ...param,\n CollectionId: collectionId,\n MaxFaces: maxFaces,\n };\n const searchFacesByImageCommand = new client_rekognition_1.SearchFacesByImageCommand(updatedParam);\n const data = await this.rekognitionClient.send(searchFacesByImageCommand);\n const faces = data.FaceMatches?.map(match => {\n const externalImageId = match.Face?.ExternalImageId\n ? this.decodeExternalImageId(match.Face.ExternalImageId)\n : undefined;\n return {\n boundingBox: (0, Utils_1.makeCamelCase)(match.Face?.BoundingBox),\n metadata: {\n externalImageId,\n similarity: match.Similarity,\n },\n };\n }) ?? [];\n return { entities: faces };\n }\n else {\n const detectFacesCommand = new client_rekognition_1.DetectFacesCommand(param);\n const data = await this.rekognitionClient.send(detectFacesCommand);\n const faces = data.FaceDetails?.map(detail => {\n // face attributes keys we want to extract from Rekognition's response\n const attributeKeys = [\n 'Smile',\n 'Eyeglasses',\n 'Sunglasses',\n 'Gender',\n 'Beard',\n 'Mustache',\n 'EyesOpen',\n 'MouthOpen',\n ];\n const faceAttributes = (0, Utils_1.makeCamelCase)(detail, attributeKeys);\n faceAttributes.emotions = detail.Emotions?.map(emotion => emotion.Type);\n return {\n boundingBox: (0, Utils_1.makeCamelCase)(detail.BoundingBox),\n landmarks: (0, Utils_1.makeCamelCaseArray)(detail.Landmarks),\n ageRange: (0, Utils_1.makeCamelCase)(detail.AgeRange),\n attributes: faceAttributes,\n metadata: {\n confidence: detail.Confidence,\n pose: (0, Utils_1.makeCamelCase)(detail.Pose),\n },\n };\n }) ?? [];\n return { entities: faces };\n }\n }\n decodeExternalImageId(externalImageId) {\n return ('' + externalImageId).replace(/::/g, '/');\n }\n}\nexports.AmazonAIIdentifyPredictionsProvider = AmazonAIIdentifyPredictionsProvider;\nfunction _getPredictionsIdentifyAmplifyUserAgent() {\n return (0, utils_1.getAmplifyUserAgentObject)({\n category: utils_1.Category.Predictions,\n action: utils_1.PredictionsAction.Identify,\n });\n}\n"],"names":[],"mappings":"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"}
@@ -27,9 +27,9 @@ class AmazonAIInterpretPredictionsProvider {
27
27
  const { text: textSource } = input;
28
28
  const { source, type = defaultType } = textSource;
29
29
  const { text } = source;
30
- let sourceLanguage;
30
+ let language;
31
31
  if ((0, types_1.isInterpretTextOthers)(textSource)) {
32
- sourceLanguage = textSource.source.language;
32
+ language = textSource.source.language;
33
33
  }
34
34
  this.comprehendClient = new client_comprehend_1.ComprehendClient({
35
35
  credentials,
@@ -40,7 +40,7 @@ class AmazonAIInterpretPredictionsProvider {
40
40
  }),
41
41
  });
42
42
  const doAll = type === 'all';
43
- let languageCode = sourceLanguage;
43
+ let languageCode = language;
44
44
  if (doAll || type === 'language') {
45
45
  const languageDetectionParams = {
46
46
  Text: text,
@@ -103,8 +103,8 @@ class AmazonAIInterpretPredictionsProvider {
103
103
  try {
104
104
  const detectKeyPhrasesCommand = new client_comprehend_1.DetectKeyPhrasesCommand(params);
105
105
  const data = await this.comprehendClient.send(detectKeyPhrasesCommand);
106
- const { KeyPhrases: keyPhrases = [] } = data || {};
107
- return keyPhrases.map(({ Text: text }) => {
106
+ const { KeyPhrases = [] } = data || {};
107
+ return KeyPhrases.map(({ Text: text }) => {
108
108
  return { text };
109
109
  });
110
110
  }
@@ -148,7 +148,7 @@ class AmazonAIInterpretPredictionsProvider {
148
148
  try {
149
149
  const detectSentimentCommand = new client_comprehend_1.DetectSentimentCommand(params);
150
150
  const data = await this.comprehendClient.send(detectSentimentCommand);
151
- const { Sentiment: predominant = '', SentimentScore: { Positive: positive = 0, Negative: negative = 0, Neutral: neutral = 0, Mixed: mixed = 0, } = {}, } = data ?? {};
151
+ const { Sentiment: predominant = '', SentimentScore: { Positive: positive = 0, Negative: negative = 0, Neutral: neutral = 0, Mixed: mixed = 0, } = {}, } = ({} = data);
152
152
  return { predominant, positive, negative, neutral, mixed };
153
153
  }
154
154
  catch (err) {
@@ -191,7 +191,7 @@ class AmazonAIInterpretPredictionsProvider {
191
191
  try {
192
192
  const detectDominantLanguageCommand = new client_comprehend_1.DetectDominantLanguageCommand(params);
193
193
  const data = await this.comprehendClient.send(detectDominantLanguageCommand);
194
- const { Languages: [{ LanguageCode }] = [{ LanguageCode: undefined }] } = data ?? {};
194
+ const { Languages: [{ LanguageCode }] = [{}] } = ({} = data || {});
195
195
  (0, assertValidationError_1.assertValidationError)(!!LanguageCode, validation_1.PredictionsValidationErrorCode.NoLanguage);
196
196
  return LanguageCode;
197
197
  }