This commit is contained in:
2026-07-06 00:01:34 +07:00
parent 2729408ef3
commit e7470e955e
108 changed files with 4131 additions and 529 deletions

View File

@@ -73,6 +73,14 @@ function maskEndpoint(endpoint) {
}
}
function hasUnsafeResponsesInputForCompression(body) {
if (!Array.isArray(body?.input)) return false;
return body.input.some((item) => {
if (!item || typeof item !== "object" || Array.isArray(item)) return false;
return typeof item.type === "string" && item.type !== "message";
});
}
// POST messages to Headroom /v1/compress; returns compressed messages + stats or null.
async function callCompress(url, messages, model, timeoutMs, compressUserMessages, diagnostics) {
const endpoint = buildCompressEndpoint(url);
@@ -143,6 +151,10 @@ export async function compressWithHeadroom(body, { enabled, url, model, format,
// messages. Translate input -> OpenAI -> compress -> translate back to input so
// body.input keeps the Responses contract (the proxy only understands OpenAI). (#1998)
if (format === "openai-responses") {
if (hasUnsafeResponsesInputForCompression(body)) {
setDiagnostic(diagnostics, "skipped: openai-responses tool/reasoning input is not safe to compress");
return null;
}
const oai = openaiResponsesToOpenAIRequest(model, body, false);
if (!Array.isArray(oai?.messages)) return null;
const data = await callCompress(url, oai.messages, model, timeoutMs, compressUserMessages, diagnostics || {});