File size: 9,951 Bytes
e1acc15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
"""Pre-window API rehearsal (CPU only): an image-like fake server, never a host."""
from __future__ import annotations

import ast
import io
import json
import urllib.error
import urllib.request
from email.message import Message
from pathlib import Path
from typing import cast

import pytest

from offload.launch.windows import pp4_admission_requests as api
from offload.launch.windows import pp4_api_rehearsal as r
from offload.prefill_maxlen.evidence import Json, record

EOS, STOP = 1, 7
SPEC_400 = 'The min_p and logit_bias sampling parameters are not yet supported with speculative decoding.'
IMAGE = Path('/opt/dsv41/data/src-image/vllm/sampling_params.py')
# The R16 (90f0278) stop request exactly as PP4-90f cmd/0132 sent it.
R16_STOP: dict[str, Json] = {'model': api.MODEL, 'prompt': 'Public arithmetic: 1 + 1 =', 'temperature': 1, 'top_p': 1,
    'max_tokens': 8, 'seed': 4104, 'logit_bias': {str(STOP): 100}, 'ignore_eos': False, 'stop': ['!']}


class Reply(io.BytesIO):
    status = 200


class Image:
    """The image's request validation with speculative decoding on (sampling_params.py:1103-1116)."""
    def __init__(self, model: str = api.MODEL, down: bool = False, spec: bool = True) -> None:
        self.model, self.down, self.spec = model, down, spec
        self.bodies: list[tuple[str, dict[str, Json]]] = []

    def __call__(self, request: urllib.request.Request, timeout: float = 0) -> Reply:
        assert timeout == r.TIMEOUT_S
        if self.down:
            raise urllib.error.URLError('connection refused')
        endpoint = request.full_url.removeprefix('http://production.fixture')
        body = record(cast(Json, json.loads(cast(bytes, request.data)))) if request.data else {}
        self.bodies.append((endpoint, body))
        if self.spec and (body.get('logit_bias') or float(str(body.get('min_p', 0))) > 0):
            error = json.dumps({'error': {'message': SPEC_400, 'type': 'BadRequestError', 'param': None, 'code': 400}})
            raise urllib.error.HTTPError(request.full_url, 400, 'Bad Request', Message(), io.BytesIO(error.encode()))
        if endpoint == '/v1/models':
            return Reply(json.dumps({'data': [{'id': self.model}]}).encode())
        if endpoint == '/tokenize':
            return Reply(json.dumps({'tokens': [STOP]}).encode())
        if endpoint == '/v1/completions':
            forced = cast(list[int], body.get('allowed_token_ids') or [int(k) for k in record(body['logit_bias'])])
            assert forced in ([STOP], [EOS]) and int(str(body['max_tokens'])) <= r.MAX_TOKENS
            reason: Json = '!' if forced == [STOP] else None
            return Reply(json.dumps({'choices': [{'text': '', 'finish_reason': 'stop', 'stop_reason': reason}],
                                     'usage': {'completion_tokens': 1}}).encode())
        assert int(str(body['max_tokens'])) <= r.MAX_TOKENS and body.get('priority') == 10
        if body.get('stream'):
            return Reply(b'data: {"choices":[{"delta":{"role":"assistant"}}]}\n\ndata: {"choices":[{"delta":{"content":"1"}}]}\n\n')
        message: dict[str, Json] = {'content': '{"answer": "PP4"}'}
        finish = 'stop'
        if 'tools' in body:
            message = {'content': None, 'tool_calls': [{'function': {'name': 'report', 'arguments': '{"answer": "PP4"}'}}]}
        elif record(body['chat_template_kwargs']).get('thinking') is True:
            message, finish = {'content': None, 'reasoning': 'Seventeen'}, 'length'
        return Reply(json.dumps({'choices': [{'message': message, 'finish_reason': finish}],
                                 'usage': {'completion_tokens': 7}}).encode())


def execute(tmp_path: Path, monkeypatch: pytest.MonkeyPatch, image: Image) -> tuple[int, dict[str, Json]]:
    monkeypatch.setattr(urllib.request, 'urlopen', image)
    monkeypatch.setenv('WINDOW_COORDINATOR', 'Deepseek/coordinator')
    monkeypatch.setattr(r, 'source', lambda: {'commit': 'f'*40, 'dirty': False, 'sha256': {}})
    code = r.main(['--execute', '--url', 'http://production.fixture', '--eos', str(EOS), '--out', str(tmp_path/'rehearsal')])
    return code, record(cast(Json, json.loads((tmp_path/'rehearsal'/'rehearsal.json').read_text())))


def test_dry_run_never_sends_and_every_probe_is_tiny(monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None:
    def forbidden(*args: object, **kwargs: object) -> object: raise AssertionError('request in dry run')
    monkeypatch.setattr(urllib.request, 'urlopen', forbidden)
    assert r.main(['--eos', str(EOS), '--out', '/nonexistent/never-written']) == 0
    plan = record(cast(Json, json.loads(capsys.readouterr().out)))
    probes = [record(p) for p in cast(list[Json], plan['probes'])]
    assert [p['name'] for p in probes] == ['grammar', 'penalties', 'tokenize', 'stop', 'eos', r.CONTROL,
                                           'json', 'tool', 'reasoning', 'cancel']
    assert all(int(str(record(p['settings']).get('max_tokens', 0))) <= r.MAX_TOKENS for p in probes)
    assert plan['url'] == r.PRODUCTION == 'http://HEAD_IP:8000'


def test_rehearsal_sends_the_admissions_own_bodies() -> None:
    for name, endpoint, mode, body in r.plan(EOS, STOP):
        if name in ('stop', 'eos'):
            assert mode == 'exact' and body == dict(api.terminator_bodies(STOP, EOS))[name]
        elif name == r.CONTROL:
            assert mode == 'control' and api.sha(cast(Json, body)) == api.sha(cast(Json, R16_STOP))
        elif name == 'tokenize':
            assert body == api.TOKENIZE
        elif name == 'cancel':
            assert body == {**api.cancel_body(), 'max_tokens': r.MAX_TOKENS}
        else:
            assert mode == 'capped' and body == {**api.chat_body(*api.CHATS[name]), 'max_tokens': r.MAX_TOKENS}


def test_needs_the_coordinator_and_a_fresh_directory(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    monkeypatch.delenv('WINDOW_COORDINATOR', raising=False)
    with pytest.raises(ValueError, match='coordinator required'):
        r.main(['--execute', '--eos', '1', '--out', str(tmp_path/'x')])
    monkeypatch.setenv('WINDOW_COORDINATOR', 'Deepseek/coordinator')
    with pytest.raises(ValueError, match='fresh rehearsal directory'):
        r.main(['--execute', '--eos', '1', '--out', str(tmp_path)])


def test_production_down_is_no_answer_never_a_probe_verdict(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    code, result = execute(tmp_path, monkeypatch, Image(down=True))
    assert code == 1 and result['refused'] == [] and 'models' in cast(list[Json], result['no_answer'])
    assert any('not a probe verdict' in str(line) for line in cast(list[Json], result['reading']))


def test_wrong_served_model_fails(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    code, result = execute(tmp_path, monkeypatch, Image(model='other'))
    assert code == 1 and 'models' in cast(list[Json], result['semantic_failures'])


def test_responses_are_held_privately(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    execute(tmp_path, monkeypatch, Image())
    held = tmp_path/'rehearsal'/'responses.jsonl'
    assert held.stat().st_mode & 0o777 == 0o600
    assert [record(cast(Json, json.loads(line)))['name'] for line in held.read_text().splitlines()][:3] == ['grammar', 'penalties', 'tokenize']


def test_fixed_probes_pass_and_the_r16_control_confirms_0132(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    code, result = execute(tmp_path, monkeypatch, Image())
    assert code == 0 and result['verdict'] == 'PASS' and result['cause_confirmed'] is True and result['refused'] == []
    rows = {str(record(p)['name']): record(p) for p in cast(list[Json], result['probes'])}
    assert all(rows[n]['check'] == 'pass' for n in ('models', 'grammar', 'penalties', 'tokenize', 'stop', 'eos', 'json', 'tool', 'cancel'))
    assert rows['stop']['stop_reason'] == '!' and rows['eos']['stop_reason'] is None
    assert rows[r.CONTROL]['status'] == 400 and SPEC_400 in str(rows[r.CONTROL]['error_body'])
    assert str(rows['reasoning']['check']).startswith('not-run: capped')


def test_control_accepted_says_cause_not_reproduced(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    code, result = execute(tmp_path, monkeypatch, Image(spec=False))
    assert code == 0 and result['cause_confirmed'] is False
    assert any('CAUSE NOT REPRODUCED' in str(line) for line in cast(list[Json], result['reading']))


def test_a_refused_probe_reads_probe_wrong_for_image(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
    monkeypatch.setattr(api, 'terminator_bodies', lambda stop, eos: (('stop', R16_STOP), ('eos', {**R16_STOP, 'stop': []})))
    code, result = execute(tmp_path, monkeypatch, Image())
    assert code == 1 and result['refused'] == ['stop', 'eos']
    assert str(cast(list[Json], result['reading'])[0]).startswith('PROBE WRONG FOR THIS IMAGE')


def test_no_admission_probe_carries_a_field_the_image_refuses_under_spec_decode() -> None:
    bodies = [api.chat_body(*api.CHATS[n]) for n in api.CHATS] + [b for _, b in api.terminator_bodies(STOP, EOS)]
    for body in [*bodies, api.cancel_body(), api.TOKENIZE]:
        assert not body.get('logit_bias') and float(str(body.get('min_p', 0))) == 0
    assert [b['allowed_token_ids'] for _, b in api.terminator_bodies(STOP, EOS)] == [[STOP], [EOS]]


@pytest.mark.skipif(not IMAGE.exists(), reason='image source copy only on Controller')
def test_refused_fields_match_the_image_spec_decode_check() -> None:
    tree = ast.parse(IMAGE.read_text())
    check = next(n for n in ast.walk(tree) if isinstance(n, ast.FunctionDef) and n.name == '_validate_spec_decode')
    branch = next(n for n in check.body if isinstance(n, ast.If) and isinstance(n.test, ast.BoolOp))
    fields = {n.attr for n in ast.walk(branch.test) if isinstance(n, ast.Attribute)}
    assert fields == set(api.SPEC_DECODE_REFUSED)
    assert any(isinstance(n, ast.Raise) for n in ast.walk(branch))