Fix VoxCPM2 component recipe and clarify missing execution adapter
This commit is contained in:
1 parent
3cd9fa5750
commit
1f0fc42344
7 files changed
+102
-12
No files matched your search
@@ -0,0 +1,34 @@
|
||||
import tempfile,unittest
|
||||
from pathlib import Path
|
||||
from unittest.mock import Mock,patch
|
||||
from catalog import Catalog,file_role
|
||||
from profiles import Profiles,voice_recipe,VOXCPM2_COMPONENTS
|
||||
from execution_setup import assess
|
||||
class VoxCPMComponentsTests(unittest.TestCase):
|
||||
def test_recipe_uses_existing_files_and_requires_matching_revision(self):
|
||||
model=dict(id='main',kind='voice',repo='openbmb/VoxCPM2',file='model.safetensors',revision='a'*40,size=1)
|
||||
entries=[dict(id=role,kind='voice',repo=model['repo'],file=info['files'][0],revision=model['revision'],size=1) for role,info in VOXCPM2_COMPONENTS.items()]
|
||||
c=Mock();lookup={x['id']:x for x in [model]+entries};c.entry.side_effect=lambda id:lookup[id]
|
||||
c.status.return_value=dict(entries=entries);c.files.return_value=dict(repo=model['repo'],revision=model['revision'],files=[dict(name=x['file'],size=1) for x in entries],gated=False,license='apache-2.0')
|
||||
with tempfile.TemporaryDirectory() as d:
|
||||
p=Profiles(Path(d)/'profiles.json',c);p.rows=[dict(id='p',revision=1,name='Vox',kind='voice',model_id='main',parameters={})]
|
||||
data=p.components('main');c.files.assert_called_once_with(model['repo'],model['revision'])
|
||||
self.assertEqual(len(data['requirements']),5);self.assertFalse(data['worker_available']);self.assertTrue(all(len(x['available'])==1 for x in data['requirements']))
|
||||
p.assign(dict(id='p',revision=1,components={x['id']:x['id'] for x in entries}))
|
||||
status=p.status()['profiles'][0];self.assertFalse(status['runnable']);self.assertEqual(len(status['blockers']),1);self.assertIn('VoxCPM',status['blockers'][0])
|
||||
entries[0]['revision']='b'*40
|
||||
with self.assertRaises(ValueError):p._component(model,'vae','vae')
|
||||
def test_not_applied_to_arbitrary_voices_or_finetunes(self):
|
||||
for repo,file in [('other/VoxCPM2','model.safetensors'),('openbmb/VoxCPM2','other.safetensors')]:self.assertIsNone(voice_recipe(dict(kind='voice',repo=repo,file=file)))
|
||||
def test_roles_do_not_offer_auxiliary_files_as_main_models(self):
|
||||
self.assertEqual(file_role('audiovae.pth')['role'],'vae')
|
||||
for name in ('tokenizer.json','tokenizer_config.json'):
|
||||
self.assertEqual(file_role(name)['role'],'tokenizer');self.assertFalse(file_role(name)['profile_eligible'])
|
||||
def test_catalog_only_allows_reviewed_pth_source(self):
|
||||
metadata=dict(sha='a'*40,siblings=[dict(rfilename=name,size=10) for name in ['model.safetensors','audiovae.pth','arbitrary.pth','untrusted.py']],cardData={})
|
||||
with tempfile.TemporaryDirectory() as d,patch('catalog.metadata',return_value=metadata):
|
||||
c=Catalog(d);self.assertEqual([f['name'] for f in c.files('openbmb/VoxCPM2')['files']],['model.safetensors','audiovae.pth'])
|
||||
self.assertEqual([f['name'] for f in c.files('other/VoxCPM2')['files']],['model.safetensors'])
|
||||
def test_execution_does_not_claim_installed_audio_cpp_can_run_vox(self):
|
||||
result=assess(dict(kind='voice',repo='openbmb/VoxCPM2',file='model.safetensors'),dict(audio_cpp=True))
|
||||
self.assertEqual(result['family'],'VoxCPM2');self.assertEqual(result['state'],'adapter_missing');self.assertEqual(result['candidates'][0]['id'],'voxcpm');self.assertFalse(result['candidates'][0]['installation_available'])
|
||||
Reference in new issue
Block a user