mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 15:40:38 +02:00
82 lines
2.4 KiB
Go
82 lines
2.4 KiB
Go
package multiagent
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/cloudwego/eino/adk"
|
|
"github.com/cloudwego/eino/schema"
|
|
)
|
|
|
|
type einoAgenticMessageAgentAdapter struct {
|
|
inner adk.TypedAgent[*schema.AgenticMessage]
|
|
}
|
|
|
|
func newEinoAgenticMessageAgentAdapter(inner adk.TypedAgent[*schema.AgenticMessage]) adk.Agent {
|
|
if inner == nil {
|
|
return nil
|
|
}
|
|
return &einoAgenticMessageAgentAdapter{inner: inner}
|
|
}
|
|
|
|
func (a *einoAgenticMessageAgentAdapter) Name(ctx context.Context) string {
|
|
if a == nil || a.inner == nil {
|
|
return ""
|
|
}
|
|
return a.inner.Name(ctx)
|
|
}
|
|
|
|
func (a *einoAgenticMessageAgentAdapter) Description(ctx context.Context) string {
|
|
if a == nil || a.inner == nil {
|
|
return ""
|
|
}
|
|
return a.inner.Description(ctx)
|
|
}
|
|
|
|
func (a *einoAgenticMessageAgentAdapter) Run(ctx context.Context, input *adk.AgentInput, opts ...adk.AgentRunOption) *adk.AsyncIterator[*adk.AgentEvent] {
|
|
return a.runTyped(ctx, input, nil, opts...)
|
|
}
|
|
|
|
func (a *einoAgenticMessageAgentAdapter) Resume(ctx context.Context, info *adk.ResumeInfo, opts ...adk.AgentRunOption) *adk.AsyncIterator[*adk.AgentEvent] {
|
|
return a.runTyped(ctx, nil, info, opts...)
|
|
}
|
|
|
|
func (a *einoAgenticMessageAgentAdapter) runTyped(ctx context.Context, input *adk.AgentInput, resumeInfo *adk.ResumeInfo, opts ...adk.AgentRunOption) *adk.AsyncIterator[*adk.AgentEvent] {
|
|
iter, gen := adk.NewAsyncIteratorPair[*adk.AgentEvent]()
|
|
go func() {
|
|
defer gen.Close()
|
|
if a == nil || a.inner == nil {
|
|
gen.Send(&adk.AgentEvent{Err: fmt.Errorf("agentic adapter: inner agent is nil")})
|
|
return
|
|
}
|
|
var agenticIter *adk.AsyncIterator[*adk.TypedAgentEvent[*schema.AgenticMessage]]
|
|
if resumeInfo != nil {
|
|
resumable, ok := a.inner.(adk.TypedResumableAgent[*schema.AgenticMessage])
|
|
if !ok {
|
|
gen.Send(&adk.AgentEvent{Err: fmt.Errorf("agentic adapter: inner agent does not support resume")})
|
|
return
|
|
}
|
|
agenticIter = resumable.Resume(ctx, resumeInfo, opts...)
|
|
} else {
|
|
agenticInput := &adk.TypedAgentInput[*schema.AgenticMessage]{}
|
|
if input != nil {
|
|
agenticInput.EnableStreaming = input.EnableStreaming
|
|
agenticInput.Messages = EinoMessagesToAgentic(input.Messages)
|
|
}
|
|
agenticIter = a.inner.Run(ctx, agenticInput, opts...)
|
|
}
|
|
for {
|
|
ev, ok := agenticIter.Next()
|
|
if !ok {
|
|
return
|
|
}
|
|
for _, adapted := range adaptAgenticEventToEinoEvents(ev) {
|
|
if adapted != nil {
|
|
gen.Send(adapted)
|
|
}
|
|
}
|
|
}
|
|
}()
|
|
return iter
|
|
}
|