Commit d4cfcd0a1ab00423220dd035635aac181b0dbd3a

Authored by YunaiV
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
@@ -17,6 +17,7 @@ import java.util.ArrayList; @@ -17,6 +17,7 @@ import java.util.ArrayList;
17 import java.util.List; 17 import java.util.List;
18 import java.util.Scanner; 18 import java.util.Scanner;
19 19
  20 +// TODO 芋艿:整理单测
20 /** 21 /**
21 * chat 文心一言 22 * chat 文心一言
22 * <p> 23 * <p>
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