refactor: dedupe openai data url helper

This commit is contained in:
Peter Steinberger
2026-04-06 19:43:07 +01:00
parent a336c31962
commit 1013cb3a5d
3 changed files with 11 additions and 10 deletions

View File

@@ -7,6 +7,7 @@ import {
resolveProviderHttpRequestConfig,
} from "openclaw/plugin-sdk/provider-http";
import { OPENAI_DEFAULT_IMAGE_MODEL as DEFAULT_OPENAI_IMAGE_MODEL } from "./default-models.js";
import { toOpenAIDataUrl } from "./shared.js";
const DEFAULT_OPENAI_IMAGE_BASE_URL = "https://api.openai.com/v1";
const DEFAULT_OUTPUT_MIME = "image/png";
@@ -26,10 +27,6 @@ function resolveOpenAIBaseUrl(cfg: Parameters<typeof resolveApiKeyForProvider>[0
return direct || DEFAULT_OPENAI_IMAGE_BASE_URL;
}
function toDataUrl(buffer: Buffer, mimeType: string): string {
return `data:${mimeType};base64,${buffer.toString("base64")}`;
}
export function buildOpenAIImageGenerationProvider(): ImageGenerationProvider {
return {
id: "openai",
@@ -100,7 +97,10 @@ export function buildOpenAIImageGenerationProvider(): ImageGenerationProvider {
n: count,
size,
images: inputImages.map((image) => ({
image_url: toDataUrl(image.buffer, image.mimeType?.trim() || DEFAULT_OUTPUT_MIME),
image_url: toOpenAIDataUrl(
image.buffer,
image.mimeType?.trim() || DEFAULT_OUTPUT_MIME,
),
})),
},
timeoutMs: req.timeoutMs,

View File

@@ -6,6 +6,10 @@ import {
export const OPENAI_API_BASE_URL = "https://api.openai.com/v1";
export function toOpenAIDataUrl(buffer: Buffer, mimeType: string): string {
return `data:${mimeType};base64,${buffer.toString("base64")}`;
}
export function isOpenAIApiBaseUrl(baseUrl?: string): boolean {
const trimmed = baseUrl?.trim();
if (!trimmed) {

View File

@@ -11,6 +11,7 @@ import type {
VideoGenerationProvider,
VideoGenerationRequest,
} from "openclaw/plugin-sdk/video-generation";
import { toOpenAIDataUrl } from "./shared.js";
const DEFAULT_OPENAI_VIDEO_BASE_URL = "https://api.openai.com/v1";
const DEFAULT_OPENAI_VIDEO_MODEL = "sora-2";
@@ -46,10 +47,6 @@ function toBlobBytes(buffer: Buffer): ArrayBuffer {
return arrayBuffer;
}
function toDataUrl(buffer: Buffer, mimeType: string): string {
return `data:${mimeType};base64,${buffer.toString("base64")}`;
}
function resolveDurationSeconds(durationSeconds: number | undefined): "4" | "8" | "12" | undefined {
if (typeof durationSeconds !== "number" || !Number.isFinite(durationSeconds)) {
return undefined;
@@ -265,7 +262,7 @@ export function buildOpenAIVideoGenerationProvider(): VideoGenerationProvider {
...(seconds ? { seconds } : {}),
...(size ? { size } : {}),
input_reference: {
image_url: toDataUrl(
image_url: toOpenAIDataUrl(
inputImage.buffer,
inputImage.mimeType?.trim() || "image/png",
),