Merge remote-tracking branch 'origin/master-jdk21-ai' into master-jdk21-ai

This commit is contained in:
cherishsince
2024-05-31 14:06:49 +08:00
14 changed files with 133 additions and 168 deletions

View File

@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.client.RestTemplate;
// TODO @fan这个写到 starter-ai 里哈。搞个 MidjourneyApi参考 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java 的风格写哈
/**
* Midjourney Proxy 客户端
*

View File

@ -6,6 +6,7 @@ import lombok.Data;
import java.util.List;
// TODO @fan待定
/**
* MidjourneyImagine 请求
*

View File

@ -6,6 +6,7 @@ import lombok.Getter;
import java.util.List;
// TODO @fan待定
/**
* Midjourney 提交任务 code 枚举
*

View File

@ -5,6 +5,7 @@ import lombok.Data;
import java.util.Map;
// TODO @fan待定
/**
* MidjourneyImagine 请求
*

View File

@ -54,6 +54,7 @@ public class AiImageController {
// TODO @fan建议把 dallDrawing、midjourney 融合成一个 draw 接口,异步绘制;然后返回一个 id 给前端;前端通过 get 接口轮询,直到获取到生成成功
// TODO @芋艿: 参数差异较大
// TODO @fan直接参数平铺写好注释要么
@Operation(summary = "dall2/dall3绘画", description = "openAi dall3是付费的!")
@PostMapping("/dall")
public CommonResult<Long> dall(@Validated @RequestBody AiImageDallReqVO req) {

View File

@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
import java.util.List;
// TODO @fan待定
/**
* midjourney req
*

View File

@ -1,13 +1,17 @@
package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.stream.Collectors;
/**
* 表示单个音乐数据的类
*/
@Data
public class MusicDataVO {
public class MusicDataVO {
/**
* 音乐数据的 ID
*/
@ -61,4 +65,21 @@ public class MusicDataVO {
* 音乐音频的风格
*/
private String style;
public static List<MusicDataVO> convertFrom(List<SunoApi.SunoResp.MusicData> musicDataList) {
return musicDataList.stream().map(musicData -> {
MusicDataVO musicDataVO = new MusicDataVO();
musicDataVO.setId(musicData.id());
musicDataVO.setTitle(musicData.title());
musicDataVO.setImageUrl(musicData.imageUrl());
musicDataVO.setLyric(musicData.lyric());
musicDataVO.setAudioUrl(musicData.audioUrl());
musicDataVO.setVideoUrl(musicData.videoUrl());
musicDataVO.setCreatedAt(musicData.createdAt());
musicDataVO.setModel(musicData.model());
musicDataVO.setPrompt(musicData.prompt());
musicDataVO.setStyle(musicData.style());
return musicDataVO;
}).collect(Collectors.toList());
}
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@ -26,4 +27,14 @@ public class SunoRespVO {
*/
private List<MusicDataVO> data;
//把 SunoResp转为本vo类
public static SunoRespVO convertFrom(SunoApi.SunoResp sunoResp) {
SunoRespVO sunoRespVO = new SunoRespVO();
sunoRespVO.setSuccess(sunoResp.success());
sunoRespVO.setTaskId(sunoResp.taskId());
sunoRespVO.setData(MusicDataVO.convertFrom(sunoResp.data()));
return sunoRespVO;
}
}

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.ai.service.music;
import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ai.controller.admin.music.vo.SunoReqVO;
import cn.iocoder.yudao.module.ai.controller.admin.music.vo.SunoRespVO;
import lombok.RequiredArgsConstructor;
@ -19,7 +18,14 @@ public class MusicServiceImpl implements MusicService {
@Override
public SunoRespVO musicGen(SunoReqVO sunoReqVO) {
SunoApi.SunoRequest req = BeanUtils.toBean(sunoReqVO, SunoApi.SunoRequest.class);
return BeanUtils.toBean(sunoApi.musicGen(req), SunoRespVO.class);
SunoApi.SunoResp sunoResp = sunoApi.musicGen(new SunoApi.SunoReq(
sunoReqVO.getPrompt(),
sunoReqVO.getLyric(),
sunoReqVO.isCustom(),
sunoReqVO.getTitle(),
sunoReqVO.getStyle(),
sunoReqVO.getCallbackUrl()
));
return SunoRespVO.convertFrom(sunoResp);
}
}