去掉任务中相关模型和提示词绑定,新增资源图片bbox处理
This commit is contained in:
@@ -1,15 +1,5 @@
|
||||
package com.labelsys.backend.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.labelsys.backend.common.ResultCode;
|
||||
@@ -20,12 +10,9 @@ import com.labelsys.backend.dto.request.AnnotationTaskPageQuery;
|
||||
import com.labelsys.backend.dto.request.CreateAnnotationTaskRequest;
|
||||
import com.labelsys.backend.dto.request.UpdateAnnotationTaskRequest;
|
||||
import com.labelsys.backend.dto.response.AnnotationTaskResponse;
|
||||
import com.labelsys.backend.dto.response.TaskModelConfigResponse;
|
||||
import com.labelsys.backend.dto.response.TaskPromptConfigResponse;
|
||||
import com.labelsys.backend.entity.AnnotationTask;
|
||||
import com.labelsys.backend.entity.AnnotationTaskResource;
|
||||
import com.labelsys.backend.entity.SourceResource;
|
||||
import com.labelsys.backend.entity.SysConfig;
|
||||
import com.labelsys.backend.enums.IndustryType;
|
||||
import com.labelsys.backend.enums.SourceStatus;
|
||||
import com.labelsys.backend.enums.TaskStatus;
|
||||
@@ -33,51 +20,52 @@ import com.labelsys.backend.enums.TaskType;
|
||||
import com.labelsys.backend.mapper.AnnotationTaskMapper;
|
||||
import com.labelsys.backend.mapper.AnnotationTaskResourceMapper;
|
||||
import com.labelsys.backend.mapper.SourceResourceMapper;
|
||||
import com.labelsys.backend.mapper.SysConfigMapper;
|
||||
import com.labelsys.backend.util.IdGenerator;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AnnotationTaskService {
|
||||
|
||||
private final AnnotationTaskMapper annotationTaskMapper;
|
||||
private final AnnotationTaskMapper annotationTaskMapper;
|
||||
private final AnnotationTaskResourceMapper annotationTaskResourceMapper;
|
||||
private final SourceResourceMapper sourceResourceMapper;
|
||||
private final SysConfigMapper sysConfigMapper;
|
||||
private final SysConfigService sysConfigService;
|
||||
private final DataPermissionService dataPermissionService;
|
||||
private final SourceResourceMapper sourceResourceMapper;
|
||||
private final DataPermissionService dataPermissionService;
|
||||
|
||||
@Transactional
|
||||
public AnnotationTaskResponse createTask(LoginUser currentUser, CreateAnnotationTaskRequest request) {
|
||||
List<SourceResource> resources = loadAndValidateResources(currentUser, request.resourceIds());
|
||||
SysConfigService.ResolvedModelConfig extractModel = sysConfigService.resolveModelConfig(currentUser,
|
||||
request.extractModel());
|
||||
SysConfigService.ResolvedModelConfig verifyModel = sysConfigService.resolveModelConfig(currentUser,
|
||||
request.verifyModel());
|
||||
SysConfigService.ResolvedPromptConfig extractPrompt = sysConfigService.resolvePromptConfig(currentUser,
|
||||
request.extractPrompt());
|
||||
SysConfigService.ResolvedPromptConfig verifyPrompt = sysConfigService.resolvePromptConfig(currentUser,
|
||||
request.verifyPrompt());
|
||||
|
||||
AnnotationTask task = AnnotationTask.builder().id(IdGenerator.nextId()).companyId(currentUser.companyId())
|
||||
.creatorId(currentUser.userId()).creatorRole(currentUser.role()).taskName(request.taskName())
|
||||
.industryType(defaultIndustryType(request.industryType())).taskType(defaultTaskType(request.taskType()))
|
||||
.extractModelConfigId(extractModel.configId()).extractModelName(extractModel.modelName())
|
||||
.extractModelUrl(extractModel.modelUrl()).extractModelApiKey(extractModel.apiKey())
|
||||
.verifyModelConfigId(verifyModel.configId()).verifyModelName(verifyModel.modelName())
|
||||
.verifyModelUrl(verifyModel.modelUrl()).verifyModelApiKey(verifyModel.apiKey())
|
||||
.extractPromptConfigId(extractPrompt.configId()).extractPrompt(extractPrompt.promptText())
|
||||
.verifyPromptConfigId(verifyPrompt.configId()).verifyPrompt(verifyPrompt.promptText())
|
||||
.taskStatus(TaskStatus.PENDING.name()).isDeleted(false).build();
|
||||
AnnotationTask task = AnnotationTask.builder()
|
||||
.id(IdGenerator.nextId())
|
||||
.companyId(currentUser.companyId())
|
||||
.creatorId(currentUser.userId())
|
||||
.creatorRole(currentUser.role())
|
||||
.taskName(request.taskName())
|
||||
.industryType(defaultIndustryType(request.industryType()))
|
||||
.taskType(defaultTaskType(request.taskType()))
|
||||
.taskStatus(TaskStatus.PENDING.name())
|
||||
.isDeleted(false)
|
||||
.build();
|
||||
|
||||
annotationTaskMapper.insert(task);
|
||||
saveTaskBindings(task.getId(), currentUser.companyId(), resources);
|
||||
|
||||
log.info("created annotation task, companyId={}, userId={}, taskId={}, resourceCount={}",
|
||||
currentUser.companyId(), currentUser.userId(), task.getId(), resources.size());
|
||||
return buildTaskResponse(task, resourceIds(resources), extractModel, verifyModel, extractPrompt, verifyPrompt);
|
||||
|
||||
return buildTaskResponse(task, resourceIds(resources));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -95,45 +83,13 @@ public class AnnotationTaskService {
|
||||
List<Long> currentResourceIds = normalizeIds(annotationTaskResourceMapper.listResourceIdsByTaskId(taskId));
|
||||
List<Long> targetResourceIds = normalizeIds(request.resourceIds());
|
||||
resourcesChanged = !currentResourceIds.equals(targetResourceIds);
|
||||
|
||||
if (TaskStatus.RUNNING.name().equals(task.getTaskStatus()) && resourcesChanged) {
|
||||
throw new BusinessException(ResultCode.CONFLICT, "运行中的任务不允许修改资源");
|
||||
}
|
||||
resources = loadAndValidateResources(currentUser, request.resourceIds());
|
||||
}
|
||||
|
||||
SysConfigService.ResolvedModelConfig extractModel = null;
|
||||
SysConfigService.ResolvedModelConfig verifyModel = null;
|
||||
SysConfigService.ResolvedPromptConfig extractPrompt = null;
|
||||
SysConfigService.ResolvedPromptConfig verifyPrompt = null;
|
||||
|
||||
if (request.extractModel() != null) {
|
||||
extractModel = sysConfigService.resolveModelConfig(currentUser, request.extractModel());
|
||||
task.setExtractModelConfigId(extractModel.configId());
|
||||
task.setExtractModelName(extractModel.modelName());
|
||||
task.setExtractModelUrl(extractModel.modelUrl());
|
||||
task.setExtractModelApiKey(extractModel.apiKey());
|
||||
}
|
||||
|
||||
if (request.verifyModel() != null) {
|
||||
verifyModel = sysConfigService.resolveModelConfig(currentUser, request.verifyModel());
|
||||
task.setVerifyModelConfigId(verifyModel.configId());
|
||||
task.setVerifyModelName(verifyModel.modelName());
|
||||
task.setVerifyModelUrl(verifyModel.modelUrl());
|
||||
task.setVerifyModelApiKey(verifyModel.apiKey());
|
||||
}
|
||||
|
||||
if (request.extractPrompt() != null) {
|
||||
extractPrompt = sysConfigService.resolvePromptConfig(currentUser, request.extractPrompt());
|
||||
task.setExtractPromptConfigId(extractPrompt.configId());
|
||||
task.setExtractPrompt(extractPrompt.promptText());
|
||||
}
|
||||
|
||||
if (request.verifyPrompt() != null) {
|
||||
verifyPrompt = sysConfigService.resolvePromptConfig(currentUser, request.verifyPrompt());
|
||||
task.setVerifyPromptConfigId(verifyPrompt.configId());
|
||||
task.setVerifyPrompt(verifyPrompt.promptText());
|
||||
}
|
||||
|
||||
if (request.industryType() != null) {
|
||||
task.setIndustryType(request.industryType());
|
||||
}
|
||||
@@ -155,10 +111,7 @@ public class AnnotationTaskService {
|
||||
List<Long> finalResourceIds = resources != null ? resourceIds(resources)
|
||||
: normalizeIds(annotationTaskResourceMapper.listResourceIdsByTaskId(taskId));
|
||||
|
||||
if (extractModel == null || verifyModel == null || extractPrompt == null || verifyPrompt == null) {
|
||||
return buildTaskResponse(task, finalResourceIds);
|
||||
}
|
||||
return buildTaskResponse(task, finalResourceIds, extractModel, verifyModel, extractPrompt, verifyPrompt);
|
||||
return buildTaskResponse(task, finalResourceIds);
|
||||
}
|
||||
|
||||
public AnnotationTaskResponse getTask(LoginUser currentUser, Long taskId) {
|
||||
@@ -195,7 +148,7 @@ public class AnnotationTaskService {
|
||||
List<AnnotationTaskResponse> records = resultPage.getRecords().stream()
|
||||
.filter(task -> query.resourceId() == null
|
||||
|| annotationTaskResourceMapper.listResourceIdsByTaskId(task.getId())
|
||||
.contains(query.resourceId()))
|
||||
.contains(query.resourceId()))
|
||||
.map(task -> buildTaskResponse(task,
|
||||
normalizeIds(annotationTaskResourceMapper.listResourceIdsByTaskId(task.getId()))))
|
||||
.toList();
|
||||
@@ -245,39 +198,26 @@ public class AnnotationTaskService {
|
||||
|
||||
private void saveTaskBindings(Long taskId, Long companyId, List<SourceResource> resources) {
|
||||
for (SourceResource resource : resources) {
|
||||
annotationTaskResourceMapper.insert(AnnotationTaskResource.builder().id(IdGenerator.nextId())
|
||||
.companyId(companyId).taskId(taskId).resourceId(resource.getId()).build());
|
||||
annotationTaskResourceMapper.insert(AnnotationTaskResource.builder()
|
||||
.id(IdGenerator.nextId())
|
||||
.companyId(companyId)
|
||||
.taskId(taskId)
|
||||
.resourceId(resource.getId())
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
private AnnotationTaskResponse buildTaskResponse(AnnotationTask task, List<Long> resourceIds,
|
||||
SysConfigService.ResolvedModelConfig extractModel, SysConfigService.ResolvedModelConfig verifyModel,
|
||||
SysConfigService.ResolvedPromptConfig extractPrompt, SysConfigService.ResolvedPromptConfig verifyPrompt) {
|
||||
return new AnnotationTaskResponse(task.getId(), task.getTaskName(), task.getIndustryType(), task.getTaskType(),
|
||||
task.getTaskStatus(), resourceIds, sysConfigService.toResponse(extractModel),
|
||||
sysConfigService.toResponse(verifyModel), sysConfigService.toResponse(extractPrompt),
|
||||
sysConfigService.toResponse(verifyPrompt), task.getCreatedAt(), task.getUpdatedAt());
|
||||
}
|
||||
|
||||
private AnnotationTaskResponse buildTaskResponse(AnnotationTask task, List<Long> resourceIds) {
|
||||
String extractModelConfigName = resolveConfigName(task.getExtractModelConfigId());
|
||||
String verifyModelConfigName = resolveConfigName(task.getVerifyModelConfigId());
|
||||
String extractPromptConfigName = resolveConfigName(task.getExtractPromptConfigId());
|
||||
String verifyPromptConfigName = resolveConfigName(task.getVerifyPromptConfigId());
|
||||
|
||||
return new AnnotationTaskResponse(task.getId(), task.getTaskName(), task.getIndustryType(), task.getTaskType(),
|
||||
task.getTaskStatus(), resourceIds,
|
||||
new TaskModelConfigResponse(task.getExtractModelConfigId(), extractModelConfigName,
|
||||
task.getExtractModelName(),
|
||||
task.getExtractModelUrl(), maskSecret(task.getExtractModelApiKey())),
|
||||
new TaskModelConfigResponse(task.getVerifyModelConfigId(), verifyModelConfigName,
|
||||
task.getVerifyModelName(),
|
||||
task.getVerifyModelUrl(), maskSecret(task.getVerifyModelApiKey())),
|
||||
new TaskPromptConfigResponse(task.getExtractPromptConfigId(), extractPromptConfigName,
|
||||
task.getExtractPrompt()),
|
||||
new TaskPromptConfigResponse(task.getVerifyPromptConfigId(), verifyPromptConfigName,
|
||||
task.getVerifyPrompt()),
|
||||
task.getCreatedAt(), task.getUpdatedAt());
|
||||
return new AnnotationTaskResponse(
|
||||
task.getId(),
|
||||
task.getTaskName(),
|
||||
task.getIndustryType(),
|
||||
task.getTaskType(),
|
||||
task.getTaskStatus(),
|
||||
resourceIds,
|
||||
task.getCreatedAt(),
|
||||
task.getUpdatedAt()
|
||||
);
|
||||
}
|
||||
|
||||
private List<Long> resourceIds(List<SourceResource> resources) {
|
||||
@@ -304,22 +244,4 @@ public class AnnotationTaskService {
|
||||
private TaskType defaultTaskType(TaskType taskType) {
|
||||
return taskType != null ? taskType : TaskType.EXTRACT_QA;
|
||||
}
|
||||
|
||||
private String maskSecret(String secret) {
|
||||
if (!StringUtils.hasText(secret)) {
|
||||
return null;
|
||||
}
|
||||
if (secret.length() <= 4) {
|
||||
return "****";
|
||||
}
|
||||
return "****" + secret.substring(secret.length() - 4);
|
||||
}
|
||||
|
||||
private String resolveConfigName(Long configId) {
|
||||
if (configId == null) {
|
||||
return null;
|
||||
}
|
||||
SysConfig config = sysConfigMapper.selectById(configId);
|
||||
return config != null ? config.getConfigName() : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user