Files
Azornes-Comfyui-Model-Resolver/tests/test_base_model_alias_methods.mjs

85 lines
3.0 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { baseModelAliasMethods } from '../web/resolver/search/base_model_alias_methods.js';
function createDialog(baseModels) {
return {
...baseModelAliasMethods,
baseModels,
hasModelExtension(value) {
return /\.(?:safetensors|ckpt|pt|pth|bin|gguf)$/i.test(String(value));
},
};
}
test('base model aliases use configured models and preserve aliases', () => {
const dialog = createDialog({
base_models: [
{ name: 'Custom Model', aliases: ['custom', 'custom-model'] },
{ name: 'No Alias Model' },
],
});
assert.deepEqual(dialog.getBaseModelAliases(), [
{ value: 'Custom Model', aliases: ['custom', 'custom-model'] },
{ value: 'No Alias Model', aliases: [] },
]);
});
test('base model aliases fall back to the built-in catalog', () => {
const dialog = createDialog({ base_models: [] });
const aliases = dialog.getBaseModelAliases();
assert.ok(aliases.some(entry => entry.value === 'Flux.1 D'));
assert.ok(aliases.some(entry => entry.value === 'SDXL 1.0'));
assert.ok(aliases.every(entry => Array.isArray(entry.aliases)));
});
test('base model tokens normalize punctuation and generate compatible variants', () => {
const dialog = createDialog({ base_models: [] });
assert.equal(dialog.normalizeBaseModelToken(' Flux.1 D '), 'flux1d');
assert.deepEqual([...dialog.getBaseModelTokenVariants('SDXL 1.0')].sort(), ['sdxl1', 'sdxl10']);
assert.deepEqual([...dialog.getBaseModelTokenVariants('Flux.1 D')].sort(), ['flux1d', 'fluxd']);
assert.deepEqual([...dialog.getBaseModelTokenVariants('')], []);
});
test('base model aliases resolve exact and fuzzy matches without false positives', () => {
const dialog = createDialog({
base_models: [
{ name: 'Flux.1 Krea', aliases: ['flux 1 krea'] },
{ name: 'Flux.1 D', aliases: ['flux1d'] },
{ name: 'Pony', aliases: ['ponyxl'] },
],
});
assert.equal(dialog.resolveBaseModelAliasExact('FLUX KREA'), 'Flux.1 Krea');
assert.equal(dialog.resolveBaseModelAlias('FLUX KREA'), 'Flux.1 Krea');
assert.equal(dialog.resolveBaseModelAliasExact('flux 1 krea'), 'Flux.1 Krea');
assert.equal(dialog.resolveBaseModelAlias('flux1d-dev'), 'Flux.1 D');
assert.equal(dialog.resolveBaseModelAlias('pony-xl'), 'Pony');
assert.equal(dialog.resolveBaseModelAlias('unknown architecture'), '');
assert.equal(dialog.resolveBaseModelAlias(''), '');
});
test('base model aliases resolve directory context while ignoring the model filename', () => {
const dialog = createDialog({
base_models: [
{ name: 'Flux.1 Krea', aliases: ['flux 1 krea'] },
{ name: 'SDXL 1.0', aliases: ['sdxl'] },
],
});
assert.equal(
dialog.resolveBaseModelAliasFromPath('models/Flux.1 Krea/checkpoint.safetensors'),
'Flux.1 Krea'
);
assert.equal(
dialog.resolveBaseModelAliasFromPath('models/SDXL/checkpoint.ckpt'),
'SDXL 1.0'
);
assert.equal(dialog.resolveBaseModelAliasFromPath('checkpoint.safetensors'), '');
assert.equal(dialog.resolveBaseModelAliasFromPath(''), '');
});