diff --git a/README.md b/README.md
index 10e46d36..129e566d 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ Conversation conversation = new Conversation(Protocol.HTTP.getValue());
Conversation conversation = new Conversation(Protocol.WEBSOCKET.getValue());
```
-The conversation interface supports both stream and non-stream queries. These queries all accept `ConversationParam` as input, and returns `ConversationResult` as output . Each model has a unique input structure and output structure which derives from the two data classes mentioned above. Please use these sub classes when you are using the coordinating model.
+The conversation interface supports both stream and non-stream queries. These queries all accept `ConversationParam` as input, and returns `ConversationResult` as output . Each model has a unique input structure and output structure which derives from the two data classes mentioned above. Please use these sub classes when you are using the coordinating model.
Here shows the usages of each method, with the examples of `qwen-turbo` model.
diff --git a/pom.xml b/pom.xml
index 55decafe..534a5f30 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,7 @@
DashScope Java SDK
com.alibaba
dashscope-sdk-java
- 2.22.20
+ 2.22.21
8
diff --git a/src/main/java/com/alibaba/dashscope/aigc/codegeneration/CodeGeneration.java b/src/main/java/com/alibaba/dashscope/aigc/codegeneration/CodeGeneration.java
index fb07c79b..877611a8 100644
--- a/src/main/java/com/alibaba/dashscope/aigc/codegeneration/CodeGeneration.java
+++ b/src/main/java/com/alibaba/dashscope/aigc/codegeneration/CodeGeneration.java
@@ -1,16 +1,26 @@
+// Copyright (c) Alibaba, Inc. and its affiliates.
package com.alibaba.dashscope.aigc.codegeneration;
import com.alibaba.dashscope.api.SynchronizeHalfDuplexApi;
-import com.alibaba.dashscope.common.*;
+import com.alibaba.dashscope.common.DashScopeResult;
+import com.alibaba.dashscope.common.Function;
+import com.alibaba.dashscope.common.OutputMode;
+import com.alibaba.dashscope.common.ResultCallback;
+import com.alibaba.dashscope.common.Task;
+import com.alibaba.dashscope.common.TaskGroup;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
-import com.alibaba.dashscope.protocol.*;
+import com.alibaba.dashscope.protocol.ApiServiceOption;
+import com.alibaba.dashscope.protocol.ConnectionOptions;
+import com.alibaba.dashscope.protocol.HttpMethod;
+import com.alibaba.dashscope.protocol.Protocol;
+import com.alibaba.dashscope.protocol.StreamingMode;
import io.reactivex.Flowable;
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public class CodeGeneration {
+public final class CodeGeneration {
private final SynchronizeHalfDuplexApi syncApi;
private final ApiServiceOption serviceOption;
diff --git a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletion.java b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletion.java
index f6168da4..3a2a6d2d 100644
--- a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletion.java
+++ b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletion.java
@@ -1,3 +1,4 @@
+// Copyright (c) Alibaba, Inc. and its affiliates.
package com.alibaba.dashscope.aigc.completion;
import com.alibaba.dashscope.common.DashScopeResult;
diff --git a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletionStreamOptions.java b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletionStreamOptions.java
index 774f6f3c..101a8877 100644
--- a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletionStreamOptions.java
+++ b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletionStreamOptions.java
@@ -1,12 +1,16 @@
+// Copyright (c) Alibaba, Inc. and its affiliates.
package com.alibaba.dashscope.aigc.completion;
-import com.google.gson.annotations.SerializedName;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
+/**
+ * @deprecated Use {@link com.alibaba.dashscope.common.StreamOptions} instead for a shared
+ * implementation across all service classes.
+ */
+@Deprecated
@Data
@SuperBuilder
-public class ChatCompletionStreamOptions {
- @SerializedName("include_usage")
- private Boolean includeUsage;
-}
+@EqualsAndHashCode(callSuper = true)
+public class ChatCompletionStreamOptions extends com.alibaba.dashscope.common.StreamOptions {}
diff --git a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletions.java b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletions.java
index d0013df5..30aabfa9 100644
--- a/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletions.java
+++ b/src/main/java/com/alibaba/dashscope/aigc/completion/ChatCompletions.java
@@ -1,3 +1,4 @@
+// Copyright (c) Alibaba, Inc. and its affiliates.
package com.alibaba.dashscope.aigc.completion;
import com.alibaba.dashscope.api.GeneralApi;
diff --git a/src/main/java/com/alibaba/dashscope/aigc/generation/Generation.java b/src/main/java/com/alibaba/dashscope/aigc/generation/Generation.java
index c329b66a..aca4b7e4 100644
--- a/src/main/java/com/alibaba/dashscope/aigc/generation/Generation.java
+++ b/src/main/java/com/alibaba/dashscope/aigc/generation/Generation.java
@@ -18,8 +18,8 @@
import com.alibaba.dashscope.protocol.Protocol;
import com.alibaba.dashscope.protocol.StreamingMode;
import com.alibaba.dashscope.tools.ToolCallBase;
-import com.alibaba.dashscope.tools.ToolCallFunction;
import com.alibaba.dashscope.utils.ParamUtils;
+import com.alibaba.dashscope.utils.StreamingMerger;
import com.alibaba.dashscope.utils.StringUtils;
import io.reactivex.Flowable;
import java.util.ArrayList;
@@ -33,9 +33,6 @@ public final class Generation {
private final SynchronizeHalfDuplexApi syncApi;
private final ApiServiceOption serviceOption;
- private final ThreadLocal