31 lines
2.2 KiB
Python
31 lines
2.2 KiB
Python
import unittest
|
|
from unittest.mock import patch,Mock
|
|
from catalog import capabilities,file_role
|
|
from profiles import chat_parameters
|
|
from test_inference import WorkerTests
|
|
|
|
class CapabilitiesTests(unittest.TestCase):
|
|
def test_unknown_is_not_negative_or_name_guess(self):
|
|
self.assertEqual(capabilities({'id':'org/vision-tools'})['vision'],'Unbekannt')
|
|
self.assertEqual(capabilities({'tags':['function-calling']})['tools'],'Hinweis laut Hub')
|
|
self.assertEqual(capabilities({'pipeline_tag':'image-text-to-text'})['vision'],'Hinweis laut Hub')
|
|
self.assertEqual(capabilities({'siblings':[{'rfilename':'mmproj-model.gguf'}]})['vision'],'Projektordatei vorhanden')
|
|
def test_projector_is_not_standalone_or_text_encoder(self):
|
|
self.assertEqual(file_role('mmproj-qwen3vl.gguf')['role'],'vision_projector');self.assertFalse(file_role('mmproj-qwen3vl.gguf')['profile_eligible'])
|
|
def test_projector_device_requires_selected_gpu(self):
|
|
with self.assertRaises(ValueError):chat_parameters({'vision_device':'GPU-missing'})
|
|
|
|
class ProjectorLaunchTests(WorkerTests):
|
|
def test_cpu_and_gpu_projector_flags_and_reserve(self):
|
|
for device in ('cpu','gpu-second'):
|
|
self.worker.stop();self.profile['parameters'].update(vision_projector='p',vision_device=device)
|
|
self.worker.catalog.entry=lambda ident:dict(id='p',file='mmproj.gguf',size=1024**3,role='vision_projector') if ident=='p' else self.entry
|
|
process=Mock();process.poll.return_value=None;http=Mock();http.getresponse.return_value.status=200
|
|
with self.patches(),patch('inference.probe',return_value=self.gpus),patch('inference.cgroup_headroom',return_value=32*1024**3),patch.object(self.worker,'_fit_command',return_value='CUDA0 9000 1000 1000\nCUDA1 2000 1000 1000\nHost 512 0 256\n'),patch('inference.subprocess.Popen',return_value=process) as launch,patch('inference.http.client.HTTPConnection',return_value=http),patch('inference.threading.Thread'):
|
|
self.worker.ensure(self.profile)
|
|
args=launch.call_args.args[0];self.assertIn('--mmproj',args)
|
|
if device=='cpu':self.assertIn('--no-mmproj-offload',args)
|
|
else:self.assertEqual(args[args.index('--mmproj-device')+1],'CUDA1');self.assertEqual(self.worker.memory_plan['gpus'][1]['required_mib'],7072)
|
|
self.worker.process=None
|
|
if __name__=='__main__':unittest.main()
|