File size: 2,610 Bytes
fc93158 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import type { OmegaOperationalTurnMemoryEntry } from "./operational-memory.js";
export type OmegaUtilityBreakdown = {
taskProgressGain: number;
uncertaintyReduction: number;
futureFailureRiskReduction: number;
tokenCost: number;
wallTimeCost: number;
disruptionCost: number;
total: number;
expectedUtility?: number;
};
export type OmegaBudgetUsage = {
observedTurns: number;
estimatedLlmCalls: number;
observedWallTimeMs: number;
budgetPressure: number;
turnPressure?: number;
};
function clampUnit(value: number): number {
return Math.max(0, Math.min(1, value));
}
export function deriveOmegaBudgetUsage(params: {
operationalSignals: OmegaOperationalTurnMemoryEntry[];
maxTurnsPerCycle: number;
maxLlmCalls: number;
maxWallTimeMs: number;
}): OmegaBudgetUsage {
const recentSignals = params.operationalSignals.slice(-3);
const observedTurns = recentSignals.length;
const estimatedLlmCalls = recentSignals.length;
const observedWallTimeMs = recentSignals.reduce(
(total, entry) => total + entry.latencyBreakdown.totalMs,
0,
);
const turnPressure = params.maxTurnsPerCycle > 0 ? observedTurns / params.maxTurnsPerCycle : 1;
const llmPressure = params.maxLlmCalls > 0 ? estimatedLlmCalls / params.maxLlmCalls : 1;
const wallTimePressure = params.maxWallTimeMs > 0 ? observedWallTimeMs / params.maxWallTimeMs : 1;
return {
observedTurns,
estimatedLlmCalls,
observedWallTimeMs,
budgetPressure: clampUnit(Math.max(turnPressure, llmPressure, wallTimePressure)),
turnPressure,
};
}
export function computeOmegaUtilityBreakdown(params: {
urgency: number;
expectedUtility: number;
uncertaintyReduction: number;
estimatedCost: number;
failureRisk: number;
budgetPressure?: number;
}): OmegaUtilityBreakdown {
const taskProgressGain = clampUnit(params.urgency) * 0.35;
const uncertaintyReduction = clampUnit(params.uncertaintyReduction) * 0.2;
const futureFailureRiskReduction = clampUnit(params.expectedUtility) * 0.3;
const tokenCost = clampUnit(params.estimatedCost) * 0.08;
const wallTimeCost = clampUnit(params.estimatedCost) * 0.05;
const disruptionCost =
clampUnit(params.failureRisk) * 0.08 + clampUnit(params.budgetPressure ?? 0) * 0.06;
return {
taskProgressGain,
uncertaintyReduction,
futureFailureRiskReduction,
tokenCost,
wallTimeCost,
disruptionCost,
total:
taskProgressGain +
uncertaintyReduction +
futureFailureRiskReduction -
tokenCost -
wallTimeCost -
disruptionCost,
expectedUtility: params.expectedUtility,
};
}
|