mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 07:30:53 +02:00
116 lines
4.1 KiB
Go
116 lines
4.1 KiB
Go
package multiagent
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/cloudwego/eino/adk"
|
|
"github.com/cloudwego/eino/schema"
|
|
)
|
|
|
|
type einoMaterializedMessageEventHandlerConfig struct {
|
|
ConversationID string
|
|
OrchMode string
|
|
Progress func(eventType, message string, data interface{})
|
|
SnapshotMCPIDs func() []string
|
|
StreamsMainAssistant func(agent string) bool
|
|
EinoRoleTag func(agent string) string
|
|
RunProgress *einoRunProgressTracker
|
|
StdoutSuppressor *einoExecuteStdoutSuppressor
|
|
AssistantOutput *einoAssistantOutputAccumulator
|
|
RunMessages *einoRunMessageAccumulator
|
|
Usage *einoRunUsageAccumulator
|
|
ToolResultHandler *einoToolResultEventHandler
|
|
MarkPending func(toolCallPendingInfo)
|
|
NextMainStreamID func() string
|
|
}
|
|
|
|
type einoMaterializedMessageEventHandler struct {
|
|
conversationID string
|
|
orchMode string
|
|
progress func(eventType, message string, data interface{})
|
|
snapshotMCPIDs func() []string
|
|
streamsMainAssistant func(agent string) bool
|
|
einoRoleTag func(agent string) string
|
|
runProgress *einoRunProgressTracker
|
|
stdoutSuppressor *einoExecuteStdoutSuppressor
|
|
assistantOutput *einoAssistantOutputAccumulator
|
|
runMessages *einoRunMessageAccumulator
|
|
usage *einoRunUsageAccumulator
|
|
toolResultHandler *einoToolResultEventHandler
|
|
markPending func(toolCallPendingInfo)
|
|
nextMainStreamID func() string
|
|
}
|
|
|
|
func newEinoMaterializedMessageEventHandler(cfg einoMaterializedMessageEventHandlerConfig) *einoMaterializedMessageEventHandler {
|
|
if cfg.SnapshotMCPIDs == nil {
|
|
cfg.SnapshotMCPIDs = func() []string { return nil }
|
|
}
|
|
if cfg.StreamsMainAssistant == nil {
|
|
cfg.StreamsMainAssistant = func(string) bool { return true }
|
|
}
|
|
if cfg.EinoRoleTag == nil {
|
|
cfg.EinoRoleTag = func(string) string { return "" }
|
|
}
|
|
if cfg.NextMainStreamID == nil {
|
|
cfg.NextMainStreamID = func() string { return "eino-main" }
|
|
}
|
|
return &einoMaterializedMessageEventHandler{
|
|
conversationID: cfg.ConversationID,
|
|
orchMode: cfg.OrchMode,
|
|
progress: cfg.Progress,
|
|
snapshotMCPIDs: cfg.SnapshotMCPIDs,
|
|
streamsMainAssistant: cfg.StreamsMainAssistant,
|
|
einoRoleTag: cfg.EinoRoleTag,
|
|
runProgress: cfg.RunProgress,
|
|
stdoutSuppressor: cfg.StdoutSuppressor,
|
|
assistantOutput: cfg.AssistantOutput,
|
|
runMessages: cfg.RunMessages,
|
|
usage: cfg.Usage,
|
|
toolResultHandler: cfg.ToolResultHandler,
|
|
markPending: cfg.MarkPending,
|
|
nextMainStreamID: cfg.NextMainStreamID,
|
|
}
|
|
}
|
|
|
|
func (h *einoMaterializedMessageEventHandler) Handle(mv *adk.MessageVariant, msg adk.Message, agentName string) bool {
|
|
if h == nil || mv == nil || msg == nil {
|
|
return false
|
|
}
|
|
if h.runMessages != nil {
|
|
h.runMessages.Append(msg)
|
|
}
|
|
if msg.Role == schema.Assistant && h.usage != nil {
|
|
h.usage.AddMessage(msg)
|
|
}
|
|
if h.runProgress != nil {
|
|
h.runProgress.EmitToolCalls(mergeMessageToolCalls(msg), agentName, h.markPending)
|
|
}
|
|
if mv.Role == schema.Assistant {
|
|
newEinoReasoningStreamEmitter(h.conversationID, h.orchMode, agentName, h.einoRoleTag(agentName), h.progress, nil).EmitComplete(msg.ReasoningContent)
|
|
body := strings.TrimSpace(msg.Content)
|
|
if body != "" {
|
|
if h.streamsMainAssistant(agentName) {
|
|
newEinoMainAssistantCompleteHandler(einoMainAssistantCompleteHandlerConfig{
|
|
AgentName: agentName,
|
|
Emitter: newEinoMainResponseStreamEmitter(h.conversationID, h.orchMode, agentName, h.nextMainStreamID(), h.mainIteration(agentName), h.progress, h.snapshotMCPIDs),
|
|
StdoutSuppressor: h.stdoutSuppressor,
|
|
AssistantOutput: h.assistantOutput,
|
|
}).EmitComplete(body)
|
|
} else {
|
|
newEinoSubAgentReplyEmitter(h.conversationID, agentName, h.progress, nil).EmitComplete(body)
|
|
}
|
|
}
|
|
}
|
|
if h.toolResultHandler != nil {
|
|
h.toolResultHandler.HandleMaterialized(mv, msg, agentName)
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (h *einoMaterializedMessageEventHandler) mainIteration(agentName string) int {
|
|
if h == nil || h.runProgress == nil {
|
|
return 0
|
|
}
|
|
return h.runProgress.MainIteration(agentName)
|
|
}
|