summaryrefslogtreecommitdiff
path: root/src/Agent.Planner/TokenEstimate.cs
blob: 4b8920a4af0a49a95609bd99bc80d97ce307539d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.");
        }
    }
}