UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

64 lines (63 loc) 2.49 kB
import { n as assertOkOrThrowHttpError, p as readProviderJsonObjectResponse } from "./provider-http-errors-U-nhuk_f.js"; import { d as requireTranscriptionText, p as resolveProviderHttpRequestConfig, t as buildAudioTranscriptionFormData, u as postMultipartRequest } from "./shared-DCDpYrmy.js"; import "./provider-http-k9RMI7iG.js"; import { r as normalizeElevenLabsBaseUrl, t as DEFAULT_ELEVENLABS_BASE_URL } from "./shared-C4zbmF0I.js"; //#region extensions/elevenlabs/media-understanding-provider.ts const DEFAULT_ELEVENLABS_STT_MODEL = "scribe_v2"; async function transcribeElevenLabsAudio(req) { const fetchFn = req.fetchFn ?? fetch; const apiKey = req.apiKey || process.env.ELEVENLABS_API_KEY || process.env.XI_API_KEY; if (!apiKey) throw new Error("ElevenLabs API key missing"); const model = req.model?.trim() || DEFAULT_ELEVENLABS_STT_MODEL; const { baseUrl, allowPrivateNetwork, headers, dispatcherPolicy } = resolveProviderHttpRequestConfig({ baseUrl: normalizeElevenLabsBaseUrl(req.baseUrl), defaultBaseUrl: DEFAULT_ELEVENLABS_BASE_URL, headers: req.headers, request: req.request, defaultHeaders: { "xi-api-key": apiKey }, provider: "elevenlabs", api: "elevenlabs-speech-to-text", capability: "audio", transport: "media-understanding" }); const form = buildAudioTranscriptionFormData({ buffer: req.buffer, fileName: req.fileName, mime: req.mime, fields: { model_id: model, language_code: req.language, prompt: req.prompt } }); const { response, release } = await postMultipartRequest({ url: `${baseUrl}/v1/speech-to-text`, headers, body: form, timeoutMs: req.timeoutMs, ...req.signal ? { signal: req.signal } : {}, fetchFn, allowPrivateNetwork, dispatcherPolicy, auditContext: "elevenlabs speech-to-text" }); try { await assertOkOrThrowHttpError(response, "ElevenLabs audio transcription failed"); const payload = await readProviderJsonObjectResponse(response, "ElevenLabs audio transcription failed"); return { text: requireTranscriptionText(typeof payload.text === "string" ? payload.text : void 0, "ElevenLabs audio transcription response missing text"), model }; } finally { await release(); } } const elevenLabsMediaUnderstandingProvider = { id: "elevenlabs", capabilities: ["audio"], defaultModels: { audio: DEFAULT_ELEVENLABS_STT_MODEL }, autoPriority: { audio: 45 }, transcribeAudio: transcribeElevenLabsAudio }; //#endregion export { elevenLabsMediaUnderstandingProvider as t };