Add File
This commit is contained in:
@@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com).
|
||||||
|
* <p>
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.agentsflex.core.chain;
|
||||||
|
|
||||||
|
import com.agentsflex.core.memory.ContextMemory;
|
||||||
|
import com.agentsflex.core.memory.DefaultContextMemory;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class ChainNode implements Serializable {
|
||||||
|
|
||||||
|
protected String id;
|
||||||
|
protected String name;
|
||||||
|
protected String description;
|
||||||
|
|
||||||
|
protected boolean async = false;
|
||||||
|
protected List<ChainEdge> inwardEdges;
|
||||||
|
protected List<ChainEdge> outwardEdges;
|
||||||
|
|
||||||
|
protected NodeCondition condition;
|
||||||
|
|
||||||
|
protected ContextMemory memory = new DefaultContextMemory();
|
||||||
|
protected ChainNodeStatus nodeStatus = ChainNodeStatus.READY;
|
||||||
|
|
||||||
|
protected ChainNodeValidator validator;
|
||||||
|
|
||||||
|
|
||||||
|
// 循环执行相关属性
|
||||||
|
protected boolean loopEnable = false; // 是否启用循环执行
|
||||||
|
protected long loopIntervalMs = 1000; // 循环间隔时间(毫秒)
|
||||||
|
protected NodeCondition loopBreakCondition; // 跳出循环的条件
|
||||||
|
protected int maxLoopCount = 0; // 0 表示不限制循环次数
|
||||||
|
|
||||||
|
// 算力消耗定义,积分消耗
|
||||||
|
protected long computeCost = 0;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAsync() {
|
||||||
|
return async;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsync(boolean async) {
|
||||||
|
this.async = async;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ChainEdge> getInwardEdges() {
|
||||||
|
return inwardEdges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInwardEdges(List<ChainEdge> inwardEdges) {
|
||||||
|
this.inwardEdges = inwardEdges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ChainEdge> getOutwardEdges() {
|
||||||
|
return outwardEdges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOutwardEdges(List<ChainEdge> outwardEdges) {
|
||||||
|
this.outwardEdges = outwardEdges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeCondition getCondition() {
|
||||||
|
return condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCondition(NodeCondition condition) {
|
||||||
|
this.condition = condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContextMemory getMemory() {
|
||||||
|
return memory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMemory(ContextMemory memory) {
|
||||||
|
this.memory = memory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChainNodeStatus getNodeStatus() {
|
||||||
|
return nodeStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNodeStatus(ChainNodeStatus nodeStatus) {
|
||||||
|
this.nodeStatus = nodeStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNodeStatusFinished() {
|
||||||
|
if (this.nodeStatus == ChainNodeStatus.ERROR) {
|
||||||
|
this.setNodeStatus(ChainNodeStatus.FINISHED_ABNORMAL);
|
||||||
|
} else {
|
||||||
|
this.setNodeStatus(ChainNodeStatus.FINISHED_NORMAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChainNodeValidator getValidator() {
|
||||||
|
return validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValidator(ChainNodeValidator validator) {
|
||||||
|
this.validator = validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addOutwardEdge(ChainEdge edge) {
|
||||||
|
if (this.outwardEdges == null) {
|
||||||
|
this.outwardEdges = new ArrayList<>();
|
||||||
|
}
|
||||||
|
this.outwardEdges.add(edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addInwardEdge(ChainEdge edge) {
|
||||||
|
if (this.inwardEdges == null) {
|
||||||
|
this.inwardEdges = new ArrayList<>();
|
||||||
|
}
|
||||||
|
this.inwardEdges.add(edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLoopEnable() {
|
||||||
|
return loopEnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoopEnable(boolean loopEnable) {
|
||||||
|
this.loopEnable = loopEnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getLoopIntervalMs() {
|
||||||
|
return loopIntervalMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoopIntervalMs(long loopIntervalMs) {
|
||||||
|
this.loopIntervalMs = loopIntervalMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeCondition getLoopBreakCondition() {
|
||||||
|
return loopBreakCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoopBreakCondition(NodeCondition loopBreakCondition) {
|
||||||
|
this.loopBreakCondition = loopBreakCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxLoopCount() {
|
||||||
|
return maxLoopCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxLoopCount(int maxLoopCount) {
|
||||||
|
this.maxLoopCount = maxLoopCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Parameter> getParameters() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getComputeCost() {
|
||||||
|
return computeCost;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComputeCost(long computeCost) {
|
||||||
|
this.computeCost = computeCost;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChainNodeValidResult validate() throws Exception {
|
||||||
|
return validator != null ? validator.validate(this) : ChainNodeValidResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Map<String, Object> execute(Chain chain);
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user