diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-21 10:41:48 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-21 10:41:48 +0300 |
| commit | c31e91ce42fc00079e0ee23f93e337846eea00ad (patch) | |
| tree | 7cde1327a068ef2ea74682b360a1e6c6a9260a05 /internal | |
| parent | 45efacae81503ab2266502e1ea32513e35fb88d7 (diff) | |
fix r7 custom prompt translation drift
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/image/gemini_prompt.go | 5 | ||||
| -rw-r--r-- | internal/image/gemini_test.go | 33 |
2 files changed, 38 insertions, 0 deletions
diff --git a/internal/image/gemini_prompt.go b/internal/image/gemini_prompt.go index 09c54c7..5932174 100644 --- a/internal/image/gemini_prompt.go +++ b/internal/image/gemini_prompt.go @@ -42,6 +42,11 @@ func (c *GeminiProvider) buildPrompt(ctx context.Context, opts *SearchOptions) ( } translation := strings.TrimSpace(opts.Translation) + if customPrompt := normalizeCustomPrompt(opts.CustomPrompt); customPrompt != "" { + fmt.Printf("Using custom prompt: %s\n", customPrompt) + return customPrompt, translation, nil + } + translatedWord, err := c.resolveTranslation(ctx, opts, translation) if err != nil { return "", "", err diff --git a/internal/image/gemini_test.go b/internal/image/gemini_test.go index 70bd424..aae8014 100644 --- a/internal/image/gemini_test.go +++ b/internal/image/gemini_test.go @@ -114,6 +114,39 @@ func TestGeminiProvider_Search_CustomPromptSkipsTextGeneration(t *testing.T) { } } +func TestGeminiProvider_Search_CustomPromptWithoutTranslationKeepsDescriptionSimple(t *testing.T) { + originalText := geminiGenerateText + originalImage := geminiGenerateImage + t.Cleanup(func() { + geminiGenerateText = originalText + geminiGenerateImage = originalImage + }) + + geminiGenerateText = func(context.Context, *GeminiProvider, string, string, string, float32, int32) (string, error) { + t.Fatal("unexpected text generation for custom prompt") + return "", nil + } + + geminiGenerateImage = func(_ context.Context, _ *GeminiProvider, _ string, _ string) ([]byte, string, error) { + return mustJPEGBytes(t), "image/jpeg", nil + } + + client := NewGeminiProvider(&GeminiConfig{APIKey: "test-key"}) + results, err := client.Search(context.Background(), &SearchOptions{ + Query: "ябълка", + CustomPrompt: "custom flashcard prompt", + }) + if err != nil { + t.Fatalf("Search() unexpected error: %v", err) + } + if len(results) != 1 { + t.Fatalf("expected 1 result, got %d", len(results)) + } + if got := results[0].Description; got != "Generated educational image for ябълка" { + t.Fatalf("Description = %q, want %q", got, "Generated educational image for ябълка") + } +} + func TestGeminiProvider_Search_CustomPromptIsTruncated(t *testing.T) { originalText := geminiGenerateText originalImage := geminiGenerateImage |
