mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 23:50:32 +02:00
78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package multiagent
|
|
|
|
import "strings"
|
|
|
|
type einoMainAssistantStreamHandler struct {
|
|
agentName string
|
|
emitter *einoMainResponseStreamEmitter
|
|
stdoutSuppressor *einoExecuteStdoutSuppressor
|
|
assistantOutput *einoAssistantOutputAccumulator
|
|
runMessages *einoRunMessageAccumulator
|
|
|
|
buf string
|
|
dupTarget string
|
|
}
|
|
|
|
type einoMainAssistantStreamHandlerConfig struct {
|
|
AgentName string
|
|
Emitter *einoMainResponseStreamEmitter
|
|
StdoutSuppressor *einoExecuteStdoutSuppressor
|
|
AssistantOutput *einoAssistantOutputAccumulator
|
|
RunMessages *einoRunMessageAccumulator
|
|
}
|
|
|
|
func newEinoMainAssistantStreamHandler(cfg einoMainAssistantStreamHandlerConfig) *einoMainAssistantStreamHandler {
|
|
return &einoMainAssistantStreamHandler{
|
|
agentName: cfg.AgentName,
|
|
emitter: cfg.Emitter,
|
|
stdoutSuppressor: cfg.StdoutSuppressor,
|
|
assistantOutput: cfg.AssistantOutput,
|
|
runMessages: cfg.RunMessages,
|
|
}
|
|
}
|
|
|
|
func (h *einoMainAssistantStreamHandler) EmitDelta(content string) bool {
|
|
if h == nil || content == "" {
|
|
return false
|
|
}
|
|
var delta string
|
|
h.buf, delta = normalizeStreamingDelta(h.buf, content)
|
|
if delta == "" {
|
|
return false
|
|
}
|
|
if h.dupTarget == "" && h.stdoutSuppressor != nil {
|
|
h.dupTarget = h.stdoutSuppressor.Peek()
|
|
}
|
|
if h.dupTarget != "" {
|
|
return false
|
|
}
|
|
return h.emitter.EmitDelta(delta, h.buf)
|
|
}
|
|
|
|
func (h *einoMainAssistantStreamHandler) Finish() string {
|
|
if h == nil {
|
|
return ""
|
|
}
|
|
body := strings.TrimSpace(h.buf)
|
|
if body == "" {
|
|
return ""
|
|
}
|
|
if h.dupTarget != "" {
|
|
if h.stdoutSuppressor != nil {
|
|
h.stdoutSuppressor.Clear()
|
|
}
|
|
if body != h.dupTarget {
|
|
h.emitter.EmitTailFromFull(h.buf)
|
|
}
|
|
} else {
|
|
h.emitter.EmitTailFromFull(h.buf)
|
|
}
|
|
if h.assistantOutput != nil {
|
|
h.assistantOutput.RecordMainAssistant(h.agentName, body)
|
|
}
|
|
if h.runMessages != nil {
|
|
h.runMessages.AppendAssistantText(body)
|
|
}
|
|
return body
|
|
}
|