UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

101 lines (100 loc) 3.35 kB
import { r as assertOkOrThrowHttpError } from "./provider-http-errors-DqaqQLLZ.js"; import { c as postJsonRequest } from "./shared-IuCmx8oC.js"; import { r as isProviderApiKeyConfigured } from "./provider-auth-DAOC_qI9.js"; import "./provider-http-BXCBCi4E.js"; import { d as resolveVydraRequestContext, f as resolveVydraResponseJobId, l as resolveCompletedVydraPayload, n as DEFAULT_VYDRA_IMAGE_MODEL, o as downloadVydraAsset, p as resolveVydraResponseStatus, s as extractVydraResultUrls, u as resolveVydraGeneratedMediaMaxBytes } from "./shared-CT-x41iI.js"; //#region extensions/vydra/image-generation-provider.ts function buildVydraImageGenerationProvider() { return { id: "vydra", label: "Vydra", defaultModel: DEFAULT_VYDRA_IMAGE_MODEL, models: [DEFAULT_VYDRA_IMAGE_MODEL], isConfigured: ({ agentDir }) => isProviderApiKeyConfigured({ provider: "vydra", agentDir }), capabilities: { generate: { maxCount: 1, supportsSize: false, supportsAspectRatio: false, supportsResolution: false }, edit: { enabled: false, maxCount: 1, maxInputImages: 0, supportsSize: false, supportsAspectRatio: false, supportsResolution: false } }, async generateImage(req) { if ((req.inputImages?.length ?? 0) > 0) throw new Error("Vydra image generation currently supports text-to-image only in the bundled plugin."); if ((req.count ?? 1) > 1) throw new Error("Vydra image generation supports at most one image per request."); const { fetchFn, baseUrl, allowPrivateNetwork, headers, dispatcherPolicy } = await resolveVydraRequestContext({ cfg: req.cfg, agentDir: req.agentDir, authStore: req.authStore, capability: "image" }); const model = req.model?.trim() || "grok-imagine"; const { response, release } = await postJsonRequest({ url: `${baseUrl}/models/${model}`, headers, body: { prompt: req.prompt, model: "text-to-image" }, timeoutMs: req.timeoutMs, fetchFn, allowPrivateNetwork, ssrfPolicy: req.ssrfPolicy, dispatcherPolicy }); try { await assertOkOrThrowHttpError(response, "Vydra image generation failed"); const submitted = await response.json(); const completedPayload = await resolveCompletedVydraPayload({ submitted, baseUrl, headers, timeoutMs: req.timeoutMs, fetchFn, kind: "image", missingJobIdMessage: "Vydra image generation response missing job id" }); const imageUrl = extractVydraResultUrls(completedPayload, "image")[0]; if (!imageUrl) throw new Error("Vydra image generation completed without an image URL"); const image = await downloadVydraAsset({ url: imageUrl, kind: "image", timeoutMs: req.timeoutMs, fetchFn, maxBytes: resolveVydraGeneratedMediaMaxBytes({ cfg: req.cfg, kind: "image" }) }); return { images: [{ buffer: image.buffer, mimeType: image.mimeType, fileName: image.fileName }], model, metadata: { jobId: resolveVydraResponseJobId(completedPayload) ?? resolveVydraResponseJobId(submitted), imageUrl, status: resolveVydraResponseStatus(completedPayload) ?? "completed" } }; } finally { await release(); } } }; } //#endregion export { buildVydraImageGenerationProvider as t };