UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 3.58 kB
import{findRuntimeUsageLimitViolation,grantRuntimeUsageLimits,remainingRuntimeUsageQuota,resolveRuntimeUsageLimits}from"#harness/session-usage-limits.js";const HARNESS_TURN_USAGE_STATE_KEY=`eve.harness.turnUsage`,REPORTED_SESSION_USAGE_STATE_KEY=`eve.harness.reportedSessionUsage`,SESSION_RUNTIME_USAGE_LIMIT_KEY=`eve.harness.sessionRuntimeTokenLimit`,ZERO_TOKEN_USAGE={cacheReadTokens:0,cacheWriteTokens:0,costUsd:0,inputTokens:0,outputTokens:0,sawCost:!1};function getTurnUsageState(e){return e?.[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,costUsd:e.sawCost?e.costUsd:void 0,inputTokens:e.inputTokens,outputTokens:e.outputTokens}}function getSessionRuntimeUsageLimits(e){let t=e.state?.[SESSION_RUNTIME_USAGE_LIMIT_KEY];return resolveRuntimeUsageLimits({configured:configuredSessionUsageLimits(e),stored:t})}function bumpSessionRuntimeUsageLimits(e){let t=getSessionTokenUsage(e),n=grantRuntimeUsageLimits({configured:configuredSessionUsageLimits(e),usage:t});return{...e,state:{...e.state,[SESSION_RUNTIME_USAGE_LIMIT_KEY]:n}}}function getSessionRemainingUsageQuota(e){let t=getSessionTokenUsage(e),n=getSessionRuntimeUsageLimits(e);return remainingRuntimeUsageQuota({runtime:n,usage:t})}function getSessionUsageLimitViolation(e){let t=getSessionTokenUsage(e),n=getSessionRuntimeUsageLimits(e);return findRuntimeUsageLimitViolation({configured:configuredSessionUsageLimits(e),runtime:n,usage:t})}function configuredSessionUsageLimits(e){return{costUsd:e.limits?.maxTokenCostUsdPerSession,inputTokens:e.limits?.maxInputTokensPerSession,outputTokens:e.limits?.maxOutputTokensPerSession}}function takeSessionUsageDelta(e){let t=getSessionTokenUsage(e),n=e.state?.[REPORTED_SESSION_USAGE_STATE_KEY]??ZERO_TOKEN_USAGE;return{delta:{cacheReadTokens:t.cacheReadTokens-n.cacheReadTokens,cacheWriteTokens:t.cacheWriteTokens-n.cacheWriteTokens,costUsd:t.sawCost||n.sawCost?t.costUsd-n.costUsd:void 0,inputTokens:t.inputTokens-n.inputTokens,outputTokens:t.outputTokens-n.outputTokens},session:{...e,state:{...e.state,[REPORTED_SESSION_USAGE_STATE_KEY]:t}}}}function setTurnUsageState(e,t){return{...e,state:{...e.state,[HARNESS_TURN_USAGE_STATE_KEY]:t}}}function accumulateTurnUsage(e){let t=toTokenUsageDelta(e.usage),n=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(n,t)}}function accumulateSessionUsage(e){let t=toTokenUsageDelta(e.usage),n=e.previous??{...ZERO_TOKEN_USAGE,session:ZERO_TOKEN_USAGE,turnId:``};return{...n,session:addTokenUsage(n.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,n=e.outputTokens??0;return{cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,costUsd:e.costUsd??0,inputTokens:t,outputTokens:n,sawCost:e.costUsd!==void 0}}export{accumulateSessionUsage,accumulateTurnUsage,bumpSessionRuntimeUsageLimits,getSessionRemainingUsageQuota,getSessionRuntimeUsageLimits,getSessionTokenUsage,getSessionUsageLimitViolation,getTurnUsageState,setTurnUsageState,takeSessionUsageDelta,toUsage};