model-config.controller.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // server/src/model-config/model-config.controller.ts
  2. import {
  3. Body,
  4. Controller,
  5. Delete,
  6. Get,
  7. HttpCode,
  8. HttpStatus,
  9. Param,
  10. Patch,
  11. Post,
  12. Put,
  13. Req,
  14. UseGuards,
  15. } from '@nestjs/common';
  16. import { ModelConfigService } from './model-config.service';
  17. import { CreateModelConfigDto } from './dto/create-model-config.dto';
  18. import { UpdateModelConfigDto } from './dto/update-model-config.dto';
  19. import { CombinedAuthGuard } from '../auth/combined-auth.guard';
  20. import { RolesGuard } from '../auth/roles.guard';
  21. import { Roles } from '../auth/roles.decorator';
  22. import { UserRole } from '../user/user-role.enum';
  23. import { ModelConfigResponseDto } from './dto/model-config-response.dto';
  24. import { plainToClass } from 'class-transformer';
  25. import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiForbiddenResponse } from '@nestjs/swagger';
  26. @ApiTags('Models')
  27. @UseGuards(CombinedAuthGuard)
  28. @Controller('models') // Global prefix /api/models
  29. export class ModelConfigController {
  30. constructor(private readonly modelConfigService: ModelConfigService) { }
  31. @Roles(UserRole.TENANT_ADMIN, UserRole.SUPER_ADMIN)
  32. @Post()
  33. @HttpCode(HttpStatus.CREATED)
  34. @ApiBearerAuth('JWT')
  35. @ApiOperation({ summary: '创建模型配置', description: '创建新的AI模型配置(LLM/Embedding/Rerank)' })
  36. @ApiResponse({ status: 201, description: '创建成功' })
  37. @ApiForbiddenResponse({ description: '权限不足' })
  38. async create(
  39. @Req() req,
  40. @Body() createModelConfigDto: CreateModelConfigDto,
  41. ): Promise<ModelConfigResponseDto> {
  42. const modelConfig = await this.modelConfigService.create(
  43. createModelConfigDto,
  44. );
  45. return plainToClass(ModelConfigResponseDto, modelConfig);
  46. }
  47. @Get()
  48. @ApiBearerAuth('JWT')
  49. @ApiOperation({ summary: '获取模型配置列表' })
  50. @ApiResponse({ status: 200, description: '返回模型列表' })
  51. async findAll(): Promise<ModelConfigResponseDto[]> {
  52. const modelConfigs = await this.modelConfigService.findAll();
  53. return modelConfigs.map((mc) => plainToClass(ModelConfigResponseDto, mc));
  54. }
  55. @Get(':id')
  56. @ApiBearerAuth('JWT')
  57. @ApiOperation({ summary: '获取单个模型配置' })
  58. @ApiResponse({ status: 200, description: '返回模型详情' })
  59. async findOne(
  60. @Param('id') id: string,
  61. ): Promise<ModelConfigResponseDto> {
  62. const modelConfig = await this.modelConfigService.findOne(id);
  63. return plainToClass(ModelConfigResponseDto, modelConfig);
  64. }
  65. @Roles(UserRole.TENANT_ADMIN, UserRole.SUPER_ADMIN)
  66. @Put(':id')
  67. @ApiBearerAuth('JWT')
  68. @ApiOperation({ summary: '更新模型配置' })
  69. @ApiResponse({ status: 200, description: '更新成功' })
  70. @ApiForbiddenResponse({ description: '权限不足' })
  71. async update(
  72. @Req() req,
  73. @Param('id') id: string,
  74. @Body() updateModelConfigDto: UpdateModelConfigDto,
  75. ): Promise<ModelConfigResponseDto> {
  76. const modelConfig = await this.modelConfigService.update(
  77. id,
  78. updateModelConfigDto,
  79. );
  80. return plainToClass(ModelConfigResponseDto, modelConfig);
  81. }
  82. @Roles(UserRole.TENANT_ADMIN, UserRole.SUPER_ADMIN)
  83. @Delete(':id')
  84. @HttpCode(HttpStatus.NO_CONTENT)
  85. @ApiBearerAuth('JWT')
  86. @ApiOperation({ summary: '删除模型配置' })
  87. @ApiResponse({ status: 204, description: '删除成功' })
  88. @ApiForbiddenResponse({ description: '权限不足' })
  89. async remove(@Param('id') id: string): Promise<void> {
  90. await this.modelConfigService.remove(id);
  91. }
  92. @Roles(UserRole.TENANT_ADMIN, UserRole.SUPER_ADMIN)
  93. @Patch(':id/set-default')
  94. @ApiBearerAuth('JWT')
  95. @ApiOperation({ summary: '设置默认模型', description: '将指定模型设置为该类型的默认模型' })
  96. @ApiResponse({ status: 200, description: '设置成功' })
  97. @ApiForbiddenResponse({ description: '权限不足' })
  98. async setDefault(
  99. @Param('id') id: string,
  100. ): Promise<ModelConfigResponseDto> {
  101. const modelConfig = await this.modelConfigService.setDefault(id);
  102. return plainToClass(ModelConfigResponseDto, modelConfig);
  103. }
  104. }