From 4ad14bb752beaed61896cd854269d5aaec5eeefd Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Wed, 25 Jun 2025 17:08:30 -0700 Subject: [PATCH] feat: enhance dryrun client to display multi-content user messages ### CHANGES - Handle multi-content messages for the user role. - Display image URLs from user messages in output. - Update both `Send` and `SendStream` methods. - Retain existing behavior for simple text messages. --- plugins/ai/dryrun/dryrun.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/plugins/ai/dryrun/dryrun.go b/plugins/ai/dryrun/dryrun.go index 91c44198..49962bd4 100644 --- a/plugins/ai/dryrun/dryrun.go +++ b/plugins/ai/dryrun/dryrun.go @@ -33,7 +33,20 @@ func (c *Client) SendStream(msgs []*goopenai.ChatCompletionMessage, opts *common case goopenai.ChatMessageRoleAssistant: output += fmt.Sprintf("Assistant:\n%s\n\n", msg.Content) case goopenai.ChatMessageRoleUser: - output += fmt.Sprintf("User:\n%s\n\n", msg.Content) + if msg.MultiContent != nil { + output += "User:\n" + for _, part := range msg.MultiContent { + output += fmt.Sprintf(" - Type: %s\n", part.Type) + if part.Type == goopenai.ChatMessagePartTypeImageURL { + output += fmt.Sprintf(" Image URL: %s\n", part.ImageURL.URL) + } else { + output += fmt.Sprintf(" Text: %s\n", part.Text) + } + } + output += "\n" + } else { + output += fmt.Sprintf("User:\n%s\n\n", msg.Content) + } default: output += fmt.Sprintf("%s:\n%s\n\n", msg.Role, msg.Content) } @@ -64,7 +77,20 @@ func (c *Client) Send(_ context.Context, msgs []*goopenai.ChatCompletionMessage, case goopenai.ChatMessageRoleAssistant: fmt.Printf("Assistant:\n%s\n\n", msg.Content) case goopenai.ChatMessageRoleUser: - fmt.Printf("User:\n%s\n\n", msg.Content) + if msg.MultiContent != nil { + fmt.Println("User:") + for _, part := range msg.MultiContent { + fmt.Printf(" - Type: %s\n", part.Type) + if part.Type == goopenai.ChatMessagePartTypeImageURL { + fmt.Printf(" Image URL: %s\n", part.ImageURL.URL) + } else { + fmt.Printf(" Text: %s\n", part.Text) + } + } + fmt.Println() + } else { + fmt.Printf("User:\n%s\n\n", msg.Content) + } default: fmt.Printf("%s:\n%s\n\n", msg.Role, msg.Content) }