/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2025. All rights reserved.
*/
package magic.agent_group
import std.collection.ArrayList
public class LinearGroup <: AgentGroup {
private let members = ArrayList<Agent>()
init(prev: Agent, next: Agent) {
this.members.append(prev)
this.members.append(next)
}
func addNext(next: Agent): LinearGroup {
this.members.append(next)
return this
}
override public func chat(request: AgentRequest): AgentResponse {
return chat(request, maxRound: DISCUSSION_MAX_ROUND)
}
override public func chat(request: AgentRequest, maxRound!: Int64): AgentResponse {
var currReq = request
var currResp: Option<AgentResponse> = None
for (agent in this.members) {
currResp = agent.chat(currReq)
currReq = AgentRequest(currResp.getOrThrow().content, dialog: currReq.dialog)
}
return currResp.getOrThrow()
}
override public func asyncChat(request: AgentRequest): AsyncAgentResponse {
var currReq = request
for (i in 0..this.members.size-1) {
let agent = this.members[i]
let currResp = agent.chat(currReq)
currReq = AgentRequest(currResp.content, dialog: currReq.dialog)
}
let lastAgent = this.members[this.members.size - 1]
return lastAgent.asyncChat(currReq)
}
override public operator func [](memberName: String): Agent {
throw UnsupportedException()
}
}