namespace Agent.Planner; public readonly record struct TokenEstimate(long Optimistic, long MostLikely, long Pessimistic) { public double ExpectedTokens => (Optimistic + (4d * MostLikely) + Pessimistic) / 6d; public double VarianceTokens => Math.Pow((Pessimistic - Optimistic) / 6d, 2); public void Validate(TokenBudgetClass budgetClass) { if (Optimistic <= 0 || Optimistic > MostLikely || MostLikely > Pessimistic || Pessimistic > budgetClass.MaxTokens()) { throw new PlannerValidationException("Estimate must satisfy 0 < O <= M <= P <= token budget."); } } }