/* * Copyright 2025 CloudWeGo Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package prints import ( "encoding/json" "fmt" "io" "log" "strings" "github.com/cloudwego/eino/adk" "github.com/cloudwego/eino/schema" "github.com/cloudwego/eino-examples/internal/logs" ) func Event(event *adk.AgentEvent) { fmt.Printf("name: %s\npath: %s", event.AgentName, event.RunPath) if event.Output != nil && event.Output.MessageOutput != nil { if m := event.Output.MessageOutput.Message; m != nil { if len(m.Content) > 0 { if m.Role == schema.Tool { fmt.Printf("\ntool response: %s", m.Content) } else { fmt.Printf("\nanswer: %s", m.Content) } } if len(m.ToolCalls) > 0 { for _, tc := range m.ToolCalls { fmt.Printf("\ntool name: %s", tc.Function.Name) fmt.Printf("\narguments: %s", tc.Function.Arguments) } } } else if s := event.Output.MessageOutput.MessageStream; s != nil { toolMap := map[int][]*schema.Message{} var contentStart bool charNumOfOneRow := 0 maxCharNumOfOneRow := 120 for { chunk, err := s.Recv() if err != nil { if err == io.EOF { break } fmt.Printf("error: %v", err) return } if chunk.Content != "" { if !contentStart { contentStart = true if chunk.Role == schema.Tool { fmt.Printf("\ntool response: ") } else { fmt.Printf("\nanswer: ") } } charNumOfOneRow += len(chunk.Content) if strings.Contains(chunk.Content, "\n") { charNumOfOneRow = 0 } else if charNumOfOneRow >= maxCharNumOfOneRow { fmt.Printf("\n") charNumOfOneRow = 0 } fmt.Printf("%v", chunk.Content) } if len(chunk.ToolCalls) > 0 { for _, tc := range chunk.ToolCalls { index := tc.Index if index == nil { logs.Fatalf("index is nil") } toolMap[*index] = append(toolMap[*index], &schema.Message{ Role: chunk.Role, ToolCalls: []schema.ToolCall{ { ID: tc.ID, Type: tc.Type, Index: tc.Index, Function: schema.FunctionCall{ Name: tc.Function.Name, Arguments: tc.Function.Arguments, }, }, }, }) } } } for _, msgs := range toolMap { m, err := schema.ConcatMessages(msgs) if err != nil { log.Fatalf("ConcatMessage failed: %v", err) return } fmt.Printf("\ntool name: %s", m.ToolCalls[0].Function.Name) fmt.Printf("\narguments: %s", m.ToolCalls[0].Function.Arguments) } } } if event.Action != nil { if event.Action.TransferToAgent != nil { fmt.Printf("\naction: transfer to %v", event.Action.TransferToAgent.DestAgentName) } if event.Action.Interrupted != nil { ii, _ := json.MarshalIndent(event.Action.Interrupted.Data, " ", " ") fmt.Printf("\naction: interrupted") fmt.Printf("\ninterrupt snapshot: %v", string(ii)) } if event.Action.Exit { fmt.Printf("\naction: exit") } } if event.Err != nil { fmt.Printf("\nerror: %v", event.Err) } fmt.Println() fmt.Println() }