@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,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
2
3
|
import { parseSseBase64Stream } from "../../sse-stream.js";
|
|
3
4
|
function safeParseJson(input) {
|
|
@@ -8,27 +9,31 @@ function safeParseJson(input) {
|
|
|
8
9
|
return null;
|
|
9
10
|
}
|
|
10
11
|
}
|
|
12
|
+
const speechResponseSchema = z.object({
|
|
13
|
+
audio_data: z.string(),
|
|
14
|
+
usage: z.object({ audio_duration_seconds: z.number().optional() }).optional(),
|
|
15
|
+
});
|
|
16
|
+
const audioDeltaEventSchema = z.object({
|
|
17
|
+
type: z.literal("speech.audio.delta"),
|
|
18
|
+
audio_data: z.string(),
|
|
19
|
+
});
|
|
20
|
+
const audioDoneEventSchema = z.object({
|
|
21
|
+
type: z.literal("speech.audio.done"),
|
|
22
|
+
usage: z.record(z.string(), z.unknown()),
|
|
23
|
+
});
|
|
24
|
+
export const MISTRAL_PROVIDER_ID = "mistral";
|
|
25
|
+
export const MISTRAL_MODELS = [
|
|
26
|
+
{
|
|
27
|
+
id: "voxtral-mini-tts-2603",
|
|
28
|
+
releaseDate: "2026-03-23",
|
|
29
|
+
languages: ["en", "fr", "de", "es", "nl", "pt", "it", "hi", "ar"],
|
|
30
|
+
features: ["streaming", "open-source", "inline-voice-cloning"],
|
|
31
|
+
},
|
|
32
|
+
];
|
|
11
33
|
export class MistralSpeechProvider {
|
|
12
|
-
id =
|
|
34
|
+
id = MISTRAL_PROVIDER_ID;
|
|
13
35
|
defaultModel = "voxtral-mini-tts-2603";
|
|
14
|
-
models =
|
|
15
|
-
{
|
|
16
|
-
id: "voxtral-mini-tts-2603",
|
|
17
|
-
releaseDate: "2026-03-23",
|
|
18
|
-
languages: [
|
|
19
|
-
"en",
|
|
20
|
-
"fr",
|
|
21
|
-
"de",
|
|
22
|
-
"es",
|
|
23
|
-
"nl",
|
|
24
|
-
"pt",
|
|
25
|
-
"it",
|
|
26
|
-
"hi",
|
|
27
|
-
"ar",
|
|
28
|
-
],
|
|
29
|
-
features: ["streaming", "open-source", "inline-voice-cloning"],
|
|
30
|
-
},
|
|
31
|
-
];
|
|
36
|
+
models = MISTRAL_MODELS;
|
|
32
37
|
apiKey;
|
|
33
38
|
baseURL;
|
|
34
39
|
fetchFn;
|
|
@@ -74,8 +79,8 @@ export class MistralSpeechProvider {
|
|
|
74
79
|
body: JSON.stringify(body),
|
|
75
80
|
signal: options.abortSignal,
|
|
76
81
|
});
|
|
77
|
-
await handleErrorResponse(response
|
|
78
|
-
const json = (await response.json());
|
|
82
|
+
await handleErrorResponse(response);
|
|
83
|
+
const json = speechResponseSchema.parse(await response.json());
|
|
79
84
|
const audioDurationMs = json.usage?.audio_duration_seconds == null
|
|
80
85
|
? undefined
|
|
81
86
|
: Math.round(json.usage.audio_duration_seconds * 1000);
|
|
@@ -124,25 +129,18 @@ export class MistralSpeechProvider {
|
|
|
124
129
|
body: JSON.stringify(body),
|
|
125
130
|
signal: options.abortSignal,
|
|
126
131
|
});
|
|
127
|
-
await handleErrorResponse(response
|
|
132
|
+
await handleErrorResponse(response);
|
|
128
133
|
if (!response.body) {
|
|
129
134
|
throw new Error(`mistral/${options.modelId}: response has no body`);
|
|
130
135
|
}
|
|
131
136
|
const { stream } = parseSseBase64Stream(response.body, {
|
|
132
137
|
extractBase64(eventData) {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
typeof json.audio_data === "string") {
|
|
136
|
-
return json.audio_data;
|
|
137
|
-
}
|
|
138
|
-
return null;
|
|
138
|
+
const result = audioDeltaEventSchema.safeParse(safeParseJson(eventData));
|
|
139
|
+
return result.success ? result.data.audio_data : null;
|
|
139
140
|
},
|
|
140
141
|
extractMetadata(eventData) {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
return { usage: json.usage };
|
|
144
|
-
}
|
|
145
|
-
return null;
|
|
142
|
+
const result = audioDoneEventSchema.safeParse(safeParseJson(eventData));
|
|
143
|
+
return result.success ? { usage: result.data.usage } : null;
|
|
146
144
|
},
|
|
147
145
|
});
|
|
148
146
|
return {
|
|
@@ -152,15 +150,13 @@ export class MistralSpeechProvider {
|
|
|
152
150
|
}
|
|
153
151
|
getStitchOptions(modelId) {
|
|
154
152
|
if (this.models.some((m) => m.id === modelId)) {
|
|
155
|
-
// voxtral
|
|
156
|
-
// 24 kHz — declared via the `encoding=float32` mediaType param so the
|
|
157
|
-
// stitch decoder converts to int16 before concatenation.
|
|
153
|
+
// voxtral pcm is headerless float32 LE 24kHz mono; encoding=float32 tells the stitch decoder to convert to int16.
|
|
158
154
|
return {
|
|
159
155
|
providerOptions: { response_format: "pcm" },
|
|
160
156
|
mediaType: "audio/pcm;rate=24000;encoding=float32",
|
|
161
157
|
};
|
|
162
158
|
}
|
|
163
|
-
return
|
|
159
|
+
return;
|
|
164
160
|
}
|
|
165
161
|
}
|
|
166
162
|
function mediaTypeForResponseFormat(format) {
|
|
@@ -180,8 +176,13 @@ function mediaTypeForResponseFormat(format) {
|
|
|
180
176
|
}
|
|
181
177
|
export function createMistral(config = {}) {
|
|
182
178
|
const provider = new MistralSpeechProvider(config);
|
|
179
|
+
const fallbackSTT = config.fallbackSTT;
|
|
183
180
|
return function mistral(modelId) {
|
|
184
|
-
return {
|
|
181
|
+
return {
|
|
182
|
+
provider,
|
|
183
|
+
modelId: modelId ?? provider.defaultModel,
|
|
184
|
+
...(fallbackSTT && { fallbackSTT }),
|
|
185
|
+
};
|
|
185
186
|
};
|
|
186
187
|
}
|
|
187
188
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/mistral/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/mistral/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { WordTimestamp } from "../../timestamps.js";
|
|
3
|
+
export declare const murfWordDurationSchema: z.ZodObject<{
|
|
4
|
+
endMs: z.ZodNumber;
|
|
5
|
+
pitchScaleMaximum: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
pitchScaleMinimum: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
sourceWordIndex: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
startMs: z.ZodNumber;
|
|
9
|
+
word: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type MurfWordDuration = z.infer<typeof murfWordDurationSchema>;
|
|
12
|
+
export declare function wordDurationsToWordTimestamps(durations: readonly MurfWordDuration[]): WordTimestamp[];
|
|
13
|
+
//# sourceMappingURL=alignment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../../src/providers/murf/alignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,eAAO,MAAM,sBAAsB;;;;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,gBAAgB,EAAE,GACrC,aAAa,EAAE,CAUjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Murf `/v1/speech/generate` `wordDurations` entry. Times are integer ms.
|
|
3
|
+
export const murfWordDurationSchema = z.object({
|
|
4
|
+
endMs: z.number(),
|
|
5
|
+
pitchScaleMaximum: z.number().optional(),
|
|
6
|
+
pitchScaleMinimum: z.number().optional(),
|
|
7
|
+
sourceWordIndex: z.number().optional(),
|
|
8
|
+
startMs: z.number(),
|
|
9
|
+
word: z.string(),
|
|
10
|
+
});
|
|
11
|
+
export function wordDurationsToWordTimestamps(durations) {
|
|
12
|
+
const out = [];
|
|
13
|
+
for (const d of durations) {
|
|
14
|
+
out.push({
|
|
15
|
+
text: d.word,
|
|
16
|
+
start: d.startMs / 1000,
|
|
17
|
+
end: d.endMs / 1000,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=alignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../../src/providers/murf/alignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAGH,MAAM,UAAU,6BAA6B,CAC3C,SAAsC;IAEtC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI;YACvB,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,23 +1,18 @@
|
|
|
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";
|
|
3
|
+
import type { WordTimestamp } from "../../timestamps.js";
|
|
2
4
|
export interface MurfSpeechProviderConfig {
|
|
3
5
|
apiKey?: string;
|
|
4
6
|
baseURL?: string;
|
|
7
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
5
8
|
fetch?: typeof globalThis.fetch;
|
|
6
9
|
}
|
|
10
|
+
export declare const MURF_PROVIDER_ID: "murf";
|
|
11
|
+
export declare const MURF_MODELS: readonly ModelInfo[];
|
|
7
12
|
export declare class MurfSpeechProvider implements SpeechProvider<string, string> {
|
|
8
|
-
readonly id
|
|
13
|
+
readonly id: "murf";
|
|
9
14
|
readonly defaultModel = "GEN2";
|
|
10
|
-
readonly models: readonly [
|
|
11
|
-
readonly id: "GEN2";
|
|
12
|
-
readonly releaseDate: "2025-01-01";
|
|
13
|
-
readonly languages: readonly ["en", "de", "es", "fr", "zh", "ar", "hi", "bn", "ta", "pt", "it", "ja", "ko", "nl", "pl", "ru", "sv", "tr", "id", "ms", "tl", "cs", "fi", "th", "vi", "da", "no", "ro", "el", "hu", "uk", "sk", "bg"];
|
|
14
|
-
readonly features: readonly ["streaming"];
|
|
15
|
-
}, {
|
|
16
|
-
readonly id: "FALCON";
|
|
17
|
-
readonly releaseDate: "2025-01-01";
|
|
18
|
-
readonly languages: readonly ["en"];
|
|
19
|
-
readonly features: readonly ["streaming"];
|
|
20
|
-
}];
|
|
15
|
+
readonly models: readonly ModelInfo[];
|
|
21
16
|
private readonly apiKey;
|
|
22
17
|
private readonly baseURL;
|
|
23
18
|
private readonly fetchFn;
|
|
@@ -29,10 +24,13 @@ export declare class MurfSpeechProvider implements SpeechProvider<string, string
|
|
|
29
24
|
providerOptions?: Record<string, unknown>;
|
|
30
25
|
abortSignal?: AbortSignal;
|
|
31
26
|
headers?: Record<string, string>;
|
|
27
|
+
includeTimestamps?: boolean;
|
|
32
28
|
}): Promise<{
|
|
33
29
|
audio: string | Uint8Array;
|
|
30
|
+
audioDurationMs?: number;
|
|
34
31
|
mediaType: string;
|
|
35
32
|
providerMetadata?: Record<string, unknown>;
|
|
33
|
+
timestamps?: WordTimestamp[];
|
|
36
34
|
}>;
|
|
37
35
|
stream(options: {
|
|
38
36
|
modelId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/murf/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/murf/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,MAAM,WAAW,wBAAwB;IACvC,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,gBAAgB,EAAG,MAAe,CAAC;AAEhD,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EA+ClC,CAAC;AAEX,qBAAa,kBAAmB,YAAW,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IACvE,QAAQ,CAAC,EAAE,SAAoB;IAC/B,QAAQ,CAAC,YAAY,UAAU;IAE/B,QAAQ,CAAC,MAAM,uBAAe;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,MAAM,EAAE,wBAAwB;IAMtC,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;QACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC;QACV,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;QAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;KAC9B,CAAC;IA0DI,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;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IAkCF,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;CAUjC;AAED,wBAAgB,UAAU,CAAC,MAAM,GAAE,wBAA6B,IAIzC,UAAU,MAAM,KAAG,aAAa,CAAC,MAAM,CAAC,CAO9D"}
|
|
@@ -1,55 +1,64 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
3
|
+
import { murfWordDurationSchema, wordDurationsToWordTimestamps, } from "./alignment.js";
|
|
4
|
+
const speechResponseSchema = z.object({
|
|
5
|
+
encodedAudio: z.string(),
|
|
6
|
+
audioLengthInSeconds: z.number().optional(),
|
|
7
|
+
wordDurations: z.array(murfWordDurationSchema).optional(),
|
|
8
|
+
});
|
|
9
|
+
export const MURF_PROVIDER_ID = "murf";
|
|
10
|
+
export const MURF_MODELS = [
|
|
11
|
+
{
|
|
12
|
+
id: "GEN2",
|
|
13
|
+
releaseDate: "2025-01-01",
|
|
14
|
+
languages: [
|
|
15
|
+
"en",
|
|
16
|
+
"de",
|
|
17
|
+
"es",
|
|
18
|
+
"fr",
|
|
19
|
+
"zh",
|
|
20
|
+
"ar",
|
|
21
|
+
"hi",
|
|
22
|
+
"bn",
|
|
23
|
+
"ta",
|
|
24
|
+
"pt",
|
|
25
|
+
"it",
|
|
26
|
+
"ja",
|
|
27
|
+
"ko",
|
|
28
|
+
"nl",
|
|
29
|
+
"pl",
|
|
30
|
+
"ru",
|
|
31
|
+
"sv",
|
|
32
|
+
"tr",
|
|
33
|
+
"id",
|
|
34
|
+
"ms",
|
|
35
|
+
"tl",
|
|
36
|
+
"cs",
|
|
37
|
+
"fi",
|
|
38
|
+
"th",
|
|
39
|
+
"vi",
|
|
40
|
+
"da",
|
|
41
|
+
"no",
|
|
42
|
+
"ro",
|
|
43
|
+
"el",
|
|
44
|
+
"hu",
|
|
45
|
+
"uk",
|
|
46
|
+
"sk",
|
|
47
|
+
"bg",
|
|
48
|
+
],
|
|
49
|
+
features: ["streaming", "timestamps"],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "FALCON",
|
|
53
|
+
releaseDate: "2025-01-01",
|
|
54
|
+
languages: ["en"],
|
|
55
|
+
features: ["streaming"],
|
|
56
|
+
},
|
|
57
|
+
];
|
|
2
58
|
export class MurfSpeechProvider {
|
|
3
|
-
id =
|
|
59
|
+
id = MURF_PROVIDER_ID;
|
|
4
60
|
defaultModel = "GEN2";
|
|
5
|
-
models =
|
|
6
|
-
{
|
|
7
|
-
id: "GEN2",
|
|
8
|
-
releaseDate: "2025-01-01",
|
|
9
|
-
languages: [
|
|
10
|
-
"en",
|
|
11
|
-
"de",
|
|
12
|
-
"es",
|
|
13
|
-
"fr",
|
|
14
|
-
"zh",
|
|
15
|
-
"ar",
|
|
16
|
-
"hi",
|
|
17
|
-
"bn",
|
|
18
|
-
"ta",
|
|
19
|
-
"pt",
|
|
20
|
-
"it",
|
|
21
|
-
"ja",
|
|
22
|
-
"ko",
|
|
23
|
-
"nl",
|
|
24
|
-
"pl",
|
|
25
|
-
"ru",
|
|
26
|
-
"sv",
|
|
27
|
-
"tr",
|
|
28
|
-
"id",
|
|
29
|
-
"ms",
|
|
30
|
-
"tl",
|
|
31
|
-
"cs",
|
|
32
|
-
"fi",
|
|
33
|
-
"th",
|
|
34
|
-
"vi",
|
|
35
|
-
"da",
|
|
36
|
-
"no",
|
|
37
|
-
"ro",
|
|
38
|
-
"el",
|
|
39
|
-
"hu",
|
|
40
|
-
"uk",
|
|
41
|
-
"sk",
|
|
42
|
-
"bg",
|
|
43
|
-
],
|
|
44
|
-
features: ["streaming"],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: "FALCON",
|
|
48
|
-
releaseDate: "2025-01-01",
|
|
49
|
-
languages: ["en"],
|
|
50
|
-
features: ["streaming"],
|
|
51
|
-
},
|
|
52
|
-
];
|
|
61
|
+
models = MURF_MODELS;
|
|
53
62
|
apiKey;
|
|
54
63
|
baseURL;
|
|
55
64
|
fetchFn;
|
|
@@ -85,7 +94,7 @@ export class MurfSpeechProvider {
|
|
|
85
94
|
body: JSON.stringify(body),
|
|
86
95
|
signal: options.abortSignal,
|
|
87
96
|
});
|
|
88
|
-
await handleErrorResponse(response
|
|
97
|
+
await handleErrorResponse(response);
|
|
89
98
|
if (isFalcon) {
|
|
90
99
|
const arrayBuffer = await response.arrayBuffer();
|
|
91
100
|
const mediaType = response.headers.get("content-type") ?? "audio/wav";
|
|
@@ -94,10 +103,18 @@ export class MurfSpeechProvider {
|
|
|
94
103
|
mediaType,
|
|
95
104
|
};
|
|
96
105
|
}
|
|
97
|
-
const json = (await response.json());
|
|
106
|
+
const json = speechResponseSchema.parse(await response.json());
|
|
107
|
+
const audioDurationMs = typeof json.audioLengthInSeconds === "number"
|
|
108
|
+
? Math.round(json.audioLengthInSeconds * 1000)
|
|
109
|
+
: undefined;
|
|
110
|
+
const timestamps = options.includeTimestamps && json.wordDurations
|
|
111
|
+
? wordDurationsToWordTimestamps(json.wordDurations)
|
|
112
|
+
: undefined;
|
|
98
113
|
return {
|
|
99
114
|
audio: json.encodedAudio,
|
|
115
|
+
audioDurationMs,
|
|
100
116
|
mediaType: "audio/wav",
|
|
117
|
+
timestamps,
|
|
101
118
|
};
|
|
102
119
|
}
|
|
103
120
|
async stream(options) {
|
|
@@ -119,7 +136,7 @@ export class MurfSpeechProvider {
|
|
|
119
136
|
body: JSON.stringify(body),
|
|
120
137
|
signal: options.abortSignal,
|
|
121
138
|
});
|
|
122
|
-
await handleErrorResponse(response
|
|
139
|
+
await handleErrorResponse(response);
|
|
123
140
|
if (!response.body) {
|
|
124
141
|
throw new Error(`murf/${options.modelId}: response has no body`);
|
|
125
142
|
}
|
|
@@ -130,23 +147,23 @@ export class MurfSpeechProvider {
|
|
|
130
147
|
}
|
|
131
148
|
getStitchOptions(modelId) {
|
|
132
149
|
if (this.models.some((m) => m.id === modelId)) {
|
|
133
|
-
//
|
|
134
|
-
// Both paths already yield audio/wav so no provider-side overrides are
|
|
135
|
-
// required.
|
|
150
|
+
// GEN2 base64 WAV and FALCON streamed WAV both yield audio/wav with no overrides needed.
|
|
136
151
|
return {
|
|
137
152
|
providerOptions: {},
|
|
138
153
|
mediaType: "audio/wav",
|
|
139
154
|
};
|
|
140
155
|
}
|
|
141
|
-
return
|
|
156
|
+
return;
|
|
142
157
|
}
|
|
143
158
|
}
|
|
144
159
|
export function createMurf(config = {}) {
|
|
145
160
|
const provider = new MurfSpeechProvider(config);
|
|
161
|
+
const fallbackSTT = config.fallbackSTT;
|
|
146
162
|
return function murf(modelId) {
|
|
147
163
|
return {
|
|
148
164
|
provider,
|
|
149
165
|
modelId: modelId ?? provider.defaultModel,
|
|
166
|
+
...(fallbackSTT && { fallbackSTT }),
|
|
150
167
|
};
|
|
151
168
|
};
|
|
152
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/murf/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/murf/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
import { type ResolvedModel, type SpeechProvider } from "../../speech-provider.js";
|
|
1
|
+
import { type ModelInfo, type ResolvedModel, type SpeechProvider } from "../../speech-provider.js";
|
|
2
|
+
import type { ResolvedSTTModel, SpeechToTextProvider } from "../../speech-to-text-provider.js";
|
|
3
|
+
import type { WordTimestamp } from "../../timestamps.js";
|
|
2
4
|
export interface OpenAISpeechProviderConfig {
|
|
3
5
|
apiKey?: string;
|
|
4
6
|
baseURL?: string;
|
|
7
|
+
fallbackSTT?: ResolvedSTTModel;
|
|
5
8
|
fetch?: typeof globalThis.fetch;
|
|
6
9
|
}
|
|
10
|
+
export declare const OPENAI_PROVIDER_ID: "openai";
|
|
11
|
+
export declare const OPENAI_MODELS: readonly ModelInfo[];
|
|
7
12
|
export declare class OpenAISpeechProvider implements SpeechProvider<string, string> {
|
|
8
|
-
readonly id
|
|
13
|
+
readonly id: "openai";
|
|
9
14
|
readonly defaultModel = "gpt-4o-mini-tts";
|
|
10
|
-
|
|
11
|
-
readonly models: readonly [{
|
|
12
|
-
readonly id: "gpt-4o-mini-tts";
|
|
13
|
-
readonly releaseDate: "2025-03-20";
|
|
14
|
-
readonly languages: readonly ["af", "ar", "bg", "bn", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "fi", "fr", "gl", "gu", "he", "hi", "hr", "hu", "id", "is", "it", "ja", "jv", "ka", "kk", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "si", "sk", "sl", "so", "sq", "sr", "su", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "zh"];
|
|
15
|
-
readonly features: readonly ["streaming", "audio-tags"];
|
|
16
|
-
}, {
|
|
17
|
-
readonly id: "tts-1";
|
|
18
|
-
readonly releaseDate: "2023-11-06";
|
|
19
|
-
readonly languages: readonly ["af", "ar", "bg", "bn", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "fi", "fr", "gl", "gu", "he", "hi", "hr", "hu", "id", "is", "it", "ja", "jv", "ka", "kk", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "si", "sk", "sl", "so", "sq", "sr", "su", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "zh"];
|
|
20
|
-
readonly features: readonly ["streaming"];
|
|
21
|
-
}, {
|
|
22
|
-
readonly id: "tts-1-hd";
|
|
23
|
-
readonly releaseDate: "2023-11-06";
|
|
24
|
-
readonly languages: readonly ["af", "ar", "bg", "bn", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "fi", "fr", "gl", "gu", "he", "hi", "hr", "hu", "id", "is", "it", "ja", "jv", "ka", "kk", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "si", "sk", "sl", "so", "sq", "sr", "su", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "zh"];
|
|
25
|
-
readonly features: readonly ["streaming"];
|
|
26
|
-
}];
|
|
15
|
+
readonly models: readonly ModelInfo[];
|
|
27
16
|
private readonly apiKey;
|
|
28
17
|
private readonly baseURL;
|
|
29
18
|
private readonly fetchFn;
|
|
@@ -64,5 +53,32 @@ export declare class OpenAISpeechProvider implements SpeechProvider<string, stri
|
|
|
64
53
|
mediaType: string;
|
|
65
54
|
} | undefined;
|
|
66
55
|
}
|
|
67
|
-
export declare
|
|
56
|
+
export declare class OpenAISpeechToTextProvider implements SpeechToTextProvider {
|
|
57
|
+
readonly id: "openai";
|
|
58
|
+
readonly defaultModel = "whisper-1";
|
|
59
|
+
readonly models: readonly [{
|
|
60
|
+
readonly id: "whisper-1";
|
|
61
|
+
readonly releaseDate: "2023-03-01";
|
|
62
|
+
readonly languages: readonly ["af", "ar", "az", "be", "bg", "bn", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "fa", "fi", "fr", "gl", "he", "hi", "hr", "hu", "hy", "id", "is", "it", "ja", "kk", "kn", "ko", "lt", "lv", "mi", "mk", "mr", "ms", "ne", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sr", "sv", "sw", "ta", "th", "tl", "tr", "uk", "ur", "vi", "zh"];
|
|
63
|
+
}];
|
|
64
|
+
private readonly apiKey;
|
|
65
|
+
private readonly baseURL;
|
|
66
|
+
private readonly fetchFn;
|
|
67
|
+
constructor(config?: OpenAISpeechProviderConfig);
|
|
68
|
+
transcribe(options: {
|
|
69
|
+
modelId: string;
|
|
70
|
+
audio: Uint8Array;
|
|
71
|
+
mediaType: string;
|
|
72
|
+
language?: string;
|
|
73
|
+
abortSignal?: AbortSignal;
|
|
74
|
+
headers?: Record<string, string>;
|
|
75
|
+
}): Promise<{
|
|
76
|
+
timestamps: WordTimestamp[];
|
|
77
|
+
text?: string;
|
|
78
|
+
providerMetadata?: Record<string, unknown>;
|
|
79
|
+
}>;
|
|
80
|
+
}
|
|
81
|
+
export declare function createOpenAI(config?: OpenAISpeechProviderConfig): ((modelId?: string) => ResolvedModel<string>) & {
|
|
82
|
+
stt: (modelId?: string) => ResolvedSTTModel;
|
|
83
|
+
};
|
|
68
84
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/index.ts"],"names":[],"mappings":"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"}
|