UNPKG

@autobe/agent

Version:

AI backend server code generator

196 lines 8.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoBeTokenUsage = void 0; const AutoBeTokenUsageComponent_1 = require("./AutoBeTokenUsageComponent"); /** * Comprehensive token usage tracker for the AutoBe vibe coding system. * * This class provides centralized tracking and management of token consumption * across all AI agents in the automated development pipeline. It captures * detailed token usage statistics for each processing phase - from initial * requirements analysis through final implementation - enabling cost * monitoring, performance optimization, and resource utilization analysis. * * The token usage data includes both input tokens (with cache efficiency) and * output tokens (with generation type breakdowns), providing insights into AI * processing efficiency and helping optimize the balance between computational * costs and output quality. * * @author SunRabbit123 */ class AutoBeTokenUsage { /** * Aggregated token usage statistics across all agents. * * Provides a unified view of token consumption by combining data from all * processing phases in the vibe coding pipeline. This computed property * dynamically calculates the sum of all agent components (facade, analyze, * prisma, interface, test, realize) whenever accessed, ensuring the aggregate * always reflects the current state of token usage. * * The aggregation performs element-wise addition across all token metrics, * including total counts, input breakdowns with cache statistics, and output * categorizations by generation type. This comprehensive view enables overall * cost assessment and resource utilization analysis for the entire automated * development session. */ get aggregate() { return AutoBeTokenUsage.keys() .reduce((acc, cur) => AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(acc, this[cur]), new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent()) .toJSON(); } constructor(props) { if (props === undefined) { this.facade = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); this.analyze = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); this.prisma = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); this.interface = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); this.test = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); this.realize = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(); return; } else if (props instanceof AutoBeTokenUsage) { this.facade = props.facade; this.analyze = props.analyze; this.prisma = props.prisma; this.interface = props.interface; this.test = props.test; this.realize = props.realize; } else { this.facade = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.facade); this.analyze = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.analyze); this.prisma = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.prisma); this.interface = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.interface); this.test = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.test); this.realize = new AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent(props.realize); } } assign(props) { this.facade.assign(props.facade); this.analyze.assign(props.analyze); this.prisma.assign(props.prisma); this.interface.assign(props.interface); this.test.assign(props.test); this.realize.assign(props.realize); } /** * Serialize token usage data to JSON format. * * Converts the internal token usage representation to the standardized * IAutoBeTokenUsageJson format, suitable for persistence, transmission, or * external analysis. The serialized data maintains the complete structure * including all agent phases and detailed token breakdowns. * * @returns JSON representation of token usage statistics */ toJSON() { return { aggregate: this.aggregate, facade: this.facade.toJSON(), analyze: this.analyze.toJSON(), prisma: this.prisma.toJSON(), interface: this.interface.toJSON(), test: this.test.toJSON(), realize: this.realize.toJSON(), }; } /* ----------------------------------------------------------- OPERATORS ----------------------------------------------------------- */ /** * Record token usage for specific processing stages. * * Updates token consumption statistics for one or more agent phases based on * the provided usage data. This method allows selective recording of token * usage for specific stages, enabling fine-grained tracking during * multi-phase processing or when certain agents are invoked multiple times. * * @example * ```ts * tokenUsage.record( * { total: 150, input: { total: 100, cached: 20 }, output: { total: 50, ... } }, * ['analyze', 'prisma'] * ); * ```; * * @param usage - Token usage component data to record * @param additionalStages - Array of stage names to update with the usage * data */ record(usage, additionalStages = []) { additionalStages.forEach((stage) => { this[stage].increment(usage); }); } /** * Increment current token usage with data from another instance. * * Adds token usage statistics from another AutoBeTokenUsage instance to this * one, updating all agent phases simultaneously. This method is useful for * combining token usage from parallel processing, multiple runs, or when * aggregating statistics from distributed agent executions. * * @param usage - AutoBeTokenUsage instance to add to current statistics * @returns This instance for method chaining */ increment(usage) { AutoBeTokenUsage.keys().forEach((key) => { this[key].increment(usage[key]); }); return this; } /** @internal */ decrement(usage) { AutoBeTokenUsage.keys().forEach((key) => { this[key].decrement(usage[key]); }); return this; } /** * Create a new instance combining token usage from two sources. * * Performs element-wise addition of token usage statistics from two * AutoBeTokenUsage instances, creating a new instance with the combined * totals. This static method is useful for aggregating token usage across * multiple vibe coding sessions or when merging statistics from different * execution contexts. * * @param usageA - First token usage instance * @param usageB - Second token usage instance * @returns New instance with combined token usage statistics */ static plus(usageA, usageB) { return new AutoBeTokenUsage({ facade: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.facade, usageB.facade), analyze: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.analyze, usageB.analyze), prisma: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.prisma, usageB.prisma), interface: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.interface, usageB.interface), test: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.test, usageB.test), realize: AutoBeTokenUsageComponent_1.AutoBeTokenUsageComponent.plus(usageA.realize, usageB.realize), }); } /** * Get all agent phase keys for iteration. * * Returns a readonly array of all agent phase names used in the vibe coding * system. This internal utility method ensures consistent iteration over all * token usage components when performing operations like aggregation or * serialization. * * @returns Readonly array of agent phase keys * @internal */ static keys() { return [ "facade", "analyze", "prisma", "interface", "test", "realize", ]; } } exports.AutoBeTokenUsage = AutoBeTokenUsage; //# sourceMappingURL=AutoBeTokenUsage.js.map