Commit b1158fb1a7e26985ab5041a84340a576915f1cfe

Authored by cherishsince
1 parent f2b9c148

增加图片选择,和图片放大相关操作

yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyConfig.java
@@ -4,6 +4,7 @@ import lombok.Data; @@ -4,6 +4,7 @@ import lombok.Data;
4 import lombok.experimental.Accessors; 4 import lombok.experimental.Accessors;
5 5
6 import java.util.Map; 6 import java.util.Map;
  7 +import java.util.UUID;
7 8
8 /** 9 /**
9 * Midjourney 配置 10 * Midjourney 配置
@@ -15,16 +16,6 @@ import java.util.Map; @@ -15,16 +16,6 @@ import java.util.Map;
15 @Accessors(chain = true) 16 @Accessors(chain = true)
16 public class MidjourneyConfig { 17 public class MidjourneyConfig {
17 18
18 - public MidjourneyConfig(String token, String guildId, String channelId, Map<String, String> requestTemplates) {  
19 - this.token = token;  
20 - this.guildId = guildId;  
21 - this.channelId = channelId;  
22 - this.serverUrl = serverUrl;  
23 - this.apiInteractions = apiInteractions;  
24 - this.userAage = userAage;  
25 - this.requestTemplates = requestTemplates;  
26 - }  
27 -  
28 /** 19 /**
29 * token信息 20 * token信息
30 * 21 *
@@ -64,4 +55,23 @@ public class MidjourneyConfig { @@ -64,4 +55,23 @@ public class MidjourneyConfig {
64 55
65 56
66 private Map<String, String> requestTemplates; 57 private Map<String, String> requestTemplates;
  58 +
  59 + //
  60 + //
  61 +
  62 + private String sessionId;
  63 +
  64 + public MidjourneyConfig(String token, String guildId, String channelId, Map<String, String> requestTemplates) {
  65 + this.token = token;
  66 + this.guildId = guildId;
  67 + this.channelId = channelId;
  68 + this.serverUrl = serverUrl;
  69 + this.apiInteractions = apiInteractions;
  70 + this.userAage = userAage;
  71 + this.requestTemplates = requestTemplates;
  72 +
  73 + // 生成 session id
  74 + sessionId = UUID.randomUUID().toString().replaceAll("-", "");
  75 + }
  76 +
67 } 77 }
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MjMessage.java
@@ -17,6 +17,7 @@ public class MjMessage { @@ -17,6 +17,7 @@ public class MjMessage {
17 * 现在已知: 17 * 现在已知:
18 * 0:我们发送的消息,和指令 18 * 0:我们发送的消息,和指令
19 * 20: mj生成图片发送过程中 19 * 20: mj生成图片发送过程中
  20 + * 19: 选择了某一张图片后的通知
20 */ 21 */
21 private Integer type; 22 private Integer type;
22 /** 23 /**
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjClient.java
@@ -32,8 +32,7 @@ public class MjClient { @@ -32,8 +32,7 @@ public class MjClient {
32 // 封装请求体和头部信息 32 // 封装请求体和头部信息
33 HttpEntity<String> requestEntity = new HttpEntity<>(body, headers); 33 HttpEntity<String> requestEntity = new HttpEntity<>(body, headers);
34 // 发送请求 34 // 发送请求
35 - String result = restTemplate.postForObject(url, requestEntity, String.class);  
36 - return result; 35 + return restTemplate.postForObject(url, requestEntity, String.class);
37 } 36 }
38 37
39 38
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjImagineInteractions.java
@@ -4,6 +4,8 @@ import cn.hutool.core.util.IdUtil; @@ -4,6 +4,8 @@ import cn.hutool.core.util.IdUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyConfig; 5 import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyConfig;
6 import cn.iocoder.yudao.framework.ai.midjourney.constants.MjInteractionsEnum; 6 import cn.iocoder.yudao.framework.ai.midjourney.constants.MjInteractionsEnum;
  7 +import cn.iocoder.yudao.framework.ai.midjourney.vo.ReRoll;
  8 +import com.google.common.collect.Lists;
7 import com.google.common.collect.Maps; 9 import com.google.common.collect.Maps;
8 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
9 11
@@ -12,7 +14,7 @@ import java.util.List; @@ -12,7 +14,7 @@ import java.util.List;
12 import java.util.UUID; 14 import java.util.UUID;
13 15
14 /** 16 /**
15 - * 17 + * 图片生成
16 * 18 *
17 * author: fansili 19 * author: fansili
18 * time: 2024/4/3 17:36 20 * time: 2024/4/3 17:36
@@ -28,7 +30,7 @@ public class MjImagineInteractions implements MjInteractions { @@ -28,7 +30,7 @@ public class MjImagineInteractions implements MjInteractions {
28 30
29 @Override 31 @Override
30 public List<MjInteractionsEnum> supperInteractions() { 32 public List<MjInteractionsEnum> supperInteractions() {
31 - return null; 33 + return Lists.newArrayList(MjInteractionsEnum.IMAGINE);
32 } 34 }
33 35
34 @Override 36 @Override
@@ -40,7 +42,7 @@ public class MjImagineInteractions implements MjInteractions { @@ -40,7 +42,7 @@ public class MjImagineInteractions implements MjInteractions {
40 HashMap<String, String> requestParams = Maps.newHashMap(); 42 HashMap<String, String> requestParams = Maps.newHashMap();
41 requestParams.put("guild_id", midjourneyConfig.getGuildId()); 43 requestParams.put("guild_id", midjourneyConfig.getGuildId());
42 requestParams.put("channel_id", midjourneyConfig.getChannelId()); 44 requestParams.put("channel_id", midjourneyConfig.getChannelId());
43 - requestParams.put("session_id", UUID.randomUUID().toString().replaceAll("-", "")); 45 + requestParams.put("session_id", midjourneyConfig.getSessionId());
44 requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId())); 46 requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId()));
45 requestParams.put("prompt", prompt); 47 requestParams.put("prompt", prompt);
46 // 设置参数 48 // 设置参数
@@ -55,4 +57,29 @@ public class MjImagineInteractions implements MjInteractions { @@ -55,4 +57,29 @@ public class MjImagineInteractions implements MjInteractions {
55 log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res); 57 log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res);
56 return isSuccess; 58 return isSuccess;
57 } 59 }
  60 +
  61 + public Boolean reRoll(ReRoll reRoll) {
  62 + String url = midjourneyConfig.getServerUrl().concat(midjourneyConfig.getApiInteractions());
  63 + // 获取请求模板
  64 + String requestTemplate = midjourneyConfig.getRequestTemplates().get("reroll");
  65 + // 设置参数
  66 + HashMap<String, String> requestParams = Maps.newHashMap();
  67 + requestParams.put("guild_id", midjourneyConfig.getGuildId());
  68 + requestParams.put("channel_id", midjourneyConfig.getChannelId());
  69 + requestParams.put("session_id", midjourneyConfig.getSessionId());
  70 + requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId()));
  71 + requestParams.put("custom_id", reRoll.getCustomId());
  72 + requestParams.put("message_id", reRoll.getMessageId());
  73 + // 设置参数
  74 + String requestBody = MjClient.setParams(requestTemplate, requestParams);
  75 + // 发送请求
  76 + String res = MjClient.post(url, midjourneyConfig.getToken(), requestBody);
  77 + // 这个 res 只要不返回值,就是成功!
  78 + boolean isSuccess = StrUtil.isBlank(res);
  79 + if (isSuccess) {
  80 + return true;
  81 + }
  82 + log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res);
  83 + return isSuccess;
  84 + }
58 } 85 }
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/vo/ReRoll.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.ai.midjourney.vo;
  2 +
  3 +import lombok.Data;
  4 +import lombok.experimental.Accessors;
  5 +
  6 +/**
  7 + * author: fansili
  8 + * time: 2024/4/6 21:33
  9 + */
  10 +@Data
  11 +@Accessors(chain = true)
  12 +public class ReRoll {
  13 +
  14 + private String messageId;
  15 + private String customId;
  16 +}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json 0 → 100644
  1 +{
  2 + "type": 3,
  3 + "guild_id": "$guild_id",
  4 + "channel_id": "$channel_id",
  5 + "message_id": "$message_id",
  6 + "application_id": "936929561302675456",
  7 + "session_id": "$session_id",
  8 + "nonce": "$nonce",
  9 + "message_flags": 0,
  10 + "data": {
  11 + "component_type": 2,
  12 + "custom_id": "$custom_id"
  13 + }
  14 +}
0 \ No newline at end of file 15 \ No newline at end of file