Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
af09e51c69
@ -1,11 +1,16 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual;
|
||||
|
||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.manualAnnoVo.ManualModelAnswerPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.manualAnnoVo.ManualModelAnswerSaveReqVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ManualAssessmentPageRespVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ModelAssessTaskManualPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.service.modelassesstaskmanual.ManualModelAnswerService;
|
||||
import cn.iocoder.yudao.module.llm.utils.ManalExcelExportUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -13,11 +18,14 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.*;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
|
||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
|
||||
@ -45,6 +53,17 @@ public class ManualModelAnswerController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出模型评估人工标注 模型回答 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('llm:manual-model-answer:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportManualModelAnswerExcel(@Valid ManualModelAnswerPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ManualAssessmentPageRespVO> list = manualModelAnswerService.getManualAssessment(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ManalExcelExportUtils.write(response, "模型评估人工标注 模型回答.xls", "数据",ManualAssessmentPageRespVO.class,list);
|
||||
}
|
||||
/* @PostMapping("/create")
|
||||
@Operation(summary = "创建模型评估人工标注 模型回答")
|
||||
@PreAuthorize("@ss.hasPermission('llm:manual-model-answer:create')")
|
||||
|
@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.manual
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ManualModelAnswerDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskDimensionDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskManualDO;
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@ -23,11 +24,9 @@ import java.util.List;
|
||||
@Data
|
||||
public class ManualAssessmentPageRespVO {
|
||||
@Schema(description = "评估任务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16493")
|
||||
@ExcelProperty("评估任务ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "模型服务")
|
||||
@ExcelProperty("模型服务")
|
||||
private Long modelService;
|
||||
|
||||
@Schema(description = "数据集")
|
||||
@ -44,25 +43,32 @@ public class ManualAssessmentPageRespVO {
|
||||
private Integer progress;
|
||||
|
||||
@Schema(description = "模型服务名称")
|
||||
@ExcelProperty("模型名称")
|
||||
private String modelServiceName;
|
||||
|
||||
@Schema(description = "数据集名称")
|
||||
@ExcelProperty("数据集名称")
|
||||
private String datasetName;
|
||||
|
||||
@Schema(description = "数据集问题")
|
||||
@ExcelProperty("Prompt")
|
||||
private String question;
|
||||
|
||||
@Schema(description = "数据集答案")
|
||||
// @ExcelProperty("Response(参考回答)")
|
||||
private List<DatasetAnswerRespVO> answers;
|
||||
|
||||
@Schema(description = "人工标注主表id")
|
||||
private Long manalTaskId;
|
||||
@Schema(description = "模型回答答案")
|
||||
@ExcelProperty("Completion(模型回答)")
|
||||
private String modelAnswer;
|
||||
|
||||
/* @Schema(description = "人工评估信息返回")
|
||||
private List<ManualModelAnnoRespVO> reqRespVos;*/
|
||||
|
||||
@Schema(description = "人工评估信息ListMap返回")
|
||||
@ExcelIgnore
|
||||
private List<HashMap<String, Object>> reqRespVos;
|
||||
|
||||
@Schema(description = "系统信息")
|
||||
|
@ -332,16 +332,22 @@ public class ModelAssessTaskManualBackupServiceImpl implements ModelAssessTaskMa
|
||||
List<Long> serviceMyIds = modelAssessTaskManualDOPageResult.getList().stream().
|
||||
filter(modelAssessTaskManualDO -> modelAssessTaskManualDO.getModelType() == 0)
|
||||
.map(ModelAssessTaskManualBackupDO::getModelService).collect(Collectors.toList());
|
||||
List<ModelServiceDO> modelServiceDOS = modelServiceMapper.selectList(new LambdaQueryWrapper<ModelServiceDO>()
|
||||
.in(ModelServiceDO::getId,serviceMyIds));
|
||||
List<ModelServiceDO> modelServiceDOS = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(serviceMyIds)){
|
||||
modelServiceDOS = modelServiceMapper.selectList(new LambdaQueryWrapper<ModelServiceDO>()
|
||||
.in(ModelServiceDO::getId,serviceMyIds));
|
||||
}
|
||||
Map<Long, ModelServiceDO> serviceMyMaps = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(modelServiceDOS, ModelServiceDO::getId);
|
||||
// 人工模型获取校验
|
||||
List<Long> serviceForeseeIds = modelAssessTaskManualDOPageResult.getList().stream().
|
||||
filter(modelAssessTaskManualDO -> modelAssessTaskManualDO.getModelType() == 1)
|
||||
.map(ModelAssessTaskManualBackupDO::getModelService).collect(Collectors.toList());
|
||||
List<BaseModelDO> baseModelDOS = baseModelMapper.selectList(new LambdaQueryWrapper<BaseModelDO>()
|
||||
.in(BaseModelDO::getId, serviceForeseeIds));
|
||||
List<BaseModelDO> baseModelDOS = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(serviceForeseeIds)){
|
||||
baseModelDOS = baseModelMapper.selectList(new LambdaQueryWrapper<BaseModelDO>()
|
||||
.in(BaseModelDO::getId, serviceForeseeIds));
|
||||
}
|
||||
Map<Long, BaseModelDO> serviceForeseeMaps = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(baseModelDOS, BaseModelDO::getId);
|
||||
result.getList().stream().forEach(modelAssessTaskManualRespVO -> {
|
||||
|
@ -0,0 +1,121 @@
|
||||
package cn.iocoder.yudao.module.llm.utils;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetAnswerRespVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ManualAssessmentPageRespVO;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ManalExcelExportUtils {
|
||||
|
||||
public static <T> void write(HttpServletResponse response, String filename, String sheetName,
|
||||
Class<T> head, List<ManualAssessmentPageRespVO> data) throws IOException {
|
||||
HSSFWorkbook template = new HSSFWorkbook();
|
||||
HSSFSheet sheet = template.createSheet(sheetName);
|
||||
|
||||
HSSFCellStyle cellStyle = template.createCellStyle();
|
||||
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
// 创建样式并设置垂直居中
|
||||
int count = 0;
|
||||
HSSFRow row = sheet.createRow(count);
|
||||
row.createCell(0).setCellValue("模型名称");
|
||||
row.createCell(1).setCellValue("结果集名称");
|
||||
row.createCell(2).setCellValue("System(人设信息)");
|
||||
row.createCell(3).setCellValue("Prompt");
|
||||
row.createCell(4).setCellValue("Response(参考回答)");
|
||||
row.createCell(5).setCellValue("Completion(模型回答)");
|
||||
|
||||
List<ManualAssessmentPageRespVO> collect1 = data.stream().filter(item -> item.getStatus() == 2).collect(Collectors.toList());
|
||||
HashMap<String, Integer> rowMap = new HashMap<>();
|
||||
if (collect1.size() != 0) {
|
||||
int num = 6;
|
||||
List<HashMap<String, Object>> reqRespVos = collect1.get(0).getReqRespVos();
|
||||
for (HashMap<String, Object> map : reqRespVos) {
|
||||
row.createCell(num).setCellValue(String.valueOf(map.get("label")));
|
||||
rowMap.put(String.valueOf(map.get("label")), Integer.valueOf(num));
|
||||
num++;
|
||||
}
|
||||
}
|
||||
count++;
|
||||
List<Integer> id = new ArrayList<>();
|
||||
for (ManualAssessmentPageRespVO item : data) {
|
||||
List<DatasetAnswerRespVO> datasetAnswerRespVO = item.getAnswers();
|
||||
List<String> collect = datasetAnswerRespVO.stream().map(DatasetAnswerRespVO::getAnswer).collect(Collectors.toList());
|
||||
int start = count;
|
||||
row = sheet.createRow(count);
|
||||
row.createCell(0).setCellValue(item.getModelServiceName() == null ? "" : item.getModelServiceName());
|
||||
row.getCell(0).setCellStyle(cellStyle);
|
||||
row.createCell(1).setCellValue(item.getDatasetName() == null ? "" : item.getDatasetName());
|
||||
row.getCell(1).setCellStyle(cellStyle);
|
||||
row.createCell(2).setCellValue("-");
|
||||
row.getCell(2).setCellStyle(cellStyle);
|
||||
row.createCell(3).setCellValue(item.getQuestion() == null ? "" : item.getQuestion());
|
||||
row.getCell(3).setCellStyle(cellStyle);
|
||||
row.createCell(4).setCellValue(collect.get(0) == null ? "" : collect.get(0));
|
||||
row.getCell(4).setCellStyle(cellStyle);
|
||||
row.createCell(5).setCellValue(item.getModelAnswer() == null ? "" : item.getModelAnswer());
|
||||
row.getCell(5).setCellStyle(cellStyle);
|
||||
if (!CollectionUtils.isAnyEmpty(item.getReqRespVos())) {
|
||||
for (HashMap<String, Object> map : item.getReqRespVos()) {
|
||||
int num = rowMap.get(String.valueOf(map.get("label")));
|
||||
row.createCell(num).setCellValue(String.valueOf(map.get("score")) == null ? "" : String.valueOf(map.get("score")));
|
||||
row.getCell(num).setCellStyle(cellStyle);
|
||||
}
|
||||
}
|
||||
count++;
|
||||
if (collect.size() > 1) {
|
||||
for (int i = 1; i < collect.size(); i++) {
|
||||
row = sheet.createRow(count);
|
||||
row.createCell(4).setCellValue(collect.get(i));
|
||||
row.getCell(4).setCellStyle(cellStyle);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
int end = count - 1;
|
||||
if (start != end) {
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, 0, 0));
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, 1, 1));
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, 2, 2));
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, 3, 3));
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, 5, 5));
|
||||
if (!CollectionUtils.isAnyEmpty(item.getReqRespVos())) {
|
||||
for (HashMap<String, Object> map : item.getReqRespVos()) {
|
||||
int num = rowMap.get(String.valueOf(map.get("label")));
|
||||
sheet.addMergedRegion(new CellRangeAddress(start, end, num, num));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 导出 Excel
|
||||
try {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name()));
|
||||
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
||||
template.write(response.getOutputStream());
|
||||
response.getOutputStream().close();
|
||||
template.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
/* // 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name()));
|
||||
response.setContentType("application/vnd.ms-excel;charset=UTF-8");*/
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user