UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

86 lines (85 loc) • 3.49 kB
export function buildCumulativeStats(base, acc) { return { ...base, tokens: acc.tokens, turns: acc.turns, promptTokens: acc.promptTokens || undefined, totalInputTokens: acc.totalInputTokens || undefined, cachedTokens: acc.cachedTokens || undefined, outputTokens: acc.outputTokens || undefined, cacheWriteTokens: acc.cacheWriteTokens || undefined, cacheWriteTokensLong: acc.cacheWriteTokensLong || undefined, cacheHitRate: acc.totalInputTokens > 0 ? Math.min(1, acc.cachedTokens / acc.totalInputTokens) : undefined, costMicroUsd: acc.anyLegUnpriced ? undefined : acc.costMicroUsd, nested: acc.nested.tokens > 0 || acc.nested.tasks > 0 ? { tokens: acc.nested.tokens, turns: acc.nested.turns, tasks: acc.nested.tasks, costMicroUsd: acc.nested.costMicroUsd || undefined } : undefined, costBreakdown: acc.anyLegUnpriced ? undefined : { llmRootMicroUsd: acc.llmRootMicroUsd, nestedSubagentMicroUsd: acc.nested.costMicroUsd, memoryConsolidationMicroUsd: 0, compactionMicroUsd: acc.compactionMicroUsd, }, humanReview: acc.humanReview.count > 0 ? { count: acc.humanReview.count, totalWaitMs: acc.humanReview.totalWaitMs, gates: acc.humanReview.gates } : undefined, }; } export function createCumulativeStatsTracker() { let legs = 0; const acc = { tokens: 0, turns: 0, promptTokens: 0, totalInputTokens: 0, cachedTokens: 0, outputTokens: 0, cacheWriteTokens: 0, cacheWriteTokensLong: 0, costMicroUsd: 0, anyLegUnpriced: false, llmRootMicroUsd: 0, compactionMicroUsd: 0, nested: { tokens: 0, turns: 0, tasks: 0, costMicroUsd: 0 }, humanReview: { count: 0, totalWaitMs: 0, gates: [] }, }; return { get legs() { return legs; }, add(s) { legs += 1; acc.tokens += s.tokens; acc.turns += s.turns; acc.promptTokens += s.promptTokens ?? 0; acc.totalInputTokens += s.totalInputTokens ?? 0; acc.cachedTokens += s.cachedTokens ?? 0; acc.outputTokens += s.outputTokens ?? 0; acc.cacheWriteTokens += s.cacheWriteTokens ?? 0; acc.cacheWriteTokensLong += s.cacheWriteTokensLong ?? 0; acc.costMicroUsd = (acc.costMicroUsd ?? 0) + (s.costMicroUsd ?? 0); if (s.costMicroUsd === undefined) acc.anyLegUnpriced = true; if (s.costBreakdown) { acc.llmRootMicroUsd += s.costBreakdown.llmRootMicroUsd; acc.compactionMicroUsd += s.costBreakdown.compactionMicroUsd; } if (s.humanReview) { acc.humanReview.count += s.humanReview.count; acc.humanReview.totalWaitMs += s.humanReview.totalWaitMs; acc.humanReview.gates.push(...s.humanReview.gates); } if (s.nested) { acc.nested.tokens += s.nested.tokens; acc.nested.turns += s.nested.turns; acc.nested.tasks += s.nested.tasks; acc.nested.costMicroUsd += s.nested.costMicroUsd ?? 0; } }, build(base) { return buildCumulativeStats(base, acc); }, }; }