【增加】增加模型头像

This commit is contained in:
cherishsince 2024-05-12 14:20:24 +08:00
parent 2734e54b0c
commit 79bd78998d
5 changed files with 57 additions and 2 deletions

View File

@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - AI 聊天消息 Response VO") @Schema(description = "管理后台 - AI 聊天消息 Response VO")
@Data @Data
public class AiChatMessageRespVO { public class AiChatMessageRespVO {
@ -19,6 +21,9 @@ public class AiChatMessageRespVO {
@Schema(description = "用户编号", example = "4096") @Schema(description = "用户编号", example = "4096")
private Long userId; // 仅当 user 发送时非空 private Long userId; // 仅当 user 发送时非空
@Schema(description = "用户头像", example = "http://xxx")
private Long avatarUrl; // 仅当 user 发送时非空
@Schema(description = "角色编号", example = "888") @Schema(description = "角色编号", example = "888")
private Long roleId; // 仅当 assistant 回复时非空 private Long roleId; // 仅当 assistant 回复时非空
@ -28,10 +33,15 @@ public class AiChatMessageRespVO {
@Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123") @Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123")
private Long modelId; private Long modelId;
@Schema(description = "模型图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "123")
private String modelImage;
@Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你好啊") @Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你好啊")
private String content; private String content;
@Schema(description = "消耗 Token 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "80") @Schema(description = "消耗 Token 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "80")
private Integer tokens; private Integer tokens;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-12 12:51")
private LocalDateTime createTime;
} }

View File

@ -9,6 +9,10 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/** /**
* chat modal * chat modal
* *
@ -36,5 +40,11 @@ public interface AiChatModelMapper extends BaseMapperX<AiChatModelDO> {
return pageResult.getList().get(0); return pageResult.getList().get(0);
} }
/**
* 查询 - 根据 ids
*
* @param modalIds
* @return
*/
List<AiChatModelDO> selectByIds(Collection<Long> modalIds);
} }

View File

@ -4,6 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.*; import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.*;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO; import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
import java.util.List;
import java.util.Set;
/** /**
* ai modal * ai modal
* *
@ -64,4 +67,13 @@ public interface AiChatModelService {
* @param chatModal * @param chatModal
*/ */
void validateAvailable(AiChatModalRespVO chatModal); void validateAvailable(AiChatModalRespVO chatModal);
/**
* 获取 - 根据 ids 批量获取
*
* @param modalIds
* @return
*/
List<AiChatModelDO> getModalByIds(Set<Long> modalIds);
} }

View File

@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.ai.service.AiChatModelService;
import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScannerRegistrar;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -35,6 +36,7 @@ import java.util.Set;
public class AiChatModalServiceImpl implements AiChatModelService { public class AiChatModalServiceImpl implements AiChatModelService {
private final AiChatModelMapper aiChatModelMapper; private final AiChatModelMapper aiChatModelMapper;
private final MapperScannerRegistrar mapperScannerRegistrar;
@Override @Override
public PageResult<AiChatModelListRespVO> list(AiChatModelListReqVO req) { public PageResult<AiChatModelListRespVO> list(AiChatModelListReqVO req) {
@ -102,6 +104,11 @@ public class AiChatModalServiceImpl implements AiChatModelService {
} }
} }
@Override
public List<AiChatModelDO> getModalByIds(Set<Long> modalIds) {
return aiChatModelMapper.selectByIds(modalIds);
}
public AiChatModelDO validateExists(Long id) { public AiChatModelDO validateExists(Long id) {
AiChatModelDO aiChatModalDO = aiChatModelMapper.selectById(id); AiChatModelDO aiChatModalDO = aiChatModelMapper.selectById(id);
if (aiChatModalDO == null) { if (aiChatModalDO == null) {

View File

@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessage
import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiChatModalRespVO; import cn.iocoder.yudao.module.ai.controller.admin.model.vo.model.AiChatModalRespVO;
import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert; import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert;
import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
import cn.iocoder.yudao.module.ai.dal.mysql.AiChatConversationMapper; import cn.iocoder.yudao.module.ai.dal.mysql.AiChatConversationMapper;
import cn.iocoder.yudao.module.ai.dal.mysql.AiChatMessageMapper; import cn.iocoder.yudao.module.ai.dal.mysql.AiChatMessageMapper;
@ -29,8 +30,11 @@ import org.springframework.transaction.annotation.Transactional;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors;
/** /**
* 聊天 service * 聊天 service
@ -188,8 +192,20 @@ public class AiChatServiceImpl implements AiChatService {
chatConversationService.validateExists(conversationId); chatConversationService.validateExists(conversationId);
// 获取对话所有 message // 获取对话所有 message
List<AiChatMessageDO> aiChatMessageDOList = aiChatMessageMapper.selectByConversationId(conversationId); List<AiChatMessageDO> aiChatMessageDOList = aiChatMessageMapper.selectByConversationId(conversationId);
// 获取模型信息
Set<Long> modalIds = aiChatMessageDOList.stream().map(AiChatMessageDO::getModelId).collect(Collectors.toSet());
List<AiChatModelDO> modalList = aiChatModalService.getModalByIds(modalIds);
Map<Long, AiChatModelDO> modalIdMap = modalList.stream().collect(Collectors.toMap(AiChatModelDO::getId, o -> o));
// 转换 AiChatMessageRespVO // 转换 AiChatMessageRespVO
return AiChatMessageConvert.INSTANCE.convertAiChatMessageRespVOList(aiChatMessageDOList); List<AiChatMessageRespVO> aiChatMessageRespList = AiChatMessageConvert.INSTANCE.convertAiChatMessageRespVOList(aiChatMessageDOList);
// 设置用户头像 模型头像 todo @芋艿 这里需要转换 用户头像模型头像
return aiChatMessageRespList.stream().map(item -> {
if (modalIdMap.containsKey(item.getModelId())) {
// modalIdMap.get(item.getModelId());
// item.setModelImage()
}
return item;
}).collect(Collectors.toList());
} }
@Override @Override