openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
29 lines (28 loc) • 2.14 kB
JavaScript
import { i as resolveAutoLiveToolResultMaxChars, n as calculateMaxToolResultCharsWithCap } from "./tool-result-truncation-BiAgZIVd.js";
//#region src/flows/doctor-tool-result-cap-advice.ts
function formatNumber(value) {
return String(Math.max(0, Math.floor(value))).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
/** Builds human-readable doctor lines for stale or ineffective toolResultMaxChars settings. */
function buildToolResultCapDoctorAdvice(params) {
if (!Number.isFinite(params.contextWindowTokens) || params.contextWindowTokens <= 0) return [];
const autoCap = resolveAutoLiveToolResultMaxChars(params.contextWindowTokens);
const runtimeCeiling = calculateMaxToolResultCharsWithCap(params.contextWindowTokens, Number.MAX_SAFE_INTEGER);
const configuredCap = typeof params.configuredCap === "number" && Number.isFinite(params.configuredCap) ? Math.floor(params.configuredCap) : void 0;
const configuredSource = configuredCap !== void 0;
const requestedCap = configuredCap ?? autoCap;
const effectiveCap = calculateMaxToolResultCharsWithCap(params.contextWindowTokens, requestedCap);
const autoEffectiveCap = calculateMaxToolResultCharsWithCap(params.contextWindowTokens, autoCap);
const lines = [];
const prefix = params.scopeLabel ? `${params.scopeLabel}: ` : "";
if (params.deep) lines.push(`- ${prefix}primary model "${params.modelKey}" context window ${formatNumber(params.contextWindowTokens)} tokens; live tool-result cap ${formatNumber(effectiveCap)} chars (${configuredSource ? "explicit" : "auto"})`);
if (configuredCap === void 0) return lines;
if (configuredCap > runtimeCeiling) {
lines.push(`- ${prefix}configured toolResultMaxChars is ${formatNumber(configuredCap)} chars, but this model can use at most ${formatNumber(runtimeCeiling)} chars per live tool result; lower it or unset it.`);
return lines;
}
if (effectiveCap < autoEffectiveCap) lines.push(`- ${prefix}configured toolResultMaxChars is ${formatNumber(configuredCap)} chars; unset it to use the ${formatNumber(autoEffectiveCap)} char auto cap for "${params.modelKey}".`);
return lines;
}
//#endregion
export { buildToolResultCapDoctorAdvice };