UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

78 lines (77 loc) • 3.35 kB
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 };