Commit 782f10851694022fb9f21d9fe0c599e7dd42b0db

Authored by cherishsince
2 parents 20addff4 0faba44a

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

yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
@@ -151,7 +151,6 @@ public class YudaoAiAutoConfiguration { @@ -151,7 +151,6 @@ public class YudaoAiAutoConfiguration {
151 @Bean 151 @Bean
152 @ConditionalOnProperty(value = "yudao.ai.suno.enable", havingValue = "true") 152 @ConditionalOnProperty(value = "yudao.ai.suno.enable", havingValue = "true")
153 public SunoApi sunoApi(YudaoAiProperties yudaoAiProperties) { 153 public SunoApi sunoApi(YudaoAiProperties yudaoAiProperties) {
154 - // 创建 sunoApi  
155 return new SunoApi(new SunoConfig(yudaoAiProperties.getSuno().getToken())); 154 return new SunoApi(new SunoConfig(yudaoAiProperties.getSuno().getToken()));
156 } 155 }
157 156
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java
@@ -137,12 +137,15 @@ public class YudaoAiProperties { @@ -137,12 +137,15 @@ public class YudaoAiProperties {
137 } 137 }
138 138
139 @Data 139 @Data
140 - @Accessors(chain = true) 140 + @Accessors(chain = true) // TODO @xiaoxin:可以去掉这个,默认全局已经开启
141 public static class SunoProperties { 141 public static class SunoProperties {
  142 +
142 private boolean enable = false; 143 private boolean enable = false;
143 /** 144 /**
144 * token 145 * token
145 */ 146 */
146 private String token; 147 private String token;
  148 +
147 } 149 }
  150 +
148 } 151 }
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/suno/api/SunoApi.java
1 package cn.iocoder.yudao.framework.ai.core.model.suno.api; 1 package cn.iocoder.yudao.framework.ai.core.model.suno.api;
2 2
3 -  
4 import cn.iocoder.yudao.framework.ai.core.model.suno.SunoConfig; 3 import cn.iocoder.yudao.framework.ai.core.model.suno.SunoConfig;
5 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 4 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
6 import com.fasterxml.jackson.annotation.JsonInclude; 5 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -14,6 +13,7 @@ import java.io.IOException; @@ -14,6 +13,7 @@ import java.io.IOException;
14 import java.util.List; 13 import java.util.List;
15 import java.util.concurrent.TimeUnit; 14 import java.util.concurrent.TimeUnit;
16 15
  16 +// TODO @xiaoxin:类注释
17 /** 17 /**
18 * @Author xiaoxin 18 * @Author xiaoxin
19 * @Date 2024/5/27 19 * @Date 2024/5/27
@@ -21,13 +21,17 @@ import java.util.concurrent.TimeUnit; @@ -21,13 +21,17 @@ import java.util.concurrent.TimeUnit;
21 @Slf4j 21 @Slf4j
22 public class SunoApi { 22 public class SunoApi {
23 23
  24 + // TODO @xiaoxin:APPLICATION_JSON、TOKEN_PREFIX 看看 spring 有没自带的这 2 个枚举哈。变量越少越好
24 public static final String APPLICATION_JSON = "application/json"; 25 public static final String APPLICATION_JSON = "application/json";
25 public static final String TOKEN_PREFIX = "Bearer "; 26 public static final String TOKEN_PREFIX = "Bearer ";
26 public static final String API_URL = "https://api.acedata.cloud/suno/audios"; 27 public static final String API_URL = "https://api.acedata.cloud/suno/audios";
  28 +
27 private static final int READ_TIMEOUT = 160; // 连接超时时间(秒),音乐生成时间较长,设置为 160s,后续可做callback 29 private static final int READ_TIMEOUT = 160; // 连接超时时间(秒),音乐生成时间较长,设置为 160s,后续可做callback
28 - private final OkHttpClient client;  
29 30
  31 + // TODO @xiaoxin:建议使用 webClient 对接。参考 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java
  32 + private final OkHttpClient client;
30 33
  34 + // TODO @xiaoxin:sunoConfig => config,简洁一点
31 public SunoApi(SunoConfig sunoConfig) { 35 public SunoApi(SunoConfig sunoConfig) {
32 this.client = new OkHttpClient().newBuilder().readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) 36 this.client = new OkHttpClient().newBuilder().readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
33 .addInterceptor(chain -> { 37 .addInterceptor(chain -> {
@@ -40,6 +44,7 @@ public class SunoApi { @@ -40,6 +44,7 @@ public class SunoApi {
40 .build(); 44 .build();
41 } 45 }
42 46
  47 + // TODO @芋艿:方法名,要考虑下;
43 public SunoResponse musicGen(SunoRequest sunoRequest) { 48 public SunoResponse musicGen(SunoRequest sunoRequest) {
44 Request request = new Request.Builder() 49 Request request = new Request.Builder()
45 .url(API_URL) 50 .url(API_URL)
@@ -57,6 +62,7 @@ public class SunoApi { @@ -57,6 +62,7 @@ public class SunoApi {
57 } 62 }
58 } 63 }
59 64
  65 + // TODO @xiaoxin:看看是不是使用 record 特性,简化下;
60 66
61 /** 67 /**
62 * 请求数据对象,用于生成音乐音频 68 * 请求数据对象,用于生成音乐音频
@@ -96,6 +102,7 @@ public class SunoApi { @@ -96,6 +102,7 @@ public class SunoApi {
96 private String callbackUrl; 102 private String callbackUrl;
97 } 103 }
98 104
  105 + // TODO @xiaoxin:看看是不是使用 record 特性,简化下;
99 106
100 /** 107 /**
101 * SunoAPI 响应的数据 108 * SunoAPI 响应的数据
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/suno/SunoTests.java
@@ -28,4 +28,5 @@ public class SunoTests { @@ -28,4 +28,5 @@ public class SunoTests {
28 SunoApi.SunoResponse sunoResponse = sunoApi.musicGen(sunoRequest); 28 SunoApi.SunoResponse sunoResponse = sunoApi.musicGen(sunoRequest);
29 System.out.println(sunoResponse); 29 System.out.println(sunoResponse);
30 } 30 }
  31 +
31 } 32 }