| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { getBudgetContinuationMessage } from '../utils/tokenBudget.js'
- const COMPLETION_THRESHOLD = 0.9
- const DIMINISHING_THRESHOLD = 500
- export type BudgetTracker = {
- continuationCount: number
- lastDeltaTokens: number
- lastGlobalTurnTokens: number
- startedAt: number
- }
- export function createBudgetTracker(): BudgetTracker {
- return {
- continuationCount: 0,
- lastDeltaTokens: 0,
- lastGlobalTurnTokens: 0,
- startedAt: Date.now(),
- }
- }
- type ContinueDecision = {
- action: 'continue'
- nudgeMessage: string
- continuationCount: number
- pct: number
- turnTokens: number
- budget: number
- }
- type StopDecision = {
- action: 'stop'
- completionEvent: {
- continuationCount: number
- pct: number
- turnTokens: number
- budget: number
- diminishingReturns: boolean
- durationMs: number
- } | null
- }
- export type TokenBudgetDecision = ContinueDecision | StopDecision
- export function checkTokenBudget(
- tracker: BudgetTracker,
- agentId: string | undefined,
- budget: number | null,
- globalTurnTokens: number,
- ): TokenBudgetDecision {
- if (agentId || budget === null || budget <= 0) {
- return { action: 'stop', completionEvent: null }
- }
- const turnTokens = globalTurnTokens
- const pct = Math.round((turnTokens / budget) * 100)
- const deltaSinceLastCheck = globalTurnTokens - tracker.lastGlobalTurnTokens
- const isDiminishing =
- tracker.continuationCount >= 3 &&
- deltaSinceLastCheck < DIMINISHING_THRESHOLD &&
- tracker.lastDeltaTokens < DIMINISHING_THRESHOLD
- if (!isDiminishing && turnTokens < budget * COMPLETION_THRESHOLD) {
- tracker.continuationCount++
- tracker.lastDeltaTokens = deltaSinceLastCheck
- tracker.lastGlobalTurnTokens = globalTurnTokens
- return {
- action: 'continue',
- nudgeMessage: getBudgetContinuationMessage(pct, turnTokens, budget),
- continuationCount: tracker.continuationCount,
- pct,
- turnTokens,
- budget,
- }
- }
- if (isDiminishing || tracker.continuationCount > 0) {
- return {
- action: 'stop',
- completionEvent: {
- continuationCount: tracker.continuationCount,
- pct,
- turnTokens,
- budget,
- diminishingReturns: isDiminishing,
- durationMs: Date.now() - tracker.startedAt,
- },
- }
- }
- return { action: 'stop', completionEvent: null }
- }
|