From b1bc0b64b0b01773cecc36c7a7f94237541fc230 Mon Sep 17 00:00:00 2001 From: PolarishT Date: Mon, 24 Feb 2025 23:49:34 +0800 Subject: [PATCH 1/2] [WIP MIGRATE]: migrate spring-ai-alibaba to 1.0.0-m6 Signed-off-by: PolarishT --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- pom.xml | 4 +- .../dashscope/DashScopeAutoConfiguration.java | 1 - .../cloud/ai/dashscope/api/DashScopeApi.java | 12 +- .../ai/dashscope/chat/DashScopeChatModel.java | 7 +- ...shScopeChatModelObservationConvention.java | 5 +- .../dashscope/metadata/DashScopeAiUsage.java | 77 +++++----- .../ai/dashscope/rag/DashScopeCloudStore.java | 137 ++++++++++-------- .../DashScopeDocumentRetrievalAdvisor.java | 4 +- 9 files changed, 143 insertions(+), 106 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index fa24ba75..332f8e5d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -35,4 +35,4 @@ If applicable, add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. -e.g. MacOS 、Java17 、 Version 1.0.0-M2.1 +e.g. MacOS 、Java17 、 Version 1.0.0-M6.1 diff --git a/pom.xml b/pom.xml index 452ffdbb..878ad3fa 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ - 1.0.0-M5.1 + 1.0.0-M6.1 UTF-8 UTF-8 @@ -107,7 +107,7 @@ 3.3.3 - 1.0.0-M5 + 1.0.0-M6 2.15.1 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 a64808e5..1f75e6a2 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 @@ -219,7 +219,6 @@ public DashScopeImageModel dashScopeImageModel( retryTemplate ); } - } /** 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..00595302 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..80fe9a93 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,45 +26,56 @@ */ public class DashScopeAiUsage implements Usage { - public static DashScopeAiUsage from(TokenUsage usage) { - return new DashScopeAiUsage(usage); - } + private final TokenUsage usage; - private final TokenUsage usage; + protected DashScopeAiUsage (TokenUsage usage) { + Assert.notNull(usage, "Dashscope Usage must not be null"); + this.usage = usage; + } - protected DashScopeAiUsage(TokenUsage usage) { - Assert.notNull(usage, "Dashscope Usage must not be null"); - this.usage = usage; - } + public static DashScopeAiUsage from (TokenUsage usage) { + return new DashScopeAiUsage(usage); + } - protected TokenUsage getUsage() { - return this.usage; - } + protected TokenUsage getUsage () { + return this.usage; + } - @Override - public Long getPromptTokens() { - return getUsage().inputTokens().longValue(); - } + @Override + public Integer getPromptTokens () { + return getUsage().inputTokens(); + } - @Override - public Long getGenerationTokens() { - return getUsage().outputTokens().longValue(); - } + @Override + public Long getGenerationTokens () { + return getUsage().outputTokens() + .longValue(); + } - @Override - public Long getTotalTokens() { - Integer totalTokens = getUsage().totalTokens(); - if (totalTokens != null) { - return totalTokens.longValue(); - } - else { - return getPromptTokens() + getGenerationTokens(); - } - } + @Override + public Integer getCompletionTokens () { + return 0; + } - @Override - public String toString() { - return getUsage().toString(); - } + @Override + public Integer getTotalTokens () { + Integer totalTokens = getUsage().totalTokens(); + if (totalTokens != null) { + return totalTokens; + } + else { + 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..0537a52e 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; @@ -33,65 +35,80 @@ */ public class DashScopeCloudStore implements VectorStore { - private final DashScopeStoreOptions options; - - private final DashScopeApi dashScopeApi; - - public DashScopeCloudStore(DashScopeApi dashScopeApi, DashScopeStoreOptions options) { - Assert.notNull(options, "DashScopeStoreOptions must not be null"); - Assert.notNull(options.getIndexName(), "IndexName must not be null"); - this.options = options; - this.dashScopeApi = dashScopeApi; - } - - /** - * @param documents the list of documents to store. Current document must be - * DashScopeDocumentReader's Result - * - */ - @Override - public void add(List documents) { - if (CollectionUtils.isEmpty(documents)) { - throw new DashScopeException("documents must not be null"); - } - List documentIdList = documents.stream() - .filter(e -> e.getId() != null) - .map(Document::getId) - .collect(Collectors.toList()); - if (documentIdList == null || documentIdList.isEmpty()) { - throw new DashScopeException("document's id must not be null"); - } - dashScopeApi.upsertPipeline(documents, options); - } - - @Override - public Optional 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)); - } - - @Override - public List similaritySearch(String query) { - - return similaritySearch(SearchRequest.query(query)); - - } - - @Override - public List similaritySearch(SearchRequest request) { - String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); - if (pipelineId == null) { - throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); - } - DashScopeDocumentRetrieverOptions searchOption = options.getRetrieverOptions(); - if (searchOption == null) { - searchOption = new DashScopeDocumentRetrieverOptions(); - } - searchOption.setRerankTopN(request.getTopK()); - return dashScopeApi.retriever(pipelineId, request.getQuery(), searchOption); - } + private final DashScopeStoreOptions options; + + private final DashScopeApi dashScopeApi; + + public DashScopeCloudStore (DashScopeApi dashScopeApi, DashScopeStoreOptions options) { + Assert.notNull(options, "DashScopeStoreOptions must not be null"); + Assert.notNull(options.getIndexName(), "IndexName must not be null"); + this.options = options; + 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) { + if (CollectionUtils.isEmpty(documents)) { + throw new DashScopeException("documents must not be null"); + } + List documentIdList = documents.stream() + .filter(e -> e.getId() != null) + .map(Document::getId) + .collect(Collectors.toList()); + if (documentIdList == null || documentIdList.isEmpty()) { + throw new DashScopeException("document's id must not be null"); + } + dashScopeApi.upsertPipeline(documents, options); + } + + @Override + public void delete (List idList) { + String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); + if (pipelineId == null) { + throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); + } + dashScopeApi.deletePipelineDocument(pipelineId, idList); + } + + @Override + public void delete (Filter.Expression filterExpression) { + } + + @Override + public List similaritySearch (String query) { + + return similaritySearch(SearchRequest.builder() + .query(query) + .toString()); + + } + + @Override + public Optional getNativeClient () { + return VectorStore.super.getNativeClient(); + } + + @Override + public List similaritySearch (SearchRequest request) { + String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); + if (pipelineId == null) { + throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); + } + DashScopeDocumentRetrieverOptions searchOption = options.getRetrieverOptions(); + if (searchOption == null) { + searchOption = new DashScopeDocumentRetrieverOptions(); + } + searchOption.setRerankTopN(request.getTopK()); + return dashScopeApi.retriever(pipelineId, request.getQuery(), searchOption); + } } 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); From ed7dab12a98611232a5bdffcb64e2ee4b20f8bec Mon Sep 17 00:00:00 2001 From: PolarishT Date: Mon, 24 Feb 2025 23:51:07 +0800 Subject: [PATCH 2/2] run spring format Signed-off-by: PolarishT --- .../cloud/ai/dashscope/api/DashScopeApi.java | 4 +- .../dashscope/metadata/DashScopeAiUsage.java | 83 +++++----- .../ai/dashscope/rag/DashScopeCloudStore.java | 148 +++++++++--------- 3 files changed, 116 insertions(+), 119 deletions(-) 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 00595302..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 @@ -220,12 +220,12 @@ public Long getGenerationTokens() { } @Override - public Integer getCompletionTokens () { + public Integer getCompletionTokens() { return 0; } @Override - public Object getNativeUsage () { + public Object getNativeUsage() { return null; } } 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 80fe9a93..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,56 +26,55 @@ */ public class DashScopeAiUsage implements Usage { - private final TokenUsage usage; + private final TokenUsage usage; - protected DashScopeAiUsage (TokenUsage usage) { - Assert.notNull(usage, "Dashscope Usage must not be null"); - this.usage = usage; - } + protected DashScopeAiUsage(TokenUsage usage) { + Assert.notNull(usage, "Dashscope Usage must not be null"); + this.usage = usage; + } - public static DashScopeAiUsage from (TokenUsage usage) { - return new DashScopeAiUsage(usage); - } + public static DashScopeAiUsage from(TokenUsage usage) { + return new DashScopeAiUsage(usage); + } - protected TokenUsage getUsage () { - return this.usage; - } + protected TokenUsage getUsage() { + return this.usage; + } - @Override - public Integer getPromptTokens () { - return getUsage().inputTokens(); - } + @Override + public Integer getPromptTokens() { + return getUsage().inputTokens(); + } - @Override - public Long getGenerationTokens () { - return getUsage().outputTokens() - .longValue(); - } + @Override + public Long getGenerationTokens() { + return getUsage().outputTokens().longValue(); + } - @Override - public Integer getCompletionTokens () { - return 0; - } + @Override + public Integer getCompletionTokens() { + return 0; + } - @Override - public Integer getTotalTokens () { - Integer totalTokens = getUsage().totalTokens(); - if (totalTokens != null) { - return totalTokens; - } - else { - return getPromptTokens() + getGenerationTokens().intValue(); - } - } + @Override + public Integer getTotalTokens() { + Integer totalTokens = getUsage().totalTokens(); + if (totalTokens != null) { + return totalTokens; + } + else { + return getPromptTokens() + getGenerationTokens().intValue(); + } + } - @Override - public Object getNativeUsage () { - return null; - } + @Override + public Object getNativeUsage() { + return null; + } - @Override - public String toString () { - return getUsage().toString(); - } + @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 0537a52e..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 @@ -35,80 +35,78 @@ */ public class DashScopeCloudStore implements VectorStore { - private final DashScopeStoreOptions options; - - private final DashScopeApi dashScopeApi; - - public DashScopeCloudStore (DashScopeApi dashScopeApi, DashScopeStoreOptions options) { - Assert.notNull(options, "DashScopeStoreOptions must not be null"); - Assert.notNull(options.getIndexName(), "IndexName must not be null"); - this.options = options; - 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) { - if (CollectionUtils.isEmpty(documents)) { - throw new DashScopeException("documents must not be null"); - } - List documentIdList = documents.stream() - .filter(e -> e.getId() != null) - .map(Document::getId) - .collect(Collectors.toList()); - if (documentIdList == null || documentIdList.isEmpty()) { - throw new DashScopeException("document's id must not be null"); - } - dashScopeApi.upsertPipeline(documents, options); - } - - @Override - public void delete (List idList) { - String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); - if (pipelineId == null) { - throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); - } - dashScopeApi.deletePipelineDocument(pipelineId, idList); - } - - @Override - public void delete (Filter.Expression filterExpression) { - } - - @Override - public List similaritySearch (String query) { - - return similaritySearch(SearchRequest.builder() - .query(query) - .toString()); - - } - - @Override - public Optional getNativeClient () { - return VectorStore.super.getNativeClient(); - } - - @Override - public List similaritySearch (SearchRequest request) { - String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); - if (pipelineId == null) { - throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); - } - DashScopeDocumentRetrieverOptions searchOption = options.getRetrieverOptions(); - if (searchOption == null) { - searchOption = new DashScopeDocumentRetrieverOptions(); - } - searchOption.setRerankTopN(request.getTopK()); - return dashScopeApi.retriever(pipelineId, request.getQuery(), searchOption); - } + private final DashScopeStoreOptions options; + + private final DashScopeApi dashScopeApi; + + public DashScopeCloudStore(DashScopeApi dashScopeApi, DashScopeStoreOptions options) { + Assert.notNull(options, "DashScopeStoreOptions must not be null"); + Assert.notNull(options.getIndexName(), "IndexName must not be null"); + this.options = options; + 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) { + if (CollectionUtils.isEmpty(documents)) { + throw new DashScopeException("documents must not be null"); + } + List documentIdList = documents.stream() + .filter(e -> e.getId() != null) + .map(Document::getId) + .collect(Collectors.toList()); + if (documentIdList == null || documentIdList.isEmpty()) { + throw new DashScopeException("document's id must not be null"); + } + dashScopeApi.upsertPipeline(documents, options); + } + + @Override + public void delete(List idList) { + String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); + if (pipelineId == null) { + throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); + } + dashScopeApi.deletePipelineDocument(pipelineId, idList); + } + + @Override + public void delete(Filter.Expression filterExpression) { + } + + @Override + public List similaritySearch(String query) { + + return similaritySearch(SearchRequest.builder().query(query).toString()); + + } + + @Override + public Optional getNativeClient() { + return VectorStore.super.getNativeClient(); + } + + @Override + public List similaritySearch(SearchRequest request) { + String pipelineId = dashScopeApi.getPipelineIdByName(options.getIndexName()); + if (pipelineId == null) { + throw new DashScopeException("Index:" + options.getIndexName() + " NotExist"); + } + DashScopeDocumentRetrieverOptions searchOption = options.getRetrieverOptions(); + if (searchOption == null) { + searchOption = new DashScopeDocumentRetrieverOptions(); + } + searchOption.setRerankTopN(request.getTopK()); + return dashScopeApi.retriever(pipelineId, request.getQuery(), searchOption); + } }