

























@@ -49,7 +49,9 @@ import { ADMIN_SCOPE } from "../gateway/operator-scopes.js";
4949import { generateImage, listRuntimeImageGenerationProviders } from "../image-generation/runtime.js";
5050import type {
5151ImageGenerationBackground,
52+ImageGenerationOpenAIModeration,
5253ImageGenerationOutputFormat,
54+ImageGenerationQuality,
5355} from "../image-generation/types.js";
5456import {
5557parseStrictFiniteNumber,
@@ -203,6 +205,12 @@ const CAPABILITY_METADATA: CapabilityMetadata[] = [
203205"--size",
204206"--aspect-ratio",
205207"--resolution",
208+"--output-format",
209+"--background",
210+"--openai-background",
211+"--openai-moderation",
212+"--quality",
213+"--timeout-ms",
206214"--output",
207215"--json",
208216],
@@ -222,6 +230,8 @@ const CAPABILITY_METADATA: CapabilityMetadata[] = [
222230"--output-format",
223231"--background",
224232"--openai-background",
233+"--openai-moderation",
234+"--quality",
225235"--timeout-ms",
226236"--output",
227237"--json",
@@ -979,6 +989,8 @@ async function runImageGenerate(params: {
979989outputFormat?: ImageGenerationOutputFormat;
980990background?: ImageGenerationBackground;
981991openaiBackground?: ImageGenerationBackground;
992+openaiModeration?: ImageGenerationOpenAIModeration;
993+quality?: ImageGenerationQuality;
982994file?: string[];
983995output?: string;
984996timeoutMs?: number;
@@ -1008,11 +1020,18 @@ async function runImageGenerate(params: {
10081020size: params.size,
10091021aspectRatio: params.aspectRatio,
10101022resolution: params.resolution,
1023+quality: params.quality,
10111024outputFormat: params.outputFormat,
10121025background: params.background,
1013-providerOptions: params.openaiBackground
1014- ? { openai: { background: params.openaiBackground } }
1015- : undefined,
1026+providerOptions:
1027+params.openaiBackground || params.openaiModeration
1028+ ? {
1029+openai: {
1030+ ...(params.openaiBackground ? { background: params.openaiBackground } : {}),
1031+ ...(params.openaiModeration ? { moderation: params.openaiModeration } : {}),
1032+},
1033+}
1034+ : undefined,
10161035timeoutMs: params.timeoutMs,
10171036 inputImages,
10181037});
@@ -1216,6 +1235,35 @@ function normalizeImageBackground(
12161235throw new Error(`${label} must be one of transparent, opaque, or auto`);
12171236}
121812371238+function normalizeImageQuality(raw: string | undefined): ImageGenerationQuality | undefined {
1239+const normalized = normalizeLowercaseStringOrEmpty(raw);
1240+if (!normalized) {
1241+return undefined;
1242+}
1243+if (
1244+normalized === "low" ||
1245+normalized === "medium" ||
1246+normalized === "high" ||
1247+normalized === "auto"
1248+) {
1249+return normalized;
1250+}
1251+throw new Error("--quality must be one of low, medium, high, or auto");
1252+}
1253+1254+function normalizeOpenAIModeration(
1255+raw: string | undefined,
1256+): ImageGenerationOpenAIModeration | undefined {
1257+const normalized = normalizeLowercaseStringOrEmpty(raw);
1258+if (!normalized) {
1259+return undefined;
1260+}
1261+if (normalized === "low" || normalized === "auto") {
1262+return normalized;
1263+}
1264+throw new Error("--openai-moderation must be one of low or auto");
1265+}
1266+12191267function normalizeVideoResolution(raw: string | undefined): VideoGenerationResolution | undefined {
12201268const normalized = raw?.trim().toUpperCase();
12211269if (!normalized) {
@@ -2229,6 +2277,8 @@ export function registerCapabilityCli(program: Command) {
22292277.option("--output-format <format>", "Output format hint: png, jpeg, or webp")
22302278.option("--background <value>", "Background hint: transparent, opaque, or auto")
22312279.option("--openai-background <value>", "OpenAI background hint: transparent, opaque, or auto")
2280+.option("--openai-moderation <value>", "OpenAI moderation hint: low or auto")
2281+.option("--quality <value>", "Quality hint: low, medium, high, or auto")
22322282.option("--timeout-ms <ms>", "Provider request timeout in milliseconds")
22332283.option("--output <path>", "Output path")
22342284.option("--json", "Output JSON", false)
@@ -2248,6 +2298,8 @@ export function registerCapabilityCli(program: Command) {
22482298opts.openaiBackground as string | undefined,
22492299"--openai-background",
22502300),
2301+openaiModeration: normalizeOpenAIModeration(opts.openaiModeration as string | undefined),
2302+quality: normalizeImageQuality(opts.quality as string | undefined),
22512303timeoutMs: parseOptionalTimeoutMs(opts.timeoutMs),
22522304output: opts.output as string | undefined,
22532305});
@@ -2267,6 +2319,8 @@ export function registerCapabilityCli(program: Command) {
22672319.option("--output-format <format>", "Output format hint: png, jpeg, or webp")
22682320.option("--background <value>", "Background hint: transparent, opaque, or auto")
22692321.option("--openai-background <value>", "OpenAI background hint: transparent, opaque, or auto")
2322+.option("--openai-moderation <value>", "OpenAI moderation hint: low or auto")
2323+.option("--quality <value>", "Quality hint: low, medium, high, or auto")
22702324.option("--timeout-ms <ms>", "Provider request timeout in milliseconds")
22712325.option("--output <path>", "Output path")
22722326.option("--json", "Output JSON", false)
@@ -2287,6 +2341,8 @@ export function registerCapabilityCli(program: Command) {
22872341opts.openaiBackground as string | undefined,
22882342"--openai-background",
22892343),
2344+openaiModeration: normalizeOpenAIModeration(opts.openaiModeration as string | undefined),
2345+quality: normalizeImageQuality(opts.quality as string | undefined),
22902346timeoutMs: parseOptionalTimeoutMs(opts.timeoutMs),
22912347output: opts.output as string | undefined,
22922348});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。