diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-20 09:25:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-20 09:25:00 +0300 |
| commit | e670494adfe00a1fa55c7e8ffcbf0172ff662cce (patch) | |
| tree | c1ec8902f2407ce1168289aa7521507da3b4bae2 /internal/comic/generator.go | |
| parent | af2aa5e5efa82d3bc7cf5530e0a1eee72ba99244 (diff) | |
Fix task 25 comic generation leak handling
Diffstat (limited to 'internal/comic/generator.go')
| -rw-r--r-- | internal/comic/generator.go | 33 |
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 +} |
