UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

79 lines (78 loc) 2.81 kB
import { c as normalizeOptionalLowercaseString, l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js"; import "./string-coerce-runtime-GQa0ehRA.js"; import { d as toImageDataUrl, t as createOpenAiCompatibleImageGenerationProvider } from "./image-generation-B61kkjvL.js"; import { t as XAI_BASE_URL } from "./model-definitions-T5B2ehi7.js"; import { c as createXaiImageGenerationProviderMetadata, i as XAI_SUPPORTED_IMAGE_ASPECT_RATIOS, r as XAI_IMAGE_DEFAULT_TIMEOUT_MS } from "./capability-provider-metadata-factory-BjaSolS_.js"; import "./capability-provider-metadata-3SLkHpj3.js"; //#region extensions/xai/image-generation-provider.ts function resolveImageForEdit(input) { if (!input) throw new Error("xAI image edit requires an input image."); const url = normalizeOptionalString(input.url); if (url) return url; if (!input.buffer) throw new Error("xAI image edit input is missing both URL and buffer data."); return toImageDataUrl({ buffer: input.buffer, mimeType: input.mimeType }); } function resolveXaiImageBaseUrl(req) { return normalizeOptionalString(req.cfg?.models?.providers?.xai?.baseUrl) ?? "https://api.x.ai/v1"; } function buildBody(params) { const body = { model: params.model, prompt: params.req.prompt, n: Math.min(params.count, 4), response_format: "b64_json" }; const aspect = normalizeOptionalString(params.req.aspectRatio); if (aspect && XAI_SUPPORTED_IMAGE_ASPECT_RATIOS.includes(aspect)) body.aspect_ratio = aspect; const resolution = normalizeOptionalLowercaseString(params.req.resolution); if (resolution) body.resolution = resolution; if (params.inputImages.length > 0) { if (params.inputImages.length > 1) body.images = params.inputImages.map((input) => ({ url: resolveImageForEdit(input), type: "image_url" })); else body.image = { url: resolveImageForEdit(params.inputImages[0]), type: "image_url" }; } return body; } function buildXaiImageGenerationProvider() { const metadata = createXaiImageGenerationProviderMetadata(); return createOpenAiCompatibleImageGenerationProvider({ ...metadata, defaultBaseUrl: XAI_BASE_URL, resolveBaseUrl: ({ req }) => resolveXaiImageBaseUrl(req), resolveAllowPrivateNetwork: () => false, defaultTimeoutMs: XAI_IMAGE_DEFAULT_TIMEOUT_MS, buildGenerateRequest: ({ req, inputImages, model, count }) => ({ kind: "json", body: buildBody({ req, inputImages, model, count }) }), buildEditRequest: ({ req, inputImages, model, count }) => ({ kind: "json", body: buildBody({ req, inputImages, model, count }) }), missingApiKeyError: "xAI API key missing", failureLabels: { generate: "xAI image generation failed", edit: "xAI image edit failed" } }); } //#endregion export { buildXaiImageGenerationProvider as t };