




















@@ -32,6 +32,7 @@ import {
3232import { getImageMetadata } from "../../media/media-services.js";
3333import { saveMediaBuffer } from "../../media/store.js";
3434import { loadWebMedia } from "../../media/web-media.js";
35+import { readSnakeCaseParamRaw } from "../../param-key.js";
3536import { resolveUserPath } from "../../utils.js";
3637import type { DeliveryContext } from "../../utils/delivery-context.js";
3738import type { AuthProfileStore } from "../auth-profiles/types.js";
@@ -178,7 +179,7 @@ const ImageGenerateToolSchema = Type.Object({
178179description: "OpenAI moderation: low, auto.",
179180}),
180181outputCompression: Type.Optional(
181-Type.Number({
182+Type.Integer({
182183description: "OpenAI jpeg/webp compression 0-100.",
183184minimum: 0,
184185maximum: 100,
@@ -192,7 +193,7 @@ const ImageGenerateToolSchema = Type.Object({
192193}),
193194),
194195count: Type.Optional(
195-Type.Number({
196+Type.Integer({
196197description: `Image count 1-${MAX_COUNT}.`,
197198minimum: 1,
198199maximum: MAX_COUNT,
@@ -235,8 +236,11 @@ function resolveAction(args: Record<string, unknown>): "generate" | "list" | "st
235236}
236237237238function resolveRequestedCount(args: Record<string, unknown>): number {
238-const count = readNumberParam(args, "count", { integer: true });
239+const count = readNumberParam(args, "count", { positiveInteger: true });
239240if (count === undefined) {
241+if (readSnakeCaseParamRaw(args, "count") !== undefined) {
242+throw new ToolInputError(`count must be between 1 and ${MAX_COUNT}`);
243+}
240244return DEFAULT_COUNT;
241245}
242246if (count < 1 || count > MAX_COUNT) {
@@ -339,8 +343,14 @@ function normalizeOpenAIOptions(args: Record<string, unknown>): ImageGenerationO
339343const raw = readRecordParam(args, "openai");
340344const background = normalizeOpenAIBackground(readStringParam(raw, "background"));
341345const moderation = normalizeOpenAIModeration(readStringParam(raw, "moderation"));
342-const outputCompression = readNumberParam(raw, "outputCompression", { integer: true });
346+const outputCompression = readNumberParam(raw, "outputCompression", { nonNegativeInteger: true });
343347const user = readStringParam(raw, "user");
348+if (
349+outputCompression === undefined &&
350+readSnakeCaseParamRaw(raw, "outputCompression") !== undefined
351+) {
352+throw new ToolInputError("openai.outputCompression must be between 0 and 100");
353+}
344354if (outputCompression !== undefined && (outputCompression < 0 || outputCompression > 100)) {
345355throw new ToolInputError("openai.outputCompression must be between 0 and 100");
346356}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。