Skip to content

Commit 23cbe41

Browse files
authored
Merge pull request #963 from iceljc/master
add additional llm cost
2 parents 08a8c87 + bdc1529 commit 23cbe41

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

src/Infrastructure/BotSharp.Abstraction/Conversations/Models/TokenStatsModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class TokenStatsModel
66
public string Model { get; set; }
77
public string Prompt { get; set; }
88
public int PromptCount { get; set; }
9+
public int CachedPromptCount { get; set; }
910
public int CompletionCount { get; set; }
1011
public AgentLlmConfig LlmConfig { get; set; }
1112
}

src/Infrastructure/BotSharp.Abstraction/MLTasks/Settings/LlmModelSetting.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,22 @@ public class LlmModelSetting
6262
/// </summary>
6363
public int Dimension { get; set; }
6464

65+
public LlmCost AdditionalCost { get; set; } = new();
66+
6567
public override string ToString()
6668
{
6769
return $"[{Type}] {Name} {Endpoint}";
6870
}
6971
}
7072

73+
public class LlmCost
74+
{
75+
public float CachedPromptCost { get; set; } = 0f;
76+
public float AudioPromptCost { get; set; } = 0f;
77+
public float ReasoningCompletionCost { get; } = 0f;
78+
public float AudioCompletionCost { get; } = 0f;
79+
}
80+
7181
public enum LlmModelType
7282
{
7383
Text = 1,

src/Infrastructure/BotSharp.Core/Conversations/Services/TokenStatistics.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ public void AddToken(TokenStatsModel stats, RoleDialogModel message)
4141
var settingsService = _services.GetRequiredService<ILlmProviderService>();
4242
var settings = settingsService.GetSetting(stats.Provider, _model);
4343

44-
var deltaPromptCost = stats.PromptCount / 1000f * settings.PromptCost;
44+
var deltaPromptCost = (stats.PromptCount - stats.CachedPromptCount) / 1000f * settings.PromptCost;
45+
var deltaCachedPromptCost = stats.CachedPromptCount / 1000f * (settings.AdditionalCost?.CachedPromptCost ?? 0f);
4546
var deltaCompletionCost = stats.CompletionCount / 1000f * settings.CompletionCost;
46-
var deltaTotal = deltaPromptCost + deltaCompletionCost;
47+
48+
var deltaTotal = deltaPromptCost + deltaCachedPromptCost + deltaCompletionCost;
4749
_promptCost += deltaPromptCost;
4850
_completionCost += deltaCompletionCost;
4951

@@ -53,6 +55,8 @@ public void AddToken(TokenStatsModel stats, RoleDialogModel message)
5355
stat.SetState("prompt_total", stats.PromptCount + inputCount, isNeedVersion: false, source: StateSource.Application);
5456
var outputCount = int.Parse(stat.GetState("completion_total", "0"));
5557
stat.SetState("completion_total", stats.CompletionCount + outputCount, isNeedVersion: false, source: StateSource.Application);
58+
var cachedCount = int.Parse(stat.GetState("cached_prompt_total", "0"));
59+
stat.SetState("cached_prompt_total", stats.CachedPromptCount + cachedCount, isNeedVersion: false, source: StateSource.Application);
5660

5761
// Total cost
5862
var total_cost = float.Parse(stat.GetState("llm_total_cost", "0"));

src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public async Task<RoleDialogModel> GetChatCompletions(Agent agent, List<RoleDial
8484
Provider = Provider,
8585
Model = _model,
8686
PromptCount = response.Value?.Usage?.InputTokenCount ?? 0,
87+
CachedPromptCount = response.Value?.Usage?.InputTokenDetails?.CachedTokenCount ?? 0,
8788
CompletionCount = response.Value?.Usage?.OutputTokenCount ?? 0
8889
});
8990
}

0 commit comments

Comments
 (0)