Files
ai-video-fullstack/frontend/src/lib/turn-config.ts
T

60 lines
1.6 KiB
TypeScript
Raw Normal View History

import type { TurnConfig } from "@/lib/api";
export function defaultTurnConfig(): TurnConfig {
return {
bargeIn: { strategy: "vad" },
vad: {
confidence: 0.7,
startSecs: 0.2,
stopSecs: 0.2,
minVolume: 0.6,
},
turnDetection: {
strategy: "silence",
silenceTimeoutSecs: 0.6,
},
};
}
function record(value: unknown): Record<string, unknown> {
return value && typeof value === "object"
? (value as Record<string, unknown>)
: {};
}
function numberOr(value: unknown, fallback: number): number {
return typeof value === "number" && Number.isFinite(value)
? value
: fallback;
}
/** Fill settings introduced after the first Workflow release for old records. */
export function normalizeTurnConfig(value: unknown): TurnConfig {
const defaults = defaultTurnConfig();
const input = record(value);
const bargeIn = record(input.bargeIn);
const vad = record(input.vad);
const turnDetection = record(input.turnDetection);
return {
bargeIn: {
strategy:
bargeIn.strategy === "transcription" ? "transcription" : "vad",
},
vad: {
confidence: numberOr(vad.confidence, defaults.vad.confidence),
startSecs: numberOr(vad.startSecs, defaults.vad.startSecs),
stopSecs: numberOr(vad.stopSecs, defaults.vad.stopSecs),
minVolume: numberOr(vad.minVolume, defaults.vad.minVolume),
},
turnDetection: {
strategy:
turnDetection.strategy === "smart_turn" ? "smart_turn" : "silence",
silenceTimeoutSecs: numberOr(
turnDetection.silenceTimeoutSecs,
defaults.turnDetection.silenceTimeoutSecs,
),
},
};
}