fix: validate openai realtime transcription vad

This commit is contained in:
Peter Steinberger
2026-05-28 16:46:11 -04:00
parent 0c716d7717
commit 2b69cfe030
2 changed files with 36 additions and 2 deletions

View File

@@ -179,6 +179,24 @@ describe("buildOpenAIRealtimeTranscriptionProvider", () => {
expect(resolved?.vadThreshold).toBe(0);
});
it("drops malformed VAD timing settings", () => {
const provider = buildOpenAIRealtimeTranscriptionProvider();
const resolved = provider.resolveConfig?.({
cfg: {} as never,
rawConfig: {
providers: {
openai: {
silenceDurationMs: -1,
vadThreshold: 1.5,
},
},
},
});
expect(resolved?.silenceDurationMs).toBeUndefined();
expect(resolved?.vadThreshold).toBeUndefined();
});
it("accepts the legacy openai-realtime alias", () => {
const provider = buildOpenAIRealtimeTranscriptionProvider();
expect(provider.aliases).toContain("openai-realtime");

View File

@@ -110,11 +110,27 @@ function normalizeProviderConfig(
language: trimToUndefined(raw?.language),
model: trimToUndefined(raw?.model) ?? trimToUndefined(raw?.sttModel),
prompt: trimToUndefined(raw?.prompt),
silenceDurationMs: asFiniteNumber(raw?.silenceDurationMs),
vadThreshold: asFiniteNumber(raw?.vadThreshold),
silenceDurationMs: normalizeNonNegativeInteger(raw?.silenceDurationMs),
vadThreshold: normalizeVadThreshold(raw?.vadThreshold),
};
}
function normalizeNonNegativeInteger(value: unknown): number | undefined {
const number = asFiniteNumber(value);
if (number === undefined || !Number.isSafeInteger(number) || number < 0) {
return undefined;
}
return number;
}
function normalizeVadThreshold(value: unknown): number | undefined {
const number = asFiniteNumber(value);
if (number === undefined || number < 0 || number > 1) {
return undefined;
}
return number;
}
function buildOpenAIRealtimeTranscriptionSessionCreateConfig(
config: OpenAIRealtimeTranscriptionSessionConfig,
): OpenAIRealtimeTranscriptionSessionCreate {