mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-12 09:41:11 +00:00
refactor: dedupe openai data url helper
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user