import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { userAsksLook, userAsksNoGenerate, userAsksGenerate, resolveTurnIntent, packWantsVision, } from '../src/intent.js'; describe('intent.js', () => { it('userAsksLook detects critique RU', () => { assert.equal(userAsksLook('посмотри на результат'), true); assert.equal(userAsksLook('нарисуй лису'), false); }); it('userAsksNoGenerate vetoes remember / no-gen', () => { assert.equal(userAsksNoGenerate('только запомни промпт'), true); assert.equal(userAsksNoGenerate('не генерируй'), true); assert.equal(userAsksNoGenerate('нарисуй лису'), false); }); it('userAsksGenerate detects сгенерируй', () => { assert.equal(userAsksGenerate('сгенерируй'), true); assert.equal(userAsksGenerate('нарисуй лису'), true); assert.equal(userAsksGenerate('Давай сделаем изображение красивой рыжеволосой девушки'), true); assert.equal(userAsksGenerate('Привет, давай фотографию 19-летней девушки на кастинге'), true); assert.equal(userAsksGenerate('создай фото как на референсе — рыжая в кожанке'), true); assert.equal(userAsksGenerate('сделай фото портрет'), true); assert.equal(userAsksGenerate('create a photo of a redhead'), true); assert.equal(userAsksGenerate('как сгенерировать изображение в swarm'), false); assert.equal(userAsksGenerate('а ты знаешь какие то промпты с civitai'), false); assert.equal(userAsksGenerate('что ты умеешь'), false); assert.equal(userAsksGenerate('не генерируй'), false); }); it('resolveTurnIntent uses user generate ask + veto, not model flag alone', () => { const lookOnly = resolveTurnIntent({ look_at: ['generate'] }, 'что не так с кадром?', {}); assert.equal(lookOnly.generate, false); assert.equal(lookOnly.look, true); const gen = resolveTurnIntent({ prompt: 'fox', generate: true }, 'нарисуй лису', {}); assert.equal(gen.generate, true); const userGen = resolveTurnIntent({ prompt: 'A slender redhead in leather' }, 'сгенерируй', {}); assert.equal(userGen.generate, true); const createPhoto = resolveTurnIntent( { prompt: '19yo redhead at casting, studio light' }, 'создай фото рыжей девушки на кастинге', {}, ); assert.equal(createPhoto.generate, true); const promptOnly = resolveTurnIntent( { prompt: 'fox in snow' }, 'создай фото лисы', {}, ); assert.equal(promptOnly.generate, true); const vetoed = resolveTurnIntent({ prompt: 'fox', generate: true }, 'только запомни промпт', {}); assert.equal(vetoed.generate, false); assert.equal(vetoed.vetoed, true); const chatOnly = resolveTurnIntent({ prompt: 'fox' }, 'что ты умеешь про генерацию?', {}); assert.equal(chatOnly.generate, false); const falseDump = resolveTurnIntent( { prompt: 'civitai example', generate: true }, 'а ты знаешь какие то промпты с civitai', {}, ); assert.equal(falseDump.generate, false); assert.equal(falseDump.modelAsked, true); const sdelаем = resolveTurnIntent( { prompt: 'A 19-year-old redhead', generate: true }, 'Давай сделаем изображение красивой рыжеволосой девушки', {}, ); assert.equal(sdelаем.generate, true); }); it('packWantsVision for critique pack', () => { assert.equal(packWantsVision('critique_image'), true); assert.equal(packWantsVision('ordinary'), false); }); });