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() })