Spaces:
Running
Running
| """ | |
| 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 | |