2024-11-20 09:24:58 +08:00
|
|
|
import subprocess
|
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LlamafileCMDTest(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.model_id = 'llamafile-club/mock-llamafile-repo'
|
|
|
|
|
self.invalid_model_id = 'llamafile-club/mock-no-valid-llamafile-repo'
|
|
|
|
|
self.cmd = 'llamafile'
|
|
|
|
|
|
|
|
|
|
def test_basic(self):
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
# default accuracy is 'q4_k_m'
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-Q4_K_M.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
|
|
|
|
def test_given_accuracy(self):
|
|
|
|
|
accuracy = 'q8_0'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --accuracy {accuracy}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-q8_0.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
2024-12-03 21:25:18 +08:00
|
|
|
accuracy = 'Q2_K'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --accuracy {accuracy}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-Q2_K.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
|
|
|
|
accuracy = 'q2_k'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --accuracy {accuracy}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-Q2_K.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
2024-11-20 09:24:58 +08:00
|
|
|
def test_given_file(self):
|
|
|
|
|
file = 'My-Model-14B-FP16.llamafile'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --file {file}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-FP16.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
|
|
|
|
def test_given_both_accuracy_and_file(self):
|
|
|
|
|
accuracy = 'q8_0'
|
|
|
|
|
file = 'My-Model-14B-FP16.llamafile'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --file {file} --accuracy {accuracy}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
# cannot provide accuracy and file at the same time
|
2025-06-05 09:54:45 +03:00
|
|
|
self.assertNotEqual(stat, 0)
|
2024-11-20 09:24:58 +08:00
|
|
|
|
|
|
|
|
def test_no_match_llamafile(self):
|
|
|
|
|
accuracy = 'not-exist'
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --accuracy {accuracy}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'No matched llamafile found in repo, choosing the first llamafile in repo'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue('Launching model with llamafile' in output)
|
|
|
|
|
|
|
|
|
|
def test_invalid_repo(self):
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.invalid_model_id}'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
print(output)
|
2025-06-05 09:54:45 +03:00
|
|
|
self.assertNotEqual(stat, 0)
|
2024-11-20 09:24:58 +08:00
|
|
|
self.assertTrue('Cannot locate a valid llamafile in repo' in output)
|
|
|
|
|
|
|
|
|
|
def test_no_execution(self):
|
|
|
|
|
cmd = f'python -m modelscope.cli.cli {self.cmd} --model {self.model_id} --launch False'
|
|
|
|
|
stat, output = subprocess.getstatusoutput(cmd)
|
|
|
|
|
self.assertEqual(stat, 0)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'llamafile matching criteria found: [My-Model-14B-Q4_K_M.llamafile]'
|
|
|
|
|
in output)
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
'No Launching. Llamafile model downloaded to' in output)
|