Files
aigen/tests/studio2-lora-memory.test.mjs

70 lines
4.5 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {reactive,watch} from 'vue'
import {inferLoraUse,filterLorasForUse,filterLorasForStudio,filterLoraStackForUse} from '../utils/loras.ts'
import {createLoraMemory,loraUse} from '../shared/studio2/lora-memory.mjs'
import {restoreAll,restoreAsset,bindClip,extendSelected,useAsHero,useAsSource} from '../shared/studio2/input.mjs'
const stack=name=>[{name:name+'.safetensors',strengthModel:.6,strengthClip:.35}]
test('engine token matrix uses paths and names, omits unknown and system picker entries',()=>{
const cases={'xaigen-klein_car':'flux','klein/style':'flux','XAIgen-flux_test':'flux','Flux2-Klein/test':'flux','MiniMax/car':'minimax','folder/LTX_style':'ltx','xiagen-Krea_look':'krea','xaigen-krea/style':'krea','unlabelled':null}
for(const [name,use] of Object.entries(cases)) {
assert.deepEqual(inferLoraUse(name+'.safetensors'),use?[use]:null)
for(const current of ['flux','krea','minimax','ltx']) assert.equal(filterLorasForUse([name+'.safetensors'],current).length,use===current?1:0)
}
const restricted=['xaigen-klein.safetensors','XAIgen-MiniMax.safetensors','xiagen-Krea.safetensors']
assert.deepEqual(filterLorasForStudio(restricted,false),[])
assert.deepEqual(filterLoraStackForUse(stack('xaigen-klein'),'flux',false),[])
assert.deepEqual(filterLoraStackForUse(stack('LTX'),'ltx',false),[])
for(const [name,use] of [['minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16','minimax'],['ltx-2.3-22b-distilled','ltx'],['Flux2-Klein-9B-consistency-V2','flux']]) assert.deepEqual(filterLorasForUse([name+'.safetensors'],use),[])
assert.deepEqual(filterLoraStackForUse(stack('unlabelled'),'flux',true),stack('unlabelled'))
})
function bench() {
const data=new Map(),storage={getItem:k=>data.get(k),setItem:(k,v)=>data.set(k,v)}
const memory=createLoraMemory(true,storage)
const form=reactive({mode:'generate',engine:'flux',settings:{loraStack:[]}})
const stop=watch(()=>[loraUse(form),form.settings.loraStack],()=>memory.sync(form),{deep:true,flush:'sync'})
memory.sync(form)
return {form,memory,storage,stop}
}
test('reactive task switches remember four independent stacks and both strengths',()=>{
const {form,memory,storage,stop}=bench()
form.settings.loraStack=stack('klein_car_bee')
form.settings.loraStack[0].strengthClip=.8
form.mode='video';form.engine='minimax'
assert.deepEqual(form.settings.loraStack,[])
form.settings.loraStack=stack('MiniMax_style')
form.engine='ltx';assert.deepEqual(form.settings.loraStack,[])
form.settings.loraStack=stack('LTX_style')
form.mode='edit';form.engine='flux'
assert.equal(form.settings.loraStack[0].name,'klein_car_bee.safetensors')
assert.equal(form.settings.loraStack[0].strengthClip,.8)
form.engine='krea';assert.deepEqual(form.settings.loraStack,[])
form.settings.loraStack=stack('Krea_style')
form.mode='video';form.engine='minimax'
assert.deepEqual(form.settings.loraStack,stack('MiniMax_style'))
Object.assign(form,useAsHero(form,{id:'image'}),useAsSource(form,{id:'source'}))
assert.deepEqual(form.settings.loraStack,stack('MiniMax_style'))
const fresh=createLoraMemory(true,storage),other={mode:'generate',engine:'krea',settings:{loraStack:[]}}
fresh.sync(other);assert.deepEqual(other.settings.loraStack,stack('Krea_style'))
stop()
})
test('Use as input and Extend copy saved stacks, filter wrong engines, and fall back only when saved empty',()=>{
const {form,memory,stop}=bench()
form.settings.loraStack=stack('klein_remembered')
const still={id:'still',kind:'still',studio2:{engine:'flux',mode:'edit',settings:{loraStack:[...stack('klein_saved'),...stack('MiniMax_wrong')]}}}
Object.assign(form,restoreAll(form,still,true,memory))
assert.deepEqual(form.settings.loraStack,stack('klein_saved'))
const clip={id:'clip',kind:'clip',studio2:{engine:'minimax',settings:{loraStack:[...stack('MiniMax_saved'),...stack('klein_wrong')]}}}
Object.assign(form,extendSelected(form,clip,true,memory))
assert.deepEqual(form.settings.loraStack,stack('MiniMax_saved'))
Object.assign(form,restoreAll(form,{...still,studio2:{...still.studio2,settings:{loraStack:[]}}},true,memory))
assert.deepEqual(form.settings.loraStack,stack('klein_saved'))
Object.assign(form,bindClip(form,{id:'empty',settings:{loraStack:[]}},true,memory))
assert.deepEqual(form.settings.loraStack,stack('MiniMax_saved'))
const legacy=restoreAsset(form,{id:'old-still',kind:'still',engine:'krea',settings:{loraStack:stack('Krea_saved')}},true,memory)
assert.equal(legacy.engine,'krea');assert.deepEqual(legacy.settings.loraStack,stack('Krea_saved'))
stop()
})