Browse Source

feat(ai): Add an interface for managing AI tools

pull/1457/head
colin 2 days ago
parent
commit
0765c867fd
  1. 10
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordCreateDto.cs
  2. 19
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordCreateOrUpdateDto.cs
  3. 23
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordDto.cs
  4. 12
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordGetPagedListInput.cs
  5. 10
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordUpdateDto.cs
  6. 12
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolPropertyDescriptorDto.cs
  7. 11
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolProviderDto.cs
  8. 17
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/IAIToolDefinitionAppService.cs
  9. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Workspaces/Dtos/WorkspaceDefinitionRecordGetPagedListInput.cs
  10. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Workspaces/IWorkspaceDefinitionAppService.cs
  11. 12
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/AbpAIManagementApplicationMappers.cs
  12. 138
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/Tools/AIToolDefinitionAppService.cs
  13. 11
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/Workspaces/WorkspaceDefinitionAppService.cs
  14. 14
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/AIManagementErrorCodes.cs
  15. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Localization/Resources/en.json
  16. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Localization/Resources/zh-Hans.json
  17. 16
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Tools/AIToolAlreadyExistsException.cs
  18. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain/LINGYUN/Abp/AIManagement/Tools/IAIToolDefinitionRecordRepository.cs
  19. 58
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.HttpApi/LINGYUN/Abp/AIManagement/Tools/AIToolDefinitionController.cs
  20. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.HttpApi/LINGYUN/Abp/AIManagement/Workspaces/WorkspaceDefinitionController.cs

10
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordCreateDto.cs

@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
public class AIToolDefinitionRecordCreateDto : AIToolDefinitionRecordCreateOrUpdateDto
{
[Required]
[DynamicStringLength(typeof(AIToolDefinitionRecordConsts), nameof(AIToolDefinitionRecordConsts.MaxNameLength))]
public string Name { get; set; }
}

19
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordCreateOrUpdateDto.cs

@ -0,0 +1,19 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
public abstract class AIToolDefinitionRecordCreateOrUpdateDto : ExtensibleObject
{
[Required]
[DynamicStringLength(typeof(AIToolDefinitionRecordConsts), nameof(AIToolDefinitionRecordConsts.MaxProviderLength))]
public string Provider { get; set; }
[DynamicStringLength(typeof(AIToolDefinitionRecordConsts), nameof(AIToolDefinitionRecordConsts.MaxDescriptionLength))]
public string? Description { get; set; }
public bool IsEnabled { get; set; }
[DynamicStringLength(typeof(AIToolDefinitionRecordConsts), nameof(AIToolDefinitionRecordConsts.MaxStateCheckersLength))]
public string? StateCheckers { get; set; }
}

23
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordDto.cs

@ -0,0 +1,23 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
[Serializable]
public class AIToolDefinitionRecordDto : ExtensibleAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public string Name { get; set; }
public string Provider { get; set; }
public string? Description { get; set; }
public bool IsEnabled { get; set; }
public bool IsSystem { get; set; }
public string? StateCheckers { get; set; }
public string ConcurrencyStamp { get; set; }
}

12
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordGetPagedListInput.cs

@ -0,0 +1,12 @@
using System;
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
[Serializable]
public class AIToolDefinitionRecordGetPagedListInput : PagedAndSortedResultRequestDto
{
public string? Filter { get; set; }
public string? Provider { get; set; }
}

10
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolDefinitionRecordUpdateDto.cs

@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
public class AIToolDefinitionRecordUpdateDto : AIToolDefinitionRecordCreateOrUpdateDto, IHasConcurrencyStamp
{
[Required]
[StringLength(40)]
public string ConcurrencyStamp { get; set; }
}

12
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolPropertyDescriptorDto.cs

@ -0,0 +1,12 @@
using System.Collections.Generic;
using Volo.Abp;
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
public class AIToolPropertyDescriptorDto
{
public string Name { get; set; }
public string ValueType { get; set; }
public List<NameValue<object>> Options { get; set; }
public string DisplayName { get; set; }
public string? Description { get; set; }
}

11
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/Dtos/AIToolProviderDto.cs

@ -0,0 +1,11 @@
namespace LINGYUN.Abp.AIManagement.Tools.Dtos;
public class AIToolProviderDto
{
public string Name { get; }
public AIToolPropertyDescriptorDto[] Properties { get; }
public AIToolProviderDto(string name, AIToolPropertyDescriptorDto[] properties)
{
Name = name;
Properties = properties;
}
}

17
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Tools/IAIToolDefinitionAppService.cs

@ -0,0 +1,17 @@
using LINGYUN.Abp.AIManagement.Tools.Dtos;
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.AIManagement.Tools;
public interface IAIToolDefinitionAppService :
ICrudAppService<
AIToolDefinitionRecordDto,
Guid,
AIToolDefinitionRecordGetPagedListInput,
AIToolDefinitionRecordCreateDto,
AIToolDefinitionRecordUpdateDto>
{
Task<ListResultDto<AIToolProviderDto>> GetAvailableProvidersAsync();
}

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Workspaces/Dtos/WorkspaceDefinitionRecordGetListInput.cs → aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Workspaces/Dtos/WorkspaceDefinitionRecordGetPagedListInput.cs

@ -4,7 +4,7 @@ using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.AIManagement.Workspaces.Dtos;
[Serializable]
public class WorkspaceDefinitionRecordGetListInput : PagedAndSortedResultRequestDto
public class WorkspaceDefinitionRecordGetPagedListInput : PagedAndSortedResultRequestDto
{
public string? Filter { get; set; }

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application.Contracts/LINGYUN/Abp/AIManagement/Workspaces/IWorkspaceDefinitionAppService.cs

@ -9,7 +9,7 @@ public interface IWorkspaceDefinitionAppService :
ICrudAppService<
WorkspaceDefinitionRecordDto,
Guid,
WorkspaceDefinitionRecordGetListInput,
WorkspaceDefinitionRecordGetPagedListInput,
WorkspaceDefinitionRecordCreateDto,
WorkspaceDefinitionRecordUpdateDto>
{

12
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/AbpAIManagementApplicationMappers.cs

@ -1,5 +1,7 @@
using LINGYUN.Abp.AIManagement.Chats;
using LINGYUN.Abp.AIManagement.Chats.Dtos;
using LINGYUN.Abp.AIManagement.Tools;
using LINGYUN.Abp.AIManagement.Tools.Dtos;
using LINGYUN.Abp.AIManagement.Workspaces;
using LINGYUN.Abp.AIManagement.Workspaces.Dtos;
using Riok.Mapperly.Abstractions;
@ -31,4 +33,12 @@ public partial class TextChatMessageRecordToTextChatMessageDtoMapper : MapperBas
{
return record.Role.Value;
}
}
}
[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)]
[MapExtraProperties(DefinitionChecks = MappingPropertyDefinitionChecks.None)]
public partial class AIToolDefinitionRecordToAIToolDefinitionRecordDtoMapper : MapperBase<AIToolDefinitionRecord, AIToolDefinitionRecordDto>
{
public override partial AIToolDefinitionRecordDto Map(AIToolDefinitionRecord source);
public override partial void Map(AIToolDefinitionRecord source, AIToolDefinitionRecordDto destination);
}

138
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/Tools/AIToolDefinitionAppService.cs

@ -0,0 +1,138 @@
using LINGYUN.Abp.AI.Tools;
using LINGYUN.Abp.AIManagement.Tools.Dtos;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Data;
namespace LINGYUN.Abp.AIManagement.Tools;
public class AIToolDefinitionAppService :
CrudAppService<
AIToolDefinitionRecord,
AIToolDefinitionRecordDto,
Guid,
AIToolDefinitionRecordGetPagedListInput,
AIToolDefinitionRecordCreateDto,
AIToolDefinitionRecordUpdateDto>,
IAIToolDefinitionAppService
{
protected AbpAIToolsOptions AIToolsOptions { get; }
protected IAIToolDefinitionRecordRepository AIToolDefinitionRecordRepository { get; }
public AIToolDefinitionAppService(
IOptions<AbpAIToolsOptions> aiToolsOptions,
IAIToolDefinitionRecordRepository repository)
: base(repository)
{
AIToolsOptions = aiToolsOptions.Value;
AIToolDefinitionRecordRepository = repository;
}
public virtual Task<ListResultDto<AIToolProviderDto>> GetAvailableProvidersAsync()
{
var providers = AIToolsOptions.AIToolProviders
.Select(LazyServiceProvider.GetRequiredService)
.OfType<IAIToolProvider>()
.Select(provider =>
{
var properties = provider.GetPropertites();
return new AIToolProviderDto(
provider.Name,
properties.Select(prop =>
{
var property = new AIToolPropertyDescriptorDto
{
Name = prop.Name,
Options = prop.Options,
ValueType = prop.ValueType.ToString(),
DisplayName = prop.DisplayName.Localize(StringLocalizerFactory),
};
if (prop.Description != null)
{
property.Description = prop.Description.Localize(StringLocalizerFactory);
}
return property;
}).ToArray());
});
return Task.FromResult(new ListResultDto<AIToolProviderDto>(providers.ToImmutableArray()));
}
protected async override Task DeleteByIdAsync(Guid id)
{
var aiTool = await Repository.GetAsync(id);
if (aiTool.IsSystem)
{
throw new BusinessException(
AIManagementErrorCodes.AITool.SystemAIToolNotAllowedToBeDeleted,
$"System AITool {aiTool.Name} is not allowed to be deleted!")
.WithData("AITool", aiTool.Name);
}
await Repository.DeleteAsync(aiTool);
}
protected async override Task<IQueryable<AIToolDefinitionRecord>> CreateFilteredQueryAsync(AIToolDefinitionRecordGetPagedListInput input)
{
var queryable = await base.CreateFilteredQueryAsync(input);
return queryable
.WhereIf(!input.Provider.IsNullOrWhiteSpace(), x => x.Provider == input.Provider)
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Provider.Contains(input.Filter!) ||
x.Name.Contains(input.Filter!) || x.Description!.Contains(input.Filter!));
}
protected async override Task<AIToolDefinitionRecord> MapToEntityAsync(AIToolDefinitionRecordCreateDto createInput)
{
if (await AIToolDefinitionRecordRepository.FindByNameAsync(createInput.Name) != null)
{
throw new AIToolAlreadyExistsException(createInput.Name);
}
var record = new AIToolDefinitionRecord(
GuidGenerator.Create(),
createInput.Name,
createInput.Provider,
createInput.Description,
createInput.StateCheckers)
{
IsEnabled = createInput.IsEnabled,
};
return record;
}
protected override void MapToEntity(AIToolDefinitionRecordUpdateDto updateInput, AIToolDefinitionRecord entity)
{
if (entity.Description != updateInput.Description)
{
entity.Description = updateInput.Description;
}
if (entity.IsEnabled != updateInput.IsEnabled)
{
entity.IsEnabled = updateInput.IsEnabled;
}
if (!entity.HasSameExtraProperties(updateInput))
{
entity.ExtraProperties.Clear();
foreach (var property in updateInput.ExtraProperties)
{
entity.ExtraProperties.Add(property.Key, property.Value);
}
}
entity.SetConcurrencyStampIfNotNull(updateInput.ConcurrencyStamp);
}
}

11
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Application/LINGYUN/Abp/AIManagement/Workspaces/WorkspaceDefinitionAppService.cs

@ -20,7 +20,7 @@ public class WorkspaceDefinitionAppService :
WorkspaceDefinitionRecord,
WorkspaceDefinitionRecordDto,
Guid,
WorkspaceDefinitionRecordGetListInput,
WorkspaceDefinitionRecordGetPagedListInput,
WorkspaceDefinitionRecordCreateDto,
WorkspaceDefinitionRecordUpdateDto>,
IWorkspaceDefinitionAppService
@ -79,7 +79,7 @@ public class WorkspaceDefinitionAppService :
await Repository.DeleteAsync(workspace);
}
protected async override Task<IQueryable<WorkspaceDefinitionRecord>> CreateFilteredQueryAsync(WorkspaceDefinitionRecordGetListInput input)
protected async override Task<IQueryable<WorkspaceDefinitionRecord>> CreateFilteredQueryAsync(WorkspaceDefinitionRecordGetPagedListInput input)
{
var queryable = await base.CreateFilteredQueryAsync(input);
@ -113,7 +113,10 @@ public class WorkspaceDefinitionAppService :
createInput.MaxOutputTokens,
createInput.FrequencyPenalty,
createInput.PresencePenalty,
createInput.StateCheckers);
createInput.StateCheckers)
{
IsEnabled = createInput.IsEnabled,
};
if (!createInput.ApiKey.IsNullOrWhiteSpace())
{
@ -196,5 +199,7 @@ public class WorkspaceDefinitionAppService :
entity.ExtraProperties.Add(property.Key, property.Value);
}
}
entity.SetConcurrencyStampIfNotNull(updateInput.ConcurrencyStamp);
}
}

14
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/AIManagementErrorCodes.cs

@ -16,4 +16,18 @@ public static class AIManagementErrorCodes
/// </summary>
public const string SystemWorkspaceNotAllowedToBeDeleted = Prefix + "002";
}
public static class AITool
{
public const string Prefix = Namespace + ":112";
/// <summary>
/// AITool {AITool} already exists!
/// </summary>
public const string NameAlreadyExists = Prefix + "001";
/// <summary>
/// System AITool {AITool} is not allowed to be deleted!
/// </summary>
public const string SystemAIToolNotAllowedToBeDeleted = Prefix + "002";
}
}

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Localization/Resources/en.json

@ -11,6 +11,8 @@
"Permission:Delete": "Delete",
"AIManagement:111001": "Workspace {Workspace} already exists!",
"AIManagement:111002": "System workspace {Workspace} is not allowed to be deleted!",
"AIManagement:112001": "AITool {AITool} already exists!",
"AIManagement:112002": "System AITool {AITool} is not allowed to be deleted!",
"DisplayName:MaxLatestHistoryMessagesToKeep": "Carry the recent conversation records",
"Description:MaxLatestHistoryMessagesToKeep": "When a user initiates a conversation with a large model, the upper limit of the user's recent conversation history that is carried along.",
"Conversations:Delete": "Delete Conversation",

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Localization/Resources/zh-Hans.json

@ -11,6 +11,8 @@
"Permission:Delete": "删除",
"AIManagement:111001": "工作区 {Workspace} 已存在!",
"AIManagement:111002": "系统工作区 {Workspace} 不允许删除!",
"AIManagement:112001": "工具 {AITool} 已存在!",
"AIManagement:112002": "系统工具 {AITool} 不允许删除!",
"DisplayName:MaxLatestHistoryMessagesToKeep": "携带最近对话记录",
"Description:MaxLatestHistoryMessagesToKeep": "用户发起与大模型对话时,携带用户最近对话记录的上限.",
"Conversations:Delete": "删除对话",

16
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain.Shared/LINGYUN/Abp/AIManagement/Tools/AIToolAlreadyExistsException.cs

@ -0,0 +1,16 @@
using Volo.Abp;
namespace LINGYUN.Abp.AIManagement.Tools;
public class AIToolAlreadyExistsException : BusinessException
{
public string AITool { get; }
public AIToolAlreadyExistsException(string aiTool)
: base(
AIManagementErrorCodes.AITool.NameAlreadyExists,
$"A AITool named {aiTool} already exists!")
{
AITool = aiTool;
WithData(nameof(AITool), aiTool);
}
}

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.Domain/LINGYUN/Abp/AIManagement/Tools/IAIToolDefinitionRecordRepository.cs

@ -4,7 +4,7 @@ using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace LINGYUN.Abp.AIManagement.Tools;
public interface IAIToolDefinitionRecordRepository : IBasicRepository<AIToolDefinitionRecord, Guid>
public interface IAIToolDefinitionRecordRepository : IRepository<AIToolDefinitionRecord, Guid>
{
Task<AIToolDefinitionRecord?> FindByNameAsync(
string name,

58
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.HttpApi/LINGYUN/Abp/AIManagement/Tools/AIToolDefinitionController.cs

@ -0,0 +1,58 @@
using LINGYUN.Abp.AIManagement.Tools.Dtos;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.AIManagement.Tools;
[Controller]
[RemoteService(Name = AIManagementRemoteServiceConsts.RemoteServiceName)]
[Area(AIManagementRemoteServiceConsts.ModuleName)]
[Route($"api/{AIManagementRemoteServiceConsts.ModuleName}/tools")]
public class AIToolDefinitionController : AbpControllerBase, IAIToolDefinitionAppService
{
private readonly IAIToolDefinitionAppService _service;
public AIToolDefinitionController(IAIToolDefinitionAppService service)
{
_service = service;
}
[HttpPost]
public virtual Task<AIToolDefinitionRecordDto> CreateAsync(AIToolDefinitionRecordCreateDto input)
{
return _service.CreateAsync(input);
}
[HttpDelete("{id}")]
public virtual Task DeleteAsync(Guid id)
{
return _service.DeleteAsync(id);
}
[HttpGet("{id}")]
public virtual Task<AIToolDefinitionRecordDto> GetAsync(Guid id)
{
return _service.GetAsync(id);
}
[HttpGet("available-providers")]
public virtual Task<ListResultDto<AIToolProviderDto>> GetAvailableProvidersAsync()
{
return _service.GetAvailableProvidersAsync();
}
[HttpGet]
public virtual Task<PagedResultDto<AIToolDefinitionRecordDto>> GetListAsync(AIToolDefinitionRecordGetPagedListInput input)
{
return _service.GetListAsync(input);
}
[HttpPut("{id}")]
public virtual Task<AIToolDefinitionRecordDto> UpdateAsync(Guid id, AIToolDefinitionRecordUpdateDto input)
{
return _service.UpdateAsync(id, input);
}
}

2
aspnet-core/modules/ai/LINGYUN.Abp.AIManagement.HttpApi/LINGYUN/Abp/AIManagement/Workspaces/WorkspaceDefinitionController.cs

@ -50,7 +50,7 @@ public class WorkspaceDefinitionController : AbpControllerBase, IWorkspaceDefini
}
[HttpGet]
public virtual Task<PagedResultDto<WorkspaceDefinitionRecordDto>> GetListAsync(WorkspaceDefinitionRecordGetListInput input)
public virtual Task<PagedResultDto<WorkspaceDefinitionRecordDto>> GetListAsync(WorkspaceDefinitionRecordGetPagedListInput input)
{
return _service.GetListAsync(input);
}

Loading…
Cancel
Save