UNPKG

crewai-ts

Version:

TypeScript port of crewAI for agent-based workflows

88 lines (87 loc) 3.25 kB
import { EventEmitter } from 'events'; export class TestFlowScheduler extends EventEmitter { resourceUsage; options; metrics; constructor(options) { super(); this.options = options; this.metrics = { averageFlowExecutionTime: 0, maxFlowExecutionTime: 0, minFlowExecutionTime: Infinity, completedFlows: 0, failedFlows: 0 }; this.resourceUsage = { cpu: 0, memory: 0, io: 0, network: 0, availableCpu: 0, availableMemory: 0, maxConcurrentIo: 0, maxConcurrentNetwork: 0 }; this.initializeResources(); } initializeResources() { this.resourceUsage = { cpu: 0, memory: 0, io: 0, network: 0, availableCpu: this.options.resourceLimits?.availableCpu ?? 4, availableMemory: this.options.resourceLimits?.availableMemory ?? 1024, maxConcurrentIo: this.options.resourceLimits?.maxConcurrentIo ?? 10, maxConcurrentNetwork: this.options.resourceLimits?.maxConcurrentNetwork ?? 10 }; } updateResourceUsage(flow, isStarting) { const resourceUsage = flow.resourceUsage || flow.estimatedResourceUsage; if (!resourceUsage) return; const { cpu, memory, io, network } = resourceUsage; if (isStarting) { this.resourceUsage.cpu += cpu; this.resourceUsage.memory += memory; this.resourceUsage.io += io; this.resourceUsage.network += network; } else { this.resourceUsage.cpu = Math.max(0, (this.resourceUsage.cpu || 0) - (cpu || 0)); this.resourceUsage.memory = Math.max(0, (this.resourceUsage.memory || 0) - (memory || 0)); this.resourceUsage.io = Math.max(0, (this.resourceUsage.io || 0) - (io || 0)); this.resourceUsage.network = Math.max(0, (this.resourceUsage.network || 0) - (network || 0)); } } getResourceUsage() { const memoryUsage = process.memoryUsage(); return { cpu: 0, memory: memoryUsage ? memoryUsage.heapUsed / 1024 / 1024 : 0, io: 0, network: 0, availableCpu: this.resourceUsage.availableCpu || 4, availableMemory: this.resourceUsage.availableMemory || 1024, maxConcurrentIo: this.resourceUsage.maxConcurrentIo || 10, maxConcurrentNetwork: this.resourceUsage.maxConcurrentNetwork || 10 }; } calculateResourceUsage(flow) { const usage = flow.resourceUsage || flow.estimatedResourceUsage; return usage || { cpu: 0, memory: 0, io: 0, network: 0 }; } canScheduleFlow(flow) { const usage = this.calculateResourceUsage(flow); return ((this.resourceUsage.availableCpu || 0) >= usage.cpu && (this.resourceUsage.availableMemory || 0) >= usage.memory && (this.resourceUsage.maxConcurrentIo || 0) >= usage.io && (this.resourceUsage.maxConcurrentNetwork || 0) >= usage.network); } }