using Microsoft.Extensions.Logging;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Services;
using Yi.Framework.AiHub.Domain.Entities.Model;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.AiHub.Domain.Managers;
///
/// 模型管理器
///
public class ModelManager : DomainService
{
private readonly ISqlSugarRepository _aiModelRepository;
private readonly IDistributedCache, string> _distributedCache;
private readonly ILogger _logger;
private const string PREMIUM_MODEL_IDS_CACHE_KEY = "PremiumModelIds";
public ModelManager(
ISqlSugarRepository aiModelRepository,
IDistributedCache, string> distributedCache,
ILogger logger)
{
_aiModelRepository = aiModelRepository;
_distributedCache = distributedCache;
_logger = logger;
}
///
/// 获取所有尊享模型ID列表(使用分布式缓存,10分钟过期)
///
/// 尊享模型ID列表
public async Task> GetPremiumModelIdsAsync()
{
var output = await _distributedCache.GetOrAddAsync(
PREMIUM_MODEL_IDS_CACHE_KEY,
async () =>
{
// 从数据库查询
var premiumModelIds = await _aiModelRepository._DbQueryable
.Where(x => x.IsPremium)
.Select(x => x.ModelId)
.ToListAsync();
return premiumModelIds;
},
() => new Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
}
);
return output ?? new List();
}
///
/// 判断指定模型是否为尊享模型
///
/// 模型ID
/// 是否为尊享模型
public async Task IsPremiumModelAsync(string modelId)
{
if (string.IsNullOrWhiteSpace(modelId))
{
return false;
}
var premiumModelIds = await GetPremiumModelIdsAsync();
return premiumModelIds.Contains(modelId);
}
///
/// 清除尊享模型ID缓存
///
public async Task ClearPremiumModelIdsCacheAsync()
{
await _distributedCache.RemoveAsync(PREMIUM_MODEL_IDS_CACHE_KEY);
_logger.LogInformation("已清除尊享模型ID分布式缓存");
}
}