mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
import { json } from "../http.mjs";
|
|
import { behavior, parseBehaviorJson } from "../state.mjs";
|
|
|
|
const DEFAULT_AUDIO_BYTES = Buffer.from("ID3MOCKAUDIO", "utf8");
|
|
|
|
function defaultVisemes() {
|
|
return [
|
|
{ viseme: "sil", start_ms: 0, end_ms: 40 },
|
|
{ viseme: "aa", start_ms: 40, end_ms: 240 },
|
|
];
|
|
}
|
|
|
|
function defaultAlignment(text) {
|
|
const chars = String(text || "ok")
|
|
.slice(0, 8)
|
|
.split("");
|
|
return chars.map((char, index) => ({
|
|
char,
|
|
start_ms: index * 80,
|
|
end_ms: index * 80 + 80,
|
|
}));
|
|
}
|
|
|
|
export async function handleAudio(ctx) {
|
|
const { method, url, parsedBody, res } = ctx;
|
|
|
|
if (method === "POST" && /^\/openai\/v1\/audio\/speech\/?$/.test(url)) {
|
|
const text = String(parsedBody?.text || "");
|
|
const mockBehavior = behavior();
|
|
const visemes = parseBehaviorJson("audioSpeechVisemes", defaultVisemes());
|
|
const alignment = parseBehaviorJson(
|
|
"audioSpeechAlignment",
|
|
defaultAlignment(text),
|
|
);
|
|
const audioBytes = mockBehavior.audioSpeechBase64
|
|
? Buffer.from(String(mockBehavior.audioSpeechBase64), "base64")
|
|
: DEFAULT_AUDIO_BYTES;
|
|
json(res, 200, {
|
|
audio_base64: audioBytes.toString("base64"),
|
|
audio_mime: mockBehavior.audioSpeechMime || "audio/mpeg",
|
|
visemes:
|
|
parsedBody?.with_visemes === true || parsedBody?.with_alignment === true
|
|
? visemes
|
|
: [],
|
|
alignment:
|
|
parsedBody?.with_alignment === true || parsedBody?.with_visemes === true
|
|
? alignment
|
|
: undefined,
|
|
voice_id:
|
|
parsedBody?.voice_id || mockBehavior.audioSpeechVoiceId || "mock-voice",
|
|
model_id:
|
|
parsedBody?.model_id ||
|
|
mockBehavior.audioSpeechModelId ||
|
|
"mock-tts-v1",
|
|
});
|
|
return true;
|
|
}
|
|
|
|
if (
|
|
method === "POST" &&
|
|
/^\/openai\/v1\/audio\/transcriptions\/?$/.test(url)
|
|
) {
|
|
json(res, 200, {
|
|
text:
|
|
behavior().audioTranscriptionText ||
|
|
"Mock transcription from the E2E server.",
|
|
});
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|