feat(api): add memoir image prompt settings and optimization service

Made-with: Cursor
This commit is contained in:
Kevin
2026-03-10 16:00:25 +08:00
parent 5b51d104b4
commit f8283b398e
3 changed files with 147 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
import unittest
from unittest.mock import Mock
from api.services.memoir_images.prompting import MemoirImagePromptService
from api.services.memoir_images.settings import MemoirImageSettings
class MemoirImagePromptingTest(unittest.TestCase):
def test_prompt_service_uses_category_style_and_plain_fallback_without_llm(self):
settings = MemoirImageSettings(
enabled=True,
max_per_chapter=2,
provider="liblib",
default_style="watercolor",
default_size="1024x1024",
poll_interval_seconds=3,
max_attempts=20,
)
service = MemoirImagePromptService(llm=None, settings=settings)
result = service.build_prompt(
chapter_title="童年的夏天",
chapter_category="childhood",
description="奶奶坐在院子里的藤椅上",
context_excerpt="梧桐树下很安静,夏天总有蝉鸣。",
)
self.assertEqual(result["style"], "watercolor")
self.assertEqual(result["size"], "1024x1024")
self.assertIn("奶奶坐在院子里的藤椅上", result["prompt"])
self.assertIn("childhood", result["prompt_context"])
def test_prompt_service_parses_structured_llm_response(self):
settings = MemoirImageSettings(
enabled=True,
max_per_chapter=2,
provider="liblib",
default_style="watercolor",
default_size="1024x1024",
poll_interval_seconds=3,
max_attempts=20,
)
llm = Mock()
llm.invoke.return_value.content = (
'{"prompt":"A grandmother in a quiet courtyard, summer cicadas, soft watercolor",'
'"style":"watercolor","size":"1024x1024"}'
)
service = MemoirImagePromptService(llm=llm, settings=settings)
result = service.build_prompt(
chapter_title="童年的夏天",
chapter_category="childhood",
description="奶奶坐在院子里的藤椅上",
context_excerpt="梧桐树下很安静,夏天总有蝉鸣。",
)
self.assertEqual(result["prompt"], "A grandmother in a quiet courtyard, summer cicadas, soft watercolor")
self.assertEqual(result["style"], "watercolor")
self.assertEqual(result["size"], "1024x1024")