[Refactor] Rework modelStore and ModelLibrarySidebarTab (#1350)

* nit

* Rename

* nit

* Move load model folders to app level

* Various fixes

* nit

* nit

* wip

* nit

* nit

* nit

* Split

* nit

* Add back spinner

* nit

* nit

* Add refresh button

* nit

* nit

* Preserve model folder order

* Avoid order change on folder open
This commit is contained in:
Chenlei Hu
2024-10-28 21:23:53 -04:00
committed by GitHub
parent 757f0ced81
commit 4582c71583
8 changed files with 162 additions and 148 deletions

View File

@@ -6,6 +6,7 @@ import { api } from '@/scripts/api'
jest.mock('@/scripts/api', () => ({
api: {
getModels: jest.fn(),
getModelFolders: jest.fn(),
viewMetadata: jest.fn()
}
}))
@@ -16,6 +17,7 @@ function enableMocks() {
'sdv15.safetensors',
'noinfo.safetensors'
])
;(api.getModelFolders as jest.Mock).mockResolvedValue(['checkpoints', 'vae'])
;(api.viewMetadata as jest.Mock).mockImplementation((_, model) => {
if (model === 'noinfo.safetensors') {
return Promise.resolve({})
@@ -37,14 +39,15 @@ function enableMocks() {
describe('useModelStore', () => {
let store: ReturnType<typeof useModelStore>
beforeEach(() => {
beforeEach(async () => {
setActivePinia(createPinia())
store = useModelStore()
})
it('should load models', async () => {
enableMocks()
const folderStore = await store.getModelsInFolderCached('checkpoints')
await store.loadModelFolders()
const folderStore = await store.getLoadedModelFolder('checkpoints')
expect(folderStore).not.toBeNull()
if (!folderStore) return
expect(Object.keys(folderStore.models).length).toBe(3)
@@ -52,7 +55,8 @@ describe('useModelStore', () => {
it('should load model metadata', async () => {
enableMocks()
const folderStore = await store.getModelsInFolderCached('checkpoints')
await store.loadModelFolders()
const folderStore = await store.getLoadedModelFolder('checkpoints')
expect(folderStore).not.toBeNull()
if (!folderStore) return
const model = folderStore.models['sdxl.safetensors']
@@ -69,7 +73,8 @@ describe('useModelStore', () => {
it('should handle no metadata', async () => {
enableMocks()
const folderStore = await store.getModelsInFolderCached('checkpoints')
await store.loadModelFolders()
const folderStore = await store.getLoadedModelFolder('checkpoints')
expect(folderStore).not.toBeNull()
if (!folderStore) return
const model = folderStore.models['noinfo.safetensors']
@@ -84,8 +89,9 @@ describe('useModelStore', () => {
it('should cache model information', async () => {
enableMocks()
const folderStore1 = await store.getModelsInFolderCached('checkpoints')
const folderStore2 = await store.getModelsInFolderCached('checkpoints')
await store.loadModelFolders()
await store.getLoadedModelFolder('checkpoints')
await store.getLoadedModelFolder('checkpoints')
expect(api.getModels).toHaveBeenCalledTimes(1)
})
})