Files
CyberStrikeAI/internal/multiagent/eino_initial_iterator_start_handler.go
2026-08-15 02:05:09 +08:00

55 lines
1.5 KiB
Go

package multiagent
import "github.com/cloudwego/eino/adk"
type einoAgentEventIteratorStarter func([]adk.Message) *adk.AsyncIterator[*adk.AgentEvent]
type einoInitialIteratorStartHandlerConfig struct {
ConversationID string
OrchMode string
Progress func(eventType, message string, data interface{})
UseTurnLoop bool
StartRunner einoAgentEventIteratorStarter
StartTurnLoop einoAgentEventIteratorStarter
}
type einoInitialIteratorStartHandler struct {
cfg einoInitialIteratorStartHandlerConfig
}
func newEinoInitialIteratorStartHandler(cfg einoInitialIteratorStartHandlerConfig) *einoInitialIteratorStartHandler {
return &einoInitialIteratorStartHandler{cfg: cfg}
}
func (h *einoInitialIteratorStartHandler) StartIfNeeded(existing *adk.AsyncIterator[*adk.AgentEvent], msgs []adk.Message) *adk.AsyncIterator[*adk.AgentEvent] {
if existing != nil {
return existing
}
if h == nil {
return nil
}
if h.cfg.UseTurnLoop {
h.emitTurnLoopTakeover()
if h.cfg.StartTurnLoop == nil {
return nil
}
return h.cfg.StartTurnLoop(msgs)
}
if h.cfg.StartRunner == nil {
return nil
}
return h.cfg.StartRunner(msgs)
}
func (h *einoInitialIteratorStartHandler) emitTurnLoopTakeover() {
if h == nil || h.cfg.Progress == nil {
return
}
h.cfg.Progress("progress", "Eino TurnLoop 常驻多轮 runtime 已接管本轮会话。", map[string]interface{}{
"conversationId": h.cfg.ConversationID,
"source": "eino",
"orchestration": h.cfg.OrchMode,
"kind": "turn_loop_takeover",
})
}