diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs
index be8e1dce..a33a9ccc 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs
@@ -94,7 +94,7 @@ public class AiChatService : ApplicationService
///
///
///
- public async Task PostSendAsync([FromBody] ThorChatCompletionsRequest input, [FromRoute] Guid sessionId,
+ public async Task PostSendAsync([FromBody] ThorChatCompletionsRequest input, [FromRoute] Guid? sessionId,
CancellationToken cancellationToken)
{
//除了免费模型,其他的模型都要校验
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 752621b4..5d863c1b 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
@@ -19,7 +19,7 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot
{
}
- public MessageAggregateRoot(Guid userId, Guid? sessionId, string content, string role, string modelId,
+ public MessageAggregateRoot(Guid? userId, Guid? sessionId, string content, string role, string modelId,
ThorUsageResponse? tokenUsage)
{
UserId = userId;
@@ -48,7 +48,7 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot
this.MessageType = sessionId is null ? MessageTypeEnum.Api : MessageTypeEnum.Web;
}
- public Guid UserId { get; set; }
+ public Guid? UserId { get; set; }
public Guid? SessionId { get; set; }
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs
index ad0ad586..6f9e6aa3 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs
@@ -13,7 +13,7 @@ public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot
{
}
- public UsageStatisticsAggregateRoot(Guid userId, string modelId)
+ public UsageStatisticsAggregateRoot(Guid? userId, string modelId)
{
UserId = userId;
ModelId = modelId;
@@ -22,7 +22,7 @@ public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot
///
/// 用户id
///
- public Guid UserId { get; set; }
+ public Guid? UserId { get; set; }
///
/// 哪个模型
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
index 4f9c3425..70f47354 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
@@ -242,25 +242,23 @@ public class AiGateWayManager : DomainService
await outputTask;
- if (userId is not null)
- {
- await _aiMessageManager.CreateUserMessageAsync(userId.Value, sessionId,
- new MessageInputDto
- {
- Content = request.Messages?.LastOrDefault()?.Content ?? string.Empty,
- ModelId = request.Model,
- TokenUsage = tokenUsage,
- });
- await _aiMessageManager.CreateSystemMessageAsync(userId.Value, sessionId,
- new MessageInputDto
- {
- Content = backupSystemContent.ToString(),
- ModelId = request.Model,
- TokenUsage = tokenUsage
- });
+ await _aiMessageManager.CreateUserMessageAsync(userId, sessionId,
+ new MessageInputDto
+ {
+ Content = request.Messages?.LastOrDefault()?.Content ?? string.Empty,
+ ModelId = request.Model,
+ TokenUsage = tokenUsage,
+ });
- await _usageStatisticsManager.SetUsageAsync(userId.Value, request.Model, tokenUsage);
- }
+ await _aiMessageManager.CreateSystemMessageAsync(userId, sessionId,
+ new MessageInputDto
+ {
+ Content = backupSystemContent.ToString(),
+ ModelId = request.Model,
+ TokenUsage = tokenUsage
+ });
+
+ await _usageStatisticsManager.SetUsageAsync(userId, request.Model, tokenUsage);
}
}
\ No newline at end of file
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs
index 38c14605..df8e7586 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs
@@ -23,7 +23,7 @@ public class AiMessageManager : DomainService
///
///
///
- public async Task CreateSystemMessageAsync(Guid userId, Guid? sessionId, MessageInputDto input)
+ public async Task CreateSystemMessageAsync(Guid? userId, Guid? sessionId, MessageInputDto input)
{
input.Role = "system";
var message = new MessageAggregateRoot(userId, sessionId, input.Content, input.Role, input.ModelId,input.TokenUsage);
@@ -37,7 +37,7 @@ public class AiMessageManager : DomainService
///
///
///
- public async Task CreateUserMessageAsync(Guid userId, Guid? sessionId, MessageInputDto input)
+ public async Task CreateUserMessageAsync(Guid? userId, Guid? sessionId, MessageInputDto input)
{
input.Role = "user";
var message = new MessageAggregateRoot(userId, sessionId, input.Content, input.Role, input.ModelId,input.TokenUsage);
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs
index 66ae6f65..ef6613c3 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs
@@ -18,7 +18,7 @@ public class UsageStatisticsManager : DomainService
private IDistributedLockProvider DistributedLock =>
LazyServiceProvider.LazyGetRequiredService();
- public async Task SetUsageAsync(Guid userId, string modelId, ThorUsageResponse? tokenUsage)
+ public async Task SetUsageAsync(Guid? userId, string modelId, ThorUsageResponse? tokenUsage)
{
long inputTokenCount = tokenUsage?.PromptTokens
?? tokenUsage.InputTokens
@@ -28,7 +28,7 @@ public class UsageStatisticsManager : DomainService
?? tokenUsage.OutputTokens
?? 0;
- await using (await DistributedLock.AcquireLockAsync($"UsageStatistics:{userId.ToString()}"))
+ await using (await DistributedLock.AcquireLockAsync($"UsageStatistics:{userId?.ToString()}"))
{
var entity = await _repository._DbQueryable.FirstAsync(x => x.UserId == userId && x.ModelId == modelId);
//存在数据,更细