diff --git a/spring-ai-alibaba-autoconfigure/src/main/java/com/alibaba/cloud/ai/autoconfigure/dashscope/DashScopeAutoConfiguration.java b/spring-ai-alibaba-autoconfigure/src/main/java/com/alibaba/cloud/ai/autoconfigure/dashscope/DashScopeAutoConfiguration.java index 3435fcff..2a48bc1a 100644 --- a/spring-ai-alibaba-autoconfigure/src/main/java/com/alibaba/cloud/ai/autoconfigure/dashscope/DashScopeAutoConfiguration.java +++ b/spring-ai-alibaba-autoconfigure/src/main/java/com/alibaba/cloud/ai/autoconfigure/dashscope/DashScopeAutoConfiguration.java @@ -240,7 +240,6 @@ public DashScopeImageModel dashScopeImageModel( return dashScopeImageModel; } - } /** diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeApi.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeApi.java index ce46920e..45de674d 100644 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeApi.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeApi.java @@ -210,7 +210,7 @@ public String getValue() { @JsonInclude(JsonInclude.Include.NON_NULL) public record EmbeddingUsage(@JsonProperty("total_tokens") Long totalTokens) implements Usage { @Override - public Long getPromptTokens() { + public Integer getPromptTokens() { return null; } @@ -218,6 +218,16 @@ public Long getPromptTokens() { public Long getGenerationTokens() { return null; } + + @Override + public Integer getCompletionTokens() { + return 0; + } + + @Override + public Object getNativeUsage() { + return null; + } } @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/DashScopeChatModel.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/DashScopeChatModel.java index 4d133254..a6a4cd14 100755 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/DashScopeChatModel.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/DashScopeChatModel.java @@ -161,6 +161,7 @@ public ChatResponse call(Prompt prompt) { ChatModelObservationContext observationContext = ChatModelObservationContext.builder() .prompt(prompt) .provider(DashScopeApiConstants.PROVIDER_NAME) + // @deprecated since 1.0.0-m6 .requestOptions(prompt.getOptions() != null ? prompt.getOptions() : this.defaultOptions) .build(); @@ -378,7 +379,7 @@ else if (message.getMessageType() == MessageType.ASSISTANT) { return new ToolCall(toolCall.id(), toolCall.type(), function); }).toList(); } - return List.of(new ChatCompletionMessage(assistantMessage.getContent(), + return List.of(new ChatCompletionMessage(assistantMessage.getText(), ChatCompletionMessage.Role.ASSISTANT, null, null, toolCalls, null)); } else if (message.getMessageType() == MessageType.TOOL) { @@ -413,7 +414,7 @@ private List convertMediaContent(UserMessage message) { List contentList = new ArrayList<>(); if (format == MessageFormat.VIDEO) { - MediaContent mediaContent = new MediaContent(message.getContent()); + MediaContent mediaContent = new MediaContent(message.getText()); contentList.add(mediaContent); List mediaList = message.getMedia() @@ -424,7 +425,7 @@ private List convertMediaContent(UserMessage message) { contentList.add(new MediaContent("video", null, null, mediaList)); } else { - MediaContent mediaContent = new MediaContent(message.getContent()); + MediaContent mediaContent = new MediaContent(message.getText()); contentList.add(mediaContent); contentList.addAll(message.getMedia() diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/observation/DashScopeChatModelObservationConvention.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/observation/DashScopeChatModelObservationConvention.java index 1bbd75bb..462cd286 100644 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/observation/DashScopeChatModelObservationConvention.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/chat/observation/DashScopeChatModelObservationConvention.java @@ -48,10 +48,9 @@ public String getName() { } // Request - protected KeyValues requestStopSequences(KeyValues keyValues, ChatModelObservationContext context) { - if (context.getRequestOptions() instanceof DashScopeChatOptions) { - List stop = ((DashScopeChatOptions) context.getRequestOptions()).getStop(); + if (context.getRequest().getOptions() instanceof DashScopeChatOptions) { + List stop = ((DashScopeChatOptions) context.getRequest().getOptions()).getStop(); if (CollectionUtils.isEmpty(stop)) { return keyValues; } diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/metadata/DashScopeAiUsage.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/metadata/DashScopeAiUsage.java index 0329abec..6e62da58 100644 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/metadata/DashScopeAiUsage.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/metadata/DashScopeAiUsage.java @@ -26,10 +26,6 @@ */ public class DashScopeAiUsage implements Usage { - public static DashScopeAiUsage from(TokenUsage usage) { - return new DashScopeAiUsage(usage); - } - private final TokenUsage usage; protected DashScopeAiUsage(TokenUsage usage) { @@ -37,13 +33,17 @@ protected DashScopeAiUsage(TokenUsage usage) { this.usage = usage; } + public static DashScopeAiUsage from(TokenUsage usage) { + return new DashScopeAiUsage(usage); + } + protected TokenUsage getUsage() { return this.usage; } @Override - public Long getPromptTokens() { - return getUsage().inputTokens().longValue(); + public Integer getPromptTokens() { + return getUsage().inputTokens(); } @Override @@ -52,16 +52,26 @@ public Long getGenerationTokens() { } @Override - public Long getTotalTokens() { + public Integer getCompletionTokens() { + return 0; + } + + @Override + public Integer getTotalTokens() { Integer totalTokens = getUsage().totalTokens(); if (totalTokens != null) { - return totalTokens.longValue(); + return totalTokens; } else { - return getPromptTokens() + getGenerationTokens(); + return getPromptTokens() + getGenerationTokens().intValue(); } } + @Override + public Object getNativeUsage() { + return null; + } + @Override public String toString() { return getUsage().toString(); diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeCloudStore.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeCloudStore.java index 7ecb3b79..09e8960a 100644 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeCloudStore.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeCloudStore.java @@ -17,9 +17,11 @@ import com.alibaba.cloud.ai.dashscope.api.DashScopeApi; import com.alibaba.cloud.ai.dashscope.common.DashScopeException; +import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions; import org.springframework.ai.document.Document; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.ai.vectorstore.filter.Filter; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -44,10 +46,14 @@ public DashScopeCloudStore(DashScopeApi dashScopeApi, DashScopeStoreOptions opti this.dashScopeApi = dashScopeApi; } + @Override + public String getName() { + return VectorStore.super.getName(); + } + /** * @param documents the list of documents to store. Current document must be * DashScopeDocumentReader's Result - * */ @Override public void add(List documents) { @@ -65,19 +71,28 @@ public void add(List documents) { } @Override - public Optional delete(List idList) { + public void delete(List idList) { String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); if (pipelineId == null) { throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); } - return Optional.of(dashScopeApi.deletePipelineDocument(pipelineId, idList)); + dashScopeApi.deletePipelineDocument(pipelineId, idList); + } + + @Override + public void delete(Filter.Expression filterExpression) { } @Override public List similaritySearch(String query) { - return similaritySearch(SearchRequest.query(query)); + return similaritySearch(SearchRequest.builder().query(query).toString()); + + } + @Override + public Optional getNativeClient() { + return VectorStore.super.getNativeClient(); } @Override diff --git a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeDocumentRetrievalAdvisor.java b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeDocumentRetrievalAdvisor.java index 48900199..0d1cc17b 100644 --- a/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeDocumentRetrievalAdvisor.java +++ b/spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/rag/DashScopeDocumentRetrievalAdvisor.java @@ -201,14 +201,14 @@ private AdvisedResponse after(AdvisedResponse advisedResponse) { .valueOf(response.getResult().getMetadata().getFinishReason()); if (finishReason == ChatCompletionFinishReason.NULL) { String fullContent = context.getOrDefault("full_content", "").toString() - + response.getResult().getOutput().getContent(); + + response.getResult().getOutput().getText(); context.put("full_content", fullContent); return advisedResponse; } String content = context.getOrDefault("full_content", "").toString(); if ("".equalsIgnoreCase(content)) { - content = response.getResult().getOutput().getContent(); + content = response.getResult().getOutput().getText(); } Map documentMap = (Map) context.get(RETRIEVED_DOCUMENTS);