summaryrefslogtreecommitdiff
path: root/internal/comic/generator.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/comic/generator.go')
-rw-r--r--internal/comic/generator.go33
1 files changed, 23 insertions, 10 deletions
diff --git a/internal/comic/generator.go b/internal/comic/generator.go
index b3be2ef..89591c8 100644
--- a/internal/comic/generator.go
+++ b/internal/comic/generator.go
@@ -128,7 +128,9 @@ func (g *Generator) renderStoryPrompt(templateName string, entries []WordEntry)
genre := resolveGenre(g.theme, g.genres)
data := map[string]any{
"Language": g.language,
+ "LanguageName": localizedLanguageName(g.language, g.script),
"Script": g.script,
+ "ScriptName": localizedScriptName(g.script),
"Genre": genre,
"Words": buildWordList(entries, ""),
"StoryBibleSeparator": storyBibleSeparator,
@@ -137,8 +139,10 @@ func (g *Generator) renderStoryPrompt(templateName string, entries []WordEntry)
}
systemPrompt, err := g.prompts.RenderPrompt(storySystemPromptTemplate, map[string]any{
- "Language": g.language,
- "Script": g.script,
+ "Language": g.language,
+ "LanguageName": localizedLanguageName(g.language, g.script),
+ "Script": g.script,
+ "ScriptName": localizedScriptName(g.script),
})
if err != nil {
return "", err
@@ -152,32 +156,41 @@ func (g *Generator) renderStoryPrompt(templateName string, entries []WordEntry)
func validateGeneratedResult(result GenerateResult, script string) error {
if err := validateTextScript("story text", result.StoryText, script); err != nil {
- return err
+ return fmt.Errorf("%w (story=%q)", err, compactTextSnippet(result.StoryText))
}
if err := validateNoPromptLeakage("story text", result.StoryText); err != nil {
- return err
+ return fmt.Errorf("%w (story=%q)", err, compactTextSnippet(result.StoryText))
}
if err := validateTextScript("character bible", result.Bible, script); err != nil {
- return err
+ return fmt.Errorf("%w (bible=%q)", err, compactTextSnippet(result.Bible))
}
if err := validateNoPromptLeakage("character bible", result.Bible); err != nil {
- return err
+ return fmt.Errorf("%w (bible=%q)", err, compactTextSnippet(result.Bible))
}
if err := validateTextScript("comic title", result.Title, script); err != nil {
- return err
+ return fmt.Errorf("%w (title=%q)", err, compactTextSnippet(result.Title))
}
if err := validateNoPromptLeakage("comic title", result.Title); err != nil {
- return err
+ return fmt.Errorf("%w (title=%q)", err, compactTextSnippet(result.Title))
}
for pageIdx, page := range result.PanelScript {
for panelIdx, panel := range page {
if err := validateTextScript(fmt.Sprintf("panel script P%d-%c", pageIdx+1, 'A'+panelIdx), panel, script); err != nil {
- return err
+ return fmt.Errorf("%w (panel=%q)", err, compactTextSnippet(panel))
}
if err := validateNoPromptLeakage(fmt.Sprintf("panel script P%d-%c", pageIdx+1, 'A'+panelIdx), panel); err != nil {
- return err
+ return fmt.Errorf("%w (panel=%q)", err, compactTextSnippet(panel))
}
}
}
return nil
}
+
+func compactTextSnippet(text string) string {
+ text = strings.TrimSpace(text)
+ text = strings.Join(strings.Fields(text), " ")
+ if len(text) > 220 {
+ text = text[:220] + "..."
+ }
+ return text
+}