feat: spring ai 1.0.0 m1 version adaptation (#3768)

Signed-off-by: yuluo-yx <yuluo08290126@gmail.com>
pull/3769/head
YuLuo 8 months ago committed by GitHub
parent f337b70dfe
commit c91d229e7f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -22,7 +22,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@SpringBootApplication

@ -40,7 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@RestController
@ -133,7 +133,7 @@ public class TongYiController {
@Qualifier("tongYiAudioSimpleServiceImpl")
private TongYiService tongYiAudioService;
@GetMapping("/audio")
@GetMapping("/audio/speech")
public String genAudio(@RequestParam(value = "prompt",
defaultValue = "你好Spring Cloud Alibaba AI 框架!") String prompt) {

@ -21,7 +21,7 @@ import java.util.List;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
public class ActorsFilms {

@ -19,7 +19,7 @@ package com.alibaba.cloud.ai.example.tongyi.models;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
public class Completion {

@ -28,7 +28,7 @@ import org.springframework.ai.image.ImageResponse;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
public abstract class AbstractTongYiServiceImpl implements TongYiService {

@ -29,7 +29,7 @@ import org.springframework.ai.image.ImageResponse;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
public interface TongYiService {

@ -24,9 +24,8 @@ import java.time.format.DateTimeFormatter;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechClient;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechModel;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisAudioFormat;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -35,19 +34,19 @@ import org.springframework.stereotype.Service;
/**
* @author yuluo
* @author 1481556636@qq.com
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.1.0
*/
@Slf4j
@Service
public class TongYiAudioSimpleServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final SpeechClient speechClient;
private final SpeechModel speechClient;
@Autowired
public TongYiAudioSimpleServiceImpl(SpeechClient client) {
public TongYiAudioSimpleServiceImpl(SpeechModel client) {
this.speechClient = client;
}

@ -28,13 +28,12 @@ import java.util.List;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import com.alibaba.cloud.ai.tongyi.audio.transcription.TongYiAudioTranscriptionClient;
import com.alibaba.cloud.ai.tongyi.audio.transcription.TongYiAudioTranscriptionModel;
import com.alibaba.cloud.ai.tongyi.audio.transcription.api.AudioTranscriptionPrompt;
import com.alibaba.cloud.ai.tongyi.audio.transcription.api.AudioTranscriptionResult;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -45,17 +44,21 @@ import org.springframework.stereotype.Service;
/**
* @author xYLiu
* @since 2024/5/15 14:55
* @author yuluo
* @since 2023.0.1.0
*/
@Slf4j
@Service
public class TongYiAudioTranscriptionServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final TongYiAudioTranscriptionClient audioTranscriptionClient;
private final TongYiAudioTranscriptionModel audioTranscriptionModel;
@Autowired
public TongYiAudioTranscriptionServiceImpl(final TongYiAudioTranscriptionClient audioTranscriptionClient) {
this.audioTranscriptionClient = audioTranscriptionClient;
public TongYiAudioTranscriptionServiceImpl(final TongYiAudioTranscriptionModel transcriptionModel) {
this.audioTranscriptionModel = transcriptionModel;
}
@Override
@ -72,7 +75,7 @@ public class TongYiAudioTranscriptionServiceImpl extends AbstractTongYiServiceIm
}
AudioTranscriptionPrompt audioTranscriptionPrompt = new AudioTranscriptionPrompt(resource);
return save(audioTranscriptionClient.call(audioTranscriptionPrompt).getResults());
return save(audioTranscriptionModel.call(audioTranscriptionPrompt).getResults());
}
private String save(List<AudioTranscriptionResult> resultList) {

@ -19,8 +19,6 @@ package com.alibaba.cloud.ai.example.tongyi.service.impl.helloworld;
import java.util.Map;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
@ -33,19 +31,19 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Simple example.
* There is optional message parameter whose default value is "Tell me a joke". pl The response to the request is from the TongYi models Service.
* The Chat simple example service implementation.
* There is optional message parameter whose default value is "Tell me a joke".
* pl The response to the request is from the TongYi models Service.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private static final Logger logger = LoggerFactory.getLogger(TongYiSimpleServiceImpl.class);
private final ChatModel chatModel;
@ -79,7 +77,7 @@ public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {
.map(lastContent -> Map.of(message, fullContent.toString()))
.block();
log.info(fullContent.toString());
logger.info(fullContent.toString());
return Map.of(message, fullContent.toString());
}

@ -17,10 +17,6 @@
package com.alibaba.cloud.ai.example.tongyi.service.impl.images;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.image.ImageModel;
import org.springframework.ai.image.ImagePrompt;
@ -33,15 +29,12 @@ import org.springframework.stereotype.Service;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final ImageModel imageModel;
@Autowired
@ -54,7 +47,6 @@ public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl {
public ImageResponse genImg(String imgPrompt) {
var prompt = new ImagePrompt(imgPrompt);
return imageModel.call(prompt);
}

@ -20,8 +20,6 @@ import java.util.Map;
import com.alibaba.cloud.ai.example.tongyi.models.ActorsFilms;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -38,14 +36,13 @@ import org.springframework.stereotype.Service;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiOutputParseServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private static final Logger logger = LoggerFactory.getLogger(TongYiOutputParseServiceImpl.class);
private final ChatModel chatModel;

@ -19,10 +19,6 @@ package com.alibaba.cloud.ai.example.tongyi.service.impl.prompttemplate;
import java.util.Map;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.model.ChatModel;
@ -38,15 +34,12 @@ import org.springframework.stereotype.Service;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiPromptTemplateServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final ChatModel chatModel;
@Value("classpath:/prompts/joke-prompt.st")

@ -20,10 +20,6 @@ import java.util.List;
import java.util.Map;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.UserMessage;
@ -37,15 +33,12 @@ import org.springframework.stereotype.Service;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiRolesServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final ChatModel chatModel;
public TongYiRolesServiceImpl(ChatModel chatModel) {
@ -65,7 +58,6 @@ public class TongYiRolesServiceImpl extends AbstractTongYiServiceImpl {
In TongYi models, System role must appear at the top of the message and can only appear once.
https://help.aliyun.com/zh/dashscope/developer-reference/api-details?spm=a2c4g.11186623.0.0.4dbcc11akAaRbs#b9ad0a10cfhpe
*/
SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource);

@ -21,10 +21,6 @@ import java.util.Map;
import com.alibaba.cloud.ai.example.tongyi.models.Completion;
import com.alibaba.cloud.ai.example.tongyi.service.AbstractTongYiServiceImpl;
import com.alibaba.cloud.ai.example.tongyi.service.TongYiService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.Generation;
@ -39,15 +35,12 @@ import org.springframework.stereotype.Service;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.0.0
*/
@Slf4j
@Service
public class TongYiStuffServiceImpl extends AbstractTongYiServiceImpl {
private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
private final ChatModel chatModel;
public TongYiStuffServiceImpl(ChatModel chatModel) {

@ -1,6 +1,6 @@
# Spring Cloud Alibaba AI Text Embedding
`TongYiController` 接受一个 HTTP GET 请求 `http://localhost:8080/ai/audio`。
`TongYiController` 接受一个 HTTP GET 请求 `http://localhost:8080/ai/textEmbedding`。
`controller` 将会调用 `TongYiService` 中的 `genAudio` 方法,完成服务请求得到响应。
有一个可选的 `text` 参数其默认值为“Spring Cloud Alibaba AI 框架!”。 请求响应来自 Alibaba TongYi Text Embedding 服务。

@ -18,17 +18,17 @@ package com.alibaba.cloud.ai.tongyi;
import java.util.Objects;
import com.alibaba.cloud.ai.tongyi.audio.speech.TongYiAudioSpeechClient;
import com.alibaba.cloud.ai.tongyi.audio.speech.TongYiAudioSpeechModel;
import com.alibaba.cloud.ai.tongyi.audio.speech.TongYiAudioSpeechProperties;
import com.alibaba.cloud.ai.tongyi.audio.transcription.TongYiAudioTranscriptionClient;
import com.alibaba.cloud.ai.tongyi.audio.transcription.TongYiAudioTranscriptionModel;
import com.alibaba.cloud.ai.tongyi.audio.transcription.TongYiAudioTranscriptionProperties;
import com.alibaba.cloud.ai.tongyi.chat.TongYiChatClient;
import com.alibaba.cloud.ai.tongyi.chat.TongYiChatModel;
import com.alibaba.cloud.ai.tongyi.chat.TongYiChatProperties;
import com.alibaba.cloud.ai.tongyi.constants.TongYiConstants;
import com.alibaba.cloud.ai.tongyi.embedding.TongYiTextEmbeddingClient;
import com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.embedding.TongYiTextEmbeddingModel;
import com.alibaba.cloud.ai.tongyi.embedding.TongYiTextEmbeddingProperties;
import com.alibaba.cloud.ai.tongyi.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesClient;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesModel;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesProperties;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
@ -53,16 +53,17 @@ import org.springframework.context.annotation.Scope;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@AutoConfiguration
@ConditionalOnClass({
MessageManager.class,
TongYiChatClient.class,
TongYiImagesClient.class,
TongYiAudioSpeechClient.class,
TongYiAudioTranscriptionClient.class
TongYiChatModel.class,
TongYiImagesModel.class,
TongYiAudioSpeechModel.class,
TongYiTextEmbeddingModel.class,
TongYiAudioTranscriptionModel.class
})
@EnableConfigurationProperties({
TongYiChatProperties.class,
@ -137,14 +138,14 @@ public class TongYiAutoConfiguration {
havingValue = "true",
matchIfMissing = true
)
public TongYiChatClient tongYiChatClient(Generation generation,
public TongYiChatModel tongYiChatClient(Generation generation,
TongYiChatProperties chatOptions,
TongYiConnectionProperties connectionProperties
) {
settingApiKey(connectionProperties);
return new TongYiChatClient(generation, chatOptions.getOptions());
return new TongYiChatModel(generation, chatOptions.getOptions());
}
@Bean
@ -154,7 +155,7 @@ public class TongYiAutoConfiguration {
havingValue = "true",
matchIfMissing = true
)
public TongYiImagesClient tongYiImagesClient(
public TongYiImagesModel tongYiImagesClient(
ImageSynthesis imageSynthesis,
TongYiImagesProperties imagesOptions,
TongYiConnectionProperties connectionProperties
@ -162,7 +163,7 @@ public class TongYiAutoConfiguration {
settingApiKey(connectionProperties);
return new TongYiImagesClient(imageSynthesis, imagesOptions.getOptions());
return new TongYiImagesModel(imageSynthesis, imagesOptions.getOptions());
}
@Bean
@ -172,7 +173,7 @@ public class TongYiAutoConfiguration {
havingValue = "true",
matchIfMissing = true
)
public TongYiAudioSpeechClient tongYiAudioSpeechClient(
public TongYiAudioSpeechModel tongYiAudioSpeechClient(
SpeechSynthesizer speechSynthesizer,
TongYiAudioSpeechProperties speechProperties,
TongYiConnectionProperties connectionProperties
@ -180,7 +181,7 @@ public class TongYiAutoConfiguration {
settingApiKey(connectionProperties);
return new TongYiAudioSpeechClient(speechSynthesizer, speechProperties.getOptions());
return new TongYiAudioSpeechModel(speechSynthesizer, speechProperties.getOptions());
}
@Bean
@ -190,14 +191,14 @@ public class TongYiAutoConfiguration {
havingValue = "true",
matchIfMissing = true
)
public TongYiAudioTranscriptionClient tongYiAudioTranscriptionClient(
public TongYiAudioTranscriptionModel tongYiAudioTranscriptionClient(
Transcription transcription,
TongYiAudioTranscriptionProperties transcriptionProperties,
TongYiConnectionProperties connectionProperties) {
settingApiKey(connectionProperties);
return new TongYiAudioTranscriptionClient(
return new TongYiAudioTranscriptionModel(
transcriptionProperties.getOptions(),
transcription
);
@ -210,13 +211,13 @@ public class TongYiAutoConfiguration {
havingValue = "true",
matchIfMissing = true
)
public TongYiTextEmbeddingClient tongYiTextEmbeddingClient(
public TongYiTextEmbeddingModel tongYiTextEmbeddingClient(
TextEmbedding textEmbedding,
TongYiConnectionProperties connectionProperties
) {
settingApiKey(connectionProperties);
return new TongYiTextEmbeddingClient(textEmbedding);
return new TongYiTextEmbeddingModel(textEmbedding);
}
/**

@ -18,25 +18,26 @@ package com.alibaba.cloud.ai.tongyi;
import org.springframework.boot.context.properties.ConfigurationProperties;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* TongYi connection API properties.
* Spring Cloud Alibaba AI TongYi LLM connection properties.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiConnectionProperties.CONFIG_PREFIX)
public class TongYiConnectionProperties {
/**
* Spring Cloud Alibaba AI configuration prefix.
* Spring Cloud Alibaba AI connection configuration Prefix.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "tongyi";
/**
* API key.
* TongYi LLM API key.
*/
private String apiKey;
@ -47,4 +48,5 @@ public class TongYiConnectionProperties {
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
}

@ -22,7 +22,7 @@ package com.alibaba.cloud.ai.tongyi.audio;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public final class AudioSpeechModels {

@ -19,7 +19,7 @@ package com.alibaba.cloud.ai.tongyi.audio;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public final class AudioTranscriptionModels {

@ -20,10 +20,10 @@ import java.nio.ByteBuffer;
import com.alibaba.cloud.ai.tongyi.audio.AudioSpeechModels;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.Speech;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechClient;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechModel;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechPrompt;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechResponse;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechStreamClient;
import com.alibaba.cloud.ai.tongyi.audio.speech.api.SpeechStreamModel;
import com.alibaba.cloud.ai.tongyi.metadata.audio.TongYiAudioSpeechResponseMetadata;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisResult;
@ -42,10 +42,10 @@ import org.springframework.util.Assert;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiAudioSpeechClient implements SpeechClient, SpeechStreamClient {
public class TongYiAudioSpeechModel implements SpeechModel, SpeechStreamModel {
private final Logger logger = LoggerFactory.getLogger(getClass());
@ -68,7 +68,7 @@ public class TongYiAudioSpeechClient implements SpeechClient, SpeechStreamClient
* TongYiAudioSpeechClient constructor.
* @param speechSynthesizer the speech synthesizer
*/
public TongYiAudioSpeechClient(SpeechSynthesizer speechSynthesizer) {
public TongYiAudioSpeechModel(SpeechSynthesizer speechSynthesizer) {
this(speechSynthesizer, null);
}
@ -78,7 +78,7 @@ public class TongYiAudioSpeechClient implements SpeechClient, SpeechStreamClient
* @param speechSynthesizer the speech synthesizer
* @param tongYiAudioOptions the tongYi audio options
*/
public TongYiAudioSpeechClient(SpeechSynthesizer speechSynthesizer, TongYiAudioSpeechOptions tongYiAudioOptions) {
public TongYiAudioSpeechModel(SpeechSynthesizer speechSynthesizer, TongYiAudioSpeechOptions tongYiAudioOptions) {
Assert.notNull(speechSynthesizer, "speechSynthesizer must not be null");
Assert.notNull(tongYiAudioOptions, "tongYiAudioOptions must not be null");

@ -25,7 +25,7 @@ import org.springframework.ai.model.ModelOptions;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiAudioSpeechOptions implements ModelOptions {

@ -17,31 +17,28 @@
package com.alibaba.cloud.ai.tongyi.audio.speech;
import com.alibaba.cloud.ai.tongyi.audio.AudioSpeechModels;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesProperties;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisAudioFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* TongYi audio speech configuration properties.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiAudioSpeechProperties.CONFIG_PREFIX)
public class TongYiAudioSpeechProperties {
private final Logger logger = LoggerFactory.getLogger(TongYiImagesProperties.class);
/**
* Spring Cloud Alibaba AI configuration prefix.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi.audio.speech";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "audio.speech";
/**
* Default TongYi Chat model.
*/

@ -26,7 +26,7 @@ import org.springframework.lang.Nullable;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class Speech implements ModelResult<ByteBuffer> {

@ -19,9 +19,12 @@ package com.alibaba.cloud.ai.tongyi.audio.speech.api;
import java.util.Objects;
/**
* The {@link SpeechMessage} class represents a single text message to
* be converted to speech by the TongYi LLM TTS.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class SpeechMessage {

@ -21,7 +21,7 @@ import org.springframework.ai.model.ResultMetadata;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public interface SpeechMetadata extends ResultMetadata {

@ -27,7 +27,7 @@ import org.springframework.ai.model.Model;
*/
@FunctionalInterface
public interface SpeechClient extends Model<SpeechPrompt, SpeechResponse> {
public interface SpeechModel extends Model<SpeechPrompt, SpeechResponse> {
/**
* Generates spoken audio from the provided text message.

@ -25,7 +25,7 @@ import org.springframework.ai.model.ModelRequest;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class SpeechPrompt implements ModelRequest<SpeechMessage> {

@ -27,7 +27,7 @@ import org.springframework.ai.model.ModelResponse;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class SpeechResponse implements ModelResponse<Speech> {

@ -25,11 +25,11 @@ import org.springframework.ai.model.StreamingModel;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@FunctionalInterface
public interface SpeechStreamClient extends StreamingModel<SpeechPrompt, SpeechResponse> {
public interface SpeechStreamModel extends StreamingModel<SpeechPrompt, SpeechResponse> {
/**
* Generates a stream of audio bytes from the provided text message.
@ -40,7 +40,6 @@ public interface SpeechStreamClient extends StreamingModel<SpeechPrompt, SpeechR
default Flux<ByteBuffer> stream(String message) {
SpeechPrompt prompt = new SpeechPrompt(message);
return stream(prompt).map(SpeechResponse::getResult).map(Speech::getOutput);
}

@ -26,7 +26,7 @@ import com.alibaba.cloud.ai.tongyi.audio.AudioTranscriptionModels;
import com.alibaba.cloud.ai.tongyi.audio.transcription.api.AudioTranscriptionPrompt;
import com.alibaba.cloud.ai.tongyi.audio.transcription.api.AudioTranscriptionResponse;
import com.alibaba.cloud.ai.tongyi.audio.transcription.api.AudioTranscriptionResult;
import com.alibaba.cloud.ai.tongyi.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.metadata.audio.TongYiAudioTranscriptionResponseMetadata;
import com.alibaba.dashscope.audio.asr.transcription.Transcription;
import com.alibaba.dashscope.audio.asr.transcription.TranscriptionParam;
@ -39,14 +39,14 @@ import org.springframework.core.io.Resource;
import org.springframework.util.Assert;
/**
* TongYiAudioTranscriptionClient is a client for TongYi audio transcription service for
* TongYiAudioTranscriptionModel is a client for TongYi audio transcription service for
* Spring Cloud Alibaba AI.
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class TongYiAudioTranscriptionClient
public class TongYiAudioTranscriptionModel
implements Model<AudioTranscriptionPrompt, AudioTranscriptionResponse> {
/**
@ -59,11 +59,11 @@ public class TongYiAudioTranscriptionClient
*/
private final Transcription transcription;
public TongYiAudioTranscriptionClient(Transcription transcription) {
public TongYiAudioTranscriptionModel(Transcription transcription) {
this(null, transcription);
}
public TongYiAudioTranscriptionClient(TongYiAudioTranscriptionOptions defaultOptions,
public TongYiAudioTranscriptionModel(TongYiAudioTranscriptionOptions defaultOptions,
Transcription transcription) {
Assert.notNull(transcription, "transcription must not be null");
Assert.notNull(defaultOptions, "defaultOptions must not be null");

@ -27,7 +27,7 @@ import org.springframework.ai.model.ModelOptions;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class TongYiAudioTranscriptionOptions implements ModelOptions {

@ -21,10 +21,12 @@ import com.alibaba.cloud.ai.tongyi.audio.AudioTranscriptionModels;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiAudioTranscriptionProperties.CONFIG_PREFIX)
@ -33,7 +35,7 @@ public class TongYiAudioTranscriptionProperties {
/**
* Spring Cloud Alibaba AI configuration prefix.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi.audio.transcription";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "audio.transcription";
/**
* Default TongYi Chat model.

@ -24,7 +24,7 @@ import org.springframework.core.io.Resource;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class AudioTranscriptionPrompt implements ModelRequest<Resource> {

@ -26,7 +26,7 @@ import org.springframework.ai.model.ResponseMetadata;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class AudioTranscriptionResponse implements ModelResponse<AudioTranscriptionResult> {

@ -26,7 +26,7 @@ import org.springframework.ai.model.ResultMetadata;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class AudioTranscriptionResult implements ModelResult<String> {

@ -21,7 +21,7 @@ import java.util.Objects;
import java.util.Set;
import com.alibaba.cloud.ai.tongyi.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiException;
import com.alibaba.dashscope.aigc.conversation.ConversationParam;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationOutput;
@ -61,19 +61,19 @@ import org.springframework.util.CollectionUtils;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
* @see ChatModel
* @see com.alibaba.dashscope.aigc.generation
*/
public class TongYiChatClient extends
public class TongYiChatModel extends
AbstractFunctionCallSupport<
com.alibaba.dashscope.common.Message,
ConversationParam,
GenerationResult>
implements ChatModel, StreamingChatModel {
private static final Logger logger = LoggerFactory.getLogger(TongYiChatClient.class);
private static final Logger logger = LoggerFactory.getLogger(TongYiChatModel.class);
/**
* DashScope generation client.
@ -95,7 +95,7 @@ public class TongYiChatClient extends
* Initializes an instance of the TongYiChatClient.
* @param generation DashScope generation client.
*/
public TongYiChatClient(Generation generation) {
public TongYiChatModel(Generation generation) {
this(generation,
TongYiChatOptions.builder()
@ -112,7 +112,7 @@ public class TongYiChatClient extends
* @param generation DashScope generation client.
* @param options TongYi model params.
*/
public TongYiChatClient(Generation generation, TongYiChatOptions options) {
public TongYiChatModel(Generation generation, TongYiChatOptions options) {
this(generation, options, null);
}
@ -122,7 +122,7 @@ public class TongYiChatClient extends
* @param generation DashScope model generation client.
* @param options TongYi default chat completion api.
*/
public TongYiChatClient(Generation generation, TongYiChatOptions options,
public TongYiChatModel(Generation generation, TongYiChatOptions options,
FunctionCallbackContext functionCallbackContext) {
super(functionCallbackContext);

@ -33,7 +33,7 @@ import org.springframework.util.Assert;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiChatOptions implements FunctionCallingOptions, ChatOptions {

@ -22,10 +22,12 @@ import com.alibaba.dashscope.aigc.generation.GenerationParam;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiChatProperties.CONFIG_PREFIX)
@ -34,7 +36,7 @@ public class TongYiChatProperties {
/**
* Spring Cloud Alibaba AI configuration prefix.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi.chat";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "chat";
/**
* Default TongYi Chat model.

@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.alibaba.cloud.ai.tongyi.constants;
package com.alibaba.cloud.ai.tongyi.common.constants;
/**
* @author yuluo
@ -26,6 +26,11 @@ public final class TongYiConstants {
private TongYiConstants() {
}
/**
* Spring Cloud Alibaba AI configuration prefix.
*/
public static final String SCA_AI_CONFIGURATION = "spring.cloud.ai.tongyi.";
/**
* Spring Cloud Alibaba AI constants prefix.
*/

@ -14,14 +14,14 @@
* limitations under the License.
*/
package com.alibaba.cloud.ai.tongyi.exception;
package com.alibaba.cloud.ai.tongyi.common.exception;
/**
* TongYi models runtime exception.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiException extends RuntimeException {

@ -14,14 +14,14 @@
* limitations under the License.
*/
package com.alibaba.cloud.ai.tongyi.exception;
package com.alibaba.cloud.ai.tongyi.common.exception;
/**
* TongYi models images exception.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiImagesException extends TongYiException {

@ -26,7 +26,7 @@ import org.springframework.ai.embedding.EmbeddingOptions;
* @author why_ohh
* @author yuluo
* @author <a href="mailto:550588941@qq.com">why_ohh</a>
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public final class TongYiEmbeddingOptions implements EmbeddingOptions {

@ -19,7 +19,7 @@ package com.alibaba.cloud.ai.tongyi.embedding;
import java.util.List;
import java.util.stream.Collectors;
import com.alibaba.cloud.ai.tongyi.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiException;
import com.alibaba.cloud.ai.tongyi.metadata.TongYiTextEmbeddingResponseMetadata;
import com.alibaba.dashscope.embeddings.TextEmbedding;
import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
@ -39,17 +39,17 @@ import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.util.Assert;
/**
* {@link TongYiTextEmbeddingClient} implementation for {@literal Alibaba DashScope}.
* {@link TongYiTextEmbeddingModel} implementation for {@literal Alibaba DashScope}.
*
* @author why_ohh
* @author yuluo
* @author <a href="mailto:550588941@qq.com">why_ohh</a>
* @since 2023.0.0.0
* {@see TextEmbeddingClient}
* @since 2023.0.1.0
*/
public class TongYiTextEmbeddingClient extends AbstractEmbeddingModel {
public class TongYiTextEmbeddingModel extends AbstractEmbeddingModel {
private final Logger logger = LoggerFactory.getLogger(TongYiTextEmbeddingClient.class);
private final Logger logger = LoggerFactory.getLogger(TongYiTextEmbeddingModel.class);
/**
* TongYi Text Embedding client.
@ -63,12 +63,12 @@ public class TongYiTextEmbeddingClient extends AbstractEmbeddingModel {
private final TongYiEmbeddingOptions defaultOptions;
public TongYiTextEmbeddingClient(TextEmbedding textEmbedding) {
public TongYiTextEmbeddingModel(TextEmbedding textEmbedding) {
this(textEmbedding, MetadataMode.EMBED);
}
public TongYiTextEmbeddingClient(TextEmbedding textEmbedding, MetadataMode metadataMode) {
public TongYiTextEmbeddingModel(TextEmbedding textEmbedding, MetadataMode metadataMode) {
this(textEmbedding, metadataMode,
TongYiEmbeddingOptions.builder()
@ -77,7 +77,7 @@ public class TongYiTextEmbeddingClient extends AbstractEmbeddingModel {
);
}
public TongYiTextEmbeddingClient(
public TongYiTextEmbeddingModel(
TextEmbedding textEmbedding,
MetadataMode metadataMode,
TongYiEmbeddingOptions options

@ -18,11 +18,13 @@ package com.alibaba.cloud.ai.tongyi.embedding;
import org.springframework.boot.context.properties.ConfigurationProperties;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* @author why_ohh
* @author yuluo
* @author <a href="mailto:550588941@qq.com">why_ohh</a>
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiTextEmbeddingProperties.CONFIG_PREFIX)
@ -31,7 +33,7 @@ public class TongYiTextEmbeddingProperties {
/**
* Prefix of TongYi Text Embedding properties.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi.embedding";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "embedding";
private boolean enabled = true;

@ -21,7 +21,7 @@ import java.net.URL;
import java.util.Base64;
import java.util.stream.Collectors;
import com.alibaba.cloud.ai.tongyi.exception.TongYiImagesException;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiImagesException;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
@ -45,12 +45,12 @@ import static com.alibaba.cloud.ai.tongyi.metadata.TongYiImagesResponseMetadata.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiImagesClient implements ImageModel {
public class TongYiImagesModel implements ImageModel {
private final Logger logger = LoggerFactory.getLogger(TongYiImagesClient.class);
private final Logger logger = LoggerFactory.getLogger(TongYiImagesModel.class);
/**
* Gen Images API.
@ -82,7 +82,7 @@ public class TongYiImagesClient implements ImageModel {
* @param imageSynthesis the image synthesis
* {@link ImageSynthesis}
*/
public TongYiImagesClient(ImageSynthesis imageSynthesis) {
public TongYiImagesModel(ImageSynthesis imageSynthesis) {
this(imageSynthesis, TongYiImagesOptions.
builder()
@ -97,7 +97,7 @@ public class TongYiImagesClient implements ImageModel {
* @param imageSynthesis {@link ImageSynthesis}
* @param imagesOptions {@link TongYiImagesOptions}
*/
public TongYiImagesClient(ImageSynthesis imageSynthesis, TongYiImagesOptions imagesOptions) {
public TongYiImagesModel(ImageSynthesis imageSynthesis, TongYiImagesOptions imagesOptions) {
Assert.notNull(imageSynthesis, "ImageSynthesis must not be null");
Assert.notNull(imagesOptions, "TongYiImagesOptions must not be null");

@ -18,7 +18,7 @@ package com.alibaba.cloud.ai.tongyi.image;
import java.util.Objects;
import com.alibaba.cloud.ai.tongyi.exception.TongYiImagesException;
import com.alibaba.cloud.ai.tongyi.common.exception.TongYiImagesException;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import org.springframework.ai.image.ImageOptions;
@ -28,7 +28,7 @@ import org.springframework.ai.image.ImageOptions;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiImagesOptions implements ImageOptions {

@ -17,29 +17,27 @@
package com.alibaba.cloud.ai.tongyi.image;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import static com.alibaba.cloud.ai.tongyi.common.constants.TongYiConstants.SCA_AI_CONFIGURATION;
/**
* TongYi Image API properties.
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
@ConfigurationProperties(TongYiImagesProperties.CONFIG_PREFIX)
public class TongYiImagesProperties {
private final Logger logger = LoggerFactory.getLogger(TongYiImagesProperties.class);
/**
* Spring Cloud Alibaba AI configuration prefix.
*/
public static final String CONFIG_PREFIX = "spring.cloud.ai.tongyi.images";
public static final String CONFIG_PREFIX = SCA_AI_CONFIGURATION + "images";
/**
* Default TongYi Chat model.

@ -32,7 +32,7 @@ import org.springframework.util.Assert;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiAiChatResponseMetadata extends HashMap<String, Object> implements ChatResponseMetadata {

@ -27,7 +27,7 @@ import org.springframework.util.Assert;
*
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiAiUsage implements Usage {

@ -29,7 +29,7 @@ import org.springframework.util.Assert;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiImagesResponseMetadata extends HashMap<String, Object> implements ImageResponseMetadata {

@ -24,6 +24,7 @@ import org.springframework.ai.embedding.EmbeddingResponseMetadata;
* @author why_ohh
* @author yuluo
* @author <a href="mailto:550588941@qq.com">why_ohh</a>
* @since 2023.0.1.0
*/
public class TongYiTextEmbeddingResponseMetadata extends EmbeddingResponseMetadata {

@ -32,7 +32,7 @@ import org.springframework.util.Assert;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
public class TongYiAudioSpeechResponseMetadata extends HashMap<String, Object> implements ResponseMetadata {

@ -21,7 +21,7 @@ import org.springframework.ai.model.ResultMetadata;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public interface TongYiAudioTranscriptionMetadata extends ResultMetadata {

@ -33,7 +33,7 @@ import org.springframework.util.Assert;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0
* @since 2023.0.1.0
*/
public class TongYiAudioTranscriptionResponseMetadata extends HashMap<String, Object> implements ResponseMetadata {

@ -37,6 +37,7 @@ import static org.mockito.Mockito.when;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.1.0
*/
class TongYiAudioSpeechClientTest {
@ -44,13 +45,13 @@ class TongYiAudioSpeechClientTest {
@Mock
private SpeechSynthesizer speechSynthesizer;
private TongYiAudioSpeechClient client;
private TongYiAudioSpeechModel client;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
client = new TongYiAudioSpeechClient(speechSynthesizer, new TongYiAudioSpeechOptions());
client = new TongYiAudioSpeechModel(speechSynthesizer, new TongYiAudioSpeechOptions());
}
@Test

@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
class TongYiAudioSpeechOptionsTests {
@ -40,7 +40,7 @@ class TongYiAudioSpeechOptionsTests {
SpeechSynthesizer mockClient = Mockito.mock(SpeechSynthesizer.class);
Constants.apiKey = "test";
var speechClient = new TongYiAudioSpeechClient(mockClient,
var speechClient = new TongYiAudioSpeechModel(mockClient,
TongYiAudioSpeechOptions.builder()
.withFormat(SpeechSynthesisAudioFormat.MP3)
.withRate(333f)

@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author xYLiu
* @author yuluo
* @since 2023.0.1.0
*/
class TongYiAudioTranscriptionOptionsTests {
@ -38,7 +39,7 @@ class TongYiAudioTranscriptionOptionsTests {
Transcription mockClient = Mockito.mock(Transcription.class);
Constants.apiKey = "test";
var transcription = new TongYiAudioTranscriptionClient(
var transcription = new TongYiAudioTranscriptionModel(
TongYiAudioTranscriptionOptions.builder().withDiarizationEnabled(false)
.withAudioEventDetectionEnabled(false)
.withTimestampAlignmentEnabled(false)

@ -28,7 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.0.0-RC1
* @since 2023.0.1.0
*/
class TongYiChatOptionsTests {
@ -41,7 +41,7 @@ class TongYiChatOptionsTests {
// Test start.
var tongYiChatClient = new TongYiChatClient(mockClient,
var tongYiChatClient = new TongYiChatModel(mockClient,
TongYiChatOptions.builder().withModel(Generation.Models.QWEN_TURBO).withTemperature(88.8).build());
var tongYiChatParams = tongYiChatClient.toTongYiChatParams(new Prompt("你好"));
@ -51,7 +51,7 @@ class TongYiChatOptionsTests {
assertThat(tongYiChatParams.getModel()).isEqualTo(Generation.Models.QWEN_TURBO);
assertThat(tongYiChatParams.getTemperature()).isEqualTo(88.8f);
tongYiChatClient = new TongYiChatClient(mockClient,
tongYiChatClient = new TongYiChatModel(mockClient,
TongYiChatOptions.builder().withModel(Generation.Models.QWEN_MAX).withTemperature(77.7).build());
tongYiChatParams = tongYiChatClient.toTongYiChatParams(new Prompt("你是谁"));

@ -16,7 +16,7 @@
package com.alibaba.cloud.ai.tongyi.images;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesClient;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesModel;
import com.alibaba.cloud.ai.tongyi.image.TongYiImagesOptions;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author yuluo
* @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
* @since 2023.0.1.0
*/
class TongYiImagesOptionsTests {
@ -39,7 +40,7 @@ class TongYiImagesOptionsTests {
ImageSynthesis mockClient = Mockito.mock(ImageSynthesis.class);
Constants.apiKey = "test";
var tongYiImagesClient = new TongYiImagesClient(mockClient,
var tongYiImagesClient = new TongYiImagesModel(mockClient,
TongYiImagesOptions.
builder()
.withModel("test")

Loading…
Cancel
Save