Spaces:
Configuration error
Configuration error
package templates | |
import ( | |
"bytes" | |
"text/template" | |
"github.com/Masterminds/sprig/v3" | |
) | |
type MultiModalOptions struct { | |
TotalImages int | |
TotalAudios int | |
TotalVideos int | |
ImagesInMessage int | |
AudiosInMessage int | |
VideosInMessage int | |
} | |
type MultimodalContent struct { | |
ID int | |
} | |
const DefaultMultiModalTemplate = "{{ range .Audio }}[audio-{{.ID}}]{{end}}{{ range .Images }}[img-{{.ID}}]{{end}}{{ range .Video }}[vid-{{.ID}}]{{end}}{{.Text}}" | |
func TemplateMultiModal(templateString string, opts MultiModalOptions, text string) (string, error) { | |
if templateString == "" { | |
templateString = DefaultMultiModalTemplate | |
} | |
// compile the template | |
tmpl, err := template.New("template").Funcs(sprig.FuncMap()).Parse(templateString) | |
if err != nil { | |
return "", err | |
} | |
videos := []MultimodalContent{} | |
for i := 0; i < opts.VideosInMessage; i++ { | |
videos = append(videos, MultimodalContent{ID: i + (opts.TotalVideos - opts.VideosInMessage)}) | |
} | |
audios := []MultimodalContent{} | |
for i := 0; i < opts.AudiosInMessage; i++ { | |
audios = append(audios, MultimodalContent{ID: i + (opts.TotalAudios - opts.AudiosInMessage)}) | |
} | |
images := []MultimodalContent{} | |
for i := 0; i < opts.ImagesInMessage; i++ { | |
images = append(images, MultimodalContent{ID: i + (opts.TotalImages - opts.ImagesInMessage)}) | |
} | |
result := bytes.NewBuffer(nil) | |
// execute the template | |
err = tmpl.Execute(result, struct { | |
Audio []MultimodalContent | |
Images []MultimodalContent | |
Video []MultimodalContent | |
Text string | |
}{ | |
Audio: audios, | |
Images: images, | |
Video: videos, | |
Text: text, | |
}) | |
return result.String(), err | |
} | |