Files
Yi.Admin/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs

64 lines
2.1 KiB
C#
Raw Normal View History

2025-06-27 22:13:26 +08:00
using Mapster;
using SqlSugar;
2025-06-21 13:02:38 +08:00
using Volo.Abp.Domain.Entities.Auditing;
2025-07-17 23:10:26 +08:00
using Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAi;
2025-06-27 22:13:26 +08:00
using Yi.Framework.AiHub.Domain.Entities.ValueObjects;
using Yi.Framework.AiHub.Domain.Shared.Dtos;
2025-07-03 22:31:39 +08:00
using Yi.Framework.AiHub.Domain.Shared.Enums;
2025-06-21 13:02:38 +08:00
2025-06-27 22:13:26 +08:00
namespace Yi.Framework.AiHub.Domain.Entities.Chat;
2025-06-21 13:02:38 +08:00
[SugarTable("Ai_Message")]
2025-06-21 13:15:14 +08:00
[SugarIndex($"index_{{table}}_{nameof(UserId)}_{nameof(SessionId)}",
$"{nameof(UserId)}", OrderByType.Desc,
$"{nameof(SessionId)}", OrderByType.Desc
)]
2025-06-21 13:02:38 +08:00
public class MessageAggregateRoot : FullAuditedAggregateRoot<Guid>
{
public MessageAggregateRoot()
{
}
2025-07-03 22:31:39 +08:00
public MessageAggregateRoot(Guid userId, Guid? sessionId, string content, string role, string modelId,
2025-07-17 23:10:26 +08:00
ThorUsageResponse? tokenUsage)
2025-06-21 13:02:38 +08:00
{
UserId = userId;
SessionId = sessionId;
Content = content;
Role = role;
ModelId = modelId;
2025-06-27 22:13:26 +08:00
if (tokenUsage is not null)
{
2025-07-22 10:40:23 +08:00
long inputTokenCount = tokenUsage.PromptTokens
?? tokenUsage.InputTokens
?? 0;
long outputTokenCount = tokenUsage.CompletionTokens
?? tokenUsage.OutputTokens
?? 0;
2025-07-17 23:10:26 +08:00
this.TokenUsage = new TokenUsageValueObject
{
2025-07-22 10:40:23 +08:00
OutputTokenCount = outputTokenCount,
InputTokenCount = inputTokenCount,
2025-07-17 23:10:26 +08:00
TotalTokenCount = tokenUsage.TotalTokens ?? 0
};
2025-06-27 22:13:26 +08:00
}
2025-07-03 22:31:39 +08:00
this.MessageType = sessionId is null ? MessageTypeEnum.Api : MessageTypeEnum.Web;
2025-06-21 13:02:38 +08:00
}
public Guid UserId { get; set; }
2025-07-03 22:31:39 +08:00
public Guid? SessionId { get; set; }
2025-06-27 22:13:26 +08:00
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
2025-07-18 23:12:20 +08:00
public string? Content { get; set; }
2025-06-27 22:13:26 +08:00
2025-06-21 13:02:38 +08:00
public string Role { get; set; }
public string ModelId { get; set; }
2025-06-27 22:13:26 +08:00
public string? Remark { get; set; }
2025-07-03 22:31:39 +08:00
[SugarColumn(IsOwnsOne = true)] public TokenUsageValueObject TokenUsage { get; set; } = new TokenUsageValueObject();
public MessageTypeEnum MessageType { get; set; }
2025-06-21 13:02:38 +08:00
}