From 593b3a4cdd7f4c632e06db0e29914c35a53a0d43 Mon Sep 17 00:00:00 2001 From: chenchun Date: Sat, 11 Oct 2025 23:27:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=B8=8EAnthropic=E8=BF=94=E5=9B=9E=E7=9A=84Token=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=80=BB=E8=BE=91=EF=BC=8C=E9=81=BF=E5=85=8D=E9=9B=B6?= =?UTF-8?q?=E5=80=BC=E8=A6=86=E7=9B=96=E5=B9=B6=E6=94=AF=E6=8C=81=E7=BC=93?= =?UTF-8?q?=E5=AD=98Token=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Anthropic/AnthropicChatCompletionDto.cs | 22 ++++++++++--------- .../Entities/Chat/MessageAggregateRoot.cs | 19 +++++++++++----- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Dtos/Anthropic/AnthropicChatCompletionDto.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Dtos/Anthropic/AnthropicChatCompletionDto.cs index 5e9fa1b3..50d5fc4c 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Dtos/Anthropic/AnthropicChatCompletionDto.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Dtos/Anthropic/AnthropicChatCompletionDto.cs @@ -18,15 +18,16 @@ public class AnthropicStreamDto [JsonPropertyName("usage")] public AnthropicCompletionDtoUsage? Usage { get; set; } [JsonPropertyName("error")] public AnthropicStreamErrorDto? Error { get; set; } - + public ThorUsageResponse TokenUsage => new ThorUsageResponse { - PromptTokens = Usage?.InputTokens, - InputTokens = Usage?.InputTokens, + PromptTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens, + InputTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens, OutputTokens = Usage?.OutputTokens, InputTokensDetails = null, CompletionTokens = Usage?.OutputTokens, - TotalTokens = Usage?.InputTokens + Usage?.OutputTokens, + TotalTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens + + Usage?.OutputTokens, PromptTokensDetails = null, CompletionTokensDetails = null }; @@ -95,12 +96,13 @@ public class AnthropicChatCompletionDto public ThorUsageResponse TokenUsage => new ThorUsageResponse { - PromptTokens = Usage?.InputTokens, - InputTokens = Usage?.InputTokens, + PromptTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens, + InputTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens, OutputTokens = Usage?.OutputTokens, InputTokensDetails = null, CompletionTokens = Usage?.OutputTokens, - TotalTokens = Usage?.InputTokens + Usage?.OutputTokens, + TotalTokens = Usage?.InputTokens + Usage?.CacheCreationInputTokens + Usage?.CacheCreationInputTokens + + Usage?.OutputTokens, PromptTokensDetails = null, CompletionTokensDetails = null }; @@ -119,9 +121,9 @@ public class AnthropicChatCompletionDtoContent public object? input { get; set; } [JsonPropertyName("thinking")] public string? Thinking { get; set; } - + [JsonPropertyName("partial_json")] public string? PartialJson { get; set; } - + public string? signature { get; set; } } @@ -142,6 +144,6 @@ public class AnthropicCompletionDtoUsage public class AnthropicServerToolUse { - [JsonPropertyName("web_search_requests")] + [JsonPropertyName("web_search_requests")] public int? WebSearchRequests { get; set; } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs index 6b0d7ed8..fe967daa 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs @@ -29,13 +29,20 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot ModelId = modelId; if (tokenUsage is not null) { - long inputTokenCount = tokenUsage.PromptTokens - ?? tokenUsage.InputTokens - ?? 0; + long inputTokenCount = + (tokenUsage.PromptTokens.HasValue && tokenUsage.PromptTokens.Value != 0) + ? tokenUsage.PromptTokens.Value + : (tokenUsage.InputTokens.HasValue && tokenUsage.InputTokens.Value != 0) + ? tokenUsage.InputTokens.Value + : 0; + + long outputTokenCount = + (tokenUsage.CompletionTokens.HasValue && tokenUsage.CompletionTokens.Value != 0) + ? tokenUsage.CompletionTokens.Value + : (tokenUsage.OutputTokens.HasValue && tokenUsage.OutputTokens.Value != 0) + ? tokenUsage.OutputTokens.Value + : 0; - long outputTokenCount = tokenUsage.CompletionTokens - ?? tokenUsage.OutputTokens - ?? 0; this.TokenUsage = new TokenUsageValueObject {