Commit 2c689394 authored by alex yao's avatar alex yao

feat:Agent应用 头像生成

parent d1c508bf
......@@ -57,7 +57,7 @@ public interface AgentApplicationInfoService {
* @param agentDesc 应用描述
* @return Agent 应用图标URL
*/
String createAgentIcon(String agentTitle, String agentDesc);
String createAgentIcon(String agentTitle, String agentDesc) throws Exception;
/**
* Agent 应用标题,描述生成
......
......@@ -13,15 +13,19 @@ import cn.com.poc.agent_application.service.BizAgentApplicationPublishService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AICreateImageService;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService;
import cn.com.poc.thirdparty.resource.demand.ai.common.domain.Message;
import cn.com.poc.thirdparty.resource.demand.ai.common.domain.MultiContent;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsText2ImageRequest;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsText2ImageResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -61,6 +65,9 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
@Resource
private DemandKnowledgeService demandKnowledgeService;
@Resource
private AICreateImageService aiCreateImageService;
@Resource
private LLMService llmService;
......@@ -85,11 +92,8 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
}
@Override
public String callAgentApplication(String largeModel, String[] unitIds, String agentSystem,
String[] knowledgeIds, Integer communicationTurn, Float topP,
List<Message> messages, HttpServletResponse httpServletResponse) throws Exception {
logger.info("--------- Call Agent Application large model:{},unitIds:{},agentSystem:{},knowledgeIds:{}" +
" communicationTurn:{},topP:{},messages:{}--------------", largeModel, unitIds, agentSystem, knowledgeIds, communicationTurn, topP, messages);
public String callAgentApplication(String largeModel, String[] unitIds, String agentSystem, String[] knowledgeIds, Integer communicationTurn, Float topP, List<Message> messages, HttpServletResponse httpServletResponse) throws Exception {
logger.info("--------- Call Agent Application large model:{},unitIds:{},agentSystem:{},knowledgeIds:{}" + " communicationTurn:{},topP:{},messages:{}--------------", largeModel, unitIds, agentSystem, knowledgeIds, communicationTurn, topP, messages);
//todo 调用组件
String promptTemplate = buildDialogsPrompt(messages, agentSystem, knowledgeIds);
......@@ -214,11 +218,11 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
}
@Override
public String createAgentIcon(String agentTitle, String agentDesc) {
Assert.isTrue(StringUtils.isNotBlank(agentTitle) || StringUtils.isNotBlank(agentDesc), "请输入标题或者描述再生成应用头像");
public String createAgentIcon(String agentTitle, String agentDesc) throws Exception {
BizAgentApplicationGcConfigEntity configEntity = bizAgentApplicationGcConfigService.getByConfigCode(AgentApplicationGCConfigConstants.AGENT_ICON);
if (null == configEntity || StringUtils.isBlank(configEntity.getConfigSystem())) {
throw new BusinessException("创建[头像]配置不存在");
throw new BusinessException("创建[头像提示语]配置不存在,请联系管理员");
}
List<MultiContent> multiContents = new ArrayList<>();
......@@ -247,12 +251,35 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
largeModelResponse.setUser("POC-CREATE-AGENT-PROMPT");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
if (largeModelDemandResult == null || !"0".equals(largeModelDemandResult.getCode())) {
logger.error("create preamble error, largeModelResponse:{}", largeModelResponse);
throw new BusinessException("创建[开场白]失败");
if (largeModelDemandResult == null || !"0".equals(largeModelDemandResult.getCode()) || StringUtils.isEmpty(largeModelDemandResult.getMessage())) {
logger.error("create agent icon prompt error, largeModelResponse:{}", largeModelResponse);
throw new BusinessException("创建[头像]失败,请稍后再试");
}
return null;
logger.info("create agent application icon prompt, result:{}", largeModelDemandResult);
String createIconPrompt = largeModelDemandResult.getMessage();
BaiduAISailsText2ImageRequest baiduAISailsText2ImageRequest = new BaiduAISailsText2ImageRequest();
baiduAISailsText2ImageRequest.setPrompt(createIconPrompt);
baiduAISailsText2ImageRequest.setNegativePrompt(null);
baiduAISailsText2ImageRequest.setSize("768x768");
baiduAISailsText2ImageRequest.setN(1);
baiduAISailsText2ImageRequest.setSteps(15);
baiduAISailsText2ImageRequest.setSamplerIndex("Euler a");
baiduAISailsText2ImageRequest.setSeed(null);
baiduAISailsText2ImageRequest.setCfgCcale(null);
baiduAISailsText2ImageRequest.setStyle("Base");
baiduAISailsText2ImageRequest.setUserId("AGENT-APPLICATION-ICON-CREATE");
baiduAISailsText2ImageRequest.setAcctId(null);
BaiduAISailsText2ImageResult baiduAISailsText2ImageResult = aiCreateImageService.executeSailsText2Image(baiduAISailsText2ImageRequest);
if (baiduAISailsText2ImageResult == null
|| CollectionUtils.isEmpty(baiduAISailsText2ImageResult.getData())
|| StringUtils.isEmpty(baiduAISailsText2ImageResult.getData().get(0).getUrl())) {
logger.error("create agent icon error, baiduAISailsText2ImageRequest:{} ", baiduAISailsText2ImageRequest);
throw new BusinessException("创建[头像]失败,请稍后再试");
}
return baiduAISailsText2ImageResult.getData().get(0).getUrl();
}
private String buildDialogsPrompt(List<Message> messages, String agentSystem, String[] knowledgeIds) {
......
......@@ -72,5 +72,8 @@ public interface AgentApplicationInfoRest extends BaseRest {
*/
String createPreamble(@RequestBody AgentApplicationGCDto dto) throws Exception;
/**
* AI创建应用头像
*/
String createAgentApplicationAvatar(@RequestBody AgentApplicationGCDto dto) throws Exception;
}
\ No newline at end of file
......@@ -160,5 +160,9 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
return agentApplicationInfoService.createPreamble(dto.getAgentTitle(), dto.getAgentDesc());
}
@Override
public String createAgentApplicationAvatar(AgentApplicationGCDto dto) throws Exception {
Assert.isTrue(StringUtils.isNotBlank(dto.getAgentDesc()) || StringUtils.isNotBlank(dto.getAgentTitle()), "请输入标题或者描述再生成应用头像");
return agentApplicationInfoService.createAgentIcon(dto.getAgentTitle(), dto.getAgentDesc());
}
}
\ No newline at end of file
......@@ -11,5 +11,12 @@ public interface BosConfigService extends BaseService {
String uploadFileByByteArray2Oss(byte[] decodedByte, String fileName, String fileType) throws IOException;
String upload(InputStream inputStream,String fileType,String contentType) throws IOException;
String upload(InputStream inputStream, String fileType, String contentType) throws IOException;
String uploadImageByBase64(String base64) throws IOException;
String uploadImageByUrl2Bos(String url) throws IOException;
}
package cn.com.poc.common.service.impl;
import cn.com.poc.common.service.BosConfigService;
import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.UUIDTool;
import cn.com.yict.framemax.core.config.Config;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
......@@ -15,8 +17,13 @@ import org.apache.http.client.utils.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.Date;
import java.util.Optional;
......@@ -122,6 +129,35 @@ public class BosConfigServiceImpl implements BosConfigService {
}
}
@Override
public String uploadImageByBase64(String base64) throws IOException {
Assert.notBlank(base64);
byte[] decode = Base64.getDecoder().decode(base64);
String fileType = "jpeg";
return this.uploadFileByByteArray2Oss(decode, UUIDTool.getUUID(), fileType);
}
@Override
public String uploadImageByUrl2Bos(String path) throws IOException {
StringBuffer resultUrl = new StringBuffer();
String fileType = "jpeg";
URL url = new URL(path);
HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.setRequestMethod("GET");
httpUrl.usingProxy();
httpUrl.connect();
InputStream inputStream = new BufferedInputStream(httpUrl.getInputStream());
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
output.write(buffer, 0, n);
}
byte[] content = output.toByteArray();
return this.uploadFileByByteArray2Oss(content, UUIDTool.getUUID(), fileType);
}
//返回即将创建的文件名
private String createFileName(String fileType) {
StringBuilder stringBuilder = new StringBuilder();
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*;
import javax.servlet.http.HttpServletResponse;
/**
* @author alex.yao
* @date 2023/5/30
*
* 图片创建
**/
public interface AICreateImageService {
/**
* 调用OpenAi创建图片接口
*/
GenerationsResult invokeCreateImage(GenerationsRequest request) throws Exception;
/**
* 调用Baidu创建图片接口(普通版)
*/
GenerationsResult invokeCreateImage(BaiduGenerationsRequest request) throws Exception;
/**
* 调用Baidu创建图片接口(高级版)
*/
GenerationsResult invokeCreateImageV2(BaiduGenerationsV2Request request) throws Exception;
/**
* 调用Baidu千帆大模型文生图
* Stable-Diffusion-XL是业内知名的跨模态大模型,由StabilityAI研发并开源,有着业内领先的图像生成能力。
*/
BaiduAISailsText2ImageResult executeSailsText2Image(BaiduAISailsText2ImageRequest request) throws Exception;
/**
* 千帆大模型图生文
* Fuyu-8B是由Adept AI训练的多模态图像理解模型,可以支持多样的图像分辨率,回答图形图表有关问题。模型在视觉问答和图像描述等任务上表现良好。
*/
BaiduAISailsImage2TextResult executeSailsImage2Text(BaiduAISailsImage2TextRequest request, HttpServletResponse httpServletResponse) throws Exception;
}
package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
import cn.com.poc.common.service.BosConfigService;
import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AICreateImageService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.OpenAiResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants;
import cn.com.yict.framemax.core.exception.BusinessException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections.CollectionUtils;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author alex.yao
* @date 2023/5/30
**/
@Service
public class AICreateImageServiceImpl implements AICreateImageService {
private Logger logger = LoggerFactory.getLogger(AICreateImageService.class);
private final Integer CHAR_BUFFER_SIZE = 100;
private final String EVENT_STREAM_PREFIX = "data: ";
private final String EVENT_STREAM_SUFFIX = org.apache.commons.lang3.StringUtils.LF + org.apache.commons.lang3.StringUtils.LF;
private String FAILED = "FAILED";
private final String POST = "POST";
@Value("${dgtools.domain.url}")
private String DOMAIN_URL;
@Resource
private BosConfigService bosConfigService;
@Resource
private DemandAuthService demandAuthService;
@Resource
private DgtoolsAbstractHttpClient dgToolsAbstractHttpClient;
@Override
public GenerationsResult invokeCreateImage(GenerationsRequest request) {
String minSize = "256x256";
String midSize = "512x512";
String maxSize = "1024x1024";
if (request.getSize() == null) {
request.setSize(maxSize);
}
if (request.getN() == null) {
request.setN(1);
}
Assert.notNull(request.getPrompt());
Assert.isTrue(request.getPrompt().length() < 1000, "A text description of the desired image(s). The maximum length is 1000 characters.");
Assert.isTrue(minSize.equals(request.getSize()) || midSize.equals(request.getSize()) || maxSize.equals(request.getSize()), "The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.");
Assert.isTrue(request.getN() <= 10 && request.getN() >= 1, "The number of images to generate. Must be between 1 and 10.");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
OpenAiResult openAiResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_OPENAI_CREATE_IMAGE, request, headers);
if (openAiResult != null) {
GenerationsResult generationsResult = JSONObject.parseObject(openAiResult.getMessage(), GenerationsResult.class);
return generationsResult;
}
return null;
}
@Override
public GenerationsResult invokeCreateImage(BaiduGenerationsRequest request) throws IOException {
Assert.notNull(request);
String minSize = "1024*1024";
String midSize = "1024*1536";
String maxSize = "1536*1024";
if (request.getResolution() == null) {
request.setResolution(maxSize);
}
if (request.getNum() == null) {
request.setNum(1);
}
Assert.notNull(request.getText());
Assert.isTrue(request.getText().length() < 100, "输入内容,长度不超过100个字");
Assert.isTrue(minSize.equals(request.getResolution()) || midSize.equals(request.getResolution()) || maxSize.equals(request.getResolution()), "图片分辨率,可支持1024*1024、1024*1536、1536*1024");
Assert.isTrue(request.getNum() <= 6 && request.getNum() >= 1, "图片生成数量,支持1-6张");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageResult baiduGetImageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE, request, headers);
if (baiduGetImageResult != null) {
GenerationsResult generationsResult = new GenerationsResult();
List<ImgUrl> imgUrls = baiduGetImageResult.getData().getImgUrls();
if (CollectionUtils.isEmpty(imgUrls)) {
return null;
}
List<Datum> data = new ArrayList<>();
for (ImgUrl imgUrl : imgUrls) {
Datum datum = new Datum();
String url = bosConfigService.uploadImageByUrl2Bos(imgUrl.getImage());
datum.setUrl(url);
data.add(datum);
}
generationsResult.setData(data);
return generationsResult;
}
return null;
}
@Override
public GenerationsResult invokeCreateImageV2(BaiduGenerationsV2Request request) throws IOException {
Assert.notNull(request);
Assert.notBlank(request.getPrompt());
Assert.notNull(request.getWidth());
Assert.notNull(request.getHeight());
if (request.getImageNum() == null) {
request.setImageNum(1);
}
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageV2Result baiduGetImageV2Result = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE_V2, request, headers);
if (baiduGetImageV2Result != null) {
if (FAILED.equals(baiduGetImageV2Result.getData().getTaskStatus())) {
logger.error("-----------调用百度AI作图高级错误:{}-------------", JSONObject.toJSONString(baiduGetImageV2Result));
throw new BusinessException("生成图片失败");
}
GenerationsResult generationsResult = new GenerationsResult();
List<SubTaskResult> subTaskResultList = baiduGetImageV2Result.getData().getSubTaskResultList();
if (CollectionUtils.isEmpty(subTaskResultList)) {
return null;
}
List<String> imgUrls = new ArrayList<>();
for (SubTaskResult subTaskResult : subTaskResultList) {
List<FinalImage> finalImageList = subTaskResult.getFinalImageList();
finalImageList.forEach(finalImage -> {
imgUrls.add(finalImage.getImgUrl());
});
}
if (CollectionUtils.isEmpty(imgUrls)) {
return null;
}
List<Datum> data = new ArrayList<>();
for (String imgUrl : imgUrls) {
Datum datum = new Datum();
String url = bosConfigService.uploadImageByUrl2Bos(imgUrl);
datum.setUrl(url);
data.add(datum);
}
generationsResult.setData(data);
return generationsResult;
}
return null;
}
@Override
public BaiduAISailsText2ImageResult executeSailsText2Image(BaiduAISailsText2ImageRequest request) throws Exception {
Assert.notNull(request, "文生图配置异常,请联系开发人员");
Assert.notNull(request.getPrompt(), "文生图配置异常,请联系开发人员");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduAISailsText2ImageResult imageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_TEXT_CREATE_IMAGE, request, headers);
if (imageResult == null) {
throw new BusinessException("中台无响应,请联系开发人员");
}
if (StringUtils.isNotBlank(imageResult.getErrorMsg())) {
logger.error("调用中台百度千帆大模型错误,错误信息:{}", JSONObject.toJSONString(imageResult));
throw new BusinessException(imageResult.getErrorMsg());
}
List<BaiduAISailsText2ImageDataItem> dataList = imageResult.getData();
if (CollectionUtils.isEmpty(dataList)) {
throw new BusinessException("中台无响应,请联系开发人员");
}
//上传到oss
for (BaiduAISailsText2ImageDataItem imageData : dataList) {
if (StringUtils.isBlank(imageData.getImageBase64())) {
throw new BusinessException("中台无响应,请联系开发人员");
}
String url = bosConfigService.uploadImageByBase64(imageData.getImageBase64());
imageData.setUrl(url);
}
imageResult.setData(dataList);
logger.info("调用中台百度大模型成功,响应信息:{}", JSONObject.toJSONString(imageResult));
return imageResult;
}
@Override
public BaiduAISailsImage2TextResult executeSailsImage2Text(BaiduAISailsImage2TextRequest request, HttpServletResponse httpServletResponse) throws Exception {
Assert.notNull(request, "图生文配置异常,请联系开发人员");
Assert.notNull(request.getPrompt(), "图生文配置异常,请联系开发人员");
String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST)
.setUri(DOMAIN_URL + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_IMAGE_CREATE_TEXT)
.addHeader(DgtoolsApiConstants.JSON_HEADER)
.addHeader(DgtoolsApiConstants.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8))
.build()
);
if (request.getStream() == null || !request.getStream()) {
//非流
String responseBodyStr = EntityUtils.toString(httpResponse.getEntity());
if (StringUtils.isBlank(responseBodyStr)) {
throw new BusinessException("无响应,请联系开发人员");
}
JSONObject jsonObject = JSONObject.parseObject(responseBodyStr);
Integer code = (Integer) jsonObject.get("code");
if (code == 0) {
String data = jsonObject.getString("data");
return JSON.parseObject(data, BaiduAISailsImage2TextResult.class);
} else {
throw new BusinessException(jsonObject.getString("message"));
}
}
//流式
return sailsImage2TextEventStreamResponse(httpResponse, httpServletResponse);
}
/**
* 处理千帆大模型图生文流式响应
*/
BaiduAISailsImage2TextResult sailsImage2TextEventStreamResponse(CloseableHttpResponse httpResponse, HttpServletResponse httpServletResponse) throws Exception {
PrintWriter writer = null;
InputStream inputStream = null;
BufferedReader bufferedReader = null;
StringBuilder completeResponse = new StringBuilder();
//返回实体,用作记录保存
BaiduAISailsImage2TextResult returnResult = new BaiduAISailsImage2TextResult();
try {
writer = httpServletResponse.getWriter();
inputStream = httpResponse.getEntity().getContent();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8), CHAR_BUFFER_SIZE);
String str;
while ((str = bufferedReader.readLine()) != null) {
if (org.apache.commons.lang3.StringUtils.isBlank(str)) {
continue;
}
//去除第一个data:
Pattern pattern = Pattern.compile("^" + EVENT_STREAM_PREFIX);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
str = matcher.replaceFirst(org.apache.commons.lang3.StringUtils.EMPTY);
}
BaiduAISailsImage2TextResult image2TextResult = JSONObject.parseObject(str, BaiduAISailsImage2TextResult.class);
if (image2TextResult == null || image2TextResult.getId() == null) {
continue;
}
//不同的结果赋值到返回实体
if (image2TextResult.getErrorCode() != null) {
BeanUtils.copyProperties(image2TextResult, returnResult);
} else {
//拼装完整回答
completeResponse.append(image2TextResult.getResult());
}
writer.write(EVENT_STREAM_PREFIX + str + EVENT_STREAM_SUFFIX);
writer.flush();
}
returnResult.setResult(completeResponse.toString());
} catch (Exception e) {
throw new BusinessException(e.getMessage());
} finally {
//关闭资源
if (writer != null) {
writer.close();
}
if (inputStream != null) {
inputStream.close();
}
if (bufferedReader != null) {
bufferedReader.close();
}
}
return returnResult;
}
}
......@@ -206,4 +206,20 @@ public class BaiduAISailsText2ImageRequest extends AbstractRequest<BaiduAISailsT
public String getMethod() throws Exception {
return null;
}
@Override
public String toString() {
return "BaiduAISailsText2ImageRequest{" +
"prompt='" + prompt + '\'' +
", negativePrompt='" + negativePrompt + '\'' +
", size='" + size + '\'' +
", n=" + n +
", steps=" + steps +
", samplerIndex='" + samplerIndex + '\'' +
", seed=" + seed +
", cfgCcale=" + cfgCcale +
", style='" + style + '\'' +
", userId='" + userId + '\'' +
'}';
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment