Browse Source

feat(ai): check state of use workspace

pull/1421/head
colin 2 months ago
parent
commit
4f603429f4
  1. 50
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Agent/LINGYUN/Abp/AI/Agent/ChatClientAgentFactory.cs
  2. 5
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN.Abp.AI.Core.csproj
  3. 20
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN/Abp/AI/ChatClientFactory.cs
  4. 19
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN/Abp/AI/KernelFactory.cs

50
aspnet-core/modules/ai/LINGYUN.Abp.AI.Agent/LINGYUN/Abp/AI/Agent/ChatClientAgentFactory.cs

@ -5,24 +5,29 @@ using Microsoft.Extensions.Localization;
using System.Collections.Concurrent;
using System.Threading.Tasks;
using Volo.Abp.AI;
using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
namespace LINGYUN.Abp.AI.Agent;
public class ChatClientAgentFactory : IChatClientAgentFactory, ISingletonDependency
{
private readonly static ConcurrentDictionary<string, ChatClientAgent> _chatClientAgentCache = new();
private readonly IChatClientFactory _chatClientFactory;
private readonly IStringLocalizerFactory _stringLocalizerFactory;
private readonly IWorkspaceDefinitionManager _workspaceDefinitionManager;
protected IChatClientFactory ChatClientFactory { get; }
protected IStringLocalizerFactory StringLocalizerFactory { get; }
protected IWorkspaceDefinitionManager WorkspaceDefinitionManager { get; }
protected ISimpleStateCheckerManager<WorkspaceDefinition> StateCheckerManager { get; }
public ChatClientAgentFactory(
IChatClientFactory chatClientFactory,
IStringLocalizerFactory stringLocalizerFactory,
IWorkspaceDefinitionManager workspaceDefinitionManager)
IWorkspaceDefinitionManager workspaceDefinitionManager,
ISimpleStateCheckerManager<WorkspaceDefinition> stateCheckerManager)
{
_chatClientFactory = chatClientFactory;
_stringLocalizerFactory = stringLocalizerFactory;
_workspaceDefinitionManager = workspaceDefinitionManager;
ChatClientFactory = chatClientFactory;
StringLocalizerFactory = stringLocalizerFactory;
WorkspaceDefinitionManager = workspaceDefinitionManager;
StateCheckerManager = stateCheckerManager;
}
public async virtual Task<ChatClientAgent> CreateAsync<TWorkspace>()
@ -33,14 +38,19 @@ public class ChatClientAgentFactory : IChatClientAgentFactory, ISingletonDepende
return chatClientAgent;
}
var chatClient = await _chatClientFactory.CreateAsync<TWorkspace>();
var chatClient = await ChatClientFactory.CreateAsync<TWorkspace>();
var workspaceDefine = await _workspaceDefinitionManager.GetOrNullAsync(workspace);
var workspaceDefine = await WorkspaceDefinitionManager.GetOrNullAsync(workspace);
if (workspaceDefine != null)
{
await CheckWorkspaceStateAsync(workspaceDefine);
}
string? description = null;
if (workspaceDefine?.Description != null)
{
description = workspaceDefine.Description.Localize(_stringLocalizerFactory);
description = workspaceDefine.Description.Localize(StringLocalizerFactory);
}
chatClientAgent = chatClient.CreateAIAgent(
@ -59,13 +69,16 @@ public class ChatClientAgentFactory : IChatClientAgentFactory, ISingletonDepende
{
return chatClientAgent;
}
var workspaceDefine = await _workspaceDefinitionManager.GetAsync(workspace);
var chatClient = await _chatClientFactory.CreateAsync(workspace);
var workspaceDefine = await WorkspaceDefinitionManager.GetAsync(workspace);
await CheckWorkspaceStateAsync(workspaceDefine);
var chatClient = await ChatClientFactory.CreateAsync(workspace);
string? description = null;
if (workspaceDefine.Description != null)
{
description = workspaceDefine.Description.Localize(_stringLocalizerFactory);
description = workspaceDefine.Description.Localize(StringLocalizerFactory);
}
chatClientAgent = chatClient.CreateAIAgent(
@ -77,4 +90,15 @@ public class ChatClientAgentFactory : IChatClientAgentFactory, ISingletonDepende
return chatClientAgent;
}
protected async virtual Task CheckWorkspaceStateAsync(WorkspaceDefinition workspace)
{
if (!await StateCheckerManager.IsEnabledAsync(workspace))
{
throw new AbpAuthorizationException(
$"Workspace is not enabled: {workspace.Name}!",
AbpAIErrorCodes.WorkspaceIsNotEnabled)
.WithData("Workspace", workspace.Name);
}
}
}

5
aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN.Abp.AI.Core.csproj

@ -14,6 +14,11 @@
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<None Remove="LINGYUN\Abp\AI\Localization\Resources\*.json" />
<EmbeddedResource Include="LINGYUN\Abp\AI\Localization\Resources\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AI" />
<PackageReference Include="Volo.Abp.Localization" />

20
aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN/Abp/AI/ChatClientFactory.cs

@ -5,21 +5,26 @@ using System.Collections.Concurrent;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AI;
using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
namespace LINGYUN.Abp.AI;
public class ChatClientFactory : IChatClientFactory, ISingletonDependency
{
private readonly static ConcurrentDictionary<string, IChatClient> _chatClientCache = new();
protected ISimpleStateCheckerManager<WorkspaceDefinition> StateCheckerManager { get; }
protected IWorkspaceDefinitionManager WorkspaceDefinitionManager { get; }
protected IChatClientProviderManager ChatClientProviderManager { get; }
protected IServiceProvider ServiceProvider { get; }
public ChatClientFactory(
ISimpleStateCheckerManager<WorkspaceDefinition> stateCheckerManager,
IWorkspaceDefinitionManager workspaceDefinitionManager,
IChatClientProviderManager chatClientProviderManager,
IServiceProvider serviceProvider)
{
StateCheckerManager = stateCheckerManager;
WorkspaceDefinitionManager = workspaceDefinitionManager;
ChatClientProviderManager = chatClientProviderManager;
ServiceProvider = serviceProvider;
@ -58,6 +63,8 @@ public class ChatClientFactory : IChatClientFactory, ISingletonDependency
var workspaceDefine = await WorkspaceDefinitionManager.GetAsync(workspace);
await CheckWorkspaceStateAsync(workspaceDefine);
chatClient = await CreateChatClientAsync(workspaceDefine);
_chatClientCache.TryAdd(workspace, chatClient);
@ -77,6 +84,17 @@ public class ChatClientFactory : IChatClientFactory, ISingletonDependency
return await provider.CreateAsync(workspace);
}
throw new AbpException($"The ChatClient provider implementation named {workspace.Provider} was not found");
throw new AbpException($"The ChatClient provider implementation named {workspace.Provider} was not found!");
}
protected async virtual Task CheckWorkspaceStateAsync(WorkspaceDefinition workspace)
{
if (!await StateCheckerManager.IsEnabledAsync(workspace))
{
throw new AbpAuthorizationException(
$"Workspace is not enabled: {workspace.Name}!",
AbpAIErrorCodes.WorkspaceIsNotEnabled)
.WithData("Workspace", workspace.Name);
}
}
}

19
aspnet-core/modules/ai/LINGYUN.Abp.AI.Core/LINGYUN/Abp/AI/KernelFactory.cs

@ -5,21 +5,26 @@ using System.Collections.Concurrent;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AI;
using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
namespace LINGYUN.Abp.AI;
public class KernelFactory : IKernelFactory, ISingletonDependency
{
private readonly static ConcurrentDictionary<string, Kernel> _kernelCache = new();
protected ISimpleStateCheckerManager<WorkspaceDefinition> StateCheckerManager { get; }
protected IWorkspaceDefinitionManager WorkspaceDefinitionManager { get; }
protected IKernelProviderManager KernelProviderManager { get; }
protected IServiceProvider ServiceProvider { get; }
public KernelFactory(
ISimpleStateCheckerManager<WorkspaceDefinition> stateCheckerManager,
IWorkspaceDefinitionManager workspaceDefinitionManager,
IKernelProviderManager kernelProviderManager,
IServiceProvider serviceProvider)
{
StateCheckerManager = stateCheckerManager;
WorkspaceDefinitionManager = workspaceDefinitionManager;
KernelProviderManager = kernelProviderManager;
ServiceProvider = serviceProvider;
@ -58,6 +63,8 @@ public class KernelFactory : IKernelFactory, ISingletonDependency
var workspaceDefine = await WorkspaceDefinitionManager.GetAsync(workspace);
await CheckWorkspaceStateAsync(workspaceDefine);
kernel = await CreateKernelAsync(workspaceDefine);
_kernelCache.TryAdd(workspace, kernel);
@ -77,6 +84,16 @@ public class KernelFactory : IKernelFactory, ISingletonDependency
return await provider.CreateAsync(workspace);
}
throw new AbpException($"The Kernel provider implementation named {workspace.Provider} was not found");
throw new AbpException($"The Kernel provider implementation named {workspace.Provider} was not found!");
}
protected async virtual Task CheckWorkspaceStateAsync(WorkspaceDefinition workspace)
{
if (!await StateCheckerManager.IsEnabledAsync(workspace))
{
throw new AbpAuthorizationException(
$"Workspace is not enabled: {workspace.Name}!",
AbpAIErrorCodes.WorkspaceIsNotEnabled)
.WithData("Workspace", workspace.Name);
}
}
}

Loading…
Cancel
Save