billion-context 0.1.97-pr.666.481 → 0.1.97-pr.667.482
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +67 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -48726,6 +48726,7 @@ function mergeCompress(global2, provider, model) {
|
|
|
48726
48726
|
const promptLevels = [global2?.prompts, provider?.prompts, model?.prompts].filter(Boolean);
|
|
48727
48727
|
const rangeOf = (s3) => s3?.minCompressRangeChars ?? s3?.minCompressRange;
|
|
48728
48728
|
const absorbLevels = [global2?.absorb, provider?.absorb, model?.absorb].filter(Boolean);
|
|
48729
|
+
const reasoningLevels = [global2?.reasoning, provider?.reasoning, model?.reasoning].filter(Boolean);
|
|
48729
48730
|
return {
|
|
48730
48731
|
modelContextLimit: pick("modelContextLimit"),
|
|
48731
48732
|
maxContextLimit: pick("maxContextLimit"),
|
|
@@ -48739,7 +48740,11 @@ function mergeCompress(global2, provider, model) {
|
|
|
48739
48740
|
acknowledgePromptsRisk: pick("acknowledgePromptsRisk"),
|
|
48740
48741
|
absorb: absorbLevels.length > 0 ? Object.assign({}, ...absorbLevels) : void 0,
|
|
48741
48742
|
stripImages: pick("stripImages"),
|
|
48742
|
-
stripImagesKeepRecent: pick("stripImagesKeepRecent")
|
|
48743
|
+
stripImagesKeepRecent: pick("stripImagesKeepRecent"),
|
|
48744
|
+
// `reasoning` is a third nested-object field merged sub-field-wise
|
|
48745
|
+
// exactly like `absorb`/`prompts`: a model-level `threshold` must not
|
|
48746
|
+
// discard a provider-level `drop: false`.
|
|
48747
|
+
reasoning: reasoningLevels.length > 0 ? Object.assign({}, ...reasoningLevels) : void 0
|
|
48743
48748
|
};
|
|
48744
48749
|
}
|
|
48745
48750
|
function resolveCompress(routes, upstreamUrl, model, global2) {
|
|
@@ -48819,6 +48824,49 @@ function resolveRequestConfig(base, routes, embeddedUrl, model, native, globalCo
|
|
|
48819
48824
|
return applyCompressSettings(base, limit, compress);
|
|
48820
48825
|
}
|
|
48821
48826
|
|
|
48827
|
+
// src/reasoning-drop.ts
|
|
48828
|
+
var DEFAULT_COMPRESS_REASONING = { drop: true, threshold: 2048 };
|
|
48829
|
+
function resolveReasoningDrop(cfg) {
|
|
48830
|
+
let threshold = DEFAULT_COMPRESS_REASONING.threshold;
|
|
48831
|
+
if (cfg?.threshold !== void 0) {
|
|
48832
|
+
const t = cfg.threshold;
|
|
48833
|
+
if (typeof t === "number" && Number.isFinite(t) && t >= 0) {
|
|
48834
|
+
threshold = Math.floor(t);
|
|
48835
|
+
}
|
|
48836
|
+
}
|
|
48837
|
+
return { drop: cfg?.drop !== false, threshold };
|
|
48838
|
+
}
|
|
48839
|
+
function dropCompressReasoning(messages, cfg) {
|
|
48840
|
+
const { drop, threshold } = resolveReasoningDrop(cfg);
|
|
48841
|
+
if (!drop || messages.length === 0) return messages;
|
|
48842
|
+
try {
|
|
48843
|
+
let lastUser = -1;
|
|
48844
|
+
for (let i = 0; i < messages.length; i++) {
|
|
48845
|
+
const m2 = messages[i];
|
|
48846
|
+
if (m2.role === "user" && m2.contentType === "text") lastUser = i;
|
|
48847
|
+
}
|
|
48848
|
+
if (lastUser < 0) return messages;
|
|
48849
|
+
const dropIdx = /* @__PURE__ */ new Set();
|
|
48850
|
+
for (let i = 0; i < lastUser; i++) {
|
|
48851
|
+
const m2 = messages[i];
|
|
48852
|
+
if (m2.contentType !== "tool-call" || m2.toolName !== "compress") continue;
|
|
48853
|
+
let total = 0;
|
|
48854
|
+
let j2 = i - 1;
|
|
48855
|
+
while (j2 >= 0 && messages[j2].contentType === "reasoning") {
|
|
48856
|
+
total += (messages[j2].text ?? "").length;
|
|
48857
|
+
j2--;
|
|
48858
|
+
}
|
|
48859
|
+
if (total > threshold) {
|
|
48860
|
+
for (let k2 = j2 + 1; k2 < i; k2++) dropIdx.add(k2);
|
|
48861
|
+
}
|
|
48862
|
+
}
|
|
48863
|
+
if (dropIdx.size === 0) return messages;
|
|
48864
|
+
return messages.filter((_2, idx) => !dropIdx.has(idx));
|
|
48865
|
+
} catch {
|
|
48866
|
+
return messages;
|
|
48867
|
+
}
|
|
48868
|
+
}
|
|
48869
|
+
|
|
48822
48870
|
// src/strip-images.ts
|
|
48823
48871
|
var DEFAULT_STRIP_IMAGES_KEEP_RECENT = 5;
|
|
48824
48872
|
var IMAGE_PLACEHOLDER = "[image]";
|
|
@@ -59214,13 +59262,14 @@ ${bodyBuffer.toString("utf8")}`);
|
|
|
59214
59262
|
await withSessionLock(session, async () => {
|
|
59215
59263
|
const runPrepare = () => {
|
|
59216
59264
|
const cs2 = resolveCompress(opts.routes, route?.rewrittenUrl, parsed.model, opts.compress);
|
|
59265
|
+
const reasoningCfg = cs2.reasoning;
|
|
59217
59266
|
const keepRecent = cs2.stripImagesKeepRecent ?? DEFAULT_STRIP_IMAGES_KEEP_RECENT;
|
|
59218
59267
|
const stripped = cs2.stripImages ? stripHistoricalImages(parsed, protocol, keepRecent) : { body: parsed, removed: 0 };
|
|
59219
59268
|
if (opts.debug && stripped.removed > 0) {
|
|
59220
59269
|
log2("info", `[debug] strip-images: dropped ${stripped.removed} historical image part(s), kept last ${keepRecent} (session=${session.id})`);
|
|
59221
59270
|
}
|
|
59222
59271
|
const work = stripped.body;
|
|
59223
|
-
return countTokens ? prepareCountTokens(work, core, reqConfig, log2, session) : protocol === "anthropic" ? prepareAnthropic(work, req, opts, core, reqConfig, reqPrompts, log2, session, pluginMode) : protocol === "openai" ? prepareOpenai(work, req, opts, core, reqConfig, reqPrompts, log2, session, pluginMode, nativeWindow) : responsesCompact ? prepareResponsesCompact(stripped.removed > 0 ? Buffer.from(JSON.stringify(work)) : bodyBuffer, work, session, req, core, reqConfig, log2) : prepareResponses(work, req, opts, core, reqConfig, reqPrompts, log2, session, responsesIdentity, pluginMode, upstreamOrigin, nativeWindow);
|
|
59272
|
+
return countTokens ? prepareCountTokens(work, core, reqConfig, log2, session) : protocol === "anthropic" ? prepareAnthropic(work, req, opts, core, reqConfig, reqPrompts, log2, session, pluginMode, reasoningCfg) : protocol === "openai" ? prepareOpenai(work, req, opts, core, reqConfig, reqPrompts, log2, session, pluginMode, nativeWindow, reasoningCfg) : responsesCompact ? prepareResponsesCompact(stripped.removed > 0 ? Buffer.from(JSON.stringify(work)) : bodyBuffer, work, session, req, core, reqConfig, log2) : prepareResponses(work, req, opts, core, reqConfig, reqPrompts, log2, session, responsesIdentity, pluginMode, upstreamOrigin, nativeWindow, reasoningCfg);
|
|
59224
59273
|
};
|
|
59225
59274
|
const isCodexCompactTrigger = protocol === "responses" && !responsesCompact && isCodexClient(req.headers) && hasCompactionTrigger(parsed.input);
|
|
59226
59275
|
if (isCodexCompactTrigger) {
|
|
@@ -59308,6 +59357,13 @@ ${bodyBuffer.toString("utf8")}`);
|
|
|
59308
59357
|
}
|
|
59309
59358
|
}
|
|
59310
59359
|
var ACP_TAG_MARK = "<acp ";
|
|
59360
|
+
function withReasoningDrop(msgs, reasoning, log2, sessionId) {
|
|
59361
|
+
const out = dropCompressReasoning(msgs, reasoning);
|
|
59362
|
+
if (out.length !== msgs.length) {
|
|
59363
|
+
log2("info", `[${sessionId}] compress-reasoning: dropped ${msgs.length - out.length} reasoning message(s) from closed compress turns (#651)`);
|
|
59364
|
+
}
|
|
59365
|
+
return out;
|
|
59366
|
+
}
|
|
59311
59367
|
function stripKernelSummaries(messages, state) {
|
|
59312
59368
|
const carried = /* @__PURE__ */ new Set();
|
|
59313
59369
|
for (const b2 of state.blocks) {
|
|
@@ -59409,12 +59465,13 @@ function effectiveTokenCount(session, msgs) {
|
|
|
59409
59465
|
if (!session.metadata.anonymousPrefixAffinity) return 0;
|
|
59410
59466
|
return estimateCoreMessagesUpper(msgs);
|
|
59411
59467
|
}
|
|
59412
|
-
function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, session, pluginMode) {
|
|
59468
|
+
function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, session, pluginMode, reasoning) {
|
|
59413
59469
|
const sessionId = session.id;
|
|
59414
59470
|
const stream2 = parsed.stream === true;
|
|
59415
59471
|
++session.stats.requests;
|
|
59416
59472
|
session.hostCreditTokens = 0;
|
|
59417
59473
|
const injectTools = opts.compress.injectTool && !pluginMode;
|
|
59474
|
+
const stripReasoning = (msgs) => withReasoningDrop(msgs, reasoning, log2, sessionId);
|
|
59418
59475
|
if (isAutoModeClassifier(parsed)) {
|
|
59419
59476
|
log2("info", `[${sessionId}] auto-mode classifier passthrough (skipping compress injection)`);
|
|
59420
59477
|
return { body: JSON.stringify(parsed), session, processedMessages: [], originalMessages: [], anthropicSystem: parsed.system, protocol: "anthropic", stream: stream2, compressInjected: false, pluginMode, nudge: void 0, prompts };
|
|
@@ -59452,7 +59509,7 @@ function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
59452
59509
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
59453
59510
|
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge && (turn.nudge.shouldInject || emergencyNudge(turn.nudge));
|
|
59454
59511
|
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
59455
|
-
processedMessages = stripKernelSummaries(turn.messages, turn.state);
|
|
59512
|
+
processedMessages = stripReasoning(stripKernelSummaries(turn.messages, turn.state));
|
|
59456
59513
|
applyCompactionArchive(session, activeBefore, new Set(msgs.map((m2) => m2.id)), log2);
|
|
59457
59514
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
59458
59515
|
rebuiltMessages = coreToAnthropic(processedMessages, cacheControls);
|
|
@@ -59534,12 +59591,13 @@ function clampOutgoingOutput(rebuilt, field, ctx, sessionId, log2) {
|
|
|
59534
59591
|
log2("info", `[${sessionId}] output budget clamped ${raw} -> ${capped} (input~${inputEstimate}, window=${ctx.nativeWindow}); prevents input+output overflow (#453)`);
|
|
59535
59592
|
}
|
|
59536
59593
|
}
|
|
59537
|
-
function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session, pluginMode, nativeWindow) {
|
|
59594
|
+
function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session, pluginMode, nativeWindow, reasoning) {
|
|
59538
59595
|
const sessionId = session.id;
|
|
59539
59596
|
const stream2 = parsed.stream === true;
|
|
59540
59597
|
++session.stats.requests;
|
|
59541
59598
|
session.hostCreditTokens = 0;
|
|
59542
59599
|
let openaiSystemText = "";
|
|
59600
|
+
const stripReasoning = (msgs) => withReasoningDrop(msgs, reasoning, log2, sessionId);
|
|
59543
59601
|
let openaiOutboundSystem;
|
|
59544
59602
|
let processedMessages = [];
|
|
59545
59603
|
let originalMessages = [];
|
|
@@ -59577,7 +59635,7 @@ function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session,
|
|
|
59577
59635
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
59578
59636
|
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge && shouldInject && (turn.nudge.shouldInject || emergencyNudge(turn.nudge));
|
|
59579
59637
|
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
59580
|
-
processedMessages = stripKernelSummaries(turn.messages, turn.state);
|
|
59638
|
+
processedMessages = stripReasoning(stripKernelSummaries(turn.messages, turn.state));
|
|
59581
59639
|
applyCompactionArchive(session, activeBefore, new Set(msgs.map((m2) => m2.id)), log2);
|
|
59582
59640
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
59583
59641
|
rebuiltMessages = systemToUser(coreToOpenai(processedMessages));
|
|
@@ -59617,11 +59675,12 @@ function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session,
|
|
|
59617
59675
|
markDirty(session);
|
|
59618
59676
|
return { body: JSON.stringify(rebuilt), session, processedMessages, originalMessages, protocol: "openai", stream: stream2, compressInjected: injectTools, pluginMode, nudge, prompts, openaiSystemText, renderTags: "text-only" };
|
|
59619
59677
|
}
|
|
59620
|
-
function prepareResponses(parsed, req, opts, core, config, prompts, log2, session, identity, pluginMode, upstreamOrigin, nativeWindow) {
|
|
59678
|
+
function prepareResponses(parsed, req, opts, core, config, prompts, log2, session, identity, pluginMode, upstreamOrigin, nativeWindow, reasoning) {
|
|
59621
59679
|
const sessionId = session.id;
|
|
59622
59680
|
const stream2 = parsed.stream === true;
|
|
59623
59681
|
++session.stats.requests;
|
|
59624
59682
|
session.hostCreditTokens = 0;
|
|
59683
|
+
const stripReasoning = (msgs) => withReasoningDrop(msgs, reasoning, log2, sessionId);
|
|
59625
59684
|
if (reconcileNativeCompactionBoundary(session)) {
|
|
59626
59685
|
log2("info", `[${sessionId}] reconciled ACP state after native Responses compact boundary`);
|
|
59627
59686
|
}
|
|
@@ -59686,7 +59745,7 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
59686
59745
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
59687
59746
|
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge && shouldInject && !isCompactionTrigger && (turn.nudge.shouldInject || emergencyNudge(turn.nudge));
|
|
59688
59747
|
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
59689
|
-
processedMessages = repairResponsesAssistantOrdering(stripKernelSummaries(turn.messages, turn.state), originalMessages);
|
|
59748
|
+
processedMessages = repairResponsesAssistantOrdering(stripReasoning(stripKernelSummaries(turn.messages, turn.state)), originalMessages);
|
|
59690
59749
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
59691
59750
|
rebuiltInput = patchResponsesInput(projection, processedMessages);
|
|
59692
59751
|
const forgedSummaries = echoReplaced ? [] : session.metadata.codexForgedSummaries ?? [];
|