openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
85 lines (84 loc) • 4.28 kB
JavaScript
import { a as providerSummaryText, i as formatEnvelopeForText, n as runCapabilityCommand, t as registerLocalProvidersCommand } from "./providers-command-Dco6F1pF.mjs";
import { t as isMissingMediaUnderstandingProvider } from "./media-understanding-result-CCD7dk7R.mjs";
import path from "node:path";
//#region src/cli/capability-cli/audio.ts
async function runAudioTranscribe(params) {
const { requireProviderModelOverride, resolveLocalCapabilityAgent } = await import("./shared-D7XhoNUP.mjs");
const { getModelsCommandSecretTargetIds } = await import("./command-secret-targets-BsziTSHe.mjs");
const { transcribeAudioFile } = await import("./runtime-BRmDI5EN.mjs");
const { cfg, agentId, agentDir } = await resolveLocalCapabilityAgent({
commandName: "infer audio transcribe",
targetIds: getModelsCommandSecretTargetIds(),
agent: params.agent
});
const result = await transcribeAudioFile({
agentDir,
activeModel: requireProviderModelOverride(params.model),
filePath: path.resolve(params.file),
cfg,
agentId,
language: params.language,
prompt: params.prompt
});
if (!result.text) {
if (isMissingMediaUnderstandingProvider(result)) throw new Error("No audio transcription provider is configured or ready. Configure an audio-capable tools.media.models entry, or pass --model <provider/model> after configuring that provider's auth/API key.");
throw new Error(`No transcript returned for audio: ${path.resolve(params.file)}`);
}
return {
ok: true,
capability: "audio.transcribe",
transport: "local",
provider: result.provider,
model: result.model,
attempts: [],
outputs: [{
path: path.resolve(params.file),
text: result.text,
kind: "audio.transcription"
}]
};
}
function registerAudioCapabilityCommands(capability) {
const audio = capability.command("audio").description("Audio transcription").option("--agent <id>", "Agent whose model and auth state should be used");
audio.command("transcribe").description("Transcribe one audio file").requiredOption("--file <path>", "Audio file").option("--agent <id>", "Agent whose model and auth state should be used").option("--language <code>", "Language hint").option("--prompt <text>", "Prompt hint").option("--model <provider/model>", "Model override").option("--json", "Output JSON", false).action((opts, command) => runCapabilityCommand(opts.json, formatEnvelopeForText, async () => {
const { resolveCapabilityAgentOption } = await import("./shared-D7XhoNUP.mjs");
return runAudioTranscribe({
file: String(opts.file),
agent: resolveCapabilityAgentOption(command, opts.agent),
language: opts.language,
model: opts.model,
prompt: opts.prompt
});
}));
registerLocalProvidersCommand(audio, "List audio transcription providers", async (cfg, agentId) => {
const { providerHasGenericConfig } = await import("./shared-D7XhoNUP.mjs");
const { inspectLocalAudioSelection } = await import("./local-audio-ClTEJZ3g.mjs");
const { buildMediaUnderstandingRegistry } = await import("./provider-registry-CDG_hmMz.mjs");
const remoteProviders = [...buildMediaUnderstandingRegistry(void 0, cfg).values()].filter((provider) => provider.capabilities?.includes("audio")).map((provider) => ({
available: true,
configured: providerHasGenericConfig({
cfg,
providerId: provider.id,
agentId
}),
selected: false,
id: provider.id,
capabilities: provider.capabilities,
defaultModels: provider.defaultModels
}));
const localProviders = (await inspectLocalAudioSelection()).candidates.filter((candidate) => candidate.available).map((candidate) => Object.assign({
available: candidate.available,
configured: candidate.ready,
selected: false,
localFallbackSelected: candidate.selected,
id: `local/${candidate.id}`,
transport: "local-cli",
command: candidate.command,
observedBackend: candidate.observedBackend ?? "unknown",
evidence: candidate.evidence
}, candidate.capableBackend ? { capableBackend: candidate.capableBackend } : {}, candidate.requestedBackend ? { requestedBackend: candidate.requestedBackend } : {}, candidate.reason ? { reason: candidate.reason } : {}));
return [...remoteProviders, ...localProviders];
}, providerSummaryText);
}
//#endregion
export { registerAudioCapabilityCommands };