247 lines
8.9 KiB
Markdown
247 lines
8.9 KiB
Markdown
# Тест-кейсы: Скилл `image-gen`
|
||
|
||
---
|
||
created: 2026-05-24
|
||
---
|
||
|
||
## TC-01: Базовая генерация — один объект, дефолтная модель
|
||
|
||
**Запрос пользователя:** «сгенерируй фото блондинки»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Агент матчит шаблон `blonde_woman`
|
||
2. Промпт = `base(blonde_woman)` + качественные усилители из шаблона
|
||
3. Модель: `recraft/recraft-v4.1-pro` (дефолт)
|
||
4. Aspect ratio: 9:16 (дефолт)
|
||
5. Negative prompt из `params/models.md`
|
||
6. Картинка отправлена в TG с подписью: `🎨 Model: recraft/recraft-v4.1-pro | 📝 Блондинка`
|
||
7. Агент спрашивает: «Сохранить в избранное?»
|
||
|
||
**Проверка:** картинка в Telegram, вертикальная ✅
|
||
|
||
---
|
||
|
||
## TC-02: Объект + локация
|
||
|
||
**Запрос:** «сгенерируй фото блондинки в парке»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Матчит: `blonde_woman` + `park`
|
||
2. Промпт = `base(blonde_woman)` + `base(park)` + merged контекст
|
||
3. Дефолтная модель, 9:16
|
||
|
||
**Проверка:** на фото — блондинка на фоне парка ✅
|
||
|
||
---
|
||
|
||
## TC-03: Объект + локация + стиль
|
||
|
||
**Запрос:** «сгенерируй портрет блондинки в парке»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Матчит: `blonde_woman` + `park` + стиль `portrait`
|
||
2. Промпт = `base(blonde_woman)` + `base(park)` + `style(portrait)`
|
||
3. Aspect ratio: остаётся 9:16 (портрет вертикальный — ок)
|
||
|
||
**Проверка:** мягкий боке, 85mm-look, блондинка в парке ✅
|
||
|
||
---
|
||
|
||
## TC-04: Явное указание модели
|
||
|
||
**Запрос:** «сгенерируй фото блондинки через recraft-v4»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Модель: `recraft/recraft-v4` (явно указана)
|
||
2. Остальное — дефолты
|
||
|
||
**Проверка:** подпись содержит `recraft-v4`, не `recraft-v4.1-pro` ✅
|
||
|
||
---
|
||
|
||
## TC-05: Мульти-модель — группа v4.1
|
||
|
||
**Запрос:** «сгенерируй блондинку через все модели v4.1»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. `--model group:all_v4.1` → разворачивается в 4 модели
|
||
2. Один и тот же промпт отправляется в каждую модель
|
||
3. В TG приходят 4 картинки, каждая с подписью своей модели
|
||
|
||
**Проверка:** 4 фото в TG с разными моделями в подписи ✅
|
||
|
||
---
|
||
|
||
## TC-06: Мульти-модель — все recraft
|
||
|
||
**Запрос:** «сгенерируй через все модели recraft»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. `--model group:all` → 7 моделей
|
||
2. 7 картинок в TG
|
||
|
||
**Проверка:** 7 фото, все с разными моделями ✅
|
||
|
||
---
|
||
|
||
## TC-07: Несколько вариантов от одной модели
|
||
|
||
**Запрос:** «сгенерируй 3 варианта фото блондинки»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. `--count 3`, дефолтная модель
|
||
2. 3 картинки с одного промпта (разный seed)
|
||
3. Каждая отправлена отдельно в TG
|
||
|
||
**Проверка:** 3 фото в TG, одна и та же модель в подписи ✅
|
||
|
||
---
|
||
|
||
## TC-08: Нестандартные детали без шаблона
|
||
|
||
**Запрос:** «сгенерируй фото гор на закате»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Нет шаблона для "горы" — агент использует детали из запроса напрямую
|
||
2. Промпт = перевод запроса на английский + quality enhancers
|
||
3. Не падает с ошибкой
|
||
|
||
**Проверка:** горы на закате, нет артефактов ✅
|
||
|
||
---
|
||
|
||
## TC-09: Горизонтальный формат
|
||
|
||
**Запрос:** «сгенерируй горизонтальное фото пляжа»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Слово "горизонтальное" → aspect ratio `16:9`
|
||
2. Промпт матчит шаблон `beach`
|
||
|
||
**Проверка:** фото горизонтальное (landscape) ✅
|
||
|
||
---
|
||
|
||
## TC-10: Квадратный формат
|
||
|
||
**Запрос:** «сгенерируй квадратное фото кафе»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. "квадратное" → aspect ratio `1:1`
|
||
2. Шаблон `cafe`
|
||
|
||
**Проверка:** квадратное фото ✅
|
||
|
||
---
|
||
|
||
## TC-11: Сохранение в избранное
|
||
|
||
**Запрос:** «сгенерируй блондинку в лесу»
|
||
→ Картинка отправлена
|
||
→ Агент: «Сохранить в избранное?»
|
||
**Ответ:** «да»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. В `params/favorites.md` добавлена запись:
|
||
- дата, краткое описание, модель, полный промпт, negative prompt
|
||
|
||
**Проверка:** запись появилась в `params/favorites.md` ✅
|
||
|
||
---
|
||
|
||
## TC-12: Negative prompt работает
|
||
|
||
**Запрос:** «сгенерируй фото девушки в полный рост»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Negative prompt включён: `deformed limbs, distorted hands, extra fingers...`
|
||
2. Руки и ноги выглядят нормально
|
||
|
||
**Проверка:** нет деформаций рук/ног ✅ (субъективная оценка)
|
||
|
||
---
|
||
|
||
## TC-13: A2E.ai провайдер
|
||
|
||
**Запрос:** «сгенерируй фото блондинки через a2e»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. `--provider a2e`
|
||
2. Вызывается A2E API (не OpenRouter)
|
||
3. Картинка сохранена и отправлена в TG
|
||
|
||
**Проверка:** картинка пришла, в подписи видно что это A2E ✅
|
||
|
||
---
|
||
|
||
## TC-14: Кинематографический стиль
|
||
|
||
**Запрос:** «сгенерируй кинематографическое фото города ночью»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Стиль `cinematic` + шаблон `city` + детали "ночью" (night)
|
||
2. Промпт: `cinematic shot, dramatic lighting, city at night...`
|
||
|
||
**Проверка:** ночной город, кинематографический вид ✅
|
||
|
||
---
|
||
|
||
## TC-15: Несуществующий шаблон + несуществующий стиль
|
||
|
||
**Запрос:** «сгенерируй фото дракона в стиле акварели»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Нет шаблона "дракон", нет стиля "акварель"
|
||
2. Агент переводит запрос на английский напрямую: `dragon, watercolor style...`
|
||
3. Не падает, генерирует
|
||
|
||
**Проверка:** фото дракона в акварельном стиле ✅
|
||
|
||
---
|
||
|
||
## TC-16: Граничный случай — очень короткий запрос
|
||
|
||
**Запрос:** «сгенерируй»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Агент уточняет: «Что именно сгенерировать?»
|
||
2. Не вызывает скрипт с пустым промптом
|
||
|
||
**Проверка:** агент задал уточняющий вопрос ✅
|
||
|
||
---
|
||
|
||
## TC-17: Граничный случай — запрос на английском
|
||
|
||
**Запрос:** «generate photo of blonde in a park»
|
||
|
||
**Ожидаемое поведение:**
|
||
1. Скилл триггерится на английский запрос тоже
|
||
2. Матчит `blonde_woman` + `park`
|
||
|
||
**Проверка:** сгенерировано нормально ✅
|
||
|
||
---
|
||
|
||
## Чеклист для финальной приёмки
|
||
|
||
| TC | Описание | Статус |
|
||
|----|----------|--------|
|
||
| TC-01 | Базовая генерация | ⬜ |
|
||
| TC-02 | Объект + локация | ⬜ |
|
||
| TC-03 | Объект + локация + стиль | ⬜ |
|
||
| TC-04 | Явная модель | ⬜ |
|
||
| TC-05 | Группа all_v4.1 | ⬜ |
|
||
| TC-06 | Все модели | ⬜ |
|
||
| TC-07 | 3 варианта | ⬜ |
|
||
| TC-08 | Без шаблона | ⬜ |
|
||
| TC-09 | Горизонтальный | ⬜ |
|
||
| TC-10 | Квадратный | ⬜ |
|
||
| TC-11 | Избранное | ⬜ |
|
||
| TC-12 | Negative prompt | ⬜ |
|
||
| TC-13 | A2E провайдер | ⬜ |
|
||
| TC-14 | Кино стиль | ⬜ |
|
||
| TC-15 | Нет шаблона/стиля | ⬜ |
|
||
| TC-16 | Пустой запрос | ⬜ |
|
||
| TC-17 | Запрос на английском | ⬜ |
|