@speech-sdk/core 0.6.2 → 0.8.0-alpha
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/LICENSE +202 -21
- package/README.md +267 -264
- package/dist/__tests__/e2e/_save-audio.d.ts +5 -24
- package/dist/__tests__/e2e/_save-audio.d.ts.map +1 -1
- package/dist/__tests__/e2e/_save-audio.js +19 -42
- package/dist/__tests__/e2e/_save-audio.js.map +1 -1
- package/dist/audio-duration.d.ts +0 -5
- package/dist/audio-duration.d.ts.map +1 -1
- package/dist/audio-duration.js +3 -10
- package/dist/audio-duration.js.map +1 -1
- package/dist/audio-utils.d.ts +1 -9
- package/dist/audio-utils.d.ts.map +1 -1
- package/dist/audio-utils.js +10 -13
- package/dist/audio-utils.js.map +1 -1
- package/dist/captions.d.ts +29 -0
- package/dist/captions.d.ts.map +1 -0
- package/dist/captions.js +193 -0
- package/dist/captions.js.map +1 -0
- 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 -23
- package/dist/conversation/pcm-concat.d.ts.map +1 -1
- package/dist/conversation/pcm-concat.js +5 -43
- 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 +3 -1
- package/dist/conversation/stitch.d.ts.map +1 -1
- package/dist/conversation/stitch.js +54 -13
- package/dist/conversation/stitch.js.map +1 -1
- package/dist/conversation/types.d.ts +1 -19
- 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 +10 -0
- package/dist/derive-timestamps.d.ts.map +1 -0
- package/dist/derive-timestamps.js +24 -0
- package/dist/derive-timestamps.js.map +1 -0
- package/dist/errors.d.ts +20 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +28 -2
- 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 +191 -38
- package/dist/generate-conversation.js.map +1 -1
- package/dist/generate-speech.d.ts +2 -10
- package/dist/generate-speech.d.ts.map +1 -1
- package/dist/generate-speech.js +111 -33
- package/dist/generate-speech.js.map +1 -1
- package/dist/index.d.ts +5 -8
- 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 +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +29 -0
- package/dist/logger.js.map +1 -0
- package/dist/metadata.d.ts +0 -22
- package/dist/metadata.d.ts.map +1 -1
- package/dist/provider-utils.d.ts +3 -1
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +36 -39
- package/dist/provider-utils.js.map +1 -1
- package/dist/providers/cartesia/alignment.d.ts +8 -0
- package/dist/providers/cartesia/alignment.d.ts.map +1 -0
- package/dist/providers/cartesia/alignment.js +18 -0
- package/dist/providers/cartesia/alignment.js.map +1 -0
- package/dist/providers/cartesia/index.d.ts +11 -13
- package/dist/providers/cartesia/index.d.ts.map +1 -1
- package/dist/providers/cartesia/index.js +184 -61
- package/dist/providers/cartesia/index.js.map +1 -1
- package/dist/providers/deepgram/index.d.ts +7 -8
- package/dist/providers/deepgram/index.d.ts.map +1 -1
- package/dist/providers/deepgram/index.js +17 -18
- package/dist/providers/deepgram/index.js.map +1 -1
- package/dist/providers/elevenlabs/alignment.d.ts +10 -0
- package/dist/providers/elevenlabs/alignment.d.ts.map +1 -0
- package/dist/providers/elevenlabs/alignment.js +47 -0
- package/dist/providers/elevenlabs/alignment.js.map +1 -0
- package/dist/providers/elevenlabs/index.d.ts +10 -26
- package/dist/providers/elevenlabs/index.d.ts.map +1 -1
- package/dist/providers/elevenlabs/index.js +216 -154
- package/dist/providers/elevenlabs/index.js.map +1 -1
- package/dist/providers/fal/index.d.ts +7 -43
- package/dist/providers/fal/index.d.ts.map +1 -1
- package/dist/providers/fal/index.js +37 -86
- package/dist/providers/fal/index.js.map +1 -1
- package/dist/providers/fish-audio/index.d.ts +7 -8
- package/dist/providers/fish-audio/index.d.ts.map +1 -1
- package/dist/providers/fish-audio/index.js +23 -19
- package/dist/providers/fish-audio/index.js.map +1 -1
- package/dist/providers/gateway/index.d.ts +68 -0
- package/dist/providers/gateway/index.d.ts.map +1 -0
- package/dist/providers/gateway/index.js +236 -0
- package/dist/providers/gateway/index.js.map +1 -0
- package/dist/providers/google/index.d.ts +7 -20
- package/dist/providers/google/index.d.ts.map +1 -1
- package/dist/providers/google/index.js +161 -151
- package/dist/providers/google/index.js.map +1 -1
- package/dist/providers/hume/alignment.d.ts +33 -0
- package/dist/providers/hume/alignment.d.ts.map +1 -0
- package/dist/providers/hume/alignment.js +37 -0
- package/dist/providers/hume/alignment.js.map +1 -0
- package/dist/providers/hume/index.d.ts +11 -13
- package/dist/providers/hume/index.d.ts.map +1 -1
- package/dist/providers/hume/index.js +105 -41
- package/dist/providers/hume/index.js.map +1 -1
- package/dist/providers/inworld/alignment.d.ts +11 -0
- package/dist/providers/inworld/alignment.d.ts.map +1 -0
- package/dist/providers/inworld/alignment.js +24 -0
- package/dist/providers/inworld/alignment.js.map +1 -0
- package/dist/providers/inworld/index.d.ts +10 -14
- package/dist/providers/inworld/index.d.ts.map +1 -1
- package/dist/providers/inworld/index.js +55 -38
- package/dist/providers/inworld/index.js.map +1 -1
- package/dist/providers/mistral/index.d.ts +7 -8
- package/dist/providers/mistral/index.d.ts.map +1 -1
- package/dist/providers/mistral/index.js +39 -38
- package/dist/providers/mistral/index.js.map +1 -1
- package/dist/providers/murf/alignment.d.ts +13 -0
- package/dist/providers/murf/alignment.d.ts.map +1 -0
- package/dist/providers/murf/alignment.js +22 -0
- package/dist/providers/murf/alignment.js.map +1 -0
- package/dist/providers/murf/index.d.ts +11 -13
- package/dist/providers/murf/index.d.ts.map +1 -1
- package/dist/providers/murf/index.js +73 -56
- package/dist/providers/murf/index.js.map +1 -1
- package/dist/providers/openai/index.d.ts +36 -20
- package/dist/providers/openai/index.d.ts.map +1 -1
- package/dist/providers/openai/index.js +270 -102
- package/dist/providers/openai/index.js.map +1 -1
- package/dist/providers/resemble/alignment.d.ts +11 -0
- package/dist/providers/resemble/alignment.d.ts.map +1 -0
- package/dist/providers/resemble/alignment.js +54 -0
- package/dist/providers/resemble/alignment.js.map +1 -0
- package/dist/providers/resemble/index.d.ts +10 -8
- package/dist/providers/resemble/index.d.ts.map +1 -1
- package/dist/providers/resemble/index.js +58 -40
- package/dist/providers/resemble/index.js.map +1 -1
- package/dist/providers/xai/index.d.ts +7 -9
- package/dist/providers/xai/index.d.ts.map +1 -1
- package/dist/providers/xai/index.js +37 -40
- package/dist/providers/xai/index.js.map +1 -1
- package/dist/providers.d.ts +29 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +15 -0
- package/dist/providers.js.map +1 -0
- package/dist/resolve-provider.d.ts.map +1 -1
- package/dist/resolve-provider.js +7 -59
- package/dist/resolve-provider.js.map +1 -1
- package/dist/speech-provider.d.ts +19 -15
- package/dist/speech-provider.d.ts.map +1 -1
- package/dist/speech-provider.js +9 -14
- package/dist/speech-provider.js.map +1 -1
- package/dist/speech-result.d.ts +5 -0
- 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 +28 -0
- package/dist/speech-to-text-provider.d.ts.map +1 -0
- package/dist/speech-to-text-provider.js +2 -0
- package/dist/speech-to-text-provider.js.map +1 -0
- package/dist/stream-speech.d.ts.map +1 -1
- package/dist/stream-speech.js +2 -3
- package/dist/stream-speech.js.map +1 -1
- package/dist/timestamps.d.ts +9 -0
- package/dist/timestamps.d.ts.map +1 -0
- package/dist/timestamps.js +2 -0
- package/dist/timestamps.js.map +1 -0
- 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 +25 -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 +0 -6
- package/dist/volume-adjust.js.map +1 -1
- package/package.json +12 -63
|
@@ -1,39 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
3
|
+
import { audioTimestampsToWordTimestamps, resembleAudioTimestampsSchema, } from "./alignment.js";
|
|
4
|
+
const synthesizeResponseSchema = z.object({
|
|
5
|
+
audio_content: z.string(),
|
|
6
|
+
audio_timestamps: resembleAudioTimestampsSchema.optional(),
|
|
7
|
+
});
|
|
8
|
+
export const RESEMBLE_PROVIDER_ID = "resemble";
|
|
9
|
+
export const RESEMBLE_MODELS = [
|
|
10
|
+
{
|
|
11
|
+
id: "default",
|
|
12
|
+
releaseDate: "2025-09-04",
|
|
13
|
+
languages: [
|
|
14
|
+
"en",
|
|
15
|
+
"ar",
|
|
16
|
+
"da",
|
|
17
|
+
"de",
|
|
18
|
+
"el",
|
|
19
|
+
"es",
|
|
20
|
+
"fi",
|
|
21
|
+
"fr",
|
|
22
|
+
"he",
|
|
23
|
+
"hi",
|
|
24
|
+
"it",
|
|
25
|
+
"ja",
|
|
26
|
+
"ko",
|
|
27
|
+
"ms",
|
|
28
|
+
"nl",
|
|
29
|
+
"no",
|
|
30
|
+
"pl",
|
|
31
|
+
"pt",
|
|
32
|
+
"ru",
|
|
33
|
+
"sv",
|
|
34
|
+
"sw",
|
|
35
|
+
"tr",
|
|
36
|
+
"zh",
|
|
37
|
+
],
|
|
38
|
+
features: [
|
|
39
|
+
"streaming",
|
|
40
|
+
"open-source",
|
|
41
|
+
"inline-voice-cloning",
|
|
42
|
+
"timestamps",
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
];
|
|
2
46
|
export class ResembleSpeechProvider {
|
|
3
|
-
id =
|
|
47
|
+
id = RESEMBLE_PROVIDER_ID;
|
|
4
48
|
defaultModel = "default";
|
|
5
|
-
models =
|
|
6
|
-
{
|
|
7
|
-
id: "default",
|
|
8
|
-
releaseDate: "2025-09-04",
|
|
9
|
-
languages: [
|
|
10
|
-
"en",
|
|
11
|
-
"ar",
|
|
12
|
-
"da",
|
|
13
|
-
"de",
|
|
14
|
-
"el",
|
|
15
|
-
"es",
|
|
16
|
-
"fi",
|
|
17
|
-
"fr",
|
|
18
|
-
"he",
|
|
19
|
-
"hi",
|
|
20
|
-
"it",
|
|
21
|
-
"ja",
|
|
22
|
-
"ko",
|
|
23
|
-
"ms",
|
|
24
|
-
"nl",
|
|
25
|
-
"no",
|
|
26
|
-
"pl",
|
|
27
|
-
"pt",
|
|
28
|
-
"ru",
|
|
29
|
-
"sv",
|
|
30
|
-
"sw",
|
|
31
|
-
"tr",
|
|
32
|
-
"zh",
|
|
33
|
-
],
|
|
34
|
-
features: ["streaming", "open-source", "inline-voice-cloning"],
|
|
35
|
-
},
|
|
36
|
-
];
|
|
49
|
+
models = RESEMBLE_MODELS;
|
|
37
50
|
apiKey;
|
|
38
51
|
baseURL;
|
|
39
52
|
fetchFn;
|
|
@@ -60,11 +73,16 @@ export class ResembleSpeechProvider {
|
|
|
60
73
|
body: JSON.stringify(body),
|
|
61
74
|
signal: options.abortSignal,
|
|
62
75
|
});
|
|
63
|
-
await handleErrorResponse(response
|
|
64
|
-
|
|
76
|
+
await handleErrorResponse(response);
|
|
77
|
+
// Gate timestamp projection on caller opt-in, not the always-present audio_timestamps field.
|
|
78
|
+
const json = synthesizeResponseSchema.parse(await response.json());
|
|
79
|
+
const timestamps = options.includeTimestamps && json.audio_timestamps
|
|
80
|
+
? audioTimestampsToWordTimestamps(json.audio_timestamps)
|
|
81
|
+
: undefined;
|
|
65
82
|
return {
|
|
66
83
|
audio: json.audio_content,
|
|
67
84
|
mediaType: "audio/wav",
|
|
85
|
+
timestamps,
|
|
68
86
|
};
|
|
69
87
|
}
|
|
70
88
|
async stream(options) {
|
|
@@ -85,7 +103,7 @@ export class ResembleSpeechProvider {
|
|
|
85
103
|
body: JSON.stringify(body),
|
|
86
104
|
signal: options.abortSignal,
|
|
87
105
|
});
|
|
88
|
-
await handleErrorResponse(response
|
|
106
|
+
await handleErrorResponse(response);
|
|
89
107
|
if (!response.body) {
|
|
90
108
|
throw new Error(`resemble/${options.modelId}: response has no body`);
|
|
91
109
|
}
|
|
@@ -96,23 +114,23 @@ export class ResembleSpeechProvider {
|
|
|
96
114
|
}
|
|
97
115
|
getStitchOptions(modelId) {
|
|
98
116
|
if (this.models.some((m) => m.id === modelId)) {
|
|
99
|
-
// Resemble
|
|
100
|
-
// the stitch decoder doesn't accept; pin precision to PCM_16 so the
|
|
101
|
-
// returned WAV is 16-bit signed PCM.
|
|
117
|
+
// Pin precision to PCM_16 — Resemble defaults to PCM_32 (float WAV) which the stitch decoder rejects.
|
|
102
118
|
return {
|
|
103
119
|
providerOptions: { precision: "PCM_16" },
|
|
104
120
|
mediaType: "audio/wav",
|
|
105
121
|
};
|
|
106
122
|
}
|
|
107
|
-
return
|
|
123
|
+
return;
|
|
108
124
|
}
|
|
109
125
|
}
|
|
110
126
|
export function createResemble(config = {}) {
|
|
111
127
|
const provider = new ResembleSpeechProvider(config);
|
|
128
|
+
const fallbackSTT = config.fallbackSTT;
|
|
112
129
|
return function resemble(modelId) {
|
|
113
130
|
return {
|
|
114
131
|
provider,
|
|
115
132
|
modelId: modelId ?? provider.defaultModel,
|
|
133
|
+
...(fallbackSTT && { fallbackSTT }),
|
|
116
134
|
};
|
|
117
135
|
};
|
|
118
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/resemble/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/resemble/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import type { ResolvedModel, SpeechProvider } from "../../speech-provider.js";
|
|
1
|
+
import type { ModelInfo, ResolvedModel, SpeechProvider } from "../../speech-provider.js";
|
|
2
|
+
import type { ResolvedSTTModel } from "../../speech-to-text-provider.js";
|
|
2
3
|
export interface XaiSpeechProviderConfig {
|
|
3
4
|
apiKey?: string;
|
|
4
5
|
baseURL?: string;
|
|
6
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
5
7
|
fetch?: typeof globalThis.fetch;
|
|
6
8
|
}
|
|
9
|
+
export declare const XAI_PROVIDER_ID: "xai";
|
|
10
|
+
export declare const XAI_MODELS: readonly ModelInfo[];
|
|
7
11
|
export declare class XaiSpeechProvider implements SpeechProvider<string, string> {
|
|
8
|
-
readonly id
|
|
12
|
+
readonly id: "xai";
|
|
9
13
|
readonly defaultModel = "grok-tts";
|
|
10
|
-
|
|
11
|
-
readonly models: readonly [{
|
|
12
|
-
readonly id: "grok-tts";
|
|
13
|
-
readonly releaseDate: "2025-11-01";
|
|
14
|
-
readonly languages: readonly ["en", "ar", "bn", "zh", "fr", "de", "hi", "id", "it", "ja", "ko", "pt", "ru", "es", "tr", "vi"];
|
|
15
|
-
readonly features: readonly ["streaming", "audio-tags"];
|
|
16
|
-
}];
|
|
14
|
+
readonly models: readonly ModelInfo[];
|
|
17
15
|
private readonly apiKey;
|
|
18
16
|
private readonly baseURL;
|
|
19
17
|
private readonly fetchFn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,eAAO,MAAM,eAAe,EAAG,KAAc,CAAC;AAsB9C,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAOjC,CAAC;AAEX,qBAAa,iBAAkB,YAAW,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IACtE,QAAQ,CAAC,EAAE,QAAmB;IAC9B,QAAQ,CAAC,YAAY,cAAc;IAEnC,QAAQ,CAAC,MAAM,uBAAc;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,MAAM,EAAE,uBAAuB;IAO3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAIpE,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,aAAa;IAKf,QAAQ,CAAC,OAAO,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,KAAK,EAAE,UAAU,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IA2BI,MAAM,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IA4BF,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;;;;;CASjC;AAED,wBAAgB,SAAS,CAAC,MAAM,GAAE,uBAA4B,IAGxC,UAAU,MAAM,KAAG,aAAa,CAAC,MAAM,CAAC,CAO7D"}
|
|
@@ -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,22 @@ 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;
|
|
135
130
|
}
|
|
136
131
|
}
|
|
137
132
|
export function createXai(config = {}) {
|
|
138
133
|
const provider = new XaiSpeechProvider(config);
|
|
134
|
+
const fallbackSTT = config.fallbackSTT;
|
|
139
135
|
return function xai(modelId) {
|
|
140
136
|
return {
|
|
141
137
|
provider,
|
|
142
138
|
modelId: modelId ?? provider.defaultModel,
|
|
139
|
+
...(fallbackSTT && { fallbackSTT }),
|
|
143
140
|
};
|
|
144
141
|
};
|
|
145
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/xai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 { XaiSpeechProviderConfig } from "./providers/xai/index.js";
|
|
28
|
+
export { createXai } from "./providers/xai/index.js";
|
|
29
|
+
//# 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,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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 { createXai } from "./providers/xai/index.js";
|
|
15
|
+
//# 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,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,75 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CartesiaSpeechProvider } from "./providers/cartesia/index.js";
|
|
3
|
-
import { DeepgramSpeechProvider } from "./providers/deepgram/index.js";
|
|
4
|
-
import { ElevenLabsSpeechProvider } from "./providers/elevenlabs/index.js";
|
|
5
|
-
import { FalSpeechProvider } from "./providers/fal/index.js";
|
|
6
|
-
import { FishAudioSpeechProvider } from "./providers/fish-audio/index.js";
|
|
7
|
-
import { GoogleSpeechProvider } from "./providers/google/index.js";
|
|
8
|
-
import { HumeSpeechProvider } from "./providers/hume/index.js";
|
|
9
|
-
import { InworldSpeechProvider } from "./providers/inworld/index.js";
|
|
10
|
-
import { MistralSpeechProvider } from "./providers/mistral/index.js";
|
|
11
|
-
import { MurfSpeechProvider } from "./providers/murf/index.js";
|
|
12
|
-
import { OpenAISpeechProvider } from "./providers/openai/index.js";
|
|
13
|
-
import { ResembleSpeechProvider } from "./providers/resemble/index.js";
|
|
14
|
-
import { XaiSpeechProvider } from "./providers/xai/index.js";
|
|
1
|
+
import { SpeechGatewayProvider } from "./providers/gateway/index.js";
|
|
15
2
|
function isResolvedModel(model) {
|
|
16
3
|
return (model != null &&
|
|
17
4
|
typeof model === "object" &&
|
|
18
5
|
"provider" in model &&
|
|
19
6
|
"modelId" in model);
|
|
20
7
|
}
|
|
21
|
-
function createBuiltinProvider(name, options) {
|
|
22
|
-
const config = options?.apiKey ? { apiKey: options.apiKey } : {};
|
|
23
|
-
switch (name) {
|
|
24
|
-
case "openai":
|
|
25
|
-
return new OpenAISpeechProvider(config);
|
|
26
|
-
case "elevenlabs":
|
|
27
|
-
return new ElevenLabsSpeechProvider(config);
|
|
28
|
-
case "deepgram":
|
|
29
|
-
return new DeepgramSpeechProvider(config);
|
|
30
|
-
case "cartesia":
|
|
31
|
-
return new CartesiaSpeechProvider(config);
|
|
32
|
-
case "hume":
|
|
33
|
-
return new HumeSpeechProvider(config);
|
|
34
|
-
case "inworld":
|
|
35
|
-
return new InworldSpeechProvider(config);
|
|
36
|
-
case "google":
|
|
37
|
-
return new GoogleSpeechProvider(config);
|
|
38
|
-
case "fish-audio":
|
|
39
|
-
return new FishAudioSpeechProvider(config);
|
|
40
|
-
case "murf":
|
|
41
|
-
return new MurfSpeechProvider(config);
|
|
42
|
-
case "resemble":
|
|
43
|
-
return new ResembleSpeechProvider(config);
|
|
44
|
-
case "fal-ai":
|
|
45
|
-
return new FalSpeechProvider(config);
|
|
46
|
-
case "mistral":
|
|
47
|
-
return new MistralSpeechProvider(config);
|
|
48
|
-
case "xai":
|
|
49
|
-
return new XaiSpeechProvider(config);
|
|
50
|
-
default:
|
|
51
|
-
throw new SpeechSDKError(`Unknown provider: ${name}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
8
|
export function resolveModel(model, options) {
|
|
55
9
|
if (isResolvedModel(model)) {
|
|
56
10
|
return model;
|
|
57
11
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
let modelId;
|
|
61
|
-
if (slashIndex === -1) {
|
|
62
|
-
providerName = model;
|
|
63
|
-
modelId = undefined;
|
|
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()().');
|
|
64
14
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
const provider = createBuiltinProvider(providerName, options);
|
|
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);
|
|
70
18
|
return {
|
|
71
19
|
provider,
|
|
72
|
-
modelId:
|
|
20
|
+
modelId: model,
|
|
73
21
|
};
|
|
74
22
|
}
|
|
75
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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import { type SpeechGatewayProvider } from "./providers/gateway/index.js";
|
|
2
|
+
import type { ResolvedSTTModel } from "./speech-to-text-provider.js";
|
|
3
|
+
import type { WordTimestamp } from "./timestamps.js";
|
|
1
4
|
export type Voice = string | {
|
|
2
5
|
url: string;
|
|
3
6
|
} | {
|
|
4
7
|
audio: string | Uint8Array;
|
|
5
8
|
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* (e.g. max input tokens, supported sample rates) can extend the type
|
|
11
|
-
* without breaking existing string-based features.
|
|
12
|
-
*/
|
|
9
|
+
export interface StitchTurnOptions {
|
|
10
|
+
mediaType: string;
|
|
11
|
+
providerOptions: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
13
|
export type Feature = string | {
|
|
14
14
|
readonly id: string;
|
|
15
15
|
};
|
|
@@ -19,17 +19,14 @@ export interface ModelInfo {
|
|
|
19
19
|
readonly languages: readonly string[];
|
|
20
20
|
readonly releaseDate: string;
|
|
21
21
|
}
|
|
22
|
-
/** Built-in feature ids the SDK uses. Providers may add custom strings. */
|
|
23
22
|
export declare const FEATURES: {
|
|
24
23
|
readonly STREAMING: "streaming";
|
|
25
24
|
readonly AUDIO_TAGS: "audio-tags";
|
|
26
25
|
readonly INLINE_VOICE_CLONING: "inline-voice-cloning";
|
|
27
26
|
readonly OPEN_SOURCE: "open-source";
|
|
27
|
+
readonly TIMESTAMPS: "timestamps";
|
|
28
28
|
};
|
|
29
29
|
export declare function hasFeature(model: ModelInfo, id: string): boolean;
|
|
30
|
-
export declare function getFeature<T extends {
|
|
31
|
-
id: string;
|
|
32
|
-
}>(model: ModelInfo, id: string): T | undefined;
|
|
33
30
|
export interface SpeechProvider<TModel extends string = string, TVoice extends Voice = Voice> {
|
|
34
31
|
defaultModel: TModel;
|
|
35
32
|
dialogueCapabilities?(modelId: string): {
|
|
@@ -44,11 +41,14 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
44
41
|
providerOptions?: Record<string, unknown>;
|
|
45
42
|
abortSignal?: AbortSignal;
|
|
46
43
|
headers?: Record<string, string>;
|
|
44
|
+
includeTimestamps?: boolean;
|
|
47
45
|
}): Promise<{
|
|
48
46
|
audio: string | Uint8Array;
|
|
49
47
|
audioDurationMs?: number;
|
|
50
48
|
mediaType: string;
|
|
51
49
|
providerMetadata?: Record<string, unknown>;
|
|
50
|
+
timestamps?: WordTimestamp[];
|
|
51
|
+
warnings?: string[];
|
|
52
52
|
}>;
|
|
53
53
|
generateDialogue?(options: {
|
|
54
54
|
modelId: string;
|
|
@@ -59,16 +59,15 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
59
59
|
providerOptions?: Record<string, unknown>;
|
|
60
60
|
abortSignal?: AbortSignal;
|
|
61
61
|
headers?: Record<string, string>;
|
|
62
|
+
includeTimestamps?: boolean;
|
|
62
63
|
}): Promise<{
|
|
63
64
|
audio: string | Uint8Array;
|
|
64
65
|
audioDurationMs?: number;
|
|
65
66
|
mediaType: string;
|
|
66
67
|
providerMetadata?: Record<string, unknown>;
|
|
68
|
+
timestamps?: WordTimestamp[];
|
|
67
69
|
}>;
|
|
68
|
-
getStitchOptions?(modelId: string):
|
|
69
|
-
providerOptions: Record<string, unknown>;
|
|
70
|
-
mediaType: string;
|
|
71
|
-
} | undefined;
|
|
70
|
+
getStitchOptions?(modelId: string): StitchTurnOptions | undefined;
|
|
72
71
|
id: string;
|
|
73
72
|
models: readonly ModelInfo[];
|
|
74
73
|
processAudioTags?(text: string, modelId: string): {
|
|
@@ -90,7 +89,12 @@ export interface SpeechProvider<TModel extends string = string, TVoice extends V
|
|
|
90
89
|
}>;
|
|
91
90
|
}
|
|
92
91
|
export interface ResolvedModel<TVoice extends Voice = Voice> {
|
|
92
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
93
93
|
modelId: string;
|
|
94
94
|
provider: SpeechProvider<string, TVoice>;
|
|
95
95
|
}
|
|
96
|
+
export declare function isSpeechGatewayModel<V extends Voice>(model: ResolvedModel<V>): model is ResolvedModel<V> & {
|
|
97
|
+
provider: SpeechGatewayProvider;
|
|
98
|
+
};
|
|
99
|
+
export declare function modelDeclaresNativeTimestamps(resolved: ResolvedModel): boolean;
|
|
96
100
|
//# 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,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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"}
|