openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
78 lines (77 loc) • 3.35 kB
JavaScript
import { a as asOptionalRecord } from "./record-coerce-TIsquoVR.mjs";
import "./string-coerce-runtime-50qKeWeL.mjs";
//#region extensions/deepgram/audio.ts
const DEFAULT_DEEPGRAM_AUDIO_BASE_URL = "https://api.deepgram.com/v1";
const DEFAULT_DEEPGRAM_AUDIO_MODEL = "nova-3";
function readDeepgramTranscript(payload) {
const results = asOptionalRecord(payload.results);
if (!results) return;
if (!Array.isArray(results.channels)) throw new Error("Audio transcription failed: malformed JSON response");
const transcripts = [];
for (const rawChannel of results.channels) {
const channel = asOptionalRecord(rawChannel);
if (!channel) return;
if (!Array.isArray(channel.alternatives)) throw new Error("Audio transcription failed: malformed JSON response");
const alternative = asOptionalRecord(channel.alternatives[0]);
if (!alternative) return;
if (alternative.transcript !== void 0 && typeof alternative.transcript !== "string") throw new Error("Audio transcription failed: malformed JSON response");
const text = alternative.transcript?.trim();
if (text) transcripts.push(text);
}
return transcripts.join("\n\n");
}
async function transcribeDeepgramAudio(params) {
const { assertOkOrThrowHttpError, postTranscriptionRequest, readProviderJsonObjectResponse, resolveProviderHttpRequestConfigWithOriginTrust, requireTranscriptionText } = await import("./plugin-sdk/provider-http.js");
const { isDeepgramFluxModel, transcribeDeepgramFluxAudio } = await import("./extensions/deepgram/audio-flux.js");
const model = params.model?.trim() || "nova-3";
const flux = isDeepgramFluxModel(model);
const requestConfig = resolveProviderHttpRequestConfigWithOriginTrust({
baseUrl: params.baseUrl,
defaultBaseUrl: DEFAULT_DEEPGRAM_AUDIO_BASE_URL,
headers: params.headers,
request: params.request,
defaultHeaders: {
authorization: `Token ${params.apiKey}`,
...flux ? {} : { "content-type": params.mime ?? "application/octet-stream" }
},
provider: "deepgram",
capability: "audio",
transport: "media-understanding"
});
if (flux) return await transcribeDeepgramFluxAudio({
request: params,
requestConfig,
model
});
const fetchFn = params.fetchFn ?? fetch;
const { baseUrl, allowPrivateNetwork, headers, dispatcherPolicy } = requestConfig;
const url = new URL(`${baseUrl}/listen`);
url.searchParams.set("model", model);
if (params.language?.trim()) url.searchParams.set("language", params.language.trim());
if (params.query) for (const [key, value] of Object.entries(params.query)) {
if (value === void 0) continue;
url.searchParams.set(key, String(value));
}
const body = new Uint8Array(params.buffer);
const { response: res, release } = await postTranscriptionRequest({
url: url.toString(),
headers,
body,
timeoutMs: params.timeoutMs,
...params.signal ? { signal: params.signal } : {},
fetchFn,
allowPrivateNetwork,
dispatcherPolicy
});
try {
await assertOkOrThrowHttpError(res, "Audio transcription failed");
return {
text: requireTranscriptionText(readDeepgramTranscript(await readProviderJsonObjectResponse(res, "Audio transcription failed")), "Audio transcription response missing transcript"),
model
};
} finally {
await release();
}
}
//#endregion
export { DEFAULT_DEEPGRAM_AUDIO_MODEL as n, transcribeDeepgramAudio as r, DEFAULT_DEEPGRAM_AUDIO_BASE_URL as t };