Skip to content

Commit 88890fe

Browse files
committed
fix: fix current call error bug
1 parent a3523af commit 88890fe

File tree

4 files changed

+21
-29
lines changed

4 files changed

+21
-29
lines changed

spring-ai-alibaba-core/src/main/java/com/alibaba/cloud/ai/dashscope/api/DashScopeAiStreamFunctionCallingHelper.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,15 @@ public ChatCompletionChunk merge(ChatCompletionChunk previous, ChatCompletionChu
6363
String id = (current.requestId() != null ? current.requestId() : previous.requestId());
6464
TokenUsage usage = (current.usage() != null ? current.usage() : previous.usage());
6565

66-
Choice previousChoice0 = previous.output() == null ? null : previous.output().choices().get(0);
67-
Choice currentChoice0 = current.output() == null ? null : current.output().choices().get(0);
66+
Choice previousChoice0 = previous.output() == null ? null
67+
: CollectionUtils.isEmpty(previous.output().choices()) ? null : previous.output().choices().get(0);
68+
Choice currentChoice0 = current.output() == null ? null
69+
: CollectionUtils.isEmpty(current.output().choices()) ? null : current.output().choices().get(0);
6870

6971
// compatibility of incremental_output false for streaming function call
7072
if (!incrementalOutput && isStreamingToolFunctionCall(current)) {
7173
if (!isStreamingToolFunctionCallFinish(current)) {
72-
return new ChatCompletionChunk(id, new ChatCompletionOutput(null, List.of(new Choice(null, null))),
73-
usage);
74+
return new ChatCompletionChunk(id, new ChatCompletionOutput(null, List.of()), usage);
7475
}
7576
else {
7677
return new ChatCompletionChunk(id, new ChatCompletionOutput(null, List.of(currentChoice0)), usage);

spring-ai-alibaba-core/src/test/java/com/alibaba/cloud/ai/dashscope/api/DashScopeAiStreamFunctionCallingHelperTests.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,8 @@
1515
*/
1616
package com.alibaba.cloud.ai.dashscope.api;
1717

18-
import static org.junit.jupiter.api.Assertions.assertEquals;
19-
import static org.junit.jupiter.api.Assertions.assertFalse;
20-
import static org.junit.jupiter.api.Assertions.assertNotNull;
21-
import static org.junit.jupiter.api.Assertions.assertNull;
22-
import static org.junit.jupiter.api.Assertions.assertTrue;
23-
2418
import java.util.List;
2519

26-
import org.junit.jupiter.api.BeforeEach;
27-
import org.junit.jupiter.api.Test;
28-
2920
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.ChatCompletionChunk;
3021
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.ChatCompletionFinishReason;
3122
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.ChatCompletionMessage;
@@ -35,6 +26,10 @@
3526
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.ChatCompletionOutput;
3627
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.ChatCompletionOutput.Choice;
3728
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi.TokenUsage;
29+
import org.junit.jupiter.api.BeforeEach;
30+
import org.junit.jupiter.api.Test;
31+
32+
import static org.junit.jupiter.api.Assertions.*;
3833

3934
/**
4035
* Tests for DashScopeAiStreamFunctionCallingHelper class functionality
@@ -146,7 +141,8 @@ void testChunkToChatCompletion() {
146141
void testMergeWithNonIncrementalOutput() {
147142
// Test merging in non-incremental output mode
148143
ChatCompletionChunk previous = createChunkWithToolCall("request-1", "tool-1", "function-1", "{\"param");
149-
ChatCompletionChunk current = createChunkWithToolCall("request-1", "tool-1", "function-1", "\":\"value\"}");
144+
ChatCompletionChunk current = createChunkWithToolCall("request-1", "tool-1", "function-1",
145+
"{\"param\":\"value\"}");
150146

151147
// Use helper with non-incremental output
152148
ChatCompletionChunk result = helper.merge(previous, current);
@@ -156,16 +152,15 @@ void testMergeWithNonIncrementalOutput() {
156152
assertNotNull(result);
157153
assertEquals("request-1", result.requestId());
158154
assertNotNull(result.output().choices());
159-
assertEquals(1, result.output().choices().size());
160-
assertNull(result.output().choices().get(0).message());
155+
assertEquals(0, result.output().choices().size());
161156
}
162157

163158
@Test
164159
void testMergeWithNonIncrementalOutputFinished() {
165160
// Test merging of finished tool calls in non-incremental output mode
166161
ChatCompletionChunk previous = createChunkWithToolCall("request-1", "tool-1", "function-1", "{\"param");
167-
ChatCompletionChunk current = createChunkWithToolCall("request-1", "tool-1", "function-1", "\":\"value\"}",
168-
ChatCompletionFinishReason.TOOL_CALLS);
162+
ChatCompletionChunk current = createChunkWithToolCall("request-1", "tool-1", "function-1",
163+
"{\"param\":\"value\"}", ChatCompletionFinishReason.TOOL_CALLS);
169164

170165
// Use helper with non-incremental output
171166
ChatCompletionChunk result = helper.merge(previous, current);
@@ -182,7 +177,7 @@ void testMergeWithNonIncrementalOutputFinished() {
182177
assertEquals(1, toolCalls.size());
183178
assertEquals("tool-1", toolCalls.get(0).id());
184179
assertEquals("function-1", toolCalls.get(0).function().name());
185-
assertEquals("\":\"value\"}", toolCalls.get(0).function().arguments());
180+
assertEquals("{\"param\":\"value\"}", toolCalls.get(0).function().arguments());
186181
}
187182

188183
@Test

spring-ai-alibaba-graph/spring-ai-alibaba-graph-core/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@
3737
<url>https://github.com/alibaba/spring-ai-alibaba</url>
3838
</scm>
3939

40-
41-
<properties>
42-
</properties>
43-
4440
<dependencies>
4541
<!--
4642
<dependency>

spring-ai-alibaba-graph/spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/checkpoint/savers/MemorySaver.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,26 @@
1515
*/
1616
package com.alibaba.cloud.ai.graph.checkpoint.savers;
1717

18-
import com.alibaba.cloud.ai.graph.RunnableConfig;
19-
import com.alibaba.cloud.ai.graph.checkpoint.BaseCheckpointSaver;
20-
import com.alibaba.cloud.ai.graph.checkpoint.Checkpoint;
21-
2218
import java.util.Collection;
23-
import java.util.HashMap;
2419
import java.util.LinkedList;
2520
import java.util.Map;
2621
import java.util.NoSuchElementException;
2722
import java.util.Optional;
23+
import java.util.concurrent.ConcurrentHashMap;
2824
import java.util.concurrent.locks.Lock;
2925
import java.util.concurrent.locks.ReentrantReadWriteLock;
3026
import java.util.stream.IntStream;
3127

28+
import com.alibaba.cloud.ai.graph.RunnableConfig;
29+
import com.alibaba.cloud.ai.graph.checkpoint.BaseCheckpointSaver;
30+
import com.alibaba.cloud.ai.graph.checkpoint.Checkpoint;
31+
3232
import static java.lang.String.format;
3333
import static java.util.Collections.unmodifiableCollection;
3434

3535
public class MemorySaver implements BaseCheckpointSaver {
3636

37-
private final Map<String, LinkedList<Checkpoint>> _checkpointsByThread = new HashMap<>();
37+
private final Map<String, LinkedList<Checkpoint>> _checkpointsByThread = new ConcurrentHashMap<>();
3838

3939
private final LinkedList<Checkpoint> _defaultCheckpoints = new LinkedList<>();
4040

0 commit comments

Comments
 (0)