UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

84 lines (82 loc) 3.32 kB
import "./paths-CyR9Pa1R.js"; import { J as logVerbose, Z as shouldLogVerbose } from "./registry-BmY4gNy6.js"; import "./agent-scope-BLYwrEEA.js"; import "./subsystem-B5g771Td.js"; import "./workspace-D9IzNnST.js"; import "./normalize-DZvZ0Eiv.js"; import "./accounts-D7irbKbS.js"; import "./boolean-B8-BqKGQ.js"; import "./command-format-Ck2WauwF.js"; import "./bindings-DWtXcdc8.js"; import "./plugins-CJYXNO4s.js"; import "./accounts-DSVHyeYh.js"; import "./fs-safe-B8-WkEXM.js"; import "./model-auth-BPNt9bHS.js"; import "./github-copilot-token-BQ98eazZ.js"; import "./pi-model-discovery-C-yOXpma.js"; import "./message-channel-BDlvrUZF.js"; import "./pi-embedded-helpers-BfjCe8vu.js"; import "./config-C0k_b9gg.js"; import "./manifest-registry-Dovhiqzt.js"; import "./common-y9ALHdVZ.js"; import "./chrome-DVeI6N8j.js"; import "./frontmatter-BT4H5SZG.js"; import "./skills-Ci_2Mah4.js"; import "./redact-BBbIZgau.js"; import "./errors-3KjSwJLH.js"; import "./ssrf-B8OrDkCk.js"; import "./store-Be0QxLPZ.js"; import "./thinking-Bfk6_7EU.js"; import "./accounts-C5646aU0.js"; import "./paths-gnW-md4M.js"; import "./image-Do9rxbj3.js"; import "./gemini-auth-DkBnXstb.js"; import "./local-roots-tMzVEQD2.js"; import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-CLSBcNny.js"; //#region src/media-understanding/audio-preflight.ts /** * Transcribes the first audio attachment BEFORE mention checking. * This allows voice notes to be processed in group chats with requireMention: true. * Returns the transcript or undefined if transcription fails or no audio is found. */ async function transcribeFirstAudio(params) { const { ctx, cfg } = params; const audioConfig = cfg.tools?.media?.audio; if (!audioConfig || audioConfig.enabled === false) return; const attachments = normalizeMediaAttachments(ctx); if (!attachments || attachments.length === 0) return; const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed); if (!firstAudio) return; if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`); const providerRegistry = buildProviderRegistry(params.providers); const cache = createMediaAttachmentCache(attachments, { localPathRoots: resolveMediaAttachmentLocalRoots({ cfg, ctx }) }); try { const result = await runCapability({ capability: "audio", cfg, ctx, attachments: cache, media: attachments, agentDir: params.agentDir, providerRegistry, config: audioConfig, activeModel: params.activeModel }); if (!result || result.outputs.length === 0) return; const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription"); if (!audioOutput || !audioOutput.text) return; firstAudio.alreadyTranscribed = true; if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`); return audioOutput.text; } catch (err) { if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`); return; } finally { await cache.cleanup(); } } //#endregion export { transcribeFirstAudio };