Skip to content

Commit bd65e2d

Browse files
authored
feat(graph): saver adjust enum (alibaba#2152)
* feat(graph): saver adjust enum * fix(deepresearch): version * fix(deepresearch): fix
1 parent c8837d5 commit bd65e2d

File tree

11 files changed

+92
-36
lines changed

11 files changed

+92
-36
lines changed

spring-ai-alibaba-deepresearch/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<maven-source-plugin.version>3.3.1</maven-source-plugin.version>
2323

2424
<spring-ai.version>1.0.0</spring-ai.version>
25-
<spring-ai-alibaba.version>1.0.0.4-SNAPSHOT</spring-ai-alibaba.version>
25+
<spring-ai-alibaba.version>1.0.0.3</spring-ai-alibaba.version>
2626

2727
<openhtmltopdf.version>1.0.10</openhtmltopdf.version>
2828
<commonmark.version>0.24.0</commonmark.version>

spring-ai-alibaba-deepresearch/src/main/java/com/alibaba/cloud/ai/example/deepresearch/controller/ChatController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@
2424
import com.alibaba.cloud.ai.example.deepresearch.model.req.GraphId;
2525
import com.alibaba.cloud.ai.example.deepresearch.model.response.ReportResponse;
2626
import com.alibaba.cloud.ai.example.deepresearch.util.SearchBeanUtil;
27-
import com.alibaba.cloud.ai.graph.*;
27+
import com.alibaba.cloud.ai.graph.CompileConfig;
28+
import com.alibaba.cloud.ai.graph.CompiledGraph;
29+
import com.alibaba.cloud.ai.graph.NodeOutput;
30+
import com.alibaba.cloud.ai.graph.OverAllState;
31+
import com.alibaba.cloud.ai.graph.RunnableConfig;
32+
import com.alibaba.cloud.ai.graph.StateGraph;
2833
import com.alibaba.cloud.ai.graph.async.AsyncGenerator;
2934
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
3035
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;

spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/CompileConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.alibaba.cloud.ai.graph.checkpoint.BaseCheckpointSaver;
1919
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
20+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2021
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
2122
import io.micrometer.observation.ObservationRegistry;
2223

@@ -28,7 +29,6 @@
2829
import java.util.concurrent.LinkedBlockingDeque;
2930
import java.util.stream.Collectors;
3031

31-
import static com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant.MEMORY;
3232
import static java.util.Optional.ofNullable;
3333

3434
/**
@@ -38,7 +38,7 @@
3838
*/
3939
public class CompileConfig {
4040

41-
private SaverConfig saverConfig = new SaverConfig().register(MEMORY, new MemorySaver());
41+
private SaverConfig saverConfig = new SaverConfig().register(SaverEnum.MEMORY.getValue(), new MemorySaver());
4242

4343
private Deque<GraphLifecycleListener> lifecycleListeners = new LinkedBlockingDeque<>(25);
4444

spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/StateGraph.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import com.alibaba.cloud.ai.graph.action.AsyncNodeAction;
2121
import com.alibaba.cloud.ai.graph.action.AsyncNodeActionWithConfig;
2222
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
23-
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;
23+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2424
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
2525

2626
import com.alibaba.cloud.ai.graph.exception.Errors;
@@ -510,7 +510,9 @@ public CompiledGraph compile(CompileConfig config) throws GraphStateException {
510510
* @throws GraphStateException if there are errors related to the graph state
511511
*/
512512
public CompiledGraph compile() throws GraphStateException {
513-
SaverConfig saverConfig = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
513+
SaverConfig saverConfig = SaverConfig.builder()
514+
.register(SaverEnum.MEMORY.getValue(), new MemorySaver())
515+
.build();
514516
return compile(CompileConfig.builder().saverConfig(saverConfig).build());
515517
}
516518

spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/checkpoint/config/SaverConfig.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,17 @@
1616
package com.alibaba.cloud.ai.graph.checkpoint.config;
1717

1818
import com.alibaba.cloud.ai.graph.checkpoint.BaseCheckpointSaver;
19+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
1920
import jodd.util.StringUtil;
2021

2122
import java.util.Map;
2223
import java.util.concurrent.ConcurrentHashMap;
2324

24-
import static com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant.MEMORY;
25-
2625
public class SaverConfig {
2726

2827
private Map<String, BaseCheckpointSaver> savers = new ConcurrentHashMap<>();
2928

30-
private String type = MEMORY;
29+
private String type = SaverEnum.MEMORY.getValue();
3130

3231
public String getType() {
3332
return type;
Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,34 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
1617
package com.alibaba.cloud.ai.graph.checkpoint.constant;
1718

18-
public interface SaverConstant {
19+
/**
20+
* @author yingzi
21+
* @since 2025/8/15
22+
*/
23+
24+
public enum SaverEnum {
25+
26+
DB("db"),
27+
28+
REDIS("redis"),
29+
30+
MEMORY("memory"),
31+
32+
FILE("file"),
1933

20-
String DB = "db";
34+
NONE("none");
2135

22-
String REDIS = "redis";
36+
final String value;
2337

24-
String MEMORY = "memory";
38+
SaverEnum(String value) {
39+
this.value = value;
40+
}
2541

26-
String FILE = "file";
42+
public String getValue() {
43+
return value;
44+
}
2745

2846
}

spring-ai-alibaba-graph-core/src/test/java/com/alibaba/cloud/ai/graph/InterruptionTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import com.alibaba.cloud.ai.graph.action.AsyncNodeActionWithConfig;
1919
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
20-
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;
20+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2121
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
2222
import com.alibaba.cloud.ai.graph.utils.EdgeMappings;
2323
import org.junit.jupiter.api.Test;
@@ -56,7 +56,7 @@ public void interruptAfterEdgeEvaluation() throws Exception {
5656
.addEdge("C", END)
5757
.addEdge("D", END)
5858
.compile(CompileConfig.builder()
59-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).build())
59+
.saverConfig(SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), saver).build())
6060
.interruptAfter("B")
6161
.build());
6262

@@ -109,7 +109,7 @@ public void interruptBeforeEdgeEvaluation() throws Exception {
109109
.addEdge("A", "B")
110110
.addEdge("C", END)
111111
.compile(CompileConfig.builder()
112-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).build())
112+
.saverConfig(SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), saver).build())
113113
.interruptAfter("B")
114114
.interruptBeforeEdge(true)
115115
.build());

spring-ai-alibaba-graph-core/src/test/java/com/alibaba/cloud/ai/graph/StateGraphFileSystemSaverTest.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.alibaba.cloud.ai.graph.checkpoint.BaseCheckpointSaver;
2020
import com.alibaba.cloud.ai.graph.checkpoint.Checkpoint;
2121
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
22-
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;
22+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2323
import com.alibaba.cloud.ai.graph.checkpoint.savers.FileSystemSaver;
2424
import com.alibaba.cloud.ai.graph.state.StateSnapshot;
2525
import org.junit.jupiter.api.Test;
@@ -71,7 +71,10 @@ public void testCheckpointSaverResubmit() throws Exception {
7171
workflow.getStateSerializer());
7272

7373
CompileConfig compileConfig = CompileConfig.builder()
74-
.saverConfig(SaverConfig.builder().type(SaverConstant.FILE).register(SaverConstant.FILE, saver).build())
74+
.saverConfig(SaverConfig.builder()
75+
.type(SaverEnum.FILE.getValue())
76+
.register(SaverEnum.FILE.getValue(), saver)
77+
.build())
7578
.build();
7679

7780
CompiledGraph app = workflow.compile(compileConfig);
@@ -161,7 +164,10 @@ public void testCheckpointSaverWithManualRelease() throws Exception {
161164
workflow.getStateSerializer());
162165

163166
CompileConfig compileConfig = CompileConfig.builder()
164-
.saverConfig(SaverConfig.builder().type(SaverConstant.FILE).register(SaverConstant.FILE, saver).build())
167+
.saverConfig(SaverConfig.builder()
168+
.type(SaverEnum.FILE.getValue())
169+
.register(SaverEnum.FILE.getValue(), saver)
170+
.build())
165171
.build();
166172

167173
CompiledGraph app = workflow.compile(compileConfig);
@@ -256,7 +262,10 @@ public void testCheckpointSaverWithAutoRelease() throws Exception {
256262
workflow.getStateSerializer());
257263

258264
CompileConfig compileConfig = CompileConfig.builder()
259-
.saverConfig(SaverConfig.builder().type(SaverConstant.FILE).register(SaverConstant.FILE, saver).build())
265+
.saverConfig(SaverConfig.builder()
266+
.type(SaverEnum.FILE.getValue())
267+
.register(SaverEnum.FILE.getValue(), saver)
268+
.build())
260269
.releaseThread(true)
261270
.build();
262271

spring-ai-alibaba-graph-core/src/test/java/com/alibaba/cloud/ai/graph/StateGraphMemorySaverTest.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.alibaba.cloud.ai.graph.action.NodeAction;
2020
import com.alibaba.cloud.ai.graph.checkpoint.Checkpoint;
2121
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
22-
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;
22+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2323
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
2424
import com.alibaba.cloud.ai.graph.checkpoint.savers.VersionedMemorySaver;
2525
import com.alibaba.cloud.ai.graph.state.StateSnapshot;
@@ -109,7 +109,10 @@ public void testCheckpointInitialState() throws Exception {
109109
var saver = new MemorySaver();
110110

111111
var compileConfig = CompileConfig.builder()
112-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).type(SaverConstant.MEMORY).build())
112+
.saverConfig(SaverConfig.builder()
113+
.register(SaverEnum.MEMORY.getValue(), saver)
114+
.type(SaverEnum.MEMORY.getValue())
115+
.build())
113116
.build();
114117

115118
var runnableConfig = RunnableConfig.builder().build();
@@ -192,7 +195,10 @@ public void testCheckpointSaverResubmit() throws Exception {
192195
var saver = new VersionedMemorySaver();
193196

194197
var compileConfig = CompileConfig.builder()
195-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).type(SaverConstant.MEMORY).build())
198+
.saverConfig(SaverConfig.builder()
199+
.register(SaverEnum.MEMORY.getValue(), saver)
200+
.type(SaverEnum.MEMORY.getValue())
201+
.build())
196202
.build();
197203

198204
var app = workflow.compile(compileConfig);
@@ -264,7 +270,10 @@ public void testViewAndUpdatePastGraphState() throws Exception {
264270
var saver = new MemorySaver();
265271

266272
var compileConfig = CompileConfig.builder()
267-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).type(SaverConstant.MEMORY).build())
273+
.saverConfig(SaverConfig.builder()
274+
.register(SaverEnum.MEMORY.getValue(), saver)
275+
.type(SaverEnum.MEMORY.getValue())
276+
.build())
268277
.build();
269278

270279
var app = workflow.compile(compileConfig);
@@ -344,7 +353,10 @@ public void testPauseAndUpdatePastGraphState() throws Exception {
344353
var saver = new MemorySaver();
345354

346355
var compileConfig = CompileConfig.builder()
347-
.saverConfig(SaverConfig.builder().register(SaverConstant.MEMORY, saver).type(SaverConstant.MEMORY).build())
356+
.saverConfig(SaverConfig.builder()
357+
.register(SaverEnum.MEMORY.getValue(), saver)
358+
.type(SaverEnum.MEMORY.getValue())
359+
.build())
348360
.interruptBefore("tools")
349361
.build();
350362

spring-ai-alibaba-graph-core/src/test/java/com/alibaba/cloud/ai/graph/SubGraphTest.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515
*/
1616
package com.alibaba.cloud.ai.graph;
1717

18-
import com.alibaba.cloud.ai.graph.action.*;
18+
import com.alibaba.cloud.ai.graph.action.AsyncCommandAction;
19+
import com.alibaba.cloud.ai.graph.action.AsyncNodeAction;
20+
import com.alibaba.cloud.ai.graph.action.AsyncNodeActionWithConfig;
21+
import com.alibaba.cloud.ai.graph.action.Command;
22+
import com.alibaba.cloud.ai.graph.action.CommandAction;
1923
import com.alibaba.cloud.ai.graph.checkpoint.config.SaverConfig;
20-
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverConstant;
24+
import com.alibaba.cloud.ai.graph.checkpoint.constant.SaverEnum;
2125
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
2226
import com.alibaba.cloud.ai.graph.exception.GraphStateException;
2327
import com.alibaba.cloud.ai.graph.state.strategy.AppendStrategy;
@@ -225,7 +229,7 @@ public void testMergeSubgraph03WithInterruption() throws Exception {
225229
var B_B2 = SubGraphNode.formatId("B", "B2");
226230
var B_C = SubGraphNode.formatId("B", "C");
227231

228-
SaverConfig saver = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
232+
SaverConfig saver = SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), new MemorySaver()).build();
229233

230234
var withSaver = workflowParent.compile(CompileConfig.builder().saverConfig(saver).build());
231235

@@ -340,7 +344,7 @@ public void testMergeSubgraph04WithInterruption() throws Exception {
340344
var B_B2 = SubGraphNode.formatId("B", "B2");
341345
var B_C = SubGraphNode.formatId("B", "C");
342346

343-
SaverConfig saver = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
347+
SaverConfig saver = SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), new MemorySaver()).build();
344348

345349
var withSaver = workflowParent.compile(CompileConfig.builder().saverConfig(saver).build());
346350

@@ -394,7 +398,7 @@ public void testMergeSubgraph04WithInterruption() throws Exception {
394398
@Test
395399
public void testCheckpointWithSubgraph() throws Exception {
396400

397-
SaverConfig saver = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
401+
SaverConfig saver = SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), new MemorySaver()).build();
398402

399403
var compileConfig = CompileConfig.builder().saverConfig(saver).build();
400404
var workflowChild = new StateGraph().addNode("step_1", _makeNode("child:step1"))
@@ -433,7 +437,7 @@ public void testCheckpointWithSubgraph() throws Exception {
433437
*/
434438
@Test
435439
public void testOtherCreateSubgraph2() throws Exception {
436-
SaverConfig saver = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
440+
SaverConfig saver = SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), new MemorySaver()).build();
437441

438442
var compileConfig = CompileConfig.builder().saverConfig(saver).build();
439443
var workflowChild = new StateGraph(createKeyStrategyFactory()).addNode("step_1", _makeNode("child:step1"))
@@ -522,7 +526,7 @@ public Command apply(OverAllState state, RunnableConfig config) throws Exception
522526

523527
@Test
524528
public void testNestedSubgraph() throws Exception {
525-
SaverConfig saver = SaverConfig.builder().register(SaverConstant.MEMORY, new MemorySaver()).build();
529+
SaverConfig saver = SaverConfig.builder().register(SaverEnum.MEMORY.getValue(), new MemorySaver()).build();
526530

527531
var compileConfig = CompileConfig.builder().saverConfig(saver).build();
528532

0 commit comments

Comments
 (0)