@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
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
2
|
+
export const XAI_PROVIDER_ID = "xai";
|
|
3
|
+
// ISO 639-1 codes; xAI also accepts BCP-47 (e.g. pt-BR) and "auto" via providerOptions.language.
|
|
4
|
+
const XAI_LANGUAGES = [
|
|
5
|
+
"en",
|
|
6
|
+
"ar",
|
|
7
|
+
"bn",
|
|
8
|
+
"zh",
|
|
9
|
+
"fr",
|
|
10
|
+
"de",
|
|
11
|
+
"hi",
|
|
12
|
+
"id",
|
|
13
|
+
"it",
|
|
14
|
+
"ja",
|
|
15
|
+
"ko",
|
|
16
|
+
"pt",
|
|
17
|
+
"ru",
|
|
18
|
+
"es",
|
|
19
|
+
"tr",
|
|
20
|
+
"vi",
|
|
21
|
+
];
|
|
22
|
+
export const XAI_MODELS = [
|
|
23
|
+
{
|
|
24
|
+
id: "grok-tts",
|
|
25
|
+
releaseDate: "2025-11-01",
|
|
26
|
+
languages: XAI_LANGUAGES,
|
|
27
|
+
features: ["streaming", "audio-tags"],
|
|
28
|
+
},
|
|
29
|
+
];
|
|
2
30
|
export class XaiSpeechProvider {
|
|
3
|
-
id =
|
|
31
|
+
id = XAI_PROVIDER_ID;
|
|
4
32
|
defaultModel = "grok-tts";
|
|
5
|
-
|
|
6
|
-
// region-qualified BCP-47 codes (e.g. `pt-BR`, `es-MX`) and `auto` for
|
|
7
|
-
// detection — callers can pass either via `providerOptions.language`.
|
|
8
|
-
static LANGUAGES = [
|
|
9
|
-
"en",
|
|
10
|
-
"ar",
|
|
11
|
-
"bn",
|
|
12
|
-
"zh",
|
|
13
|
-
"fr",
|
|
14
|
-
"de",
|
|
15
|
-
"hi",
|
|
16
|
-
"id",
|
|
17
|
-
"it",
|
|
18
|
-
"ja",
|
|
19
|
-
"ko",
|
|
20
|
-
"pt",
|
|
21
|
-
"ru",
|
|
22
|
-
"es",
|
|
23
|
-
"tr",
|
|
24
|
-
"vi",
|
|
25
|
-
];
|
|
26
|
-
models = [
|
|
27
|
-
{
|
|
28
|
-
id: "grok-tts",
|
|
29
|
-
releaseDate: "2025-11-01",
|
|
30
|
-
languages: XaiSpeechProvider.LANGUAGES,
|
|
31
|
-
features: ["streaming", "audio-tags"],
|
|
32
|
-
},
|
|
33
|
-
];
|
|
33
|
+
models = XAI_MODELS;
|
|
34
34
|
apiKey;
|
|
35
35
|
baseURL;
|
|
36
36
|
fetchFn;
|
|
@@ -39,15 +39,12 @@ export class XaiSpeechProvider {
|
|
|
39
39
|
this.baseURL = config.baseURL ?? "https://api.x.ai/v1";
|
|
40
40
|
this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
41
41
|
}
|
|
42
|
-
// xAI natively supports bracket
|
|
43
|
-
// angle-bracket wrapping tags (`<whisper>...</whisper>`), so we pass text
|
|
44
|
-
// through unchanged.
|
|
42
|
+
// xAI natively supports bracket and angle-bracket audio tags, so passthrough is safe.
|
|
45
43
|
processAudioTags(text) {
|
|
46
44
|
return { text, warnings: [] };
|
|
47
45
|
}
|
|
48
46
|
buildBody(options) {
|
|
49
|
-
// `language` is required by xAI
|
|
50
|
-
// users can override via providerOptions.language with a BCP-47 code.
|
|
47
|
+
// `language` is required by xAI; default to "auto" so detection runs unless caller overrides.
|
|
51
48
|
const body = {
|
|
52
49
|
language: "auto",
|
|
53
50
|
...options.providerOptions,
|
|
@@ -90,7 +87,7 @@ export class XaiSpeechProvider {
|
|
|
90
87
|
body: JSON.stringify(body),
|
|
91
88
|
signal: options.abortSignal,
|
|
92
89
|
});
|
|
93
|
-
await handleErrorResponse(response
|
|
90
|
+
await handleErrorResponse(response);
|
|
94
91
|
const arrayBuffer = await response.arrayBuffer();
|
|
95
92
|
const mediaType = response.headers.get("content-type") ??
|
|
96
93
|
this.mediaTypeForCodec(this.codecFromBody(body));
|
|
@@ -112,7 +109,7 @@ export class XaiSpeechProvider {
|
|
|
112
109
|
body: JSON.stringify(body),
|
|
113
110
|
signal: options.abortSignal,
|
|
114
111
|
});
|
|
115
|
-
await handleErrorResponse(response
|
|
112
|
+
await handleErrorResponse(response);
|
|
116
113
|
if (!response.body) {
|
|
117
114
|
throw new Error(`xai/${options.modelId}: response has no body`);
|
|
118
115
|
}
|
|
@@ -124,22 +121,48 @@ export class XaiSpeechProvider {
|
|
|
124
121
|
}
|
|
125
122
|
getStitchOptions(modelId) {
|
|
126
123
|
if (this.models.some((m) => m.id === modelId)) {
|
|
127
|
-
// xAI Grok TTS accepts output_format.codec and its mediaTypeForCodec
|
|
128
|
-
// helper maps "wav" → "audio/wav", which the stitch layer can decode.
|
|
129
124
|
return {
|
|
130
125
|
providerOptions: { output_format: { codec: "wav" } },
|
|
131
126
|
mediaType: "audio/wav",
|
|
132
127
|
};
|
|
133
128
|
}
|
|
134
|
-
return
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
resolveOutputFormat(modelId, output) {
|
|
132
|
+
if (!this.models.some((m) => m.id === modelId)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
switch (output.format) {
|
|
136
|
+
case "wav":
|
|
137
|
+
return {
|
|
138
|
+
providerOptions: { output_format: { codec: "wav" } },
|
|
139
|
+
expectedMediaType: "audio/wav",
|
|
140
|
+
};
|
|
141
|
+
case "mp3":
|
|
142
|
+
return {
|
|
143
|
+
providerOptions: { output_format: { codec: "mp3" } },
|
|
144
|
+
expectedMediaType: "audio/mpeg",
|
|
145
|
+
};
|
|
146
|
+
case "pcm":
|
|
147
|
+
return {
|
|
148
|
+
providerOptions: {
|
|
149
|
+
output_format: { codec: "pcm", sample_rate: 24_000 },
|
|
150
|
+
},
|
|
151
|
+
expectedMediaType: "audio/pcm;rate=24000",
|
|
152
|
+
};
|
|
153
|
+
default:
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
135
156
|
}
|
|
136
157
|
}
|
|
137
158
|
export function createXai(config = {}) {
|
|
138
159
|
const provider = new XaiSpeechProvider(config);
|
|
160
|
+
const fallbackSTT = config.fallbackSTT;
|
|
139
161
|
return function xai(modelId) {
|
|
140
162
|
return {
|
|
141
163
|
provider,
|
|
142
164
|
modelId: modelId ?? provider.defaultModel,
|
|
165
|
+
...(fallbackSTT && { fallbackSTT }),
|
|
143
166
|
};
|
|
144
167
|
};
|
|
145
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type { CartesiaSpeechProviderConfig } from "./providers/cartesia/index.js";
|
|
2
|
+
export { createCartesia } from "./providers/cartesia/index.js";
|
|
3
|
+
export type { DeepgramSpeechProviderConfig } from "./providers/deepgram/index.js";
|
|
4
|
+
export { createDeepgram } from "./providers/deepgram/index.js";
|
|
5
|
+
export type { ElevenLabsSpeechProviderConfig } from "./providers/elevenlabs/index.js";
|
|
6
|
+
export { createElevenLabs } from "./providers/elevenlabs/index.js";
|
|
7
|
+
export type { FalSpeechProviderConfig } from "./providers/fal/index.js";
|
|
8
|
+
export { createFal } from "./providers/fal/index.js";
|
|
9
|
+
export type { FishAudioSpeechProviderConfig } from "./providers/fish-audio/index.js";
|
|
10
|
+
export { createFishAudio } from "./providers/fish-audio/index.js";
|
|
11
|
+
export type { SpeechGatewayProviderConfig } from "./providers/gateway/index.js";
|
|
12
|
+
export { createSpeechGateway } from "./providers/gateway/index.js";
|
|
13
|
+
export type { GoogleSpeechProviderConfig } from "./providers/google/index.js";
|
|
14
|
+
export { createGoogle } from "./providers/google/index.js";
|
|
15
|
+
export type { HumeSpeechProviderConfig } from "./providers/hume/index.js";
|
|
16
|
+
export { createHume } from "./providers/hume/index.js";
|
|
17
|
+
export type { InworldSpeechProviderConfig } from "./providers/inworld/index.js";
|
|
18
|
+
export { createInworld } from "./providers/inworld/index.js";
|
|
19
|
+
export type { MistralSpeechProviderConfig } from "./providers/mistral/index.js";
|
|
20
|
+
export { createMistral } from "./providers/mistral/index.js";
|
|
21
|
+
export type { MurfSpeechProviderConfig } from "./providers/murf/index.js";
|
|
22
|
+
export { createMurf } from "./providers/murf/index.js";
|
|
23
|
+
export type { OpenAISpeechProviderConfig } from "./providers/openai/index.js";
|
|
24
|
+
export { createOpenAI } from "./providers/openai/index.js";
|
|
25
|
+
export type { ResembleSpeechProviderConfig } from "./providers/resemble/index.js";
|
|
26
|
+
export { createResemble } from "./providers/resemble/index.js";
|
|
27
|
+
export type { SmallestAISpeechProviderConfig } from "./providers/smallest-ai/index.js";
|
|
28
|
+
export { createSmallestAI } from "./providers/smallest-ai/index.js";
|
|
29
|
+
export type { XaiSpeechProviderConfig } from "./providers/xai/index.js";
|
|
30
|
+
export { createXai } from "./providers/xai/index.js";
|
|
31
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,YAAY,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { createCartesia } from "./providers/cartesia/index.js";
|
|
2
|
+
export { createDeepgram } from "./providers/deepgram/index.js";
|
|
3
|
+
export { createElevenLabs } from "./providers/elevenlabs/index.js";
|
|
4
|
+
export { createFal } from "./providers/fal/index.js";
|
|
5
|
+
export { createFishAudio } from "./providers/fish-audio/index.js";
|
|
6
|
+
export { createSpeechGateway } from "./providers/gateway/index.js";
|
|
7
|
+
export { createGoogle } from "./providers/google/index.js";
|
|
8
|
+
export { createHume } from "./providers/hume/index.js";
|
|
9
|
+
export { createInworld } from "./providers/inworld/index.js";
|
|
10
|
+
export { createMistral } from "./providers/mistral/index.js";
|
|
11
|
+
export { createMurf } from "./providers/murf/index.js";
|
|
12
|
+
export { createOpenAI } from "./providers/openai/index.js";
|
|
13
|
+
export { createResemble } from "./providers/resemble/index.js";
|
|
14
|
+
export { createSmallestAI } from "./providers/smallest-ai/index.js";
|
|
15
|
+
export { createXai } from "./providers/xai/index.js";
|
|
16
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-provider.d.ts","sourceRoot":"","sources":["../src/resolve-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-provider.d.ts","sourceRoot":"","sources":["../src/resolve-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,aAAa,EAC7B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,aAAa,CAiBf"}
|
package/dist/resolve-provider.js
CHANGED
|
@@ -1,66 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { parseProviderModelSpec } from "./provider-utils.js";
|
|
3
|
-
import { CartesiaSpeechProvider } from "./providers/cartesia/index.js";
|
|
4
|
-
import { DeepgramSpeechProvider } from "./providers/deepgram/index.js";
|
|
5
|
-
import { ElevenLabsSpeechProvider } from "./providers/elevenlabs/index.js";
|
|
6
|
-
import { FalSpeechProvider } from "./providers/fal/index.js";
|
|
7
|
-
import { FishAudioSpeechProvider } from "./providers/fish-audio/index.js";
|
|
8
|
-
import { GoogleSpeechProvider } from "./providers/google/index.js";
|
|
9
|
-
import { HumeSpeechProvider } from "./providers/hume/index.js";
|
|
10
|
-
import { InworldSpeechProvider } from "./providers/inworld/index.js";
|
|
11
|
-
import { MistralSpeechProvider } from "./providers/mistral/index.js";
|
|
12
|
-
import { MurfSpeechProvider } from "./providers/murf/index.js";
|
|
13
|
-
import { OpenAISpeechProvider } from "./providers/openai/index.js";
|
|
14
|
-
import { ResembleSpeechProvider } from "./providers/resemble/index.js";
|
|
15
|
-
import { XaiSpeechProvider } from "./providers/xai/index.js";
|
|
1
|
+
import { SpeechGatewayProvider } from "./providers/gateway/index.js";
|
|
16
2
|
function isResolvedModel(model) {
|
|
17
3
|
return (model != null &&
|
|
18
4
|
typeof model === "object" &&
|
|
19
5
|
"provider" in model &&
|
|
20
6
|
"modelId" in model);
|
|
21
7
|
}
|
|
22
|
-
function createBuiltinProvider(name, options) {
|
|
23
|
-
const config = options?.apiKey ? { apiKey: options.apiKey } : {};
|
|
24
|
-
switch (name) {
|
|
25
|
-
case "openai":
|
|
26
|
-
return new OpenAISpeechProvider(config);
|
|
27
|
-
case "elevenlabs":
|
|
28
|
-
return new ElevenLabsSpeechProvider(config);
|
|
29
|
-
case "deepgram":
|
|
30
|
-
return new DeepgramSpeechProvider(config);
|
|
31
|
-
case "cartesia":
|
|
32
|
-
return new CartesiaSpeechProvider(config);
|
|
33
|
-
case "hume":
|
|
34
|
-
return new HumeSpeechProvider(config);
|
|
35
|
-
case "inworld":
|
|
36
|
-
return new InworldSpeechProvider(config);
|
|
37
|
-
case "google":
|
|
38
|
-
return new GoogleSpeechProvider(config);
|
|
39
|
-
case "fish-audio":
|
|
40
|
-
return new FishAudioSpeechProvider(config);
|
|
41
|
-
case "murf":
|
|
42
|
-
return new MurfSpeechProvider(config);
|
|
43
|
-
case "resemble":
|
|
44
|
-
return new ResembleSpeechProvider(config);
|
|
45
|
-
case "fal-ai":
|
|
46
|
-
return new FalSpeechProvider(config);
|
|
47
|
-
case "mistral":
|
|
48
|
-
return new MistralSpeechProvider(config);
|
|
49
|
-
case "xai":
|
|
50
|
-
return new XaiSpeechProvider(config);
|
|
51
|
-
default:
|
|
52
|
-
throw new SpeechSDKError(`Unknown provider: ${name}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
8
|
export function resolveModel(model, options) {
|
|
56
9
|
if (isResolvedModel(model)) {
|
|
57
10
|
return model;
|
|
58
11
|
}
|
|
59
|
-
|
|
60
|
-
|
|
12
|
+
if (!model) {
|
|
13
|
+
throw new Error('A model is required. Pass a "provider/model" string (e.g., "openai/gpt-4o-mini-tts") to route through Speech Gateway, or a ResolvedModel from a factory like createOpenAI()().');
|
|
14
|
+
}
|
|
15
|
+
// Bare `"provider/model"` strings route through the speech gateway; direct provider access requires a ResolvedModel from the factory.
|
|
16
|
+
const config = options?.apiKey ? { apiKey: options.apiKey } : {};
|
|
17
|
+
const provider = new SpeechGatewayProvider(config);
|
|
61
18
|
return {
|
|
62
19
|
provider,
|
|
63
|
-
modelId:
|
|
20
|
+
modelId: model,
|
|
64
21
|
};
|
|
65
22
|
}
|
|
66
23
|
//# sourceMappingURL=resolve-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-provider.js","sourceRoot":"","sources":["../src/resolve-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-provider.js","sourceRoot":"","sources":["../src/resolve-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,UAAU,IAAI,KAAK;QACnB,SAAS,IAAI,KAAK,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAA6B,EAC7B,OAA6B;IAE7B,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gLAAgL,CACjL,CAAC;IACJ,CAAC;IACD,sIAAsI;IACtI,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-options.d.ts","sourceRoot":"","sources":["../src/retry-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAUxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;CACtC,GAAG,aAAa,CA0BhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ApiError } from "./errors.js";
|
|
2
|
+
import { isRetriableApiError } from "./provider-utils.js";
|
|
3
|
+
// Cap server-supplied Retry-After at 60s. A misbehaving upstream sending Retry-After: 86400
|
|
4
|
+
// shouldn't hang the SDK; failing fast is better than blocking the caller for hours.
|
|
5
|
+
const RETRY_AFTER_MAX_MS = 60_000;
|
|
6
|
+
// Added on top of Retry-After so a thundering herd of parallel callers don't all wake at the exact same instant.
|
|
7
|
+
const RETRY_AFTER_JITTER_MS = 250;
|
|
8
|
+
export function buildRetryOptions(args) {
|
|
9
|
+
return {
|
|
10
|
+
retries: args.maxRetries,
|
|
11
|
+
signal: args.abortSignal,
|
|
12
|
+
randomize: true,
|
|
13
|
+
shouldRetry: ({ error }) => !(error instanceof ApiError) || isRetriableApiError(error),
|
|
14
|
+
onFailedAttempt: async ({ error, retryDelay }) => {
|
|
15
|
+
if (!(error instanceof ApiError) ||
|
|
16
|
+
error.retryAfterMs == null ||
|
|
17
|
+
!isRetriableApiError(error)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// p-retry will sleep retryDelay on its own after onFailedAttempt resolves;
|
|
21
|
+
// subtract it so total wait ≈ Retry-After (+ jitter), not Retry-After + retryDelay.
|
|
22
|
+
const target = Math.min(error.retryAfterMs, RETRY_AFTER_MAX_MS) +
|
|
23
|
+
Math.floor(Math.random() * RETRY_AFTER_JITTER_MS);
|
|
24
|
+
const wait = Math.max(0, target - retryDelay);
|
|
25
|
+
if (wait > 0) {
|
|
26
|
+
await sleep(wait, args.abortSignal);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function sleep(ms, signal) {
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
if (signal?.aborted) {
|
|
34
|
+
reject(signal.reason ?? new Error("Aborted"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const onAbort = () => {
|
|
38
|
+
clearTimeout(timer);
|
|
39
|
+
reject(signal?.reason ?? new Error("Aborted"));
|
|
40
|
+
};
|
|
41
|
+
const timer = setTimeout(() => {
|
|
42
|
+
signal?.removeEventListener("abort", onAbort);
|
|
43
|
+
resolve();
|
|
44
|
+
}, ms);
|
|
45
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=retry-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-options.js","sourceRoot":"","sources":["../src/retry-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,4FAA4F;AAC5F,qFAAqF;AACrF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,iHAAiH;AACjH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,UAAU,iBAAiB,CAAC,IAGjC;IACC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,UAAU;QACxB,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACzB,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC;QAC5D,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,IACE,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC;gBAC5B,KAAK,CAAC,YAAY,IAAI,IAAI;gBAC1B,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC3B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,2EAA2E;YAC3E,oFAAoF;YACpF,MAAM,MAAM,GACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;YAC9C,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACb,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAA+B;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,44 +1,30 @@
|
|
|
1
|
+
import { type SpeechGatewayProvider } from "./providers/gateway/index.js";
|
|
2
|
+
import type { ResolvedSTTModel } from "./speech-to-text-provider.js";
|
|
1
3
|
import type { WordTimestamp } from "./timestamps.js";
|
|
2
4
|
export type Voice = string | {
|
|
3
5
|
url: string;
|
|
4
6
|
} | {
|
|
5
7
|
audio: string | Uint8Array;
|
|
6
8
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
export interface StitchTurnOptions {
|
|
10
|
+
mediaType: string;
|
|
11
|
+
providerOptions: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface ResolvedOutputFormat {
|
|
14
|
+
/** The mediaType the provider will produce given those options. May or may not match user's requested format; SDK runs final conversion if not. */
|
|
15
|
+
expectedMediaType: string;
|
|
16
|
+
/** Provider-specific options to merge into the request body. */
|
|
17
|
+
providerOptions: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export type Feature = string | {
|
|
15
20
|
readonly id: string;
|
|
16
21
|
};
|
|
17
|
-
/**
|
|
18
|
-
* Per-model word-timestamp capability.
|
|
19
|
-
*
|
|
20
|
-
* - `"native"`: the TTS endpoint returns word-level alignment directly in
|
|
21
|
-
* its response (e.g., ElevenLabs `/with-timestamps`, Cartesia SSE).
|
|
22
|
-
* - `"derived"`: no native alignment; `timestamps: "on"` pipes the generated
|
|
23
|
-
* audio through an STT round-trip to produce word timings. Extra cost and
|
|
24
|
-
* latency, but works with any provider that has a usable STT API.
|
|
25
|
-
*
|
|
26
|
-
* Providers without any viable path (same-vendor STT missing or word-level
|
|
27
|
-
* unavailable) declare no TIMESTAMPS feature; `timestamps: "on"` routes them
|
|
28
|
-
* through the default `timestampProvider` (OpenAI Whisper) with a clear
|
|
29
|
-
* error when no fallback key is configured.
|
|
30
|
-
*/
|
|
31
|
-
export interface TimestampsFeature {
|
|
32
|
-
readonly id: "timestamps";
|
|
33
|
-
readonly mode: "native" | "derived";
|
|
34
|
-
}
|
|
35
22
|
export interface ModelInfo {
|
|
36
23
|
readonly features: readonly Feature[];
|
|
37
24
|
readonly id: string;
|
|
38
25
|
readonly languages: readonly string[];
|
|
39
26
|
readonly releaseDate: string;
|
|
40
27
|
}
|
|
41
|
-
/** Built-in feature ids the SDK uses. Providers may add custom strings. */
|
|
42
28
|
export declare const FEATURES: {
|
|
43
29
|
readonly STREAMING: "streaming";
|
|
44
30
|
readonly AUDIO_TAGS: "audio-tags";
|
|
@@ -47,9 +33,6 @@ export declare const FEATURES: {
|
|
|
47
33
|
readonly TIMESTAMPS: "timestamps";
|
|
48
34
|
};
|
|
49
35
|
export declare function hasFeature(model: ModelInfo, id: string): boolean;
|
|
50
|
-
export declare function getFeature<T extends {
|
|
51
|
-
id: string;
|
|
52
|
-
}>(model: ModelInfo, id: string): T | undefined;
|
|
53
36
|
export interface SpeechProvider<TModel extends string = string, TVoice extends Voice = Voice> {
|
|
54
37
|
defaultModel: TModel;
|
|
55
38
|
dialogueCapabilities?(modelId: string): {
|
|
@@ -64,13 +47,6 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
64
47
|
providerOptions?: Record<string, unknown>;
|
|
65
48
|
abortSignal?: AbortSignal;
|
|
66
49
|
headers?: Record<string, string>;
|
|
67
|
-
/**
|
|
68
|
-
* Hint from the orchestrator that the caller wants word timestamps. A
|
|
69
|
-
* provider that supports native alignment should switch to its timestamp
|
|
70
|
-
* endpoint (e.g., ElevenLabs `/with-timestamps`) and populate `timestamps`
|
|
71
|
-
* in the return. Providers without native support ignore this flag; the
|
|
72
|
-
* orchestrator then routes through an STT fallback.
|
|
73
|
-
*/
|
|
74
50
|
includeTimestamps?: boolean;
|
|
75
51
|
}): Promise<{
|
|
76
52
|
audio: string | Uint8Array;
|
|
@@ -78,6 +54,7 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
78
54
|
mediaType: string;
|
|
79
55
|
providerMetadata?: Record<string, unknown>;
|
|
80
56
|
timestamps?: WordTimestamp[];
|
|
57
|
+
warnings?: string[];
|
|
81
58
|
}>;
|
|
82
59
|
generateDialogue?(options: {
|
|
83
60
|
modelId: string;
|
|
@@ -88,13 +65,6 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
88
65
|
providerOptions?: Record<string, unknown>;
|
|
89
66
|
abortSignal?: AbortSignal;
|
|
90
67
|
headers?: Record<string, string>;
|
|
91
|
-
/**
|
|
92
|
-
* Hint that the caller wants word timestamps. A dialogue provider with a
|
|
93
|
-
* native timestamp endpoint (e.g., ElevenLabs text-to-dialogue with
|
|
94
|
-
* alignment) should switch to it and populate `timestamps` in the
|
|
95
|
-
* return. Providers without native support ignore the flag; the
|
|
96
|
-
* conversation orchestrator then falls back to STT on the mixed audio.
|
|
97
|
-
*/
|
|
98
68
|
includeTimestamps?: boolean;
|
|
99
69
|
}): Promise<{
|
|
100
70
|
audio: string | Uint8Array;
|
|
@@ -103,16 +73,22 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
103
73
|
providerMetadata?: Record<string, unknown>;
|
|
104
74
|
timestamps?: WordTimestamp[];
|
|
105
75
|
}>;
|
|
106
|
-
getStitchOptions?(modelId: string):
|
|
107
|
-
providerOptions: Record<string, unknown>;
|
|
108
|
-
mediaType: string;
|
|
109
|
-
} | undefined;
|
|
76
|
+
getStitchOptions?(modelId: string): StitchTurnOptions | undefined;
|
|
110
77
|
id: string;
|
|
111
78
|
models: readonly ModelInfo[];
|
|
112
79
|
processAudioTags?(text: string, modelId: string): {
|
|
113
80
|
text: string;
|
|
114
81
|
warnings: string[];
|
|
115
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Given the user's desired output format, return the provider-specific options
|
|
85
|
+
* that produce the closest native match, plus the mediaType that the provider
|
|
86
|
+
* will return. The SDK applies a final mediabunny pass if expectedMediaType
|
|
87
|
+
* differs from the user's chosen format. Return `undefined` if the provider
|
|
88
|
+
* cannot produce any format that the SDK can convert from (i.e. only emits
|
|
89
|
+
* compressed audio that doesn't match the user's request).
|
|
90
|
+
*/
|
|
91
|
+
resolveOutputFormat?(modelId: string, output: import("./audio-output.js").AudioOutput): ResolvedOutputFormat | undefined;
|
|
116
92
|
stream?(options: {
|
|
117
93
|
modelId: string;
|
|
118
94
|
text: string;
|
|
@@ -128,13 +104,12 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
128
104
|
}>;
|
|
129
105
|
}
|
|
130
106
|
export interface ResolvedModel<TVoice extends Voice = Voice> {
|
|
107
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
131
108
|
modelId: string;
|
|
132
109
|
provider: SpeechProvider<string, TVoice>;
|
|
133
110
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* response, no STT round-trip needed).
|
|
138
|
-
*/
|
|
111
|
+
export declare function isSpeechGatewayModel<V extends Voice>(model: ResolvedModel<V>): model is ResolvedModel<V> & {
|
|
112
|
+
provider: SpeechGatewayProvider;
|
|
113
|
+
};
|
|
139
114
|
export declare function modelDeclaresNativeTimestamps(resolved: ResolvedModel): boolean;
|
|
140
115
|
//# sourceMappingURL=speech-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-provider.d.ts","sourceRoot":"","sources":["../src/speech-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,CAAC;AAE9E
|
|
1
|
+
{"version":3,"file":"speech-provider.d.ts","sourceRoot":"","sources":["../src/speech-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/speech-provider.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { SPEECH_GATEWAY_PROVIDER_ID, } from "./providers/gateway/index.js";
|
|
2
2
|
export const FEATURES = {
|
|
3
3
|
STREAMING: "streaming",
|
|
4
4
|
AUDIO_TAGS: "audio-tags",
|
|
@@ -7,34 +7,13 @@ export const FEATURES = {
|
|
|
7
7
|
TIMESTAMPS: "timestamps",
|
|
8
8
|
};
|
|
9
9
|
export function hasFeature(model, id) {
|
|
10
|
-
|
|
11
|
-
if (typeof f === "string" ? f === id : f.id === id) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return false;
|
|
10
|
+
return model.features.some((f) => typeof f === "string" ? f === id : f.id === id);
|
|
16
11
|
}
|
|
17
|
-
export function
|
|
18
|
-
|
|
19
|
-
if (typeof f !== "string" && f.id === id) {
|
|
20
|
-
return f;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return undefined;
|
|
12
|
+
export function isSpeechGatewayModel(model) {
|
|
13
|
+
return model.provider.id === SPEECH_GATEWAY_PROVIDER_ID;
|
|
24
14
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Returns true when the resolved model declares `{ id: "timestamps", mode: "native" }`
|
|
27
|
-
* in its features (i.e., its TTS endpoint returns alignment data directly in the
|
|
28
|
-
* response, no STT round-trip needed).
|
|
29
|
-
*/
|
|
30
15
|
export function modelDeclaresNativeTimestamps(resolved) {
|
|
31
|
-
// `.models` is required by the SpeechProvider interface but we use optional
|
|
32
|
-
// chaining so tests/mocks that omit it don't crash here.
|
|
33
16
|
const modelInfo = resolved.provider.models?.find((m) => m.id === resolved.modelId);
|
|
34
|
-
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
const feature = getFeature(modelInfo, "timestamps");
|
|
38
|
-
return feature?.mode === "native";
|
|
17
|
+
return modelInfo != null && hasFeature(modelInfo, FEATURES.TIMESTAMPS);
|
|
39
18
|
}
|
|
40
19
|
//# sourceMappingURL=speech-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-provider.js","sourceRoot":"","sources":["../src/speech-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"speech-provider.js","sourceRoot":"","sources":["../src/speech-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AA2BtC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,oBAAoB,EAAE,sBAAsB;IAC5C,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,KAAgB,EAAE,EAAU;IACrD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAC/C,CAAC;AACJ,CAAC;AA2FD,MAAM,UAAU,oBAAoB,CAClC,KAAuB;IAEvB,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,0BAA0B,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,QAAuB;IAEvB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CACjC,CAAC;IACF,OAAO,SAAS,IAAI,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzE,CAAC"}
|