File size: 4,634 Bytes
253e783 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /** Shared image-generation request, provider, capability, and result contracts. */
import type { MediaNormalizationEntry } from "../../packages/media-generation-core/src/normalization.js";
import type { AuthProfileStore } from "../agents/auth-profiles/types.js";
import type { OpenClawConfig } from "../config/types.openclaw.js";
import type { SsrFPolicy } from "../infra/net/ssrf.js";
/** Non-empty binary image asset returned by an image-generation provider. */
export type GeneratedImageAsset = {
buffer: Buffer;
mimeType: string;
fileName?: string;
revisedPrompt?: string;
metadata?: Record<string, unknown>;
};
export type ImageGenerationResolution = "1K" | "2K" | "4K";
export type ImageGenerationQuality = "low" | "medium" | "high" | "xhigh" | "max" | "auto";
export type ImageGenerationOutputFormat = "png" | "jpeg" | "webp";
export type ImageGenerationBackground = "transparent" | "opaque" | "auto";
export type ImageGenerationOpenAIBackground = ImageGenerationBackground;
export type ImageGenerationOpenAIModeration = "low" | "auto";
export type ImageGenerationOpenAIOptions = {
background?: ImageGenerationOpenAIBackground;
moderation?: ImageGenerationOpenAIModeration;
outputCompression?: number;
user?: string;
};
export type ImageGenerationProviderOptions = Record<string, unknown> & {
openai?: ImageGenerationOpenAIOptions;
};
type ImageGenerationIgnoredOverrideKey =
| "size"
| "aspectRatio"
| "resolution"
| "quality"
| "outputFormat"
| "background";
export type ImageGenerationIgnoredOverride = {
key: ImageGenerationIgnoredOverrideKey;
value: string;
};
export type ImageGenerationSourceImage = {
buffer: Buffer;
mimeType: string;
fileName?: string;
metadata?: Record<string, unknown>;
};
export type ImageGenerationProviderConfiguredContext = {
cfg?: OpenClawConfig;
agentDir?: string;
};
/** Runtime request passed to an image-generation provider implementation. */
export type ImageGenerationRequest = {
provider: string;
model: string;
prompt: string;
cfg: OpenClawConfig;
agentDir?: string;
authStore?: AuthProfileStore;
timeoutMs?: number;
count?: number;
size?: string;
aspectRatio?: string;
resolution?: ImageGenerationResolution;
quality?: ImageGenerationQuality;
outputFormat?: ImageGenerationOutputFormat;
background?: ImageGenerationBackground;
inputImages?: ImageGenerationSourceImage[];
providerOptions?: ImageGenerationProviderOptions;
ssrfPolicy?: SsrFPolicy;
};
export type ImageGenerationResult = {
images: GeneratedImageAsset[];
model?: string;
metadata?: Record<string, unknown>;
};
type ImageGenerationModeCapabilities = {
maxCount?: number;
supportsSize?: boolean;
supportsAspectRatio?: boolean;
supportsResolution?: boolean;
};
type ImageGenerationEditCapabilities = ImageGenerationModeCapabilities & {
enabled: boolean;
maxInputImages?: number;
maxInputImagesByModel?: Readonly<Record<string, number>>;
maxInputImagesByModelPrefix?: Readonly<Record<string, number>>;
};
type ImageGenerationGeometryCapabilities = {
sizes?: string[];
sizesByModel?: Record<string, string[]>;
aspectRatios?: string[];
aspectRatiosByModel?: Record<string, string[]>;
resolutions?: ImageGenerationResolution[];
resolutionsByModel?: Record<string, ImageGenerationResolution[]>;
};
type ImageGenerationOutputCapabilities = {
qualities?: ImageGenerationQuality[];
qualitiesByModel?: Record<string, ImageGenerationQuality[]>;
formats?: ImageGenerationOutputFormat[];
formatsByModel?: Record<string, ImageGenerationOutputFormat[]>;
backgrounds?: ImageGenerationBackground[];
backgroundsByModel?: Record<string, ImageGenerationBackground[]>;
};
export type ImageGenerationNormalization = {
size?: MediaNormalizationEntry<string>;
aspectRatio?: MediaNormalizationEntry<string>;
resolution?: MediaNormalizationEntry<ImageGenerationResolution>;
};
export type ImageGenerationProviderCapabilities = {
generate: ImageGenerationModeCapabilities;
edit: ImageGenerationEditCapabilities;
geometry?: ImageGenerationGeometryCapabilities;
output?: ImageGenerationOutputCapabilities;
};
export type ImageGenerationProvider = {
id: string;
aliases?: string[];
label?: string;
defaultModel?: string;
/** Default provider operation timeout in milliseconds when caller/config omit timeoutMs. */
defaultTimeoutMs?: number;
models?: string[];
capabilities: ImageGenerationProviderCapabilities;
isConfigured?: (ctx: ImageGenerationProviderConfiguredContext) => boolean;
generateImage: (req: ImageGenerationRequest) => Promise<ImageGenerationResult>;
};
|