Commit d4cfcd0a1ab00423220dd035635aac181b0dbd3a
1 parent
23baaff8
【代码优化】AI:音乐生成
Showing
11 changed files
with
29 additions
and
9 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiImageController.http
0 → 100644
| 1 | +### 生成音乐:Suno + | ||
| 2 | +POST {{baseUrl}}/ai/music/generate | ||
| 3 | +Content-Type: application/json | ||
| 4 | +Authorization: {{token}} | ||
| 5 | + | ||
| 6 | +{ | ||
| 7 | + "platform": "Suno", | ||
| 8 | + "generateMode": 1, | ||
| 9 | + "prompt": "来一首快乐的歌曲", | ||
| 10 | + "modelVersion": "chirp-v3.5", | ||
| 11 | + "tags": ["Happy"], | ||
| 12 | + "title": "Happy Song" | ||
| 13 | +} | ||
| 0 | \ No newline at end of file | 14 | \ No newline at end of file |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiMusicController.java
| @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController; | @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController; | ||
| 15 | import java.util.List; | 15 | import java.util.List; |
| 16 | 16 | ||
| 17 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 17 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 18 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||
| 18 | 19 | ||
| 19 | @Tag(name = "管理后台 - AI 音乐") | 20 | @Tag(name = "管理后台 - AI 音乐") |
| 20 | @RestController | 21 | @RestController |
| @@ -27,7 +28,7 @@ public class AiMusicController { | @@ -27,7 +28,7 @@ public class AiMusicController { | ||
| 27 | @PostMapping("/generate") | 28 | @PostMapping("/generate") |
| 28 | @Operation(summary = "音乐生成") | 29 | @Operation(summary = "音乐生成") |
| 29 | public CommonResult<List<Long>> generateMusic(@RequestBody @Valid AiSunoGenerateReqVO reqVO) { | 30 | public CommonResult<List<Long>> generateMusic(@RequestBody @Valid AiSunoGenerateReqVO reqVO) { |
| 30 | - return success(musicService.generateMusic(reqVO)); | 31 | + return success(musicService.generateMusic(getLoginUserId(), reqVO)); |
| 31 | } | 32 | } |
| 32 | 33 | ||
| 33 | } | 34 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiSunoGenerateReqVO.java
| @@ -17,7 +17,7 @@ public class AiSunoGenerateReqVO { | @@ -17,7 +17,7 @@ public class AiSunoGenerateReqVO { | ||
| 17 | 17 | ||
| 18 | @Schema(description = "生成模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | 18 | @Schema(description = "生成模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") |
| 19 | @NotNull(message = "生成模式不能为空") | 19 | @NotNull(message = "生成模式不能为空") |
| 20 | - private Integer generateMode; // 参见 AiMusicGenerateEnum 枚举 | 20 | + private Integer generateMode; // 参见 AiMusicGenerateModeEnum 枚举 |
| 21 | 21 | ||
| 22 | @Schema(description = "用于生成音乐音频的提示", requiredMode = Schema.RequiredMode.REQUIRED, | 22 | @Schema(description = "用于生成音乐音频的提示", requiredMode = Schema.RequiredMode.REQUIRED, |
| 23 | example = "创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。") | 23 | example = "创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。") |
| @@ -26,7 +26,7 @@ public class AiSunoGenerateReqVO { | @@ -26,7 +26,7 @@ public class AiSunoGenerateReqVO { | ||
| 26 | @Schema(description = "是否纯音乐", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "true") | 26 | @Schema(description = "是否纯音乐", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "true") |
| 27 | private Boolean makeInstrumental; | 27 | private Boolean makeInstrumental; |
| 28 | 28 | ||
| 29 | - @Schema(description = "模型版本, 默认 chirp-v3.5", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "chirp-v3.5") | 29 | + @Schema(description = "模型版本", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "chirp-v3.5") |
| 30 | private String modelVersion; // 参见 AiModelEnum 枚举 | 30 | private String modelVersion; // 参见 AiModelEnum 枚举 |
| 31 | 31 | ||
| 32 | @Schema(description = "音乐风格", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "[\"pop\",\"jazz\",\"punk\"]") | 32 | @Schema(description = "音乐风格", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "[\"pop\",\"jazz\",\"punk\"]") |
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
| @@ -63,7 +63,7 @@ public class YudaoAiAutoConfiguration { | @@ -63,7 +63,7 @@ public class YudaoAiAutoConfiguration { | ||
| 63 | YudaoAiProperties.QianWenProperties qianWenProperties = yudaoAiProperties.getQianwen(); | 63 | YudaoAiProperties.QianWenProperties qianWenProperties = yudaoAiProperties.getQianwen(); |
| 64 | // 转换配置 | 64 | // 转换配置 |
| 65 | QianWenOptions qianWenOptions = new QianWenOptions(); | 65 | QianWenOptions qianWenOptions = new QianWenOptions(); |
| 66 | - qianWenOptions.setModel(qianWenProperties.getModel().getModel()); | 66 | +// qianWenOptions.setModel(qianWenProperties.getModel().getModel()); TODO @fan:这里报错了 |
| 67 | qianWenOptions.setTemperature(qianWenProperties.getTemperature()); | 67 | qianWenOptions.setTemperature(qianWenProperties.getTemperature()); |
| 68 | // qianWenOptions.setTopK(qianWenProperties.getTopK()); TODO 芋艿:后续弄 | 68 | // qianWenOptions.setTopK(qianWenProperties.getTopK()); TODO 芋艿:后续弄 |
| 69 | qianWenOptions.setTopP(qianWenProperties.getTopP()); | 69 | qianWenOptions.setTopP(qianWenProperties.getTopP()); |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/QianWenChatClientTests.java
| @@ -24,6 +24,7 @@ import java.util.List; | @@ -24,6 +24,7 @@ import java.util.List; | ||
| 24 | import java.util.Scanner; | 24 | import java.util.Scanner; |
| 25 | import java.util.function.Consumer; | 25 | import java.util.function.Consumer; |
| 26 | 26 | ||
| 27 | +// TODO 芋艿:整理单测 | ||
| 27 | /** | 28 | /** |
| 28 | * author: fansili | 29 | * author: fansili |
| 29 | * time: 2024/3/13 21:37 | 30 | * time: 2024/3/13 21:37 |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientMainTests.java
| @@ -18,6 +18,7 @@ import java.security.NoSuchAlgorithmException; | @@ -18,6 +18,7 @@ import java.security.NoSuchAlgorithmException; | ||
| 18 | import java.text.SimpleDateFormat; | 18 | import java.text.SimpleDateFormat; |
| 19 | import java.util.*; | 19 | import java.util.*; |
| 20 | 20 | ||
| 21 | +// TODO 芋艿:整理单测 | ||
| 21 | /** | 22 | /** |
| 22 | * author: fansili | 23 | * author: fansili |
| 23 | * time: 2024/3/13 20:47 | 24 | * time: 2024/3/13 20:47 |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientTests.java
| @@ -18,6 +18,7 @@ import java.util.List; | @@ -18,6 +18,7 @@ import java.util.List; | ||
| 18 | import java.util.Scanner; | 18 | import java.util.Scanner; |
| 19 | import java.util.function.Consumer; | 19 | import java.util.function.Consumer; |
| 20 | 20 | ||
| 21 | +// TODO 芋艿:整理单测 | ||
| 21 | /** | 22 | /** |
| 22 | * 讯飞星火 tests | 23 | * 讯飞星火 tests |
| 23 | * <p> | 24 | * <p> |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoOkHttpTests.java
| @@ -17,6 +17,7 @@ import java.security.NoSuchAlgorithmException; | @@ -17,6 +17,7 @@ import java.security.NoSuchAlgorithmException; | ||
| 17 | import java.text.SimpleDateFormat; | 17 | import java.text.SimpleDateFormat; |
| 18 | import java.util.*; | 18 | import java.util.*; |
| 19 | 19 | ||
| 20 | +// TODO 芋艿:整理单测 | ||
| 20 | /** | 21 | /** |
| 21 | * 讯飞星火 tests | 22 | * 讯飞星火 tests |
| 22 | * <p> | 23 | * <p> |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/YiYanChatTests.java
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/openai/OpenAiImageClientTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/image/OpenAiImageClientTests.java
| 1 | -package cn.iocoder.yudao.framework.ai.openai; | 1 | +package cn.iocoder.yudao.framework.ai.image; |
| 2 | 2 | ||
| 3 | import org.springframework.ai.image.ImagePrompt; | 3 | import org.springframework.ai.image.ImagePrompt; |
| 4 | import org.springframework.ai.image.ImageResponse; | 4 | import org.springframework.ai.image.ImageResponse; |
| @@ -15,6 +15,7 @@ import java.io.IOException; | @@ -15,6 +15,7 @@ import java.io.IOException; | ||
| 15 | import java.util.Base64; | 15 | import java.util.Base64; |
| 16 | import java.util.Scanner; | 16 | import java.util.Scanner; |
| 17 | 17 | ||
| 18 | +// TODO 芋艿:整理单测 | ||
| 18 | /** | 19 | /** |
| 19 | * author: fansili | 20 | * author: fansili |
| 20 | * time: 2024/3/17 10:40 | 21 | * time: 2024/3/17 10:40 |
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/suno/SunoTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/music/SunoTests.java
| 1 | -package cn.iocoder.yudao.framework.ai.suno; | 1 | +package cn.iocoder.yudao.framework.ai.music; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi; | 3 | import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi; |
| 4 | import org.junit.Before; | 4 | import org.junit.Before; |
| @@ -6,24 +6,24 @@ import org.junit.Test; | @@ -6,24 +6,24 @@ import org.junit.Test; | ||
| 6 | 6 | ||
| 7 | import java.util.List; | 7 | import java.util.List; |
| 8 | 8 | ||
| 9 | +// TODO 芋艿:整理单测 | ||
| 9 | /** | 10 | /** |
| 10 | * @Author xiaoxin | 11 | * @Author xiaoxin |
| 11 | * @Date 2024/5/27 | 12 | * @Date 2024/5/27 |
| 12 | */ | 13 | */ |
| 13 | public class SunoTests { | 14 | public class SunoTests { |
| 14 | 15 | ||
| 15 | - SunoApi sunoApi; | 16 | + private SunoApi sunoApi; |
| 16 | 17 | ||
| 17 | @Before | 18 | @Before |
| 18 | public void setup() { | 19 | public void setup() { |
| 19 | - String url = "https://suno-imrqwwui8-status2xxs-projects.vercel.app"; | 20 | + String url = "https://suno-om0w1cy6e-status2xxs-projects.vercel.app"; |
| 20 | this.sunoApi = new SunoApi(url); | 21 | this.sunoApi = new SunoApi(url); |
| 21 | } | 22 | } |
| 22 | 23 | ||
| 23 | @Test | 24 | @Test |
| 24 | public void selectById() { | 25 | public void selectById() { |
| 25 | System.out.println(sunoApi.getMusicList(List.of("d460ddda-7c87-4f34-b751-419b08a590ca,ff90ea66-49cd-4fd2-b44c-44267dfd5551"))); | 26 | System.out.println(sunoApi.getMusicList(List.of("d460ddda-7c87-4f34-b751-419b08a590ca,ff90ea66-49cd-4fd2-b44c-44267dfd5551"))); |
| 26 | - | ||
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | @Test | 29 | @Test |