Try to improve prompt adherence for low variety image models
Build and Push Container / build-and-push (push) Successful in 1m5s
Build and Push Container / build-and-push (push) Successful in 1m5s
This commit is contained in:
@@ -1030,6 +1030,10 @@ def test_image_prompt_system_prompt_covers_key_details() -> None:
|
||||
assert "style" in lowered
|
||||
assert "canada goose" in lowered
|
||||
assert "only the image generation prompt" in lowered
|
||||
assert "exactly as written" in lowered
|
||||
assert "fountain pen wearing pants" in lowered
|
||||
assert "centaur" in lowered
|
||||
assert "not a person riding a horse" in lowered
|
||||
|
||||
|
||||
def test_doodlebob_prompt_rewrite_uses_detailed_system_prompt(
|
||||
@@ -1046,6 +1050,7 @@ def test_doodlebob_prompt_rewrite_uses_detailed_system_prompt(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"landscape", # layout selection
|
||||
"a very detailed prompt", # prompt rewrite
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1064,6 +1069,55 @@ def test_doodlebob_prompt_rewrite_uses_detailed_system_prompt(
|
||||
)
|
||||
|
||||
|
||||
def test_verify_image_prompt_passes_unchanged(
|
||||
mock_llama_wrapper: MagicMock,
|
||||
) -> None:
|
||||
"""A PASS verdict keeps the original prompt and sends both inputs."""
|
||||
import vibe_bot.main as main_module
|
||||
|
||||
mock_llama_wrapper.chat_completion_instruct.return_value = "PASS"
|
||||
result = main_module.verify_image_prompt("a centaur", "a detailed prompt")
|
||||
assert result == "a detailed prompt"
|
||||
call = mock_llama_wrapper.chat_completion_instruct.call_args
|
||||
assert call.kwargs["system_prompt"] == main_module.IMAGE_PROMPT_VERIFY_SYSTEM_PROMPT
|
||||
assert "a centaur" in call.kwargs["user_prompt"]
|
||||
assert "a detailed prompt" in call.kwargs["user_prompt"]
|
||||
|
||||
|
||||
def test_verify_image_prompt_case_insensitive_pass(
|
||||
mock_llama_wrapper: MagicMock,
|
||||
) -> None:
|
||||
"""A lower-case, punctuated 'pass' verdict also keeps the original."""
|
||||
import vibe_bot.main as main_module
|
||||
|
||||
mock_llama_wrapper.chat_completion_instruct.return_value = "pass."
|
||||
assert main_module.verify_image_prompt("a centaur", "p") == "p"
|
||||
|
||||
|
||||
def test_verify_image_prompt_correction_replaces_prompt(
|
||||
mock_llama_wrapper: MagicMock,
|
||||
) -> None:
|
||||
"""A non-PASS response is used as the corrected prompt."""
|
||||
import vibe_bot.main as main_module
|
||||
|
||||
corrected = (
|
||||
"one fused creature, a human torso joined to a horse's front half, "
|
||||
"human arms raised, standing in a rocky field"
|
||||
)
|
||||
mock_llama_wrapper.chat_completion_instruct.return_value = corrected
|
||||
assert main_module.verify_image_prompt("a centaur", "a horse") == corrected
|
||||
|
||||
|
||||
def test_verify_image_prompt_empty_falls_back(
|
||||
mock_llama_wrapper: MagicMock,
|
||||
) -> None:
|
||||
"""An empty verification response falls back to the drafted prompt."""
|
||||
import vibe_bot.main as main_module
|
||||
|
||||
mock_llama_wrapper.chat_completion_instruct.return_value = ""
|
||||
assert main_module.verify_image_prompt("a centaur", "drafted") == "drafted"
|
||||
|
||||
|
||||
def test_doodlebob_selects_portrait(
|
||||
mock_ctx: MagicMock,
|
||||
mock_llama_wrapper: MagicMock,
|
||||
@@ -1078,6 +1132,7 @@ def test_doodlebob_selects_portrait(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"portrait", # layout selection
|
||||
"a tall portrait of a lighthouse", # prompt rewrite
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1113,6 +1168,7 @@ def test_doodlebob_selects_landscape(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"landscape",
|
||||
"a wide panoramic coastline",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1137,6 +1193,7 @@ def test_doodlebob_malformed_layout_defaults_square(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"banana", # malformed layout
|
||||
"a balanced composition",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1163,6 +1220,7 @@ def test_doodlebob_empty_layout_defaults_square(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"", # empty layout response
|
||||
"a balanced composition",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1188,6 +1246,7 @@ def test_doodlebob_reports_estimate_and_elapsed(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"square",
|
||||
"a test scene",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = 12.34
|
||||
@@ -1220,6 +1279,7 @@ def test_doodlebob_no_estimate_without_history(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"square",
|
||||
"a test scene",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = "aW1hZ2U="
|
||||
mock_database.get_image_generation_time_estimate.return_value = None
|
||||
@@ -1247,6 +1307,7 @@ def test_doodlebob_failed_generation_not_recorded(
|
||||
mock_llama_wrapper.chat_completion_instruct.side_effect = [
|
||||
"square",
|
||||
"a test scene",
|
||||
"PASS", # prompt verification
|
||||
]
|
||||
mock_llama_wrapper.image_generation.return_value = ""
|
||||
mock_database.get_image_generation_time_estimate.return_value = 8.0
|
||||
|
||||
Reference in New Issue
Block a user