eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.55 kB
JavaScript
const HARNESS_TURN_USAGE_STATE_KEY=`eve.harness.turnUsage`,SESSION_TOKEN_BUDGET_BASELINE_KEY=`eve.harness.sessionTokenBudgetBaseline`,ZERO_TOKEN_USAGE={cacheReadTokens:0,cacheWriteTokens:0,costUsd:0,inputTokens:0,outputTokens:0,sawCost:!1};function getTurnUsageState(t){return t?.[HARNESS_TURN_USAGE_STATE_KEY]}function getSessionTokenUsage(e){return getTurnUsageState(e.state)?.session??ZERO_TOKEN_USAGE}function toUsage(e){return{cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,inputTokens:e.inputTokens,outputTokens:e.outputTokens}}const ZERO_BUDGET_BASELINE={inputTokens:0,outputTokens:0};function getSessionTokenBudgetBaseline(e){return e?.[SESSION_TOKEN_BUDGET_BASELINE_KEY]??ZERO_BUDGET_BASELINE}function extendSessionTokenBudget(e){let n=getSessionTokenUsage(e);return{...e,state:{...e.state,[SESSION_TOKEN_BUDGET_BASELINE_KEY]:{inputTokens:n.inputTokens,outputTokens:n.outputTokens}}}}function getSessionTokenLimitViolation(e){let t=getSessionTokenUsage(e),n=getSessionTokenBudgetBaseline(e.state),r=e.limits?.maxInputTokensPerSession,i=e.limits?.maxOutputTokensPerSession,a=t.inputTokens-n.inputTokens,o=t.outputTokens-n.outputTokens;return r!==void 0&&a>=r?{kind:`input`,limit:r,usedTokens:a}:i!==void 0&&o>=i?{kind:`output`,limit:i,usedTokens:o}:null}function setTurnUsageState(t,n){return{...t,state:{...t.state,[HARNESS_TURN_USAGE_STATE_KEY]:n}}}function accumulateTurnUsage(e){let t=toTokenUsageDelta(e.usage),r=e.previous?.session??ZERO_TOKEN_USAGE;return{...addTokenUsage(e.previous!==void 0&&e.previous.turnId===e.turnId?e.previous:ZERO_TOKEN_USAGE,t),turnId:e.turnId,session:addTokenUsage(r,t)}}function accumulateSessionUsage(e){let t=toTokenUsageDelta(e.usage),r=e.previous??{...ZERO_TOKEN_USAGE,session:ZERO_TOKEN_USAGE,turnId:``};return{...r,session:addTokenUsage(r.session,t)}}function addTokenUsage(e,t){return{cacheReadTokens:e.cacheReadTokens+t.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens+t.cacheWriteTokens,costUsd:e.costUsd+t.costUsd,inputTokens:e.inputTokens+t.inputTokens,outputTokens:e.outputTokens+t.outputTokens,sawCost:e.sawCost||t.sawCost}}function toTokenUsageDelta(e){if(e===void 0)return ZERO_TOKEN_USAGE;let t=e.inputTokens??0,r=e.outputTokens??0;return{cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,costUsd:e.costUsd??0,inputTokens:t,outputTokens:r,sawCost:e.costUsd!==void 0}}export{accumulateSessionUsage,accumulateTurnUsage,extendSessionTokenBudget,getSessionTokenLimitViolation,getSessionTokenUsage,getTurnUsageState,setTurnUsageState,toUsage};