in experiments/babel/main.go [341:384]
func translate(statement string, languages []string) map[string]string {
var wg sync.WaitGroup
results := make(map[string]string)
resultChan := make(chan map[string]string, len(languages))
ctx := context.Background()
for _, language := range languages {
wg.Add(1)
go func(ctx context.Context, statement, language string) {
defer wg.Done()
// obtain language description, if there is one
languageDescription := language
if value, ok := languageDescriptions[language]; ok == true {
languageDescription = value
}
// translation prompt
prompt := fmt.Sprintf(`
translate this into appropriate vernacular in language %s \"%s\" output only the statement mimicing the level of formality, do not explain why.
translation: `, languageDescription, statement)
prompt = strings.ReplaceAll(prompt, "\n", "")
translation, err := generateContent(ctx, prompt)
if err != nil {
translation = fmt.Sprintf("couldn't translate to %s: %v", language, err)
}
langtrans := make(map[string]string)
langtrans[language] = translation
resultChan <- langtrans
}(ctx, statement, language)
}
go func() {
wg.Wait()
close(resultChan)
}()
for r := range resultChan {
for k, v := range r {
results[k] = v
}
}
return results
}