mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 22:54:33 +00:00
fix(agents): make image sanitization dimension configurable
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import type { ImageContent } from "@mariozechner/pi-ai";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import type { ImageContent } from "@mariozechner/pi-ai";
|
||||
import type { ImageSanitizationLimits } from "../../image-sanitization.js";
|
||||
import type { SandboxFsBridge } from "../../sandbox/fs-bridge.js";
|
||||
import { resolveUserPath } from "../../../utils.js";
|
||||
import { loadWebMedia } from "../../../web/media.js";
|
||||
import type { SandboxFsBridge } from "../../sandbox/fs-bridge.js";
|
||||
import { sanitizeImageBlocks } from "../../tool-images.js";
|
||||
import { log } from "../logger.js";
|
||||
|
||||
@@ -48,8 +49,13 @@ function isImageExtension(filePath: string): boolean {
|
||||
async function sanitizeImagesWithLog(
|
||||
images: ImageContent[],
|
||||
label: string,
|
||||
imageSanitization?: ImageSanitizationLimits,
|
||||
): Promise<ImageContent[]> {
|
||||
const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label);
|
||||
const { images: sanitized, dropped } = await sanitizeImageBlocks(
|
||||
images,
|
||||
label,
|
||||
imageSanitization,
|
||||
);
|
||||
if (dropped > 0) {
|
||||
log.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
|
||||
}
|
||||
@@ -354,6 +360,7 @@ export async function detectAndLoadPromptImages(params: {
|
||||
existingImages?: ImageContent[];
|
||||
historyMessages?: unknown[];
|
||||
maxBytes?: number;
|
||||
maxDimensionPx?: number;
|
||||
sandbox?: { root: string; bridge: SandboxFsBridge };
|
||||
}): Promise<{
|
||||
/** Images for the current prompt (existingImages + detected in current prompt) */
|
||||
@@ -437,10 +444,21 @@ export async function detectAndLoadPromptImages(params: {
|
||||
}
|
||||
}
|
||||
|
||||
const sanitizedPromptImages = await sanitizeImagesWithLog(promptImages, "prompt:images");
|
||||
const imageSanitization: ImageSanitizationLimits = {
|
||||
maxDimensionPx: params.maxDimensionPx,
|
||||
};
|
||||
const sanitizedPromptImages = await sanitizeImagesWithLog(
|
||||
promptImages,
|
||||
"prompt:images",
|
||||
imageSanitization,
|
||||
);
|
||||
const sanitizedHistoryImagesByIndex = new Map<number, ImageContent[]>();
|
||||
for (const [index, images] of historyImagesByIndex) {
|
||||
const sanitized = await sanitizeImagesWithLog(images, `history:images:${index}`);
|
||||
const sanitized = await sanitizeImagesWithLog(
|
||||
images,
|
||||
`history:images:${index}`,
|
||||
imageSanitization,
|
||||
);
|
||||
if (sanitized.length > 0) {
|
||||
sanitizedHistoryImagesByIndex.set(index, sanitized);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user