Lumen / test_lumen_images.py
SilverElixir
Add files via upload
5ca3ed2 unverified
Raw
History Blame Contribute Delete
4.08 kB
"""
test_lumen_images.py — юнит-тесты на lumen_images.py: автоматический выбор модели
генерации изображений по содержимому промпта (_pick_image_model), заменивший ручной
выбор через убранную команду /imgmodel (см. README, "Автоматический выбор модели").
lumen_images.py не зависит от Telegram/рантайм-состояния бота (тот же принцип, что и
у lumen_formatting.py/lumen_router_config.py — см. их тестовые файлы), поэтому
тестируется здесь напрямую (import lumen_images), без импорта bot.py.
Запуск:
pytest test_lumen_images.py -v
"""
import lumen_images
# ─────────────────────────── _pick_image_model ───────────────────────────
def test_pick_image_model_anime():
assert lumen_images._pick_image_model("нарисуй девушку в стиле аниме") == "flux-anime"
assert lumen_images._pick_image_model("draw a chibi character") == "flux-anime"
assert lumen_images._pick_image_model("manga style portrait") == "flux-anime"
def test_pick_image_model_fantasy():
assert lumen_images._pick_image_model("нарисуй дракона в фэнтезийном замке") == "dreamshaper"
assert lumen_images._pick_image_model("concept art of an elf wizard") == "dreamshaper"
assert lumen_images._pick_image_model("рыцарь на фоне волшебного леса") == "dreamshaper"
def test_pick_image_model_realism():
assert lumen_images._pick_image_model("сделай фотореалистичный портрет кота") == "flux-realism"
assert lumen_images._pick_image_model("realistic photo of a mountain") == "flux-realism"
assert lumen_images._pick_image_model("нарисуй кота как на фото") == "flux-realism"
def test_pick_image_model_quick_draft():
assert lumen_images._pick_image_model("быстрый набросок логотипа") == "turbo"
assert lumen_images._pick_image_model("quick sketch of a car") == "turbo"
def test_pick_image_model_falls_back_to_default_for_generic_prompt():
assert lumen_images._pick_image_model("космическая станция на орбите Земли") == lumen_images.DEFAULT_HF_IMAGE_MODEL
assert lumen_images._pick_image_model("кот на подоконнике") == lumen_images.DEFAULT_HF_IMAGE_MODEL
def test_pick_image_model_empty_prompt_returns_default():
assert lumen_images._pick_image_model("") == lumen_images.DEFAULT_HF_IMAGE_MODEL
def test_pick_image_model_style_keyword_wins_over_quick_keyword():
# Стилевой сигнал важнее просьбы "побыстрее", если оба есть в одном промпте —
# аниме проверяется раньше черновика/скетча (см. докстринг _pick_image_model).
assert lumen_images._pick_image_model("быстро нарисуй аниме-девушку") == "flux-anime"
def test_pick_image_model_case_insensitive():
assert lumen_images._pick_image_model("АНИМЕ ДЕВУШКА") == "flux-anime"
def test_pick_image_model_result_always_a_known_model():
# Регрессия на класс ошибок "эвристика вернула ID, которого нет в каталоге" —
# неважно, какой промпт, результат обязан быть валидным ключом HF_IMAGE_MODELS.
prompts = [
"нарисуй кота", "аниме", "фэнтези дракон", "реалистичное фото гор",
"быстрый скетч", "", "случайный текст без ключевых слов вообще",
]
for p in prompts:
assert lumen_images._pick_image_model(p) in lumen_images.HF_IMAGE_MODELS