@gguf/claw
Version:
Multi-channel AI gateway with extensible messaging integrations
84 lines (82 loc) • 3.32 kB
JavaScript
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 };