fix(media): wire tools.media.image.maxBytes config to image processing pipeline
Fixes #2954 The configuration setting tools.media.image.maxBytes was defined but not wired through the image sanitization pipeline. This resulted in hardcoded constants being used instead of the user-configured value. Changes: - Modified sanitizeSessionMessagesImages() to accept maxBytes in options - Modified sanitizeSessionHistory() to accept and pass maxBytes parameter - Updated attempt.ts to pass config value through the sanitization chain - All sanitizeContentBlocksImages() calls now receive the configured maxBytes This ensures that when users configure a custom image size limit, it is actually used throughout the image processing pipeline instead of being ignored.
This commit is contained in:
parent
284b54af42
commit
1bf77f82fe
@ -38,6 +38,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
allowBase64Only?: boolean;
|
allowBase64Only?: boolean;
|
||||||
includeCamelCase?: boolean;
|
includeCamelCase?: boolean;
|
||||||
};
|
};
|
||||||
|
maxBytes?: number;
|
||||||
},
|
},
|
||||||
): Promise<AgentMessage[]> {
|
): Promise<AgentMessage[]> {
|
||||||
const sanitizeMode = options?.sanitizeMode ?? "full";
|
const sanitizeMode = options?.sanitizeMode ?? "full";
|
||||||
@ -62,6 +63,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
const nextContent = (await sanitizeContentBlocksImages(
|
const nextContent = (await sanitizeContentBlocksImages(
|
||||||
content as ContentBlock[],
|
content as ContentBlock[],
|
||||||
label,
|
label,
|
||||||
|
{ maxBytes: options?.maxBytes },
|
||||||
)) as unknown as typeof toolMsg.content;
|
)) as unknown as typeof toolMsg.content;
|
||||||
out.push({ ...toolMsg, content: nextContent });
|
out.push({ ...toolMsg, content: nextContent });
|
||||||
continue;
|
continue;
|
||||||
@ -74,6 +76,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
const nextContent = (await sanitizeContentBlocksImages(
|
const nextContent = (await sanitizeContentBlocksImages(
|
||||||
content as unknown as ContentBlock[],
|
content as unknown as ContentBlock[],
|
||||||
label,
|
label,
|
||||||
|
{ maxBytes: options?.maxBytes },
|
||||||
)) as unknown as typeof userMsg.content;
|
)) as unknown as typeof userMsg.content;
|
||||||
out.push({ ...userMsg, content: nextContent });
|
out.push({ ...userMsg, content: nextContent });
|
||||||
continue;
|
continue;
|
||||||
@ -88,6 +91,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
const nextContent = (await sanitizeContentBlocksImages(
|
const nextContent = (await sanitizeContentBlocksImages(
|
||||||
content as unknown as ContentBlock[],
|
content as unknown as ContentBlock[],
|
||||||
label,
|
label,
|
||||||
|
{ maxBytes: options?.maxBytes },
|
||||||
)) as unknown as typeof assistantMsg.content;
|
)) as unknown as typeof assistantMsg.content;
|
||||||
out.push({ ...assistantMsg, content: nextContent });
|
out.push({ ...assistantMsg, content: nextContent });
|
||||||
} else {
|
} else {
|
||||||
@ -101,6 +105,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
const nextContent = (await sanitizeContentBlocksImages(
|
const nextContent = (await sanitizeContentBlocksImages(
|
||||||
content as unknown as ContentBlock[],
|
content as unknown as ContentBlock[],
|
||||||
label,
|
label,
|
||||||
|
{ maxBytes: options?.maxBytes },
|
||||||
)) as unknown as typeof assistantMsg.content;
|
)) as unknown as typeof assistantMsg.content;
|
||||||
out.push({ ...assistantMsg, content: nextContent });
|
out.push({ ...assistantMsg, content: nextContent });
|
||||||
continue;
|
continue;
|
||||||
@ -118,6 +123,7 @@ export async function sanitizeSessionMessagesImages(
|
|||||||
const finalContent = (await sanitizeContentBlocksImages(
|
const finalContent = (await sanitizeContentBlocksImages(
|
||||||
filteredContent as unknown as ContentBlock[],
|
filteredContent as unknown as ContentBlock[],
|
||||||
label,
|
label,
|
||||||
|
{ maxBytes: options?.maxBytes },
|
||||||
)) as unknown as typeof assistantMsg.content;
|
)) as unknown as typeof assistantMsg.content;
|
||||||
if (finalContent.length === 0) {
|
if (finalContent.length === 0) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@ -313,6 +313,7 @@ export async function sanitizeSessionHistory(params: {
|
|||||||
sessionManager: SessionManager;
|
sessionManager: SessionManager;
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
policy?: TranscriptPolicy;
|
policy?: TranscriptPolicy;
|
||||||
|
maxBytes?: number;
|
||||||
}): Promise<AgentMessage[]> {
|
}): Promise<AgentMessage[]> {
|
||||||
// Keep docs/reference/transcript-hygiene.md in sync with any logic changes here.
|
// Keep docs/reference/transcript-hygiene.md in sync with any logic changes here.
|
||||||
const policy =
|
const policy =
|
||||||
@ -328,6 +329,7 @@ export async function sanitizeSessionHistory(params: {
|
|||||||
toolCallIdMode: policy.toolCallIdMode,
|
toolCallIdMode: policy.toolCallIdMode,
|
||||||
preserveSignatures: policy.preserveSignatures,
|
preserveSignatures: policy.preserveSignatures,
|
||||||
sanitizeThoughtSignatures: policy.sanitizeThoughtSignatures,
|
sanitizeThoughtSignatures: policy.sanitizeThoughtSignatures,
|
||||||
|
maxBytes: params.maxBytes,
|
||||||
});
|
});
|
||||||
const sanitizedThinking = policy.normalizeAntigravityThinkingBlocks
|
const sanitizedThinking = policy.normalizeAntigravityThinkingBlocks
|
||||||
? sanitizeAntigravityThinkingBlocks(sanitizedImages)
|
? sanitizeAntigravityThinkingBlocks(sanitizedImages)
|
||||||
|
|||||||
@ -523,6 +523,7 @@ export async function runEmbeddedAttempt(
|
|||||||
sessionManager,
|
sessionManager,
|
||||||
sessionId: params.sessionId,
|
sessionId: params.sessionId,
|
||||||
policy: transcriptPolicy,
|
policy: transcriptPolicy,
|
||||||
|
maxBytes: params.config?.tools?.media?.image?.maxBytes,
|
||||||
});
|
});
|
||||||
cacheTrace?.recordStage("session:sanitized", { messages: prior });
|
cacheTrace?.recordStage("session:sanitized", { messages: prior });
|
||||||
const validatedGemini = transcriptPolicy.validateGeminiTurns
|
const validatedGemini = transcriptPolicy.validateGeminiTurns
|
||||||
@ -743,7 +744,7 @@ export async function runEmbeddedAttempt(
|
|||||||
model: params.model,
|
model: params.model,
|
||||||
existingImages: params.images,
|
existingImages: params.images,
|
||||||
historyMessages: activeSession.messages,
|
historyMessages: activeSession.messages,
|
||||||
maxBytes: MAX_IMAGE_BYTES,
|
maxBytes: params.config?.tools?.media?.image?.maxBytes ?? MAX_IMAGE_BYTES,
|
||||||
// Enforce sandbox path restrictions when sandbox is enabled
|
// Enforce sandbox path restrictions when sandbox is enabled
|
||||||
sandboxRoot: sandbox?.enabled ? sandbox.workspaceDir : undefined,
|
sandboxRoot: sandbox?.enabled ? sandbox.workspaceDir : undefined,
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user