add additional llm cost

This commit is contained in:
Jicheng Lu 2025-03-21 17:32:29 -05:00
parent 08a8c872e0
commit ba12125a1e
4 changed files with 18 additions and 2 deletions

View file

@ -6,6 +6,7 @@ public class TokenStatsModel
public string Model { get; set; }
public string Prompt { get; set; }
public int PromptCount { get; set; }
public int CachedTokenCount { get; set; }
public int CompletionCount { get; set; }
public AgentLlmConfig LlmConfig { get; set; }
}

View file

@ -62,12 +62,22 @@ public class LlmModelSetting
/// </summary>
public int Dimension { get; set; }
public LlmCost AdditionalCost { get; set; } = new();
public override string ToString()
{
return $"[{Type}] {Name} {Endpoint}";
}
}
public class LlmCost
{
public float CachedPromptCost { get; set; } = 0f;
public float AudioPromptCost { get; set; } = 0f;
public float ReasoningCompletionCost { get; } = 0f;
public float AudioCompletionCost { get; } = 0f;
}
public enum LlmModelType
{
Text = 1,

View file

@ -41,9 +41,11 @@ public class TokenStatistics : ITokenStatistics
var settingsService = _services.GetRequiredService<ILlmProviderService>();
var settings = settingsService.GetSetting(stats.Provider, _model);
var deltaPromptCost = stats.PromptCount / 1000f * settings.PromptCost;
var deltaPromptCost = (stats.PromptCount - stats.CachedTokenCount) / 1000f * settings.PromptCost;
var deltaCachedPromptCost = stats.CachedTokenCount / 1000f * (settings.AdditionalCost?.CachedPromptCost ?? 0f);
var deltaCompletionCost = stats.CompletionCount / 1000f * settings.CompletionCost;
var deltaTotal = deltaPromptCost + deltaCompletionCost;
var deltaTotal = deltaPromptCost + deltaCachedPromptCost + deltaCompletionCost;
_promptCost += deltaPromptCost;
_completionCost += deltaCompletionCost;
@ -53,6 +55,8 @@ public class TokenStatistics : ITokenStatistics
stat.SetState("prompt_total", stats.PromptCount + inputCount, isNeedVersion: false, source: StateSource.Application);
var outputCount = int.Parse(stat.GetState("completion_total", "0"));
stat.SetState("completion_total", stats.CompletionCount + outputCount, isNeedVersion: false, source: StateSource.Application);
var cachedCount = int.Parse(stat.GetState("cached_token_total", "0"));
stat.SetState("cached_token_total", stats.CachedTokenCount + cachedCount, isNeedVersion: false, source: StateSource.Application);
// Total cost
var total_cost = float.Parse(stat.GetState("llm_total_cost", "0"));

View file

@ -84,6 +84,7 @@ public class ChatCompletionProvider : IChatCompletion
Provider = Provider,
Model = _model,
PromptCount = response.Value?.Usage?.InputTokenCount ?? 0,
CachedTokenCount = response.Value?.Usage?.InputTokenDetails?.CachedTokenCount ?? 0,
CompletionCount = response.Value?.Usage?.OutputTokenCount ?? 0
});
}