@sema-agent/core
Version:
Stateless, task-oriented AI agent core
77 lines (76 loc) • 4.53 kB
JavaScript
import { DEFAULT_COMPACTION_SETTINGS } from "../../internal/harness.js";
import { resolveTriggerWindow } from "../context-edit.js";
import { compactionEnabled, contextOverlayFor } from "../context-settings.js";
import { sanitizeCompactionSettings } from "../auto-compaction.js";
import { modelCostToPricing } from "../pricing.js";
import { emitTrace } from "../trace.js";
import { runWithReasoningWireFacts, runWithStatusSink } from "../../brain/status-sink.js";
import { sideCallBookOf } from "./side-call-account.js";
export function runCompactionMachinery(input) {
const { spec, prepared, rs, stats, noteUnevaluablePriceTable, modelCatalog, runner } = input;
const bookSideCall = sideCallBookOf(stats, { telemetry: rs.telemetry, pricing: () => runner.deps.pricing, noteUnevaluablePriceTable, catalog: modelCatalog });
prepared.sideCallBookRef.book = bookSideCall;
const compactionBrain = {
stream: runner.deps.brain.stream,
complete: async (m, c, o) => {
const msg = await runWithStatusSink(() => { }, async () => await runWithReasoningWireFacts(() => { }, async () => runner.deps.brain.complete
? await runner.deps.brain.complete(m, c, o)
: await (await Promise.resolve(runner.deps.brain.stream(m, c, o))).result()));
bookSideCall("compaction", m, msg);
return msg;
},
};
const legOverlay = () => contextOverlayFor(runner.deps.contextSettings, prepared.harness.getModelRef(), runner.deps);
const withinTaskCompaction = () => compactionEnabled(spec.compaction?.enabled, legOverlay()) && (spec.compaction?.withinTask ?? true);
const compactionBreaker = { failures: 0 };
if (compactionEnabled(spec.compaction?.enabled, legOverlay())) {
const prefixWindow = resolveTriggerWindow(prepared.model, legOverlay()).window;
if (Number.isFinite(prefixWindow) && prefixWindow > 0) {
const prefixSettings = sanitizeCompactionSettings({ ...DEFAULT_COMPACTION_SETTINGS, ...spec.compaction }, prefixWindow);
const prefixCompactAt = prefixWindow - prefixSettings.reserveTokens;
if (prepared.promptOverheadTokens >= prefixCompactAt) {
runner.deps.onError?.(new Error(`compaction cannot help: the fixed request prefix (system prompt + tool schemas, ≈${prepared.promptOverheadTokens} tokens) ` +
`already meets or exceeds the compaction threshold (${prefixCompactAt} of a ${prefixWindow}-token window). ` +
`Compaction only shrinks conversation history, so this run will re-trigger or overflow regardless — ` +
`shrink the system prompt/tool surface or use a larger-window model.`), { phase: "config", sessionId: prepared.sessionId });
}
}
}
const windowSafetyOptions = (mainModel) => ({
...(rs.budget.maxCostMicroUsd !== undefined
? {
fallbackBudget: {
spentMicroUsd: () => stats.costMicroUsd,
capMicroUsd: rs.budget.maxCostMicroUsd,
mainInputPer1M: (runner.deps.pricing?.[mainModel.id] ?? modelCostToPricing(mainModel.cost)).inputPer1M,
},
}
: {}),
onWindowSafety: (info) => {
if (info.kind === "fallback") {
emitTrace(rs.telemetry.tracer, () => ({
kind: "compaction.model_fallback",
version: 1,
taskId: rs.telemetry.taskId,
contentTokens: info.contentTokens,
headroomTokens: info.headroomTokens ?? 0,
truncationRatio: info.truncationRatio,
...(info.estCostMicroUsd !== undefined ? { estCostMicroUsd: info.estCostMicroUsd } : {}),
ts: Date.now(),
}));
}
else {
emitTrace(rs.telemetry.tracer, () => ({
kind: "compaction.clamp_disclosure",
version: 1,
taskId: rs.telemetry.taskId,
truncationRatio: info.truncationRatio,
reason: info.reason ?? "tolerance",
...(info.estCostMicroUsd !== undefined ? { estCostMicroUsd: info.estCostMicroUsd } : {}),
ts: Date.now(),
}));
}
},
});
return { compactionBrain, withinTaskCompaction, compactionBreaker, windowSafetyOptions, bookSideCall };
}