UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

96 lines (94 loc) 3.7 kB
import { St as shouldLogVerbose, yt as logVerbose } from "./entry.js"; import "./auth-profiles-DFa1zzNy.js"; import "./exec-CBKBIMpA.js"; import "./agent-scope-RzK9Zcks.js"; import "./github-copilot-token-DuFIqfeC.js"; import "./pi-model-discovery-Do3xMEtM.js"; import "./frontmatter-D-YR-Ghi.js"; import "./skills-DJmGZazd.js"; import "./manifest-registry-DS2iK5AZ.js"; import "./config-B2kL1ciP.js"; import "./message-channel-CVHJDItx.js"; import "./sessions-BD5dyLxb.js"; import "./normalize-Db7Xtx2v.js"; import "./accounts-BpzwDfBB.js"; import "./bindings-KqaGKS1E.js"; import "./logging-CFvkxgcX.js"; import "./plugins-RqhjLCb6.js"; import "./accounts-B3D4iWUP.js"; import "./image-ops-lDlFpoR2.js"; import "./pi-embedded-helpers-NVEtaJwl.js"; import "./sandbox-CO-R8v6J.js"; import "./common-DcSh1hZE.js"; import "./chrome-52ZF7gmE.js"; import "./tailscale-BzRVNhMW.js"; import "./auth-Dq2pFnjj.js"; import "./server-context-C1f7cijA.js"; import "./routes-BJmh1Ify.js"; import "./redact-C2s6sr73.js"; import "./errors-CFEPAPWc.js"; import "./fs-safe-3YwsxSr5.js"; import "./paths-CXKNzNjU.js"; import "./ssrf-Cv2DiHsm.js"; import "./store-e6fIrP17.js"; import "./ports-59j-bA53.js"; import "./trash-DVLJ0k6q.js"; import "./dock-BZuwgj1O.js"; import "./accounts-Jg3_1Y-r.js"; import "./paths-CXpciDEv.js"; import "./thinking-CJPPUYWd.js"; import "./models-config-5zJ39mUb.js"; import "./gemini-auth-CdgAkz2K.js"; import "./fetch-guard-B5BAqVyD.js"; import "./local-roots-SkDT1Wv8.js"; import "./image-QGUQCdGh.js"; import "./tool-display-Cs1uRaRV.js"; import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, s as isAudioAttachment, t as buildProviderRegistry } from "./runner-D81xREgc.js"; import "./model-catalog-DLoDxnxL.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 };