package common import ( "errors" "strings" "github.com/cloudwego/eino/schema" ) type ImageInput struct { URLs []string } func BuildVisionMessages(systemPrompt string, userText string, images ImageInput) ([]*schema.Message, error) { if len(images.URLs) == 0 { return nil, errors.New("vision requires at least one image url") } parts := make([]schema.MessageInputPart, 0, 1+len(images.URLs)) if strings.TrimSpace(userText) != "" { parts = append(parts, schema.MessageInputPart{Type: schema.ChatMessagePartTypeText, Text: userText}) } for _, u := range images.URLs { if u == "" { continue } if !strings.HasPrefix(u, "http://") && !strings.HasPrefix(u, "https://") { continue } parts = append(parts, schema.MessageInputPart{Type: schema.ChatMessagePartTypeImageURL, Image: &schema.MessageInputImage{MessagePartCommon: schema.MessagePartCommon{URL: &u}, Detail: schema.ImageURLDetailHigh}}) } if len(parts) == 0 { return nil, errors.New("vision inputs invalid: no text or valid image urls") } msgs := []*schema.Message{schema.SystemMessage(systemPrompt)} msgs = append(msgs, &schema.Message{Role: schema.User, UserInputMultiContent: parts}) return msgs, nil }