UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

101 lines (99 loc) 3.87 kB
import "./paths-B4BZAPZh.js"; import { F as shouldLogVerbose, M as logVerbose } from "./utils-CP9YLh6M.js"; import "./thinking-EAliFiVK.js"; import "./registry-B-j4DRfe.js"; import "./subsystem-BCQGGxdd.js"; import "./exec-DYqRzFbo.js"; import "./agent-scope-BnZW9Gh2.js"; import "./model-selection-CqaTAlhy.js"; import "./github-copilot-token-D2zp6kMZ.js"; import "./boolean-BsqeuxE6.js"; import "./env-VriqyjXT.js"; import "./message-channel-Bena1Tzd.js"; import "./config-PQiujvsf.js"; import "./manifest-registry-4k4vkhPS.js"; import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, s as isAudioAttachment, t as buildProviderRegistry } from "./runner-U04aiHHC.js"; import "./image-DxEpBZim.js"; import "./models-config-B459BnCS.js"; import "./pi-model-discovery-4uUnLc3n.js"; import "./pi-embedded-helpers-BdscQhyS.js"; import "./sandbox-UAzvS0V6.js"; import "./image-ops-CI1VknD1.js"; import "./common-a25M2Kvi.js"; import "./chrome-Dd5zBIFu.js"; import "./tailscale-C3JsBEiY.js"; import "./auth-DZSWPd8D.js"; import "./server-context-DAWsUNUs.js"; import "./frontmatter-6HZ0_y2V.js"; import "./skills-CLmzWt48.js"; import "./routes-DIQa_0pt.js"; import "./redact-B7Mjvk0c.js"; import "./errors-kfGqPQ4b.js"; import "./fs-safe-_OpKPuZA.js"; import "./paths-D1WZUYry.js"; import "./ssrf-6f5m2MMA.js"; import "./store-DSGYY-H9.js"; import "./ports-DwDxX6cS.js"; import "./trash-DLzIf__E.js"; import "./sessions-Z1BZU3xh.js"; import "./dock-7F-MiPtF.js"; import "./normalize-Ci8UyR3Z.js"; import "./accounts-Bj1dJ-fd.js"; import "./accounts-DOl1Wkxo.js"; import "./accounts-t6R5_PzC.js"; import "./bindings-Dja1z-h8.js"; import "./logging-xYH6GmRT.js"; import "./plugins-CKbXkuXd.js"; import "./paths-C2NfoGZE.js"; import "./tool-display-Bx4M6uNT.js"; import "./fetch-guard-C1sYsWgl.js"; import "./api-key-rotation-CpGefdGL.js"; import "./local-roots-DiDvXIIo.js"; import "./model-catalog-CIixTnGt.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 };