@speech-sdk/core 0.7.0 → 0.8.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.
- package/README.md +227 -108
- package/dist/__tests__/e2e/_save-audio.d.ts +0 -42
- package/dist/__tests__/e2e/_save-audio.d.ts.map +1 -1
- package/dist/__tests__/e2e/_save-audio.js +0 -59
- package/dist/__tests__/e2e/_save-audio.js.map +1 -1
- package/dist/audio-decode.d.ts +7 -0
- package/dist/audio-decode.d.ts.map +1 -0
- package/dist/audio-decode.js +109 -0
- package/dist/audio-decode.js.map +1 -0
- package/dist/audio-duration.d.ts +0 -5
- package/dist/audio-duration.d.ts.map +1 -1
- package/dist/audio-duration.js +5 -21
- package/dist/audio-duration.js.map +1 -1
- package/dist/audio-output.d.ts +39 -0
- package/dist/audio-output.d.ts.map +1 -0
- package/dist/audio-output.js +111 -0
- package/dist/audio-output.js.map +1 -0
- package/dist/audio-utils.d.ts +2 -10
- package/dist/audio-utils.d.ts.map +1 -1
- package/dist/audio-utils.js +57 -15
- package/dist/audio-utils.js.map +1 -1
- package/dist/captions.d.ts +0 -108
- package/dist/captions.d.ts.map +1 -1
- package/dist/captions.js +8 -98
- package/dist/captions.js.map +1 -1
- package/dist/conversation/attribute-timestamps.d.ts +26 -0
- package/dist/conversation/attribute-timestamps.d.ts.map +1 -0
- package/dist/conversation/attribute-timestamps.js +276 -0
- package/dist/conversation/attribute-timestamps.js.map +1 -0
- package/dist/conversation/dispatch.d.ts +5 -5
- package/dist/conversation/dispatch.d.ts.map +1 -1
- package/dist/conversation/dispatch.js +18 -8
- package/dist/conversation/dispatch.js.map +1 -1
- package/dist/conversation/errors.d.ts +3 -0
- package/dist/conversation/errors.d.ts.map +1 -1
- package/dist/conversation/errors.js +6 -0
- package/dist/conversation/errors.js.map +1 -1
- package/dist/conversation/pcm-concat.d.ts +0 -24
- package/dist/conversation/pcm-concat.d.ts.map +1 -1
- package/dist/conversation/pcm-concat.js +8 -183
- package/dist/conversation/pcm-concat.js.map +1 -1
- package/dist/conversation/proportional-fill.d.ts +10 -0
- package/dist/conversation/proportional-fill.d.ts.map +1 -0
- package/dist/conversation/proportional-fill.js +64 -0
- package/dist/conversation/proportional-fill.js.map +1 -0
- package/dist/conversation/silence-detection.d.ts +14 -0
- package/dist/conversation/silence-detection.d.ts.map +1 -0
- package/dist/conversation/silence-detection.js +52 -0
- package/dist/conversation/silence-detection.js.map +1 -0
- package/dist/conversation/stitch.d.ts +9 -6
- package/dist/conversation/stitch.d.ts.map +1 -1
- package/dist/conversation/stitch.js +72 -51
- package/dist/conversation/stitch.js.map +1 -1
- package/dist/conversation/types.d.ts +7 -37
- package/dist/conversation/types.d.ts.map +1 -1
- package/dist/conversation/validate.d.ts +1 -16
- package/dist/conversation/validate.d.ts.map +1 -1
- package/dist/conversation/validate.js +29 -29
- package/dist/conversation/validate.js.map +1 -1
- package/dist/default-stt-fallback.d.ts +3 -0
- package/dist/default-stt-fallback.d.ts.map +1 -0
- package/dist/default-stt-fallback.js +11 -0
- package/dist/default-stt-fallback.js.map +1 -0
- package/dist/derive-timestamps.d.ts +1 -5
- package/dist/derive-timestamps.d.ts.map +1 -1
- package/dist/derive-timestamps.js +1 -15
- package/dist/derive-timestamps.js.map +1 -1
- package/dist/encoders/mp3.d.ts +6 -0
- package/dist/encoders/mp3.d.ts.map +1 -0
- package/dist/encoders/mp3.js +54 -0
- package/dist/encoders/mp3.js.map +1 -0
- package/dist/errors.d.ts +20 -13
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +49 -15
- package/dist/errors.js.map +1 -1
- package/dist/generate-conversation.d.ts +5 -4
- package/dist/generate-conversation.d.ts.map +1 -1
- package/dist/generate-conversation.js +250 -93
- package/dist/generate-conversation.js.map +1 -1
- package/dist/generate-speech.d.ts +7 -28
- package/dist/generate-speech.d.ts.map +1 -1
- package/dist/generate-speech.js +185 -94
- package/dist/generate-speech.js.map +1 -1
- package/dist/index.d.ts +7 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -13
- package/dist/logger.js.map +1 -1
- package/dist/metadata.d.ts +0 -22
- package/dist/metadata.d.ts.map +1 -1
- package/dist/pronunciations/errors.d.ts +5 -0
- package/dist/pronunciations/errors.d.ts.map +1 -0
- package/dist/pronunciations/errors.js +8 -0
- package/dist/pronunciations/errors.js.map +1 -0
- package/dist/pronunciations/inverse-align.d.ts +4 -0
- package/dist/pronunciations/inverse-align.d.ts.map +1 -0
- package/dist/pronunciations/inverse-align.js +54 -0
- package/dist/pronunciations/inverse-align.js.map +1 -0
- package/dist/pronunciations/merge.d.ts +4 -0
- package/dist/pronunciations/merge.d.ts.map +1 -0
- package/dist/pronunciations/merge.js +13 -0
- package/dist/pronunciations/merge.js.map +1 -0
- package/dist/pronunciations/substitute.d.ts +6 -0
- package/dist/pronunciations/substitute.d.ts.map +1 -0
- package/dist/pronunciations/substitute.js +67 -0
- package/dist/pronunciations/substitute.js.map +1 -0
- package/dist/pronunciations/types.d.ts +18 -0
- package/dist/pronunciations/types.d.ts.map +1 -0
- package/dist/pronunciations/types.js +2 -0
- package/dist/pronunciations/types.js.map +1 -0
- package/dist/pronunciations/validate.d.ts +3 -0
- package/dist/pronunciations/validate.d.ts.map +1 -0
- package/dist/pronunciations/validate.js +26 -0
- package/dist/pronunciations/validate.js.map +1 -0
- package/dist/provider-utils.d.ts +4 -9
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +60 -51
- package/dist/provider-utils.js.map +1 -1
- package/dist/providers/cartesia/alignment.d.ts +0 -16
- package/dist/providers/cartesia/alignment.d.ts.map +1 -1
- package/dist/providers/cartesia/alignment.js +1 -6
- package/dist/providers/cartesia/alignment.js.map +1 -1
- package/dist/providers/cartesia/index.d.ts +29 -19
- package/dist/providers/cartesia/index.d.ts.map +1 -1
- package/dist/providers/cartesia/index.js +116 -80
- package/dist/providers/cartesia/index.js.map +1 -1
- package/dist/providers/deepgram/index.d.ts +23 -8
- package/dist/providers/deepgram/index.d.ts.map +1 -1
- package/dist/providers/deepgram/index.js +51 -18
- package/dist/providers/deepgram/index.js.map +1 -1
- package/dist/providers/elevenlabs/alignment.d.ts +7 -21
- package/dist/providers/elevenlabs/alignment.d.ts.map +1 -1
- package/dist/providers/elevenlabs/alignment.js +8 -9
- package/dist/providers/elevenlabs/alignment.js.map +1 -1
- package/dist/providers/elevenlabs/index.d.ts +14 -38
- package/dist/providers/elevenlabs/index.d.ts.map +1 -1
- package/dist/providers/elevenlabs/index.js +186 -169
- package/dist/providers/elevenlabs/index.js.map +1 -1
- package/dist/providers/fal/index.d.ts +11 -20
- package/dist/providers/fal/index.d.ts.map +1 -1
- package/dist/providers/fal/index.js +49 -37
- package/dist/providers/fal/index.js.map +1 -1
- package/dist/providers/fish-audio/index.d.ts +14 -8
- package/dist/providers/fish-audio/index.d.ts.map +1 -1
- package/dist/providers/fish-audio/index.js +47 -19
- package/dist/providers/fish-audio/index.js.map +1 -1
- package/dist/providers/gateway/index.d.ts +76 -0
- package/dist/providers/gateway/index.d.ts.map +1 -0
- package/dist/providers/gateway/index.js +251 -0
- package/dist/providers/gateway/index.js.map +1 -0
- package/dist/providers/google/index.d.ts +12 -20
- package/dist/providers/google/index.d.ts.map +1 -1
- package/dist/providers/google/index.js +180 -162
- package/dist/providers/google/index.js.map +1 -1
- package/dist/providers/hume/alignment.d.ts +30 -35
- package/dist/providers/hume/alignment.d.ts.map +1 -1
- package/dist/providers/hume/alignment.js +14 -8
- package/dist/providers/hume/alignment.js.map +1 -1
- package/dist/providers/hume/index.d.ts +16 -16
- package/dist/providers/hume/index.d.ts.map +1 -1
- package/dist/providers/hume/index.js +79 -65
- package/dist/providers/hume/index.js.map +1 -1
- package/dist/providers/inworld/alignment.d.ts +8 -22
- package/dist/providers/inworld/alignment.d.ts.map +1 -1
- package/dist/providers/inworld/alignment.js +9 -8
- package/dist/providers/inworld/alignment.js.map +1 -1
- package/dist/providers/inworld/index.d.ts +17 -20
- package/dist/providers/inworld/index.d.ts.map +1 -1
- package/dist/providers/inworld/index.js +79 -47
- package/dist/providers/inworld/index.js.map +1 -1
- package/dist/providers/mistral/index.d.ts +14 -8
- package/dist/providers/mistral/index.d.ts.map +1 -1
- package/dist/providers/mistral/index.js +63 -48
- package/dist/providers/mistral/index.js.map +1 -1
- package/dist/providers/murf/alignment.d.ts +10 -19
- package/dist/providers/murf/alignment.d.ts.map +1 -1
- package/dist/providers/murf/alignment.js +10 -5
- package/dist/providers/murf/alignment.js.map +1 -1
- package/dist/providers/murf/index.d.ts +15 -16
- package/dist/providers/murf/index.d.ts.map +1 -1
- package/dist/providers/murf/index.js +105 -58
- package/dist/providers/murf/index.js.map +1 -1
- package/dist/providers/openai/index.d.ts +43 -29
- package/dist/providers/openai/index.d.ts.map +1 -1
- package/dist/providers/openai/index.js +294 -106
- package/dist/providers/openai/index.js.map +1 -1
- package/dist/providers/resemble/alignment.d.ts +8 -29
- package/dist/providers/resemble/alignment.d.ts.map +1 -1
- package/dist/providers/resemble/alignment.js +9 -12
- package/dist/providers/resemble/alignment.js.map +1 -1
- package/dist/providers/resemble/index.d.ts +21 -11
- package/dist/providers/resemble/index.d.ts.map +1 -1
- package/dist/providers/resemble/index.js +89 -49
- package/dist/providers/resemble/index.js.map +1 -1
- package/dist/providers/smallest-ai/index.d.ts +47 -0
- package/dist/providers/smallest-ai/index.d.ts.map +1 -0
- package/dist/providers/smallest-ai/index.js +107 -0
- package/dist/providers/smallest-ai/index.js.map +1 -0
- package/dist/providers/xai/index.d.ts +25 -9
- package/dist/providers/xai/index.d.ts.map +1 -1
- package/dist/providers/xai/index.js +63 -40
- package/dist/providers/xai/index.js.map +1 -1
- package/dist/providers.d.ts +31 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +16 -0
- package/dist/providers.js.map +1 -0
- package/dist/resolve-provider.d.ts.map +1 -1
- package/dist/resolve-provider.js +8 -51
- package/dist/resolve-provider.js.map +1 -1
- package/dist/retry-options.d.ts +6 -0
- package/dist/retry-options.d.ts.map +1 -0
- package/dist/retry-options.js +48 -0
- package/dist/retry-options.js.map +1 -0
- package/dist/speech-provider.d.ts +28 -53
- package/dist/speech-provider.d.ts.map +1 -1
- package/dist/speech-provider.js +5 -26
- package/dist/speech-provider.js.map +1 -1
- package/dist/speech-result.d.ts +8 -9
- package/dist/speech-result.d.ts.map +1 -1
- package/dist/speech-result.js.map +1 -1
- package/dist/speech-to-text-provider.d.ts +0 -12
- package/dist/speech-to-text-provider.d.ts.map +1 -1
- package/dist/stream-speech.d.ts +4 -2
- package/dist/stream-speech.d.ts.map +1 -1
- package/dist/stream-speech.js +36 -22
- package/dist/stream-speech.js.map +1 -1
- package/dist/timestamps.d.ts +3 -17
- package/dist/timestamps.d.ts.map +1 -1
- package/dist/turns.d.ts +9 -0
- package/dist/turns.d.ts.map +1 -0
- package/dist/turns.js +21 -0
- package/dist/turns.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/volume-adjust.d.ts +0 -6
- package/dist/volume-adjust.d.ts.map +1 -1
- package/dist/volume-adjust.js +4 -16
- package/dist/volume-adjust.js.map +1 -1
- package/package.json +13 -66
- package/dist/stt-providers/openai/index.d.ts +0 -42
- package/dist/stt-providers/openai/index.d.ts.map +0 -1
- package/dist/stt-providers/openai/index.js +0 -184
- package/dist/stt-providers/openai/index.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// A case-sensitive rule for an already-lowercase word can collide with a case-insensitive rule for the same word in one merge call; gateway dictionaries dedupe via a unique index, and Map.set's last-write-wins is fine for the inline-only case.
|
|
2
|
+
export function ruleMapKey(word, caseSensitive) {
|
|
3
|
+
return caseSensitive ? word : word.toLowerCase();
|
|
4
|
+
}
|
|
5
|
+
export function mergeRules(rules) {
|
|
6
|
+
const map = new Map();
|
|
7
|
+
for (const rule of rules) {
|
|
8
|
+
const caseSensitive = rule.caseSensitive ?? false;
|
|
9
|
+
map.set(ruleMapKey(rule.word, caseSensitive), { ...rule, caseSensitive });
|
|
10
|
+
}
|
|
11
|
+
return map;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/pronunciations/merge.ts"],"names":[],"mappings":"AAEA,oPAAoP;AACpP,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,aAAsB;IAC7D,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"substitute.d.ts","sourceRoot":"","sources":["../../src/pronunciations/substitute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0CtD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CA0CjC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// `\W` treats non-ASCII letters as non-word, falsely reporting word boundaries inside "café" / "señor".
|
|
2
|
+
const WORD_CHAR_RE = /[\p{L}\p{N}_]/u;
|
|
3
|
+
function isWordBoundary(text, index) {
|
|
4
|
+
if (index <= 0 || index >= text.length) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
return !(WORD_CHAR_RE.test(text[index]) && WORD_CHAR_RE.test(text[index - 1]));
|
|
8
|
+
}
|
|
9
|
+
function findMatch(text, i, sortedRules) {
|
|
10
|
+
for (const rule of sortedRules) {
|
|
11
|
+
const len = rule.word.length;
|
|
12
|
+
if (i + len > text.length) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (!isWordBoundary(text, i + len)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const slice = text.slice(i, i + len);
|
|
19
|
+
const isMatch = rule.caseSensitive
|
|
20
|
+
? slice === rule.word
|
|
21
|
+
: slice.toLowerCase() === rule.word.toLowerCase();
|
|
22
|
+
if (isMatch) {
|
|
23
|
+
return rule;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
function ruleKeyFor(rule) {
|
|
29
|
+
return rule.caseSensitive ? rule.word : rule.word.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
export function substitute(text, ruleMap) {
|
|
32
|
+
if (ruleMap.size === 0) {
|
|
33
|
+
return { text, edits: [] };
|
|
34
|
+
}
|
|
35
|
+
const sortedRules = [...ruleMap.values()].sort((a, b) => b.word.length - a.word.length);
|
|
36
|
+
const out = [];
|
|
37
|
+
const edits = [];
|
|
38
|
+
let i = 0;
|
|
39
|
+
let outLen = 0;
|
|
40
|
+
while (i < text.length) {
|
|
41
|
+
if (!isWordBoundary(text, i)) {
|
|
42
|
+
out.push(text[i]);
|
|
43
|
+
outLen += 1;
|
|
44
|
+
i += 1;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const matched = findMatch(text, i, sortedRules);
|
|
48
|
+
if (matched) {
|
|
49
|
+
out.push(matched.replacement);
|
|
50
|
+
edits.push({
|
|
51
|
+
originalRange: [i, i + matched.word.length],
|
|
52
|
+
replacementRange: [outLen, outLen + matched.replacement.length],
|
|
53
|
+
originalWord: text.slice(i, i + matched.word.length),
|
|
54
|
+
ruleKey: ruleKeyFor(matched),
|
|
55
|
+
});
|
|
56
|
+
outLen += matched.replacement.length;
|
|
57
|
+
i += matched.word.length;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
out.push(text[i]);
|
|
61
|
+
outLen += 1;
|
|
62
|
+
i += 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { text: out.join(""), edits };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=substitute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"substitute.js","sourceRoot":"","sources":["../../src/pronunciations/substitute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface Pronunciation {
|
|
2
|
+
readonly caseSensitive?: boolean;
|
|
3
|
+
readonly replacement: string;
|
|
4
|
+
readonly word: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PronunciationsInput {
|
|
7
|
+
readonly dictionaryIds?: readonly string[];
|
|
8
|
+
readonly rules?: readonly Pronunciation[];
|
|
9
|
+
}
|
|
10
|
+
export type DirectPronunciationsInput = Omit<PronunciationsInput, "dictionaryIds">;
|
|
11
|
+
export type PronunciationsFor<M> = M extends string ? PronunciationsInput : DirectPronunciationsInput;
|
|
12
|
+
export interface Edit {
|
|
13
|
+
readonly originalRange: readonly [number, number];
|
|
14
|
+
readonly originalWord: string;
|
|
15
|
+
readonly replacementRange: readonly [number, number];
|
|
16
|
+
readonly ruleKey: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pronunciations/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAGD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,mBAAmB,EACnB,eAAe,CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C,mBAAmB,GACnB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pronunciations/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/pronunciations/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EACtC,SAAS,EAAE,OAAO,GACjB,IAAI,CA+BN"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SpeechSDKError } from "../errors.js";
|
|
2
|
+
import { DictionaryIdsRequireGatewayError } from "./errors.js";
|
|
3
|
+
export function validatePronunciationsInput(input, isGateway) {
|
|
4
|
+
if (input === undefined) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const dictIds = input.dictionaryIds ?? [];
|
|
8
|
+
const rules = input.rules ?? [];
|
|
9
|
+
if (dictIds.length > 0 && !isGateway) {
|
|
10
|
+
throw new DictionaryIdsRequireGatewayError();
|
|
11
|
+
}
|
|
12
|
+
for (const id of dictIds) {
|
|
13
|
+
if (id.length === 0) {
|
|
14
|
+
throw new SpeechSDKError("pronunciations.dictionaryIds: every id must be a non-empty string.");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
for (const rule of rules) {
|
|
18
|
+
if (rule.word.length === 0) {
|
|
19
|
+
throw new SpeechSDKError("pronunciations.rules: every rule must have a non-empty `word`.");
|
|
20
|
+
}
|
|
21
|
+
if (rule.replacement.length === 0) {
|
|
22
|
+
throw new SpeechSDKError("pronunciations.rules: every rule must have a non-empty `replacement`.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/pronunciations/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAG/D,MAAM,UAAU,2BAA2B,CACzC,KAAsC,EACtC,SAAkB;IAElB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,gCAAgC,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CACtB,oEAAoE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,cAAc,CACtB,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,cAAc,CACtB,uEAAuE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/provider-utils.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
+
import { ApiError } from "./errors.js";
|
|
1
2
|
export declare const SDK_USER_AGENT = "jellypod-speech-sdk";
|
|
2
|
-
/**
|
|
3
|
-
* Split a `"provider/model"` spec into its parts. Spec with no slash is
|
|
4
|
-
* treated as a bare provider name (caller falls back to `defaultModel`).
|
|
5
|
-
*/
|
|
6
|
-
export declare function parseProviderModelSpec(spec: string): {
|
|
7
|
-
providerName: string;
|
|
8
|
-
modelId: string | undefined;
|
|
9
|
-
};
|
|
10
3
|
export declare function resolveApiKey(stored: string | undefined, envVar: string, providerName: string): string;
|
|
11
|
-
export declare function
|
|
4
|
+
export declare function isRetriableApiError(error: ApiError): boolean;
|
|
5
|
+
export declare function parseRetryAfter(headerValue: string | null): number | undefined;
|
|
6
|
+
export declare function handleErrorResponse(response: Response): Promise<void>;
|
|
12
7
|
//# sourceMappingURL=provider-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AAG3D,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAEpD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,CAQR;AAiCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAK5D;AAMD,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,GAAG,SAAS,CAgBpB;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3E"}
|
package/dist/provider-utils.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import { ApiError, MissingApiKeyError } from "./errors.js";
|
|
2
|
-
//
|
|
3
|
-
// usage by integration. Sent as `X-User-Agent` because `User-Agent` is
|
|
4
|
-
// a forbidden header name in browser fetch. Callers may override via
|
|
5
|
-
// options.headers.
|
|
2
|
+
// Sent as X-User-Agent — User-Agent is a forbidden header name in browser fetch.
|
|
6
3
|
export const SDK_USER_AGENT = "jellypod-speech-sdk";
|
|
7
|
-
/**
|
|
8
|
-
* Split a `"provider/model"` spec into its parts. Spec with no slash is
|
|
9
|
-
* treated as a bare provider name (caller falls back to `defaultModel`).
|
|
10
|
-
*/
|
|
11
|
-
export function parseProviderModelSpec(spec) {
|
|
12
|
-
const slashIndex = spec.indexOf("/");
|
|
13
|
-
if (slashIndex === -1) {
|
|
14
|
-
return { providerName: spec, modelId: undefined };
|
|
15
|
-
}
|
|
16
|
-
return {
|
|
17
|
-
providerName: spec.slice(0, slashIndex),
|
|
18
|
-
modelId: spec.slice(slashIndex + 1) || undefined,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
4
|
export function resolveApiKey(stored, envVar, providerName) {
|
|
22
5
|
const key = stored ??
|
|
23
6
|
(typeof process === "undefined" ? undefined : process.env?.[envVar]);
|
|
@@ -26,47 +9,73 @@ export function resolveApiKey(stored, envVar, providerName) {
|
|
|
26
9
|
}
|
|
27
10
|
return key;
|
|
28
11
|
}
|
|
29
|
-
function
|
|
12
|
+
function truncate(body) {
|
|
13
|
+
return body.length > 200 ? `${body.slice(0, 200)}…` : body;
|
|
14
|
+
}
|
|
15
|
+
function parseErrorJson(body) {
|
|
30
16
|
if (!body) {
|
|
31
|
-
return
|
|
17
|
+
return {};
|
|
32
18
|
}
|
|
33
19
|
try {
|
|
34
20
|
const json = JSON.parse(body);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
if (typeof json.detail === "string") {
|
|
46
|
-
return json.detail;
|
|
47
|
-
}
|
|
21
|
+
const candidates = [
|
|
22
|
+
json.error,
|
|
23
|
+
json.error?.message,
|
|
24
|
+
json.message,
|
|
25
|
+
json.detail,
|
|
26
|
+
];
|
|
27
|
+
const message = candidates.find((c) => typeof c === "string") ??
|
|
28
|
+
truncate(body);
|
|
29
|
+
const code = typeof json.code === "string" ? json.code : undefined;
|
|
30
|
+
return { message, code };
|
|
48
31
|
}
|
|
49
32
|
catch {
|
|
50
|
-
|
|
51
|
-
if (body.length > 200) {
|
|
52
|
-
return `${body.slice(0, 200)}…`;
|
|
53
|
-
}
|
|
54
|
-
return body;
|
|
33
|
+
return { message: truncate(body) };
|
|
55
34
|
}
|
|
56
|
-
return body.length > 200 ? `${body.slice(0, 200)}…` : body;
|
|
57
35
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
36
|
+
// 501 is terminal — gateway uses it for "capability will never work" (e.g. timestamps_unsupported).
|
|
37
|
+
// 429 retry honors Retry-After in retry-options.ts (RFC 7231 §7.1.3).
|
|
38
|
+
export function isRetriableApiError(error) {
|
|
39
|
+
if (error.statusCode === 429) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return error.statusCode >= 500 && error.statusCode !== 501;
|
|
43
|
+
}
|
|
44
|
+
const RETRY_AFTER_SECONDS_RE = /^\d+(\.\d+)?$/;
|
|
45
|
+
// RFC 7231 §7.1.3: Retry-After is either delay-seconds (non-negative integer) or HTTP-date.
|
|
46
|
+
// Returns ms; undefined when missing/unparsable; clamped at 0 lower bound.
|
|
47
|
+
export function parseRetryAfter(headerValue) {
|
|
48
|
+
if (!headerValue) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const trimmed = headerValue.trim();
|
|
52
|
+
if (trimmed === "") {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (RETRY_AFTER_SECONDS_RE.test(trimmed)) {
|
|
56
|
+
return Math.max(0, Math.round(Number(trimmed) * 1000));
|
|
57
|
+
}
|
|
58
|
+
const dateMs = Date.parse(trimmed);
|
|
59
|
+
if (Number.isNaN(dateMs)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
return Math.max(0, dateMs - Date.now());
|
|
63
|
+
}
|
|
64
|
+
export async function handleErrorResponse(response) {
|
|
65
|
+
if (response.ok) {
|
|
66
|
+
return;
|
|
70
67
|
}
|
|
68
|
+
const responseBody = await response.text().catch(() => undefined);
|
|
69
|
+
const { message: detail, code } = parseErrorJson(responseBody);
|
|
70
|
+
const message = detail
|
|
71
|
+
? `API error ${response.status}: ${detail}`
|
|
72
|
+
: `API error ${response.status}`;
|
|
73
|
+
const retryAfterMs = parseRetryAfter(response.headers.get("retry-after"));
|
|
74
|
+
throw new ApiError(message, {
|
|
75
|
+
statusCode: response.status,
|
|
76
|
+
responseBody,
|
|
77
|
+
code,
|
|
78
|
+
...(retryAfterMs != null && { retryAfterMs }),
|
|
79
|
+
});
|
|
71
80
|
}
|
|
72
81
|
//# sourceMappingURL=provider-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3D,
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
import type { WordTimestamp } from "../../timestamps.js";
|
|
2
|
-
/**
|
|
3
|
-
* Shape of the `word_timestamps` block inside a Cartesia SSE/WebSocket
|
|
4
|
-
* `type: "timestamps"` message. Three parallel arrays — index N is the Nth
|
|
5
|
-
* word's text (`words[N]`), start time (`start[N]`, seconds), and end time
|
|
6
|
-
* (`end[N]`, seconds).
|
|
7
|
-
*
|
|
8
|
-
* Cartesia emits these messages incrementally — each message covers a span
|
|
9
|
-
* of words synthesized so far in the current `context_id`. The SDK
|
|
10
|
-
* accumulates them in arrival order and flattens at end-of-stream.
|
|
11
|
-
*/
|
|
12
2
|
export interface CartesiaWordTimestamps {
|
|
13
3
|
readonly end: readonly number[];
|
|
14
4
|
readonly start: readonly number[];
|
|
15
5
|
readonly words: readonly string[];
|
|
16
6
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Flatten a sequence of `word_timestamps` messages — collected as the SSE
|
|
19
|
-
* stream emitted them — into a single `WordTimestamp[]`. Skips entries past
|
|
20
|
-
* the shortest array length so a malformed message can't produce undefined
|
|
21
|
-
* start/end values.
|
|
22
|
-
*/
|
|
23
7
|
export declare function mergeWordTimestampMessages(messages: readonly CartesiaWordTimestamps[]): WordTimestamp[];
|
|
24
8
|
//# sourceMappingURL=alignment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/alignment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/alignment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAGD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GAC1C,aAAa,EAAE,CAejB"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Flatten a sequence of `word_timestamps` messages — collected as the SSE
|
|
3
|
-
* stream emitted them — into a single `WordTimestamp[]`. Skips entries past
|
|
4
|
-
* the shortest array length so a malformed message can't produce undefined
|
|
5
|
-
* start/end values.
|
|
6
|
-
*/
|
|
1
|
+
// Skips past the shortest array length to guard against malformed messages.
|
|
7
2
|
export function mergeWordTimestampMessages(messages) {
|
|
8
3
|
const out = [];
|
|
9
4
|
for (const msg of messages) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../../src/providers/cartesia/alignment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../../src/providers/cartesia/alignment.ts"],"names":[],"mappings":"AASA,4EAA4E;AAC5E,MAAM,UAAU,0BAA0B,CACxC,QAA2C;IAE3C,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,30 +1,19 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AudioOutput } from "../../audio-output.js";
|
|
2
|
+
import { type ModelInfo, type ResolvedModel, type SpeechProvider } from "../../speech-provider.js";
|
|
3
|
+
import type { ResolvedSTTModel } from "../../speech-to-text-provider.js";
|
|
2
4
|
import type { WordTimestamp } from "../../timestamps.js";
|
|
3
5
|
export interface CartesiaSpeechProviderConfig {
|
|
4
6
|
apiKey?: string;
|
|
5
7
|
baseURL?: string;
|
|
8
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
6
9
|
fetch?: typeof globalThis.fetch;
|
|
7
10
|
}
|
|
11
|
+
export declare const CARTESIA_PROVIDER_ID: "cartesia";
|
|
12
|
+
export declare const CARTESIA_MODELS: readonly ModelInfo[];
|
|
8
13
|
export declare class CartesiaSpeechProvider implements SpeechProvider<string, string> {
|
|
9
|
-
readonly id
|
|
14
|
+
readonly id: "cartesia";
|
|
10
15
|
readonly defaultModel = "sonic-3";
|
|
11
|
-
readonly models: readonly [
|
|
12
|
-
readonly id: "sonic-3";
|
|
13
|
-
readonly releaseDate: "2025-10-27";
|
|
14
|
-
readonly languages: readonly ["en", "fr", "de", "es", "pt", "zh", "ja", "hi", "it", "ko", "nl", "pl", "ru", "sv", "tr", "tl", "bg", "ro", "ar", "cs", "el", "fi", "hr", "ms", "sk", "da", "ta", "uk", "hu", "no", "vi", "bn", "th", "he", "ka", "id", "te", "gu", "kn", "ml", "mr", "pa"];
|
|
15
|
-
readonly features: readonly ["streaming", "audio-tags", "inline-voice-cloning", {
|
|
16
|
-
readonly id: "timestamps";
|
|
17
|
-
readonly mode: "native";
|
|
18
|
-
}];
|
|
19
|
-
}, {
|
|
20
|
-
readonly id: "sonic-2";
|
|
21
|
-
readonly releaseDate: "2025-03-13";
|
|
22
|
-
readonly languages: readonly ["en"];
|
|
23
|
-
readonly features: readonly ["streaming", {
|
|
24
|
-
readonly id: "timestamps";
|
|
25
|
-
readonly mode: "native";
|
|
26
|
-
}];
|
|
27
|
-
}];
|
|
16
|
+
readonly models: readonly ModelInfo[];
|
|
28
17
|
private static readonly PASSTHROUGH_TAGS;
|
|
29
18
|
private static readonly EMOTIONS;
|
|
30
19
|
private readonly apiKey;
|
|
@@ -72,6 +61,27 @@ export declare class CartesiaSpeechProvider implements SpeechProvider<string, st
|
|
|
72
61
|
};
|
|
73
62
|
mediaType: string;
|
|
74
63
|
} | undefined;
|
|
64
|
+
resolveOutputFormat(modelId: string, output: AudioOutput): {
|
|
65
|
+
providerOptions: {
|
|
66
|
+
output_format: {
|
|
67
|
+
container: string;
|
|
68
|
+
encoding: string;
|
|
69
|
+
sample_rate: number;
|
|
70
|
+
bit_rate?: undefined;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
expectedMediaType: string;
|
|
74
|
+
} | {
|
|
75
|
+
providerOptions: {
|
|
76
|
+
output_format: {
|
|
77
|
+
container: string;
|
|
78
|
+
bit_rate: number;
|
|
79
|
+
sample_rate: number;
|
|
80
|
+
encoding?: undefined;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
expectedMediaType: string;
|
|
84
|
+
} | undefined;
|
|
75
85
|
}
|
|
76
86
|
export declare function createCartesia(config?: CartesiaSpeechProviderConfig): (modelId?: string) => ResolvedModel<string>;
|
|
77
87
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"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"}
|