File size: 1,630 Bytes
421b8c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import json

import pytest

from cism.cli import main
from cism.engine import Engine
from test_engine import make_engine


def test_inspect(monkeypatch, capsys):
    engine, _ = make_engine()
    monkeypatch.setattr(Engine, "from_pretrained", lambda *args, **kwargs: engine)
    assert main(["inspect", "fake-model"]) == 0
    assert json.loads(capsys.readouterr().out)["model"] == "fake-model"


def test_generate(monkeypatch, capsys):
    engine, _ = make_engine()
    monkeypatch.setattr(Engine, "from_pretrained", lambda *args, **kwargs: engine)
    assert main(["generate", "fake-model", "--max-tokens", "2"]) == 0
    assert capsys.readouterr().out == "<3><4>\n"


def test_cache_report(monkeypatch, capsys):
    engine, native = make_engine()
    monkeypatch.setattr(Engine, "from_pretrained", lambda *args, **kwargs: engine)
    assert main(["cache-report", "fake-model", "--decode-tokens", "2", "--scrub-mb", "1"]) == 0
    report = json.loads(capsys.readouterr().out)
    assert report["decode_bottleneck"]
    assert report["residency"]
    assert report["warm_scan_gbps"] > 0 and report["cold_scan_gbps"] > 0
    assert native.scans >= 25


def test_invalid_bench(capsys):
    with pytest.raises(SystemExit) as error:
        main(["bench", "fake-model", "--runs", "0"])
    assert error.value.code == 2


def test_import_error_is_actionable(monkeypatch, capsys):
    def fail(*args, **kwargs):
        raise ValueError("Unsupported architecture")
    monkeypatch.setattr(Engine, "from_pretrained", fail)
    assert main(["inspect", "fake-model"]) == 1
    assert "Unsupported architecture" in capsys.readouterr().err