@speech-sdk/core 0.17.0 → 0.18.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/dist/clone-voice.d.ts +51 -0
- package/dist/clone-voice.d.ts.map +1 -0
- package/dist/clone-voice.js +178 -0
- package/dist/clone-voice.js.map +1 -0
- package/dist/conversation/dispatch.d.ts +2 -1
- package/dist/conversation/dispatch.d.ts.map +1 -1
- package/dist/conversation/dispatch.js +94 -27
- package/dist/conversation/dispatch.js.map +1 -1
- package/dist/conversation/pcm-concat.d.ts +3 -0
- package/dist/conversation/pcm-concat.d.ts.map +1 -1
- package/dist/conversation/pcm-concat.js +7 -0
- package/dist/conversation/pcm-concat.js.map +1 -1
- package/dist/conversation/stitch.d.ts.map +1 -1
- package/dist/conversation/stitch.js +1 -8
- package/dist/conversation/stitch.js.map +1 -1
- package/dist/conversation/validate.d.ts.map +1 -1
- package/dist/conversation/validate.js +1 -20
- package/dist/conversation/validate.js.map +1 -1
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -1
- package/dist/generate-conversation.d.ts.map +1 -1
- package/dist/generate-conversation.js +162 -8
- package/dist/generate-conversation.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/cartesia/index.d.ts +2 -1
- package/dist/providers/cartesia/index.d.ts.map +1 -1
- package/dist/providers/cartesia/index.js +38 -3
- package/dist/providers/cartesia/index.js.map +1 -1
- package/dist/providers/elevenlabs/index.d.ts +3 -1
- package/dist/providers/elevenlabs/index.d.ts.map +1 -1
- package/dist/providers/elevenlabs/index.js +35 -4
- package/dist/providers/elevenlabs/index.js.map +1 -1
- package/dist/providers/fal/index.d.ts +3 -9
- package/dist/providers/fal/index.d.ts.map +1 -1
- package/dist/providers/fal/index.js +2 -7
- package/dist/providers/fal/index.js.map +1 -1
- package/dist/providers/fish-audio/index.d.ts +3 -1
- package/dist/providers/fish-audio/index.d.ts.map +1 -1
- package/dist/providers/fish-audio/index.js +36 -6
- package/dist/providers/fish-audio/index.js.map +1 -1
- package/dist/providers/google/index.d.ts +1 -0
- package/dist/providers/google/index.d.ts.map +1 -1
- package/dist/providers/google/index.js +4 -1
- package/dist/providers/google/index.js.map +1 -1
- package/dist/providers/gradium/index.d.ts +2 -1
- package/dist/providers/gradium/index.d.ts.map +1 -1
- package/dist/providers/gradium/index.js +29 -1
- package/dist/providers/gradium/index.js.map +1 -1
- package/dist/providers/hume/index.js +1 -1
- package/dist/providers/hume/index.js.map +1 -1
- package/dist/providers/inworld/index.d.ts +3 -1
- package/dist/providers/inworld/index.d.ts.map +1 -1
- package/dist/providers/inworld/index.js +74 -4
- package/dist/providers/inworld/index.js.map +1 -1
- package/dist/providers/minimax/index.d.ts +4 -1
- package/dist/providers/minimax/index.d.ts.map +1 -1
- package/dist/providers/minimax/index.js +74 -12
- package/dist/providers/minimax/index.js.map +1 -1
- package/dist/providers/mistral/index.d.ts +6 -13
- package/dist/providers/mistral/index.d.ts.map +1 -1
- package/dist/providers/mistral/index.js +32 -25
- package/dist/providers/mistral/index.js.map +1 -1
- package/dist/providers/resemble/index.d.ts.map +1 -1
- package/dist/providers/resemble/index.js +1 -6
- package/dist/providers/resemble/index.js.map +1 -1
- package/dist/providers/smallest-ai/index.d.ts +5 -3
- package/dist/providers/smallest-ai/index.d.ts.map +1 -1
- package/dist/providers/smallest-ai/index.js +44 -3
- package/dist/providers/smallest-ai/index.js.map +1 -1
- package/dist/providers/xai/index.d.ts +2 -1
- package/dist/providers/xai/index.d.ts.map +1 -1
- package/dist/providers/xai/index.js +36 -1
- package/dist/providers/xai/index.js.map +1 -1
- package/dist/speech-provider.d.ts +36 -6
- package/dist/speech-provider.d.ts.map +1 -1
- package/dist/speech-provider.js +1 -1
- package/dist/speech-provider.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { NormalizedSample, ResolvedModel } from "./speech-provider.js";
|
|
2
|
+
export type VoiceSample = Uint8Array | {
|
|
3
|
+
audio: string | Uint8Array;
|
|
4
|
+
mediaType?: string;
|
|
5
|
+
} | {
|
|
6
|
+
url: string;
|
|
7
|
+
};
|
|
8
|
+
/** A provider factory, e.g. the value returned by `createElevenLabs()`. */
|
|
9
|
+
export type SpeechProviderFactory = (modelId?: string) => ResolvedModel;
|
|
10
|
+
export interface CloneVoiceOptions {
|
|
11
|
+
abortSignal?: AbortSignal;
|
|
12
|
+
files: VoiceSample | VoiceSample[];
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
/** BCP-47. Defaults to "en" (with a warning) for providers that require it. */
|
|
15
|
+
language?: string;
|
|
16
|
+
name: string;
|
|
17
|
+
/**
|
|
18
|
+
* A provider factory, e.g. `createElevenLabs()`. Cloning is a provider-level
|
|
19
|
+
* operation — the returned voice id works across all of that provider's models,
|
|
20
|
+
* so no model id is needed here.
|
|
21
|
+
*/
|
|
22
|
+
provider: SpeechProviderFactory;
|
|
23
|
+
providerOptions?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface ClonedVoice {
|
|
26
|
+
provider: string;
|
|
27
|
+
providerMetadata?: Record<string, unknown>;
|
|
28
|
+
voiceId: string;
|
|
29
|
+
warnings?: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function cloneVoice(options: CloneVoiceOptions): Promise<ClonedVoice>;
|
|
32
|
+
/** Best-effort container detection from magic bytes; defaults to audio/wav. */
|
|
33
|
+
export declare function sniffAudioMediaType(bytes: Uint8Array): string;
|
|
34
|
+
/** File extension for a sample's media type, for multipart filenames. */
|
|
35
|
+
export declare function extensionForMediaType(mediaType: string): string;
|
|
36
|
+
/** Builds a multipart filename for the Nth sample, e.g. "sample-0.wav". */
|
|
37
|
+
export declare function cloneSampleFilename(sample: NormalizedSample, index: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Appends a providerOptions entry to a multipart form. Nullish values are
|
|
40
|
+
* skipped (so an unset optional field isn't sent as the literal "null"), and
|
|
41
|
+
* non-primitives are JSON-encoded.
|
|
42
|
+
*/
|
|
43
|
+
export declare function appendProviderOption(form: FormData, key: string, value: unknown): void;
|
|
44
|
+
/** Appends a reference sample to a multipart form under the given field name. */
|
|
45
|
+
export declare function appendSampleBlob(form: FormData, field: string, sample: NormalizedSample, index: number): void;
|
|
46
|
+
/**
|
|
47
|
+
* Returns the caller's language, or defaults to "en" and pushes a warning, for
|
|
48
|
+
* providers that require a language at clone time.
|
|
49
|
+
*/
|
|
50
|
+
export declare function defaultCloneLanguage(provider: string, language: string | undefined, warnings: string[]): string;
|
|
51
|
+
//# sourceMappingURL=clone-voice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-voice.d.ts","sourceRoot":"","sources":["../src/clone-voice.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,MAAM,WAAW,GACnB,UAAU,GACV;IAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpB,2EAA2E;AAC3E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,EAAE,qBAAqB,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA+CtB;AA0DD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAsD7D;AAeD,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,IAAI,CAWN;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,GACZ,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAQR"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { base64ToUint8Array } from "./audio-utils.js";
|
|
2
|
+
import { CloneSampleFetchError, InvalidCloneFieldError, TooManyCloneSamplesError, VoiceCloningUnsupportedError, } from "./errors.js";
|
|
3
|
+
export async function cloneVoice(options) {
|
|
4
|
+
const { provider } = options.provider();
|
|
5
|
+
if (!provider.cloneVoice) {
|
|
6
|
+
throw new VoiceCloningUnsupportedError(provider.id);
|
|
7
|
+
}
|
|
8
|
+
if (options.name.trim().length === 0) {
|
|
9
|
+
throw new InvalidCloneFieldError(provider.id, "name", "must not be empty.");
|
|
10
|
+
}
|
|
11
|
+
const fileList = Array.isArray(options.files)
|
|
12
|
+
? options.files
|
|
13
|
+
: [options.files];
|
|
14
|
+
if (fileList.length === 0) {
|
|
15
|
+
throw new InvalidCloneFieldError(provider.id, "files", "at least one audio sample is required.");
|
|
16
|
+
}
|
|
17
|
+
// Enforce the count before normalizing so oversized requests don't fetch every URL first.
|
|
18
|
+
const max = provider.maxCloneSamples?.() ?? 1;
|
|
19
|
+
if (fileList.length > max) {
|
|
20
|
+
throw new TooManyCloneSamplesError(provider.id, max, fileList.length);
|
|
21
|
+
}
|
|
22
|
+
const samples = await normalizeSamples(fileList, options.abortSignal);
|
|
23
|
+
const result = await provider.cloneVoice({
|
|
24
|
+
samples,
|
|
25
|
+
name: options.name,
|
|
26
|
+
language: options.language,
|
|
27
|
+
providerOptions: options.providerOptions,
|
|
28
|
+
abortSignal: options.abortSignal,
|
|
29
|
+
headers: options.headers,
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
voiceId: result.voiceId,
|
|
33
|
+
provider: provider.id,
|
|
34
|
+
...(result.warnings?.length ? { warnings: result.warnings } : {}),
|
|
35
|
+
...(result.providerMetadata && {
|
|
36
|
+
providerMetadata: result.providerMetadata,
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async function normalizeSamples(files, abortSignal) {
|
|
41
|
+
return await Promise.all(files.map((file) => normalizeSample(file, abortSignal)));
|
|
42
|
+
}
|
|
43
|
+
async function normalizeSample(file, abortSignal) {
|
|
44
|
+
if (file instanceof Uint8Array) {
|
|
45
|
+
return { bytes: file, mediaType: sniffAudioMediaType(file) };
|
|
46
|
+
}
|
|
47
|
+
if ("url" in file) {
|
|
48
|
+
return await fetchSample(file.url, abortSignal);
|
|
49
|
+
}
|
|
50
|
+
const bytes = file.audio instanceof Uint8Array
|
|
51
|
+
? file.audio
|
|
52
|
+
: base64ToUint8Array(file.audio);
|
|
53
|
+
return {
|
|
54
|
+
bytes,
|
|
55
|
+
mediaType: file.mediaType ?? sniffAudioMediaType(bytes),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function fetchSample(url, abortSignal) {
|
|
59
|
+
let response;
|
|
60
|
+
try {
|
|
61
|
+
response = await fetch(url, { signal: abortSignal });
|
|
62
|
+
}
|
|
63
|
+
catch (cause) {
|
|
64
|
+
throw new CloneSampleFetchError(url, { cause });
|
|
65
|
+
}
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new CloneSampleFetchError(url, { statusCode: response.status });
|
|
68
|
+
}
|
|
69
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
70
|
+
const headerType = response.headers
|
|
71
|
+
.get("content-type")
|
|
72
|
+
?.split(";")[0]
|
|
73
|
+
?.trim();
|
|
74
|
+
return {
|
|
75
|
+
bytes,
|
|
76
|
+
mediaType: headerType && headerType.length > 0
|
|
77
|
+
? headerType
|
|
78
|
+
: sniffAudioMediaType(bytes),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Best-effort container detection from magic bytes; defaults to audio/wav. */
|
|
82
|
+
export function sniffAudioMediaType(bytes) {
|
|
83
|
+
if (bytes.length >= 12 &&
|
|
84
|
+
bytes[0] === 0x52 &&
|
|
85
|
+
bytes[1] === 0x49 &&
|
|
86
|
+
bytes[2] === 0x46 &&
|
|
87
|
+
bytes[3] === 0x46 &&
|
|
88
|
+
bytes[8] === 0x57 &&
|
|
89
|
+
bytes[9] === 0x41 &&
|
|
90
|
+
bytes[10] === 0x56 &&
|
|
91
|
+
bytes[11] === 0x45) {
|
|
92
|
+
return "audio/wav";
|
|
93
|
+
}
|
|
94
|
+
if (bytes.length >= 3 &&
|
|
95
|
+
bytes[0] === 0x49 &&
|
|
96
|
+
bytes[1] === 0x44 &&
|
|
97
|
+
bytes[2] === 0x33) {
|
|
98
|
+
return "audio/mpeg";
|
|
99
|
+
}
|
|
100
|
+
// biome-ignore lint/suspicious/noBitwiseOperators: MP3 frame sync requires masking the top 3 bits of the second byte.
|
|
101
|
+
if (bytes.length >= 2 && bytes[0] === 0xff && (bytes[1] & 0xe0) === 0xe0) {
|
|
102
|
+
return "audio/mpeg";
|
|
103
|
+
}
|
|
104
|
+
if (bytes.length >= 4 &&
|
|
105
|
+
bytes[0] === 0x4f &&
|
|
106
|
+
bytes[1] === 0x67 &&
|
|
107
|
+
bytes[2] === 0x67 &&
|
|
108
|
+
bytes[3] === 0x53) {
|
|
109
|
+
return "audio/ogg";
|
|
110
|
+
}
|
|
111
|
+
if (bytes.length >= 4 &&
|
|
112
|
+
bytes[0] === 0x66 &&
|
|
113
|
+
bytes[1] === 0x4c &&
|
|
114
|
+
bytes[2] === 0x61 &&
|
|
115
|
+
bytes[3] === 0x43) {
|
|
116
|
+
return "audio/flac";
|
|
117
|
+
}
|
|
118
|
+
if (bytes.length >= 12 &&
|
|
119
|
+
bytes[4] === 0x66 &&
|
|
120
|
+
bytes[5] === 0x74 &&
|
|
121
|
+
bytes[6] === 0x79 &&
|
|
122
|
+
bytes[7] === 0x70) {
|
|
123
|
+
return "audio/mp4";
|
|
124
|
+
}
|
|
125
|
+
return "audio/wav";
|
|
126
|
+
}
|
|
127
|
+
const EXTENSION_BY_MEDIA_TYPE = {
|
|
128
|
+
"audio/wav": "wav",
|
|
129
|
+
"audio/x-wav": "wav",
|
|
130
|
+
"audio/mpeg": "mp3",
|
|
131
|
+
"audio/mp3": "mp3",
|
|
132
|
+
"audio/ogg": "ogg",
|
|
133
|
+
"audio/flac": "flac",
|
|
134
|
+
"audio/mp4": "m4a",
|
|
135
|
+
"audio/m4a": "m4a",
|
|
136
|
+
"audio/webm": "webm",
|
|
137
|
+
"audio/aac": "aac",
|
|
138
|
+
};
|
|
139
|
+
/** File extension for a sample's media type, for multipart filenames. */
|
|
140
|
+
export function extensionForMediaType(mediaType) {
|
|
141
|
+
return EXTENSION_BY_MEDIA_TYPE[mediaType.toLowerCase()] ?? "wav";
|
|
142
|
+
}
|
|
143
|
+
/** Builds a multipart filename for the Nth sample, e.g. "sample-0.wav". */
|
|
144
|
+
export function cloneSampleFilename(sample, index) {
|
|
145
|
+
return `sample-${index}.${extensionForMediaType(sample.mediaType)}`;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Appends a providerOptions entry to a multipart form. Nullish values are
|
|
149
|
+
* skipped (so an unset optional field isn't sent as the literal "null"), and
|
|
150
|
+
* non-primitives are JSON-encoded.
|
|
151
|
+
*/
|
|
152
|
+
export function appendProviderOption(form, key, value) {
|
|
153
|
+
if (value == null) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const encoded = typeof value === "string" ||
|
|
157
|
+
typeof value === "number" ||
|
|
158
|
+
typeof value === "boolean"
|
|
159
|
+
? String(value)
|
|
160
|
+
: JSON.stringify(value);
|
|
161
|
+
form.append(key, encoded);
|
|
162
|
+
}
|
|
163
|
+
/** Appends a reference sample to a multipart form under the given field name. */
|
|
164
|
+
export function appendSampleBlob(form, field, sample, index) {
|
|
165
|
+
form.append(field, new Blob([sample.bytes], { type: sample.mediaType }), cloneSampleFilename(sample, index));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Returns the caller's language, or defaults to "en" and pushes a warning, for
|
|
169
|
+
* providers that require a language at clone time.
|
|
170
|
+
*/
|
|
171
|
+
export function defaultCloneLanguage(provider, language, warnings) {
|
|
172
|
+
if (language != null) {
|
|
173
|
+
return language;
|
|
174
|
+
}
|
|
175
|
+
warnings.push(`${provider} requires a language; defaulted to 'en' — pass \`language\` if the sample isn't English.`);
|
|
176
|
+
return "en";
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=clone-voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-voice.js","sourceRoot":"","sources":["../src/clone-voice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { type AudioOutput } from "../audio-output.js";
|
|
2
2
|
import { type ResolvedModel, type StitchTurnOptions, type Voice } from "../speech-provider.js";
|
|
3
3
|
import type { ConversationTurn } from "./types.js";
|
|
4
|
-
export type StitchFallbackReason = "fallback-from-native";
|
|
4
|
+
export type StitchFallbackReason = "fallback-from-native" | "fallback-from-native-oversized";
|
|
5
5
|
export type ConversationPath = {
|
|
6
6
|
kind: "gateway";
|
|
7
7
|
resolvedPerTurn: readonly ResolvedModel<Voice>[];
|
|
8
8
|
} | {
|
|
9
9
|
kind: "native";
|
|
10
10
|
resolved: ResolvedModel<Voice>;
|
|
11
|
+
blocks?: readonly (readonly number[])[];
|
|
11
12
|
} | {
|
|
12
13
|
kind: "stitch";
|
|
13
14
|
reason?: StitchFallbackReason;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACX,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACX,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,MAAM,oBAAoB,GAC5B,sBAAsB,GACtB,gCAAgC,CAAC;AAErC,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,eAAe,EAAE,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAAA;CAAE,GACrE;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAI/B,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,oBAAoB,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD,CAAC;AAEN,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACjD,KAAK,EAAE,SAAS,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,gBAAgB,CAiDnB"}
|
|
@@ -10,31 +10,20 @@ export function chooseConversationPath(input) {
|
|
|
10
10
|
if (gatewayCount > 0 && gatewayCount < resolvedPerTurn.length) {
|
|
11
11
|
throw new MixedDispatchError();
|
|
12
12
|
}
|
|
13
|
-
// Gateway wire takes string voices only; clone voices (`{url}`/`{audio}`) on gateway models fall past every other branch and throw StitchUnsupportedError below.
|
|
14
13
|
if (gatewayCount === resolvedPerTurn.length) {
|
|
15
|
-
|
|
16
|
-
if (allVoicesString) {
|
|
17
|
-
return { kind: "gateway", resolvedPerTurn };
|
|
18
|
-
}
|
|
14
|
+
return { kind: "gateway", resolvedPerTurn };
|
|
19
15
|
}
|
|
20
16
|
// Compare by provider instance reference so two factories with different apiKey/baseURL/fetch configs aren't silently merged.
|
|
21
17
|
const first = resolvedPerTurn[0];
|
|
22
18
|
const allSame = resolvedPerTurn.every((r) => r.provider === first.provider && r.modelId === first.modelId);
|
|
23
19
|
let stitchFallbackReason;
|
|
24
20
|
if (allSame && !forceStitch) {
|
|
25
|
-
const {
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// Native dialogue is a single API call that can't carry per-utterance config. Any per-turn providerOptions force stitch — and stitch isn't bound by native voice-count / maxTotalChars limits, so skip those checks too.
|
|
30
|
-
if (turns.some((t) => t.providerOptions !== undefined)) {
|
|
31
|
-
stitchFallbackReason = "fallback-from-native";
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
assertNativeConstraints({ provider, modelId, caps, turns });
|
|
35
|
-
return { kind: "native", resolved: first };
|
|
36
|
-
}
|
|
21
|
+
const native = tryNativeDialoguePath({ first, turns, sampleRateHint });
|
|
22
|
+
if (native) {
|
|
23
|
+
if ("path" in native) {
|
|
24
|
+
return native.path;
|
|
37
25
|
}
|
|
26
|
+
stitchFallbackReason = native.fallbackReason;
|
|
38
27
|
}
|
|
39
28
|
}
|
|
40
29
|
const stitchOptionsPerTurn = resolvedPerTurn.map((r) => {
|
|
@@ -55,7 +44,42 @@ export function chooseConversationPath(input) {
|
|
|
55
44
|
stitchOptionsPerTurn,
|
|
56
45
|
};
|
|
57
46
|
}
|
|
58
|
-
|
|
47
|
+
// Native dialogue is a single API call that can't carry per-utterance config. Any per-turn
|
|
48
|
+
// providerOptions force stitch — and stitch isn't bound by native voice-count / maxTotalChars
|
|
49
|
+
// limits, so those checks are skipped on the fallback. Returns the chosen native path, the
|
|
50
|
+
// reason it can't be native, or undefined when the provider isn't native-dialogue capable.
|
|
51
|
+
function tryNativeDialoguePath(args) {
|
|
52
|
+
const { first, turns, sampleRateHint } = args;
|
|
53
|
+
const { provider, modelId } = first;
|
|
54
|
+
if (!(provider.generateDialogue && provider.dialogueCapabilities)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const caps = provider.dialogueCapabilities(modelId);
|
|
58
|
+
if (!caps) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (turns.some((t) => t.providerOptions !== undefined)) {
|
|
62
|
+
return { fallbackReason: "fallback-from-native" };
|
|
63
|
+
}
|
|
64
|
+
// Voice-count is a hard semantic constraint — splitting can't satisfy it, so still throw.
|
|
65
|
+
assertNativeVoiceCount({ provider, modelId, caps, turns });
|
|
66
|
+
const blocks = planNativeBlocks({
|
|
67
|
+
provider,
|
|
68
|
+
modelId,
|
|
69
|
+
caps,
|
|
70
|
+
turns,
|
|
71
|
+
sampleRateHint,
|
|
72
|
+
});
|
|
73
|
+
if (blocks === "single") {
|
|
74
|
+
return { path: { kind: "native", resolved: first } };
|
|
75
|
+
}
|
|
76
|
+
if (blocks) {
|
|
77
|
+
return { path: { kind: "native", resolved: first, blocks } };
|
|
78
|
+
}
|
|
79
|
+
// Over the native limit but can't be split into decodable, voice-valid blocks — render per-turn.
|
|
80
|
+
return { fallbackReason: "fallback-from-native-oversized" };
|
|
81
|
+
}
|
|
82
|
+
function assertNativeVoiceCount(args) {
|
|
59
83
|
const { provider, modelId, caps, turns } = args;
|
|
60
84
|
const keyOf = newVoiceKeyer();
|
|
61
85
|
const unique = new Set(turns.map((t) => keyOf(t.voice))).size;
|
|
@@ -70,16 +94,59 @@ function assertNativeConstraints(args) {
|
|
|
70
94
|
observed: `${unique} unique voices`,
|
|
71
95
|
});
|
|
72
96
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
97
|
+
}
|
|
98
|
+
// "single" → fits in one native call; number[][] → split into parallel blocks;
|
|
99
|
+
// undefined → over the limit but can't be split into decodable, voice-valid blocks (caller falls back to stitch).
|
|
100
|
+
function planNativeBlocks(args) {
|
|
101
|
+
const { provider, modelId, caps, turns, sampleRateHint } = args;
|
|
102
|
+
const max = caps.maxTotalChars;
|
|
103
|
+
const total = turns.reduce((n, t) => n + t.text.length, 0);
|
|
104
|
+
if (max == null || total <= max) {
|
|
105
|
+
return "single";
|
|
106
|
+
}
|
|
107
|
+
// Splitting decodes each block's audio to PCM to stitch — impossible without a decodable wire format.
|
|
108
|
+
const canDecode = provider.getStitchOptions?.(modelId, {
|
|
109
|
+
sampleRate: sampleRateHint,
|
|
110
|
+
});
|
|
111
|
+
if (!canDecode) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
return partitionTurnsByChars({ caps, turns, max });
|
|
115
|
+
}
|
|
116
|
+
function partitionTurnsByChars(args) {
|
|
117
|
+
const { caps, turns, max } = args;
|
|
118
|
+
const keyOf = newVoiceKeyer();
|
|
119
|
+
// Greedy, not optimal: a maximal front-packed split can strand a sub-minVoices block where a
|
|
120
|
+
// boundary-repositioning split would succeed. Returning undefined here just defers to the per-turn
|
|
121
|
+
// stitch path (correct audio, not native-parallel), so we accept the rare miss over a DP partition.
|
|
122
|
+
const blocks = [];
|
|
123
|
+
let current = [];
|
|
124
|
+
let currentChars = 0;
|
|
125
|
+
for (let i = 0; i < turns.length; i++) {
|
|
126
|
+
const len = turns[i].text.length;
|
|
127
|
+
// A single turn longer than the native limit can't fit any block at turn granularity.
|
|
128
|
+
if (len > max) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (current.length > 0 && currentChars + len > max) {
|
|
132
|
+
blocks.push(current);
|
|
133
|
+
current = [];
|
|
134
|
+
currentChars = 0;
|
|
135
|
+
}
|
|
136
|
+
current.push(i);
|
|
137
|
+
currentChars += len;
|
|
138
|
+
}
|
|
139
|
+
if (current.length > 0) {
|
|
140
|
+
blocks.push(current);
|
|
141
|
+
}
|
|
142
|
+
// Every block must independently satisfy the provider's unique-voice rule (e.g. a long
|
|
143
|
+
// single-speaker run could fill a block on a min-2-voice model — that can't render natively).
|
|
144
|
+
for (const block of blocks) {
|
|
145
|
+
const unique = new Set(block.map((i) => keyOf(turns[i].voice))).size;
|
|
146
|
+
if (unique < caps.minVoices || unique > caps.maxVoices) {
|
|
147
|
+
return;
|
|
82
148
|
}
|
|
83
149
|
}
|
|
150
|
+
return blocks.length > 1 ? blocks : undefined;
|
|
84
151
|
}
|
|
85
152
|
//# sourceMappingURL=dispatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,oBAAoB,GAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/conversation/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,oBAAoB,GAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAsB9C,MAAM,UAAU,sBAAsB,CAAC,KAKtC;IACC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACtE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAElD,uIAAuI;IACvI,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC;IACzE,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAC9D,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAC9C,CAAC;IAED,8HAA8H;IAC9H,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CACpE,CAAC;IAEF,IAAI,oBAAsD,CAAC;IAE3D,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YACD,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YACpD,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,sBAAsB,CAAC;gBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACvB,KAAK,EAAE,CAAC,CAAC,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,CAAC,oBAAoB,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC7D,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAQD,2FAA2F;AAC3F,8FAA8F;AAC9F,2FAA2F;AAC3F,2FAA2F;AAC3F,SAAS,qBAAqB,CAAC,IAI9B;IAIC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClE,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACpD,CAAC;IACD,0FAA0F;IAC1F,sBAAsB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,KAAK;QACL,cAAc;KACf,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAC/D,CAAC;IACD,iGAAiG;IACjG,OAAO,EAAE,cAAc,EAAE,gCAAgC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAK/B;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9D,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACvD,MAAM,IAAI,GACR,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;YAC/B,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,gBAAgB;YAC3C,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,gBAAgB,CAAC;QACtE,MAAM,IAAI,uBAAuB,CAAC;YAChC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,KAAK,EAAE,OAAO;YACd,IAAI;YACJ,QAAQ,EAAE,GAAG,MAAM,gBAAgB;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,kHAAkH;AAClH,SAAS,gBAAgB,CAAC,IAMzB;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAEhE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sGAAsG;IACtG,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE;QACrD,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,OAAO,qBAAqB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,IAI9B;IACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,6FAA6F;IAC7F,mGAAmG;IACnG,oGAAoG;IACpG,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,sFAAsF;QACtF,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,YAAY,IAAI,GAAG,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,uFAAuF;IACvF,8FAA8F;IAC9F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
|
|
@@ -6,6 +6,9 @@ export interface Pcm16Segment {
|
|
|
6
6
|
export declare const DEFAULT_VOLUME_DBFS = -20;
|
|
7
7
|
export declare function dbfsToInt16Rms(dbfs: number): number;
|
|
8
8
|
export declare function normalizeRms(segments: readonly Pcm16Segment[], targetRmsAmplitude?: number): Pcm16Segment[];
|
|
9
|
+
export declare function stitchTargetRate(segments: readonly {
|
|
10
|
+
sampleRate: number;
|
|
11
|
+
}[]): number;
|
|
9
12
|
export declare function concatPcmToWav(segments: readonly Pcm16Segment[], options: {
|
|
10
13
|
gapMs: number;
|
|
11
14
|
targetSampleRate: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-concat.d.ts","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAsDD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,kBAAkB,SAA2B,GAC5C,YAAY,EAAE,CAahB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,UAAU,CAAC,CA8BrB"}
|
|
1
|
+
{"version":3,"file":"pcm-concat.d.ts","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAsDD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,kBAAkB,SAA2B,GAC5C,YAAY,EAAE,CAahB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,MAAM,CAWR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,UAAU,CAAC,CA8BrB"}
|
|
@@ -63,6 +63,13 @@ export function normalizeRms(segments, targetRmsAmplitude = DEFAULT_TARGET_RMS_I
|
|
|
63
63
|
return { ...s, pcm: scaleClamp(s.pcm, gain) };
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
export function stitchTargetRate(segments) {
|
|
67
|
+
const rate = segments.reduce((m, s) => (s.sampleRate > m ? s.sampleRate : m), 0);
|
|
68
|
+
if (rate <= 0) {
|
|
69
|
+
throw new Error("stitchTargetRate: no decoded segments with a positive sample rate to stitch");
|
|
70
|
+
}
|
|
71
|
+
return rate;
|
|
72
|
+
}
|
|
66
73
|
export async function concatPcmToWav(segments, options) {
|
|
67
74
|
const { gapMs, targetSampleRate } = options;
|
|
68
75
|
const gap = silencePcm16(gapMs, targetSampleRate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-concat.js","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pcm-concat.js","sourceRoot":"","sources":["../../src/conversation/pcm-concat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitch.d.ts","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"stitch.d.ts","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAQlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,UAAU,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,QAAQ,CAAC,oBAAoB,EAAE,SAAS;QACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,CACZ,EAAE,CAAC;IACJ,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAID,wBAAsB,SAAS,CAAC,CAAC,SAAS,KAAK,EAC7C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,YAAY,CAAC,CAsJvB"}
|
|
@@ -4,15 +4,8 @@ import { mapWithConcurrency } from "../concurrency.js";
|
|
|
4
4
|
import { withTurnIndex } from "../errors.js";
|
|
5
5
|
import { generateSpeech } from "../generate-speech.js";
|
|
6
6
|
import { debug } from "../logger.js";
|
|
7
|
-
import { concatPcmToWav, dbfsToInt16Rms, normalizeRms } from "./pcm-concat.js";
|
|
7
|
+
import { concatPcmToWav, dbfsToInt16Rms, normalizeRms, stitchTargetRate, } from "./pcm-concat.js";
|
|
8
8
|
import { fillTurnTimestampsProportional } from "./proportional-fill.js";
|
|
9
|
-
function stitchTargetRate(segments) {
|
|
10
|
-
const rate = segments.reduce((m, s) => (s.sampleRate > m ? s.sampleRate : m), 0);
|
|
11
|
-
if (rate <= 0) {
|
|
12
|
-
throw new Error("runStitch: no decoded segments with a positive sample rate to stitch");
|
|
13
|
-
}
|
|
14
|
-
return rate;
|
|
15
|
-
}
|
|
16
9
|
const WHITESPACE_RE = /\s+/;
|
|
17
10
|
export async function runStitch(input) {
|
|
18
11
|
const start = performance.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAEL,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAKrC,OAAO,
|
|
1
|
+
{"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/conversation/stitch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/conversation/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/conversation/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEhF,wBAAgB,aAAa,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,MAAM,CAE5E;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,2BAA2B,GACnC,IAAI,CA2BN"}
|
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
import { ConversationInputError } from "./errors.js";
|
|
2
|
-
// Object voices key by reference — distinct buffers with identical content must not collide.
|
|
3
2
|
export function newVoiceKeyer() {
|
|
4
|
-
|
|
5
|
-
let nextId = 0;
|
|
6
|
-
return (voice) => {
|
|
7
|
-
if (typeof voice === "string") {
|
|
8
|
-
return `s:${voice}`;
|
|
9
|
-
}
|
|
10
|
-
if ("url" in voice) {
|
|
11
|
-
return `u:${voice.url}`;
|
|
12
|
-
}
|
|
13
|
-
if ("audio" in voice && typeof voice.audio === "string") {
|
|
14
|
-
return `a:${voice.audio}`;
|
|
15
|
-
}
|
|
16
|
-
let id = refIds.get(voice);
|
|
17
|
-
if (id === undefined) {
|
|
18
|
-
id = nextId++;
|
|
19
|
-
refIds.set(voice, id);
|
|
20
|
-
}
|
|
21
|
-
return `o:${id}`;
|
|
22
|
-
};
|
|
3
|
+
return (voice) => `s:${voice}`;
|
|
23
4
|
}
|
|
24
5
|
export function validateConversationInput(options) {
|
|
25
6
|
if (options.turns.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/conversation/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/conversation/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAoC;IAEpC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,sBAAsB,CAC9B,kDAAkD,CACnD,CAAC;IACJ,CAAC;IAED,6FAA6F;IAC7F,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,sBAAsB,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACxC,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,sBAAsB,CAC9B,SAAS,CAAC,kIAAkI,CAC7I,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,IAAI,YAAY,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,sBAAsB,CAC9B,SAAS,CAAC,2HAA2H,CACtI,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|