mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 07:30:53 +02:00
50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package multiagent
|
|
|
|
import "github.com/cloudwego/eino/schema"
|
|
|
|
type einoStreamToolCallCompletionHandlerConfig struct {
|
|
ConversationID string
|
|
OrchMode string
|
|
Progress func(eventType, message string, data interface{})
|
|
RunProgress *einoRunProgressTracker
|
|
RunMessages *einoRunMessageAccumulator
|
|
MarkPending func(toolCallPendingInfo)
|
|
}
|
|
|
|
type einoStreamToolCallCompletionHandler struct {
|
|
conversationID string
|
|
orchMode string
|
|
progress func(eventType, message string, data interface{})
|
|
runProgress *einoRunProgressTracker
|
|
runMessages *einoRunMessageAccumulator
|
|
markPending func(toolCallPendingInfo)
|
|
}
|
|
|
|
func newEinoStreamToolCallCompletionHandler(cfg einoStreamToolCallCompletionHandlerConfig) *einoStreamToolCallCompletionHandler {
|
|
return &einoStreamToolCallCompletionHandler{
|
|
conversationID: cfg.ConversationID,
|
|
orchMode: cfg.OrchMode,
|
|
progress: cfg.Progress,
|
|
runProgress: cfg.RunProgress,
|
|
runMessages: cfg.RunMessages,
|
|
markPending: cfg.MarkPending,
|
|
}
|
|
}
|
|
|
|
func (h *einoStreamToolCallCompletionHandler) Complete(fragments []schema.ToolCall, agentName string) *schema.Message {
|
|
if h == nil {
|
|
return nil
|
|
}
|
|
var lastToolChunk *schema.Message
|
|
if merged := mergeStreamingToolCallFragments(fragments); len(merged) > 0 {
|
|
lastToolChunk = mergeMessageToolCalls(&schema.Message{ToolCalls: merged})
|
|
}
|
|
if h.runProgress != nil {
|
|
h.runProgress.EmitToolCalls(lastToolChunk, agentName, h.markPending)
|
|
}
|
|
if lastToolChunk != nil && len(lastToolChunk.ToolCalls) > 0 && h.runMessages != nil {
|
|
h.runMessages.AppendAssistantToolCalls(lastToolChunk.ToolCalls)
|
|
}
|
|
return lastToolChunk
|
|
}
|