@speech-sdk/core 0.5.2 → 0.6.1
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 +110 -1
- package/dist/__tests__/e2e/_save-audio.d.ts +11 -0
- package/dist/__tests__/e2e/_save-audio.d.ts.map +1 -0
- package/dist/__tests__/e2e/_save-audio.js +43 -0
- package/dist/__tests__/e2e/_save-audio.js.map +1 -0
- package/dist/audio-utils.d.ts +12 -0
- package/dist/audio-utils.d.ts.map +1 -0
- package/dist/audio-utils.js +53 -0
- package/dist/audio-utils.js.map +1 -0
- package/dist/conversation/dispatch.d.ts +17 -0
- package/dist/conversation/dispatch.d.ts.map +1 -0
- package/dist/conversation/dispatch.js +60 -0
- package/dist/conversation/dispatch.js.map +1 -0
- package/dist/conversation/errors.d.ts +23 -0
- package/dist/conversation/errors.d.ts.map +1 -0
- package/dist/conversation/errors.js +28 -0
- package/dist/conversation/errors.js.map +1 -0
- package/dist/conversation/pcm-concat.d.ts +37 -0
- package/dist/conversation/pcm-concat.d.ts.map +1 -0
- package/dist/conversation/pcm-concat.js +246 -0
- package/dist/conversation/pcm-concat.js.map +1 -0
- package/dist/conversation/stitch.d.ts +33 -0
- package/dist/conversation/stitch.d.ts.map +1 -0
- package/dist/conversation/stitch.js +78 -0
- package/dist/conversation/stitch.js.map +1 -0
- package/dist/conversation/types.d.ts +39 -0
- package/dist/conversation/types.d.ts.map +1 -0
- package/dist/conversation/types.js +2 -0
- package/dist/conversation/types.js.map +1 -0
- package/dist/conversation/validate.d.ts +19 -0
- package/dist/conversation/validate.d.ts.map +1 -0
- package/dist/conversation/validate.js +50 -0
- package/dist/conversation/validate.js.map +1 -0
- package/dist/errors.d.ts +3 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/generate-conversation.d.ts +6 -0
- package/dist/generate-conversation.d.ts.map +1 -0
- package/dist/generate-conversation.js +154 -0
- package/dist/generate-conversation.js.map +1 -0
- package/dist/generate-speech.d.ts +10 -0
- package/dist/generate-speech.d.ts.map +1 -1
- package/dist/generate-speech.js +30 -5
- package/dist/generate-speech.js.map +1 -1
- package/dist/provider-utils.d.ts +1 -0
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +5 -0
- package/dist/provider-utils.js.map +1 -1
- package/dist/providers/cartesia/index.d.ts +10 -0
- package/dist/providers/cartesia/index.d.ts.map +1 -1
- package/dist/providers/cartesia/index.js +18 -1
- package/dist/providers/cartesia/index.js.map +1 -1
- package/dist/providers/deepgram/index.d.ts +8 -0
- package/dist/providers/deepgram/index.d.ts.map +1 -1
- package/dist/providers/deepgram/index.js +39 -19
- package/dist/providers/deepgram/index.js.map +1 -1
- package/dist/providers/elevenlabs/index.d.ts +25 -0
- package/dist/providers/elevenlabs/index.d.ts.map +1 -1
- package/dist/providers/elevenlabs/index.js +56 -1
- package/dist/providers/elevenlabs/index.js.map +1 -1
- package/dist/providers/fal/index.d.ts +25 -5
- package/dist/providers/fal/index.d.ts.map +1 -1
- package/dist/providers/fal/index.js +73 -11
- package/dist/providers/fal/index.js.map +1 -1
- package/dist/providers/fish-audio/index.d.ts +24 -0
- package/dist/providers/fish-audio/index.d.ts.map +1 -1
- package/dist/providers/fish-audio/index.js +57 -1
- package/dist/providers/fish-audio/index.js.map +1 -1
- package/dist/providers/google/index.d.ts +25 -2
- package/dist/providers/google/index.d.ts.map +1 -1
- package/dist/providers/google/index.js +166 -51
- package/dist/providers/google/index.js.map +1 -1
- package/dist/providers/hume/index.d.ts +26 -0
- package/dist/providers/hume/index.d.ts.map +1 -1
- package/dist/providers/hume/index.js +58 -1
- package/dist/providers/hume/index.js.map +1 -1
- package/dist/providers/inworld/index.d.ts +9 -0
- package/dist/providers/inworld/index.d.ts.map +1 -1
- package/dist/providers/inworld/index.js +15 -4
- package/dist/providers/inworld/index.js.map +1 -1
- package/dist/providers/mistral/index.d.ts +6 -0
- package/dist/providers/mistral/index.d.ts.map +1 -1
- package/dist/providers/mistral/index.js +34 -13
- package/dist/providers/mistral/index.js.map +1 -1
- package/dist/providers/murf/index.d.ts +4 -0
- package/dist/providers/murf/index.d.ts.map +1 -1
- package/dist/providers/murf/index.js +15 -1
- package/dist/providers/murf/index.js.map +1 -1
- package/dist/providers/openai/index.d.ts +6 -0
- package/dist/providers/openai/index.d.ts.map +1 -1
- package/dist/providers/openai/index.js +12 -1
- package/dist/providers/openai/index.js.map +1 -1
- package/dist/providers/resemble/index.d.ts +6 -0
- package/dist/providers/resemble/index.d.ts.map +1 -1
- package/dist/providers/resemble/index.js +15 -1
- package/dist/providers/resemble/index.js.map +1 -1
- package/dist/providers/xai/index.d.ts +8 -0
- package/dist/providers/xai/index.d.ts.map +1 -1
- package/dist/providers/xai/index.js +14 -1
- package/dist/providers/xai/index.js.map +1 -1
- package/dist/resolve-provider.d.ts.map +1 -1
- package/dist/resolve-provider.js +0 -3
- package/dist/resolve-provider.js.map +1 -1
- package/dist/speech-provider.d.ts +24 -0
- package/dist/speech-provider.d.ts.map +1 -1
- package/dist/volume-adjust.d.ts +14 -0
- package/dist/volume-adjust.d.ts.map +1 -0
- package/dist/volume-adjust.js +27 -0
- package/dist/volume-adjust.js.map +1 -0
- package/package.json +11 -7
- package/dist/providers/unreal-speech/index.d.ts +0 -46
- package/dist/providers/unreal-speech/index.d.ts.map +0 -1
- package/dist/providers/unreal-speech/index.js +0 -96
- package/dist/providers/unreal-speech/index.js.map +0 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import pRetry from "p-retry";
|
|
2
|
+
import { computeAudioDuration } from "./audio-duration.js";
|
|
3
|
+
import { chooseConversationPath } from "./conversation/dispatch.js";
|
|
4
|
+
import { validateConversationInput } from "./conversation/validate.js";
|
|
5
|
+
import { ApiError, NoSpeechGeneratedError } from "./errors.js";
|
|
6
|
+
import { resolveModel } from "./resolve-provider.js";
|
|
7
|
+
import { DefaultGeneratedAudioFile } from "./speech-result.js";
|
|
8
|
+
const DEFAULT_GAP_MS = 300;
|
|
9
|
+
const DEFAULT_MAX_CONCURRENCY = 6;
|
|
10
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
11
|
+
export async function generateConversation(options) {
|
|
12
|
+
validateConversationInput(options);
|
|
13
|
+
const resolvedPerTurn = options.turns.map((turn) => {
|
|
14
|
+
const model = turn.model ?? options.model;
|
|
15
|
+
if (!model) {
|
|
16
|
+
throw new Error("generateConversation: model is required");
|
|
17
|
+
}
|
|
18
|
+
return resolveModel(model, { apiKey: options.apiKey });
|
|
19
|
+
});
|
|
20
|
+
const path = chooseConversationPath({
|
|
21
|
+
resolvedPerTurn,
|
|
22
|
+
turns: options.turns,
|
|
23
|
+
});
|
|
24
|
+
if (path.kind === "native") {
|
|
25
|
+
return await runNative({
|
|
26
|
+
options,
|
|
27
|
+
resolved: path.resolved,
|
|
28
|
+
maxRetries: options.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Lazy-load the stitch pipeline so callers whose dispatch always picks
|
|
32
|
+
// native (e.g. a Jellypod gateway provider that handles concatenation
|
|
33
|
+
// server-side) never bundle pcm-concat / audio-utils / mediabunny WAV mux.
|
|
34
|
+
const { runStitch } = await import("./conversation/stitch.js");
|
|
35
|
+
const stitched = await runStitch({
|
|
36
|
+
resolvedPerTurn,
|
|
37
|
+
turns: options.turns,
|
|
38
|
+
stitchOptionsPerTurn: path.stitchOptionsPerTurn,
|
|
39
|
+
topLevelProviderOptions: options.providerOptions,
|
|
40
|
+
apiKey: options.apiKey,
|
|
41
|
+
gapMs: options.gapMs ?? DEFAULT_GAP_MS,
|
|
42
|
+
maxConcurrency: options.maxConcurrency ?? DEFAULT_MAX_CONCURRENCY,
|
|
43
|
+
maxRetries: options.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
44
|
+
normalizeVolume: options.normalizeVolume ?? true,
|
|
45
|
+
volumeDbfs: options.volumeDbfs,
|
|
46
|
+
abortSignal: options.abortSignal,
|
|
47
|
+
headers: options.headers,
|
|
48
|
+
});
|
|
49
|
+
if (stitched.audio.length === 0) {
|
|
50
|
+
throw new NoSpeechGeneratedError();
|
|
51
|
+
}
|
|
52
|
+
const providers = Array.from(new Set(resolvedPerTurn.map((r) => r.provider.id)));
|
|
53
|
+
const models = Array.from(new Set(resolvedPerTurn.map((r) => r.modelId)));
|
|
54
|
+
const metadata = {
|
|
55
|
+
latencyMs: stitched.metadata.latencyMs,
|
|
56
|
+
inputChars: stitched.metadata.inputChars,
|
|
57
|
+
provider: providers.length === 1 ? providers[0] : providers.join(","),
|
|
58
|
+
model: models.length === 1 ? models[0] : models.join(","),
|
|
59
|
+
...(stitched.metadata.audioDurationMs != null && {
|
|
60
|
+
audioDurationMs: stitched.metadata.audioDurationMs,
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
audio: new DefaultGeneratedAudioFile({
|
|
65
|
+
data: stitched.audio,
|
|
66
|
+
mediaType: stitched.mediaType,
|
|
67
|
+
}),
|
|
68
|
+
metadata,
|
|
69
|
+
providerMetadata: { turns: stitched.providerMetadataPerTurn },
|
|
70
|
+
warnings: stitched.warnings.length > 0 ? [...stitched.warnings] : undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function runNative(args) {
|
|
74
|
+
const { options, resolved, maxRetries } = args;
|
|
75
|
+
const start = performance.now();
|
|
76
|
+
if (!resolved.provider.generateDialogue) {
|
|
77
|
+
throw new Error(`generateConversation: ${resolved.provider.id}/${resolved.modelId} dispatched to native but generateDialogue missing`);
|
|
78
|
+
}
|
|
79
|
+
const generateDialogue = resolved.provider.generateDialogue.bind(resolved.provider);
|
|
80
|
+
// When normalization is requested and the provider exposes a decodable
|
|
81
|
+
// PCM/WAV mode via getStitchOptions, force the dialogue request into that
|
|
82
|
+
// mode so we can re-RMS-level the output. Otherwise the dialogue runs
|
|
83
|
+
// unchanged and emerges in whatever format the provider mixes natively
|
|
84
|
+
// (often MP3) — we surface that via a warning.
|
|
85
|
+
const normalize = options.normalizeVolume ?? true;
|
|
86
|
+
const stitchOpts = normalize
|
|
87
|
+
? resolved.provider.getStitchOptions?.(resolved.modelId)
|
|
88
|
+
: undefined;
|
|
89
|
+
const warnings = [];
|
|
90
|
+
if (normalize && !stitchOpts) {
|
|
91
|
+
warnings.push(`${resolved.provider.id}/${resolved.modelId}: native dialogue path returns the provider's mixed audio without volume normalization. Pass normalizeVolume:false to silence this warning.`);
|
|
92
|
+
}
|
|
93
|
+
// Stitch-mode options are applied last so they override user-supplied
|
|
94
|
+
// providerOptions that would otherwise break the decoder (e.g. a caller
|
|
95
|
+
// requesting `response_format: "mp3"` while normalization is on). Same
|
|
96
|
+
// precedence as the stitch path's per-turn merge.
|
|
97
|
+
const dialogueProviderOptions = stitchOpts
|
|
98
|
+
? { ...options.providerOptions, ...stitchOpts.providerOptions }
|
|
99
|
+
: options.providerOptions;
|
|
100
|
+
const result = await pRetry(() => generateDialogue({
|
|
101
|
+
modelId: resolved.modelId,
|
|
102
|
+
turns: options.turns.map((t) => ({ voice: t.voice, text: t.text })),
|
|
103
|
+
providerOptions: dialogueProviderOptions,
|
|
104
|
+
abortSignal: options.abortSignal,
|
|
105
|
+
headers: options.headers,
|
|
106
|
+
}), {
|
|
107
|
+
retries: maxRetries,
|
|
108
|
+
signal: options.abortSignal,
|
|
109
|
+
shouldRetry: ({ error }) => {
|
|
110
|
+
if (error instanceof ApiError && error.statusCode < 500) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
const latencyMs = Math.round(performance.now() - start);
|
|
117
|
+
if (result.audio.length === 0) {
|
|
118
|
+
throw new NoSpeechGeneratedError();
|
|
119
|
+
}
|
|
120
|
+
let audioBytes = result.audio;
|
|
121
|
+
// Prefer the stitch-mode mediaType over the provider's response header;
|
|
122
|
+
// some providers (e.g. Hume) omit the sample rate from content-type.
|
|
123
|
+
let outputMediaType = stitchOpts?.mediaType ?? result.mediaType;
|
|
124
|
+
if (stitchOpts) {
|
|
125
|
+
const { adjustVolume } = await import("./volume-adjust.js");
|
|
126
|
+
audioBytes = await adjustVolume({
|
|
127
|
+
audio: result.audio,
|
|
128
|
+
mediaType: stitchOpts.mediaType,
|
|
129
|
+
volumeDbfs: options.volumeDbfs ?? -20,
|
|
130
|
+
});
|
|
131
|
+
outputMediaType = "audio/wav";
|
|
132
|
+
}
|
|
133
|
+
const audio = new DefaultGeneratedAudioFile({
|
|
134
|
+
data: audioBytes,
|
|
135
|
+
mediaType: outputMediaType,
|
|
136
|
+
});
|
|
137
|
+
const computedDuration = await computeAudioDuration(audio.uint8Array, outputMediaType);
|
|
138
|
+
const audioDurationMs = computedDuration ?? result.audioDurationMs;
|
|
139
|
+
const inputChars = options.turns.reduce((n, t) => n + t.text.length, 0);
|
|
140
|
+
const metadata = {
|
|
141
|
+
latencyMs,
|
|
142
|
+
inputChars,
|
|
143
|
+
provider: resolved.provider.id,
|
|
144
|
+
model: resolved.modelId,
|
|
145
|
+
...(audioDurationMs != null && { audioDurationMs }),
|
|
146
|
+
};
|
|
147
|
+
return {
|
|
148
|
+
audio,
|
|
149
|
+
metadata,
|
|
150
|
+
providerMetadata: result.providerMetadata,
|
|
151
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=generate-conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-conversation.js","sourceRoot":"","sources":["../src/generate-conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,15 @@ export declare function generateSpeech<V extends Voice = Voice>(options: {
|
|
|
9
9
|
maxRetries?: number;
|
|
10
10
|
abortSignal?: AbortSignal;
|
|
11
11
|
headers?: Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* RMS-normalize the returned audio to this dBFS level. Must be ≤ 0.
|
|
14
|
+
* When set, generateSpeech requests the provider's decodable PCM/WAV
|
|
15
|
+
* output mode (via `getStitchOptions`), normalizes the samples to the
|
|
16
|
+
* target loudness, and re-encodes the result as 16-bit mono WAV — so
|
|
17
|
+
* the response `mediaType` will be `audio/wav` regardless of the
|
|
18
|
+
* provider's native default. Throws `VolumeAdjustmentUnsupportedError`
|
|
19
|
+
* if the provider doesn't expose a decodable output mode.
|
|
20
|
+
*/
|
|
21
|
+
volumeDbfs?: number;
|
|
12
22
|
}): Promise<SpeechResult>;
|
|
13
23
|
//# sourceMappingURL=generate-speech.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-speech.d.ts","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-speech.d.ts","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAsB,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,OAAO,EAAE;IACrE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwHxB"}
|
package/dist/generate-speech.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import pRetry from "p-retry";
|
|
2
2
|
import { computeAudioDuration } from "./audio-duration.js";
|
|
3
3
|
import { detectAudioTags, stripAudioTags } from "./audio-tags.js";
|
|
4
|
-
import { ApiError, NoSpeechGeneratedError } from "./errors.js";
|
|
4
|
+
import { ApiError, NoSpeechGeneratedError, VolumeAdjustmentUnsupportedError, } from "./errors.js";
|
|
5
5
|
import { resolveModel } from "./resolve-provider.js";
|
|
6
6
|
import { DefaultGeneratedAudioFile } from "./speech-result.js";
|
|
7
7
|
export async function generateSpeech(options) {
|
|
8
|
-
const { model, voice,
|
|
8
|
+
const { model, voice, abortSignal, headers, volumeDbfs } = options;
|
|
9
9
|
const maxRetries = options.maxRetries ?? 2;
|
|
10
10
|
const resolved = resolveModel(model, { apiKey: options.apiKey });
|
|
11
11
|
const modelIdentifier = `${resolved.provider.id}/${resolved.modelId}`;
|
|
12
|
+
let providerOptions = options.providerOptions;
|
|
13
|
+
if (volumeDbfs != null) {
|
|
14
|
+
const stitchOpts = resolved.provider.getStitchOptions?.(resolved.modelId);
|
|
15
|
+
if (!stitchOpts) {
|
|
16
|
+
throw new VolumeAdjustmentUnsupportedError(modelIdentifier);
|
|
17
|
+
}
|
|
18
|
+
// Stitch-mode options are applied last so they win over user-supplied
|
|
19
|
+
// providerOptions — otherwise a caller could silently break the decoder
|
|
20
|
+
// by e.g. passing `response_format: "mp3"` alongside `volumeDbfs`.
|
|
21
|
+
providerOptions = {
|
|
22
|
+
...options.providerOptions,
|
|
23
|
+
...stitchOpts.providerOptions,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
12
26
|
let processedText;
|
|
13
27
|
let warnings;
|
|
14
28
|
if (resolved.provider.processAudioTags) {
|
|
@@ -52,11 +66,22 @@ export async function generateSpeech(options) {
|
|
|
52
66
|
if (audioData.length === 0) {
|
|
53
67
|
throw new NoSpeechGeneratedError();
|
|
54
68
|
}
|
|
69
|
+
let outputBytes = audioData;
|
|
70
|
+
let outputMediaType = result.mediaType;
|
|
71
|
+
if (volumeDbfs != null) {
|
|
72
|
+
const { adjustVolume } = await import("./volume-adjust.js");
|
|
73
|
+
outputBytes = await adjustVolume({
|
|
74
|
+
audio: audioData,
|
|
75
|
+
mediaType: result.mediaType,
|
|
76
|
+
volumeDbfs,
|
|
77
|
+
});
|
|
78
|
+
outputMediaType = "audio/wav";
|
|
79
|
+
}
|
|
55
80
|
const audio = new DefaultGeneratedAudioFile({
|
|
56
|
-
data:
|
|
57
|
-
mediaType:
|
|
81
|
+
data: outputBytes,
|
|
82
|
+
mediaType: outputMediaType,
|
|
58
83
|
});
|
|
59
|
-
const audioDurationMs = (await computeAudioDuration(
|
|
84
|
+
const audioDurationMs = (await computeAudioDuration(audio.uint8Array, outputMediaType)) ??
|
|
60
85
|
result.audioDurationMs;
|
|
61
86
|
const metadata = {
|
|
62
87
|
latencyMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-speech.js","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"generate-speech.js","sourceRoot":"","sources":["../src/generate-speech.ts"],"names":[],"mappings":"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"}
|
package/dist/provider-utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare const SDK_USER_AGENT = "jellypod-speech-sdk";
|
|
1
2
|
export declare function resolveApiKey(stored: string | undefined, envVar: string, providerName: string): string;
|
|
2
3
|
export declare function handleErrorResponse(response: Response, model: string): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=provider-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAEpD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,CAUR;AA+BD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
package/dist/provider-utils.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { ApiError } from "./errors.js";
|
|
2
|
+
// Identifies traffic originating from this SDK so providers can bucket
|
|
3
|
+
// usage by integration. Sent as `X-User-Agent` because `User-Agent` is
|
|
4
|
+
// a forbidden header name in browser fetch. Callers may override via
|
|
5
|
+
// options.headers.
|
|
6
|
+
export const SDK_USER_AGENT = "jellypod-speech-sdk";
|
|
2
7
|
export function resolveApiKey(stored, envVar, providerName) {
|
|
3
8
|
const key = stored ??
|
|
4
9
|
(typeof process === "undefined" ? undefined : process.env?.[envVar]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,MAAc,EACd,YAAoB;IAEpB,MAAM,GAAG,GACP,MAAM;QACN,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,GAAG,YAAY,8DAA8D,MAAM,wBAAwB,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAwB;IACnD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,+BAA+B;QAC/B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAkB,EAClB,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE;YACpD,CAAC,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC;QAE5C,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;YAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,KAAK;YACL,YAAY;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,MAAc,EACd,YAAoB;IAEpB,MAAM,GAAG,GACP,MAAM;QACN,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,GAAG,YAAY,8DAA8D,MAAM,wBAAwB,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAwB;IACnD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,+BAA+B;QAC/B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAkB,EAClB,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE;YACpD,CAAC,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC;QAE5C,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;YAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,KAAK;YACL,YAAY;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -52,6 +52,16 @@ export declare class CartesiaSpeechProvider implements SpeechProvider<string, st
|
|
|
52
52
|
mediaType: string;
|
|
53
53
|
providerMetadata?: Record<string, unknown>;
|
|
54
54
|
}>;
|
|
55
|
+
getStitchOptions(modelId: string): {
|
|
56
|
+
providerOptions: {
|
|
57
|
+
output_format: {
|
|
58
|
+
container: string;
|
|
59
|
+
encoding: string;
|
|
60
|
+
sample_rate: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
mediaType: string;
|
|
64
|
+
} | undefined;
|
|
55
65
|
}
|
|
56
66
|
export declare function createCartesia(config?: CartesiaSpeechProviderConfig): (modelId?: string) => ResolvedModel<string>;
|
|
57
67
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,sBAAuB,YAAW,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3E,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,YAAY,aAAa;IAElC,QAAQ,CAAC,MAAM;;;;;;;;;;OAwDJ;IAEX,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAEjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CA2DrB;IAEX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,MAAM,EAAE,4BAA4B;IAMhD,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IA2CjC,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;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IAuCI,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;IAwCF,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;CAejC;AAED,wBAAgB,cAAc,CAAC,MAAM,GAAE,4BAAiC,IAG7C,UAAU,MAAM,KAAG,aAAa,CAAC,MAAM,CAAC,CAMlE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { detectAudioTags, stripAudioTags } from "../../audio-tags.js";
|
|
2
|
-
import { handleErrorResponse, resolveApiKey } from "../../provider-utils.js";
|
|
2
|
+
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
3
3
|
import { hasFeature, } from "../../speech-provider.js";
|
|
4
4
|
export class CartesiaSpeechProvider {
|
|
5
5
|
id = "cartesia";
|
|
@@ -174,6 +174,7 @@ export class CartesiaSpeechProvider {
|
|
|
174
174
|
"Content-Type": "application/json",
|
|
175
175
|
"X-API-Key": resolveApiKey(this.apiKey, "CARTESIA_API_KEY", "Cartesia"),
|
|
176
176
|
"Cartesia-Version": "2025-04-16",
|
|
177
|
+
"X-User-Agent": SDK_USER_AGENT,
|
|
177
178
|
...options.headers,
|
|
178
179
|
},
|
|
179
180
|
body: JSON.stringify(body),
|
|
@@ -206,6 +207,7 @@ export class CartesiaSpeechProvider {
|
|
|
206
207
|
"Content-Type": "application/json",
|
|
207
208
|
"X-API-Key": resolveApiKey(this.apiKey, "CARTESIA_API_KEY", "Cartesia"),
|
|
208
209
|
"Cartesia-Version": "2025-04-16",
|
|
210
|
+
"X-User-Agent": SDK_USER_AGENT,
|
|
209
211
|
...options.headers,
|
|
210
212
|
},
|
|
211
213
|
body: JSON.stringify(body),
|
|
@@ -220,6 +222,21 @@ export class CartesiaSpeechProvider {
|
|
|
220
222
|
mediaType: response.headers.get("content-type") ?? "audio/wav",
|
|
221
223
|
};
|
|
222
224
|
}
|
|
225
|
+
getStitchOptions(modelId) {
|
|
226
|
+
if (this.models.some((m) => m.id === modelId)) {
|
|
227
|
+
return {
|
|
228
|
+
providerOptions: {
|
|
229
|
+
output_format: {
|
|
230
|
+
container: "wav",
|
|
231
|
+
encoding: "pcm_s16le",
|
|
232
|
+
sample_rate: 24_000,
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
mediaType: "audio/wav",
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
223
240
|
}
|
|
224
241
|
export function createCartesia(config = {}) {
|
|
225
242
|
const provider = new CartesiaSpeechProvider(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/cartesia/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,14 @@ export declare class DeepgramSpeechProvider implements SpeechProvider<string, st
|
|
|
41
41
|
mediaType: string;
|
|
42
42
|
providerMetadata?: Record<string, unknown>;
|
|
43
43
|
}>;
|
|
44
|
+
getStitchOptions(modelId: string): {
|
|
45
|
+
providerOptions: {
|
|
46
|
+
encoding: string;
|
|
47
|
+
sample_rate: number;
|
|
48
|
+
container: string;
|
|
49
|
+
};
|
|
50
|
+
mediaType: string;
|
|
51
|
+
} | undefined;
|
|
44
52
|
}
|
|
45
53
|
export declare function createDeepgram(config?: DeepgramSpeechProviderConfig): (modelId?: string) => ResolvedModel<string>;
|
|
46
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/deepgram/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/deepgram/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AA6B9E,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,sBAAuB,YAAW,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3E,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,YAAY,YAAY;IAEjC,QAAQ,CAAC,MAAM;;;;;OAOJ;IAEX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,MAAM,EAAE,4BAA4B;IAM1C,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;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IA0BI,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;IA2BF,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;;;;;CAajC;AAED,wBAAgB,cAAc,CAAC,MAAM,GAAE,4BAAiC,IAG7C,UAAU,MAAM,KAAG,aAAa,CAAC,MAAM,CAAC,CAMlE"}
|
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
import { handleErrorResponse, resolveApiKey } from "../../provider-utils.js";
|
|
1
|
+
import { handleErrorResponse, resolveApiKey, SDK_USER_AGENT, } from "../../provider-utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Deepgram's /v1/speak endpoint takes audio-shaping parameters (model,
|
|
4
|
+
* encoding, sample_rate, container, bit_rate, ...) as query-string params.
|
|
5
|
+
* Only `text` (or `url`) belongs in the JSON body — putting anything else
|
|
6
|
+
* there causes a PAYLOAD_ERROR.
|
|
7
|
+
*/
|
|
8
|
+
function buildSpeakUrl(baseURL, options) {
|
|
9
|
+
const modelParam = options.voice
|
|
10
|
+
? `${options.modelId}-${options.voice}`
|
|
11
|
+
: options.modelId;
|
|
12
|
+
const qs = new URLSearchParams({ model: modelParam });
|
|
13
|
+
for (const [k, v] of Object.entries(options.providerOptions ?? {})) {
|
|
14
|
+
if (v == null) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
qs.set(k, typeof v === "string" ? v : String(v));
|
|
18
|
+
}
|
|
19
|
+
return `${baseURL}/speak?${qs.toString()}`;
|
|
20
|
+
}
|
|
2
21
|
export class DeepgramSpeechProvider {
|
|
3
22
|
id = "deepgram";
|
|
4
23
|
defaultModel = "aura-2";
|
|
@@ -19,22 +38,16 @@ export class DeepgramSpeechProvider {
|
|
|
19
38
|
this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
20
39
|
}
|
|
21
40
|
async generate(options) {
|
|
22
|
-
const
|
|
23
|
-
? `${options.modelId}-${options.voice}`
|
|
24
|
-
: options.modelId;
|
|
25
|
-
const url = `${this.baseURL}/speak?model=${encodeURIComponent(modelParam)}`;
|
|
26
|
-
const body = {
|
|
27
|
-
...options.providerOptions,
|
|
28
|
-
text: options.text,
|
|
29
|
-
};
|
|
41
|
+
const url = buildSpeakUrl(this.baseURL, options);
|
|
30
42
|
const response = await this.fetchFn(url, {
|
|
31
43
|
method: "POST",
|
|
32
44
|
headers: {
|
|
33
45
|
"Content-Type": "application/json",
|
|
34
46
|
Authorization: `Token ${resolveApiKey(this.apiKey, "DEEPGRAM_API_KEY", "Deepgram")}`,
|
|
47
|
+
"X-User-Agent": SDK_USER_AGENT,
|
|
35
48
|
...options.headers,
|
|
36
49
|
},
|
|
37
|
-
body: JSON.stringify(
|
|
50
|
+
body: JSON.stringify({ text: options.text }),
|
|
38
51
|
signal: options.abortSignal,
|
|
39
52
|
});
|
|
40
53
|
await handleErrorResponse(response, `deepgram/${options.modelId}`);
|
|
@@ -46,22 +59,16 @@ export class DeepgramSpeechProvider {
|
|
|
46
59
|
};
|
|
47
60
|
}
|
|
48
61
|
async stream(options) {
|
|
49
|
-
const
|
|
50
|
-
? `${options.modelId}-${options.voice}`
|
|
51
|
-
: options.modelId;
|
|
52
|
-
const url = `${this.baseURL}/speak?model=${encodeURIComponent(modelParam)}`;
|
|
53
|
-
const body = {
|
|
54
|
-
...options.providerOptions,
|
|
55
|
-
text: options.text,
|
|
56
|
-
};
|
|
62
|
+
const url = buildSpeakUrl(this.baseURL, options);
|
|
57
63
|
const response = await this.fetchFn(url, {
|
|
58
64
|
method: "POST",
|
|
59
65
|
headers: {
|
|
60
66
|
"Content-Type": "application/json",
|
|
61
67
|
Authorization: `Token ${resolveApiKey(this.apiKey, "DEEPGRAM_API_KEY", "Deepgram")}`,
|
|
68
|
+
"X-User-Agent": SDK_USER_AGENT,
|
|
62
69
|
...options.headers,
|
|
63
70
|
},
|
|
64
|
-
body: JSON.stringify(
|
|
71
|
+
body: JSON.stringify({ text: options.text }),
|
|
65
72
|
signal: options.abortSignal,
|
|
66
73
|
});
|
|
67
74
|
await handleErrorResponse(response, `deepgram/${options.modelId}`);
|
|
@@ -73,6 +80,19 @@ export class DeepgramSpeechProvider {
|
|
|
73
80
|
mediaType: response.headers.get("content-type") ?? "audio/mpeg",
|
|
74
81
|
};
|
|
75
82
|
}
|
|
83
|
+
getStitchOptions(modelId) {
|
|
84
|
+
if (this.models.some((m) => m.id === modelId)) {
|
|
85
|
+
return {
|
|
86
|
+
providerOptions: {
|
|
87
|
+
encoding: "linear16",
|
|
88
|
+
sample_rate: 24_000,
|
|
89
|
+
container: "wav",
|
|
90
|
+
},
|
|
91
|
+
mediaType: "audio/wav",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
76
96
|
}
|
|
77
97
|
export function createDeepgram(config = {}) {
|
|
78
98
|
const provider = new DeepgramSpeechProvider(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/deepgram/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/deepgram/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,31 @@ export declare class ElevenLabsSpeechProvider implements SpeechProvider<string,
|
|
|
66
66
|
mediaType: string;
|
|
67
67
|
providerMetadata?: Record<string, unknown>;
|
|
68
68
|
}>;
|
|
69
|
+
getStitchOptions(modelId: string): {
|
|
70
|
+
providerOptions: {
|
|
71
|
+
output_format: string;
|
|
72
|
+
};
|
|
73
|
+
mediaType: string;
|
|
74
|
+
} | undefined;
|
|
75
|
+
dialogueCapabilities(modelId: string): {
|
|
76
|
+
minVoices: number;
|
|
77
|
+
maxVoices: number;
|
|
78
|
+
maxTotalChars: number;
|
|
79
|
+
} | undefined;
|
|
80
|
+
generateDialogue(options: {
|
|
81
|
+
modelId: string;
|
|
82
|
+
turns: readonly {
|
|
83
|
+
voice: string;
|
|
84
|
+
text: string;
|
|
85
|
+
}[];
|
|
86
|
+
providerOptions?: Record<string, unknown>;
|
|
87
|
+
abortSignal?: AbortSignal;
|
|
88
|
+
headers?: Record<string, string>;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
audio: Uint8Array;
|
|
91
|
+
mediaType: string;
|
|
92
|
+
providerMetadata?: Record<string, unknown>;
|
|
93
|
+
}>;
|
|
69
94
|
}
|
|
70
95
|
export declare function createElevenLabs(config?: ElevenLabsSpeechProviderConfig): (modelId?: string) => ResolvedModel<string>;
|
|
71
96
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/elevenlabs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/elevenlabs/index.ts"],"names":[],"mappings":"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"}
|