sanitize thinking blocks

This commit is contained in:
Badri Narayanan S
2025-12-19 22:02:18 +05:30
parent 3ad42b127d
commit da48b9898b

View File

@@ -147,20 +147,42 @@ export function removeTrailingThinkingBlocks(content) {
return content;
}
/**
* Sanitize a thinking block by removing extra fields like cache_control.
* Only keeps: type, thinking, signature
*/
function sanitizeAnthropicThinkingBlock(block) {
if (!block || block.type !== 'thinking') return block;
const sanitized = { type: 'thinking' };
if (block.thinking !== undefined) sanitized.thinking = block.thinking;
if (block.signature !== undefined) sanitized.signature = block.signature;
return sanitized;
}
/**
* Filter thinking blocks: keep only those with valid signatures.
* Blocks without signatures are dropped (API requires signatures).
* Also sanitizes blocks to remove extra fields like cache_control.
*/
export function restoreThinkingSignatures(content) {
if (!Array.isArray(content)) return content;
const originalLength = content.length;
const filtered = content.filter(block => {
if (!block || block.type !== 'thinking') return true;
const filtered = [];
// Keep blocks with valid signatures (>= 50 chars)
return block.signature && block.signature.length >= 50;
});
for (const block of content) {
if (!block || block.type !== 'thinking') {
filtered.push(block);
continue;
}
// Keep blocks with valid signatures (>= 50 chars), sanitized
if (block.signature && block.signature.length >= 50) {
filtered.push(sanitizeAnthropicThinkingBlock(block));
}
// Unsigned thinking blocks are dropped
}
if (filtered.length < originalLength) {
console.log(`[FormatConverter] Dropped ${originalLength - filtered.length} unsigned thinking block(s)`);
@@ -190,7 +212,8 @@ export function reorderAssistantContent(content) {
if (!block) continue;
if (block.type === 'thinking') {
thinkingBlocks.push(block);
// Sanitize thinking blocks to remove cache_control and other extra fields
thinkingBlocks.push(sanitizeAnthropicThinkingBlock(block));
} else if (block.type === 'tool_use') {
toolUseBlocks.push(block);
} else if (block.type === 'text') {