echogarden 1.4.4 → 1.5.0

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 (139) hide show
  1. package/data/schemas/options.json +267 -19
  2. package/dist/alignment/{TextAlignment.d.ts → SemanticTextAlignment.d.ts} +4 -2
  3. package/dist/alignment/SemanticTextAlignment.js +336 -0
  4. package/dist/alignment/SemanticTextAlignment.js.map +1 -0
  5. package/dist/alignment/SpeechAlignment.d.ts +2 -1
  6. package/dist/alignment/SpeechAlignment.js +105 -37
  7. package/dist/alignment/SpeechAlignment.js.map +1 -1
  8. package/dist/api/API.d.ts +7 -2
  9. package/dist/api/API.js +7 -2
  10. package/dist/api/API.js.map +1 -1
  11. package/dist/api/APIOptions.d.ts +4 -1
  12. package/dist/api/Alignment.d.ts +1 -1
  13. package/dist/api/Alignment.js +13 -5
  14. package/dist/api/Alignment.js.map +1 -1
  15. package/dist/api/LanguageDetectionCommon.d.ts +6 -0
  16. package/dist/api/LanguageDetectionCommon.js +2 -0
  17. package/dist/api/LanguageDetectionCommon.js.map +1 -0
  18. package/dist/api/Recognition.js.map +1 -1
  19. package/dist/api/{LanguageDetection.d.ts → SpeechLanguageDetection.d.ts} +1 -25
  20. package/dist/api/{LanguageDetection.js → SpeechLanguageDetection.js} +1 -68
  21. package/dist/api/SpeechLanguageDetection.js.map +1 -0
  22. package/dist/api/{Translation.js → SpeechTranslation.js} +3 -3
  23. package/dist/api/SpeechTranslation.js.map +1 -0
  24. package/dist/api/Synthesis.js +4 -4
  25. package/dist/api/TextLanguageDetection.d.ts +21 -0
  26. package/dist/api/TextLanguageDetection.js +67 -0
  27. package/dist/api/TextLanguageDetection.js.map +1 -0
  28. package/dist/api/TextTranslation.d.ts +5 -0
  29. package/dist/api/TextTranslation.js +4 -0
  30. package/dist/api/TextTranslation.js.map +1 -0
  31. package/dist/api/TimelineTranslationAlignment.d.ts +23 -0
  32. package/dist/api/TimelineTranslationAlignment.js +92 -0
  33. package/dist/api/TimelineTranslationAlignment.js.map +1 -0
  34. package/dist/api/TranscriptAndTranslationAlignment.d.ts +35 -0
  35. package/dist/api/TranscriptAndTranslationAlignment.js +78 -0
  36. package/dist/api/TranscriptAndTranslationAlignment.js.map +1 -0
  37. package/dist/api/TranslationAlignment.d.ts +4 -3
  38. package/dist/api/TranslationAlignment.js +9 -8
  39. package/dist/api/TranslationAlignment.js.map +1 -1
  40. package/dist/api/VoiceActivityDetection.js +16 -1
  41. package/dist/api/VoiceActivityDetection.js.map +1 -1
  42. package/dist/cli/CLI.d.ts +27 -7
  43. package/dist/cli/CLI.js +205 -34
  44. package/dist/cli/CLI.js.map +1 -1
  45. package/dist/codecs/FFMpegTranscoder.js +7 -0
  46. package/dist/codecs/FFMpegTranscoder.js.map +1 -1
  47. package/dist/dsp/FFT.d.ts +1 -1
  48. package/dist/dsp/FFT.js +6 -0
  49. package/dist/dsp/FFT.js.map +1 -1
  50. package/dist/dsp/KWeightingFilter.js +1 -1
  51. package/dist/dsp/KWeightingFilter.js.map +1 -1
  52. package/dist/dsp/MelSpectogram.d.ts +3 -2
  53. package/dist/dsp/MelSpectogram.js +14 -8
  54. package/dist/dsp/MelSpectogram.js.map +1 -1
  55. package/dist/math/VectorMath.d.ts +5 -5
  56. package/dist/math/VectorMath.js +4 -4
  57. package/dist/math/VectorMath.js.map +1 -1
  58. package/dist/recognition/WhisperCppSTT.d.ts +1 -1
  59. package/dist/recognition/WhisperCppSTT.js +2 -2
  60. package/dist/recognition/WhisperCppSTT.js.map +1 -1
  61. package/dist/recognition/WhisperSTT.js +9 -6
  62. package/dist/recognition/WhisperSTT.js.map +1 -1
  63. package/dist/server/Client.d.ts +3 -2
  64. package/dist/server/Client.js.map +1 -1
  65. package/dist/server/Worker.d.ts +3 -2
  66. package/dist/server/Worker.js +3 -2
  67. package/dist/server/Worker.js.map +1 -1
  68. package/dist/source-separation/MDXNetSourceSeparation.js +1 -1
  69. package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -1
  70. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.d.ts +13 -0
  71. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js +68 -0
  72. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js.map +1 -0
  73. package/dist/speech-language-detection/SileroLanguageDetection.d.ts +1 -1
  74. package/dist/speech-language-detection/SileroLanguageDetection.js +1 -1
  75. package/dist/speech-language-detection/SileroLanguageDetection.js.map +1 -1
  76. package/dist/tests/Test.js +0 -31
  77. package/dist/tests/Test.js.map +1 -1
  78. package/dist/text-language-detection/FastTextLanguageDetection.d.ts +1 -1
  79. package/dist/text-language-detection/FastTextLanguageDetection.js.map +1 -1
  80. package/dist/text-language-detection/TinyLDLanguageDetection.d.ts +1 -1
  81. package/dist/text-language-detection/TinyLDLanguageDetection.js.map +1 -1
  82. package/dist/text-translation/NLLBTextTranslation.js +1 -1
  83. package/dist/text-translation/NLLBTextTranslation.js.map +1 -1
  84. package/dist/utilities/Locale.d.ts +1 -1
  85. package/dist/utilities/Locale.js +1 -1
  86. package/dist/utilities/OnnxUtilities.d.ts +1 -1
  87. package/dist/utilities/PackageManager.js +6 -4
  88. package/dist/utilities/PackageManager.js.map +1 -1
  89. package/dist/utilities/Timeline.d.ts +1 -0
  90. package/dist/utilities/Timeline.js +12 -0
  91. package/dist/utilities/Timeline.js.map +1 -1
  92. package/docs/API.md +81 -3
  93. package/docs/CLI.md +51 -1
  94. package/docs/Engines.md +24 -0
  95. package/docs/Options.md +33 -1
  96. package/package.json +8 -8
  97. package/src/alignment/SemanticTextAlignment.ts +467 -0
  98. package/src/alignment/SpeechAlignment.ts +179 -52
  99. package/src/api/API.ts +18 -2
  100. package/src/api/APIOptions.ts +14 -1
  101. package/src/api/Alignment.ts +31 -9
  102. package/src/api/LanguageDetectionCommon.ts +7 -0
  103. package/src/api/Recognition.ts +2 -0
  104. package/src/api/{LanguageDetection.ts → SpeechLanguageDetection.ts} +1 -119
  105. package/src/api/{Translation.ts → SpeechTranslation.ts} +2 -2
  106. package/src/api/Synthesis.ts +4 -4
  107. package/src/api/TextLanguageDetection.ts +116 -0
  108. package/src/api/TextTranslation.ts +9 -0
  109. package/src/api/TimelineTranslationAlignment.ts +162 -0
  110. package/src/api/TranscriptAndTranslationAlignment.ts +164 -0
  111. package/src/api/TranslationAlignment.ts +12 -10
  112. package/src/api/VoiceActivityDetection.ts +24 -3
  113. package/src/cli/CLI.ts +276 -34
  114. package/src/codecs/FFMpegTranscoder.ts +6 -0
  115. package/src/dsp/FFT.ts +8 -2
  116. package/src/dsp/KWeightingFilter.ts +1 -1
  117. package/src/dsp/MelSpectogram.ts +17 -8
  118. package/src/math/VectorMath.ts +9 -9
  119. package/src/recognition/WhisperCppSTT.ts +2 -2
  120. package/src/recognition/WhisperSTT.ts +10 -6
  121. package/src/server/Client.ts +3 -2
  122. package/src/server/Worker.ts +3 -2
  123. package/src/source-separation/MDXNetSourceSeparation.ts +1 -1
  124. package/src/speech-embeddings/WavToVec2BertFeatureEmbeddings.ts +107 -0
  125. package/src/speech-language-detection/SileroLanguageDetection.ts +2 -1
  126. package/src/tests/Test.ts +1 -38
  127. package/src/text-language-detection/FastTextLanguageDetection.ts +1 -1
  128. package/src/text-language-detection/TinyLDLanguageDetection.ts +1 -1
  129. package/src/text-translation/NLLBTextTranslation.ts +1 -1
  130. package/src/utilities/Locale.ts +1 -1
  131. package/src/utilities/OnnxUtilities.ts +1 -1
  132. package/src/utilities/PackageManager.ts +7 -4
  133. package/src/utilities/Timeline.ts +14 -0
  134. package/dist/alignment/TextAlignment.js +0 -156
  135. package/dist/alignment/TextAlignment.js.map +0 -1
  136. package/dist/api/LanguageDetection.js.map +0 -1
  137. package/dist/api/Translation.js.map +0 -1
  138. package/src/alignment/TextAlignment.ts +0 -234
  139. /package/dist/api/{Translation.d.ts → SpeechTranslation.d.ts} +0 -0
@@ -13,7 +13,7 @@ import { splitToLines } from '../nlp/Segmentation.js'
13
13
  import { extendDeep } from '../utilities/ObjectUtilities.js'
14
14
  import { formatLanguageCodeWithName, getShortLanguageCode } from '../utilities/Locale.js'
15
15
  import { loadPackage } from '../utilities/PackageManager.js'
16
- import { detectSpeechLanguageByParts } from '../api/LanguageDetection.js'
16
+ import { detectSpeechLanguageByParts } from '../api/SpeechLanguageDetection.js'
17
17
 
18
18
  export async function recognize(
19
19
  sourceRawAudio: RawAudio,
@@ -201,7 +201,7 @@ export async function recognize(
201
201
 
202
202
  export async function detectLanguage(sourceRawAudio: RawAudio, modelName: WhisperModelName, modelPath: string) {
203
203
  if (sourceRawAudio.sampleRate != 16000) {
204
- throw new Error('Source audio must have a sampling rate of 16000')
204
+ throw new Error('Source audio must have a sample rate of 16000')
205
205
  }
206
206
 
207
207
  async function detectLanguageForPart(partAudio: RawAudio) {
@@ -17,7 +17,7 @@ import { formatLanguageCodeWithName, getShortLanguageCode, languageCodeToName }
17
17
  import { loadPackage } from '../utilities/PackageManager.js'
18
18
  import chalk from 'chalk'
19
19
  import { XorShift32RNG } from '../utilities/RandomGenerator.js'
20
- import { detectSpeechLanguageByParts } from '../api/LanguageDetection.js'
20
+ import { detectSpeechLanguageByParts } from '../api/SpeechLanguageDetection.js'
21
21
  import { type Tiktoken } from 'tiktoken/lite'
22
22
  import { isPunctuation, isWhitespace, isWord, splitToSentences, splitToWords } from '../nlp/Segmentation.js'
23
23
  import { medianOf5Filter } from '../math/MedianFilter.js'
@@ -35,7 +35,7 @@ export async function recognize(
35
35
  options = extendDeep(defaultWhisperOptions, options)
36
36
 
37
37
  if (sourceRawAudio.sampleRate != 16000) {
38
- throw new Error('Source audio must have a sampling rate of 16000 Hz')
38
+ throw new Error('Source audio must have a sample rate of 16000 Hz')
39
39
  }
40
40
 
41
41
  sourceLanguage = getShortLanguageCode(sourceLanguage)
@@ -87,7 +87,7 @@ export async function align(
87
87
  options = extendDeep(defaultWhisperAlignmentOptions, options)
88
88
 
89
89
  if (sourceRawAudio.sampleRate != 16000) {
90
- throw new Error('Source audio must have a sampling rate of 16000')
90
+ throw new Error('Source audio must have a sample rate of 16000 Hz')
91
91
  }
92
92
 
93
93
  sourceLanguage = getShortLanguageCode(sourceLanguage)
@@ -128,7 +128,7 @@ export async function alignEnglishTranslation(
128
128
  options = extendDeep(defaultWhisperAlignmentOptions, options)
129
129
 
130
130
  if (sourceRawAudio.sampleRate != 16000) {
131
- throw new Error('Source audio must have a sampling rate of 16000')
131
+ throw new Error('Source audio must have a sample rate of 16000 Hz')
132
132
  }
133
133
 
134
134
  sourceLanguage = getShortLanguageCode(sourceLanguage)
@@ -167,7 +167,7 @@ export async function detectLanguage(
167
167
  options = extendDeep(defaultWhisperLanguageDetectionOptions, options)
168
168
 
169
169
  if (sourceRawAudio.sampleRate != 16000) {
170
- throw new Error('Source audio must have a sampling rate of 16000')
170
+ throw new Error('Source audio must have a sample rate of 16000 Hz')
171
171
  }
172
172
 
173
173
  if (!isMultilingualModel(modelName)) {
@@ -213,7 +213,7 @@ export async function detectVoiceActivity(
213
213
  options = extendDeep(defaultWhisperVADOptions, options)
214
214
 
215
215
  if (sourceRawAudio.sampleRate != 16000) {
216
- throw new Error('Source audio must have a sampling rate of 16000')
216
+ throw new Error('Source audio must have a sample rate of 16000 Hz')
217
217
  }
218
218
 
219
219
  if (options.temperature! < 0) {
@@ -1089,6 +1089,10 @@ export class Whisper {
1089
1089
  const maxAudioSamples = sampleRate * 30
1090
1090
  const maxAudioFrames = 3000
1091
1091
 
1092
+ if (sampleRate != 16000) {
1093
+ throw new Error('Audio must have a sample rate of 16000 Hz')
1094
+ }
1095
+
1092
1096
  if (audioSamples.length > maxAudioSamples) {
1093
1097
  throw new Error(`Audio part is longer than 30 seconds`)
1094
1098
  }
@@ -7,9 +7,10 @@ import { OpenPromise } from '../utilities/OpenPromise.js'
7
7
  import { AudioSourceParam, RawAudio } from '../audio/AudioUtilities.js'
8
8
  import { AlignmentOptions, AlignmentResult } from '../api/Alignment.js'
9
9
  import { RecognitionOptions, RecognitionResult } from '../api/Recognition.js'
10
- import { SpeechTranslationOptions, SpeechTranslationResult } from '../api/Translation.js'
10
+ import { SpeechTranslationOptions, SpeechTranslationResult } from '../api/SpeechTranslation.js'
11
11
  import { Worker as WorkerThread } from 'node:worker_threads'
12
- import { SpeechLanguageDetectionOptions, SpeechLanguageDetectionResult, TextLanguageDetectionOptions, TextLanguageDetectionResult } from '../api/LanguageDetection.js'
12
+ import { SpeechLanguageDetectionOptions, SpeechLanguageDetectionResult } from '../api/SpeechLanguageDetection.js'
13
+ import { TextLanguageDetectionOptions, TextLanguageDetectionResult } from '../api/TextLanguageDetection.js'
13
14
 
14
15
  const log = logToStderr
15
16
 
@@ -4,13 +4,14 @@ import { logToStderr, yieldToEventLoop } from '../utilities/Utilities.js'
4
4
  import { AudioSourceParam } from '../audio/AudioUtilities.js'
5
5
  import { RecognitionOptions, RecognitionResult, recognize } from '../api/Recognition.js'
6
6
  import { AlignmentOptions, AlignmentResult, align } from '../api/Alignment.js'
7
- import { SpeechTranslationOptions, SpeechTranslationResult, translateSpeech } from '../api/Translation.js'
7
+ import { SpeechTranslationOptions, SpeechTranslationResult, translateSpeech } from '../api/SpeechTranslation.js'
8
8
  import { resetActiveLogger } from '../utilities/Logger.js'
9
9
  import { writeToStderr } from '../utilities/Utilities.js'
10
10
  import { Worker, SHARE_ENV } from 'node:worker_threads'
11
- import { SpeechLanguageDetectionOptions, SpeechLanguageDetectionResult, TextLanguageDetectionOptions, TextLanguageDetectionResult, detectSpeechLanguage, detectTextLanguage } from '../api/LanguageDetection.js'
11
+ import { SpeechLanguageDetectionOptions, SpeechLanguageDetectionResult, detectSpeechLanguage } from '../api/SpeechLanguageDetection.js'
12
12
  import chalk from 'chalk'
13
13
  import { resolveToModuleRootDir } from '../utilities/PathUtilities.js'
14
+ import { TextLanguageDetectionOptions, TextLanguageDetectionResult, detectTextLanguage } from '../api/TextLanguageDetection.js'
14
15
 
15
16
  const log = logToStderr
16
17
 
@@ -32,7 +32,7 @@ export class MDXNet {
32
32
  }
33
33
 
34
34
  if (rawAudio.sampleRate != 44100) {
35
- throw new Error(`Input audio must have a 44100 Hz sampling rate`)
35
+ throw new Error(`Input audio must have a sample rate of 44100 Hz`)
36
36
  }
37
37
 
38
38
  await this.initializeSessionIfNeeded()
@@ -0,0 +1,107 @@
1
+ import type * as Onnx from 'onnxruntime-node'
2
+ import { OnnxExecutionProvider, getOnnxSessionOptions } from '../utilities/OnnxUtilities.js';
3
+
4
+ import { RawAudio } from "../audio/AudioUtilities.js";
5
+ import { computeMelSpectogram } from "../dsp/MelSpectogram.js";
6
+ import { Logger } from '../utilities/Logger.js';
7
+ import { concatFloat32Arrays, splitFloat32Array } from '../utilities/Utilities.js';
8
+ import { applyEmphasis } from '../dsp/MFCC.js';
9
+
10
+ export function computeEmbeddings(audioSamples: RawAudio, modelFilePath: string, executionProviders: OnnxExecutionProvider[]) {
11
+ const wav2vecBert = new Wav2Vec2BertFeatureEmbeddings(
12
+ modelFilePath,
13
+ executionProviders,
14
+ )
15
+
16
+ const result = wav2vecBert.computeEmbeddings(audioSamples)
17
+
18
+ return result
19
+ }
20
+
21
+ export class Wav2Vec2BertFeatureEmbeddings {
22
+ session?: Onnx.InferenceSession
23
+
24
+ constructor(
25
+ public readonly modelFilePath: string,
26
+ public readonly executionProviders: OnnxExecutionProvider[]) {
27
+ }
28
+
29
+ async computeEmbeddings(rawAudio: RawAudio) {
30
+ const logger = new Logger()
31
+
32
+ rawAudio.audioChannels[0] = applyEmphasis(rawAudio.audioChannels[0], 0.97)
33
+
34
+ const { melSpectogram } = await computeMelSpectogram(
35
+ rawAudio,
36
+ 512,
37
+ 400,
38
+ 160,
39
+ 80,
40
+ 20,
41
+ 8000,
42
+ 'povey')
43
+
44
+ // Ensure even length
45
+ if (melSpectogram.length % 2 != 0) {
46
+ melSpectogram.push(new Float32Array(80))
47
+ }
48
+
49
+ // Normalize filterbanks
50
+ for (let filterbankIndex = 0; filterbankIndex < 80; filterbankIndex++) {
51
+ let sum = 0
52
+ let sumOfSquares = 0
53
+
54
+ for (let i = 0; i < melSpectogram.length; i++) {
55
+ const value = melSpectogram[i][filterbankIndex]
56
+
57
+ sum += value
58
+ sumOfSquares += value ** 2
59
+ }
60
+
61
+ const mean = sum / melSpectogram.length
62
+ const normalizationFactor = 1 / (Math.sqrt(sumOfSquares / melSpectogram.length) + 1e-40)
63
+
64
+ for (let i = 0; i < melSpectogram.length; i++) {
65
+ melSpectogram[i][filterbankIndex] -= mean
66
+ melSpectogram[i][filterbankIndex] *= normalizationFactor
67
+ }
68
+ }
69
+
70
+ // Flatten
71
+ const flattenedMelSpectogram = concatFloat32Arrays(melSpectogram)
72
+
73
+ // Initialize session
74
+ await this.initializeSessionIfNeeded()
75
+
76
+ const session = this.session!
77
+
78
+ const Onnx = await import('onnxruntime-node')
79
+
80
+ const inputTensor = new Onnx.Tensor('float32', flattenedMelSpectogram, [1, melSpectogram.length / 2, 80 * 2])
81
+
82
+ const attentionMask = new Int32Array(melSpectogram.length / 2).fill(1)
83
+ const attentionMaskTensor = new Onnx.Tensor('int32', attentionMask, [1, attentionMask.length])
84
+
85
+ // Run inference
86
+ const outputs = await session.run({ 'input_features': inputTensor, 'attention_mask': attentionMaskTensor })
87
+
88
+ // Return output
89
+ const lastHiddenStateData = outputs['last_hidden_state'].data as Float32Array
90
+
91
+ const outputEmbeddings = splitFloat32Array(lastHiddenStateData, outputs['last_hidden_state'].dims[2])
92
+
93
+ return outputEmbeddings
94
+ }
95
+
96
+ private async initializeSessionIfNeeded() {
97
+ if (this.session) {
98
+ return
99
+ }
100
+
101
+ const Onnx = await import('onnxruntime-node')
102
+
103
+ const onnxSessionOptions = getOnnxSessionOptions({ executionProviders: this.executionProviders })
104
+
105
+ this.session = await Onnx.InferenceSession.create(this.modelFilePath, onnxSessionOptions)
106
+ }
107
+ }
@@ -3,9 +3,10 @@ import { softmax } from '../math/VectorMath.js'
3
3
  import { Logger } from '../utilities/Logger.js'
4
4
  import { RawAudio } from '../audio/AudioUtilities.js'
5
5
  import { readAndParseJsonFile } from '../utilities/FileSystem.js'
6
- import { detectSpeechLanguageByParts, type LanguageDetectionResults } from '../api/LanguageDetection.js'
6
+ import { detectSpeechLanguageByParts } from '../api/SpeechLanguageDetection.js'
7
7
  import { languageCodeToName } from '../utilities/Locale.js'
8
8
  import { OnnxExecutionProvider, getOnnxSessionOptions } from '../utilities/OnnxUtilities.js'
9
+ import { LanguageDetectionResults } from '../api/LanguageDetectionCommon.js'
9
10
 
10
11
  export async function detectLanguage(
11
12
  rawAudio: RawAudio,
package/src/tests/Test.ts CHANGED
@@ -1,8 +1,5 @@
1
- import { getTokenRepetitionScore, logToStderr, setupProgramTerminationListeners, writeToStderr } from '../utilities/Utilities.js'
2
1
  import { makeTarballsForInstalledPackages } from '../utilities/TarballMaker.js'
3
- import { defaultEspeakOptions, listVoices, synthesize, testEspeakSynthesisWithPrePhonemizedInputs, testKirshenbaumPhonemization } from '../synthesis/EspeakTTS.js'
4
- import { getRawAudioDuration } from '../audio/AudioUtilities.js'
5
- import { alignText } from '../alignment/TextAlignment.js'
2
+ import { logToStderr, setupProgramTerminationListeners } from '../utilities/Utilities.js'
6
3
 
7
4
  const log = logToStderr
8
5
 
@@ -11,41 +8,7 @@ setupProgramTerminationListeners()
11
8
  //process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
12
9
  //process.env.http_proxy = 'http://localhost:8080'
13
10
 
14
- //const testText = `After a while, finding that nothing more happened, she decided on going into the garden at once; but, alas for poor Alice! when she got to the door, she found she had forgotten the little golden key, and when she went back to the table for it, she found she could not possibly reach it: she could see it quite plainly through the glass, and she tried her best to climb up one of the legs of the table, but it was too slippery; and when she had tired herself out with trying, the poor little thing sat down and cried.`
15
- //await testKirshenbaumPhonemization(testText)
16
-
17
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'b', 'c', 'a', 'b', 'c'])
18
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'b', 'a', 'd', 'a', 'b', 'a', 'd'])
19
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'b', 'a', 'b', 'c', 'a', 'b', 'a', 'b'])
20
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'a', 'a', 'b', 'a', 'a', 'a', 'b'])
21
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'b', 'a', 'c', 'a', 'b', 'a', 'c', 'a'])
22
- //getRepetitionScoreRelativeToFirstSubstring(['a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'b'])
23
-
24
11
  //await makeTarballsForInstalledPackages(true)
25
12
 
26
- /*
27
- const voices = await listVoices()
28
-
29
- for (const voice of voices) {
30
- const result = await synthesize('|', { ...defaultEspeakOptions, voice: voice.identifier })
31
-
32
- if (getRawAudioDuration(result.rawAudio) > 0.25) {
33
- log(voice.identifier)
34
- }
35
- }
36
- */
37
- /*
38
- await alignText(
39
- `
40
- Una mañana de invierno, un coche tirado por tres caballos pasó por en medio de Uzquiano y sin detenerse, siguió camino de Peña Cerrada. El coche había salido de Vitoria horas antes y llevaba tres viajeros, una muchachita vestida de blanco, talle alto, gabán, esclavina, gran sombrero Pamela, de moda por los años treinta y cinco al cuarenta, una criada vieja, de aspecto de dueña, enlutada, con peluca rojiza y toca blanca, y un hombre joven, alto, elegante, vestido de negro, con pantalón estrecho, entravillado y sombrero de copa.
41
- `,
42
- 'es',
43
- `
44
- One winter morning, a car drawn by three horses passed through the middle of Uzquiano and without stopping, continued on its way to Peña Cerrada. The car had left Vitoria hours before and was carrying three passengers, a little girl dressed in white, high-waisted, overcoat, cape, large Pamela hat, fashionable in the 1930s to 1940s, an old maid, with the appearance of a mistress, in mourning, with a reddish wig and a white cap, and a young, tall, elegant man, dressed in black, with narrow pants, a bow tie and a top hat.
45
- `,
46
- 'en',
47
- )
48
- */
49
-
50
13
  process.exit(0)
51
14
 
@@ -1,8 +1,8 @@
1
1
  import path from 'path'
2
- import type { LanguageDetectionResults } from '../api/LanguageDetection.js'
3
2
  import { languageCodeToName } from '../utilities/Locale.js'
4
3
  import { OpenPromise } from '../utilities/OpenPromise.js'
5
4
  import { resolveModuleMainPath, roundToDigits } from '../utilities/Utilities.js'
5
+ import { LanguageDetectionResults } from '../api/LanguageDetectionCommon.js'
6
6
 
7
7
  let fastTextLanguageDetectionModel: any
8
8
 
@@ -1,6 +1,6 @@
1
- import type { LanguageDetectionResults } from '../api/LanguageDetection.js'
2
1
  import { detectAll } from 'tinyld'
3
2
  import { languageCodeToName } from '../utilities/Locale.js'
3
+ import { LanguageDetectionResults } from '../api/LanguageDetectionCommon.js'
4
4
 
5
5
  export async function detectLanguage(text: string) {
6
6
  const tinyldResults = detectAll(text)
@@ -6,7 +6,7 @@ export async function translateText(sourceText: string, sourceLanguage: string,
6
6
 
7
7
  const { AutoTokenizer, M2M100ForConditionalGeneration } = await import('@echogarden/transformers-nodejs-lite')
8
8
 
9
- const modelPath = await loadPackage(`xenova-nllb-200-distilled-600M-quantized`)
9
+ const modelPath = await loadPackage(`xenova-nllb-200-distilled-600M-q8`)
10
10
 
11
11
  const tokenizer = await AutoTokenizer.from_pretrained(modelPath)
12
12
  const model = await M2M100ForConditionalGeneration.from_pretrained(modelPath)
@@ -22,7 +22,7 @@ export function formatLanguageCodeWithName(languageCode: string, styleId: 1 | 2
22
22
  }
23
23
  }
24
24
 
25
- export async function normalizeIdentifierToLangaugeCode(langIdentifier: string) {
25
+ export async function normalizeIdentifierToLanguageCode(langIdentifier: string) {
26
26
  const result = await parseLangIdentifier(langIdentifier)
27
27
 
28
28
  return result.Name
@@ -65,4 +65,4 @@ export interface OnnxSessionOptions {
65
65
  logSeverityLevel?: 0 | 1 | 2 | 3 | 4
66
66
  }
67
67
 
68
- export type OnnxExecutionProvider = 'cpu' | 'dml'
68
+ export type OnnxExecutionProvider = 'cpu' | 'dml' | 'cuda'
@@ -183,10 +183,13 @@ const packageVersionTagResolutionLookup: { [packageName: string]: string } = {
183
183
  'whisper.cpp-binaries-windows-x64-cublas-12.4.0-latest-patched': '20240409',
184
184
  'whisper.cpp-binaries-windows-x64-cublas-11.8.0-latest-patched': '20240409',
185
185
 
186
- 'xenova-multilingual-e5-small-quantized': '20240504',
187
- 'xenova-nllb-200-distilled-600M-quantized': '20240505',
186
+ 'xenova-multilingual-e5-small-q8': '20240504',
187
+ 'xenova-nllb-200-distilled-600M-q8': '20240505',
188
188
  'xenova-multilingual-e5-small-fp16': '20240514',
189
189
  'xenova-multilingual-e5-base-fp16': '20240514',
190
- 'xenova-multilingual-e5-base-quantized': '20240514',
191
- 'xenova-multilingual-e5-large-quantized': '20240514',
190
+ 'xenova-multilingual-e5-base-q8': '20240514',
191
+ 'xenova-multilingual-e5-large-q8': '20240514',
192
+
193
+ 'w2v-bert-2.0-int8': '20240517',
194
+ 'w2v-bert-2.0-uint8': '20240517',
192
195
  }
@@ -207,6 +207,20 @@ export function addWordTextOffsetsToTimeline(timeline: Timeline, text: string, c
207
207
  return currentOffset
208
208
  }
209
209
 
210
+ export function extractEntries(timeline: Timeline, predicate: (entry: TimelineEntry) => boolean): TimelineEntry[] {
211
+ const timelineWordEntries: TimelineEntry[] = []
212
+
213
+ for (const entry of timeline) {
214
+ if (predicate(entry)) {
215
+ timelineWordEntries.push(entry)
216
+ } else if (entry.timeline) {
217
+ timelineWordEntries.push(...extractEntries(entry.timeline, predicate))
218
+ }
219
+ }
220
+
221
+ return timelineWordEntries
222
+ }
223
+
210
224
  export type TimelineEntryType = 'segment' | 'paragraph' | 'sentence' | 'clause' | 'phrase' | 'word' | 'token' | 'letter' | 'phone' | 'subphone'
211
225
 
212
226
  export type TimelineEntry = {
@@ -1,156 +0,0 @@
1
- import { Logger } from '../utilities/Logger.js';
2
- import { loadPackage } from '../utilities/PackageManager.js';
3
- import { alignDTWWindowed } from './DTWSequenceAlignmentWindowed.js';
4
- import { cosineDistance } from '../math/VectorMath.js';
5
- import { isPunctuation, splitToWords } from '../nlp/Segmentation.js';
6
- export async function alignText(text1, langCode1, text2, langCode2) {
7
- const logger = new Logger();
8
- text1 = text1.replaceAll(/\s+/g, ' ');
9
- text2 = text2.replaceAll(/\s+/g, ' ');
10
- const words1 = await splitToWords(text1, langCode1);
11
- const words2 = await splitToWords(text2, langCode2);
12
- const wordAlignment = await alignWords(words1, words2);
13
- const x = 0;
14
- }
15
- export async function alignWords(words1, words2) {
16
- const logger = new Logger();
17
- // Join words and get offsets
18
- const { joinedText: text1, offsets: text1Offsets } = joinAndGetOffsets(words1);
19
- const { joinedText: text2, offsets: text2Offsets } = joinAndGetOffsets(words2);
20
- // Load embedding model
21
- const modelPath = await loadPackage(`xenova-multilingual-e5-base-quantized`);
22
- const embeddingModel = new E5TextEmbedding(modelPath);
23
- // Process text 1:
24
- logger.start(`Initialize E5 embedding model`);
25
- await embeddingModel.initializeIfNeeded();
26
- logger.start(`Tokenize text 1`);
27
- const inputs1 = await embeddingModel.tokenizeToModelInputs(text1);
28
- logger.start(`Infer embeddings for text 1`);
29
- const embeddings1 = await embeddingModel.inferTokenEmbeddings(inputs1);
30
- logger.start(`Compute token to word mapping for text 1`);
31
- const filteredEmbeddings1 = embeddings1.filter((embedding) => embedding.text !== '▁' && embedding.text !== '<s>' && embedding.text !== '</s>');
32
- const tokenToWordIndexMapping1 = mapTokenEmbeddingsToWordIndexes(filteredEmbeddings1, text1, text1Offsets);
33
- // Process text 2:
34
- logger.start(`Tokenize text 2`);
35
- const inputs2 = await embeddingModel.tokenizeToModelInputs(text2);
36
- logger.start(`Infer embeddings for text 2`);
37
- const embeddings2 = await embeddingModel.inferTokenEmbeddings(inputs2);
38
- logger.start(`Compute token to word mapping for text 2`);
39
- const filteredEmbeddings2 = embeddings2.filter((embedding) => embedding.text !== '▁' && embedding.text !== '<s>' && embedding.text !== '</s>');
40
- const tokenToWordIndexMapping2 = mapTokenEmbeddingsToWordIndexes(filteredEmbeddings2, text2, text2Offsets);
41
- logger.end();
42
- // Align
43
- function costFunction(a, b) {
44
- const aIsPunctuation = isPunctuation(a.text);
45
- const bIsPunctuation = isPunctuation(b.text);
46
- if (aIsPunctuation === bIsPunctuation) {
47
- return cosineDistance(a.embeddingVector, b.embeddingVector);
48
- }
49
- else {
50
- return 1.0;
51
- }
52
- }
53
- const { path } = alignDTWWindowed(filteredEmbeddings1, filteredEmbeddings2, costFunction, 1000 * 1000);
54
- // Use alignment path to words to words
55
- const wordMapping = [];
56
- for (let i = 0; i < path.length; i++) {
57
- const pathEntry = path[i];
58
- const sourceTokenIndex = pathEntry.source;
59
- const destTokenIndex = pathEntry.dest;
60
- const mappedWordIndex1 = tokenToWordIndexMapping1[sourceTokenIndex];
61
- const mappedWordIndex2 = tokenToWordIndexMapping2[destTokenIndex];
62
- wordMapping.push({
63
- wordIndex1: mappedWordIndex1,
64
- word1: words1[mappedWordIndex1],
65
- wordIndex2: mappedWordIndex2,
66
- word2: words2[mappedWordIndex2],
67
- });
68
- const embedding1 = filteredEmbeddings1[sourceTokenIndex];
69
- const embedding2 = filteredEmbeddings2[destTokenIndex];
70
- logger.log(`${embedding1.text} -> ${embedding2.text}`);
71
- }
72
- return wordMapping;
73
- }
74
- function mapTokenEmbeddingsToWordIndexes(embeddings, text, textWordOffsets) {
75
- const tokenToWordIndex = [];
76
- let currentTextOffset = 0;
77
- for (let i = 0; i < embeddings.length; i++) {
78
- const embedding = embeddings[i];
79
- let tokenText = embedding.text;
80
- if (tokenText === '<s>' || tokenText === '</s>') {
81
- tokenToWordIndex.push(-1);
82
- continue;
83
- }
84
- if (tokenText.startsWith('▁')) {
85
- tokenText = tokenText.substring(1);
86
- }
87
- const matchPosition = text.indexOf(tokenText, currentTextOffset);
88
- if (matchPosition === -1) {
89
- throw new Error(`Token '${tokenText}' not found in text`);
90
- }
91
- currentTextOffset = matchPosition + tokenText.length;
92
- let tokenMatchingWordIndex = textWordOffsets.findIndex((index) => index > matchPosition);
93
- if (tokenMatchingWordIndex === -1) {
94
- throw new Error(`Token '${tokenText}' not found in text`);
95
- }
96
- else {
97
- tokenMatchingWordIndex = Math.max(tokenMatchingWordIndex - 1, 0);
98
- }
99
- tokenToWordIndex.push(tokenMatchingWordIndex);
100
- }
101
- return tokenToWordIndex;
102
- }
103
- function joinAndGetOffsets(words) {
104
- let joinedText = '';
105
- const offsets = [];
106
- let offset = 0;
107
- for (const word of words) {
108
- joinedText += word;
109
- offsets.push(offset);
110
- offset += word.length;
111
- }
112
- offsets.push(joinedText.length);
113
- return { joinedText, offsets };
114
- }
115
- export class E5TextEmbedding {
116
- modelPath;
117
- tokenizer;
118
- model;
119
- constructor(modelPath) {
120
- this.modelPath = modelPath;
121
- }
122
- async tokenizeToModelInputs(text) {
123
- await this.initializeIfNeeded();
124
- const inputs = await this.tokenizer(text);
125
- return inputs;
126
- }
127
- async inferTokenEmbeddings(inputs) {
128
- await this.initializeIfNeeded();
129
- const tokensText = this.tokenizer.model.convert_ids_to_tokens(Array.from(inputs.input_ids.data));
130
- const result = await this.model(inputs);
131
- const lastHiddenState = result.last_hidden_state;
132
- const tokenCount = lastHiddenState.dims[1];
133
- const embeddingSize = lastHiddenState.dims[2];
134
- const tokenEmbeddings = [];
135
- for (let i = 0; i < tokenCount; i++) {
136
- const tokenEmbeddingVector = lastHiddenState.data.slice(i * embeddingSize, (i + 1) * embeddingSize);
137
- const tokenId = Number(inputs.input_ids.data[i]);
138
- const tokenText = tokensText[i];
139
- tokenEmbeddings.push({
140
- id: tokenId,
141
- text: tokenText,
142
- embeddingVector: tokenEmbeddingVector
143
- });
144
- }
145
- return tokenEmbeddings;
146
- }
147
- async initializeIfNeeded() {
148
- if (this.tokenizer && this.model) {
149
- return;
150
- }
151
- const { AutoTokenizer, AutoModel } = await import('@echogarden/transformers-nodejs-lite');
152
- this.tokenizer = await AutoTokenizer.from_pretrained(this.modelPath);
153
- this.model = await AutoModel.from_pretrained(this.modelPath);
154
- }
155
- }
156
- //# sourceMappingURL=TextAlignment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextAlignment.js","sourceRoot":"","sources":["../../src/alignment/TextAlignment.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LanguageDetection.js","sourceRoot":"","sources":["../../src/api/LanguageDetection.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Translation.js","sourceRoot":"","sources":["../../src/api/Translation.ts"],"names":[],"mappings":"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"}